From 7910977447b3b017c2e4566bcee02cbafeb5bdfa Mon Sep 17 00:00:00 2001 From: oldperl Date: Tue, 2 Jul 2019 12:13:34 +0000 Subject: [PATCH] init branch for 2.0 version --- branches/conlite20/LIZENZ.txt | 293 + branches/conlite20/README_.txt | 78 + branches/conlite20/cms/config.php | 52 + branches/conlite20/cms/css/basic-style.css | 523 + branches/conlite20/cms/css/conlite-demo.css | 136 + branches/conlite20/cms/css/index.php | 4 + branches/conlite20/cms/css/normalize.css | 530 + branches/conlite20/cms/dbfs.php | 66 + branches/conlite20/cms/error.php | 13 + branches/conlite20/cms/favicon.ico | Bin 0 -> 29038 bytes branches/conlite20/cms/front_content.php | 949 + .../conlite20/cms/front_crcloginform.inc.php | 153 + .../cms/images/SimpleGallery/ClosePopup.png | Bin 0 -> 2704 bytes .../cms/images/SimpleGallery/Loading.gif | Bin 0 -> 1849 bytes .../cms/images/SimpleGallery/NaviLeft.png | Bin 0 -> 1102 bytes .../images/SimpleGallery/NaviLeftDisabled.png | Bin 0 -> 1106 bytes .../cms/images/SimpleGallery/NaviRight.png | Bin 0 -> 1074 bytes .../SimpleGallery/NaviRightDisabled.png | Bin 0 -> 1116 bytes .../SimpleGallery/PopupImageNaviLeft.png | Bin 0 -> 2122 bytes .../SimpleGallery/PopupImageNaviRight.png | Bin 0 -> 2162 bytes .../cms/images/SimpleGallery/ZoomOverlay.png | Bin 0 -> 2583 bytes .../cms/images/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes .../cms/images/glyphicons-halflings.png | Bin 0 -> 12799 bytes .../ico/apple-touch-icon-114-precomposed.png | Bin 0 -> 9686 bytes .../ico/apple-touch-icon-144-precomposed.png | Bin 0 -> 14485 bytes .../ico/apple-touch-icon-57-precomposed.png | Bin 0 -> 2752 bytes .../ico/apple-touch-icon-72-precomposed.png | Bin 0 -> 5609 bytes .../cms/images/ico/social_icons_sprite.png | Bin 0 -> 26603 bytes branches/conlite20/cms/images/index.php | 4 + branches/conlite20/cms/images/logo-small.png | Bin 0 -> 3455 bytes branches/conlite20/cms/images/logo.png | Bin 0 -> 10376 bytes .../Modules/Contenido_NavMain_Util.class.php | 85 + .../Modules/Contenido_Sitemap_Util.class.php | 66 + .../conlite20/cms/includes/class.concache.php | 531 + .../cms/includes/class.input.helper.php | 573 + branches/conlite20/cms/includes/concache.php | 170 + .../cms/includes/functions.include.php | 40 + .../cms/includes/functions.navigation.php | 572 + branches/conlite20/cms/includes/rss.inc.php | 59 + branches/conlite20/cms/includes/rss_php.php | 160 + .../cms/includes/spider-it.functions.inc.php | 859 + branches/conlite20/cms/index.php | 5 + .../cms/js/flexslider/flexslider.css | 71 + .../js/flexslider/images/bg_direction_nav.png | Bin 0 -> 1866 bytes .../cms/js/flexslider/images/loader.gif | Bin 0 -> 673 bytes .../js/flexslider/jquery.flexslider-min.js | 38 + branches/conlite20/cms/js/index.php | 4 + .../cms/js/jquery.cookiesdirective.js | 294 + .../conlite20/cms/js/libs/jquery-1.9.0.min.js | 4 + .../cms/js/libs/modernizr-2.6.2.min.js | 4 + branches/conlite20/cms/js/main.js | 42 + branches/conlite20/cms/logs/index.php | 4 + branches/conlite20/cms/robots.txt | 2 + .../cms/templates/cl_flex_slider.html | 10 + .../cms/templates/cl_login_form.html | 9 + .../conlite20/cms/templates/cl_uuid_form.tpl | 14 + .../templates/cms_filelist_style_default.html | 18 + .../cms/templates/cms_teaser_style_block.html | 11 + .../cms/templates/cms_teaser_style_blog.html | 11 + .../cms/templates/contenido_header.html | 6 + .../conlite20/cms/templates/footnotes_1.html | 1 + .../conlite20/cms/templates/footnotes_2.html | 1 + branches/conlite20/cms/templates/header.html | 4 + .../conlite20/cms/templates/headline_h1.html | 1 + .../cms/templates/kontaktformular.html | 55 + .../cms/templates/login_form_loggedin.html | 5 + .../conlite20/cms/templates/logo_bottom.html | 1 + .../templates/navigation_meta_container.html | 4 + .../cms/templates/navigation_meta_item.html | 3 + .../cms/templates/navigation_standard.html | 8 + .../cms/templates/navigation_standard_li.html | 5 + .../cms/templates/navigation_standard_ul.html | 3 + .../cms/templates/newsletter_form.html | 31 + .../cms/templates/newsletter_handler.html | 1 + branches/conlite20/cms/templates/rss.html | 5 + .../conlite20/cms/templates/rss_template.html | 4 + .../cms/templates/rss_template_breit.html | 7 + .../conlite20/cms/templates/search_input.html | 7 + .../cms/templates/search_output.html | 13 + .../cms/templates/simple-gallery.html | 137 + .../cms/templates/sitemap_standard.html | 7 + .../cms/templates/sitemap_standard_li.html | 5 + .../cms/templates/sitemap_standard_ul.html | 3 + .../cms/templates/subheadline_h2.html | 1 + .../cms/templates/teaser-standard.html | 7 + .../conlite20/cms/templates/teaser_right.html | 7 + .../conlite20/cms/templates/text_html.html | 3 + .../cms/upload/Flexslider/basic-pic1.jpg | Bin 0 -> 149587 bytes .../cms/upload/Flexslider/basic-pic2.jpg | Bin 0 -> 129022 bytes .../cms/upload/Flexslider/basic-pic3.jpg | Bin 0 -> 129079 bytes .../cms/upload/Flexslider/basic-pic4.jpg | Bin 0 -> 54623 bytes .../cms/upload/Gallery/IMAGE_296.jpg | Bin 0 -> 251656 bytes .../conlite20/cms/upload/Gallery/PICT0004.JPG | Bin 0 -> 135998 bytes .../conlite20/cms/upload/Gallery/PICT0025.JPG | Bin 0 -> 160647 bytes .../conlite20/cms/upload/Gallery/PICT0082.JPG | Bin 0 -> 160199 bytes .../conlite20/cms/upload/Gallery/PICT0188.JPG | Bin 0 -> 149404 bytes .../cms/upload/Gallery/Terasse26.jpg | Bin 0 -> 176634 bytes branches/conlite20/conlib/auth.inc | 338 + branches/conlite20/conlib/ct_file.inc | 107 + branches/conlite20/conlib/ct_ldap.inc | 118 + branches/conlite20/conlib/ct_null.inc | 72 + branches/conlite20/conlib/ct_session.inc | 122 + branches/conlite20/conlib/ct_shm.inc | 117 + branches/conlite20/conlib/ct_sql.inc | 204 + branches/conlite20/conlib/db_mysql.inc | 436 + branches/conlite20/conlib/db_mysqli.inc | 519 + branches/conlite20/conlib/db_pdo_mysql.inc | 513 + branches/conlite20/conlib/db_sql_abstract.inc | 807 + branches/conlite20/conlib/index.php | 4 + branches/conlite20/conlib/local.php | 850 + branches/conlite20/conlib/page.inc | 110 + branches/conlite20/conlib/perm.inc | 678 + branches/conlite20/conlib/prepend.php | 69 + branches/conlite20/conlib/session.inc | 536 + branches/conlite20/conlite/.directory | 4 + .../conlite20/conlite/.htaccess_recommended | 30 + branches/conlite20/conlite/ajaxmain.php | 230 + branches/conlite20/conlite/backend_search.php | 781 + .../conlite20/conlite/cache/deprecated.txt | 2 + .../Contenido_Category.class.php | 906 + .../Contenido_Category_Articles.class.php | 458 + .../classes/Contenido_Category/Sample.php | 120 + .../Contenido_FrontendNavigation.class.php | 284 + ...ontenido_FrontendNavigation_Base.class.php | 157 + ...do_FrontendNavigation_Breadcrumb.class.php | 166 + .../Contenido_FrontendNavigation/Sample.php | 126 + .../classes/Debug/Debug_DevNull.class.php | 93 + .../classes/Debug/Debug_File.class.php | 128 + .../classes/Debug/Debug_Hidden.class.php | 110 + .../classes/Debug/Debug_Visible.class.php | 146 + .../classes/Debug/Debug_VisibleAdv.class.php | 291 + .../classes/Debug/DebuggerFactory.class.php | 76 + .../conlite/classes/Debug/IDebug.php | 42 + .../conlite/classes/Debug/Sample.php | 91 + .../classes/Url/Contenido_Url.class.php | 294 + .../UrlBuilder/Contenido_UrlBuilder.class.php | 98 + .../Contenido_UrlBuilderConfig.class.php | 122 + .../Contenido_UrlBuilderFactory.class.php | 80 + .../Contenido_UrlBuilder_Custom.class.php | 98 + .../Contenido_UrlBuilder_CustomPath.class.php | 131 + ...ontenido_UrlBuilder_Frontcontent.class.php | 132 + .../Contenido_UrlBuilder_MR.class.php | 401 + .../conlite/classes/UrlBuilder/Sample.php | 65 + .../abstract_classes/class.conuser.php | 238 + .../conlite/classes/cApi/class.action.php | 97 + .../conlite/classes/cApi/class.nav.main.php | 45 + .../conlite/classes/cApi/class.nav.sub.php | 31 + .../conlite/classes/cApi/class.stat.php | 80 + .../classes/cApi/class.stat_archive.php | 45 + .../classes/cApi/class.system_property.php | 90 + .../classes/cApi/class.upload.meta.php | 100 + .../conlite/classes/cApi/class.upload.php | 185 + .../conlite/classes/cHTML5/class.chtml.php | 473 + .../classes/cHTML5/class.chtml5.button.php | 50 + .../cHTML5/class.chtml5.list.element.php | 57 + .../classes/cHTML5/class.chtml5.list.php | 115 + .../classes/cHTML5/class.chtml5.meta.php | 45 + .../conlite/classes/class.action.php | 148 + .../conlite/classes/class.activeusers.php | 294 + .../conlite20/conlite/classes/class.ajax.php | 237 + .../conlite20/conlite/classes/class.area.php | 124 + .../conlite20/conlite/classes/class.art.php | 101 + .../classes/class.article.collector.php | 267 + .../conlite/classes/class.article.php | 734 + .../conlite/classes/class.artspec.php | 71 + .../conlite/classes/class.autoload.php | 288 + .../conlite/classes/class.backend.php | 378 + .../conlite20/conlite/classes/class.cat.php | 73 + .../conlite/classes/class.category.php | 108 + .../conlite20/conlite/classes/class.cec.php | 539 + .../conlite/classes/class.cec_hook.php | 423 + .../conlite/classes/class.chartable.php | 157 + .../conlite/classes/class.cl_db_backup.php | 337 + .../conlite/classes/class.client.php | 167 + .../conlite/classes/class.cms_date.php | 395 + .../conlite/classes/class.cms_filelist.php | 1140 + .../conlite/classes/class.cms_teaser.php | 1058 + .../conlite/classes/class.communications.php | 95 + .../conlite/classes/class.conuser.php | 895 + .../conlite20/conlite/classes/class.csv.php | 63 + .../conlite20/conlite/classes/class.dbfs.php | 397 + .../conlite20/conlite/classes/class.excel.php | 89 + .../conlite20/conlite/classes/class.form.php | 681 + .../conlite/classes/class.frontend.groups.php | 219 + .../conlite/classes/class.frontend.logic.php | 85 + .../classes/class.frontend.permissions.php | 153 + .../conlite/classes/class.frontend.users.php | 219 + .../conlite/classes/class.genericdb.php | 1831 ++ .../conlite20/conlite/classes/class.group.php | 428 + .../conlite/classes/class.htmlelements.php | 2027 ++ .../conlite/classes/class.htmlparser.php | 329 + .../conlite/classes/class.htmlvalidator.php | 208 + .../classes/class.httpinputvalidator.php | 297 + .../conlite20/conlite/classes/class.i18n.php | 376 + .../conlite/classes/class.input.helper.php | 215 + .../conlite20/conlite/classes/class.inuse.php | 298 + .../conlite/classes/class.iterator.php | 123 + .../conlite20/conlite/classes/class.lang.php | 79 + .../conlite/classes/class.layout.php | 192 + .../conlite/classes/class.metaobject.php | 390 + .../conlite/classes/class.navigation.php | 432 + .../conlite20/conlite/classes/class.note.php | 372 + .../conlite/classes/class.notification.php | 236 + .../classes/class.output_compressor.php | 217 + .../conlite/classes/class.properties.php | 514 + .../conlite20/conlite/classes/class.purge.php | 432 + .../classes/class.request.password.php | 404 + .../conlite/classes/class.search.php | 1490 ++ .../conlite/classes/class.security.php | 481 + .../conlite20/conlite/classes/class.smtp.php | 1065 + .../conlite/classes/class.structure.php | 97 + .../conlite20/conlite/classes/class.table.php | 351 + .../conlite/classes/class.template.php | 29 + .../conlite/classes/class.templateconfig.php | 325 + .../conlite20/conlite/classes/class.todo.php | 158 + .../conlite/classes/class.treeitem.php | 482 + .../conlite20/conlite/classes/class.ui.php | 1406 ++ .../conlite/classes/class.update.notifier.php | 773 + .../conlite/classes/class.upload.php | 41 + .../conlite20/conlite/classes/class.user.php | 789 + .../conlite/classes/class.version.php | 655 + .../conlite/classes/class.versionFile.php | 217 + .../conlite/classes/class.versionImport.php | 296 + .../conlite/classes/class.versionLayout.php | 180 + .../conlite/classes/class.versionModule.php | 233 + .../conlite/classes/class.wysiwyg_editor.php | 108 + .../conlite20/conlite/classes/class.xml.php | 361 + .../conlite/classes/class.xmlparser.php | 566 + .../conlite/classes/class.xmltree.php | 480 + .../conlite/classes/class.xsltprocessor.php | 318 + .../classes/con2con/class.dirhandler.php | 369 + .../classes/con2con/class.filehandler.php | 502 + .../classes/con2con/class.registry.php | 220 + .../conlite/classes/contenido/class.area.php | 74 + .../classes/contenido/class.article.php | 60 + .../contenido/class.articlelanguage.php | 130 + .../classes/contenido/class.category.php | 57 + .../contenido/class.categoryarticle.php | 58 + .../contenido/class.categorylanguage.php | 95 + .../classes/contenido/class.categorytree.php | 55 + .../classes/contenido/class.client.php | 278 + .../classes/contenido/class.clientslang.php | 206 + .../classes/contenido/class.container.php | 81 + .../contenido/class.containerconfig.php | 62 + .../classes/contenido/class.content.php | 53 + .../conlite/classes/contenido/class.file.php | 85 + .../classes/contenido/class.framefile.php | 79 + .../classes/contenido/class.language.php | 122 + .../classes/contenido/class.layout.php | 177 + .../classes/contenido/class.metatag.php | 48 + .../classes/contenido/class.metatype.php | 64 + .../classes/contenido/class.module.php | 1234 + .../classes/contenido/class.template.php | 67 + .../contenido/class.templateconfig.php | 103 + .../conlite/classes/contenido/class.type.php | 50 + .../conlite/classes/contenido/class.user.php | 242 + .../class.content.type.abstract.php | 21 + .../datatypes/class.datatype.currency.php | 82 + .../datatypes/class.datatype.datetime.php | 522 + .../datatypes/class.datatype.number.php | 98 + .../classes/datatypes/class.datatype.php | 71 + .../classes/drivers/class.gdb.driver.php | 46 + .../conlite/classes/drivers/drivers.txt | 8 + .../classes/drivers/mysql/class.gdb.mysql.php | 194 + .../classes/exceptions/exception.conuser.php | 30 + .../class.frontend.navigation.abstract.php | 40 + .../navigation/class.frontend.navigation.php | 27 + .../genericdb/class.item.base.abstract.php | 164 + .../classes/genericdb/class.item.cache.php | 214 + branches/conlite20/conlite/classes/index.php | 4 + .../classes/interfaces/interface.conuser.php | 197 + .../conlite/classes/log/class.log.php | 393 + .../classes/log/class.log.writer.file.php | 67 + .../conlite/classes/log/class.log.writer.php | 127 + .../conlite/classes/log/class.modulelog.php | 90 + .../class.clAbstractTemplateParser.php | 35 + .../class.clCounterFunctionParser.php | 188 + .../template/class.clIfFunctionParser.php | 251 + .../class.clStrAPIFunctionsParser.php | 86 + .../classes/template/class.template.php | 333 + .../conlite/classes/tree/class.ctree.php | 64 + .../conlite/classes/tree/class.ctreeitem.php | 712 + .../widgets/class.views.advancedmenu.php | 53 + .../widgets/class.widgets.actionbutton.php | 243 + .../widgets/class.widgets.actionlist.php | 112 + .../classes/widgets/class.widgets.buttons.php | 392 + .../widgets/class.widgets.calendar.php | 448 + .../widgets/class.widgets.datawidgets.php | 311 + .../widgets/class.widgets.datechooser.php | 197 + .../widgets/class.widgets.datefield.php | 57 + .../widgets/class.widgets.dateselect.php | 203 + .../widgets/class.widgets.foldingrow.php | 181 + .../class.widgets.nominaltextfield.php | 112 + .../classes/widgets/class.widgets.page.php | 551 + .../classes/widgets/class.widgets.pager.php | 314 + .../class.widgets.switchabledatechooser.php | 76 + .../widgets/class.widgets.tableedit.php | 183 + .../widgets/class.widgets.treeview.php | 488 + .../classes/widgets/class.widgets.views.php | 256 + .../conlite/classes/xml/class.xml.base.php | 371 + .../conlite/classes/xml/class.xml.reader.php | 165 + .../conlite/classes/xml/class.xml.writer.php | 137 + .../conlite/classes/xml/class.xml2array.php | 234 + .../conlite/cronjobs/advance_workflow.php | 106 + branches/conlite20/conlite/cronjobs/index.php | 4 + .../conlite/cronjobs/linkchecker.php | 77 + .../conlite/cronjobs/move_articles.php | 51 + .../conlite/cronjobs/move_old_stats.php | 61 + .../conlite/cronjobs/optimize_database.php | 61 + .../conlite/cronjobs/run_newsletter_job.php | 64 + .../conlite/cronjobs/send_reminder.php | 115 + .../conlite/cronjobs/session_cleanup.php | 48 + .../conlite/cronjobs/setfrontenduserstate.php | 60 + .../conlite/external/PHPMailer/LICENSE | 504 + .../external/PHPMailer/PHPMailerAutoload.php | 49 + .../conlite/external/PHPMailer/VERSION | 1 + .../external/PHPMailer/class.phpmailer.php | 4036 ++++ .../PHPMailer/class.phpmaileroauth.php | 197 + .../PHPMailer/class.phpmaileroauthgoogle.php | 77 + .../conlite/external/PHPMailer/class.pop3.php | 407 + .../conlite/external/PHPMailer/class.smtp.php | 1256 + .../conlite/external/PHPMailer/composer.json | 61 + .../conlite/external/PHPMailer/composer.lock | 3593 +++ .../external/PHPMailer/examples/DKIM.phps | 38 + .../PHPMailer/examples/code_generator.phps | 597 + .../PHPMailer/examples/contactform.phps | 71 + .../external/PHPMailer/examples/contents.html | 17 + .../PHPMailer/examples/contentsutf8.html | 21 + .../PHPMailer/examples/exceptions.phps | 35 + .../external/PHPMailer/examples/gmail.phps | 75 + .../PHPMailer/examples/gmail_xoauth.phps | 85 + .../PHPMailer/examples/images/phpmailer.png | Bin 0 -> 5831 bytes .../examples/images/phpmailer_mini.png | Bin 0 -> 1842 bytes .../external/PHPMailer/examples/index.html | 48 + .../external/PHPMailer/examples/mail.phps | 31 + .../PHPMailer/examples/mailing_list.phps | 59 + .../PHPMailer/examples/pop_before_smtp.phps | 54 + .../PHPMailer/examples/scripts/XRegExp.js | 664 + .../examples/scripts/shAutoloader.js | 122 + .../PHPMailer/examples/scripts/shBrushPhp.js | 72 + .../PHPMailer/examples/scripts/shCore.js | 1 + .../PHPMailer/examples/scripts/shLegacy.js | 140 + .../PHPMailer/examples/send_file_upload.phps | 49 + .../examples/send_multiple_file_upload.phps | 51 + .../external/PHPMailer/examples/sendmail.phps | 33 + .../PHPMailer/examples/signed-mail.phps | 89 + .../external/PHPMailer/examples/smtp.phps | 54 + .../PHPMailer/examples/smtp_check.phps | 55 + .../PHPMailer/examples/smtp_no_auth.phps | 50 + .../PHPMailer/examples/ssl_options.phps | 74 + .../PHPMailer/examples/styles/shCore.css | 46 + .../examples/styles/shCoreDefault.css | 77 + .../examples/styles/shCoreDjango.css | 78 + .../examples/styles/shCoreEclipse.css | 80 + .../PHPMailer/examples/styles/shCoreEmacs.css | 76 + .../examples/styles/shCoreFadeToGrey.css | 77 + .../examples/styles/shCoreMDUltra.css | 76 + .../examples/styles/shCoreMidnight.css | 76 + .../PHPMailer/examples/styles/shCoreRDark.css | 76 + .../examples/styles/shThemeAppleScript.css | 21 + .../examples/styles/shThemeDefault.css | 31 + .../examples/styles/shThemeDjango.css | 32 + .../examples/styles/shThemeEclipse.css | 34 + .../examples/styles/shThemeEmacs.css | 30 + .../examples/styles/shThemeFadeToGrey.css | 31 + .../examples/styles/shThemeMDUltra.css | 30 + .../examples/styles/shThemeMidnight.css | 30 + .../examples/styles/shThemeRDark.css | 30 + .../examples/styles/shThemeVisualStudio.css | 31 + .../PHPMailer/examples/styles/wrapping.png | Bin 0 -> 631 bytes .../PHPMailer/examples/test_db_smtp_basic.php | 58 + .../PHPMailer/examples/test_mail_advanced.php | 31 + .../PHPMailer/examples/test_mail_basic.php | 43 + .../test_pop_before_smtp_advanced.php | 40 + .../examples/test_pop_before_smtp_basic.php | 49 + .../examples/test_sendmail_advanced.php | 34 + .../examples/test_sendmail_basic.php | 45 + .../PHPMailer/examples/test_smtp_advanced.php | 43 + .../examples/test_smtp_advanced_no_auth.php | 37 + .../PHPMailer/examples/test_smtp_basic.php | 58 + .../examples/test_smtp_basic_no_auth.php | 53 + .../examples/test_smtp_gmail_advanced.php | 43 + .../examples/test_smtp_gmail_basic.php | 59 + .../PHPMailer/extras/EasyPeasyICS.php | 148 + .../external/PHPMailer/extras/README.md | 17 + .../external/PHPMailer/extras/htmlfilter.php | 1159 + .../PHPMailer/extras/ntlm_sasl_client.php | 185 + .../external/PHPMailer/get_oauth_token.php | 162 + .../PHPMailer/language/phpmailer.lang-am.php | 26 + .../PHPMailer/language/phpmailer.lang-ar.php | 27 + .../PHPMailer/language/phpmailer.lang-az.php | 26 + .../PHPMailer/language/phpmailer.lang-be.php | 26 + .../PHPMailer/language/phpmailer.lang-bg.php | 26 + .../PHPMailer/language/phpmailer.lang-ca.php | 26 + .../PHPMailer/language/phpmailer.lang-ch.php | 26 + .../PHPMailer/language/phpmailer.lang-cs.php | 25 + .../PHPMailer/language/phpmailer.lang-da.php | 26 + .../PHPMailer/language/phpmailer.lang-de.php | 25 + .../PHPMailer/language/phpmailer.lang-el.php | 25 + .../PHPMailer/language/phpmailer.lang-eo.php | 25 + .../PHPMailer/language/phpmailer.lang-es.php | 26 + .../PHPMailer/language/phpmailer.lang-et.php | 27 + .../PHPMailer/language/phpmailer.lang-fa.php | 27 + .../PHPMailer/language/phpmailer.lang-fi.php | 27 + .../PHPMailer/language/phpmailer.lang-fo.php | 26 + .../PHPMailer/language/phpmailer.lang-fr.php | 29 + .../PHPMailer/language/phpmailer.lang-gl.php | 26 + .../PHPMailer/language/phpmailer.lang-he.php | 26 + .../PHPMailer/language/phpmailer.lang-hr.php | 26 + .../PHPMailer/language/phpmailer.lang-hu.php | 26 + .../PHPMailer/language/phpmailer.lang-id.php | 26 + .../PHPMailer/language/phpmailer.lang-it.php | 27 + .../PHPMailer/language/phpmailer.lang-ja.php | 27 + .../PHPMailer/language/phpmailer.lang-ka.php | 26 + .../PHPMailer/language/phpmailer.lang-ko.php | 26 + .../PHPMailer/language/phpmailer.lang-lt.php | 26 + .../PHPMailer/language/phpmailer.lang-lv.php | 26 + .../PHPMailer/language/phpmailer.lang-ms.php | 26 + .../PHPMailer/language/phpmailer.lang-nb.php | 25 + .../PHPMailer/language/phpmailer.lang-nl.php | 26 + .../PHPMailer/language/phpmailer.lang-pl.php | 26 + .../PHPMailer/language/phpmailer.lang-pt.php | 26 + .../language/phpmailer.lang-pt_br.php | 29 + .../PHPMailer/language/phpmailer.lang-ro.php | 26 + .../PHPMailer/language/phpmailer.lang-ru.php | 27 + .../PHPMailer/language/phpmailer.lang-sk.php | 26 + .../PHPMailer/language/phpmailer.lang-sl.php | 26 + .../PHPMailer/language/phpmailer.lang-sr.php | 26 + .../PHPMailer/language/phpmailer.lang-sv.php | 26 + .../PHPMailer/language/phpmailer.lang-tr.php | 30 + .../PHPMailer/language/phpmailer.lang-uk.php | 27 + .../PHPMailer/language/phpmailer.lang-vi.php | 26 + .../PHPMailer/language/phpmailer.lang-zh.php | 28 + .../language/phpmailer.lang-zh_cn.php | 28 + .../external/backendedit/front_content.php | 982 + .../external/edit_area/autocompletion.js | 491 + .../external/edit_area/class.edit_area.php | 264 + .../conlite/external/edit_area/edit_area.css | 530 + .../conlite/external/edit_area/edit_area.js | 527 + .../edit_area/edit_area_compressor.php | 428 + .../edit_area/edit_area_compressor_cl.php | 404 + .../external/edit_area/edit_area_full.gz | Bin 0 -> 29377 bytes .../external/edit_area/edit_area_full.js | 38 + .../external/edit_area/edit_area_functions.js | 1202 + .../external/edit_area/edit_area_loader.js | 1081 + .../external/edit_area/elements_functions.js | 336 + .../conlite/external/edit_area/highlight.js | 407 + .../edit_area/images/autocompletion.gif | Bin 0 -> 359 bytes .../external/edit_area/images/close.gif | Bin 0 -> 102 bytes .../external/edit_area/images/fullscreen.gif | Bin 0 -> 198 bytes .../external/edit_area/images/go_to_line.gif | Bin 0 -> 1053 bytes .../external/edit_area/images/help.gif | Bin 0 -> 295 bytes .../external/edit_area/images/highlight.gif | Bin 0 -> 256 bytes .../external/edit_area/images/load.gif | Bin 0 -> 1041 bytes .../external/edit_area/images/move.gif | Bin 0 -> 257 bytes .../external/edit_area/images/newdocument.gif | Bin 0 -> 170 bytes .../external/edit_area/images/opacity.png | Bin 0 -> 147 bytes .../external/edit_area/images/processing.gif | Bin 0 -> 825 bytes .../external/edit_area/images/redo.gif | Bin 0 -> 169 bytes .../edit_area/images/reset_highlight.gif | Bin 0 -> 168 bytes .../external/edit_area/images/save.gif | Bin 0 -> 285 bytes .../external/edit_area/images/search.gif | Bin 0 -> 191 bytes .../edit_area/images/smooth_selection.gif | Bin 0 -> 174 bytes .../external/edit_area/images/spacer.gif | Bin 0 -> 43 bytes .../edit_area/images/statusbar_resize.gif | Bin 0 -> 79 bytes .../external/edit_area/images/undo.gif | Bin 0 -> 175 bytes .../external/edit_area/images/word_wrap.gif | Bin 0 -> 951 bytes .../conlite/external/edit_area/keyboard.js | 145 + .../conlite/external/edit_area/langs/bg.js | 54 + .../conlite/external/edit_area/langs/cs.js | 48 + .../conlite/external/edit_area/langs/de.js | 48 + .../conlite/external/edit_area/langs/dk.js | 48 + .../conlite/external/edit_area/langs/en.js | 48 + .../conlite/external/edit_area/langs/eo.js | 48 + .../conlite/external/edit_area/langs/es.js | 48 + .../conlite/external/edit_area/langs/fi.js | 48 + .../conlite/external/edit_area/langs/fr.js | 48 + .../conlite/external/edit_area/langs/hr.js | 48 + .../conlite/external/edit_area/langs/it.js | 48 + .../conlite/external/edit_area/langs/ja.js | 48 + .../conlite/external/edit_area/langs/mk.js | 48 + .../conlite/external/edit_area/langs/nl.js | 48 + .../conlite/external/edit_area/langs/pl.js | 48 + .../conlite/external/edit_area/langs/pt.js | 48 + .../conlite/external/edit_area/langs/ru.js | 48 + .../conlite/external/edit_area/langs/sk.js | 48 + .../conlite/external/edit_area/langs/zh.js | 48 + .../external/edit_area/license_apache.txt | 7 + .../external/edit_area/license_bsd.txt | 10 + .../external/edit_area/license_lgpl.txt | 458 + .../conlite/external/edit_area/manage_area.js | 623 + .../edit_area/plugins/charmap/charmap.js | 90 + .../edit_area/plugins/charmap/css/charmap.css | 64 + .../plugins/charmap/images/charmap.gif | Bin 0 -> 245 bytes .../edit_area/plugins/charmap/jscripts/map.js | 373 + .../edit_area/plugins/charmap/langs/bg.js | 12 + .../edit_area/plugins/charmap/langs/cs.js | 6 + .../edit_area/plugins/charmap/langs/de.js | 6 + .../edit_area/plugins/charmap/langs/dk.js | 6 + .../edit_area/plugins/charmap/langs/en.js | 6 + .../edit_area/plugins/charmap/langs/eo.js | 6 + .../edit_area/plugins/charmap/langs/es.js | 6 + .../edit_area/plugins/charmap/langs/fr.js | 6 + .../edit_area/plugins/charmap/langs/hr.js | 6 + .../edit_area/plugins/charmap/langs/it.js | 6 + .../edit_area/plugins/charmap/langs/ja.js | 6 + .../edit_area/plugins/charmap/langs/mk.js | 6 + .../edit_area/plugins/charmap/langs/nl.js | 6 + .../edit_area/plugins/charmap/langs/pl.js | 6 + .../edit_area/plugins/charmap/langs/pt.js | 6 + .../edit_area/plugins/charmap/langs/ru.js | 6 + .../edit_area/plugins/charmap/langs/sk.js | 6 + .../edit_area/plugins/charmap/langs/zh.js | 6 + .../edit_area/plugins/charmap/popup.html | 24 + .../edit_area/plugins/test/css/test.css | 3 + .../edit_area/plugins/test/images/test.gif | Bin 0 -> 87 bytes .../edit_area/plugins/test/langs/bg.js | 10 + .../edit_area/plugins/test/langs/cs.js | 4 + .../edit_area/plugins/test/langs/de.js | 4 + .../edit_area/plugins/test/langs/dk.js | 4 + .../edit_area/plugins/test/langs/en.js | 4 + .../edit_area/plugins/test/langs/eo.js | 4 + .../edit_area/plugins/test/langs/es.js | 4 + .../edit_area/plugins/test/langs/fr.js | 4 + .../edit_area/plugins/test/langs/hr.js | 4 + .../edit_area/plugins/test/langs/it.js | 4 + .../edit_area/plugins/test/langs/ja.js | 4 + .../edit_area/plugins/test/langs/mk.js | 4 + .../edit_area/plugins/test/langs/nl.js | 4 + .../edit_area/plugins/test/langs/pl.js | 4 + .../edit_area/plugins/test/langs/pt.js | 4 + .../edit_area/plugins/test/langs/ru.js | 4 + .../edit_area/plugins/test/langs/sk.js | 4 + .../edit_area/plugins/test/langs/zh.js | 4 + .../external/edit_area/plugins/test/test.js | 110 + .../external/edit_area/plugins/test/test2.js | 1 + .../conlite/external/edit_area/reg_syntax.js | 166 + .../external/edit_area/reg_syntax/basic.js | 70 + .../edit_area/reg_syntax/brainfuck.js | 45 + .../external/edit_area/reg_syntax/c.js | 63 + .../edit_area/reg_syntax/coldfusion.js | 120 + .../external/edit_area/reg_syntax/cpp.js | 66 + .../external/edit_area/reg_syntax/css.js | 85 + .../external/edit_area/reg_syntax/html.js | 51 + .../external/edit_area/reg_syntax/java.js | 57 + .../external/edit_area/reg_syntax/js.js | 94 + .../external/edit_area/reg_syntax/pas.js | 83 + .../external/edit_area/reg_syntax/perl.js | 88 + .../external/edit_area/reg_syntax/php.js | 157 + .../external/edit_area/reg_syntax/python.js | 145 + .../edit_area/reg_syntax/robotstxt.js | 25 + .../external/edit_area/reg_syntax/ruby.js | 68 + .../external/edit_area/reg_syntax/sql.js | 56 + .../external/edit_area/reg_syntax/tsql.js | 88 + .../external/edit_area/reg_syntax/vb.js | 53 + .../external/edit_area/reg_syntax/xml.js | 57 + .../conlite/external/edit_area/regexp.js | 139 + .../conlite/external/edit_area/resize_area.js | 73 + .../external/edit_area/search_replace.js | 174 + .../conlite/external/edit_area/template.html | 100 + .../conlite/external/frontend/cache/index.php | 4 + .../conlite/external/frontend/config.php | 53 + .../conlite/external/frontend/css/index.php | 4 + .../external/frontend/css/style_tiny.css | 32 + .../conlite/external/frontend/dbfs.php | 66 + .../conlite/external/frontend/error.php | 13 + .../external/frontend/front_content.php | 996 + .../frontend/front_crcloginform.inc.php | 168 + .../external/frontend/images/but_ok.gif | Bin 0 -> 192 bytes .../external/frontend/images/index.php | 4 + .../frontend/includes/class.concache.php | 531 + .../frontend/includes/class.input.helper.php | 573 + .../external/frontend/includes/concache.php | 170 + .../external/frontend/includes/index.php | 4 + .../conlite/external/frontend/index.php | 5 + .../conlite/external/frontend/js/index.php | 4 + .../conlite/external/frontend/logs/index.php | 4 + .../conlite/external/frontend/robots.txt | 2 + .../external/frontend/templates/index.php | 4 + .../conlite/external/frontend/upload/test.txt | 1 + branches/conlite20/conlite/external/index.php | 4 + .../conlite/external/phpqrcode/CHANGELOG | 38 + .../conlite/external/phpqrcode/INSTALL | 67 + .../conlite/external/phpqrcode/LICENSE | 165 + .../conlite/external/phpqrcode/README | 45 + .../conlite/external/phpqrcode/VERSION | 2 + .../phpqrcode/bindings/tcpdf/qrcode.php | 2875 +++ .../conlite/external/phpqrcode/index.php | 94 + .../conlite/external/phpqrcode/phpqrcode.php | 3312 +++ .../external/phpqrcode/qrbitstream.php | 180 + .../conlite/external/phpqrcode/qrconfig.php | 17 + .../conlite/external/phpqrcode/qrconst.php | 54 + .../conlite/external/phpqrcode/qrencode.php | 502 + .../conlite/external/phpqrcode/qrimage.php | 95 + .../conlite/external/phpqrcode/qrinput.php | 729 + .../conlite/external/phpqrcode/qrlib.php | 43 + .../conlite/external/phpqrcode/qrmask.php | 328 + .../conlite/external/phpqrcode/qrrscode.php | 210 + .../conlite/external/phpqrcode/qrspec.php | 592 + .../conlite/external/phpqrcode/qrsplit.php | 311 + .../conlite/external/phpqrcode/qrtools.php | 172 + .../external/phpqrcode/tools/merge.bat | 2 + .../external/phpqrcode/tools/merge.php | 70 + .../conlite/external/phpqrcode/tools/merge.sh | 2 + .../phpqrcode/tools/merged_config.php | 17 + .../phpqrcode/tools/merged_header.php | 36 + .../conlite/external/wysiwyg/index.php | 4 + .../tinymce3/TINYMCE_INTEGRATION_HOWTO.txt | 57 + .../external/wysiwyg/tinymce3/changelog.txt | 1575 ++ .../wysiwyg/tinymce3/compressor_changelog.txt | 14 + .../external/wysiwyg/tinymce3/config.php | 57 + .../external/wysiwyg/tinymce3/editor.php | 114 + .../external/wysiwyg/tinymce3/editorclass.php | 706 + .../tinymce3/jscripts/tiny_mce/langs/de.js | 1 + .../tinymce3/jscripts/tiny_mce/langs/en.js | 1 + .../tinymce3/jscripts/tiny_mce/license.txt | 504 + .../tiny_mce/plugins/advhr/css/advhr.css | 5 + .../tiny_mce/plugins/advhr/editor_plugin.js | 1 + .../plugins/advhr/editor_plugin_src.js | 57 + .../tiny_mce/plugins/advhr/js/rule.js | 43 + .../tiny_mce/plugins/advhr/langs/de_dlg.js | 1 + .../tiny_mce/plugins/advhr/langs/en_dlg.js | 1 + .../jscripts/tiny_mce/plugins/advhr/rule.htm | 58 + .../plugins/advimage/css/advimage.css | 13 + .../plugins/advimage/editor_plugin.js | 1 + .../plugins/advimage/editor_plugin_src.js | 50 + .../tiny_mce/plugins/advimage/image.htm | 235 + .../tiny_mce/plugins/advimage/img/sample.gif | Bin 0 -> 1624 bytes .../tiny_mce/plugins/advimage/js/image.js | 464 + .../tiny_mce/plugins/advimage/langs/de_dlg.js | 1 + .../tiny_mce/plugins/advimage/langs/en_dlg.js | 1 + .../tiny_mce/plugins/advlink/css/advlink.css | 8 + .../tiny_mce/plugins/advlink/editor_plugin.js | 1 + .../plugins/advlink/editor_plugin_src.js | 61 + .../tiny_mce/plugins/advlink/js/advlink.js | 543 + .../tiny_mce/plugins/advlink/langs/de_dlg.js | 1 + .../tiny_mce/plugins/advlink/langs/en_dlg.js | 1 + .../tiny_mce/plugins/advlink/link.htm | 338 + .../tiny_mce/plugins/advlist/editor_plugin.js | 1 + .../plugins/advlist/editor_plugin_src.js | 176 + .../plugins/autolink/editor_plugin.js | 1 + .../plugins/autolink/editor_plugin_src.js | 184 + .../plugins/autoresize/editor_plugin.js | 1 + .../plugins/autoresize/editor_plugin_src.js | 119 + .../plugins/autosave/editor_plugin.js | 1 + .../plugins/autosave/editor_plugin_src.js | 433 + .../tiny_mce/plugins/bbcode/editor_plugin.js | 1 + .../plugins/bbcode/editor_plugin_src.js | 120 + .../plugins/contextmenu/editor_plugin.js | 1 + .../plugins/contextmenu/editor_plugin_src.js | 163 + .../plugins/directionality/editor_plugin.js | 1 + .../directionality/editor_plugin_src.js | 85 + .../plugins/emotions/editor_plugin.js | 1 + .../plugins/emotions/editor_plugin_src.js | 43 + .../tiny_mce/plugins/emotions/emotions.htm | 42 + .../plugins/emotions/img/smiley-cool.gif | Bin 0 -> 354 bytes .../plugins/emotions/img/smiley-cry.gif | Bin 0 -> 329 bytes .../emotions/img/smiley-embarassed.gif | Bin 0 -> 331 bytes .../emotions/img/smiley-foot-in-mouth.gif | Bin 0 -> 342 bytes .../plugins/emotions/img/smiley-frown.gif | Bin 0 -> 340 bytes .../plugins/emotions/img/smiley-innocent.gif | Bin 0 -> 336 bytes .../plugins/emotions/img/smiley-kiss.gif | Bin 0 -> 338 bytes .../plugins/emotions/img/smiley-laughing.gif | Bin 0 -> 343 bytes .../emotions/img/smiley-money-mouth.gif | Bin 0 -> 321 bytes .../plugins/emotions/img/smiley-sealed.gif | Bin 0 -> 323 bytes .../plugins/emotions/img/smiley-smile.gif | Bin 0 -> 344 bytes .../plugins/emotions/img/smiley-surprised.gif | Bin 0 -> 338 bytes .../emotions/img/smiley-tongue-out.gif | Bin 0 -> 328 bytes .../plugins/emotions/img/smiley-undecided.gif | Bin 0 -> 337 bytes .../plugins/emotions/img/smiley-wink.gif | Bin 0 -> 350 bytes .../plugins/emotions/img/smiley-yell.gif | Bin 0 -> 336 bytes .../tiny_mce/plugins/emotions/js/emotions.js | 43 + .../tiny_mce/plugins/emotions/langs/de_dlg.js | 1 + .../tiny_mce/plugins/emotions/langs/en_dlg.js | 1 + .../tiny_mce/plugins/example/dialog.htm | 22 + .../tiny_mce/plugins/example/editor_plugin.js | 1 + .../plugins/example/editor_plugin_src.js | 84 + .../tiny_mce/plugins/example/img/example.gif | Bin 0 -> 87 bytes .../tiny_mce/plugins/example/js/dialog.js | 19 + .../tiny_mce/plugins/example/langs/en.js | 3 + .../tiny_mce/plugins/example/langs/en_dlg.js | 3 + .../example_dependency/editor_plugin.js | 1 + .../example_dependency/editor_plugin_src.js | 50 + .../plugins/fullpage/css/fullpage.css | 143 + .../plugins/fullpage/editor_plugin.js | 1 + .../plugins/fullpage/editor_plugin_src.js | 405 + .../tiny_mce/plugins/fullpage/fullpage.htm | 259 + .../tiny_mce/plugins/fullpage/js/fullpage.js | 232 + .../tiny_mce/plugins/fullpage/langs/de_dlg.js | 1 + .../tiny_mce/plugins/fullpage/langs/en_dlg.js | 1 + .../plugins/fullscreen/editor_plugin.js | 1 + .../plugins/fullscreen/editor_plugin_src.js | 234 + .../plugins/fullscreen/fullscreen.htm | 117 + .../tiny_mce/plugins/iespell/editor_plugin.js | 1 + .../plugins/iespell/editor_plugin_src.js | 54 + .../plugins/inlinepopups/editor_plugin.js | 1 + .../plugins/inlinepopups/editor_plugin_src.js | 699 + .../skins/clearlooks2/img/alert.gif | Bin 0 -> 810 bytes .../skins/clearlooks2/img/button.gif | Bin 0 -> 272 bytes .../skins/clearlooks2/img/buttons.gif | Bin 0 -> 1195 bytes .../skins/clearlooks2/img/confirm.gif | Bin 0 -> 907 bytes .../skins/clearlooks2/img/corners.gif | Bin 0 -> 909 bytes .../skins/clearlooks2/img/horizontal.gif | Bin 0 -> 769 bytes .../skins/clearlooks2/img/vertical.gif | Bin 0 -> 84 bytes .../inlinepopups/skins/clearlooks2/window.css | 90 + .../plugins/inlinepopups/template.htm | 387 + .../plugins/insertdatetime/editor_plugin.js | 1 + .../insertdatetime/editor_plugin_src.js | 83 + .../tiny_mce/plugins/layer/editor_plugin.js | 1 + .../plugins/layer/editor_plugin_src.js | 262 + .../plugins/legacyoutput/editor_plugin.js | 1 + .../plugins/legacyoutput/editor_plugin_src.js | 139 + .../tiny_mce/plugins/lists/editor_plugin.js | 1 + .../plugins/lists/editor_plugin_src.js | 955 + .../tiny_mce/plugins/media/css/media.css | 17 + .../tiny_mce/plugins/media/editor_plugin.js | 1 + .../plugins/media/editor_plugin_src.js | 898 + .../tiny_mce/plugins/media/js/embed.js | 73 + .../tiny_mce/plugins/media/js/media.js | 513 + .../tiny_mce/plugins/media/langs/de_dlg.js | 1 + .../tiny_mce/plugins/media/langs/en_dlg.js | 1 + .../jscripts/tiny_mce/plugins/media/media.htm | 922 + .../tiny_mce/plugins/media/moxieplayer.swf | Bin 0 -> 19980 bytes .../plugins/nonbreaking/editor_plugin.js | 1 + .../plugins/nonbreaking/editor_plugin_src.js | 54 + .../plugins/noneditable/editor_plugin.js | 1 + .../plugins/noneditable/editor_plugin_src.js | 537 + .../plugins/pagebreak/editor_plugin.js | 1 + .../plugins/pagebreak/editor_plugin_src.js | 74 + .../tiny_mce/plugins/paste/editor_plugin.js | 1 + .../plugins/paste/editor_plugin_src.js | 887 + .../tiny_mce/plugins/paste/js/pastetext.js | 36 + .../tiny_mce/plugins/paste/js/pasteword.js | 51 + .../tiny_mce/plugins/paste/langs/de_dlg.js | 1 + .../tiny_mce/plugins/paste/langs/en_dlg.js | 1 + .../tiny_mce/plugins/paste/pastetext.htm | 27 + .../tiny_mce/plugins/paste/pasteword.htm | 21 + .../tiny_mce/plugins/preview/editor_plugin.js | 1 + .../plugins/preview/editor_plugin_src.js | 53 + .../tiny_mce/plugins/preview/example.html | 28 + .../plugins/preview/jscripts/embed.js | 73 + .../tiny_mce/plugins/preview/preview.html | 17 + .../tiny_mce/plugins/print/editor_plugin.js | 1 + .../plugins/print/editor_plugin_src.js | 34 + .../tiny_mce/plugins/save/editor_plugin.js | 1 + .../plugins/save/editor_plugin_src.js | 101 + .../searchreplace/css/searchreplace.css | 6 + .../plugins/searchreplace/editor_plugin.js | 1 + .../searchreplace/editor_plugin_src.js | 61 + .../plugins/searchreplace/js/searchreplace.js | 148 + .../plugins/searchreplace/langs/de_dlg.js | 1 + .../plugins/searchreplace/langs/en_dlg.js | 1 + .../plugins/searchreplace/searchreplace.htm | 100 + .../plugins/spellchecker/css/content.css | 1 + .../plugins/spellchecker/editor_plugin.js | 1 + .../plugins/spellchecker/editor_plugin_src.js | 471 + .../plugins/spellchecker/img/wline.gif | Bin 0 -> 46 bytes .../tiny_mce/plugins/style/css/props.css | 14 + .../tiny_mce/plugins/style/editor_plugin.js | 1 + .../plugins/style/editor_plugin_src.js | 71 + .../tiny_mce/plugins/style/js/props.js | 709 + .../tiny_mce/plugins/style/langs/de_dlg.js | 1 + .../tiny_mce/plugins/style/langs/en_dlg.js | 1 + .../jscripts/tiny_mce/plugins/style/props.htm | 845 + .../tiny_mce/plugins/style/readme.txt | 19 + .../plugins/tabfocus/editor_plugin.js | 1 + .../plugins/tabfocus/editor_plugin_src.js | 122 + .../jscripts/tiny_mce/plugins/table/cell.htm | 180 + .../tiny_mce/plugins/table/css/cell.css | 17 + .../tiny_mce/plugins/table/css/row.css | 25 + .../tiny_mce/plugins/table/css/table.css | 13 + .../tiny_mce/plugins/table/editor_plugin.js | 1 + .../plugins/table/editor_plugin_src.js | 1456 ++ .../tiny_mce/plugins/table/js/cell.js | 319 + .../tiny_mce/plugins/table/js/merge_cells.js | 27 + .../jscripts/tiny_mce/plugins/table/js/row.js | 254 + .../tiny_mce/plugins/table/js/table.js | 501 + .../tiny_mce/plugins/table/langs/de_dlg.js | 1 + .../tiny_mce/plugins/table/langs/en_dlg.js | 1 + .../tiny_mce/plugins/table/merge_cells.htm | 32 + .../jscripts/tiny_mce/plugins/table/row.htm | 158 + .../jscripts/tiny_mce/plugins/table/table.htm | 188 + .../tiny_mce/plugins/template/blank.htm | 12 + .../plugins/template/css/template.css | 23 + .../plugins/template/editor_plugin.js | 1 + .../plugins/template/editor_plugin_src.js | 159 + .../tiny_mce/plugins/template/js/template.js | 106 + .../tiny_mce/plugins/template/langs/de_dlg.js | 1 + .../tiny_mce/plugins/template/langs/en_dlg.js | 1 + .../tiny_mce/plugins/template/template.htm | 31 + .../plugins/visualblocks/css/visualblocks.css | 21 + .../plugins/visualblocks/editor_plugin.js | 1 + .../plugins/visualblocks/editor_plugin_src.js | 63 + .../plugins/visualchars/editor_plugin.js | 1 + .../plugins/visualchars/editor_plugin_src.js | 83 + .../plugins/wordcount/editor_plugin.js | 1 + .../plugins/wordcount/editor_plugin_src.js | 122 + .../tiny_mce/plugins/xhtmlxtras/abbr.htm | 142 + .../tiny_mce/plugins/xhtmlxtras/acronym.htm | 142 + .../plugins/xhtmlxtras/attributes.htm | 149 + .../tiny_mce/plugins/xhtmlxtras/cite.htm | 142 + .../plugins/xhtmlxtras/css/attributes.css | 11 + .../tiny_mce/plugins/xhtmlxtras/css/popup.css | 9 + .../tiny_mce/plugins/xhtmlxtras/del.htm | 162 + .../plugins/xhtmlxtras/editor_plugin.js | 1 + .../plugins/xhtmlxtras/editor_plugin_src.js | 132 + .../tiny_mce/plugins/xhtmlxtras/ins.htm | 162 + .../tiny_mce/plugins/xhtmlxtras/js/abbr.js | 28 + .../tiny_mce/plugins/xhtmlxtras/js/acronym.js | 28 + .../plugins/xhtmlxtras/js/attributes.js | 111 + .../tiny_mce/plugins/xhtmlxtras/js/cite.js | 28 + .../tiny_mce/plugins/xhtmlxtras/js/del.js | 53 + .../plugins/xhtmlxtras/js/element_common.js | 229 + .../tiny_mce/plugins/xhtmlxtras/js/ins.js | 53 + .../plugins/xhtmlxtras/langs/de_dlg.js | 1 + .../plugins/xhtmlxtras/langs/en_dlg.js | 1 + .../tiny_mce/themes/advanced/about.htm | 52 + .../tiny_mce/themes/advanced/anchor.htm | 26 + .../tiny_mce/themes/advanced/charmap.htm | 55 + .../tiny_mce/themes/advanced/color_picker.htm | 70 + .../themes/advanced/editor_template.js | 1 + .../themes/advanced/editor_template_src.js | 1490 ++ .../tiny_mce/themes/advanced/image.htm | 80 + .../themes/advanced/img/colorpicker.jpg | Bin 0 -> 2584 bytes .../tiny_mce/themes/advanced/img/flash.gif | Bin 0 -> 239 bytes .../tiny_mce/themes/advanced/img/icons.gif | Bin 0 -> 11982 bytes .../tiny_mce/themes/advanced/img/iframe.gif | Bin 0 -> 600 bytes .../themes/advanced/img/pagebreak.gif | Bin 0 -> 325 bytes .../themes/advanced/img/quicktime.gif | Bin 0 -> 301 bytes .../themes/advanced/img/realmedia.gif | Bin 0 -> 439 bytes .../themes/advanced/img/shockwave.gif | Bin 0 -> 384 bytes .../tiny_mce/themes/advanced/img/trans.gif | Bin 0 -> 43 bytes .../tiny_mce/themes/advanced/img/video.gif | Bin 0 -> 597 bytes .../themes/advanced/img/windowsmedia.gif | Bin 0 -> 415 bytes .../tiny_mce/themes/advanced/js/about.js | 73 + .../tiny_mce/themes/advanced/js/anchor.js | 56 + .../tiny_mce/themes/advanced/js/charmap.js | 363 + .../themes/advanced/js/color_picker.js | 345 + .../tiny_mce/themes/advanced/js/image.js | 253 + .../tiny_mce/themes/advanced/js/link.js | 159 + .../themes/advanced/js/source_editor.js | 78 + .../tiny_mce/themes/advanced/langs/de.js | 1 + .../tiny_mce/themes/advanced/langs/de_dlg.js | 1 + .../tiny_mce/themes/advanced/langs/en.js | 1 + .../tiny_mce/themes/advanced/langs/en_dlg.js | 1 + .../tiny_mce/themes/advanced/link.htm | 57 + .../tiny_mce/themes/advanced/shortcuts.htm | 47 + .../themes/advanced/skins/default/content.css | 50 + .../themes/advanced/skins/default/dialog.css | 118 + .../advanced/skins/default/img/buttons.png | Bin 0 -> 3133 bytes .../advanced/skins/default/img/items.gif | Bin 0 -> 64 bytes .../advanced/skins/default/img/menu_arrow.gif | Bin 0 -> 68 bytes .../advanced/skins/default/img/menu_check.gif | Bin 0 -> 70 bytes .../advanced/skins/default/img/progress.gif | Bin 0 -> 1787 bytes .../advanced/skins/default/img/tabs.gif | Bin 0 -> 1322 bytes .../themes/advanced/skins/default/ui.css | 219 + .../advanced/skins/highcontrast/content.css | 24 + .../advanced/skins/highcontrast/dialog.css | 106 + .../themes/advanced/skins/highcontrast/ui.css | 106 + .../themes/advanced/skins/o2k7/content.css | 48 + .../themes/advanced/skins/o2k7/dialog.css | 118 + .../advanced/skins/o2k7/img/button_bg.png | Bin 0 -> 2766 bytes .../skins/o2k7/img/button_bg_black.png | Bin 0 -> 651 bytes .../skins/o2k7/img/button_bg_silver.png | Bin 0 -> 2084 bytes .../themes/advanced/skins/o2k7/ui.css | 222 + .../themes/advanced/skins/o2k7/ui_black.css | 8 + .../themes/advanced/skins/o2k7/ui_silver.css | 5 + .../themes/advanced/source_editor.htm | 25 + .../tiny_mce/themes/simple/editor_template.js | 1 + .../themes/simple/editor_template_src.js | 84 + .../tiny_mce/themes/simple/img/icons.gif | Bin 0 -> 806 bytes .../tiny_mce/themes/simple/langs/de.js | 1 + .../tiny_mce/themes/simple/langs/en.js | 1 + .../themes/simple/skins/default/content.css | 25 + .../themes/simple/skins/default/ui.css | 32 + .../themes/simple/skins/o2k7/content.css | 17 + .../simple/skins/o2k7/img/button_bg.png | Bin 0 -> 5102 bytes .../tiny_mce/themes/simple/skins/o2k7/ui.css | 35 + .../tinymce3/jscripts/tiny_mce/tiny_mce.js | 1 + .../jscripts/tiny_mce/tiny_mce_popup.js | 5 + .../jscripts/tiny_mce/tiny_mce_src.js | 19127 ++++++++++++++++ .../tiny_mce/utils/editable_selects.js | 70 + .../jscripts/tiny_mce/utils/form_utils.js | 210 + .../jscripts/tiny_mce/utils/mctabs.js | 162 + .../jscripts/tiny_mce/utils/validate.js | 252 + .../external/wysiwyg/tinymce3/list.php | 228 + .../conlite/external/wysiwyg/tinymce3/readme | 2 + .../external/wysiwyg/tinymce3/readme.txt | 2 + .../wysiwyg/tinymce3/tiny_mce_gzip.js | 185 + .../wysiwyg/tinymce3/tiny_mce_gzip.php | 206 + .../wysiwyg/tinymce3/tinymce.tpl.html | 116 + branches/conlite20/conlite/favicon.ico | Bin 0 -> 29038 bytes branches/conlite20/conlite/frameset.php | 132 + branches/conlite20/conlite/frameset_left.php | 77 + branches/conlite20/conlite/frameset_right.php | 75 + branches/conlite20/conlite/header.php | 128 + .../conlite/images/actions/clear_right.gif | Bin 0 -> 158 bytes branches/conlite20/conlite/images/arrow.gif | Bin 0 -> 105 bytes .../conlite/images/arrow_tipballoon.gif | Bin 0 -> 181 bytes branches/conlite20/conlite/images/article.gif | Bin 0 -> 82 bytes .../conlite/images/article_locked.gif | Bin 0 -> 190 bytes .../conlite/images/article_unlocked.gif | Bin 0 -> 173 bytes .../conlite/images/artikel_spez_akt.gif | Bin 0 -> 171 bytes .../conlite/images/artikel_spez_inakt.gif | Bin 0 -> 148 bytes .../conlite/images/avail_clients.gif | Bin 0 -> 90 bytes branches/conlite20/conlite/images/back.gif | Bin 0 -> 251 bytes .../conlite20/conlite/images/background.jpg | Bin 0 -> 724 bytes branches/conlite20/conlite/images/bg_dark.gif | Bin 0 -> 59 bytes branches/conlite20/conlite/images/bg_high.gif | Bin 0 -> 52 bytes .../conlite20/conlite/images/bg_light.gif | Bin 0 -> 193 bytes branches/conlite20/conlite/images/bg_sub.gif | Bin 0 -> 59 bytes .../conlite20/conlite/images/bg_trans.gif | Bin 0 -> 59 bytes .../conlite/images/but_art_conf2.gif | Bin 0 -> 76 bytes .../conlite20/conlite/images/but_art_new.gif | Bin 0 -> 74 bytes .../conlite20/conlite/images/but_back.gif | Bin 0 -> 131 bytes .../conlite20/conlite/images/but_cancel.gif | Bin 0 -> 104 bytes .../conlite/images/but_cancel_off.gif | Bin 0 -> 104 bytes .../conlite20/conlite/images/but_cat_conf.gif | Bin 0 -> 82 bytes .../conlite/images/but_cat_conf2.gif | Bin 0 -> 82 bytes .../conlite20/conlite/images/but_copy.gif | Bin 0 -> 86 bytes .../conlite20/conlite/images/but_delete.gif | Bin 0 -> 195 bytes .../conlite/images/but_downloadlist.gif | Bin 0 -> 85 bytes .../conlite20/conlite/images/but_edit.gif | Bin 0 -> 76 bytes .../conlite20/conlite/images/but_edithead.gif | Bin 0 -> 138 bytes .../conlite20/conlite/images/but_edithtml.gif | Bin 0 -> 138 bytes .../conlite/images/but_editimage.gif | Bin 0 -> 155 bytes .../conlite20/conlite/images/but_editlink.gif | Bin 0 -> 208 bytes .../conlite20/conlite/images/but_editpdf.gif | Bin 0 -> 318 bytes .../conlite20/conlite/images/but_editswf.gif | Bin 0 -> 337 bytes .../conlite20/conlite/images/but_edittext.gif | Bin 0 -> 138 bytes .../conlite20/conlite/images/but_editzip.gif | Bin 0 -> 250 bytes .../conlite20/conlite/images/but_help.gif | Bin 0 -> 79 bytes .../conlite/images/but_invert_selection.gif | Bin 0 -> 90 bytes .../conlite20/conlite/images/but_lastnode.gif | Bin 0 -> 69 bytes .../conlite20/conlite/images/but_logout.gif | Bin 0 -> 238 bytes .../conlite20/conlite/images/but_minus.gif | Bin 0 -> 70 bytes .../conlite/images/but_move_subtree.gif | Bin 0 -> 138 bytes .../conlite/images/but_move_subtree_main.gif | Bin 0 -> 114 bytes .../images/but_move_subtree_target.gif | Bin 0 -> 114 bytes .../conlite20/conlite/images/but_news.gif | Bin 0 -> 98 bytes branches/conlite20/conlite/images/but_ok.gif | Bin 0 -> 192 bytes .../conlite20/conlite/images/but_ok_off.gif | Bin 0 -> 138 bytes .../conlite20/conlite/images/but_online.gif | Bin 0 -> 138 bytes .../conlite/images/but_online_no.gif | Bin 0 -> 138 bytes .../conlite20/conlite/images/but_plus.gif | Bin 0 -> 75 bytes .../conlite20/conlite/images/but_preview.gif | Bin 0 -> 167 bytes .../conlite/images/but_properties.gif | Bin 0 -> 76 bytes .../conlite20/conlite/images/but_refresh.gif | Bin 0 -> 211 bytes .../conlite20/conlite/images/but_rename.gif | Bin 0 -> 84 bytes branches/conlite20/conlite/images/but_rss.gif | Bin 0 -> 156 bytes .../conlite/images/but_setreminder.gif | Bin 0 -> 142 bytes .../conlite/images/but_speichern.gif | Bin 0 -> 192 bytes .../conlite20/conlite/images/but_sync_art.gif | Bin 0 -> 82 bytes .../conlite/images/but_sync_art_off.gif | Bin 0 -> 82 bytes .../conlite20/conlite/images/but_sync_cat.gif | Bin 0 -> 86 bytes .../conlite/images/but_sync_cat_off.gif | Bin 0 -> 86 bytes .../conlite20/conlite/images/but_time_1.gif | Bin 0 -> 152 bytes .../conlite20/conlite/images/but_time_2.gif | Bin 0 -> 153 bytes .../conlite20/conlite/images/but_todo.gif | Bin 0 -> 138 bytes .../conlite20/conlite/images/but_todo_off.gif | Bin 0 -> 138 bytes .../conlite20/conlite/images/but_warn.gif | Bin 0 -> 91 bytes .../conlite20/conlite/images/calendar.gif | Bin 0 -> 90 bytes branches/conlite20/conlite/images/cl-logo.gif | Bin 0 -> 6085 bytes .../conlite20/conlite/images/close_all.gif | Bin 0 -> 49 bytes .../conlite20/conlite/images/collapsed.gif | Bin 0 -> 108 bytes .../conlite20/conlite/images/configure.gif | Bin 0 -> 82 bytes branches/conlite20/conlite/images/conlogo.gif | Bin 0 -> 3909 bytes branches/conlite20/conlite/images/contact.gif | Bin 0 -> 111 bytes branches/conlite20/conlite/images/dash.gif | Bin 0 -> 43 bytes .../conlite/images/db_backup_start.png | Bin 0 -> 11789 bytes .../conlite/images/db_backup_start_off.png | Bin 0 -> 8698 bytes branches/conlite20/conlite/images/delete.gif | Bin 0 -> 195 bytes .../conlite20/conlite/images/delete_inact.gif | Bin 0 -> 195 bytes .../conlite/images/delete_inact_g.gif | Bin 0 -> 195 bytes .../conlite/images/delete_inact_h.gif | Bin 0 -> 195 bytes .../conlite20/conlite/images/delete_over.gif | Bin 0 -> 195 bytes .../conlite20/conlite/images/editieren.gif | Bin 0 -> 138 bytes .../conlite20/conlite/images/exclamation.gif | Bin 0 -> 91 bytes .../conlite/images/filetypes/css.gif | Bin 0 -> 78 bytes .../conlite/images/filetypes/design.gif | Bin 0 -> 137 bytes .../conlite/images/filetypes/excel.gif | Bin 0 -> 77 bytes .../conlite/images/filetypes/gif.gif | Bin 0 -> 79 bytes .../conlite/images/filetypes/html.gif | Bin 0 -> 81 bytes .../conlite/images/filetypes/javascript.gif | Bin 0 -> 73 bytes .../conlite/images/filetypes/jpg.gif | Bin 0 -> 81 bytes .../conlite20/conlite/images/filetypes/js.gif | Bin 0 -> 73 bytes .../conlite/images/filetypes/movie.gif | Bin 0 -> 159 bytes .../conlite/images/filetypes/odf.gif | Bin 0 -> 81 bytes .../conlite/images/filetypes/pdf.gif | Bin 0 -> 82 bytes .../conlite/images/filetypes/php.gif | Bin 0 -> 82 bytes .../conlite/images/filetypes/png.gif | Bin 0 -> 82 bytes .../conlite/images/filetypes/ppt.gif | Bin 0 -> 82 bytes .../conlite/images/filetypes/sound.gif | Bin 0 -> 132 bytes .../conlite/images/filetypes/swf.gif | Bin 0 -> 80 bytes .../conlite/images/filetypes/txt.gif | Bin 0 -> 78 bytes .../conlite/images/filetypes/unknown.gif | Bin 0 -> 79 bytes .../conlite/images/filetypes/vcf.gif | Bin 0 -> 77 bytes .../conlite/images/filetypes/word.gif | Bin 0 -> 80 bytes .../conlite/images/filetypes/zip.gif | Bin 0 -> 79 bytes .../conlite20/conlite/images/filler_bg.gif | Bin 0 -> 80 bytes branches/conlite20/conlite/images/folder.gif | Bin 0 -> 64 bytes .../conlite/images/folder_delock.gif | Bin 0 -> 85 bytes .../conlite/images/folder_delocked.gif | Bin 0 -> 85 bytes .../conlite/images/folder_duplicate.gif | Bin 0 -> 86 bytes .../conlite/images/folder_duplicate_off.gif | Bin 0 -> 86 bytes .../conlite20/conlite/images/folder_lock.gif | Bin 0 -> 87 bytes .../conlite/images/folder_locked.gif | Bin 0 -> 87 bytes .../conlite20/conlite/images/folder_move.gif | Bin 0 -> 138 bytes .../conlite/images/folder_movedown.gif | Bin 0 -> 126 bytes .../conlite/images/folder_movedown_inact.gif | Bin 0 -> 126 bytes .../conlite/images/folder_moveup.gif | Bin 0 -> 126 bytes .../conlite/images/folder_moveup_inact.gif | Bin 0 -> 126 bytes .../conlite20/conlite/images/folder_new.gif | Bin 0 -> 74 bytes .../conlite20/conlite/images/folder_off.gif | Bin 0 -> 64 bytes .../conlite/images/folder_off_error.gif | Bin 0 -> 64 bytes .../images/folder_off_error_locked.gif | Bin 0 -> 87 bytes .../conlite/images/folder_off_locked.gif | Bin 0 -> 87 bytes .../conlite20/conlite/images/folder_on.gif | Bin 0 -> 64 bytes .../conlite/images/folder_on_error.gif | Bin 0 -> 64 bytes .../conlite/images/folder_on_error_locked.gif | Bin 0 -> 87 bytes .../conlite/images/folder_on_locked.gif | Bin 0 -> 87 bytes .../conlite/images/frame_handle_li.gif | Bin 0 -> 125 bytes .../conlite/images/frame_handle_re.gif | Bin 0 -> 124 bytes .../conlite/images/grid_collapse.gif | Bin 0 -> 70 bytes .../conlite20/conlite/images/grid_expand.gif | Bin 0 -> 75 bytes .../conlite20/conlite/images/grid_folder.gif | Bin 0 -> 64 bytes .../conlite/images/grid_linedown.gif | Bin 0 -> 73 bytes .../conlite/images/grid_linedownright.gif | Bin 0 -> 70 bytes .../conlite/images/grid_linedownrightend.gif | Bin 0 -> 65 bytes branches/conlite20/conlite/images/groups.gif | Bin 0 -> 119 bytes .../conlite20/conlite/images/groups_o.gif | Bin 0 -> 119 bytes .../conlite/images/icon_fatalerror.gif | Bin 0 -> 201 bytes .../conlite20/conlite/images/icon_warning.gif | Bin 0 -> 91 bytes .../conlite20/conlite/images/importieren.gif | Bin 0 -> 192 bytes branches/conlite20/conlite/images/index.php | 4 + branches/conlite20/conlite/images/info.gif | Bin 0 -> 90 bytes .../conlite20/conlite/images/isstart0.gif | Bin 0 -> 82 bytes .../conlite20/conlite/images/isstart0m.gif | Bin 0 -> 101 bytes .../conlite20/conlite/images/isstart0mr.gif | Bin 0 -> 159 bytes .../conlite20/conlite/images/isstart0r.gif | Bin 0 -> 142 bytes .../conlite20/conlite/images/isstart1.gif | Bin 0 -> 82 bytes .../conlite20/conlite/images/isstart1m.gif | Bin 0 -> 101 bytes .../conlite20/conlite/images/isstart1mr.gif | Bin 0 -> 161 bytes .../conlite20/conlite/images/isstart1r.gif | Bin 0 -> 140 bytes .../conlite20/conlite/images/lock_closed.gif | Bin 0 -> 89 bytes .../conlite20/conlite/images/lock_open.gif | Bin 0 -> 85 bytes .../conlite20/conlite/images/my_contenido.gif | Bin 0 -> 154 bytes .../conlite20/conlite/images/newsletter.gif | Bin 0 -> 90 bytes .../conlite/images/newsletter_16.gif | Bin 0 -> 90 bytes .../conlite/images/newsletter_dispatch_16.gif | Bin 0 -> 82 bytes .../images/newsletter_dispatch_16_off.gif | Bin 0 -> 82 bytes .../images/newsletter_dispatch_off.gif | Bin 0 -> 82 bytes .../conlite/images/newsletter_dispatch_on.gif | Bin 0 -> 82 bytes .../conlite/images/newsletter_off.gif | Bin 0 -> 90 bytes .../conlite/images/newsletter_on.gif | Bin 0 -> 90 bytes .../images/newsletter_recipientgroups_off.gif | Bin 0 -> 122 bytes .../images/newsletter_recipientgroups_on.gif | Bin 0 -> 122 bytes .../images/newsletter_recipients_off.gif | Bin 0 -> 111 bytes .../images/newsletter_recipients_on.gif | Bin 0 -> 111 bytes .../conlite/images/newsletter_sendtest_16.gif | Bin 0 -> 85 bytes .../images/newsletter_sendtest_16_off.gif | Bin 0 -> 85 bytes branches/conlite20/conlite/images/offline.gif | Bin 0 -> 93 bytes .../conlite20/conlite/images/offline_off.gif | Bin 0 -> 93 bytes branches/conlite20/conlite/images/online.gif | Bin 0 -> 90 bytes .../conlite20/conlite/images/online_off.gif | Bin 0 -> 90 bytes .../conlite20/conlite/images/open_all.gif | Bin 0 -> 53 bytes .../conlite20/conlite/images/ordner_oben.gif | Bin 0 -> 126 bytes .../conlite20/conlite/images/paging/first.gif | Bin 0 -> 109 bytes .../conlite20/conlite/images/paging/last.gif | Bin 0 -> 109 bytes .../conlite20/conlite/images/paging/next.gif | Bin 0 -> 117 bytes .../conlite/images/paging/previous.gif | Bin 0 -> 119 bytes .../conlite20/conlite/images/pfeil_links.gif | Bin 0 -> 81 bytes .../conlite20/conlite/images/pfeil_runter.gif | Bin 0 -> 82 bytes branches/conlite20/conlite/images/print.gif | Bin 0 -> 85 bytes .../conlite/images/reminder/prio_high.gif | Bin 0 -> 82 bytes .../conlite/images/reminder/prio_low.gif | Bin 0 -> 85 bytes .../conlite/images/reminder/prio_medium.gif | Bin 0 -> 85 bytes .../conlite/images/reminder/prio_veryhigh.gif | Bin 0 -> 82 bytes .../conlite/images/reminder/progress.gif | Bin 0 -> 69 bytes .../images/reminder/status_deferred.gif | Bin 0 -> 172 bytes .../conlite/images/reminder/status_done.gif | Bin 0 -> 173 bytes .../images/reminder/status_inprogress.gif | Bin 0 -> 169 bytes .../conlite/images/reminder/status_new.gif | Bin 0 -> 74 bytes .../images/reminder/status_waiting.gif | Bin 0 -> 170 bytes branches/conlite20/conlite/images/save.gif | Bin 0 -> 296 bytes .../conlite/images/social/facebook.gif | Bin 0 -> 1090 bytes .../conlite20/conlite/images/sort_down.gif | Bin 0 -> 103 bytes branches/conlite20/conlite/images/sort_up.gif | Bin 0 -> 103 bytes branches/conlite20/conlite/images/space.gif | Bin 0 -> 807 bytes branches/conlite20/conlite/images/spacer.gif | Bin 0 -> 43 bytes branches/conlite20/conlite/images/submit.gif | Bin 0 -> 131 bytes .../conlite20/conlite/images/submit_hover.gif | Bin 0 -> 131 bytes branches/conlite20/conlite/images/sync.png | Bin 0 -> 852 bytes .../conlite/images/template_properties.gif | Bin 0 -> 82 bytes .../images/template_properties_off.gif | Bin 0 -> 82 bytes .../conlite/images/toggle_frame_left.gif | Bin 0 -> 136 bytes .../conlite/images/toggle_frame_right.gif | Bin 0 -> 135 bytes branches/conlite20/conlite/images/top.gif | Bin 0 -> 860 bytes .../conlite20/conlite/images/user_online.gif | Bin 0 -> 97 bytes branches/conlite20/conlite/images/users.gif | Bin 0 -> 97 bytes branches/conlite20/conlite/images/users_o.gif | Bin 0 -> 97 bytes .../conlite20/conlite/images/vert-neu.gif | Bin 0 -> 2327 bytes branches/conlite20/conlite/images/vert.gif | Bin 0 -> 75 bytes .../images/widgets/foldingrow/collapsed.gif | Bin 0 -> 108 bytes .../images/widgets/foldingrow/expanded.gif | Bin 0 -> 111 bytes .../conlite/images/workflow_step_delete.gif | Bin 0 -> 195 bytes .../includes/ajax/include.ajax.con.php | 80 + .../includes/api/functions.api.general.php | 243 + .../includes/api/functions.frontend.list.php | 252 + .../conlite/includes/cfg_language_de.inc.php | 409 + .../includes/functions.api.category.php | 106 + .../conlite/includes/functions.api.images.php | 690 + .../conlite/includes/functions.api.php | 39 + .../conlite/includes/functions.api.string.php | 398 + .../conlite/includes/functions.con.php | 2247 ++ .../conlite/includes/functions.con2.php | 772 + .../conlite/includes/functions.database.php | 456 + .../functions.domxml-php4-to-php5.php | 657 + .../conlite/includes/functions.encoding.php | 95 + .../conlite/includes/functions.file.php | 369 + .../conlite/includes/functions.forms.php | 98 + .../conlite/includes/functions.general.php | 2238 ++ .../conlite/includes/functions.i18n.php | 227 + .../includes/functions.includePluginConf.php | 171 + .../conlite/includes/functions.lang.php | 637 + .../conlite/includes/functions.lay.php | 133 + .../conlite/includes/functions.mod.php | 214 + .../includes/functions.pathresolver.php | 405 + .../conlite/includes/functions.php54.php | 149 + .../conlite/includes/functions.php73.php | 6 + .../conlite/includes/functions.rights.php | 339 + .../conlite/includes/functions.stat.php | 1137 + .../conlite/includes/functions.str.php | 1465 ++ .../conlite/includes/functions.system.php | 661 + .../conlite/includes/functions.tpl.php | 830 + .../conlite/includes/functions.upl.php | 894 + .../conlite/includes/globals_off.inc.php | 120 + .../conlite/includes/grouprights.inc.php | 337 + .../conlite/includes/grouprights_area.inc.php | 202 + .../conlite/includes/grouprights_con.inc.php | 249 + .../conlite/includes/grouprights_lay.inc.php | 191 + .../includes/grouprights_members.inc.php | 232 + .../conlite/includes/grouprights_mod.inc.php | 169 + .../conlite/includes/grouprights_str.inc.php | 227 + .../conlite/includes/grouprights_tpl.inc.php | 170 + .../conlite/includes/include.CMS_EASYIMG.php | 163 + .../conlite/includes/include.CMS_HEAD.php | 99 + .../conlite/includes/include.CMS_HTML.php | 109 + .../conlite/includes/include.CMS_HTMLHEAD.php | 111 + .../conlite/includes/include.CMS_HTMLTEXT.php | 97 + .../conlite/includes/include.CMS_IMG.php | 289 + .../conlite/includes/include.CMS_LINK.php | 393 + .../conlite/includes/include.CMS_QRCODE.php | 89 + .../includes/include.CMS_SIMPLELINK.php | 173 + .../conlite/includes/include.CMS_SWF.php | 115 + .../conlite/includes/include.CMS_TEXT.php | 90 + .../conlite/includes/include.backendedit.php | 136 + .../conlite/includes/include.blank.php | 37 + .../includes/include.client_artspec.php | 180 + .../conlite/includes/include.client_edit.php | 338 + .../includes/include.client_left_top.php | 59 + .../conlite/includes/include.client_menu.php | 104 + .../includes/include.clientsettings.php | 213 + .../includes/include.con_art_overview.php | 1021 + .../includes/include.con_edit_form.php | 768 + .../includes/include.con_editcontent.php | 624 + .../conlite/includes/include.con_left_top.php | 512 + .../includes/include.con_str_overview.php | 773 + .../conlite/includes/include.con_subnav.php | 128 + .../conlite/includes/include.debug.php | 122 + .../includes/include.default_subnav.php | 199 + .../conlite/includes/include.files_subnav.php | 124 + .../include.frontend.group.subnav.php | 87 + .../includes/include.frontend.group_edit.php | 301 + .../includes/include.frontend.group_menu.php | 105 + .../include.frontend.group_rights.php | 139 + .../includes/include.frontend.left_top.php | 482 + .../includes/include.frontend.user_edit.php | 252 + .../includes/include.frontend.user_menu.php | 373 + .../includes/include.grouprights_create.php | 181 + .../includes/include.grouprights_details.php | 171 + .../includes/include.grouprights_external.php | 59 + .../includes/include.grouprights_left_top.php | 94 + .../includes/include.grouprights_menu.php | 212 + .../includes/include.grouprights_overview.php | 231 + .../includes/include.grouprights_subnav.php | 145 + .../includes/include.html_tpl_edit_form.php | 228 + .../include.html_tpl_files_overview.php | 162 + .../includes/include.html_tpl_history.php | 192 + .../includes/include.html_tpl_left_top.php | 58 + .../conlite/includes/include.info.php | 44 + .../conlite/includes/include.js_edit_form.php | 190 + .../includes/include.js_files_overview.php | 161 + .../conlite/includes/include.js_history.php | 183 + .../conlite/includes/include.js_left_top.php | 57 + .../conlite/includes/include.lang_edit.php | 274 + .../includes/include.lang_left_top.php | 89 + .../includes/include.lang_overview.php | 130 + .../includes/include.lay_edit_form.php | 236 + .../conlite/includes/include.lay_history.php | 146 + .../conlite/includes/include.lay_new.php | 44 + .../conlite/includes/include.lay_overview.php | 121 + .../conlite/includes/include.lay_preview.php | 39 + .../includes/include.left_top_blank.php | 37 + .../conlite/includes/include.logs.php | 324 + .../includes/include.mod_edit_form.php | 491 + .../conlite/includes/include.mod_history.php | 159 + .../conlite/includes/include.mod_new.php | 216 + .../conlite/includes/include.mod_overview.php | 338 + .../conlite/includes/include.mod_package.php | 492 + .../conlite/includes/include.mod_sync.php | 69 + .../includes/include.mod_translate.php | 203 + .../include.mod_translate_stringlist.php | 86 + .../include.mycontenido.tasks.edit.php | 150 + .../includes/include.mycontenido.tasks.php | 428 + .../include.mycontenido_lastarticles.php | 320 + .../includes/include.mycontenido_settings.php | 148 + .../conlite/includes/include.note.display.php | 51 + .../conlite/includes/include.note.popup.php | 100 + .../includes/include.pretplcfg_edit.php | 106 + .../includes/include.pretplcfg_edit_form.php | 160 + .../includes/include.rights_create.php | 316 + .../includes/include.rights_external.php | 58 + .../includes/include.rights_left_top.php | 199 + .../conlite/includes/include.rights_menu.php | 256 + .../includes/include.rights_overview.php | 469 + .../includes/include.stat_left_top.php | 36 + .../conlite/includes/include.stat_menu.php | 98 + .../includes/include.stat_overview.php | 147 + .../conlite/includes/include.str_overview.php | 1002 + .../conlite/includes/include.str_subnav.php | 108 + .../includes/include.style_edit_form.php | 211 + .../includes/include.style_files_overview.php | 161 + .../includes/include.style_history.php | 188 + .../includes/include.style_left_top.php | 57 + .../conlite/includes/include.subnav.php | 83 + .../conlite/includes/include.symbolhelp.php | 37 + .../includes/include.system_configuration.php | 196 + .../includes/include.system_db_backup.php | 408 + .../conlite/includes/include.system_purge.php | 226 + .../includes/include.system_sysvalues.php | 140 + .../includes/include.systemsettings.php | 194 + .../conlite/includes/include.todo.popup.php | 136 + .../includes/include.tpl_edit_form.php | 254 + .../conlite/includes/include.tpl_new.php | 44 + .../conlite/includes/include.tpl_overview.php | 131 + .../includes/include.tpl_visualedit.php | 233 + .../conlite/includes/include.tplcfg_edit.php | 210 + .../includes/include.tplcfg_edit_form.php | 487 + .../conlite/includes/include.upl_artlist.php | 185 + .../includes/include.upl_dirs_overview.php | 594 + .../conlite/includes/include.upl_edit.php | 318 + .../includes/include.upl_files_overview.php | 931 + .../includes/include.upl_files_upload.php | 70 + .../conlite/includes/include.upl_left_top.php | 163 + .../includes/include.upl_search_results.php | 632 + .../conlite/includes/include.upl_subnav.php | 117 + branches/conlite20/conlite/includes/index.php | 4 + .../conlite20/conlite/includes/main.login.php | 291 + .../conlite/includes/pseudo-cron.inc.php | 511 + .../conlite20/conlite/includes/rights.inc.php | 374 + .../conlite/includes/rights_area.inc.php | 195 + .../conlite/includes/rights_con.inc.php | 234 + .../conlite/includes/rights_lay.inc.php | 165 + .../conlite/includes/rights_mod.inc.php | 163 + .../conlite/includes/rights_str.inc.php | 228 + .../conlite/includes/rights_tpl.inc.php | 166 + .../conlite20/conlite/includes/startup.php | 227 + branches/conlite20/conlite/index.php | 145 + branches/conlite20/conlite/locale/conlite.pot | 5239 +++++ .../locale/de_DE/LC_MESSAGES/conlite.mo | Bin 0 -> 79652 bytes .../locale/de_DE/LC_MESSAGES/conlite.po | 6605 ++++++ .../locale/en_US/LC_MESSAGES/conlite.mo | Bin 0 -> 548 bytes .../locale/en_US/LC_MESSAGES/conlite.po | 5162 +++++ .../conlite20/conlite/locale/potfiles.txt | 585 + branches/conlite20/conlite/logout.php | 57 + .../conlite20/conlite/logs/deprecated.txt | 0 branches/conlite20/conlite/logs/index.php | 4 + branches/conlite20/conlite/main.loginform.php | 211 + branches/conlite20/conlite/main.php | 268 + .../classes/class.metatag.creator.html5.php | 480 + .../createmetatags/conf/MetaExtension.php | 314 + .../include.chain.content.createmetatags.php | 298 + .../includes/keyword_density.php | 220 + .../includes/keyword_density_php52.php | 221 + .../includes/class.ceccreatefacebookmeta.php | 48 + .../plugins/chains/includes/config.plugin.php | 48 + .../include.chain.content.set_clear_cache.php | 98 + .../include.chain.frontend.cat_access.php | 74 + ...clude.chain.frontend.cat_backendaccess.php | 72 + .../include.chain.frontend.createbasehref.php | 70 + ...clude.chain.frontend.output_compressor.php | 699 + .../chains/includes/old.config.plugin.php | 44 + .../plugins/cl_newsletter/cl_plugin.xml | 82 + .../classes/class.newsletter.groups.php | 288 + .../classes/class.newsletter.jobs.php | 483 + .../classes/class.newsletter.logs.php | 243 + .../classes/class.newsletter.php | 998 + .../classes/class.newsletter.recipients.php | 248 + .../includes/config.autoloader.php | 17 + .../cl_newsletter/includes/config.plugin.php | 35 + .../includes/include.newsletter_edit.php | 556 + .../include.newsletter_edit_message.php | 257 + .../include.newsletter_jobs_details.php | 379 + .../includes/include.newsletter_jobs_menu.php | 344 + .../include.newsletter_jobs_subnav.php | 67 + .../includes/include.newsletter_left_top.php | 960 + .../includes/include.newsletter_menu.php | 367 + .../includes/include.newsletter_subnav.php | 65 + .../include.recipients.group.subnav.php | 72 + .../include.recipients.group_edit.php | 568 + .../include.recipients.group_menu.php | 234 + .../includes/include.recipients_edit.php | 246 + .../includes/include.recipients_import.php | 360 + .../includes/include.recipients_menu.php | 288 + .../cl_newsletter/locale/cl_newsletter.pot | 1055 + .../locale/de_DE/LC_MESSAGES/cl_newsletter.mo | Bin 0 -> 19185 bytes .../locale/de_DE/LC_MESSAGES/cl_newsletter.po | 1162 + .../plugins/cl_newsletter/locale/potfiles.txt | 21 + .../plugins/cl_newsletter/plugin_install.sql | 114 + .../cl_newsletter/plugin_uninstall.sql | 12 + .../plugins/cl_newsletter/xml/lang_de_DE.xml | 10 + .../plugins/cl_newsletter/xml/lang_en_EN.xml | 10 + .../plugins/cl_newsletter/xml/lang_en_US.xml | 10 + .../plugins/cl_newsletter/xml/lang_fr_FR.xml | 10 + .../plugins/cl_newsletter/xml/lang_it_IT.xml | 10 + .../plugins/cl_newsletter/xml/lang_nl_NL.xml | 10 + .../classes/class.content_allocation.php | 391 + .../class.content_allocation_article.php | 117 + .../class.content_allocation_complexlist.php | 114 + .../class.content_allocation_selectbox.php | 87 + .../classes/class.content_allocation_tree.php | 558 + .../class.content_allocation_treeview.php | 234 + .../content_allocation/images/arrow.gif | Bin 0 -> 56 bytes .../images/call_contentallocation.gif | Bin 0 -> 90 bytes .../content_allocation/images/normal.gif | Bin 0 -> 112 bytes .../includes/config.autoloader.php | 30 + .../includes/config.plugin.php | 65 + .../includes/functions.chains.php | 67 + .../include.contentallocation_article.php | 132 + .../includes/include.left_bottom.php | 22 + .../includes/include.left_top.php | 39 + .../includes/include.right_bottom.php | 164 + .../locale/content_allocation.pot | 109 + .../de_DE/LC_MESSAGES/content_allocation.mo | Bin 0 -> 2081 bytes .../de_DE/LC_MESSAGES/content_allocation.po | 112 + .../content_allocation/locale/potfiles.txt | 15 + .../content_allocation/scripts/complexlist.js | 133 + .../content_allocation/style/complexlist.css | 105 + .../templates/template.tree_article.html | 17 + .../templates/template.tree_complexlist.html | 76 + .../templates/template.tree_structure.html | 13 + .../xml/content_allocation.xml | 12 + .../content_allocation/xml/lang_de_DE.xml | 11 + .../content_allocation/xml/lang_en_EN.xml | 11 + .../content_allocation/xml/lang_en_US.xml | 11 + .../frontendlogic/category/category.php | 82 + .../frontendlogic/category/docs/conlogo.gif | Bin 0 -> 5334 bytes .../docs/frontend.protectedcategories.html | 104 + .../LC_MESSAGES/frontendlogic_category.mo | Bin 0 -> 647 bytes .../LC_MESSAGES/frontendlogic_category.po | 25 + .../frontendlogic/includes/config.plugin.php | 31 + .../frontendusers/includes/config.plugin.php | 7 + .../LC_MESSAGES/frontendusers_valid_from.mo | Bin 0 -> 601 bytes .../LC_MESSAGES/frontendusers_valid_from.po | 26 + .../locale/frontendusers_valid_from.pot | 22 + .../valid_from/locale/potfiles.txt | 1 + .../frontendusers/valid_from/valid_from.php | 67 + .../LC_MESSAGES/frontendusers_valid_to.mo | Bin 0 -> 597 bytes .../LC_MESSAGES/frontendusers_valid_to.po | 26 + .../locale/frontendusers_valid_to.pot | 22 + .../valid_to/locale/potfiles.txt | 1 + .../frontendusers/valid_to/valid_to.php | 63 + branches/conlite20/conlite/plugins/index.php | 4 + .../linkchecker/includes/config.plugin.php | 47 + .../includes/include.checkperms.php | 89 + .../includes/include.linkchecker.php | 413 + .../includes/include.linkchecker_tests.php | 310 + .../include.linkchecker_whitelist.php | 85 + .../locale/de_DE/LC_MESSAGES/linkchecker.mo | Bin 0 -> 2139 bytes .../locale/de_DE/LC_MESSAGES/linkchecker.po | 122 + .../linkchecker/locale/linkchecker.pot | 135 + .../plugins/linkchecker/locale/potfiles.txt | 12 + .../template.linkchecker_noerrors.html | 36 + .../standard/template.linkchecker_test.html | 202 + .../template.linkchecker_test_errors.html | 7 + .../template.linkchecker_test_errors_cat.html | 7 + .../template.linkchecker_test_nothing.html | 3 + .../template.linkchecker_whitelist.html | 51 + .../template.linkchecker_whitelist_urls.html | 5 + .../plugins/linkchecker/xml/lang_de_DE.xml | 14 + .../plugins/linkchecker/xml/lang_en_EN.xml | 14 + .../plugins/linkchecker/xml/lang_en_US.xml | 14 + .../mod_rewrite/classes/class.modrewrite.php | 1071 + .../classes/class.modrewritebase.php | 87 + .../classes/class.modrewritecontroller.php | 678 + .../classes/class.modrewritedebugger.php | 88 + .../classes/class.modrewritetest.php | 300 + .../classes/class.modrewriteurlstack.php | 314 + .../classes/class.modrewriteurlutil.php | 306 + .../class.modrewrite_content_controller.php | 426 + ...ss.modrewrite_contentexpert_controller.php | 143 + ...lass.modrewrite_contenttest_controller.php | 176 + .../class.modrewrite_controller_abstract.php | 226 + .../external/aToolTip/css/atooltip.css | 43 + .../external/aToolTip/css/style.css | 174 + .../mod_rewrite/external/aToolTip/demos.html | 81 + .../external/aToolTip/images/bg.png | Bin 0 -> 1218 bytes .../external/aToolTip/images/infoBtn.gif | Bin 0 -> 90 bytes .../external/aToolTip/js/atooltip.jquery.js | 118 + .../aToolTip/js/atooltip.min.jquery.js | 2 + .../external/aToolTip/js/jquery.min.js | 19 + .../files/htaccess_restrictive.txt | 69 + .../mod_rewrite/files/htaccess_simple.txt | 69 + .../includes/config.mod_rewrite_default.php | 114 + .../mod_rewrite/includes/config.plugin.php | 167 + .../includes/front_content_controller.php | 102 + .../includes/functions.mod_rewrite.php | 912 + .../includes/include.mod_rewrite_content.php | 312 + .../include.mod_rewrite_content_top.php | 18 + .../include.mod_rewrite_contentexpert.php | 119 + .../include.mod_rewrite_contenttest.php | 83 + .../locale/de_DE/LC_MESSAGES/mod_rewrite.mo | Bin 0 -> 30156 bytes .../locale/de_DE/LC_MESSAGES/mod_rewrite.po | 944 + .../mod_rewrite/locale/mod_rewrite.pot | 744 + .../plugins/mod_rewrite/locale/potfiles.txt | 24 + .../mod_rewrite/scripts/mod_rewrite.js | 96 + .../plugins/mod_rewrite/styles/styles.css | 101 + .../mod_rewrite/templates/content.html | 368 + .../mod_rewrite/templates/content_top.html | 36 + .../mod_rewrite/templates/contentexpert.html | 151 + .../mod_rewrite/templates/contenttest.html | 63 + .../plugins/mod_rewrite/xml/lang_de_DE.xml | 14 + .../plugins/mod_rewrite/xml/lang_en_US.xml | 14 + .../repository/custom/FrontendNavigation.php | 757 + .../conlite/plugins/smarty/cl_plugin.xml | 19 + .../smarty/classes/class.smarty.backend.php | 47 + .../smarty/classes/class.smarty.frontend.php | 158 + .../smarty/classes/class.smarty.wrapper.php | 73 + .../smarty/includes/config.autoloader.php | 25 + .../plugins/smarty/includes/config.plugin.php | 37 + .../plugins/smarty/libs/Autoloader.php | 110 + .../plugins/smarty/libs/Smarty.class.php | 1539 ++ .../plugins/smarty/libs/SmartyBC.class.php | 455 + .../conlite/plugins/smarty/libs/bootstrap.php | 17 + .../conlite/plugins/smarty/libs/debug.tpl | 160 + .../smarty/libs/plugins/block.textformat.php | 120 + .../smarty/libs/plugins/function.counter.php | 73 + .../smarty/libs/plugins/function.cycle.php | 105 + .../smarty/libs/plugins/function.fetch.php | 221 + .../libs/plugins/function.html_checkboxes.php | 252 + .../libs/plugins/function.html_image.php | 167 + .../libs/plugins/function.html_options.php | 209 + .../libs/plugins/function.html_radios.php | 235 + .../plugins/function.html_select_date.php | 397 + .../plugins/function.html_select_time.php | 374 + .../libs/plugins/function.html_table.php | 176 + .../smarty/libs/plugins/function.mailto.php | 153 + .../smarty/libs/plugins/function.math.php | 109 + .../libs/plugins/modifier.capitalize.php | 101 + .../libs/plugins/modifier.date_format.php | 83 + .../libs/plugins/modifier.debug_print_var.php | 112 + .../smarty/libs/plugins/modifier.escape.php | 232 + .../libs/plugins/modifier.mb_wordwrap.php | 75 + .../libs/plugins/modifier.regex_replace.php | 58 + .../smarty/libs/plugins/modifier.replace.php | 39 + .../smarty/libs/plugins/modifier.spacify.php | 27 + .../smarty/libs/plugins/modifier.truncate.php | 66 + .../libs/plugins/modifiercompiler.cat.php | 29 + .../modifiercompiler.count_characters.php | 32 + .../modifiercompiler.count_paragraphs.php | 27 + .../modifiercompiler.count_sentences.php | 27 + .../plugins/modifiercompiler.count_words.php | 32 + .../libs/plugins/modifiercompiler.default.php | 35 + .../libs/plugins/modifiercompiler.escape.php | 119 + .../plugins/modifiercompiler.from_charset.php | 33 + .../libs/plugins/modifiercompiler.indent.php | 33 + .../libs/plugins/modifiercompiler.lower.php | 31 + .../libs/plugins/modifiercompiler.noprint.php | 21 + .../modifiercompiler.string_format.php | 25 + .../libs/plugins/modifiercompiler.strip.php | 33 + .../plugins/modifiercompiler.strip_tags.php | 29 + .../plugins/modifiercompiler.to_charset.php | 33 + .../plugins/modifiercompiler.unescape.php | 50 + .../libs/plugins/modifiercompiler.upper.php | 29 + .../plugins/modifiercompiler.wordwrap.php | 39 + .../plugins/outputfilter.trimwhitespace.php | 89 + .../plugins/shared.escape_special_chars.php | 34 + .../plugins/shared.literal_compiler_param.php | 36 + .../libs/plugins/shared.make_timestamp.php | 45 + .../libs/plugins/shared.mb_str_replace.php | 55 + .../smarty/libs/plugins/shared.mb_unicode.php | 54 + .../variablefilter.htmlspecialchars.php | 19 + .../libs/sysplugins/smarty_cacheresource.php | 220 + .../smarty_cacheresource_custom.php | 275 + .../smarty_cacheresource_keyvaluestore.php | 507 + .../smarty/libs/sysplugins/smarty_data.php | 68 + .../libs/sysplugins/smarty_internal_block.php | 90 + .../smarty_internal_cacheresource_file.php | 225 + .../smarty_internal_compile_append.php | 51 + .../smarty_internal_compile_assign.php | 94 + .../smarty_internal_compile_block.php | 202 + .../smarty_internal_compile_block_child.php | 54 + .../smarty_internal_compile_block_parent.php | 73 + .../smarty_internal_compile_break.php | 110 + .../smarty_internal_compile_call.php | 89 + .../smarty_internal_compile_capture.php | 112 + .../smarty_internal_compile_config_load.php | 98 + .../smarty_internal_compile_continue.php | 42 + .../smarty_internal_compile_debug.php | 42 + .../smarty_internal_compile_eval.php | 72 + .../smarty_internal_compile_extends.php | 144 + .../smarty_internal_compile_for.php | 170 + .../smarty_internal_compile_foreach.php | 344 + .../smarty_internal_compile_function.php | 216 + .../sysplugins/smarty_internal_compile_if.php | 211 + .../smarty_internal_compile_include.php | 344 + .../smarty_internal_compile_include_php.php | 111 + .../smarty_internal_compile_insert.php | 155 + .../smarty_internal_compile_ldelim.php | 40 + .../smarty_internal_compile_make_nocache.php | 64 + .../smarty_internal_compile_nocache.php | 75 + ..._internal_compile_private_block_plugin.php | 122 + ...nternal_compile_private_foreachsection.php | 221 + ...ternal_compile_private_function_plugin.php | 74 + ...arty_internal_compile_private_modifier.php | 150 + ..._compile_private_object_block_function.php | 42 + ...ternal_compile_private_object_function.php | 86 + .../smarty_internal_compile_private_php.php | 216 + ...ernal_compile_private_print_expression.php | 162 + ...ernal_compile_private_registered_block.php | 72 + ...al_compile_private_registered_function.php | 86 + ...ernal_compile_private_special_variable.php | 126 + .../smarty_internal_compile_rdelim.php | 40 + .../smarty_internal_compile_section.php | 469 + .../smarty_internal_compile_setfilter.php | 70 + ...ty_internal_compile_shared_inheritance.php | 46 + .../smarty_internal_compile_while.php | 100 + .../smarty_internal_compilebase.php | 196 + .../smarty_internal_config_file_compiler.php | 201 + .../smarty_internal_configfilelexer.php | 733 + .../smarty_internal_configfileparser.php | 989 + .../libs/sysplugins/smarty_internal_data.php | 285 + .../libs/sysplugins/smarty_internal_debug.php | 426 + .../smarty_internal_extension_handler.php | 171 + ...rty_internal_method_addautoloadfilters.php | 52 + ...ty_internal_method_adddefaultmodifiers.php | 42 + .../smarty_internal_method_append.php | 74 + .../smarty_internal_method_appendbyref.php | 50 + .../smarty_internal_method_assignbyref.php | 36 + .../smarty_internal_method_assignglobal.php | 43 + .../smarty_internal_method_clearallassign.php | 37 + .../smarty_internal_method_clearallcache.php | 40 + .../smarty_internal_method_clearassign.php | 44 + .../smarty_internal_method_clearcache.php | 44 + ..._internal_method_clearcompiledtemplate.php | 126 + .../smarty_internal_method_clearconfig.php | 41 + ...marty_internal_method_compileallconfig.php | 33 + ...ty_internal_method_compilealltemplates.php | 119 + .../smarty_internal_method_configload.php | 183 + .../smarty_internal_method_createdata.php | 44 + ...rty_internal_method_getautoloadfilters.php | 37 + ...arty_internal_method_getconfigvariable.php | 34 + .../smarty_internal_method_getconfigvars.php | 58 + ...marty_internal_method_getdebugtemplate.php | 35 + ...ty_internal_method_getdefaultmodifiers.php | 35 + .../smarty_internal_method_getglobal.php | 47 + ...ty_internal_method_getregisteredobject.php | 44 + ...arty_internal_method_getstreamvariable.php | 51 + .../smarty_internal_method_gettags.php | 62 + ...smarty_internal_method_gettemplatevars.php | 116 + .../smarty_internal_method_loadfilter.php | 77 + .../smarty_internal_method_loadplugin.php | 111 + .../smarty_internal_method_mustcompile.php | 51 + ..._internal_method_registercacheresource.php | 40 + .../smarty_internal_method_registerclass.php | 46 + ...al_method_registerdefaultconfighandler.php | 42 + ...al_method_registerdefaultpluginhandler.php | 43 + ..._method_registerdefaulttemplatehandler.php | 82 + .../smarty_internal_method_registerfilter.php | 88 + .../smarty_internal_method_registerobject.php | 72 + .../smarty_internal_method_registerplugin.php | 51 + ...marty_internal_method_registerresource.php | 44 + ...rty_internal_method_setautoloadfilters.php | 70 + ...marty_internal_method_setdebugtemplate.php | 41 + ...ty_internal_method_setdefaultmodifiers.php | 38 + .../smarty_internal_method_unloadfilter.php | 42 + ...nternal_method_unregistercacheresource.php | 40 + ...marty_internal_method_unregisterfilter.php | 42 + ...marty_internal_method_unregisterobject.php | 40 + ...marty_internal_method_unregisterplugin.php | 41 + ...rty_internal_method_unregisterresource.php | 40 + .../smarty_internal_nocache_insert.php | 53 + .../sysplugins/smarty_internal_parsetree.php | 54 + .../smarty_internal_parsetree_code.php | 42 + .../smarty_internal_parsetree_dq.php | 95 + .../smarty_internal_parsetree_dqcontent.php | 42 + .../smarty_internal_parsetree_tag.php | 69 + .../smarty_internal_parsetree_template.php | 128 + .../smarty_internal_parsetree_text.php | 40 + .../smarty_internal_resource_eval.php | 95 + .../smarty_internal_resource_extends.php | 125 + .../smarty_internal_resource_file.php | 176 + .../smarty_internal_resource_php.php | 111 + .../smarty_internal_resource_registered.php | 99 + .../smarty_internal_resource_stream.php | 80 + .../smarty_internal_resource_string.php | 107 + .../smarty_internal_runtime_cachemodify.php | 68 + ...rty_internal_runtime_cacheresourcefile.php | 142 + .../smarty_internal_runtime_capture.php | 169 + .../smarty_internal_runtime_codeframe.php | 98 + .../smarty_internal_runtime_filterhandler.php | 69 + .../smarty_internal_runtime_foreach.php | 151 + ...smarty_internal_runtime_getincludepath.php | 182 + .../smarty_internal_runtime_inheritance.php | 241 + .../smarty_internal_runtime_make_nocache.php | 56 + .../smarty_internal_runtime_tplfunction.php | 171 + .../smarty_internal_runtime_updatecache.php | 165 + .../smarty_internal_runtime_updatescope.php | 115 + .../smarty_internal_runtime_writefile.php | 105 + ...smarty_internal_smartytemplatecompiler.php | 174 + .../sysplugins/smarty_internal_template.php | 692 + .../smarty_internal_templatebase.php | 354 + .../smarty_internal_templatecompilerbase.php | 1394 ++ .../smarty_internal_templatelexer.php | 1136 + .../smarty_internal_templateparser.php | 2764 +++ .../smarty_internal_testinstall.php | 599 + .../sysplugins/smarty_internal_undefined.php | 68 + .../libs/sysplugins/smarty_resource.php | 254 + .../sysplugins/smarty_resource_custom.php | 95 + .../sysplugins/smarty_resource_recompiled.php | 92 + .../sysplugins/smarty_resource_uncompiled.php | 49 + .../libs/sysplugins/smarty_security.php | 730 + .../sysplugins/smarty_template_cached.php | 256 + .../sysplugins/smarty_template_compiled.php | 257 + .../sysplugins/smarty_template_config.php | 99 + .../smarty_template_resource_base.php | 158 + .../sysplugins/smarty_template_source.php | 210 + .../sysplugins/smarty_undefined_variable.php | 37 + .../libs/sysplugins/smarty_variable.php | 48 + .../sysplugins/smartycompilerexception.php | 42 + .../libs/sysplugins/smartyexception.php | 16 + .../workflow/classes/class.workflow.php | 180 + .../classes/class.workflowactions.php | 132 + .../classes/class.workflowallocation.php | 242 + .../classes/class.workflowartallocation.php | 361 + .../workflow/classes/class.workflowitems.php | 304 + .../workflow/classes/class.workflowtasks.php | 106 + .../classes/class.workflowusersequence.php | 278 + .../workflow/cronjobs/advance_workflow.php | 114 + .../workflow/images/no_verschieben.gif | Bin 0 -> 121 bytes .../workflow/images/nu_verschieben.gif | Bin 0 -> 121 bytes .../plugins/workflow/images/workflow.gif | Bin 0 -> 96 bytes .../plugins/workflow/images/workflow_alt.gif | Bin 0 -> 96 bytes .../workflow/images/workflow_email_noti.gif | Bin 0 -> 90 bytes .../workflow/images/workflow_erstellen.gif | Bin 0 -> 74 bytes .../workflow/images/workflow_escal_noti.gif | Bin 0 -> 84 bytes .../plugins/workflow/images/workflow_step.gif | Bin 0 -> 61 bytes .../workflow/images/workflow_step_delete.gif | Bin 0 -> 195 bytes .../images/workflow_step_ist_raus.gif | Bin 0 -> 61 bytes .../workflow/images/workflow_step_new.gif | Bin 0 -> 74 bytes .../plugins/workflow/images/workflow_user.gif | Bin 0 -> 113 bytes .../workflow/includes/config.plugin.php | 453 + .../workflow/includes/functions.workflow.php | 552 + .../includes/include.workflow_edit.php | 109 + .../includes/include.workflow_left_top.php | 48 + .../includes/include.workflow_list.php | 129 + .../includes/include.workflow_steps.php | 405 + .../includes/include.workflow_subnav.php | 113 + .../includes/include.workflow_tasks.php | 274 + .../locale/de_DE/LC_MESSAGES/workflow.mo | Bin 0 -> 6472 bytes .../locale/de_DE/LC_MESSAGES/workflow.po | 453 + .../plugins/workflow/locale/potfiles.txt | 18 + .../plugins/workflow/locale/workflow.pot | 398 + .../templates/template.workflow_steps.html | 13 + .../templates/template.workflow_tasks.html | 157 + .../plugins/workflow/xml/lang_de_DE.xml | 17 + .../plugins/workflow/xml/lang_en_EN.xml | 17 + .../plugins/workflow/xml/lang_en_US.xml | 17 + .../conlite20/conlite/scripts/HTMLObj.js.php | 401 + .../conlite20/conlite/scripts/addImageTags.js | 61 + .../conlite/scripts/articleObject.js.php | 475 + .../conlite20/conlite/scripts/browserCheck.js | 33 + .../conlite20/conlite/scripts/cfoldingrow.js | 38 + branches/conlite20/conlite/scripts/cmsDate.js | 177 + .../conlite20/conlite/scripts/cmsFileList.js | 426 + .../conlite20/conlite/scripts/cmsTeaser.js | 268 + .../conlite/scripts/conFrameResize.js | 352 + .../conlite20/conlite/scripts/con_tiny.js | 367 + .../conlite/scripts/contenidoConfig.js | 305 + .../conlite/scripts/contextMenu.remove.js | 106 + .../conlite/scripts/expandCollapse.js | 94 + branches/conlite20/conlite/scripts/general.js | 68 + .../conlite/scripts/group_association.js | 144 + branches/conlite20/conlite/scripts/header.js | 452 + .../conlite20/conlite/scripts/help.js.php | 79 + .../conlite20/conlite/scripts/iZoom.js.php | 80 + branches/conlite20/conlite/scripts/index.php | 4 + branches/conlite20/conlite/scripts/infoBox.js | 20 + .../i18n/jquery.ui.colorpicker-de.js | 27 + .../i18n/jquery.ui.colorpicker-el.js | 28 + .../i18n/jquery.ui.colorpicker-en-GB.js | 27 + .../i18n/jquery.ui.colorpicker-en-US.js | 27 + .../i18n/jquery.ui.colorpicker-en.js | 27 + .../i18n/jquery.ui.colorpicker-fr.js | 27 + .../i18n/jquery.ui.colorpicker-nl.js | 27 + .../i18n/jquery.ui.colorpicker-pt-BR.js | 27 + .../i18n/jquery.ui.colorpicker-ru.js | 27 + .../colorpicker/images/128/bar-alpha.png | Bin 0 -> 1564 bytes .../jquery/colorpicker/images/128/bar.png | Bin 0 -> 1076 bytes .../jquery/colorpicker/images/128/map.png | Bin 0 -> 37070 bytes .../jquery/colorpicker/images/bar-alpha.png | Bin 0 -> 2195 bytes .../jquery/colorpicker/images/bar-opacity.png | Bin 0 -> 134 bytes .../jquery/colorpicker/images/bar-pointer.png | Bin 0 -> 198 bytes .../scripts/jquery/colorpicker/images/bar.png | Bin 0 -> 382 bytes .../jquery/colorpicker/images/map-opacity.png | Bin 0 -> 139 bytes .../jquery/colorpicker/images/map-pointer.png | Bin 0 -> 344 bytes .../scripts/jquery/colorpicker/images/map.png | Bin 0 -> 78245 bytes .../colorpicker/images/preview-opacity.png | Bin 0 -> 135 bytes .../colorpicker/images/ui-colorpicker.png | Bin 0 -> 494 bytes .../jquery/colorpicker/jquery.colorpicker.css | 227 + .../jquery/colorpicker/jquery.colorpicker.js | 3004 +++ .../jquery.ui.colorpicker-cmyk-parser.js | 13 + ...y.ui.colorpicker-cmyk-percentage-parser.js | 13 + .../parts/jquery.ui.colorpicker-memory.js | 75 + .../parts/jquery.ui.colorpicker-rgbslider.js | 81 + .../jquery.ui.colorpicker-swatchesswitcher.js | 28 + .../swatches/jquery.ui.colorpicker-crayola.js | 125 + .../swatches/jquery.ui.colorpicker-pantone.js | 942 + .../jquery.ui.colorpicker-ral-classic.js | 218 + .../swatches/jquery.ui.colorpicker-x11.js | 150 + .../jquery/jquery-migrate-1.2.1.min.js | 2 + .../conlite/scripts/jquery/jquery-ui.js | 13 + .../conlite/scripts/jquery/jquery-ui.old.js | 756 + .../conlite/scripts/jquery/jquery.js | 5 + .../conlite/scripts/jquery/jquery.old.js | 154 + .../scripts/jscalendar/calendar-contenido.css | 232 + .../scripts/jscalendar/calendar-setup.js | 200 + .../conlite/scripts/jscalendar/calendar.js | 1882 ++ .../scripts/jscalendar/lang/calendar-af.js | 39 + .../scripts/jscalendar/lang/calendar-al.js | 100 + .../scripts/jscalendar/lang/calendar-bg.js | 124 + .../jscalendar/lang/calendar-big5-utf8.js | 123 + .../scripts/jscalendar/lang/calendar-big5.js | 123 + .../scripts/jscalendar/lang/calendar-br.js | 108 + .../scripts/jscalendar/lang/calendar-ca.js | 123 + .../jscalendar/lang/calendar-cs-utf8.js | 65 + .../jscalendar/lang/calendar-cs-win.js | 65 + .../scripts/jscalendar/lang/calendar-da.js | 123 + .../scripts/jscalendar/lang/calendar-de.js | 124 + .../scripts/jscalendar/lang/calendar-du.js | 45 + .../scripts/jscalendar/lang/calendar-el.js | 89 + .../scripts/jscalendar/lang/calendar-en.js | 127 + .../scripts/jscalendar/lang/calendar-es.js | 129 + .../scripts/jscalendar/lang/calendar-fi.js | 98 + .../scripts/jscalendar/lang/calendar-fr.js | 125 + .../jscalendar/lang/calendar-he-utf8.js | 123 + .../scripts/jscalendar/lang/calendar-hu.js | 124 + .../scripts/jscalendar/lang/calendar-it.js | 124 + .../scripts/jscalendar/lang/calendar-jp.js | 45 + .../jscalendar/lang/calendar-ko-utf8.js | 120 + .../scripts/jscalendar/lang/calendar-ko.js | 120 + .../jscalendar/lang/calendar-lt-utf8.js | 114 + .../scripts/jscalendar/lang/calendar-lt.js | 114 + .../scripts/jscalendar/lang/calendar-lv.js | 123 + .../scripts/jscalendar/lang/calendar-nl.js | 73 + .../scripts/jscalendar/lang/calendar-no.js | 114 + .../jscalendar/lang/calendar-pl-utf8.js | 93 + .../scripts/jscalendar/lang/calendar-pl.js | 56 + .../scripts/jscalendar/lang/calendar-pt.js | 123 + .../scripts/jscalendar/lang/calendar-ro.js | 66 + .../scripts/jscalendar/lang/calendar-ru.js | 123 + .../jscalendar/lang/calendar-ru_win_.js | 123 + .../scripts/jscalendar/lang/calendar-si.js | 94 + .../scripts/jscalendar/lang/calendar-sk.js | 99 + .../scripts/jscalendar/lang/calendar-sp.js | 110 + .../scripts/jscalendar/lang/calendar-sv.js | 93 + .../scripts/jscalendar/lang/calendar-tr.js | 58 + .../scripts/jscalendar/lang/calendar-zh.js | 119 + .../scripts/jscalendar/lang/cn_utf8.js | 123 + .../conlite/scripts/jscalendar/menuarrow.gif | Bin 0 -> 68 bytes .../conlite/scripts/jscalendar/menuarrow2.gif | Bin 0 -> 49 bytes .../conlite20/conlite/scripts/langref.php | 34 + branches/conlite20/conlite/scripts/md5.js | 382 + .../conlite/scripts/messageBox.js.php | 393 + .../conlite/scripts/parameterCollector.js | 41 + .../conlite20/conlite/scripts/rights.js.php | 318 + branches/conlite20/conlite/scripts/rowMark.js | 428 + .../conlite20/conlite/scripts/setPager.js | 30 + .../conlite20/conlite/scripts/str_overview.js | 398 + branches/conlite20/conlite/scripts/subnav.js | 89 + .../conlite20/conlite/scripts/tip_balloon.js | 166 + .../conlite/scripts/tip_balloon/b.gif | Bin 0 -> 44 bytes .../scripts/tip_balloon/background.gif | Bin 0 -> 43 bytes .../conlite/scripts/tip_balloon/l.gif | Bin 0 -> 44 bytes .../conlite/scripts/tip_balloon/lb.gif | Bin 0 -> 56 bytes .../conlite/scripts/tip_balloon/lt.gif | Bin 0 -> 56 bytes .../conlite/scripts/tip_balloon/r.gif | Bin 0 -> 44 bytes .../conlite/scripts/tip_balloon/rb.gif | Bin 0 -> 56 bytes .../conlite/scripts/tip_balloon/rt.gif | Bin 0 -> 56 bytes .../conlite/scripts/tip_balloon/stemb.gif | Bin 0 -> 123 bytes .../conlite/scripts/tip_balloon/stemt.gif | Bin 0 -> 187 bytes .../conlite/scripts/tip_balloon/t.gif | Bin 0 -> 44 bytes .../conlite20/conlite/scripts/wz_tooltip.js | 1143 + .../conlite20/conlite/styles/cms_filelist.css | 487 + .../conlite20/conlite/styles/cms_teaser.css | 143 + branches/conlite20/conlite/styles/conlite.css | 85 + .../conlite20/conlite/styles/contenido.css | 1113 + .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 208 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../styles/images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../styles/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../styles/images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../styles/images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../styles/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes branches/conlite20/conlite/styles/index.php | 4 + branches/conlite20/conlite/styles/inuse.css | 33 + .../conlite20/conlite/styles/jquery-ui.css | 1225 + .../conlite20/conlite/styles/str_overview.css | 188 + .../conlite20/conlite/styles/tip_balloon.css | 6 + branches/conlite20/conlite/subnav.php | 61 + branches/conlite20/conlite/temp/.keep | 0 .../conlite20/conlite/temp/deprecated.txt | 2 + .../conlite20/conlite/templates/index.php | 4 + .../conlite/templates/standard/filler.html | 9 + .../conlite/templates/standard/frameset.html | 20 + .../templates/standard/frameset_content.html | 54 + .../standard/frameset_content_left.html | 23 + .../standard/frameset_content_right.html | 23 + .../standard/frameset_menuless_content.html | 25 + .../templates/standard/generic_list.html | 25 + .../conlite/templates/standard/header.html | 78 + .../standard/html5/template.generic_page.html | 19 + .../conlite/templates/standard/index.php | 4 + .../conlite/templates/standard/submenu.html | 5 + .../standard/template.admin_frontend.html | 196 + .../template.backend_search_results.html | 151 + .../templates/standard/template.blank.html | 15 + .../standard/template.client_edit.html | 36 + .../standard/template.client_left_top.html | 30 + .../standard/template.client_menu.html | 60 + .../standard/template.client_subnav.html | 37 + .../template.cms_filelist_dirlistitem.html | 15 + .../standard/template.cms_filelist_edit.html | 135 + ...plate.cms_filelist_metadata_limititem.html | 8 + .../standard/template.cms_teaser_edit.html | 114 + .../standard/template.con_art_overview.html | 196 + .../standard/template.con_edit_form.html | 227 + .../standard/template.con_left_top.html | 325 + .../standard/template.con_str_overview.html | 182 + .../template.con_str_overview.list.html | 7 + .../standard/template.con_subnav.html | 45 + .../standard/template.con_subnav_noleft.html | 36 + .../templates/standard/template.deco.html | 16 + .../standard/template.default_subnav.html | 58 + .../standard/template.file_subnav.html | 42 + .../standard/template.files_overview.html | 35 + .../standard/template.generic_form.html | 4 + .../standard/template.generic_left_top.html | 31 + .../standard/template.generic_list.html | 7 + .../standard/template.generic_list_row.html | 1 + .../standard/template.generic_menu.html | 12 + .../standard/template.generic_page.html | 21 + .../standard/template.generic_table_form.html | 16 + .../standard/template.grouprights_create.html | 38 + .../template.grouprights_details.html | 39 + .../template.grouprights_left_top.html | 42 + .../template.grouprights_memberlist.html | 30 + .../template.grouprights_memberselect.html | 81 + .../standard/template.grouprights_menu.html | 53 + .../template.grouprights_overview.html | 43 + .../standard/template.html_tpl_left_top.html | 28 + .../templates/standard/template.info.html | 210 + .../standard/template.inuse_lay_mod.html | 15 + .../standard/template.inuse_tpl.html | 20 + .../standard/template.js_left_top.html | 27 + .../standard/template.lang_edit.html | 32 + .../standard/template.lang_left_top.html | 67 + .../standard/template.lang_overview.html | 63 + .../standard/template.lay_edit_form.html | 60 + .../standard/template.lay_overview.html | 81 + .../templates/standard/template.left_top.html | 26 + .../standard/template.left_top_blank.html | 20 + .../templates/standard/template.log_main.html | 70 + .../templates/standard/template.log_menu.html | 26 + .../standard/template.mod_edit_form.html | 62 + .../standard/template.mod_left_top.html | 120 + .../template.mycontenido_lastarticles.html | 84 + .../template.mycontenido_settings.html | 36 + .../standard/template.mycontenido_start.html | 25 + .../standard/template.mycontenido_subnav.html | 52 + .../standard/template.newsletter_edit.html | 31 + .../template.newsletter_left_top.html | 462 + .../standard/template.newsletter_menu.html | 53 + .../standard/template.recipient_edit.html | 35 + .../standard/template.recipient_left_top.html | 54 + .../standard/template.recipient_menu.html | 113 + .../standard/template.request_password.html | 26 + .../standard/template.right_top_blank.html | 21 + .../standard/template.rights_create.html | 38 + .../standard/template.rights_details.html | 40 + .../standard/template.rights_inc.html | 49 + .../standard/template.rights_left_top.html | 128 + .../standard/template.rights_menu.html | 47 + .../standard/template.rights_overview.html | 59 + .../templates/standard/template.select.html | 7 + .../standard/template.stat_left_top.html | 23 + .../standard/template.stat_menu.html | 35 + .../standard/template.stat_overview.html | 178 + .../standard/template.stat_subnav.html | 32 + .../templates/standard/template.stat_top.html | 54 + .../standard/template.str_overview.html | 304 + .../standard/template.style_left_top.html | 28 + .../templates/standard/template.subnav.html | 34 + .../standard/template.subnav_blank.html | 29 + .../standard/template.subnav_noleft.html | 32 + .../standard/template.symbolhelp.html | 1928 ++ .../standard/template.system_purge.html | 344 + .../standard/template.system_subnav.html | 36 + .../standard/template.system_variables.html | 77 + .../standard/template.tpl_edit_form.html | 98 + .../standard/template.tpl_overview.html | 77 + .../standard/template.tplcfg_edit_form.html | 65 + .../standard/template.upl_dirs_overview.html | 88 + .../standard/template.upl_files_overview.html | 100 + .../standard/template.upl_left_top.html | 45 + .../templates/standard/template.welcome.html | 65 + .../standard/template.welcome_update.html | 29 + .../conlite/templates/standard/white.html | 8 + .../widgets/template.widgets.left_top.html | 3 + .../conlite/tools/create_autoloader_cfg.php | 126 + .../mpClassMapFileCreator.php | 135 + .../mpClassMapFileCreatorContenido.php | 115 + .../mpClassTypeFinder.php | 400 + .../conlite20/conlite/tools/phpcompatinfo.php | 69 + branches/conlite20/conlite/xml/conrepo.xsd | 27 + branches/conlite20/conlite/xml/index.php | 4 + branches/conlite20/conlite/xml/lang_de_DE.xml | 130 + branches/conlite20/conlite/xml/lang_en_US.xml | 130 + branches/conlite20/conlite/xml/lang_fr_FR.xml | 115 + branches/conlite20/data/backup/index.php | 4 + branches/conlite20/data/cache/index.php | 4 + .../data/config/production/cfg_sql.inc.php | 99 + .../config/production/config.autoloader.php | 346 + .../data/config/production/config.chains.php | 807 + .../data/config/production/config.colors.php | 42 + .../config/production/config.http_check.php | 91 + .../data/config/production/config.misc.php | 326 + .../data/config/production/config.path.php | 72 + .../config/production/config.templates.php | 170 + .../data/config/production/index.php | 4 + branches/conlite20/data/cronlog/crontab.txt | 8 + branches/conlite20/data/cronlog/index.php | 4 + branches/conlite20/data/logs/index.php | 4 + branches/conlite20/data/temp/index.php | 4 + branches/conlite20/pear/Cache/Cache.php | 357 + branches/conlite20/pear/Cache/Container.php | 455 + .../conlite20/pear/Cache/Container/file.php | 388 + branches/conlite20/pear/Cache/Error.php | 51 + branches/conlite20/pear/Cache/Lite.php | 835 + branches/conlite20/pear/Cache/Output.php | 215 + branches/conlite20/pear/File/Archive.php | 1434 ++ .../conlite20/pear/File/Archive/Predicate.php | 57 + .../pear/File/Archive/Predicate/And.php | 87 + .../pear/File/Archive/Predicate/Current.php | 52 + .../pear/File/Archive/Predicate/Custom.php | 88 + .../pear/File/Archive/Predicate/Duplicate.php | 116 + .../pear/File/Archive/Predicate/Ereg.php | 59 + .../pear/File/Archive/Predicate/Eregi.php | 61 + .../pear/File/Archive/Predicate/Extension.php | 71 + .../pear/File/Archive/Predicate/False.php | 47 + .../pear/File/Archive/Predicate/Index.php | 62 + .../pear/File/Archive/Predicate/MIME.php | 75 + .../pear/File/Archive/Predicate/MaxDepth.php | 63 + .../pear/File/Archive/Predicate/MinSize.php | 59 + .../pear/File/Archive/Predicate/MinTime.php | 63 + .../pear/File/Archive/Predicate/Not.php | 55 + .../pear/File/Archive/Predicate/Or.php | 85 + .../pear/File/Archive/Predicate/True.php | 45 + .../conlite20/pear/File/Archive/Reader.php | 427 + .../conlite20/pear/File/Archive/Reader/Ar.php | 387 + .../pear/File/Archive/Reader/Archive.php | 98 + .../pear/File/Archive/Reader/Bzip2.php | 254 + .../pear/File/Archive/Reader/Cache.php | 262 + .../pear/File/Archive/Reader/ChangeName.php | 136 + .../Reader/ChangeName/AddDirectory.php | 89 + .../Archive/Reader/ChangeName/Callback.php | 52 + .../Archive/Reader/ChangeName/Directory.php | 100 + .../pear/File/Archive/Reader/Concat.php | 195 + .../pear/File/Archive/Reader/Directory.php | 309 + .../pear/File/Archive/Reader/File.php | 296 + .../pear/File/Archive/Reader/Filter.php | 90 + .../pear/File/Archive/Reader/Gzip.php | 276 + .../pear/File/Archive/Reader/Memory.php | 227 + .../pear/File/Archive/Reader/MimeList.php | 939 + .../pear/File/Archive/Reader/Multi.php | 95 + .../pear/File/Archive/Reader/Relay.php | 134 + .../pear/File/Archive/Reader/Select.php | 63 + .../pear/File/Archive/Reader/Tar.php | 412 + .../pear/File/Archive/Reader/Uncompress.php | 317 + .../pear/File/Archive/Reader/Zip.php | 482 + .../conlite20/pear/File/Archive/Writer.php | 119 + .../pear/File/Archive/Writer/AddBaseName.php | 102 + .../conlite20/pear/File/Archive/Writer/Ar.php | 209 + .../pear/File/Archive/Writer/Archive.php | 129 + .../pear/File/Archive/Writer/Bzip2.php | 147 + .../pear/File/Archive/Writer/Files.php | 259 + .../pear/File/Archive/Writer/Gzip.php | 139 + .../pear/File/Archive/Writer/Mail.php | 204 + .../pear/File/Archive/Writer/Memory.php | 127 + .../File/Archive/Writer/MemoryArchive.php | 213 + .../pear/File/Archive/Writer/Multi.php | 130 + .../pear/File/Archive/Writer/Output.php | 93 + .../pear/File/Archive/Writer/Tar.php | 244 + .../File/Archive/Writer/UniqueAppender.php | 143 + .../pear/File/Archive/Writer/Zip.php | 260 + branches/conlite20/pear/File/Iterator.php | 197 + .../conlite20/pear/File/Iterator/Factory.php | 155 + branches/conlite20/pear/HTML/Common.php | 419 + branches/conlite20/pear/HTML/Common2.php | 569 + branches/conlite20/pear/Log.php | 631 + branches/conlite20/pear/Log/composite.php | 196 + branches/conlite20/pear/Log/console.php | 190 + branches/conlite20/pear/Log/display.php | 108 + branches/conlite20/pear/Log/error_log.php | 104 + branches/conlite20/pear/Log/file.php | 286 + branches/conlite20/pear/Log/mail.php | 222 + branches/conlite20/pear/Log/mcal.php | 171 + branches/conlite20/pear/Log/null.php | 68 + branches/conlite20/pear/Log/observer.php | 126 + branches/conlite20/pear/Log/sql.php | 210 + branches/conlite20/pear/Log/sqlite.php | 238 + branches/conlite20/pear/Log/syslog.php | 160 + branches/conlite20/pear/Log/win.php | 249 + branches/conlite20/pear/MIME/Type.php | 523 + .../conlite20/pear/MIME/Type/Extension.php | 298 + .../conlite20/pear/MIME/Type/Parameter.php | 163 + branches/conlite20/pear/Net/IDNA.php | 100 + branches/conlite20/pear/Net/IDNA/php4.php | 2961 +++ branches/conlite20/pear/Net/IDNA/php5.php | 3226 +++ .../conlite20/pear/Net/UserAgent/Detect.php | 907 + branches/conlite20/pear/OLE/OLE.php | 410 + branches/conlite20/pear/OLE/PPS.php | 219 + branches/conlite20/pear/OLE/PPS/File.php | 114 + branches/conlite20/pear/OLE/PPS/Root.php | 519 + branches/conlite20/pear/OS/Guess.php | 265 + branches/conlite20/pear/PEAR.php | 968 + branches/conlite20/pear/PEAR/Autoloader.php | 186 + branches/conlite20/pear/PEAR/Builder.php | 391 + branches/conlite20/pear/PEAR/Command.php | 322 + branches/conlite20/pear/PEAR/Command/Auth.php | 155 + .../conlite20/pear/PEAR/Command/Build.php | 89 + .../conlite20/pear/PEAR/Command/Common.php | 249 + .../conlite20/pear/PEAR/Command/Config.php | 225 + .../conlite20/pear/PEAR/Command/Install.php | 416 + .../conlite20/pear/PEAR/Command/Mirror.php | 99 + .../conlite20/pear/PEAR/Command/Package.php | 679 + .../conlite20/pear/PEAR/Command/Registry.php | 351 + .../conlite20/pear/PEAR/Command/Remote.php | 409 + branches/conlite20/pear/PEAR/Common.php | 1688 ++ branches/conlite20/pear/PEAR/Config.php | 1166 + branches/conlite20/pear/PEAR/Dependency.php | 386 + branches/conlite20/pear/PEAR/Frontend/CLI.php | 495 + branches/conlite20/pear/PEAR/Installer.php | 925 + branches/conlite20/pear/PEAR/Packager.php | 176 + branches/conlite20/pear/PEAR/Registry.php | 527 + branches/conlite20/pear/PEAR/Remote.php | 391 + branches/conlite20/pear/README.contenido | 4 + .../pear/Spreadsheet/Excel/Writer.php | 104 + .../Spreadsheet/Excel/Writer/BIFFwriter.php | 241 + .../pear/Spreadsheet/Excel/Writer/Format.php | 1035 + .../pear/Spreadsheet/Excel/Writer/Parser.php | 1760 ++ .../Spreadsheet/Excel/Writer/Validator.php | 225 + .../Spreadsheet/Excel/Writer/Workbook.php | 1544 ++ .../Spreadsheet/Excel/Writer/Worksheet.php | 3522 +++ branches/conlite20/pear/System.php | 449 + branches/conlite20/pear/XML/Parser.php | 356 + branches/conlite20/pear/XML/Parser2.php | 671 + .../conlite20/pear/XML/Parser2/Simple.php | 301 + branches/conlite20/pear/XML/RPC.php | 1853 ++ branches/conlite20/pear/XML/RPC/Dump.php | 187 + branches/conlite20/pear/XML/RPC/Server.php | 612 + branches/conlite20/pear/XML/RSS.php | 348 + branches/conlite20/pear/XML/Serializer.php | 1255 + branches/conlite20/pear/XML/Tree.php | 559 + branches/conlite20/pear/XML/Tree/Node.php | 587 + branches/conlite20/pear/XML/Unserializer.php | 983 + branches/conlite20/pear/package.dtd | 110 + branches/conlite20/pear/package.xml | 80 + branches/conlite20/pear/scripts/pear.bat | 69 + branches/conlite20/pear/scripts/pear.sh | 28 + branches/conlite20/pear/scripts/pearcmd.php | 298 + branches/conlite20/pear/template.spec | 64 + branches/conlite20/setup/data/.directory | 4 + branches/conlite20/setup/data/base.txt | 18 + .../setup/data/base/base_actions1.sql | 164 + .../conlite20/setup/data/base/base_area1.sql | 98 + .../setup/data/base/base_chartable1.sql | 202 + .../setup/data/base/base_chartable2.sql | 201 + .../setup/data/base/base_chartable3.sql | 201 + .../setup/data/base/base_chartable4.sql | 201 + .../setup/data/base/base_chartable5.sql | 201 + .../setup/data/base/base_chartable6.sql | 201 + .../setup/data/base/base_chartable7.sql | 122 + .../conlite20/setup/data/base/base_files1.sql | 185 + .../conlite20/setup/data/base/base_files2.sql | 12 + .../setup/data/base/base_framefiles1.sql | 184 + .../setup/data/base/base_framefiles2.sql | 9 + .../setup/data/base/base_meta_type1.sql | 9 + .../conlite20/setup/data/base/base_misc1.sql | 1 + .../setup/data/base/base_nav_main1.sql | 6 + .../setup/data/base/base_nav_sub1.sql | 82 + .../conlite20/setup/data/base/base_type1.sql | 23 + branches/conlite20/setup/data/client.txt | 1 + .../conlite20/setup/data/client/client1.sql | 3 + branches/conlite20/setup/data/examples.txt | 5 + .../data/examples/examples_articles1.sql | 6 + .../data/examples/examples_categories1.sql | 33 + .../data/examples/examples_container1.sql | 10 + .../setup/data/examples/examples_content1.sql | 2 + .../setup/data/examples/examples_misc1.sql | 83 + .../setup/data/plugin_content_allocation.txt | 1 + .../setup/data/plugin_mod_rewrite.txt | 1 + .../plugins/plugins_content_allocation.sql | 5 + .../data/plugins/plugins_mod_rewrite.sql | 22 + branches/conlite20/setup/data/standard.txt | 2 + .../setup/data/standard/standard_modules1.sql | 8 + .../standard_modules_translations1.sql | 17 + branches/conlite20/setup/data/sysadmin.txt | 1 + .../setup/data/sysadmin/sysadmin1.sql | 1 + branches/conlite20/setup/data/tables.txt | 442 + branches/conlite20/setup/data/tables_pi.txt | 44 + branches/conlite20/setup/dbupdate.php | 280 + branches/conlite20/setup/images/cl-logo.gif | Bin 0 -> 4047 bytes .../setup/images/controls/arrow_closed.png | Bin 0 -> 335 bytes .../setup/images/controls/arrow_open.png | Bin 0 -> 342 bytes .../conlite20/setup/images/controls/back.gif | Bin 0 -> 131 bytes .../conlite20/setup/images/controls/pbend.gif | Bin 0 -> 135 bytes .../setup/images/controls/up_over.png | Bin 0 -> 617 bytes .../conlite20/setup/images/icons/error.png | Bin 0 -> 367 bytes .../conlite20/setup/images/icons/info.png | Bin 0 -> 251 bytes .../conlite20/setup/images/icons/warning.png | Bin 0 -> 298 bytes branches/conlite20/setup/images/spacer.gif | Bin 0 -> 43 bytes branches/conlite20/setup/index.php | 195 + .../setup/lib/class.setupcontrols.php | 281 + .../conlite20/setup/lib/class.setupmask.php | 117 + .../conlite20/setup/lib/class.template.php | 256 + branches/conlite20/setup/lib/defines.php | 61 + .../setup/lib/functions.environment.php | 142 + .../setup/lib/functions.filesystem.php | 371 + .../setup/lib/functions.libraries.php | 104 + .../conlite20/setup/lib/functions.mysql.php | 265 + .../conlite20/setup/lib/functions.phpinfo.php | 207 + .../setup/lib/functions.safe_mode.php | 69 + .../conlite20/setup/lib/functions.setup.php | 64 + .../conlite20/setup/lib/functions.sql.php | 204 + .../conlite20/setup/lib/functions.system.php | 296 + branches/conlite20/setup/lib/startup.php | 128 + .../setup/locale/de_DE/LC_MESSAGES/setup.mo | Bin 0 -> 36023 bytes .../setup/locale/de_DE/LC_MESSAGES/setup.po | 847 + branches/conlite20/setup/locale/potfiles.txt | 57 + branches/conlite20/setup/locale/setup.pot | 946 + branches/conlite20/setup/makeconfig.php | 102 + branches/conlite20/setup/script/pluginInfo.js | 80 + .../setup/steps/forms/additionalplugins.php | 87 + .../setup/steps/forms/clientadjust.php | 123 + .../setup/steps/forms/clientmode.php | 69 + .../setup/steps/forms/configmode.php | 96 + .../conlite20/setup/steps/forms/installer.php | 68 + .../conlite20/setup/steps/forms/pathinfo.php | 71 + .../setup/steps/forms/setupresults.php | 93 + .../setup/steps/forms/setupsummary.php | 114 + .../setup/steps/forms/systemdata.php | 176 + .../setup/steps/forms/systemtest.php | 581 + .../conlite20/setup/steps/languagechooser.php | 64 + .../setup/steps/migration/domigration.php | 38 + .../conlite20/setup/steps/migration/step1.php | 38 + .../conlite20/setup/steps/migration/step2.php | 38 + .../conlite20/setup/steps/migration/step3.php | 40 + .../conlite20/setup/steps/migration/step4.php | 39 + .../conlite20/setup/steps/migration/step5.php | 38 + .../conlite20/setup/steps/migration/step6.php | 38 + .../conlite20/setup/steps/migration/step7.php | 38 + .../conlite20/setup/steps/migration/step8.php | 38 + .../conlite20/setup/steps/notinstallable.php | 53 + .../conlite20/setup/steps/setup/doinstall.php | 38 + .../conlite20/setup/steps/setup/step1.php | 39 + .../conlite20/setup/steps/setup/step2.php | 40 + .../conlite20/setup/steps/setup/step3.php | 40 + .../conlite20/setup/steps/setup/step4.php | 39 + .../conlite20/setup/steps/setup/step5.php | 39 + .../conlite20/setup/steps/setup/step6.php | 38 + .../conlite20/setup/steps/setup/step7.php | 44 + .../conlite20/setup/steps/setup/step8.php | 39 + branches/conlite20/setup/steps/setuptype.php | 93 + .../setup/steps/upgrade/doupgrade.php | 38 + .../conlite20/setup/steps/upgrade/step1.php | 39 + .../conlite20/setup/steps/upgrade/step2.php | 39 + .../conlite20/setup/steps/upgrade/step3.php | 40 + .../conlite20/setup/steps/upgrade/step4.php | 39 + .../conlite20/setup/steps/upgrade/step5.php | 38 + .../conlite20/setup/steps/upgrade/step6.php | 38 + .../conlite20/setup/steps/upgrade/step7.php | 39 + branches/conlite20/setup/style/setup.css | 247 + .../setup/templates/cfoldablerow.tpl | 4 + .../conlite20/setup/templates/config.php.tpl | 171 + branches/conlite20/setup/templates/crow.tpl | 4 + .../setup/templates/languagechooser.tpl | 8 + .../setup/templates/notinstallable.tpl | 14 + branches/conlite20/setup/templates/setup.tpl | 111 + .../setup/forms/additionalplugins.tpl | 25 + .../templates/setup/forms/clientmode.tpl | 16 + .../templates/setup/forms/configmode.tpl | 20 + .../setup/forms/configmodewopass.tpl | 20 + .../templates/setup/forms/databasedata.tpl | 31 + .../setup/templates/setup/forms/installer.tpl | 32 + .../setup/templates/setup/forms/pathinfo.tpl | 13 + .../templates/setup/forms/setupresults.tpl | 17 + .../setup/forms/setupresultsfail.tpl | 10 + .../templates/setup/forms/setupsummary.tpl | 12 + .../templates/setup/forms/systemdata.tpl | 31 + .../templates/setup/forms/systemtest.tpl | 18 + .../conlite20/setup/templates/setuptype.tpl | 33 + 2229 files changed, 382931 insertions(+) create mode 100644 branches/conlite20/LIZENZ.txt create mode 100644 branches/conlite20/README_.txt create mode 100644 branches/conlite20/cms/config.php create mode 100644 branches/conlite20/cms/css/basic-style.css create mode 100644 branches/conlite20/cms/css/conlite-demo.css create mode 100644 branches/conlite20/cms/css/index.php create mode 100644 branches/conlite20/cms/css/normalize.css create mode 100644 branches/conlite20/cms/dbfs.php create mode 100644 branches/conlite20/cms/error.php create mode 100644 branches/conlite20/cms/favicon.ico create mode 100644 branches/conlite20/cms/front_content.php create mode 100644 branches/conlite20/cms/front_crcloginform.inc.php create mode 100644 branches/conlite20/cms/images/SimpleGallery/ClosePopup.png create mode 100644 branches/conlite20/cms/images/SimpleGallery/Loading.gif create mode 100644 branches/conlite20/cms/images/SimpleGallery/NaviLeft.png create mode 100644 branches/conlite20/cms/images/SimpleGallery/NaviLeftDisabled.png create mode 100644 branches/conlite20/cms/images/SimpleGallery/NaviRight.png create mode 100644 branches/conlite20/cms/images/SimpleGallery/NaviRightDisabled.png create mode 100644 branches/conlite20/cms/images/SimpleGallery/PopupImageNaviLeft.png create mode 100644 branches/conlite20/cms/images/SimpleGallery/PopupImageNaviRight.png create mode 100644 branches/conlite20/cms/images/SimpleGallery/ZoomOverlay.png create mode 100644 branches/conlite20/cms/images/glyphicons-halflings-white.png create mode 100644 branches/conlite20/cms/images/glyphicons-halflings.png create mode 100644 branches/conlite20/cms/images/ico/apple-touch-icon-114-precomposed.png create mode 100644 branches/conlite20/cms/images/ico/apple-touch-icon-144-precomposed.png create mode 100644 branches/conlite20/cms/images/ico/apple-touch-icon-57-precomposed.png create mode 100644 branches/conlite20/cms/images/ico/apple-touch-icon-72-precomposed.png create mode 100644 branches/conlite20/cms/images/ico/social_icons_sprite.png create mode 100644 branches/conlite20/cms/images/index.php create mode 100644 branches/conlite20/cms/images/logo-small.png create mode 100644 branches/conlite20/cms/images/logo.png create mode 100644 branches/conlite20/cms/includes/Util/Modules/Contenido_NavMain_Util.class.php create mode 100644 branches/conlite20/cms/includes/Util/Modules/Contenido_Sitemap_Util.class.php create mode 100644 branches/conlite20/cms/includes/class.concache.php create mode 100644 branches/conlite20/cms/includes/class.input.helper.php create mode 100644 branches/conlite20/cms/includes/concache.php create mode 100644 branches/conlite20/cms/includes/functions.include.php create mode 100644 branches/conlite20/cms/includes/functions.navigation.php create mode 100644 branches/conlite20/cms/includes/rss.inc.php create mode 100644 branches/conlite20/cms/includes/rss_php.php create mode 100644 branches/conlite20/cms/includes/spider-it.functions.inc.php create mode 100644 branches/conlite20/cms/index.php create mode 100644 branches/conlite20/cms/js/flexslider/flexslider.css create mode 100644 branches/conlite20/cms/js/flexslider/images/bg_direction_nav.png create mode 100644 branches/conlite20/cms/js/flexslider/images/loader.gif create mode 100644 branches/conlite20/cms/js/flexslider/jquery.flexslider-min.js create mode 100644 branches/conlite20/cms/js/index.php create mode 100644 branches/conlite20/cms/js/jquery.cookiesdirective.js create mode 100644 branches/conlite20/cms/js/libs/jquery-1.9.0.min.js create mode 100644 branches/conlite20/cms/js/libs/modernizr-2.6.2.min.js create mode 100644 branches/conlite20/cms/js/main.js create mode 100644 branches/conlite20/cms/logs/index.php create mode 100644 branches/conlite20/cms/robots.txt create mode 100644 branches/conlite20/cms/templates/cl_flex_slider.html create mode 100644 branches/conlite20/cms/templates/cl_login_form.html create mode 100644 branches/conlite20/cms/templates/cl_uuid_form.tpl create mode 100644 branches/conlite20/cms/templates/cms_filelist_style_default.html create mode 100644 branches/conlite20/cms/templates/cms_teaser_style_block.html create mode 100644 branches/conlite20/cms/templates/cms_teaser_style_blog.html create mode 100644 branches/conlite20/cms/templates/contenido_header.html create mode 100644 branches/conlite20/cms/templates/footnotes_1.html create mode 100644 branches/conlite20/cms/templates/footnotes_2.html create mode 100644 branches/conlite20/cms/templates/header.html create mode 100644 branches/conlite20/cms/templates/headline_h1.html create mode 100644 branches/conlite20/cms/templates/kontaktformular.html create mode 100644 branches/conlite20/cms/templates/login_form_loggedin.html create mode 100644 branches/conlite20/cms/templates/logo_bottom.html create mode 100644 branches/conlite20/cms/templates/navigation_meta_container.html create mode 100644 branches/conlite20/cms/templates/navigation_meta_item.html create mode 100644 branches/conlite20/cms/templates/navigation_standard.html create mode 100644 branches/conlite20/cms/templates/navigation_standard_li.html create mode 100644 branches/conlite20/cms/templates/navigation_standard_ul.html create mode 100644 branches/conlite20/cms/templates/newsletter_form.html create mode 100644 branches/conlite20/cms/templates/newsletter_handler.html create mode 100644 branches/conlite20/cms/templates/rss.html create mode 100644 branches/conlite20/cms/templates/rss_template.html create mode 100644 branches/conlite20/cms/templates/rss_template_breit.html create mode 100644 branches/conlite20/cms/templates/search_input.html create mode 100644 branches/conlite20/cms/templates/search_output.html create mode 100644 branches/conlite20/cms/templates/simple-gallery.html create mode 100644 branches/conlite20/cms/templates/sitemap_standard.html create mode 100644 branches/conlite20/cms/templates/sitemap_standard_li.html create mode 100644 branches/conlite20/cms/templates/sitemap_standard_ul.html create mode 100644 branches/conlite20/cms/templates/subheadline_h2.html create mode 100644 branches/conlite20/cms/templates/teaser-standard.html create mode 100644 branches/conlite20/cms/templates/teaser_right.html create mode 100644 branches/conlite20/cms/templates/text_html.html create mode 100644 branches/conlite20/cms/upload/Flexslider/basic-pic1.jpg create mode 100644 branches/conlite20/cms/upload/Flexslider/basic-pic2.jpg create mode 100644 branches/conlite20/cms/upload/Flexslider/basic-pic3.jpg create mode 100644 branches/conlite20/cms/upload/Flexslider/basic-pic4.jpg create mode 100644 branches/conlite20/cms/upload/Gallery/IMAGE_296.jpg create mode 100644 branches/conlite20/cms/upload/Gallery/PICT0004.JPG create mode 100644 branches/conlite20/cms/upload/Gallery/PICT0025.JPG create mode 100644 branches/conlite20/cms/upload/Gallery/PICT0082.JPG create mode 100644 branches/conlite20/cms/upload/Gallery/PICT0188.JPG create mode 100644 branches/conlite20/cms/upload/Gallery/Terasse26.jpg create mode 100644 branches/conlite20/conlib/auth.inc create mode 100644 branches/conlite20/conlib/ct_file.inc create mode 100644 branches/conlite20/conlib/ct_ldap.inc create mode 100644 branches/conlite20/conlib/ct_null.inc create mode 100644 branches/conlite20/conlib/ct_session.inc create mode 100644 branches/conlite20/conlib/ct_shm.inc create mode 100644 branches/conlite20/conlib/ct_sql.inc create mode 100644 branches/conlite20/conlib/db_mysql.inc create mode 100644 branches/conlite20/conlib/db_mysqli.inc create mode 100644 branches/conlite20/conlib/db_pdo_mysql.inc create mode 100644 branches/conlite20/conlib/db_sql_abstract.inc create mode 100644 branches/conlite20/conlib/index.php create mode 100644 branches/conlite20/conlib/local.php create mode 100644 branches/conlite20/conlib/page.inc create mode 100644 branches/conlite20/conlib/perm.inc create mode 100644 branches/conlite20/conlib/prepend.php create mode 100644 branches/conlite20/conlib/session.inc create mode 100644 branches/conlite20/conlite/.directory create mode 100644 branches/conlite20/conlite/.htaccess_recommended create mode 100644 branches/conlite20/conlite/ajaxmain.php create mode 100644 branches/conlite20/conlite/backend_search.php create mode 100644 branches/conlite20/conlite/cache/deprecated.txt create mode 100644 branches/conlite20/conlite/classes/Contenido_Category/Contenido_Category.class.php create mode 100644 branches/conlite20/conlite/classes/Contenido_Category/Contenido_Category_Articles.class.php create mode 100644 branches/conlite20/conlite/classes/Contenido_Category/Sample.php create mode 100644 branches/conlite20/conlite/classes/Contenido_FrontendNavigation/Contenido_FrontendNavigation.class.php create mode 100644 branches/conlite20/conlite/classes/Contenido_FrontendNavigation/Contenido_FrontendNavigation_Base.class.php create mode 100644 branches/conlite20/conlite/classes/Contenido_FrontendNavigation/Contenido_FrontendNavigation_Breadcrumb.class.php create mode 100644 branches/conlite20/conlite/classes/Contenido_FrontendNavigation/Sample.php create mode 100644 branches/conlite20/conlite/classes/Debug/Debug_DevNull.class.php create mode 100644 branches/conlite20/conlite/classes/Debug/Debug_File.class.php create mode 100644 branches/conlite20/conlite/classes/Debug/Debug_Hidden.class.php create mode 100644 branches/conlite20/conlite/classes/Debug/Debug_Visible.class.php create mode 100644 branches/conlite20/conlite/classes/Debug/Debug_VisibleAdv.class.php create mode 100644 branches/conlite20/conlite/classes/Debug/DebuggerFactory.class.php create mode 100644 branches/conlite20/conlite/classes/Debug/IDebug.php create mode 100644 branches/conlite20/conlite/classes/Debug/Sample.php create mode 100644 branches/conlite20/conlite/classes/Url/Contenido_Url.class.php create mode 100644 branches/conlite20/conlite/classes/UrlBuilder/Contenido_UrlBuilder.class.php create mode 100644 branches/conlite20/conlite/classes/UrlBuilder/Contenido_UrlBuilderConfig.class.php create mode 100644 branches/conlite20/conlite/classes/UrlBuilder/Contenido_UrlBuilderFactory.class.php create mode 100644 branches/conlite20/conlite/classes/UrlBuilder/Contenido_UrlBuilder_Custom.class.php create mode 100644 branches/conlite20/conlite/classes/UrlBuilder/Contenido_UrlBuilder_CustomPath.class.php create mode 100644 branches/conlite20/conlite/classes/UrlBuilder/Contenido_UrlBuilder_Frontcontent.class.php create mode 100644 branches/conlite20/conlite/classes/UrlBuilder/Contenido_UrlBuilder_MR.class.php create mode 100644 branches/conlite20/conlite/classes/UrlBuilder/Sample.php create mode 100644 branches/conlite20/conlite/classes/abstract_classes/class.conuser.php create mode 100644 branches/conlite20/conlite/classes/cApi/class.action.php create mode 100644 branches/conlite20/conlite/classes/cApi/class.nav.main.php create mode 100644 branches/conlite20/conlite/classes/cApi/class.nav.sub.php create mode 100644 branches/conlite20/conlite/classes/cApi/class.stat.php create mode 100644 branches/conlite20/conlite/classes/cApi/class.stat_archive.php create mode 100644 branches/conlite20/conlite/classes/cApi/class.system_property.php create mode 100644 branches/conlite20/conlite/classes/cApi/class.upload.meta.php create mode 100644 branches/conlite20/conlite/classes/cApi/class.upload.php create mode 100644 branches/conlite20/conlite/classes/cHTML5/class.chtml.php create mode 100644 branches/conlite20/conlite/classes/cHTML5/class.chtml5.button.php create mode 100644 branches/conlite20/conlite/classes/cHTML5/class.chtml5.list.element.php create mode 100644 branches/conlite20/conlite/classes/cHTML5/class.chtml5.list.php create mode 100644 branches/conlite20/conlite/classes/cHTML5/class.chtml5.meta.php create mode 100644 branches/conlite20/conlite/classes/class.action.php create mode 100644 branches/conlite20/conlite/classes/class.activeusers.php create mode 100644 branches/conlite20/conlite/classes/class.ajax.php create mode 100644 branches/conlite20/conlite/classes/class.area.php create mode 100644 branches/conlite20/conlite/classes/class.art.php create mode 100644 branches/conlite20/conlite/classes/class.article.collector.php create mode 100644 branches/conlite20/conlite/classes/class.article.php create mode 100644 branches/conlite20/conlite/classes/class.artspec.php create mode 100644 branches/conlite20/conlite/classes/class.autoload.php create mode 100644 branches/conlite20/conlite/classes/class.backend.php create mode 100644 branches/conlite20/conlite/classes/class.cat.php create mode 100644 branches/conlite20/conlite/classes/class.category.php create mode 100644 branches/conlite20/conlite/classes/class.cec.php create mode 100644 branches/conlite20/conlite/classes/class.cec_hook.php create mode 100644 branches/conlite20/conlite/classes/class.chartable.php create mode 100644 branches/conlite20/conlite/classes/class.cl_db_backup.php create mode 100644 branches/conlite20/conlite/classes/class.client.php create mode 100644 branches/conlite20/conlite/classes/class.cms_date.php create mode 100644 branches/conlite20/conlite/classes/class.cms_filelist.php create mode 100644 branches/conlite20/conlite/classes/class.cms_teaser.php create mode 100644 branches/conlite20/conlite/classes/class.communications.php create mode 100644 branches/conlite20/conlite/classes/class.conuser.php create mode 100644 branches/conlite20/conlite/classes/class.csv.php create mode 100644 branches/conlite20/conlite/classes/class.dbfs.php create mode 100644 branches/conlite20/conlite/classes/class.excel.php create mode 100644 branches/conlite20/conlite/classes/class.form.php create mode 100644 branches/conlite20/conlite/classes/class.frontend.groups.php create mode 100644 branches/conlite20/conlite/classes/class.frontend.logic.php create mode 100644 branches/conlite20/conlite/classes/class.frontend.permissions.php create mode 100644 branches/conlite20/conlite/classes/class.frontend.users.php create mode 100644 branches/conlite20/conlite/classes/class.genericdb.php create mode 100644 branches/conlite20/conlite/classes/class.group.php create mode 100644 branches/conlite20/conlite/classes/class.htmlelements.php create mode 100644 branches/conlite20/conlite/classes/class.htmlparser.php create mode 100644 branches/conlite20/conlite/classes/class.htmlvalidator.php create mode 100644 branches/conlite20/conlite/classes/class.httpinputvalidator.php create mode 100644 branches/conlite20/conlite/classes/class.i18n.php create mode 100644 branches/conlite20/conlite/classes/class.input.helper.php create mode 100644 branches/conlite20/conlite/classes/class.inuse.php create mode 100644 branches/conlite20/conlite/classes/class.iterator.php create mode 100644 branches/conlite20/conlite/classes/class.lang.php create mode 100644 branches/conlite20/conlite/classes/class.layout.php create mode 100644 branches/conlite20/conlite/classes/class.metaobject.php create mode 100644 branches/conlite20/conlite/classes/class.navigation.php create mode 100644 branches/conlite20/conlite/classes/class.note.php create mode 100644 branches/conlite20/conlite/classes/class.notification.php create mode 100644 branches/conlite20/conlite/classes/class.output_compressor.php create mode 100644 branches/conlite20/conlite/classes/class.properties.php create mode 100644 branches/conlite20/conlite/classes/class.purge.php create mode 100644 branches/conlite20/conlite/classes/class.request.password.php create mode 100644 branches/conlite20/conlite/classes/class.search.php create mode 100644 branches/conlite20/conlite/classes/class.security.php create mode 100644 branches/conlite20/conlite/classes/class.smtp.php create mode 100644 branches/conlite20/conlite/classes/class.structure.php create mode 100644 branches/conlite20/conlite/classes/class.table.php create mode 100644 branches/conlite20/conlite/classes/class.template.php create mode 100644 branches/conlite20/conlite/classes/class.templateconfig.php create mode 100644 branches/conlite20/conlite/classes/class.todo.php create mode 100644 branches/conlite20/conlite/classes/class.treeitem.php create mode 100644 branches/conlite20/conlite/classes/class.ui.php create mode 100644 branches/conlite20/conlite/classes/class.update.notifier.php create mode 100644 branches/conlite20/conlite/classes/class.upload.php create mode 100644 branches/conlite20/conlite/classes/class.user.php create mode 100644 branches/conlite20/conlite/classes/class.version.php create mode 100644 branches/conlite20/conlite/classes/class.versionFile.php create mode 100644 branches/conlite20/conlite/classes/class.versionImport.php create mode 100644 branches/conlite20/conlite/classes/class.versionLayout.php create mode 100644 branches/conlite20/conlite/classes/class.versionModule.php create mode 100644 branches/conlite20/conlite/classes/class.wysiwyg_editor.php create mode 100644 branches/conlite20/conlite/classes/class.xml.php create mode 100644 branches/conlite20/conlite/classes/class.xmlparser.php create mode 100644 branches/conlite20/conlite/classes/class.xmltree.php create mode 100644 branches/conlite20/conlite/classes/class.xsltprocessor.php create mode 100644 branches/conlite20/conlite/classes/con2con/class.dirhandler.php create mode 100644 branches/conlite20/conlite/classes/con2con/class.filehandler.php create mode 100644 branches/conlite20/conlite/classes/con2con/class.registry.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.area.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.article.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.articlelanguage.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.category.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.categoryarticle.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.categorylanguage.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.categorytree.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.client.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.clientslang.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.container.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.containerconfig.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.content.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.file.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.framefile.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.language.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.layout.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.metatag.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.metatype.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.module.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.template.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.templateconfig.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.type.php create mode 100644 branches/conlite20/conlite/classes/contenido/class.user.php create mode 100644 branches/conlite20/conlite/classes/content_types/class.content.type.abstract.php create mode 100644 branches/conlite20/conlite/classes/datatypes/class.datatype.currency.php create mode 100644 branches/conlite20/conlite/classes/datatypes/class.datatype.datetime.php create mode 100644 branches/conlite20/conlite/classes/datatypes/class.datatype.number.php create mode 100644 branches/conlite20/conlite/classes/datatypes/class.datatype.php create mode 100644 branches/conlite20/conlite/classes/drivers/class.gdb.driver.php create mode 100644 branches/conlite20/conlite/classes/drivers/drivers.txt create mode 100644 branches/conlite20/conlite/classes/drivers/mysql/class.gdb.mysql.php create mode 100644 branches/conlite20/conlite/classes/exceptions/exception.conuser.php create mode 100644 branches/conlite20/conlite/classes/frontend/navigation/class.frontend.navigation.abstract.php create mode 100644 branches/conlite20/conlite/classes/frontend/navigation/class.frontend.navigation.php create mode 100644 branches/conlite20/conlite/classes/genericdb/class.item.base.abstract.php create mode 100644 branches/conlite20/conlite/classes/genericdb/class.item.cache.php create mode 100644 branches/conlite20/conlite/classes/index.php create mode 100644 branches/conlite20/conlite/classes/interfaces/interface.conuser.php create mode 100644 branches/conlite20/conlite/classes/log/class.log.php create mode 100644 branches/conlite20/conlite/classes/log/class.log.writer.file.php create mode 100644 branches/conlite20/conlite/classes/log/class.log.writer.php create mode 100644 branches/conlite20/conlite/classes/log/class.modulelog.php create mode 100644 branches/conlite20/conlite/classes/template/class.clAbstractTemplateParser.php create mode 100644 branches/conlite20/conlite/classes/template/class.clCounterFunctionParser.php create mode 100644 branches/conlite20/conlite/classes/template/class.clIfFunctionParser.php create mode 100644 branches/conlite20/conlite/classes/template/class.clStrAPIFunctionsParser.php create mode 100644 branches/conlite20/conlite/classes/template/class.template.php create mode 100644 branches/conlite20/conlite/classes/tree/class.ctree.php create mode 100644 branches/conlite20/conlite/classes/tree/class.ctreeitem.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.views.advancedmenu.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.actionbutton.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.actionlist.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.buttons.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.calendar.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.datawidgets.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.datechooser.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.datefield.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.dateselect.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.foldingrow.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.nominaltextfield.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.page.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.pager.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.switchabledatechooser.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.tableedit.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.treeview.php create mode 100644 branches/conlite20/conlite/classes/widgets/class.widgets.views.php create mode 100644 branches/conlite20/conlite/classes/xml/class.xml.base.php create mode 100644 branches/conlite20/conlite/classes/xml/class.xml.reader.php create mode 100644 branches/conlite20/conlite/classes/xml/class.xml.writer.php create mode 100644 branches/conlite20/conlite/classes/xml/class.xml2array.php create mode 100644 branches/conlite20/conlite/cronjobs/advance_workflow.php create mode 100644 branches/conlite20/conlite/cronjobs/index.php create mode 100644 branches/conlite20/conlite/cronjobs/linkchecker.php create mode 100644 branches/conlite20/conlite/cronjobs/move_articles.php create mode 100644 branches/conlite20/conlite/cronjobs/move_old_stats.php create mode 100644 branches/conlite20/conlite/cronjobs/optimize_database.php create mode 100644 branches/conlite20/conlite/cronjobs/run_newsletter_job.php create mode 100644 branches/conlite20/conlite/cronjobs/send_reminder.php create mode 100644 branches/conlite20/conlite/cronjobs/session_cleanup.php create mode 100644 branches/conlite20/conlite/cronjobs/setfrontenduserstate.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/LICENSE create mode 100644 branches/conlite20/conlite/external/PHPMailer/PHPMailerAutoload.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/VERSION create mode 100644 branches/conlite20/conlite/external/PHPMailer/class.phpmailer.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/class.phpmaileroauth.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/class.phpmaileroauthgoogle.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/class.pop3.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/class.smtp.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/composer.json create mode 100644 branches/conlite20/conlite/external/PHPMailer/composer.lock create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/DKIM.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/code_generator.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/contactform.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/contents.html create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/contentsutf8.html create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/exceptions.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/gmail.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/gmail_xoauth.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/images/phpmailer.png create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/images/phpmailer_mini.png create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/index.html create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/mail.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/mailing_list.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/pop_before_smtp.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/scripts/XRegExp.js create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/scripts/shAutoloader.js create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/scripts/shBrushPhp.js create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/scripts/shCore.js create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/scripts/shLegacy.js create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/send_file_upload.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/send_multiple_file_upload.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/sendmail.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/signed-mail.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/smtp.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/smtp_check.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/smtp_no_auth.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/ssl_options.phps create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shCore.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shCoreDefault.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shCoreDjango.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shCoreEclipse.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shCoreEmacs.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shCoreFadeToGrey.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shCoreMDUltra.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shCoreMidnight.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shCoreRDark.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shThemeAppleScript.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shThemeDefault.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shThemeDjango.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shThemeEclipse.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shThemeEmacs.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shThemeFadeToGrey.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shThemeMDUltra.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shThemeMidnight.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shThemeRDark.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/shThemeVisualStudio.css create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/styles/wrapping.png create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/test_db_smtp_basic.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/test_mail_advanced.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/test_mail_basic.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/test_pop_before_smtp_advanced.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/test_pop_before_smtp_basic.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/test_sendmail_advanced.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/test_sendmail_basic.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/test_smtp_advanced.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/test_smtp_advanced_no_auth.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/test_smtp_basic.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/test_smtp_basic_no_auth.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/test_smtp_gmail_advanced.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/examples/test_smtp_gmail_basic.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/extras/EasyPeasyICS.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/extras/README.md create mode 100644 branches/conlite20/conlite/external/PHPMailer/extras/htmlfilter.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/extras/ntlm_sasl_client.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/get_oauth_token.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-am.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-ar.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-az.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-be.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-bg.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-ca.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-ch.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-cs.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-da.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-de.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-el.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-eo.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-es.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-et.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-fa.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-fi.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-fo.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-fr.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-gl.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-he.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-hr.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-hu.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-id.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-it.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-ja.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-ka.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-ko.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-lt.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-lv.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-ms.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-nb.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-nl.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-pl.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-pt.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-pt_br.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-ro.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-ru.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-sk.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-sl.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-sr.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-sv.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-tr.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-uk.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-vi.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-zh.php create mode 100644 branches/conlite20/conlite/external/PHPMailer/language/phpmailer.lang-zh_cn.php create mode 100644 branches/conlite20/conlite/external/backendedit/front_content.php create mode 100644 branches/conlite20/conlite/external/edit_area/autocompletion.js create mode 100644 branches/conlite20/conlite/external/edit_area/class.edit_area.php create mode 100644 branches/conlite20/conlite/external/edit_area/edit_area.css create mode 100644 branches/conlite20/conlite/external/edit_area/edit_area.js create mode 100644 branches/conlite20/conlite/external/edit_area/edit_area_compressor.php create mode 100644 branches/conlite20/conlite/external/edit_area/edit_area_compressor_cl.php create mode 100644 branches/conlite20/conlite/external/edit_area/edit_area_full.gz create mode 100644 branches/conlite20/conlite/external/edit_area/edit_area_full.js create mode 100644 branches/conlite20/conlite/external/edit_area/edit_area_functions.js create mode 100644 branches/conlite20/conlite/external/edit_area/edit_area_loader.js create mode 100644 branches/conlite20/conlite/external/edit_area/elements_functions.js create mode 100644 branches/conlite20/conlite/external/edit_area/highlight.js create mode 100644 branches/conlite20/conlite/external/edit_area/images/autocompletion.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/close.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/fullscreen.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/go_to_line.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/help.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/highlight.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/load.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/move.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/newdocument.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/opacity.png create mode 100644 branches/conlite20/conlite/external/edit_area/images/processing.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/redo.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/reset_highlight.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/save.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/search.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/smooth_selection.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/spacer.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/statusbar_resize.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/undo.gif create mode 100644 branches/conlite20/conlite/external/edit_area/images/word_wrap.gif create mode 100644 branches/conlite20/conlite/external/edit_area/keyboard.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/bg.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/cs.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/de.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/dk.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/en.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/eo.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/es.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/fi.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/fr.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/hr.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/it.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/ja.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/mk.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/nl.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/pl.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/pt.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/ru.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/sk.js create mode 100644 branches/conlite20/conlite/external/edit_area/langs/zh.js create mode 100644 branches/conlite20/conlite/external/edit_area/license_apache.txt create mode 100644 branches/conlite20/conlite/external/edit_area/license_bsd.txt create mode 100644 branches/conlite20/conlite/external/edit_area/license_lgpl.txt create mode 100644 branches/conlite20/conlite/external/edit_area/manage_area.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/charmap.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/css/charmap.css create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/images/charmap.gif create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/jscripts/map.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/bg.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/cs.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/de.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/dk.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/en.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/eo.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/es.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/fr.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/hr.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/it.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/ja.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/mk.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/nl.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/pl.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/pt.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/ru.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/sk.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/langs/zh.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/charmap/popup.html create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/css/test.css create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/images/test.gif create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/bg.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/cs.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/de.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/dk.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/en.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/eo.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/es.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/fr.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/hr.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/it.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/ja.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/mk.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/nl.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/pl.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/pt.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/ru.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/sk.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/langs/zh.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/test.js create mode 100644 branches/conlite20/conlite/external/edit_area/plugins/test/test2.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/basic.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/brainfuck.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/c.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/coldfusion.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/cpp.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/css.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/html.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/java.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/js.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/pas.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/perl.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/php.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/python.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/robotstxt.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/ruby.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/sql.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/tsql.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/vb.js create mode 100644 branches/conlite20/conlite/external/edit_area/reg_syntax/xml.js create mode 100644 branches/conlite20/conlite/external/edit_area/regexp.js create mode 100644 branches/conlite20/conlite/external/edit_area/resize_area.js create mode 100644 branches/conlite20/conlite/external/edit_area/search_replace.js create mode 100644 branches/conlite20/conlite/external/edit_area/template.html create mode 100644 branches/conlite20/conlite/external/frontend/cache/index.php create mode 100644 branches/conlite20/conlite/external/frontend/config.php create mode 100644 branches/conlite20/conlite/external/frontend/css/index.php create mode 100644 branches/conlite20/conlite/external/frontend/css/style_tiny.css create mode 100644 branches/conlite20/conlite/external/frontend/dbfs.php create mode 100644 branches/conlite20/conlite/external/frontend/error.php create mode 100644 branches/conlite20/conlite/external/frontend/front_content.php create mode 100644 branches/conlite20/conlite/external/frontend/front_crcloginform.inc.php create mode 100644 branches/conlite20/conlite/external/frontend/images/but_ok.gif create mode 100644 branches/conlite20/conlite/external/frontend/images/index.php create mode 100644 branches/conlite20/conlite/external/frontend/includes/class.concache.php create mode 100644 branches/conlite20/conlite/external/frontend/includes/class.input.helper.php create mode 100644 branches/conlite20/conlite/external/frontend/includes/concache.php create mode 100644 branches/conlite20/conlite/external/frontend/includes/index.php create mode 100644 branches/conlite20/conlite/external/frontend/index.php create mode 100644 branches/conlite20/conlite/external/frontend/js/index.php create mode 100644 branches/conlite20/conlite/external/frontend/logs/index.php create mode 100644 branches/conlite20/conlite/external/frontend/robots.txt create mode 100644 branches/conlite20/conlite/external/frontend/templates/index.php create mode 100644 branches/conlite20/conlite/external/frontend/upload/test.txt create mode 100644 branches/conlite20/conlite/external/index.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/CHANGELOG create mode 100644 branches/conlite20/conlite/external/phpqrcode/INSTALL create mode 100644 branches/conlite20/conlite/external/phpqrcode/LICENSE create mode 100644 branches/conlite20/conlite/external/phpqrcode/README create mode 100644 branches/conlite20/conlite/external/phpqrcode/VERSION create mode 100644 branches/conlite20/conlite/external/phpqrcode/bindings/tcpdf/qrcode.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/index.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/phpqrcode.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/qrbitstream.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/qrconfig.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/qrconst.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/qrencode.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/qrimage.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/qrinput.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/qrlib.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/qrmask.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/qrrscode.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/qrspec.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/qrsplit.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/qrtools.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/tools/merge.bat create mode 100644 branches/conlite20/conlite/external/phpqrcode/tools/merge.php create mode 100755 branches/conlite20/conlite/external/phpqrcode/tools/merge.sh create mode 100644 branches/conlite20/conlite/external/phpqrcode/tools/merged_config.php create mode 100644 branches/conlite20/conlite/external/phpqrcode/tools/merged_header.php create mode 100644 branches/conlite20/conlite/external/wysiwyg/index.php create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/TINYMCE_INTEGRATION_HOWTO.txt create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/changelog.txt create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/compressor_changelog.txt create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/config.php create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/editor.php create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/editorclass.php create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/langs/de.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/langs/en.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/license.txt create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advhr/css/advhr.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advhr/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advhr/js/rule.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advhr/langs/de_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advhr/rule.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advimage/css/advimage.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advimage/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advimage/image.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advimage/img/sample.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advimage/js/image.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advimage/langs/de_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advlink/css/advlink.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advlink/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advlink/js/advlink.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advlink/langs/de_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advlink/link.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advlist/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/autolink/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/autosave/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/directionality/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/emotions.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/js/emotions.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/langs/de_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/example/dialog.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/example/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/example/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/example/img/example.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/example/js/dialog.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/example/langs/en.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/example/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/example_dependency/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/example_dependency/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/fullpage/fullpage.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/fullpage/langs/de_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/iespell/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/template.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/layer/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/lists/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/media/css/media.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/media/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/media/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/media/js/embed.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/media/js/media.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/media/langs/de_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/media/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/media/media.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/media/moxieplayer.swf create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/js/pastetext.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/js/pasteword.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/langs/de_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/pastetext.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/pasteword.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/example.html create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/jscripts/embed.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/preview.html create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/print/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/print/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/save/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/save/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/langs/de_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/css/content.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/css/props.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/js/props.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/langs/de_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/props.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/readme.txt create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/cell.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/css/cell.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/css/row.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/css/table.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/js/cell.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/js/merge_cells.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/js/row.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/js/table.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/langs/de_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/merge_cells.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/row.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/table.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/blank.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/css/template.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/js/template.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/langs/de_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/template.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/langs/de_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/about.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/anchor.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/charmap.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/color_picker.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/editor_template.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/editor_template_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/image.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/flash.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/icons.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/iframe.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/pagebreak.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/quicktime.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/realmedia.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/shockwave.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/trans.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/video.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/windowsmedia.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/about.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/anchor.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/charmap.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/color_picker.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/image.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/link.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/source_editor.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/de.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/de_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/en.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/link.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/shortcuts.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/content.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/ui.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/content.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/source_editor.htm create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/editor_template.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/editor_template_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/img/icons.gif create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/langs/de.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/langs/en.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/default/content.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/default/ui.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/tiny_mce.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/tiny_mce_popup.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/tiny_mce_src.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/utils/editable_selects.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/utils/form_utils.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/utils/mctabs.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/utils/validate.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/list.php create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/readme create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/readme.txt create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/tiny_mce_gzip.js create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/tiny_mce_gzip.php create mode 100644 branches/conlite20/conlite/external/wysiwyg/tinymce3/tinymce.tpl.html create mode 100644 branches/conlite20/conlite/favicon.ico create mode 100644 branches/conlite20/conlite/frameset.php create mode 100644 branches/conlite20/conlite/frameset_left.php create mode 100644 branches/conlite20/conlite/frameset_right.php create mode 100644 branches/conlite20/conlite/header.php create mode 100644 branches/conlite20/conlite/images/actions/clear_right.gif create mode 100644 branches/conlite20/conlite/images/arrow.gif create mode 100644 branches/conlite20/conlite/images/arrow_tipballoon.gif create mode 100644 branches/conlite20/conlite/images/article.gif create mode 100644 branches/conlite20/conlite/images/article_locked.gif create mode 100644 branches/conlite20/conlite/images/article_unlocked.gif create mode 100644 branches/conlite20/conlite/images/artikel_spez_akt.gif create mode 100644 branches/conlite20/conlite/images/artikel_spez_inakt.gif create mode 100644 branches/conlite20/conlite/images/avail_clients.gif create mode 100644 branches/conlite20/conlite/images/back.gif create mode 100644 branches/conlite20/conlite/images/background.jpg create mode 100644 branches/conlite20/conlite/images/bg_dark.gif create mode 100644 branches/conlite20/conlite/images/bg_high.gif create mode 100644 branches/conlite20/conlite/images/bg_light.gif create mode 100644 branches/conlite20/conlite/images/bg_sub.gif create mode 100644 branches/conlite20/conlite/images/bg_trans.gif create mode 100644 branches/conlite20/conlite/images/but_art_conf2.gif create mode 100644 branches/conlite20/conlite/images/but_art_new.gif create mode 100644 branches/conlite20/conlite/images/but_back.gif create mode 100644 branches/conlite20/conlite/images/but_cancel.gif create mode 100644 branches/conlite20/conlite/images/but_cancel_off.gif create mode 100644 branches/conlite20/conlite/images/but_cat_conf.gif create mode 100644 branches/conlite20/conlite/images/but_cat_conf2.gif create mode 100644 branches/conlite20/conlite/images/but_copy.gif create mode 100644 branches/conlite20/conlite/images/but_delete.gif create mode 100644 branches/conlite20/conlite/images/but_downloadlist.gif create mode 100644 branches/conlite20/conlite/images/but_edit.gif create mode 100644 branches/conlite20/conlite/images/but_edithead.gif create mode 100644 branches/conlite20/conlite/images/but_edithtml.gif create mode 100644 branches/conlite20/conlite/images/but_editimage.gif create mode 100644 branches/conlite20/conlite/images/but_editlink.gif create mode 100644 branches/conlite20/conlite/images/but_editpdf.gif create mode 100644 branches/conlite20/conlite/images/but_editswf.gif create mode 100644 branches/conlite20/conlite/images/but_edittext.gif create mode 100644 branches/conlite20/conlite/images/but_editzip.gif create mode 100644 branches/conlite20/conlite/images/but_help.gif create mode 100644 branches/conlite20/conlite/images/but_invert_selection.gif create mode 100644 branches/conlite20/conlite/images/but_lastnode.gif create mode 100644 branches/conlite20/conlite/images/but_logout.gif create mode 100644 branches/conlite20/conlite/images/but_minus.gif create mode 100644 branches/conlite20/conlite/images/but_move_subtree.gif create mode 100644 branches/conlite20/conlite/images/but_move_subtree_main.gif create mode 100644 branches/conlite20/conlite/images/but_move_subtree_target.gif create mode 100644 branches/conlite20/conlite/images/but_news.gif create mode 100644 branches/conlite20/conlite/images/but_ok.gif create mode 100644 branches/conlite20/conlite/images/but_ok_off.gif create mode 100644 branches/conlite20/conlite/images/but_online.gif create mode 100644 branches/conlite20/conlite/images/but_online_no.gif create mode 100644 branches/conlite20/conlite/images/but_plus.gif create mode 100644 branches/conlite20/conlite/images/but_preview.gif create mode 100644 branches/conlite20/conlite/images/but_properties.gif create mode 100644 branches/conlite20/conlite/images/but_refresh.gif create mode 100644 branches/conlite20/conlite/images/but_rename.gif create mode 100644 branches/conlite20/conlite/images/but_rss.gif create mode 100644 branches/conlite20/conlite/images/but_setreminder.gif create mode 100644 branches/conlite20/conlite/images/but_speichern.gif create mode 100644 branches/conlite20/conlite/images/but_sync_art.gif create mode 100644 branches/conlite20/conlite/images/but_sync_art_off.gif create mode 100644 branches/conlite20/conlite/images/but_sync_cat.gif create mode 100644 branches/conlite20/conlite/images/but_sync_cat_off.gif create mode 100644 branches/conlite20/conlite/images/but_time_1.gif create mode 100644 branches/conlite20/conlite/images/but_time_2.gif create mode 100644 branches/conlite20/conlite/images/but_todo.gif create mode 100644 branches/conlite20/conlite/images/but_todo_off.gif create mode 100644 branches/conlite20/conlite/images/but_warn.gif create mode 100644 branches/conlite20/conlite/images/calendar.gif create mode 100644 branches/conlite20/conlite/images/cl-logo.gif create mode 100644 branches/conlite20/conlite/images/close_all.gif create mode 100644 branches/conlite20/conlite/images/collapsed.gif create mode 100644 branches/conlite20/conlite/images/configure.gif create mode 100644 branches/conlite20/conlite/images/conlogo.gif create mode 100644 branches/conlite20/conlite/images/contact.gif create mode 100644 branches/conlite20/conlite/images/dash.gif create mode 100644 branches/conlite20/conlite/images/db_backup_start.png create mode 100644 branches/conlite20/conlite/images/db_backup_start_off.png create mode 100644 branches/conlite20/conlite/images/delete.gif create mode 100644 branches/conlite20/conlite/images/delete_inact.gif create mode 100644 branches/conlite20/conlite/images/delete_inact_g.gif create mode 100644 branches/conlite20/conlite/images/delete_inact_h.gif create mode 100644 branches/conlite20/conlite/images/delete_over.gif create mode 100644 branches/conlite20/conlite/images/editieren.gif create mode 100644 branches/conlite20/conlite/images/exclamation.gif create mode 100644 branches/conlite20/conlite/images/filetypes/css.gif create mode 100644 branches/conlite20/conlite/images/filetypes/design.gif create mode 100644 branches/conlite20/conlite/images/filetypes/excel.gif create mode 100644 branches/conlite20/conlite/images/filetypes/gif.gif create mode 100644 branches/conlite20/conlite/images/filetypes/html.gif create mode 100644 branches/conlite20/conlite/images/filetypes/javascript.gif create mode 100644 branches/conlite20/conlite/images/filetypes/jpg.gif create mode 100644 branches/conlite20/conlite/images/filetypes/js.gif create mode 100644 branches/conlite20/conlite/images/filetypes/movie.gif create mode 100644 branches/conlite20/conlite/images/filetypes/odf.gif create mode 100644 branches/conlite20/conlite/images/filetypes/pdf.gif create mode 100644 branches/conlite20/conlite/images/filetypes/php.gif create mode 100644 branches/conlite20/conlite/images/filetypes/png.gif create mode 100644 branches/conlite20/conlite/images/filetypes/ppt.gif create mode 100644 branches/conlite20/conlite/images/filetypes/sound.gif create mode 100644 branches/conlite20/conlite/images/filetypes/swf.gif create mode 100644 branches/conlite20/conlite/images/filetypes/txt.gif create mode 100644 branches/conlite20/conlite/images/filetypes/unknown.gif create mode 100644 branches/conlite20/conlite/images/filetypes/vcf.gif create mode 100644 branches/conlite20/conlite/images/filetypes/word.gif create mode 100644 branches/conlite20/conlite/images/filetypes/zip.gif create mode 100644 branches/conlite20/conlite/images/filler_bg.gif create mode 100644 branches/conlite20/conlite/images/folder.gif create mode 100644 branches/conlite20/conlite/images/folder_delock.gif create mode 100644 branches/conlite20/conlite/images/folder_delocked.gif create mode 100644 branches/conlite20/conlite/images/folder_duplicate.gif create mode 100644 branches/conlite20/conlite/images/folder_duplicate_off.gif create mode 100644 branches/conlite20/conlite/images/folder_lock.gif create mode 100644 branches/conlite20/conlite/images/folder_locked.gif create mode 100644 branches/conlite20/conlite/images/folder_move.gif create mode 100644 branches/conlite20/conlite/images/folder_movedown.gif create mode 100644 branches/conlite20/conlite/images/folder_movedown_inact.gif create mode 100644 branches/conlite20/conlite/images/folder_moveup.gif create mode 100644 branches/conlite20/conlite/images/folder_moveup_inact.gif create mode 100644 branches/conlite20/conlite/images/folder_new.gif create mode 100644 branches/conlite20/conlite/images/folder_off.gif create mode 100644 branches/conlite20/conlite/images/folder_off_error.gif create mode 100644 branches/conlite20/conlite/images/folder_off_error_locked.gif create mode 100644 branches/conlite20/conlite/images/folder_off_locked.gif create mode 100644 branches/conlite20/conlite/images/folder_on.gif create mode 100644 branches/conlite20/conlite/images/folder_on_error.gif create mode 100644 branches/conlite20/conlite/images/folder_on_error_locked.gif create mode 100644 branches/conlite20/conlite/images/folder_on_locked.gif create mode 100644 branches/conlite20/conlite/images/frame_handle_li.gif create mode 100644 branches/conlite20/conlite/images/frame_handle_re.gif create mode 100644 branches/conlite20/conlite/images/grid_collapse.gif create mode 100644 branches/conlite20/conlite/images/grid_expand.gif create mode 100644 branches/conlite20/conlite/images/grid_folder.gif create mode 100644 branches/conlite20/conlite/images/grid_linedown.gif create mode 100644 branches/conlite20/conlite/images/grid_linedownright.gif create mode 100644 branches/conlite20/conlite/images/grid_linedownrightend.gif create mode 100644 branches/conlite20/conlite/images/groups.gif create mode 100644 branches/conlite20/conlite/images/groups_o.gif create mode 100644 branches/conlite20/conlite/images/icon_fatalerror.gif create mode 100644 branches/conlite20/conlite/images/icon_warning.gif create mode 100644 branches/conlite20/conlite/images/importieren.gif create mode 100644 branches/conlite20/conlite/images/index.php create mode 100644 branches/conlite20/conlite/images/info.gif create mode 100644 branches/conlite20/conlite/images/isstart0.gif create mode 100644 branches/conlite20/conlite/images/isstart0m.gif create mode 100644 branches/conlite20/conlite/images/isstart0mr.gif create mode 100644 branches/conlite20/conlite/images/isstart0r.gif create mode 100644 branches/conlite20/conlite/images/isstart1.gif create mode 100644 branches/conlite20/conlite/images/isstart1m.gif create mode 100644 branches/conlite20/conlite/images/isstart1mr.gif create mode 100644 branches/conlite20/conlite/images/isstart1r.gif create mode 100644 branches/conlite20/conlite/images/lock_closed.gif create mode 100644 branches/conlite20/conlite/images/lock_open.gif create mode 100644 branches/conlite20/conlite/images/my_contenido.gif create mode 100644 branches/conlite20/conlite/images/newsletter.gif create mode 100644 branches/conlite20/conlite/images/newsletter_16.gif create mode 100644 branches/conlite20/conlite/images/newsletter_dispatch_16.gif create mode 100644 branches/conlite20/conlite/images/newsletter_dispatch_16_off.gif create mode 100644 branches/conlite20/conlite/images/newsletter_dispatch_off.gif create mode 100644 branches/conlite20/conlite/images/newsletter_dispatch_on.gif create mode 100644 branches/conlite20/conlite/images/newsletter_off.gif create mode 100644 branches/conlite20/conlite/images/newsletter_on.gif create mode 100644 branches/conlite20/conlite/images/newsletter_recipientgroups_off.gif create mode 100644 branches/conlite20/conlite/images/newsletter_recipientgroups_on.gif create mode 100644 branches/conlite20/conlite/images/newsletter_recipients_off.gif create mode 100644 branches/conlite20/conlite/images/newsletter_recipients_on.gif create mode 100644 branches/conlite20/conlite/images/newsletter_sendtest_16.gif create mode 100644 branches/conlite20/conlite/images/newsletter_sendtest_16_off.gif create mode 100644 branches/conlite20/conlite/images/offline.gif create mode 100644 branches/conlite20/conlite/images/offline_off.gif create mode 100644 branches/conlite20/conlite/images/online.gif create mode 100644 branches/conlite20/conlite/images/online_off.gif create mode 100644 branches/conlite20/conlite/images/open_all.gif create mode 100644 branches/conlite20/conlite/images/ordner_oben.gif create mode 100644 branches/conlite20/conlite/images/paging/first.gif create mode 100644 branches/conlite20/conlite/images/paging/last.gif create mode 100644 branches/conlite20/conlite/images/paging/next.gif create mode 100644 branches/conlite20/conlite/images/paging/previous.gif create mode 100644 branches/conlite20/conlite/images/pfeil_links.gif create mode 100644 branches/conlite20/conlite/images/pfeil_runter.gif create mode 100644 branches/conlite20/conlite/images/print.gif create mode 100644 branches/conlite20/conlite/images/reminder/prio_high.gif create mode 100644 branches/conlite20/conlite/images/reminder/prio_low.gif create mode 100644 branches/conlite20/conlite/images/reminder/prio_medium.gif create mode 100644 branches/conlite20/conlite/images/reminder/prio_veryhigh.gif create mode 100644 branches/conlite20/conlite/images/reminder/progress.gif create mode 100644 branches/conlite20/conlite/images/reminder/status_deferred.gif create mode 100644 branches/conlite20/conlite/images/reminder/status_done.gif create mode 100644 branches/conlite20/conlite/images/reminder/status_inprogress.gif create mode 100644 branches/conlite20/conlite/images/reminder/status_new.gif create mode 100644 branches/conlite20/conlite/images/reminder/status_waiting.gif create mode 100644 branches/conlite20/conlite/images/save.gif create mode 100644 branches/conlite20/conlite/images/social/facebook.gif create mode 100644 branches/conlite20/conlite/images/sort_down.gif create mode 100644 branches/conlite20/conlite/images/sort_up.gif create mode 100644 branches/conlite20/conlite/images/space.gif create mode 100644 branches/conlite20/conlite/images/spacer.gif create mode 100644 branches/conlite20/conlite/images/submit.gif create mode 100644 branches/conlite20/conlite/images/submit_hover.gif create mode 100644 branches/conlite20/conlite/images/sync.png create mode 100644 branches/conlite20/conlite/images/template_properties.gif create mode 100644 branches/conlite20/conlite/images/template_properties_off.gif create mode 100644 branches/conlite20/conlite/images/toggle_frame_left.gif create mode 100644 branches/conlite20/conlite/images/toggle_frame_right.gif create mode 100644 branches/conlite20/conlite/images/top.gif create mode 100644 branches/conlite20/conlite/images/user_online.gif create mode 100644 branches/conlite20/conlite/images/users.gif create mode 100644 branches/conlite20/conlite/images/users_o.gif create mode 100644 branches/conlite20/conlite/images/vert-neu.gif create mode 100644 branches/conlite20/conlite/images/vert.gif create mode 100644 branches/conlite20/conlite/images/widgets/foldingrow/collapsed.gif create mode 100644 branches/conlite20/conlite/images/widgets/foldingrow/expanded.gif create mode 100644 branches/conlite20/conlite/images/workflow_step_delete.gif create mode 100644 branches/conlite20/conlite/includes/ajax/include.ajax.con.php create mode 100644 branches/conlite20/conlite/includes/api/functions.api.general.php create mode 100644 branches/conlite20/conlite/includes/api/functions.frontend.list.php create mode 100644 branches/conlite20/conlite/includes/cfg_language_de.inc.php create mode 100644 branches/conlite20/conlite/includes/functions.api.category.php create mode 100644 branches/conlite20/conlite/includes/functions.api.images.php create mode 100644 branches/conlite20/conlite/includes/functions.api.php create mode 100644 branches/conlite20/conlite/includes/functions.api.string.php create mode 100644 branches/conlite20/conlite/includes/functions.con.php create mode 100644 branches/conlite20/conlite/includes/functions.con2.php create mode 100644 branches/conlite20/conlite/includes/functions.database.php create mode 100644 branches/conlite20/conlite/includes/functions.domxml-php4-to-php5.php create mode 100644 branches/conlite20/conlite/includes/functions.encoding.php create mode 100644 branches/conlite20/conlite/includes/functions.file.php create mode 100644 branches/conlite20/conlite/includes/functions.forms.php create mode 100644 branches/conlite20/conlite/includes/functions.general.php create mode 100644 branches/conlite20/conlite/includes/functions.i18n.php create mode 100644 branches/conlite20/conlite/includes/functions.includePluginConf.php create mode 100644 branches/conlite20/conlite/includes/functions.lang.php create mode 100644 branches/conlite20/conlite/includes/functions.lay.php create mode 100644 branches/conlite20/conlite/includes/functions.mod.php create mode 100644 branches/conlite20/conlite/includes/functions.pathresolver.php create mode 100644 branches/conlite20/conlite/includes/functions.php54.php create mode 100644 branches/conlite20/conlite/includes/functions.php73.php create mode 100644 branches/conlite20/conlite/includes/functions.rights.php create mode 100644 branches/conlite20/conlite/includes/functions.stat.php create mode 100644 branches/conlite20/conlite/includes/functions.str.php create mode 100644 branches/conlite20/conlite/includes/functions.system.php create mode 100644 branches/conlite20/conlite/includes/functions.tpl.php create mode 100644 branches/conlite20/conlite/includes/functions.upl.php create mode 100644 branches/conlite20/conlite/includes/globals_off.inc.php create mode 100644 branches/conlite20/conlite/includes/grouprights.inc.php create mode 100644 branches/conlite20/conlite/includes/grouprights_area.inc.php create mode 100644 branches/conlite20/conlite/includes/grouprights_con.inc.php create mode 100644 branches/conlite20/conlite/includes/grouprights_lay.inc.php create mode 100644 branches/conlite20/conlite/includes/grouprights_members.inc.php create mode 100644 branches/conlite20/conlite/includes/grouprights_mod.inc.php create mode 100644 branches/conlite20/conlite/includes/grouprights_str.inc.php create mode 100644 branches/conlite20/conlite/includes/grouprights_tpl.inc.php create mode 100644 branches/conlite20/conlite/includes/include.CMS_EASYIMG.php create mode 100644 branches/conlite20/conlite/includes/include.CMS_HEAD.php create mode 100644 branches/conlite20/conlite/includes/include.CMS_HTML.php create mode 100644 branches/conlite20/conlite/includes/include.CMS_HTMLHEAD.php create mode 100644 branches/conlite20/conlite/includes/include.CMS_HTMLTEXT.php create mode 100644 branches/conlite20/conlite/includes/include.CMS_IMG.php create mode 100644 branches/conlite20/conlite/includes/include.CMS_LINK.php create mode 100644 branches/conlite20/conlite/includes/include.CMS_QRCODE.php create mode 100644 branches/conlite20/conlite/includes/include.CMS_SIMPLELINK.php create mode 100644 branches/conlite20/conlite/includes/include.CMS_SWF.php create mode 100644 branches/conlite20/conlite/includes/include.CMS_TEXT.php create mode 100644 branches/conlite20/conlite/includes/include.backendedit.php create mode 100644 branches/conlite20/conlite/includes/include.blank.php create mode 100644 branches/conlite20/conlite/includes/include.client_artspec.php create mode 100644 branches/conlite20/conlite/includes/include.client_edit.php create mode 100644 branches/conlite20/conlite/includes/include.client_left_top.php create mode 100644 branches/conlite20/conlite/includes/include.client_menu.php create mode 100644 branches/conlite20/conlite/includes/include.clientsettings.php create mode 100644 branches/conlite20/conlite/includes/include.con_art_overview.php create mode 100644 branches/conlite20/conlite/includes/include.con_edit_form.php create mode 100644 branches/conlite20/conlite/includes/include.con_editcontent.php create mode 100644 branches/conlite20/conlite/includes/include.con_left_top.php create mode 100644 branches/conlite20/conlite/includes/include.con_str_overview.php create mode 100644 branches/conlite20/conlite/includes/include.con_subnav.php create mode 100644 branches/conlite20/conlite/includes/include.debug.php create mode 100644 branches/conlite20/conlite/includes/include.default_subnav.php create mode 100644 branches/conlite20/conlite/includes/include.files_subnav.php create mode 100644 branches/conlite20/conlite/includes/include.frontend.group.subnav.php create mode 100644 branches/conlite20/conlite/includes/include.frontend.group_edit.php create mode 100644 branches/conlite20/conlite/includes/include.frontend.group_menu.php create mode 100644 branches/conlite20/conlite/includes/include.frontend.group_rights.php create mode 100644 branches/conlite20/conlite/includes/include.frontend.left_top.php create mode 100644 branches/conlite20/conlite/includes/include.frontend.user_edit.php create mode 100644 branches/conlite20/conlite/includes/include.frontend.user_menu.php create mode 100644 branches/conlite20/conlite/includes/include.grouprights_create.php create mode 100644 branches/conlite20/conlite/includes/include.grouprights_details.php create mode 100644 branches/conlite20/conlite/includes/include.grouprights_external.php create mode 100644 branches/conlite20/conlite/includes/include.grouprights_left_top.php create mode 100644 branches/conlite20/conlite/includes/include.grouprights_menu.php create mode 100644 branches/conlite20/conlite/includes/include.grouprights_overview.php create mode 100644 branches/conlite20/conlite/includes/include.grouprights_subnav.php create mode 100644 branches/conlite20/conlite/includes/include.html_tpl_edit_form.php create mode 100644 branches/conlite20/conlite/includes/include.html_tpl_files_overview.php create mode 100644 branches/conlite20/conlite/includes/include.html_tpl_history.php create mode 100644 branches/conlite20/conlite/includes/include.html_tpl_left_top.php create mode 100644 branches/conlite20/conlite/includes/include.info.php create mode 100644 branches/conlite20/conlite/includes/include.js_edit_form.php create mode 100644 branches/conlite20/conlite/includes/include.js_files_overview.php create mode 100644 branches/conlite20/conlite/includes/include.js_history.php create mode 100644 branches/conlite20/conlite/includes/include.js_left_top.php create mode 100644 branches/conlite20/conlite/includes/include.lang_edit.php create mode 100644 branches/conlite20/conlite/includes/include.lang_left_top.php create mode 100644 branches/conlite20/conlite/includes/include.lang_overview.php create mode 100644 branches/conlite20/conlite/includes/include.lay_edit_form.php create mode 100644 branches/conlite20/conlite/includes/include.lay_history.php create mode 100644 branches/conlite20/conlite/includes/include.lay_new.php create mode 100644 branches/conlite20/conlite/includes/include.lay_overview.php create mode 100644 branches/conlite20/conlite/includes/include.lay_preview.php create mode 100644 branches/conlite20/conlite/includes/include.left_top_blank.php create mode 100644 branches/conlite20/conlite/includes/include.logs.php create mode 100644 branches/conlite20/conlite/includes/include.mod_edit_form.php create mode 100644 branches/conlite20/conlite/includes/include.mod_history.php create mode 100644 branches/conlite20/conlite/includes/include.mod_new.php create mode 100644 branches/conlite20/conlite/includes/include.mod_overview.php create mode 100644 branches/conlite20/conlite/includes/include.mod_package.php create mode 100644 branches/conlite20/conlite/includes/include.mod_sync.php create mode 100644 branches/conlite20/conlite/includes/include.mod_translate.php create mode 100644 branches/conlite20/conlite/includes/include.mod_translate_stringlist.php create mode 100644 branches/conlite20/conlite/includes/include.mycontenido.tasks.edit.php create mode 100644 branches/conlite20/conlite/includes/include.mycontenido.tasks.php create mode 100644 branches/conlite20/conlite/includes/include.mycontenido_lastarticles.php create mode 100644 branches/conlite20/conlite/includes/include.mycontenido_settings.php create mode 100644 branches/conlite20/conlite/includes/include.note.display.php create mode 100644 branches/conlite20/conlite/includes/include.note.popup.php create mode 100644 branches/conlite20/conlite/includes/include.pretplcfg_edit.php create mode 100644 branches/conlite20/conlite/includes/include.pretplcfg_edit_form.php create mode 100644 branches/conlite20/conlite/includes/include.rights_create.php create mode 100644 branches/conlite20/conlite/includes/include.rights_external.php create mode 100644 branches/conlite20/conlite/includes/include.rights_left_top.php create mode 100644 branches/conlite20/conlite/includes/include.rights_menu.php create mode 100644 branches/conlite20/conlite/includes/include.rights_overview.php create mode 100644 branches/conlite20/conlite/includes/include.stat_left_top.php create mode 100644 branches/conlite20/conlite/includes/include.stat_menu.php create mode 100644 branches/conlite20/conlite/includes/include.stat_overview.php create mode 100644 branches/conlite20/conlite/includes/include.str_overview.php create mode 100644 branches/conlite20/conlite/includes/include.str_subnav.php create mode 100644 branches/conlite20/conlite/includes/include.style_edit_form.php create mode 100644 branches/conlite20/conlite/includes/include.style_files_overview.php create mode 100644 branches/conlite20/conlite/includes/include.style_history.php create mode 100644 branches/conlite20/conlite/includes/include.style_left_top.php create mode 100644 branches/conlite20/conlite/includes/include.subnav.php create mode 100644 branches/conlite20/conlite/includes/include.symbolhelp.php create mode 100644 branches/conlite20/conlite/includes/include.system_configuration.php create mode 100644 branches/conlite20/conlite/includes/include.system_db_backup.php create mode 100644 branches/conlite20/conlite/includes/include.system_purge.php create mode 100644 branches/conlite20/conlite/includes/include.system_sysvalues.php create mode 100644 branches/conlite20/conlite/includes/include.systemsettings.php create mode 100644 branches/conlite20/conlite/includes/include.todo.popup.php create mode 100644 branches/conlite20/conlite/includes/include.tpl_edit_form.php create mode 100644 branches/conlite20/conlite/includes/include.tpl_new.php create mode 100644 branches/conlite20/conlite/includes/include.tpl_overview.php create mode 100644 branches/conlite20/conlite/includes/include.tpl_visualedit.php create mode 100644 branches/conlite20/conlite/includes/include.tplcfg_edit.php create mode 100644 branches/conlite20/conlite/includes/include.tplcfg_edit_form.php create mode 100644 branches/conlite20/conlite/includes/include.upl_artlist.php create mode 100644 branches/conlite20/conlite/includes/include.upl_dirs_overview.php create mode 100644 branches/conlite20/conlite/includes/include.upl_edit.php create mode 100644 branches/conlite20/conlite/includes/include.upl_files_overview.php create mode 100644 branches/conlite20/conlite/includes/include.upl_files_upload.php create mode 100644 branches/conlite20/conlite/includes/include.upl_left_top.php create mode 100644 branches/conlite20/conlite/includes/include.upl_search_results.php create mode 100644 branches/conlite20/conlite/includes/include.upl_subnav.php create mode 100644 branches/conlite20/conlite/includes/index.php create mode 100644 branches/conlite20/conlite/includes/main.login.php create mode 100644 branches/conlite20/conlite/includes/pseudo-cron.inc.php create mode 100644 branches/conlite20/conlite/includes/rights.inc.php create mode 100644 branches/conlite20/conlite/includes/rights_area.inc.php create mode 100644 branches/conlite20/conlite/includes/rights_con.inc.php create mode 100644 branches/conlite20/conlite/includes/rights_lay.inc.php create mode 100644 branches/conlite20/conlite/includes/rights_mod.inc.php create mode 100644 branches/conlite20/conlite/includes/rights_str.inc.php create mode 100644 branches/conlite20/conlite/includes/rights_tpl.inc.php create mode 100644 branches/conlite20/conlite/includes/startup.php create mode 100644 branches/conlite20/conlite/index.php create mode 100644 branches/conlite20/conlite/locale/conlite.pot create mode 100644 branches/conlite20/conlite/locale/de_DE/LC_MESSAGES/conlite.mo create mode 100644 branches/conlite20/conlite/locale/de_DE/LC_MESSAGES/conlite.po create mode 100644 branches/conlite20/conlite/locale/en_US/LC_MESSAGES/conlite.mo create mode 100644 branches/conlite20/conlite/locale/en_US/LC_MESSAGES/conlite.po create mode 100644 branches/conlite20/conlite/locale/potfiles.txt create mode 100644 branches/conlite20/conlite/logout.php create mode 100644 branches/conlite20/conlite/logs/deprecated.txt create mode 100644 branches/conlite20/conlite/logs/index.php create mode 100644 branches/conlite20/conlite/main.loginform.php create mode 100644 branches/conlite20/conlite/main.php create mode 100644 branches/conlite20/conlite/plugins/chains/createmetatags/classes/class.metatag.creator.html5.php create mode 100644 branches/conlite20/conlite/plugins/chains/createmetatags/conf/MetaExtension.php create mode 100644 branches/conlite20/conlite/plugins/chains/createmetatags/include.chain.content.createmetatags.php create mode 100644 branches/conlite20/conlite/plugins/chains/createmetatags/includes/keyword_density.php create mode 100644 branches/conlite20/conlite/plugins/chains/createmetatags/includes/keyword_density_php52.php create mode 100644 branches/conlite20/conlite/plugins/chains/includes/class.ceccreatefacebookmeta.php create mode 100644 branches/conlite20/conlite/plugins/chains/includes/config.plugin.php create mode 100644 branches/conlite20/conlite/plugins/chains/includes/include.chain.content.set_clear_cache.php create mode 100644 branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.cat_access.php create mode 100644 branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.cat_backendaccess.php create mode 100644 branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.createbasehref.php create mode 100644 branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.output_compressor.php create mode 100755 branches/conlite20/conlite/plugins/chains/includes/old.config.plugin.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/cl_plugin.xml create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.groups.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.jobs.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.logs.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.recipients.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/config.autoloader.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/config.plugin.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_edit.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_edit_message.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_jobs_details.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_jobs_menu.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_jobs_subnav.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_left_top.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_menu.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_subnav.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients.group.subnav.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients.group_edit.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients.group_menu.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients_edit.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients_import.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients_menu.php create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/locale/cl_newsletter.pot create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/locale/de_DE/LC_MESSAGES/cl_newsletter.mo create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/locale/de_DE/LC_MESSAGES/cl_newsletter.po create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/locale/potfiles.txt create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/plugin_install.sql create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/plugin_uninstall.sql create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/xml/lang_de_DE.xml create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/xml/lang_en_EN.xml create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/xml/lang_en_US.xml create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/xml/lang_fr_FR.xml create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/xml/lang_it_IT.xml create mode 100644 branches/conlite20/conlite/plugins/cl_newsletter/xml/lang_nl_NL.xml create mode 100644 branches/conlite20/conlite/plugins/content_allocation/classes/class.content_allocation.php create mode 100644 branches/conlite20/conlite/plugins/content_allocation/classes/class.content_allocation_article.php create mode 100644 branches/conlite20/conlite/plugins/content_allocation/classes/class.content_allocation_complexlist.php create mode 100644 branches/conlite20/conlite/plugins/content_allocation/classes/class.content_allocation_selectbox.php create mode 100644 branches/conlite20/conlite/plugins/content_allocation/classes/class.content_allocation_tree.php create mode 100644 branches/conlite20/conlite/plugins/content_allocation/classes/class.content_allocation_treeview.php create mode 100644 branches/conlite20/conlite/plugins/content_allocation/images/arrow.gif create mode 100644 branches/conlite20/conlite/plugins/content_allocation/images/call_contentallocation.gif create mode 100644 branches/conlite20/conlite/plugins/content_allocation/images/normal.gif create mode 100644 branches/conlite20/conlite/plugins/content_allocation/includes/config.autoloader.php create mode 100644 branches/conlite20/conlite/plugins/content_allocation/includes/config.plugin.php create mode 100644 branches/conlite20/conlite/plugins/content_allocation/includes/functions.chains.php create mode 100644 branches/conlite20/conlite/plugins/content_allocation/includes/include.contentallocation_article.php create mode 100644 branches/conlite20/conlite/plugins/content_allocation/includes/include.left_bottom.php create mode 100644 branches/conlite20/conlite/plugins/content_allocation/includes/include.left_top.php create mode 100644 branches/conlite20/conlite/plugins/content_allocation/includes/include.right_bottom.php create mode 100644 branches/conlite20/conlite/plugins/content_allocation/locale/content_allocation.pot create mode 100644 branches/conlite20/conlite/plugins/content_allocation/locale/de_DE/LC_MESSAGES/content_allocation.mo create mode 100644 branches/conlite20/conlite/plugins/content_allocation/locale/de_DE/LC_MESSAGES/content_allocation.po create mode 100644 branches/conlite20/conlite/plugins/content_allocation/locale/potfiles.txt create mode 100644 branches/conlite20/conlite/plugins/content_allocation/scripts/complexlist.js create mode 100644 branches/conlite20/conlite/plugins/content_allocation/style/complexlist.css create mode 100644 branches/conlite20/conlite/plugins/content_allocation/templates/template.tree_article.html create mode 100644 branches/conlite20/conlite/plugins/content_allocation/templates/template.tree_complexlist.html create mode 100644 branches/conlite20/conlite/plugins/content_allocation/templates/template.tree_structure.html create mode 100644 branches/conlite20/conlite/plugins/content_allocation/xml/content_allocation.xml create mode 100644 branches/conlite20/conlite/plugins/content_allocation/xml/lang_de_DE.xml create mode 100644 branches/conlite20/conlite/plugins/content_allocation/xml/lang_en_EN.xml create mode 100644 branches/conlite20/conlite/plugins/content_allocation/xml/lang_en_US.xml create mode 100644 branches/conlite20/conlite/plugins/frontendlogic/category/category.php create mode 100644 branches/conlite20/conlite/plugins/frontendlogic/category/docs/conlogo.gif create mode 100644 branches/conlite20/conlite/plugins/frontendlogic/category/docs/frontend.protectedcategories.html create mode 100644 branches/conlite20/conlite/plugins/frontendlogic/category/locale/de_DE/LC_MESSAGES/frontendlogic_category.mo create mode 100644 branches/conlite20/conlite/plugins/frontendlogic/category/locale/de_DE/LC_MESSAGES/frontendlogic_category.po create mode 100644 branches/conlite20/conlite/plugins/frontendlogic/includes/config.plugin.php create mode 100644 branches/conlite20/conlite/plugins/frontendusers/includes/config.plugin.php create mode 100644 branches/conlite20/conlite/plugins/frontendusers/valid_from/locale/de_DE/LC_MESSAGES/frontendusers_valid_from.mo create mode 100644 branches/conlite20/conlite/plugins/frontendusers/valid_from/locale/de_DE/LC_MESSAGES/frontendusers_valid_from.po create mode 100644 branches/conlite20/conlite/plugins/frontendusers/valid_from/locale/frontendusers_valid_from.pot create mode 100644 branches/conlite20/conlite/plugins/frontendusers/valid_from/locale/potfiles.txt create mode 100644 branches/conlite20/conlite/plugins/frontendusers/valid_from/valid_from.php create mode 100644 branches/conlite20/conlite/plugins/frontendusers/valid_to/locale/de_DE/LC_MESSAGES/frontendusers_valid_to.mo create mode 100644 branches/conlite20/conlite/plugins/frontendusers/valid_to/locale/de_DE/LC_MESSAGES/frontendusers_valid_to.po create mode 100644 branches/conlite20/conlite/plugins/frontendusers/valid_to/locale/frontendusers_valid_to.pot create mode 100644 branches/conlite20/conlite/plugins/frontendusers/valid_to/locale/potfiles.txt create mode 100644 branches/conlite20/conlite/plugins/frontendusers/valid_to/valid_to.php create mode 100644 branches/conlite20/conlite/plugins/index.php create mode 100644 branches/conlite20/conlite/plugins/linkchecker/includes/config.plugin.php create mode 100644 branches/conlite20/conlite/plugins/linkchecker/includes/include.checkperms.php create mode 100644 branches/conlite20/conlite/plugins/linkchecker/includes/include.linkchecker.php create mode 100644 branches/conlite20/conlite/plugins/linkchecker/includes/include.linkchecker_tests.php create mode 100644 branches/conlite20/conlite/plugins/linkchecker/includes/include.linkchecker_whitelist.php create mode 100644 branches/conlite20/conlite/plugins/linkchecker/locale/de_DE/LC_MESSAGES/linkchecker.mo create mode 100644 branches/conlite20/conlite/plugins/linkchecker/locale/de_DE/LC_MESSAGES/linkchecker.po create mode 100644 branches/conlite20/conlite/plugins/linkchecker/locale/linkchecker.pot create mode 100644 branches/conlite20/conlite/plugins/linkchecker/locale/potfiles.txt create mode 100644 branches/conlite20/conlite/plugins/linkchecker/templates/standard/template.linkchecker_noerrors.html create mode 100644 branches/conlite20/conlite/plugins/linkchecker/templates/standard/template.linkchecker_test.html create mode 100644 branches/conlite20/conlite/plugins/linkchecker/templates/standard/template.linkchecker_test_errors.html create mode 100644 branches/conlite20/conlite/plugins/linkchecker/templates/standard/template.linkchecker_test_errors_cat.html create mode 100644 branches/conlite20/conlite/plugins/linkchecker/templates/standard/template.linkchecker_test_nothing.html create mode 100644 branches/conlite20/conlite/plugins/linkchecker/templates/standard/template.linkchecker_whitelist.html create mode 100644 branches/conlite20/conlite/plugins/linkchecker/templates/standard/template.linkchecker_whitelist_urls.html create mode 100644 branches/conlite20/conlite/plugins/linkchecker/xml/lang_de_DE.xml create mode 100644 branches/conlite20/conlite/plugins/linkchecker/xml/lang_en_EN.xml create mode 100644 branches/conlite20/conlite/plugins/linkchecker/xml/lang_en_US.xml create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/classes/class.modrewrite.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/classes/class.modrewritebase.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/classes/class.modrewritecontroller.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/classes/class.modrewritedebugger.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/classes/class.modrewritetest.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/classes/class.modrewriteurlstack.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/classes/class.modrewriteurlutil.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/classes/controller/class.modrewrite_content_controller.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/classes/controller/class.modrewrite_contentexpert_controller.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/classes/controller/class.modrewrite_contenttest_controller.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/classes/controller/class.modrewrite_controller_abstract.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/external/aToolTip/css/atooltip.css create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/external/aToolTip/css/style.css create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/external/aToolTip/demos.html create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/external/aToolTip/images/bg.png create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/external/aToolTip/images/infoBtn.gif create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/external/aToolTip/js/atooltip.jquery.js create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/external/aToolTip/js/atooltip.min.jquery.js create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/external/aToolTip/js/jquery.min.js create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/files/htaccess_restrictive.txt create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/files/htaccess_simple.txt create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/includes/config.mod_rewrite_default.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/includes/config.plugin.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/includes/front_content_controller.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/includes/functions.mod_rewrite.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/includes/include.mod_rewrite_content.php create mode 100755 branches/conlite20/conlite/plugins/mod_rewrite/includes/include.mod_rewrite_content_top.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/includes/include.mod_rewrite_contentexpert.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/includes/include.mod_rewrite_contenttest.php create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/locale/de_DE/LC_MESSAGES/mod_rewrite.mo create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/locale/de_DE/LC_MESSAGES/mod_rewrite.po create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/locale/mod_rewrite.pot create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/locale/potfiles.txt create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/scripts/mod_rewrite.js create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/styles/styles.css create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/templates/content.html create mode 100755 branches/conlite20/conlite/plugins/mod_rewrite/templates/content_top.html create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/templates/contentexpert.html create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/templates/contenttest.html create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/xml/lang_de_DE.xml create mode 100644 branches/conlite20/conlite/plugins/mod_rewrite/xml/lang_en_US.xml create mode 100644 branches/conlite20/conlite/plugins/repository/custom/FrontendNavigation.php create mode 100644 branches/conlite20/conlite/plugins/smarty/cl_plugin.xml create mode 100644 branches/conlite20/conlite/plugins/smarty/classes/class.smarty.backend.php create mode 100644 branches/conlite20/conlite/plugins/smarty/classes/class.smarty.frontend.php create mode 100644 branches/conlite20/conlite/plugins/smarty/classes/class.smarty.wrapper.php create mode 100644 branches/conlite20/conlite/plugins/smarty/includes/config.autoloader.php create mode 100644 branches/conlite20/conlite/plugins/smarty/includes/config.plugin.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/Autoloader.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/Smarty.class.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/SmartyBC.class.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/bootstrap.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/debug.tpl create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/block.textformat.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/function.counter.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/function.cycle.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/function.fetch.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/function.html_checkboxes.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/function.html_image.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/function.html_options.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/function.html_radios.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/function.html_select_date.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/function.html_select_time.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/function.html_table.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/function.mailto.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/function.math.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifier.capitalize.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifier.date_format.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifier.debug_print_var.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifier.escape.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifier.mb_wordwrap.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifier.regex_replace.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifier.replace.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifier.spacify.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifier.truncate.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.cat.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.count_characters.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.count_paragraphs.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.count_sentences.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.count_words.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.default.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.escape.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.from_charset.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.indent.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.lower.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.noprint.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.string_format.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.strip.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.strip_tags.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.to_charset.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.unescape.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.upper.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/modifiercompiler.wordwrap.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/outputfilter.trimwhitespace.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/shared.escape_special_chars.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/shared.literal_compiler_param.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/shared.make_timestamp.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/shared.mb_str_replace.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/shared.mb_unicode.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/plugins/variablefilter.htmlspecialchars.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_cacheresource.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_cacheresource_custom.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_data.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_block.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_append.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_assign.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_block.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_block_child.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_break.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_call.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_capture.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_config_load.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_continue.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_debug.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_eval.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_extends.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_for.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_foreach.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_function.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_if.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_include.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_include_php.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_insert.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_nocache.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_php.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_section.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_while.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_compilebase.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_configfilelexer.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_configfileparser.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_data.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_debug.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_extension_handler.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_append.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_clearassign.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_clearcache.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_configload.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_createdata.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getglobal.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_gettags.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerclass.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerobject.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerresource.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_nocache_insert.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree_code.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree_template.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree_text.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_eval.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_extends.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_file.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_php.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_registered.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_stream.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_string.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_capture.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_template.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_templatebase.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_templatelexer.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_templateparser.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_testinstall.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_undefined.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource_custom.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource_recompiled.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource_uncompiled.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_security.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_cached.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_compiled.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_config.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_resource_base.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_source.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_undefined_variable.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_variable.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smartycompilerexception.php create mode 100644 branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smartyexception.php create mode 100644 branches/conlite20/conlite/plugins/workflow/classes/class.workflow.php create mode 100644 branches/conlite20/conlite/plugins/workflow/classes/class.workflowactions.php create mode 100644 branches/conlite20/conlite/plugins/workflow/classes/class.workflowallocation.php create mode 100644 branches/conlite20/conlite/plugins/workflow/classes/class.workflowartallocation.php create mode 100644 branches/conlite20/conlite/plugins/workflow/classes/class.workflowitems.php create mode 100644 branches/conlite20/conlite/plugins/workflow/classes/class.workflowtasks.php create mode 100644 branches/conlite20/conlite/plugins/workflow/classes/class.workflowusersequence.php create mode 100644 branches/conlite20/conlite/plugins/workflow/cronjobs/advance_workflow.php create mode 100644 branches/conlite20/conlite/plugins/workflow/images/no_verschieben.gif create mode 100644 branches/conlite20/conlite/plugins/workflow/images/nu_verschieben.gif create mode 100644 branches/conlite20/conlite/plugins/workflow/images/workflow.gif create mode 100644 branches/conlite20/conlite/plugins/workflow/images/workflow_alt.gif create mode 100644 branches/conlite20/conlite/plugins/workflow/images/workflow_email_noti.gif create mode 100644 branches/conlite20/conlite/plugins/workflow/images/workflow_erstellen.gif create mode 100644 branches/conlite20/conlite/plugins/workflow/images/workflow_escal_noti.gif create mode 100644 branches/conlite20/conlite/plugins/workflow/images/workflow_step.gif create mode 100644 branches/conlite20/conlite/plugins/workflow/images/workflow_step_delete.gif create mode 100644 branches/conlite20/conlite/plugins/workflow/images/workflow_step_ist_raus.gif create mode 100644 branches/conlite20/conlite/plugins/workflow/images/workflow_step_new.gif create mode 100644 branches/conlite20/conlite/plugins/workflow/images/workflow_user.gif create mode 100644 branches/conlite20/conlite/plugins/workflow/includes/config.plugin.php create mode 100644 branches/conlite20/conlite/plugins/workflow/includes/functions.workflow.php create mode 100644 branches/conlite20/conlite/plugins/workflow/includes/include.workflow_edit.php create mode 100644 branches/conlite20/conlite/plugins/workflow/includes/include.workflow_left_top.php create mode 100644 branches/conlite20/conlite/plugins/workflow/includes/include.workflow_list.php create mode 100644 branches/conlite20/conlite/plugins/workflow/includes/include.workflow_steps.php create mode 100644 branches/conlite20/conlite/plugins/workflow/includes/include.workflow_subnav.php create mode 100644 branches/conlite20/conlite/plugins/workflow/includes/include.workflow_tasks.php create mode 100644 branches/conlite20/conlite/plugins/workflow/locale/de_DE/LC_MESSAGES/workflow.mo create mode 100644 branches/conlite20/conlite/plugins/workflow/locale/de_DE/LC_MESSAGES/workflow.po create mode 100644 branches/conlite20/conlite/plugins/workflow/locale/potfiles.txt create mode 100644 branches/conlite20/conlite/plugins/workflow/locale/workflow.pot create mode 100644 branches/conlite20/conlite/plugins/workflow/templates/template.workflow_steps.html create mode 100644 branches/conlite20/conlite/plugins/workflow/templates/template.workflow_tasks.html create mode 100644 branches/conlite20/conlite/plugins/workflow/xml/lang_de_DE.xml create mode 100644 branches/conlite20/conlite/plugins/workflow/xml/lang_en_EN.xml create mode 100644 branches/conlite20/conlite/plugins/workflow/xml/lang_en_US.xml create mode 100644 branches/conlite20/conlite/scripts/HTMLObj.js.php create mode 100644 branches/conlite20/conlite/scripts/addImageTags.js create mode 100644 branches/conlite20/conlite/scripts/articleObject.js.php create mode 100644 branches/conlite20/conlite/scripts/browserCheck.js create mode 100644 branches/conlite20/conlite/scripts/cfoldingrow.js create mode 100644 branches/conlite20/conlite/scripts/cmsDate.js create mode 100644 branches/conlite20/conlite/scripts/cmsFileList.js create mode 100644 branches/conlite20/conlite/scripts/cmsTeaser.js create mode 100644 branches/conlite20/conlite/scripts/conFrameResize.js create mode 100644 branches/conlite20/conlite/scripts/con_tiny.js create mode 100644 branches/conlite20/conlite/scripts/contenidoConfig.js create mode 100644 branches/conlite20/conlite/scripts/contextMenu.remove.js create mode 100644 branches/conlite20/conlite/scripts/expandCollapse.js create mode 100644 branches/conlite20/conlite/scripts/general.js create mode 100644 branches/conlite20/conlite/scripts/group_association.js create mode 100644 branches/conlite20/conlite/scripts/header.js create mode 100644 branches/conlite20/conlite/scripts/help.js.php create mode 100644 branches/conlite20/conlite/scripts/iZoom.js.php create mode 100644 branches/conlite20/conlite/scripts/index.php create mode 100644 branches/conlite20/conlite/scripts/infoBox.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/i18n/jquery.ui.colorpicker-de.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/i18n/jquery.ui.colorpicker-el.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/i18n/jquery.ui.colorpicker-en-GB.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/i18n/jquery.ui.colorpicker-en-US.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/i18n/jquery.ui.colorpicker-en.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/i18n/jquery.ui.colorpicker-fr.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/i18n/jquery.ui.colorpicker-nl.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/i18n/jquery.ui.colorpicker-pt-BR.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/i18n/jquery.ui.colorpicker-ru.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/images/128/bar-alpha.png create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/images/128/bar.png create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/images/128/map.png create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/images/bar-alpha.png create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/images/bar-opacity.png create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/images/bar-pointer.png create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/images/bar.png create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/images/map-opacity.png create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/images/map-pointer.png create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/images/map.png create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/images/preview-opacity.png create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/images/ui-colorpicker.png create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/jquery.colorpicker.css create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/jquery.colorpicker.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/parsers/jquery.ui.colorpicker-cmyk-parser.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/parsers/jquery.ui.colorpicker-cmyk-percentage-parser.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/parts/jquery.ui.colorpicker-memory.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/parts/jquery.ui.colorpicker-rgbslider.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/parts/jquery.ui.colorpicker-swatchesswitcher.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/swatches/jquery.ui.colorpicker-crayola.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/swatches/jquery.ui.colorpicker-pantone.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/swatches/jquery.ui.colorpicker-ral-classic.js create mode 100644 branches/conlite20/conlite/scripts/jquery/colorpicker/swatches/jquery.ui.colorpicker-x11.js create mode 100644 branches/conlite20/conlite/scripts/jquery/jquery-migrate-1.2.1.min.js create mode 100644 branches/conlite20/conlite/scripts/jquery/jquery-ui.js create mode 100755 branches/conlite20/conlite/scripts/jquery/jquery-ui.old.js create mode 100644 branches/conlite20/conlite/scripts/jquery/jquery.js create mode 100755 branches/conlite20/conlite/scripts/jquery/jquery.old.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/calendar-contenido.css create mode 100644 branches/conlite20/conlite/scripts/jscalendar/calendar-setup.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/calendar.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-af.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-al.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-bg.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-big5-utf8.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-big5.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-br.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-ca.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-cs-utf8.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-cs-win.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-da.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-de.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-du.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-el.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-en.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-es.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-fi.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-fr.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-he-utf8.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-hu.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-it.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-jp.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-ko-utf8.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-ko.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-lt-utf8.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-lt.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-lv.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-nl.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-no.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-pl-utf8.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-pl.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-pt.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-ro.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-ru.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-ru_win_.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-si.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-sk.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-sp.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-sv.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-tr.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/calendar-zh.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/lang/cn_utf8.js create mode 100644 branches/conlite20/conlite/scripts/jscalendar/menuarrow.gif create mode 100644 branches/conlite20/conlite/scripts/jscalendar/menuarrow2.gif create mode 100644 branches/conlite20/conlite/scripts/langref.php create mode 100644 branches/conlite20/conlite/scripts/md5.js create mode 100644 branches/conlite20/conlite/scripts/messageBox.js.php create mode 100644 branches/conlite20/conlite/scripts/parameterCollector.js create mode 100644 branches/conlite20/conlite/scripts/rights.js.php create mode 100644 branches/conlite20/conlite/scripts/rowMark.js create mode 100644 branches/conlite20/conlite/scripts/setPager.js create mode 100644 branches/conlite20/conlite/scripts/str_overview.js create mode 100644 branches/conlite20/conlite/scripts/subnav.js create mode 100644 branches/conlite20/conlite/scripts/tip_balloon.js create mode 100644 branches/conlite20/conlite/scripts/tip_balloon/b.gif create mode 100644 branches/conlite20/conlite/scripts/tip_balloon/background.gif create mode 100644 branches/conlite20/conlite/scripts/tip_balloon/l.gif create mode 100644 branches/conlite20/conlite/scripts/tip_balloon/lb.gif create mode 100644 branches/conlite20/conlite/scripts/tip_balloon/lt.gif create mode 100644 branches/conlite20/conlite/scripts/tip_balloon/r.gif create mode 100644 branches/conlite20/conlite/scripts/tip_balloon/rb.gif create mode 100644 branches/conlite20/conlite/scripts/tip_balloon/rt.gif create mode 100644 branches/conlite20/conlite/scripts/tip_balloon/stemb.gif create mode 100644 branches/conlite20/conlite/scripts/tip_balloon/stemt.gif create mode 100644 branches/conlite20/conlite/scripts/tip_balloon/t.gif create mode 100644 branches/conlite20/conlite/scripts/wz_tooltip.js create mode 100644 branches/conlite20/conlite/styles/cms_filelist.css create mode 100644 branches/conlite20/conlite/styles/cms_teaser.css create mode 100644 branches/conlite20/conlite/styles/conlite.css create mode 100644 branches/conlite20/conlite/styles/contenido.css create mode 100644 branches/conlite20/conlite/styles/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 branches/conlite20/conlite/styles/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 branches/conlite20/conlite/styles/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 branches/conlite20/conlite/styles/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 branches/conlite20/conlite/styles/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 branches/conlite20/conlite/styles/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 branches/conlite20/conlite/styles/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 branches/conlite20/conlite/styles/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 branches/conlite20/conlite/styles/images/ui-icons_222222_256x240.png create mode 100644 branches/conlite20/conlite/styles/images/ui-icons_2e83ff_256x240.png create mode 100644 branches/conlite20/conlite/styles/images/ui-icons_454545_256x240.png create mode 100644 branches/conlite20/conlite/styles/images/ui-icons_888888_256x240.png create mode 100644 branches/conlite20/conlite/styles/images/ui-icons_cd0a0a_256x240.png create mode 100644 branches/conlite20/conlite/styles/index.php create mode 100644 branches/conlite20/conlite/styles/inuse.css create mode 100644 branches/conlite20/conlite/styles/jquery-ui.css create mode 100644 branches/conlite20/conlite/styles/str_overview.css create mode 100644 branches/conlite20/conlite/styles/tip_balloon.css create mode 100644 branches/conlite20/conlite/subnav.php create mode 100644 branches/conlite20/conlite/temp/.keep create mode 100644 branches/conlite20/conlite/temp/deprecated.txt create mode 100644 branches/conlite20/conlite/templates/index.php create mode 100644 branches/conlite20/conlite/templates/standard/filler.html create mode 100644 branches/conlite20/conlite/templates/standard/frameset.html create mode 100644 branches/conlite20/conlite/templates/standard/frameset_content.html create mode 100644 branches/conlite20/conlite/templates/standard/frameset_content_left.html create mode 100644 branches/conlite20/conlite/templates/standard/frameset_content_right.html create mode 100644 branches/conlite20/conlite/templates/standard/frameset_menuless_content.html create mode 100644 branches/conlite20/conlite/templates/standard/generic_list.html create mode 100644 branches/conlite20/conlite/templates/standard/header.html create mode 100644 branches/conlite20/conlite/templates/standard/html5/template.generic_page.html create mode 100644 branches/conlite20/conlite/templates/standard/index.php create mode 100644 branches/conlite20/conlite/templates/standard/submenu.html create mode 100644 branches/conlite20/conlite/templates/standard/template.admin_frontend.html create mode 100644 branches/conlite20/conlite/templates/standard/template.backend_search_results.html create mode 100644 branches/conlite20/conlite/templates/standard/template.blank.html create mode 100644 branches/conlite20/conlite/templates/standard/template.client_edit.html create mode 100644 branches/conlite20/conlite/templates/standard/template.client_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.client_menu.html create mode 100644 branches/conlite20/conlite/templates/standard/template.client_subnav.html create mode 100644 branches/conlite20/conlite/templates/standard/template.cms_filelist_dirlistitem.html create mode 100644 branches/conlite20/conlite/templates/standard/template.cms_filelist_edit.html create mode 100644 branches/conlite20/conlite/templates/standard/template.cms_filelist_metadata_limititem.html create mode 100644 branches/conlite20/conlite/templates/standard/template.cms_teaser_edit.html create mode 100644 branches/conlite20/conlite/templates/standard/template.con_art_overview.html create mode 100644 branches/conlite20/conlite/templates/standard/template.con_edit_form.html create mode 100644 branches/conlite20/conlite/templates/standard/template.con_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.con_str_overview.html create mode 100644 branches/conlite20/conlite/templates/standard/template.con_str_overview.list.html create mode 100644 branches/conlite20/conlite/templates/standard/template.con_subnav.html create mode 100644 branches/conlite20/conlite/templates/standard/template.con_subnav_noleft.html create mode 100644 branches/conlite20/conlite/templates/standard/template.deco.html create mode 100644 branches/conlite20/conlite/templates/standard/template.default_subnav.html create mode 100644 branches/conlite20/conlite/templates/standard/template.file_subnav.html create mode 100644 branches/conlite20/conlite/templates/standard/template.files_overview.html create mode 100644 branches/conlite20/conlite/templates/standard/template.generic_form.html create mode 100644 branches/conlite20/conlite/templates/standard/template.generic_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.generic_list.html create mode 100644 branches/conlite20/conlite/templates/standard/template.generic_list_row.html create mode 100644 branches/conlite20/conlite/templates/standard/template.generic_menu.html create mode 100644 branches/conlite20/conlite/templates/standard/template.generic_page.html create mode 100644 branches/conlite20/conlite/templates/standard/template.generic_table_form.html create mode 100644 branches/conlite20/conlite/templates/standard/template.grouprights_create.html create mode 100644 branches/conlite20/conlite/templates/standard/template.grouprights_details.html create mode 100644 branches/conlite20/conlite/templates/standard/template.grouprights_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.grouprights_memberlist.html create mode 100644 branches/conlite20/conlite/templates/standard/template.grouprights_memberselect.html create mode 100644 branches/conlite20/conlite/templates/standard/template.grouprights_menu.html create mode 100644 branches/conlite20/conlite/templates/standard/template.grouprights_overview.html create mode 100644 branches/conlite20/conlite/templates/standard/template.html_tpl_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.info.html create mode 100644 branches/conlite20/conlite/templates/standard/template.inuse_lay_mod.html create mode 100644 branches/conlite20/conlite/templates/standard/template.inuse_tpl.html create mode 100644 branches/conlite20/conlite/templates/standard/template.js_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.lang_edit.html create mode 100644 branches/conlite20/conlite/templates/standard/template.lang_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.lang_overview.html create mode 100644 branches/conlite20/conlite/templates/standard/template.lay_edit_form.html create mode 100644 branches/conlite20/conlite/templates/standard/template.lay_overview.html create mode 100644 branches/conlite20/conlite/templates/standard/template.left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.left_top_blank.html create mode 100644 branches/conlite20/conlite/templates/standard/template.log_main.html create mode 100644 branches/conlite20/conlite/templates/standard/template.log_menu.html create mode 100644 branches/conlite20/conlite/templates/standard/template.mod_edit_form.html create mode 100644 branches/conlite20/conlite/templates/standard/template.mod_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.mycontenido_lastarticles.html create mode 100644 branches/conlite20/conlite/templates/standard/template.mycontenido_settings.html create mode 100644 branches/conlite20/conlite/templates/standard/template.mycontenido_start.html create mode 100644 branches/conlite20/conlite/templates/standard/template.mycontenido_subnav.html create mode 100644 branches/conlite20/conlite/templates/standard/template.newsletter_edit.html create mode 100644 branches/conlite20/conlite/templates/standard/template.newsletter_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.newsletter_menu.html create mode 100644 branches/conlite20/conlite/templates/standard/template.recipient_edit.html create mode 100644 branches/conlite20/conlite/templates/standard/template.recipient_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.recipient_menu.html create mode 100644 branches/conlite20/conlite/templates/standard/template.request_password.html create mode 100644 branches/conlite20/conlite/templates/standard/template.right_top_blank.html create mode 100644 branches/conlite20/conlite/templates/standard/template.rights_create.html create mode 100644 branches/conlite20/conlite/templates/standard/template.rights_details.html create mode 100644 branches/conlite20/conlite/templates/standard/template.rights_inc.html create mode 100644 branches/conlite20/conlite/templates/standard/template.rights_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.rights_menu.html create mode 100644 branches/conlite20/conlite/templates/standard/template.rights_overview.html create mode 100644 branches/conlite20/conlite/templates/standard/template.select.html create mode 100644 branches/conlite20/conlite/templates/standard/template.stat_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.stat_menu.html create mode 100644 branches/conlite20/conlite/templates/standard/template.stat_overview.html create mode 100644 branches/conlite20/conlite/templates/standard/template.stat_subnav.html create mode 100644 branches/conlite20/conlite/templates/standard/template.stat_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.str_overview.html create mode 100644 branches/conlite20/conlite/templates/standard/template.style_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.subnav.html create mode 100644 branches/conlite20/conlite/templates/standard/template.subnav_blank.html create mode 100644 branches/conlite20/conlite/templates/standard/template.subnav_noleft.html create mode 100644 branches/conlite20/conlite/templates/standard/template.symbolhelp.html create mode 100644 branches/conlite20/conlite/templates/standard/template.system_purge.html create mode 100644 branches/conlite20/conlite/templates/standard/template.system_subnav.html create mode 100644 branches/conlite20/conlite/templates/standard/template.system_variables.html create mode 100644 branches/conlite20/conlite/templates/standard/template.tpl_edit_form.html create mode 100644 branches/conlite20/conlite/templates/standard/template.tpl_overview.html create mode 100644 branches/conlite20/conlite/templates/standard/template.tplcfg_edit_form.html create mode 100644 branches/conlite20/conlite/templates/standard/template.upl_dirs_overview.html create mode 100644 branches/conlite20/conlite/templates/standard/template.upl_files_overview.html create mode 100644 branches/conlite20/conlite/templates/standard/template.upl_left_top.html create mode 100644 branches/conlite20/conlite/templates/standard/template.welcome.html create mode 100644 branches/conlite20/conlite/templates/standard/template.welcome_update.html create mode 100644 branches/conlite20/conlite/templates/standard/white.html create mode 100644 branches/conlite20/conlite/templates/standard/widgets/template.widgets.left_top.html create mode 100644 branches/conlite20/conlite/tools/create_autoloader_cfg.php create mode 100644 branches/conlite20/conlite/tools/mpAutoloaderClassMap/mpClassMapFileCreator.php create mode 100644 branches/conlite20/conlite/tools/mpAutoloaderClassMap/mpClassMapFileCreatorContenido.php create mode 100644 branches/conlite20/conlite/tools/mpAutoloaderClassMap/mpClassTypeFinder.php create mode 100644 branches/conlite20/conlite/tools/phpcompatinfo.php create mode 100644 branches/conlite20/conlite/xml/conrepo.xsd create mode 100644 branches/conlite20/conlite/xml/index.php create mode 100644 branches/conlite20/conlite/xml/lang_de_DE.xml create mode 100644 branches/conlite20/conlite/xml/lang_en_US.xml create mode 100644 branches/conlite20/conlite/xml/lang_fr_FR.xml create mode 100644 branches/conlite20/data/backup/index.php create mode 100644 branches/conlite20/data/cache/index.php create mode 100644 branches/conlite20/data/config/production/cfg_sql.inc.php create mode 100644 branches/conlite20/data/config/production/config.autoloader.php create mode 100644 branches/conlite20/data/config/production/config.chains.php create mode 100644 branches/conlite20/data/config/production/config.colors.php create mode 100644 branches/conlite20/data/config/production/config.http_check.php create mode 100644 branches/conlite20/data/config/production/config.misc.php create mode 100644 branches/conlite20/data/config/production/config.path.php create mode 100644 branches/conlite20/data/config/production/config.templates.php create mode 100644 branches/conlite20/data/config/production/index.php create mode 100644 branches/conlite20/data/cronlog/crontab.txt create mode 100644 branches/conlite20/data/cronlog/index.php create mode 100644 branches/conlite20/data/logs/index.php create mode 100644 branches/conlite20/data/temp/index.php create mode 100644 branches/conlite20/pear/Cache/Cache.php create mode 100644 branches/conlite20/pear/Cache/Container.php create mode 100644 branches/conlite20/pear/Cache/Container/file.php create mode 100644 branches/conlite20/pear/Cache/Error.php create mode 100644 branches/conlite20/pear/Cache/Lite.php create mode 100644 branches/conlite20/pear/Cache/Output.php create mode 100644 branches/conlite20/pear/File/Archive.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/And.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/Current.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/Custom.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/Duplicate.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/Ereg.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/Eregi.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/Extension.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/False.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/Index.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/MIME.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/MaxDepth.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/MinSize.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/MinTime.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/Not.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/Or.php create mode 100644 branches/conlite20/pear/File/Archive/Predicate/True.php create mode 100644 branches/conlite20/pear/File/Archive/Reader.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Ar.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Archive.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Bzip2.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Cache.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/ChangeName.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/ChangeName/AddDirectory.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/ChangeName/Callback.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/ChangeName/Directory.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Concat.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Directory.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/File.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Filter.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Gzip.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Memory.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/MimeList.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Multi.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Relay.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Select.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Tar.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Uncompress.php create mode 100644 branches/conlite20/pear/File/Archive/Reader/Zip.php create mode 100644 branches/conlite20/pear/File/Archive/Writer.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/AddBaseName.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/Ar.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/Archive.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/Bzip2.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/Files.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/Gzip.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/Mail.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/Memory.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/MemoryArchive.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/Multi.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/Output.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/Tar.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/UniqueAppender.php create mode 100644 branches/conlite20/pear/File/Archive/Writer/Zip.php create mode 100644 branches/conlite20/pear/File/Iterator.php create mode 100644 branches/conlite20/pear/File/Iterator/Factory.php create mode 100644 branches/conlite20/pear/HTML/Common.php create mode 100644 branches/conlite20/pear/HTML/Common2.php create mode 100644 branches/conlite20/pear/Log.php create mode 100644 branches/conlite20/pear/Log/composite.php create mode 100644 branches/conlite20/pear/Log/console.php create mode 100644 branches/conlite20/pear/Log/display.php create mode 100644 branches/conlite20/pear/Log/error_log.php create mode 100644 branches/conlite20/pear/Log/file.php create mode 100644 branches/conlite20/pear/Log/mail.php create mode 100644 branches/conlite20/pear/Log/mcal.php create mode 100644 branches/conlite20/pear/Log/null.php create mode 100644 branches/conlite20/pear/Log/observer.php create mode 100644 branches/conlite20/pear/Log/sql.php create mode 100644 branches/conlite20/pear/Log/sqlite.php create mode 100644 branches/conlite20/pear/Log/syslog.php create mode 100644 branches/conlite20/pear/Log/win.php create mode 100644 branches/conlite20/pear/MIME/Type.php create mode 100644 branches/conlite20/pear/MIME/Type/Extension.php create mode 100644 branches/conlite20/pear/MIME/Type/Parameter.php create mode 100644 branches/conlite20/pear/Net/IDNA.php create mode 100644 branches/conlite20/pear/Net/IDNA/php4.php create mode 100644 branches/conlite20/pear/Net/IDNA/php5.php create mode 100644 branches/conlite20/pear/Net/UserAgent/Detect.php create mode 100644 branches/conlite20/pear/OLE/OLE.php create mode 100644 branches/conlite20/pear/OLE/PPS.php create mode 100644 branches/conlite20/pear/OLE/PPS/File.php create mode 100644 branches/conlite20/pear/OLE/PPS/Root.php create mode 100644 branches/conlite20/pear/OS/Guess.php create mode 100644 branches/conlite20/pear/PEAR.php create mode 100644 branches/conlite20/pear/PEAR/Autoloader.php create mode 100644 branches/conlite20/pear/PEAR/Builder.php create mode 100644 branches/conlite20/pear/PEAR/Command.php create mode 100644 branches/conlite20/pear/PEAR/Command/Auth.php create mode 100644 branches/conlite20/pear/PEAR/Command/Build.php create mode 100644 branches/conlite20/pear/PEAR/Command/Common.php create mode 100644 branches/conlite20/pear/PEAR/Command/Config.php create mode 100644 branches/conlite20/pear/PEAR/Command/Install.php create mode 100644 branches/conlite20/pear/PEAR/Command/Mirror.php create mode 100644 branches/conlite20/pear/PEAR/Command/Package.php create mode 100644 branches/conlite20/pear/PEAR/Command/Registry.php create mode 100644 branches/conlite20/pear/PEAR/Command/Remote.php create mode 100644 branches/conlite20/pear/PEAR/Common.php create mode 100644 branches/conlite20/pear/PEAR/Config.php create mode 100644 branches/conlite20/pear/PEAR/Dependency.php create mode 100644 branches/conlite20/pear/PEAR/Frontend/CLI.php create mode 100644 branches/conlite20/pear/PEAR/Installer.php create mode 100644 branches/conlite20/pear/PEAR/Packager.php create mode 100644 branches/conlite20/pear/PEAR/Registry.php create mode 100644 branches/conlite20/pear/PEAR/Remote.php create mode 100644 branches/conlite20/pear/README.contenido create mode 100644 branches/conlite20/pear/Spreadsheet/Excel/Writer.php create mode 100644 branches/conlite20/pear/Spreadsheet/Excel/Writer/BIFFwriter.php create mode 100644 branches/conlite20/pear/Spreadsheet/Excel/Writer/Format.php create mode 100644 branches/conlite20/pear/Spreadsheet/Excel/Writer/Parser.php create mode 100644 branches/conlite20/pear/Spreadsheet/Excel/Writer/Validator.php create mode 100644 branches/conlite20/pear/Spreadsheet/Excel/Writer/Workbook.php create mode 100644 branches/conlite20/pear/Spreadsheet/Excel/Writer/Worksheet.php create mode 100644 branches/conlite20/pear/System.php create mode 100644 branches/conlite20/pear/XML/Parser.php create mode 100644 branches/conlite20/pear/XML/Parser2.php create mode 100644 branches/conlite20/pear/XML/Parser2/Simple.php create mode 100644 branches/conlite20/pear/XML/RPC.php create mode 100644 branches/conlite20/pear/XML/RPC/Dump.php create mode 100644 branches/conlite20/pear/XML/RPC/Server.php create mode 100644 branches/conlite20/pear/XML/RSS.php create mode 100755 branches/conlite20/pear/XML/Serializer.php create mode 100644 branches/conlite20/pear/XML/Tree.php create mode 100644 branches/conlite20/pear/XML/Tree/Node.php create mode 100755 branches/conlite20/pear/XML/Unserializer.php create mode 100644 branches/conlite20/pear/package.dtd create mode 100644 branches/conlite20/pear/package.xml create mode 100644 branches/conlite20/pear/scripts/pear.bat create mode 100755 branches/conlite20/pear/scripts/pear.sh create mode 100644 branches/conlite20/pear/scripts/pearcmd.php create mode 100644 branches/conlite20/pear/template.spec create mode 100644 branches/conlite20/setup/data/.directory create mode 100644 branches/conlite20/setup/data/base.txt create mode 100644 branches/conlite20/setup/data/base/base_actions1.sql create mode 100644 branches/conlite20/setup/data/base/base_area1.sql create mode 100644 branches/conlite20/setup/data/base/base_chartable1.sql create mode 100644 branches/conlite20/setup/data/base/base_chartable2.sql create mode 100644 branches/conlite20/setup/data/base/base_chartable3.sql create mode 100644 branches/conlite20/setup/data/base/base_chartable4.sql create mode 100644 branches/conlite20/setup/data/base/base_chartable5.sql create mode 100644 branches/conlite20/setup/data/base/base_chartable6.sql create mode 100644 branches/conlite20/setup/data/base/base_chartable7.sql create mode 100644 branches/conlite20/setup/data/base/base_files1.sql create mode 100644 branches/conlite20/setup/data/base/base_files2.sql create mode 100644 branches/conlite20/setup/data/base/base_framefiles1.sql create mode 100644 branches/conlite20/setup/data/base/base_framefiles2.sql create mode 100644 branches/conlite20/setup/data/base/base_meta_type1.sql create mode 100644 branches/conlite20/setup/data/base/base_misc1.sql create mode 100644 branches/conlite20/setup/data/base/base_nav_main1.sql create mode 100644 branches/conlite20/setup/data/base/base_nav_sub1.sql create mode 100644 branches/conlite20/setup/data/base/base_type1.sql create mode 100644 branches/conlite20/setup/data/client.txt create mode 100644 branches/conlite20/setup/data/client/client1.sql create mode 100644 branches/conlite20/setup/data/examples.txt create mode 100644 branches/conlite20/setup/data/examples/examples_articles1.sql create mode 100644 branches/conlite20/setup/data/examples/examples_categories1.sql create mode 100644 branches/conlite20/setup/data/examples/examples_container1.sql create mode 100644 branches/conlite20/setup/data/examples/examples_content1.sql create mode 100644 branches/conlite20/setup/data/examples/examples_misc1.sql create mode 100644 branches/conlite20/setup/data/plugin_content_allocation.txt create mode 100644 branches/conlite20/setup/data/plugin_mod_rewrite.txt create mode 100644 branches/conlite20/setup/data/plugins/plugins_content_allocation.sql create mode 100644 branches/conlite20/setup/data/plugins/plugins_mod_rewrite.sql create mode 100644 branches/conlite20/setup/data/standard.txt create mode 100644 branches/conlite20/setup/data/standard/standard_modules1.sql create mode 100644 branches/conlite20/setup/data/standard/standard_modules_translations1.sql create mode 100644 branches/conlite20/setup/data/sysadmin.txt create mode 100644 branches/conlite20/setup/data/sysadmin/sysadmin1.sql create mode 100644 branches/conlite20/setup/data/tables.txt create mode 100644 branches/conlite20/setup/data/tables_pi.txt create mode 100644 branches/conlite20/setup/dbupdate.php create mode 100644 branches/conlite20/setup/images/cl-logo.gif create mode 100644 branches/conlite20/setup/images/controls/arrow_closed.png create mode 100644 branches/conlite20/setup/images/controls/arrow_open.png create mode 100644 branches/conlite20/setup/images/controls/back.gif create mode 100644 branches/conlite20/setup/images/controls/pbend.gif create mode 100644 branches/conlite20/setup/images/controls/up_over.png create mode 100644 branches/conlite20/setup/images/icons/error.png create mode 100644 branches/conlite20/setup/images/icons/info.png create mode 100644 branches/conlite20/setup/images/icons/warning.png create mode 100644 branches/conlite20/setup/images/spacer.gif create mode 100644 branches/conlite20/setup/index.php create mode 100644 branches/conlite20/setup/lib/class.setupcontrols.php create mode 100644 branches/conlite20/setup/lib/class.setupmask.php create mode 100644 branches/conlite20/setup/lib/class.template.php create mode 100644 branches/conlite20/setup/lib/defines.php create mode 100644 branches/conlite20/setup/lib/functions.environment.php create mode 100644 branches/conlite20/setup/lib/functions.filesystem.php create mode 100644 branches/conlite20/setup/lib/functions.libraries.php create mode 100644 branches/conlite20/setup/lib/functions.mysql.php create mode 100644 branches/conlite20/setup/lib/functions.phpinfo.php create mode 100644 branches/conlite20/setup/lib/functions.safe_mode.php create mode 100644 branches/conlite20/setup/lib/functions.setup.php create mode 100644 branches/conlite20/setup/lib/functions.sql.php create mode 100644 branches/conlite20/setup/lib/functions.system.php create mode 100644 branches/conlite20/setup/lib/startup.php create mode 100644 branches/conlite20/setup/locale/de_DE/LC_MESSAGES/setup.mo create mode 100644 branches/conlite20/setup/locale/de_DE/LC_MESSAGES/setup.po create mode 100644 branches/conlite20/setup/locale/potfiles.txt create mode 100644 branches/conlite20/setup/locale/setup.pot create mode 100644 branches/conlite20/setup/makeconfig.php create mode 100644 branches/conlite20/setup/script/pluginInfo.js create mode 100644 branches/conlite20/setup/steps/forms/additionalplugins.php create mode 100644 branches/conlite20/setup/steps/forms/clientadjust.php create mode 100644 branches/conlite20/setup/steps/forms/clientmode.php create mode 100644 branches/conlite20/setup/steps/forms/configmode.php create mode 100644 branches/conlite20/setup/steps/forms/installer.php create mode 100644 branches/conlite20/setup/steps/forms/pathinfo.php create mode 100644 branches/conlite20/setup/steps/forms/setupresults.php create mode 100644 branches/conlite20/setup/steps/forms/setupsummary.php create mode 100644 branches/conlite20/setup/steps/forms/systemdata.php create mode 100644 branches/conlite20/setup/steps/forms/systemtest.php create mode 100644 branches/conlite20/setup/steps/languagechooser.php create mode 100644 branches/conlite20/setup/steps/migration/domigration.php create mode 100644 branches/conlite20/setup/steps/migration/step1.php create mode 100644 branches/conlite20/setup/steps/migration/step2.php create mode 100644 branches/conlite20/setup/steps/migration/step3.php create mode 100644 branches/conlite20/setup/steps/migration/step4.php create mode 100644 branches/conlite20/setup/steps/migration/step5.php create mode 100644 branches/conlite20/setup/steps/migration/step6.php create mode 100644 branches/conlite20/setup/steps/migration/step7.php create mode 100644 branches/conlite20/setup/steps/migration/step8.php create mode 100644 branches/conlite20/setup/steps/notinstallable.php create mode 100644 branches/conlite20/setup/steps/setup/doinstall.php create mode 100644 branches/conlite20/setup/steps/setup/step1.php create mode 100644 branches/conlite20/setup/steps/setup/step2.php create mode 100644 branches/conlite20/setup/steps/setup/step3.php create mode 100644 branches/conlite20/setup/steps/setup/step4.php create mode 100644 branches/conlite20/setup/steps/setup/step5.php create mode 100644 branches/conlite20/setup/steps/setup/step6.php create mode 100644 branches/conlite20/setup/steps/setup/step7.php create mode 100644 branches/conlite20/setup/steps/setup/step8.php create mode 100644 branches/conlite20/setup/steps/setuptype.php create mode 100644 branches/conlite20/setup/steps/upgrade/doupgrade.php create mode 100644 branches/conlite20/setup/steps/upgrade/step1.php create mode 100644 branches/conlite20/setup/steps/upgrade/step2.php create mode 100644 branches/conlite20/setup/steps/upgrade/step3.php create mode 100644 branches/conlite20/setup/steps/upgrade/step4.php create mode 100644 branches/conlite20/setup/steps/upgrade/step5.php create mode 100644 branches/conlite20/setup/steps/upgrade/step6.php create mode 100644 branches/conlite20/setup/steps/upgrade/step7.php create mode 100644 branches/conlite20/setup/style/setup.css create mode 100644 branches/conlite20/setup/templates/cfoldablerow.tpl create mode 100644 branches/conlite20/setup/templates/config.php.tpl create mode 100644 branches/conlite20/setup/templates/crow.tpl create mode 100644 branches/conlite20/setup/templates/languagechooser.tpl create mode 100644 branches/conlite20/setup/templates/notinstallable.tpl create mode 100644 branches/conlite20/setup/templates/setup.tpl create mode 100644 branches/conlite20/setup/templates/setup/forms/additionalplugins.tpl create mode 100644 branches/conlite20/setup/templates/setup/forms/clientmode.tpl create mode 100644 branches/conlite20/setup/templates/setup/forms/configmode.tpl create mode 100644 branches/conlite20/setup/templates/setup/forms/configmodewopass.tpl create mode 100644 branches/conlite20/setup/templates/setup/forms/databasedata.tpl create mode 100644 branches/conlite20/setup/templates/setup/forms/installer.tpl create mode 100644 branches/conlite20/setup/templates/setup/forms/pathinfo.tpl create mode 100644 branches/conlite20/setup/templates/setup/forms/setupresults.tpl create mode 100644 branches/conlite20/setup/templates/setup/forms/setupresultsfail.tpl create mode 100644 branches/conlite20/setup/templates/setup/forms/setupsummary.tpl create mode 100644 branches/conlite20/setup/templates/setup/forms/systemdata.tpl create mode 100644 branches/conlite20/setup/templates/setup/forms/systemtest.tpl create mode 100644 branches/conlite20/setup/templates/setuptype.tpl diff --git a/branches/conlite20/LIZENZ.txt b/branches/conlite20/LIZENZ.txt new file mode 100644 index 0000000..c4e6dab --- /dev/null +++ b/branches/conlite20/LIZENZ.txt @@ -0,0 +1,293 @@ +Contenido is written and distributed under the GNU General Public License which +means that its source code is freely-distributed and available to the general +public. + + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +675 Mass Ave, Cambridge, MA 02139, 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 Library 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 + +Contenido is a Content Management System based on PHP. +Copyright (C) 2000-2008 four for business AG. + +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., 675 Mass Ave, Cambridge, MA 02139, USA. + +Contenido, versions 0.9-4.6 and higher, +Copyright (C) 2000-2008 by four for business AG. + +Contenido comes with ABSOLUTELY NO WARRANTY. + +four for business AG +Nordring 82 B +D-63067 Offenbach am Main +Germany +E-Mail: info@4fb.de +Web: http://www.4fb.de diff --git a/branches/conlite20/README_.txt b/branches/conlite20/README_.txt new file mode 100644 index 0000000..2d8579d --- /dev/null +++ b/branches/conlite20/README_.txt @@ -0,0 +1,78 @@ +$Id: README_.txt 323 2015-05-28 12:02:34Z oldperl $ +---------------------------------------------------------------------------------------------------- +This is the readme file for ConLite 2.0 + +Any help you need you may find by visiting the following links. + +CL-Portal http//conlite.org +CL-Forum http://forum.conlite.org +CL-Bugtracker http://bugs.conlite.org +CL-API-Doc http://conlite.conrepo.org/api/4.8.16CL + +!!! Attention !!! +We tried to fix all known bugs of 4.8.15 and earlier but cannot give any garanties for that. So use +it on your own risk. If you find any bug or have any idea to enhance ConLite, feel free to visit our +bugtracker and register at http://bugs.conlite.org +Any help and ideas are welcome :) + +** Mini FAQ ** + +What is ConLite (-Edition) of CONTENIDO? + +CL (short for ConLite) is dedicated to close the gap between CONTENIDO 4.8.15 and the version 4.9. +In downloadable 4.8.20 (and former 4.8.15) are still a lot of bugs and some missing feautures and +enhancements so one cannot use the version without problems. Our goal is to give you a bugfixed and +really stable version of CONTENIDO till the 4.9 is stable. By the way, there are still a lot of big sides +build with 4.8.x out there where upgrading to 4.9.x is not possible or cost a lot of money. + +Why i have to use ConLite? + +You don't have to, but feel free to do it. ConLite will show you an easier way to upgrade to CONTENIDO +4.9. The new version of CONTENIDO will have a lot of changes, so you have to do a lot of work +with modules or custom plugins to adapt them to the new version. That's not what ConLite does nor will +do in the future. ConLite will do changes step by step, or better version by version to adapt your +4.8.15 or higher installation to work with the new 4.9 of CONTENIDO. And ConLite will try to give you a +stable and bugfixed CONTENIDO 4.8.x in the future. + +Who are the people behind ConLite? + +The Team behind the CL-version are some well known guys from CONTENIDO-forum, working since many years with +and within CONTENIDO core or coding modules and plugins for CONTENIDO. +And we love CONTENIDO :) + + +** Copyright ** + +The copyright for the code of CONTENIDO still remains to 4fb and the named coders for all codes coming +from 4.8.15 and/or from svn-repository of CONTENDIO. +All ads, enhancements or new parts, coded by the CL-Team are copyright by their named coders or +by CL-Team and conrepo.org. + + +** Know Bugs ** +FS#25 - Collision with pre-installed AMR after Migration + !!! Attention !!! + If you want to upgrade with an installed AMR-plugin, uninstall AMR before upgrade. + We will include a fix for that in one of the next versions of CL + + +** History / Changelog ** + +ConLite 1.0 + +CONTENIDO 4.8.16 CL + 20 Bug Report genericdb: urlencode() expects parameter 1 to be string ... + 16 Enhancement RSS-Reader austauschen/überarbeiten + 31 Optimization Test CL installation with newest PHP and SQL on XAMPP + 3 Bug Report Genericdb caching not working + 37 Bug Report Upgrade: valid_from and valid_to fields are set to NULL + 33 Bug Report Missing include.subnav_blank.php + 22 Bug Report Modul xhtml which is not choosable in modularea + 10 Optimization Generate API-Doc + 34 Bug Report Error when searching article with no criteria + 24 Bug Report No reset of subnavigation if a layout is deleted + 15 Optimization Add CL readme file + 13 Bug Report FEUser-Plugins valide_to and valide_from saving wrong t ... + 9 Enhancement Check all translations (i18n) + 8 Bug Report adapt genericdb from 4.8.17 CL + 5 Bug Report Buttontranslations missing or wrong \ No newline at end of file diff --git a/branches/conlite20/cms/config.php b/branches/conlite20/cms/config.php new file mode 100644 index 0000000..8918a2a --- /dev/null +++ b/branches/conlite20/cms/config.php @@ -0,0 +1,52 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * + * + * {@internal + * created unknown + * modified 2008-07-03, bilal arslan, added security fix + * + * $Id: config.php 450 2016-07-20 11:11:12Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +// Relative path to contenido directory, for all inclusions, in most cases: "../contenido/" +$contenido_path = "../conlite/"; + +// If language isn't specified, set this client and language (ID) +$load_lang = "1"; +$load_client = "1"; + +/* Various debugging options */ +$frontend_debug["container_display"] = false; +$frontend_debug["module_display"] = false; +$frontend_debug["module_timing"] = false; +$frontend_debug["module_timing_summary"]= false; + +/* Set to 1 to brute-force module regeneration */ +$force = 0; +?> diff --git a/branches/conlite20/cms/css/basic-style.css b/branches/conlite20/cms/css/basic-style.css new file mode 100644 index 0000000..a2c9e8b --- /dev/null +++ b/branches/conlite20/cms/css/basic-style.css @@ -0,0 +1,523 @@ +/* +Simple Responsive Template v 1.2 + + +primary styles + Author: www.prowebdesign.ro + Add your own styles to customize the project. + + + +BASE (MOBILE) SIZE + These are the mobile styles. It's what people see on their phones. + Remember, keep it light: Speed is Important. +*/ + +/* typography */ +body{ + color:#666; + font-family:'Ubuntu', Arial, Helvetica, sans-serif; + font-size:1em; + line-height:1.4em; + font-weight:normal; +} +h1, h2, h3, h4, h5, h6{ + font-weight:normal; + font-family:'Droid Serif', Arial, Helvetica, sans-serif; + line-height:1.5em; + margin:.45em 0; + padding:0; +} + + +/* links */ +a, +a:visited, +a:active, +a:hover{color:#0099ff;} +a:hover{ text-decoration:none;} + + +/* Box sizing. Awesome thing. Read about it here: http://www.w3schools.com/cssref/css3_pr_box-sizing.asp */ +*{ box-sizing:border-box; + -moz-box-sizing:border-box;} + + +/* structure */ +.wrapper{ + width: 92%; + margin: 0 auto; +} +header{ + padding:15px 0; +} +#banner{ + text-align:center; +} + +#hero, +#page-header{ + background:#f3f3f3; + border-top:1px solid #e2e2e2; + border-bottom:1px solid #e2e2e2; + padding:20px 0; +} +#hero h1{ + line-height:1.2em; + margin-top:0px; + margin-bottom:10px;} + +.flexslider{ + display:none; +} + +#content { + margin:40px 0; +} + +aside { + margin:40px 0; +} + +p{ margin:0 0 1.5em;} + + +/* RESPONSIVE IMAGES */ +img{ max-width:100%; height:auto;} + + +/*MAIN MENU*/ +.menu-toggle{ + display:block; + padding:10px; + margin:20px 0 0; + background:#666; + color:#fff; + cursor:pointer; + text-transform:uppercase; + font-size:20px; +} +.menu-toggle.toggled-on{ + background:#0099ff; +} +.srt-menu{ + display:none; +} +.srt-menu.toggled-on{ + display:block; + position:relative; + z-index:10; +} + +.srt-menu{ + clear:both; + margin-bottom:60px; + +} +.srt-menu li a { + background:#dadada; + display:block; + margin:1px 0; + padding:10px; + text-decoration:none; +} +.srt-menu li a:hover{ + background:#0099ff; + color:#fff; +} +.srt-menu li li a { + background:#e8e8e8; + padding-left:40px; +} +.srt-menu li li li a { + background:#efefef; + padding-left:80px; +} + +/*SECONDARY MENU*/ +#secondary-navigation{ + margin-bottom:60px; +} +#secondary-navigation ul{ + margin:0; + padding:0; +} +#secondary-navigation ul li a{ + background:#E6E6E6; + display:block; + margin:5px 0; + padding:10px; + text-decoration:none; +} +#secondary-navigation ul li a:hover, +#secondary-navigation ul li.active a{ + background:#0099ff; + color:#fff; +} + +/*SPACE GRID ELEMENTS VERTICALLY, SINCE THEY ARE ONE UNDER ANOTHER SO FAR*/ +.grid_1, +.grid_2, +.grid_3, +.grid_4, +.grid_5, +.grid_6, +.grid_7, +.grid_8, +.grid_9, +.grid_10, +.grid_11, +.grid_12 { + margin-bottom:40px; + /*positioning and padding*/ + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} + +/*FOOTER*/ +footer{ + clear:both; + font-size:80%; + padding:20px 0; +} +footer ul{ + margin:0; + padding:0; +} + +/*colors and backgrounds*/ +body{ + background:#fff; +} +h1, h2, h3, h4, h5, h6{ + color:#333; +} + +footer{ + background:#333; + color:#ccc; +} +footer h1, footer h2, footer h3, footer h4{ + color:#CCC; + margin-bottom:10px; +} +footer ul{ + margin:0 0 0 8%; +} + +a.buttonlink{ + background:#0099ff; + border-radius:7px; + color:#fff; + display:block; + float:left; + margin:10px 15px 10px 0; + padding:10px; + text-decoration:none; +} +a.buttonlink:hover{ + background:#8dbc01; +} +.greenelement{ + background:#5ec79e; + color:#fff; +} +.violetelement{ + background:#887dc2; + color:#fff; +} + + + +/* Contain floats*/ +.clearfix:before, +.clearfix:after, +.row:before, +.row:after { + content: " "; + display: table; +} +.clearfix:after, +.container:after, +.row:after{ + clear: both; +} + + +/* +LARGER MOBILE DEVICES +This is for mobile devices with a bit larger screens. +*/ +@media only screen and (min-width: 481px) { +#banner{ + float:left; + text-align:left; + margin-bottom:-20px;/*this depends on the height of the logo*/ +} +.menu-toggle{/*make menu float right, instead of sitting under the logo*/ + margin-top:10px; /*this depends on the height of the logo*/ + float:right; +} + +} + +/* +TABLET & SMALLER LAPTOPS +The average viewing window and preferred media query for those is 768px. +But I think that some more breathing space is good:) +*/ +@media only screen and (min-width: 920px) { + +.wrapper{ + max-width: 1200px; + margin: .75em auto; +} + +#banner{ + float:left; + text-align:left; + margin-bottom:0px; +} +header{ + padding:0; +} +#content { + float:left; + width:65%; +} +#content.wide-content{ + float:none; + width:100%; +} + +.flexslider{ +display:block; +/*demo 1 slider theme*/ +margin: 0 0 60px; +background: #fff; +border: 4px solid #fff; +-webkit-border-radius: 4px; +-moz-border-radius: 4px; +-o-border-radius: 4px; +border-radius: 4px; +box-shadow: 0 1px 4px rgba(0,0,0,.2); +-webkit-box-shadow: 0 1px 4px rgba(0,0,0,.2); +-moz-box-shadow: 0 1px 4px rgba(0,0,0,.2); +-o-box-shadow: 0 1px 4px rgba(0,0,0,.2); +} + + +aside { + float:right; + width:30%; +} + +/*** MAIN MENU - ESSENTIAL STYLES ***/ +.menu-toggle{display:none;} +#menu-main-navigation{display:block;} + +.srt-menu, .srt-menu * { + margin: 0; + padding: 0; + list-style: none; +} +.srt-menu ul { + position: absolute; + display:none; + width: 12em; /* left offset of submenus need to match (see below) */ +} +.srt-menu ul li { + width: 100%; +} +.srt-menu li:hover { + visibility: inherit; /* fixes IE7 'sticky bug' */ +} +.srt-menu li { + float: left; + position: relative; + margin-left:1px; +} +.srt-menu li li { + margin-left:0px; +} +.srt-menu a { + display: block; + position: relative; +} +.srt-menu li:hover ul, +.srt-menu li.sfHover ul { + display:block; + left: 0; + top: 45px; /* match top ul list item height */ + z-index: 99; + -webkit-box-shadow: 2px 3px 2px 0px rgba(00, 00, 00, .3); + box-shadow: 2px 3px 2px 0px rgba(00, 00, 00, .3); +} +ul.srt-menu li:hover li ul, +ul.srt-menu li.sfHover li ul { + top: -999em; +} +ul.srt-menu li li:hover ul, +ul.srt-menu li li.sfHover ul { + left: 12em; /* match ul width */ + top: 0; +} +ul.srt-menu li li:hover li ul, +ul.srt-menu li li.sfHover li ul { + top: -999em; +} +ul.srt-menu li li li:hover ul, +ul.srt-menu li li li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} + +/*** DEMO1 SKIN ***/ +#topnav, .srt-menu { + float:right; + margin: .35em 0 0 0; +} +.srt-menu a { + text-decoration:none; +} +.srt-menu li a { + background:#fff; + margin:0; + padding:10px 20px; + height:45px; +} +.srt-menu a, .srt-menu a:visited { /* visited pseudo selector so IE6 applies text colour*/ + color: #0099ff; +} +.srt-menu li li a { + border-top: 1px solid rgba(255,255,255,.2); + background: #333; /*fallback for old IE*/ + background:rgba(0,0,0,.6); + color: #fff; + padding-left:20px; + height:auto; +} +.srt-menu li li a:visited{color:#fff;} +.srt-menu li li li a, +.srt-menu li.active * li a{ + padding-left:20px; + background:rgba(0,0,0,.6); +} + +.srt-menu li:hover > a, +.srt-menu li.active a{ + color:#fff; + background:#0099ff; +} +.srt-menu li li:hover > a{ + color:#fff; + background:#0099ff; +} + + + +/*GRID*/ +/* + & Columns : 12 + + */ + .row{ + margin-left: -15px; + margin-right: -15px; +} + +.grid_1 { width: 8.33333333%; } +.grid_2 { width: 16.66666667%; } +.grid_3 { width: 25%; } +.grid_4 { width: 33.33333333%; } +.grid_5 { width: 41.66666667%; } +.grid_6 { width: 50%; } +.grid_7 { width: 58.33333333%; } +.grid_8 { width: 66.66666667%; } +.grid_9 { width: 75%; } +.grid_10 { width: 83.33333333%; } +.grid_11 { width: 91.66666667%; } +.grid_12 { width: 100%; } + +.grid_1, +.grid_2, +.grid_3, +.grid_4, +.grid_5, +.grid_6, +.grid_7, +.grid_8, +.grid_9, +.grid_10, +.grid_11, +.grid_12 { + float: left; + display: block; +} + +.rightfloat{float:right;} +/* @notation inspired by tinyGrid, .row and percentage by Twitter Bootstrap + */ + +#hero [class*="grid_"] { margin-bottom:-20px;} + +} + +/* +DESKTOP +This is the average viewing window. So Desktops, Laptops, and +in general anyone not viewing on a mobile device. Here's where +you can add resource intensive styles. +*/ +@media only screen and (min-width: 1030px) { + +} + +/* +LARGE VIEWING SIZE +This is for the larger monitors and possibly full screen viewers. +*/ +@media only screen and (min-width: 1240px) { + +} + +/* +RETINA (2x RESOLUTION DEVICES) +This applies to the retina iPhone (4s) and iPad (2,3) along with +other displays with a 2x resolution. +*/ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), + only screen and (min--moz-device-pixel-ratio: 1.5), + only screen and (min-device-pixel-ratio: 1.5) { + + +} + +/* +iPHONE 5 MEDIA QUERY +iPhone 5 or iPod Touch 5th generation styles (you can include your own file if you want) +*/ +@media (device-height: 568px) and (-webkit-min-device-pixel-ratio: 2) { + + +} + +/* +PRINT STYLESHEET +*/ +@media print { + * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: h5bp.com/s */ + a, a:visited { text-decoration: underline; } + a[href]:after { content: " (" attr(href) ")"; } + abbr[title]:after { content: " (" attr(title) ")"; } + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } /* Don't show links for images, or javascript/internal links */ + pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } + thead { display: table-header-group; } /* h5bp.com/t */ + tr, img { page-break-inside: avoid; } + img { max-width: 100% !important; } + @page { margin: 0.5cm; } + p, h2, h3 { orphans: 3; widows: 3; } + h2, h3 { page-break-after: avoid; } +} \ No newline at end of file diff --git a/branches/conlite20/cms/css/conlite-demo.css b/branches/conlite20/cms/css/conlite-demo.css new file mode 100644 index 0000000..6662565 --- /dev/null +++ b/branches/conlite20/cms/css/conlite-demo.css @@ -0,0 +1,136 @@ +form#login_box { + width: 100%; +} + +form#login_box fieldset { + padding: 3px; + border-radius: 6px; +} + +input[type='submit'] { + background: #0099ff none repeat scroll 0 0; + border: 1px solid; + border-radius: 6px; + color: #fff; + margin: 5px 10px 5px 0; + padding: 5px; + text-decoration: none; +} + +footer #colophon { + position: relative; +} + +div#social-media-links { + position: absolute; + right: 0; + text-align: right; + width: 20%; + display: inline-block; +} + +a.social-media-icon { + width: 32px; + height: 32px; + background-image: url(../images/ico/social_icons_sprite.png); + display: inline-block; + color: rgba(0, 0, 0, 0); +} + +.facebook { + background-position: 0 0 !important; +} + +.facebook:hover { + background-position: 0 -32px !important; +} + +.pinterest { + background-position: -32px 0 !important; +} + +.pinterest:hover { + background-position: -32px -32px !important; +} + +.youtube { + background-position: -64px 0px !important; +} + +.youtube:hover { + background-position: -64px -32px !important; +} + +.flickr { + background-position: -96px 0px !important; +} + +.flickr:hover{ + background-position: -96px -32px !important; +} + +.google-plus { + background-position: -128px 0px !important; +} + +.google-plus:hover { + background-position: -128px -32px !important; +} + +.rss { + background-position: -160px 0 !important; +} + +.rss:hover { + background-position: -160px -32px !important; +} + + +.twitter { + background-position: -192px 0 !important; +} + +.twitter:hover { + background-position: -192px -32px !important; +} + + +.vimeo { + background-position: -224px 0 !important; +} + +.vimeo:hover { + background-position: -224px -32px !important; +} + +.dribble { + background-position: -256px 0 !important; +} + +.dribble:hover { + background-position: -256px -32px !important; +} + +.linkedin { + background-position: -288px 0 !important; +} + +.linkedin:hover { + background-position: -288px -32px !important; +} + +.xing { + background-position: -320px 0 !important; +} + +.xing:hover { + background-position: -320px -32px !important; +} + + + +@media only screen and (min-width: 920px) { + form#login_box input { + max-width: 100px; + } +} \ No newline at end of file diff --git a/branches/conlite20/cms/css/index.php b/branches/conlite20/cms/css/index.php new file mode 100644 index 0000000..ef8b776 --- /dev/null +++ b/branches/conlite20/cms/css/index.php @@ -0,0 +1,4 @@ + diff --git a/branches/conlite20/cms/css/normalize.css b/branches/conlite20/cms/css/normalize.css new file mode 100644 index 0000000..68fcfea --- /dev/null +++ b/branches/conlite20/cms/css/normalize.css @@ -0,0 +1,530 @@ +/*! normalize.css v1.1.0 | MIT License | git.io/normalize */ + +/* ========================================================================== + HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined in IE 6/7/8/9 and Firefox 3. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/** + * Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. + */ + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address styling not present in IE 7/8/9, Firefox 3, and Safari 4. + * Known issue: no IE 6 support. + */ + +[hidden] { + display: none; +} + +/* ========================================================================== + Base + ========================================================================== */ + +/** + * 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using + * `em` units. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-size: 100%; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + -ms-text-size-adjust: 100%; /* 2 */ +} + +/** + * Address `font-family` inconsistency between `textarea` and other form + * elements. + */ + +html, +button, +input, +select, +textarea { + font-family: sans-serif; +} + +/** + * Address margins handled incorrectly in IE 6/7. + */ + +body { + margin: 0; +} + +/* ========================================================================== + Links + ========================================================================== */ + +/** + * Address `outline` inconsistency between Chrome and other browsers. + */ + +a:focus { + outline: thin dotted; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* ========================================================================== + Typography + ========================================================================== */ + +/** + * Address font sizes and margins set differently in IE 6/7. + * Address font sizes within `section` and `article` in Firefox 4+, Safari 5, + * and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +h2 { + font-size: 1.5em; + margin: 0.83em 0; +} + +h3 { + font-size: 1.17em; + margin: 1em 0; +} + +h4 { + font-size: 1em; + margin: 1.33em 0; +} + +h5 { + font-size: 0.83em; + margin: 1.67em 0; +} + +h6 { + font-size: 0.67em; + margin: 2.33em 0; +} + +/** + * Address styling not present in IE 7/8/9, Safari 5, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +blockquote { + margin: 1em 40px; +} + +/** + * Address styling not present in Safari 5 and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address differences between Firefox and other browsers. + * Known issue: no IE 6/7 normalization. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Address styling not present in IE 6/7/8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address margins set differently in IE 6/7. + */ + +p, +pre { + margin: 1em 0; +} + +/** + * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + _font-family: 'courier new', monospace; + font-size: 1em; +} + +/** + * Improve readability of pre-formatted text in all browsers. + */ + +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; + +} + +/** + * Address CSS quotes not supported in IE 6/7. + */ + +q { + quotes: none; +} + +/** + * Address `quotes` property not supported in Safari 4. + */ + +q:before, +q:after { + content: ''; + content: none; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Lists + ========================================================================== */ + +/** + * Address margins set differently in IE 6/7. + */ + +dl, +menu, +ol, +ul { + margin: 1em 0; +} + +dd { + margin: 0 0 0 40px; +} + +/** + * Address paddings set differently in IE 6/7. + */ + +menu, +ol, +ul { + padding: 0 0 0 40px; +} + +/** + * Correct list images handled incorrectly in IE 7. + */ + +nav ul, +nav ol { + list-style: none; + list-style-image: none; + padding:0; + margin:0; +} + +/* ========================================================================== + Embedded content + ========================================================================== */ + +/** + * 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3. + * 2. Improve image quality when scaled in IE 7. + */ + +img { + border: 0; /* 1 */ + -ms-interpolation-mode: bicubic; /* 2 */ +} + +/** + * Correct overflow displayed oddly in IE 9. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + Figures + ========================================================================== */ + +/** + * Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11. + */ + +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ + +/** + * Correct margin displayed oddly in IE 6/7. + */ + +form { + margin: 0; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct color not being inherited in IE 6/7/8/9. + * 2. Correct text not wrapping in Firefox 3. + * 3. Correct alignment displayed oddly in IE 6/7. + */ + +legend { + border: 0; /* 1 */ + padding: 0; + white-space: normal; /* 2 */ + *margin-left: -7px; /* 3 */ +} + +/** + * 1. Correct font size not being inherited in all browsers. + * 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5, + * and Chrome. + * 3. Improve appearance and consistency in all browsers. + */ + +button, +input, +select, +textarea { + font-size: 100%; /* 1 */ + margin: 0; /* 2 */ + vertical-align: baseline; /* 3 */ + *vertical-align: middle; /* 3 */ +} + +/** + * Address Firefox 3+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +button, +input { + line-height: normal; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+. + * Correct `select` style inheritance in Firefox 4+ and Opera. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + * 4. Remove inner spacing in IE 7 without affecting normal text inputs. + * Known issue: inner spacing remains in IE 6. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ + *overflow: visible; /* 4 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * 1. Address box sizing set to content-box in IE 8/9. + * 2. Remove excess padding in IE 8/9. + * 3. Remove excess padding in IE 7. + * Known issue: excess padding remains in IE 6. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ + *height: 13px; /* 3 */ + *width: 13px; /* 3 */ +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Remove inner padding and border in Firefox 3+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * 1. Remove default vertical scrollbar in IE 6/7/8/9. + * 2. Improve readability and alignment in all browsers. + */ + +textarea { + overflow: auto; /* 1 */ + vertical-align: top; /* 2 */ +} + +/* ========================================================================== + Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/branches/conlite20/cms/dbfs.php b/branches/conlite20/cms/dbfs.php new file mode 100644 index 0000000..50210ca --- /dev/null +++ b/branches/conlite20/cms/dbfs.php @@ -0,0 +1,66 @@ + + * + * Requirements: + * @con_php_req 5 + * @con_template + * @con_notice + * + * + * @package ContenidoBackendArea + * @author unknown + * @copyright four for business AG + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * + * + * {@internal + * created unknown + * modified 2008-06-16, H. Librenz - Hotfix: checking for potential unsecure calling + * modified 2008-07-03, bilal arslan, added security fix + * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307] + * + * $Id: dbfs.php 450 2016-07-20 11:11:12Z oldperl $: + * }} + * + */ + +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +$contenido_path = ''; +# include the config file of the frontend to init the Client and Language Id +include_once ("config.php"); + +// Contenido startup process +include_once ($contenido_path . 'includes/startup.php'); + +if ($contenido) +{ + page_open(array('sess' => 'Contenido_Session', + 'auth' => 'Contenido_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); + +} else { + page_open(array('sess' => 'Contenido_Frontend_Session', + 'auth' => 'Contenido_Frontend_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); +} + +/* Shorten load time */ +$client = $load_client; + +$dbfs = new DBFSCollection; +$dbfs->outputFile($file); + +page_close(); + +?> \ No newline at end of file diff --git a/branches/conlite20/cms/error.php b/branches/conlite20/cms/error.php new file mode 100644 index 0000000..e18b0eb --- /dev/null +++ b/branches/conlite20/cms/error.php @@ -0,0 +1,13 @@ + + + Fehler + + + + + + + +  + + diff --git a/branches/conlite20/cms/favicon.ico b/branches/conlite20/cms/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fbca42b7360bfad06a9e6b3f67fe35c3d7c81acc GIT binary patch literal 29038 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 aVvXMgvCXt&iUIsa2xFiHbYJcFL;f56R8$%O literal 0 HcmV?d00001 diff --git a/branches/conlite20/cms/front_content.php b/branches/conlite20/cms/front_content.php new file mode 100644 index 0000000..0fb2500 --- /dev/null +++ b/branches/conlite20/cms/front_content.php @@ -0,0 +1,949 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + */ + +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +$contenido_path = ''; +# include the config file of the frontend to init the Client and Language Id +include_once ("config.php"); + +# Contenido startup process +include_once ($contenido_path . 'includes/startup.php'); + +cInclude("includes", "functions.con.php"); +cInclude("includes", "functions.con2.php"); +cInclude("includes", "functions.api.php"); +cInclude("includes", "functions.pathresolver.php"); + +if ($cfg["use_pseudocron"] == true) +{ + /* Include cronjob-Emulator */ + $oldpwd = getcwd(); + chdir($cfg["path"]["contenido"].$cfg["path"]["cronjobs"]); + cInclude("includes", "pseudo-cron.inc.php"); + chdir($oldpwd); +} + +/* + * Initialize the Database Abstraction Layer, the Session, Authentication and Permissions Handler of the + * PHPLIB application development toolkit + * @see http://sourceforge.net/projects/phplib + */ +if ($contenido) +{ + //Backend + page_open(array ('sess' => 'Contenido_Session', 'auth' => 'Contenido_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm')); + i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang); +} +else +{ + //Frontend + page_open(array ('sess' => 'Contenido_Frontend_Session', 'auth' => 'Contenido_Frontend_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm')); +} + +/** + * Bugfix + * @see http://contenido.org/forum/viewtopic.php?t=18291 + * + * added by H. Librenz (2007-12-07) + */ +//includePluginConf(); +/** + * fixed bugfix - using functions brokes variable scopes! + * + * added by H. Librenz (2007-12-21) based on an idea of A. Lindner + */ +require_once $cfg['path']['contenido'] . $cfg['path']['includes'] . 'functions.includePluginConf.php'; + +$db = new DB_Contenido; + +$sess->register("cfgClient"); +$sess->register("errsite_idcat"); +$sess->register("errsite_idart"); +$sess->register("encoding"); + +if ($cfgClient["set"] != "set") +{ + rereadClients(); +} + +# Check if this request is for a compressed file +if ($_GET['action'] == 'get_compressed') { + # Get the calling parameters + $sFilename = ((isset($_GET['f'])) ? $_GET['f'] : $_GET['amp;f']); + $sContentType = ((isset($_GET['c'])) ? $_GET['c'] : $_GET['amp;c']); + + # Output the file using the class output() function + Output_Compressor::output($cfgClient[$client]['path']['frontend'] . 'cache/', $sFilename, $sContentType); + + # Don't do anything else + exit(); +} + +// Call hook after plugins are loaded, added by Murat Purc, 2008-09-07 +CEC_Hook::execute('Contenido.Frontend.AfterLoadPlugins'); + +if (!isset($encoding) || !is_array($encoding) || count($encoding) == 0) +{ + // get encodings of all languages + $encoding = array(); + $sql = "SELECT idlang, encoding FROM " . $cfg["tab"]["lang"]; + $db->query($sql); + while ($db->next_record()) { + $encoding[$db->f('idlang')] = $db->f('encoding'); + } +} + + +// Check frontend globals +// @TODO: Should be outsourced into startup process but requires a better detection (frontend or backend) +Contenido_Security::checkFrontendGlobals(); + + +// update urlbuilder set http base path +Contenido_Url::getInstance()->getUrlBuilder()->setHttpBasePath($cfgClient[$client]['htmlpath']['frontend']); + + +// Initialize language +if (!isset($lang)) { + + // if there is an entry load_lang in frontend/config.php use it, else use the first language of this client + if(isset($load_lang)){ + // load_client is set in frontend/config.php + $lang = $load_lang; + }else{ + + $sql = "SELECT + B.idlang + FROM + ".$cfg["tab"]["clients_lang"]." AS A, + ".$cfg["tab"]["lang"]." AS B + WHERE + A.idclient='".Contenido_Security::toInteger($client)."' AND + A.idlang = B.idlang + LIMIT + 0,1"; + + $db->query($sql); + $db->next_record(); + + $lang = $db->f("idlang"); + } +} + +if (!$sess->is_registered("lang") ) $sess->register("lang"); +if (!$sess->is_registered("client") ) $sess->register("client"); + +if (isset ($username)) +{ + $auth->login_if(true); +} + +/* + * Send HTTP header with encoding + */ +header("Content-Type: text/html; charset={$encoding[$lang]}"); + +/* + * if http global logout is set e.g. front_content.php?logout=true + * log out the current user. + */ +if (isset ($logout)) +{ + $auth->logout(true); + $auth->unauth(true); + $auth->auth["uname"] = "nobody"; +} + +/* + * local configuration + */ +if (file_exists("config.local.php")) +{ + @ include ("config.local.php"); +} + +/* + * If the path variable was passed, try to resolve it to a Category Id + * e.g. front_content.php?path=/company/products/ + */ +if (isset($path) && strlen($path) > 1) +{ + /* Which resolve method is configured? */ + if ($cfg["urlpathresolve"] == true) + { + + $iLangCheck = 0; + $idcat = prResolvePathViaURLNames($path, $iLangCheck); + + } + else + { + $iLangCheck = 0; + + $idcat = prResolvePathViaCategoryNames($path, $iLangCheck); + if(($lang != $iLangCheck) && ((int)$iLangCheck != 0)){ + $lang = $iLangCheck; + } + + } +} + +// error page +$aParams = array ( + 'client' => $client, 'idcat' => $errsite_idcat[$client], 'idart' => $errsite_idart[$client], + 'lang' => $lang, 'error'=> '1' +); +$errsite = 'Location: ' . Contenido_Url::getInstance()->buildRedirect($aParams); + + +/* + * Try to initialize variables $idcat, $idart, $idcatart, $idartlang + * Note: These variables can be set via http globals e.g. front_content.php?idcat=41&idart=34&idcatart=35&idartlang=42 + * If not the values will be computed. + */ +if ($idart && !$idcat && !$idcatart) +{ + /* Try to fetch the first idcat */ + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'"; + $db->query($sql); + + if ($db->next_record()) + { + $idcat = $db->f("idcat"); + } +} + +unset ($code); +unset ($markscript); + +if (!$idcatart) +{ + if (!$idart) + { + if (!$idcat) + { + # Note: In earlier Contenido versions the information if an article is startarticle of a category has been stored + # in relation con_cat_art. + if ($cfg["is_start_compatible"] == true) + { + $sql = "SELECT + idart, + B.idcat + FROM + ".$cfg["tab"]["cat_art"]." AS A, + ".$cfg["tab"]["cat_tree"]." AS B, + ".$cfg["tab"]["cat"]." AS C + WHERE + A.idcat=B.idcat AND + B.idcat=C.idcat AND + is_start='1' AND + idclient='".Contenido_Security::toInteger($client)."' + ORDER BY + idtree ASC"; + } + else + { + # Note: Now the information if an article is startarticle of a category is stored in relation con_cat_lang. + $sql = "SELECT + A.idart, + B.idcat + FROM + ".$cfg["tab"]["cat_art"]." AS A, + ".$cfg["tab"]["cat_tree"]." AS B, + ".$cfg["tab"]["cat"]." AS C, + ".$cfg["tab"]["cat_lang"]." AS D, + ".$cfg["tab"]["art_lang"]." AS E + WHERE + A.idcat=B.idcat AND + B.idcat=C.idcat AND + D.startidartlang = E.idartlang AND + D.idlang='".Contenido_Security::toInteger($lang)."' AND + E.idart=A.idart AND + E.idlang='".Contenido_Security::toInteger($lang)."' AND + idclient='".Contenido_Security::toInteger($client)."' + ORDER BY + idtree ASC"; + } + + $db->query($sql); + + if ($db->next_record()) { + $idart = $db->f("idart"); + $idcat = $db->f("idcat"); + } else { + if($contenido) { + cInclude("includes", "functions.i18n.php"); + die(i18n("No start article for this category")); + } else { + if($error == 1) { + die("Fatal error: Could not display error page. Error to display was: 'No start article in this category'"); + } else { + header($errsite); + exit; + } + } + } + } else { + $idart = -1; + if ($cfg["is_start_compatible"] == true) + { + $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND is_start='1'"; + $db->query($sql); + + if ($db->next_record()) + { + $idart = $db->f("idart"); + } + } + else + { + $sql = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + + if ($db->next_record()) + { + if ($db->f("startidartlang") != 0) + { + $sql = "SELECT idart FROM ".$cfg["tab"]["art_lang"]." WHERE idartlang='".Contenido_Security::toInteger($db->f("startidartlang"))."'"; + $db->query($sql); + $db->next_record(); + $idart = $db->f("idart"); + } + } + } + + if ($idart != -1) + { + } + else + { + // error message in backend + if ($contenido) + { + cInclude("includes", "functions.i18n.php"); + die(i18n("No start article for this category")); + } + else + { + if ($error == 1) + { + echo "Fatal error: Could not display error page. Error to display was: 'No start article in this category'"; + } + else + { + header($errsite); + exit; + } + } + } + } + } +} +else +{ + $sql = "SELECT idcat, idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart='".Contenido_Security::toInteger($idcatart)."'"; + + $db->query($sql); + $db->next_record(); + + $idcat = $db->f("idcat"); + $idart = $db->f("idart"); +} + +/* Get idcatart */ +if (0 != $idart && 0 != $idcat) +{ + $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idcat = '".Contenido_Security::toInteger($idcat)."'"; + + $db->query($sql); + $db->next_record(); + + $idcatart = $db->f("idcatart"); +} + +$idartlang = getArtLang($idart, $lang); + +if ($idartlang === false) +{ + header($errsite); + exit; +} + +/* + * removed database roundtrip for checking + * if cache is enabled + * CON-115 + * 2008-06-25 Thorsten Granz + */ +// START: concache, murat purc +if ($cfg["cache"]["disable"] != '1') { + cInclude('frontend', 'includes/concache.php'); + $oCacheHandler = new cConCacheHandler($GLOBALS['cfgConCache'], $db); + $oCacheHandler->start($iStartTime); // $iStartTime ist optional und ist die startzeit des scriptes, z. b. am anfang von fron_content.php +} +// END: concache + + +############################################## +# BACKEND / FRONTEND EDITING +############################################## + +/** + * If user has contenido-backend rights. + * $contenido <==> the cotenido backend session as http global + * In Backend: e.g. contenido/index.php?contenido=dac651142d6a6076247d3afe58c8f8f2 + * Can also be set via front_content.php?contenido=dac651142d6a6076247d3afe58c8f8f2 + * + * Note: In backend the file contenido/external/backendedit/front_content.php is included! + * The reason is to avoid cross-site scripting errors in the backend, if the backend domain differs from + * the frontend domain. + */ +if ($contenido) +{ + $perm->load_permissions(); + + /* Change mode edit / view */ + if (isset ($changeview)) + { + $sess->register("view"); + $view = $changeview; + } + + $col = new InUseCollection; + + if ($overrideid != "" && $overridetype != "") + { + $col->removeItemMarks($overridetype, $overrideid); + } + /* Remove all own marks */ + $col->removeSessionMarks($sess->id); + /* If the override flag is set, override a specific InUseItem */ + + list ($inUse, $message) = $col->checkAndMark("article", $idartlang, true, i18n("Article is in use by %s (%s)"), true, $cfg['path']['contenido_fullhtml']."external/backendedit/front_content.php?changeview=edit&action=con_editart&idartlang=$idartlang&type=$type&typenr=$typenr&idart=$idart&idcat=$idcat&idcatart=$idcatart&client=$client&lang=$lang"); + + $sHtmlInUse = ''; + $sHtmlInUseMessage = ''; + if ($inUse == true) + { + $disabled = 'disabled="disabled"'; + $sHtmlInUseCss = ''; + $sHtmlInUseMessage = $message; + } + + $sql = "SELECT locked FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + $db->next_record(); + $locked = $db->f("locked"); + if ($locked == 1) + { + $inUse = true; + $disabled = 'disabled="disabled"'; + } + + // CEC to check if the user has permission to edit articles in this category + CEC_Hook::setBreakCondition(false, true); // break at "false", default value "true" + $allow = CEC_Hook::executeWhileBreakCondition( + 'Contenido.Frontend.AllowEdit', $lang, $idcat, $idart, $auth->auth['uid'] + ); + + if ($perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat) && $inUse == false && $allow == true) + { + /* Create buttons for editing */ + $edit_preview = ''; + + if ($view == "edit") + { + $edit_preview = ' + + + '; + } + else + { + $edit_preview = ' + + + '; + } + + /* Display articles */ + if ($cfg["is_start_compatible"] == true) + { + $sql = "SELECT idart, is_start FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' ORDER BY idart"; + + $db->query($sql); + } + else + { + $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' ORDER BY idart"; + + $db->query($sql); + } + + $a = 1; + + $edit_preview .= '
+ Preview + + Preview +
+ Preview + + Edit +
Articles in category:
'; + + while ($db->next_record() && ($db->affected_rows() != 1)) + { + + $class = "font-family:'Verdana'; font-size:10; color:#000000; text-decoration: underline; font-weight:normal"; + if (!isset ($idart)) + { + if (isStartArticle(getArtLang($idart, $lang), $idcat, $lang)) + { + $class = "font-family: verdana; font-size:10; color:#000000; text-decoration: underline ;font-weight:bold"; + } + } + else + { + if ($idart == $db->f("idart")) + { + $class = "font-family: verdana; font-size:10; color:#000000; text-decoration: underline; font-weight:bold"; + } + } + + $edit_preview .= "url("front_content.php?idart=".$db->f("idart")."&idcat=$idcat")."\">$a "; + $a ++; + } + + $edit_preview .= '
'; + + } + +} // end if $contenido + + +/* If mode is 'edit' and user has permission to edit articles in the current category */ +if ($inUse == false && $allow == true && $view == "edit" && ($perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat))) +{ + cInclude("includes", "functions.tpl.php"); + cInclude("includes", "functions.con.php"); + include ($cfg["path"]["contenido"].$cfg["path"]["includes"]."include.con_editcontent.php"); +} +else +{ + +############################################## +# FRONTEND VIEW +############################################## + + /* Mark submenuitem 'Preview' in the Contenido Backend (Area: Contenido --> Articles --> Preview) */ + if ($contenido) + { + $markscript = markSubMenuItem(4, true); + } + + unset($edit); // disable editmode + + /* 'mode' is preview (Area: Contenido --> Articles --> Preview) or article displayed in the front-end */ + $sql = "SELECT + createcode + FROM + ".$cfg["tab"]["cat_art"]." + WHERE + idcat = '".Contenido_Security::toInteger($idcat)."' AND + idart = '".Contenido_Security::toInteger($idart)."'"; + + $db->query($sql); + $db->next_record(); + + ############################################## + # code generation + ############################################## + + /* Check if code is expired, create new code if needed */ + if($db->f("createcode") == 0 && $force == 0 && $cfg['dceModEdit']['use'] !== true && $cfg['dceLayEdit']['use'] !== true) { + $sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + + if ($db->num_rows() == 0) + { + /* Include here for performance reasons */ + cInclude("includes", "functions.tpl.php"); + + conGenerateCode($idcat, $idart, $lang, $client); + + $sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + } + + if ($db->next_record()) + { + $code = stripslashes($db->f("code")); + } + else + { + if ($contenido) + $code = "echo \"No code available.\";"; + else + { + if ($error == 1) + { + echo "Fatal error: Could not display error page. Error to display was: 'No code available'"; + } + else + { + header($errsite); + exit; + } + } + } + } else { + $sql = "DELETE FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."'"; + $db->query($sql); + + cInclude("includes", "functions.con.php"); + cInclude("includes", "functions.tpl.php"); + cInclude("includes", "functions.mod.php"); + + conGenerateCode($idcat, $idart, $lang, $client); + + $sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + + $db->query($sql); + $db->next_record(); + + $code = stripslashes($db->f("code")); + } + + /* Add mark Script to code if user is in the backend */ + $code = preg_replace("/<\/head>/i", "$markscript\n", $code, 1); + + /* If article is in use, display notification */ + if ($sHtmlInUseCss && $sHtmlInUseMessage) { + $code = preg_replace("/<\/head>/i", "$sHtmlInUseCss\n", $code, 1); + $code = preg_replace("/(]*)>/i", "\${1}> \n $sHtmlInUseMessage", $code, 1); + } + + /* Check if category is public */ + $sql = "SELECT public FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + + $db->query($sql); + $db->next_record(); + + $public = $db->f("public"); + + ############################################## + # protected categories + ############################################## + if ($public == 0) + { + if ($auth->auth["uid"] == "nobody") + { + $sql = "SELECT user_id, value FROM ".$cfg["tab"]["user_prop"]." WHERE type='frontend' and name='allowed_ip'"; + $db->query($sql); + + while ($db->next_record()) + { + $user_id = $db->f("user_id"); + + $range = urldecode($db->f("value")); + $slash = strpos($range, "/"); + + if ($slash == false) + { + $netmask = "255.255.255.255"; + $network = $range; + } + else + { + $network = substr($range, 0, $slash); + $netmask = substr($range, $slash +1, strlen($range) - $slash -1); + } + + if (IP_match($network, $netmask, $_SERVER["REMOTE_ADDR"])) + { + $sql = "SELECT idright + FROM ".$cfg["tab"]["rights"]." AS A, + ".$cfg["tab"]["actions"]." AS B, + ".$cfg["tab"]["area"]." AS C + WHERE B.name = 'front_allow' AND C.name = 'str' AND A.user_id = '".Contenido_Security::escapeDB($user_id, $db2)."' AND A.idcat = '".Contenido_Security::toInteger($idcat)."' + AND A.idarea = C.idarea AND B.idaction = A.idaction"; + + $db2 = new DB_Contenido; + $db2->query($sql); + + if ($db2->num_rows() > 0) + { + $auth->auth["uid"] = $user_id; + $validated = 1; + } + } + } + if ($validated != 1) + { + // CEC to check category access + CEC_Hook::setBreakCondition(true, false); // break at "true", default value "false" + $allow = CEC_Hook::executeWhileBreakCondition( + 'Contenido.Frontend.CategoryAccess', $lang, $idcat, $auth->auth['uid'] + ); + $auth->login_if(!$allow); + } + } + else + { + // CEC to check category access + CEC_Hook::setBreakCondition(true, false); // break at "true", default value "false" + $allow = CEC_Hook::executeWhileBreakCondition( + 'Contenido.Frontend.CategoryAccess', $lang, $idcat, $auth->auth['uid'] + ); + + /* + added 2008-11-18 Timo Trautmann + in backendeditmode also check if logged in backenduser has permission to view preview of page + */ + if ($allow == false && $contenido && $perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat)) { + $allow = true; + } + + if (!$allow) + { + header($errsite); + exit; + } + } + } + + ############################################## + # statistic + ############################################## + $oStatCol = new cApiStatCollection(); + $oStatCol->trackView($idcatart); + + /* + * Check if an article is start article of the category + */ + if ($cfg["is_start_compatible"] == true) + { + $sql = "SELECT is_start FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart='".Contenido_Security::toInteger($idcatart)."'"; + $db->query($sql); + $db->next_record(); + $isstart = $db->f("is_start"); + } + else + { + $sql = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + $db->next_record(); + if ($db->f("idartlang") == $idartlang) + { + $isstart = 1; + } + else + { + $isstart = 0; + } + } + + ############################################## + # time management + ############################################## + $sql = "SELECT timemgmt FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + $db->next_record(); + + if (($db->f("timemgmt") == "1") && ($isstart != 1)) + { + $sql = "SELECT online, redirect, redirect_url FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."' + AND NOW() > datestart AND NOW() < dateend"; + } + else + { + $sql = "SELECT online, redirect, redirect_url FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + } + + $db->query($sql); + $db->next_record(); + + $online = $db->f("online"); + $redirect = $db->f("redirect"); + $redirect_url = $db->f("redirect_url"); + + @ eval ("\$"."redirect_url = \"$redirect_url\";"); // transform variables + + $insert_base = getEffectiveSetting('generator', 'basehref', "true"); + + /* + * generate base url + */ + if ($insert_base == "true") + { + $is_XHTML = getEffectiveSetting('generator', 'xhtml', "false"); + + $str_base_uri = $cfgClient[$client]["path"]["htmlpath"]; + + // CEC for base href generation + $str_base_uri = CEC_Hook::executeAndReturn('Contenido.Frontend.BaseHrefGeneration', $str_base_uri); + + if ($is_XHTML == "true") { + $baseCode = ''; + } else { + $baseCode = ''; + } + + $code = str_ireplace_once("", "\n".$baseCode, $code); + } + + /* + * Handle online (offline) articles + */ + if ($online) + { + if ($redirect == '1' && $redirect_url != '') + { + page_close(); + /* + * Redirect to the URL defined in article properties + */ + $oUrl = Contenido_Url::getInstance(); + if ($oUrl->isIdentifiableFrontContentUrl($redirect_url)) { + // perform urlbuilding only for identified internal urls + $aUrl = $oUrl->parse($redirect_url); + if (!isset($aUrl['params']['lang'])) { + $aUrl['params']['lang'] = $lang; + } + $redirect_url = $oUrl->buildRedirect($aUrl['params']); + } + header("Location: $redirect_url"); + exit; + } + else + { + if ($cfg["debug"]["codeoutput"]) + { + echo ""; + } + + /* + * That's it! The code of an article will be evaluated. + * The code of an article is basically a PHP script which is cached in the database. + * Layout and Modules are merged depending on the Container definitions of the Template. + */ + + $aExclude = explode(',', getEffectiveSetting('frontend.no_outputbuffer', 'idart', '')); + if (in_array(Contenido_Security::toInteger($idart), $aExclude)) { + eval ("?>\n".$code."\n\n".$code."\n\n".$code."\nend(); + #echo $oCacheHandler->getInfo(); +} +// END: concache + +/* + * configuration settings after the site is displayed. + */ +if (file_exists("config.after.php")) +{ + @ include ("config.after.php"); +} + +if (isset ($savedlang)) +{ + $lang = $savedlang; +} + +$db->disconnect(); +page_close(); +?> \ No newline at end of file diff --git a/branches/conlite20/cms/front_crcloginform.inc.php b/branches/conlite20/cms/front_crcloginform.inc.php new file mode 100644 index 0000000..1dd27a8 --- /dev/null +++ b/branches/conlite20/cms/front_crcloginform.inc.php @@ -0,0 +1,153 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * $Id: front_crcloginform.inc.php 450 2016-07-20 11:11:12Z oldperl $: + */ + +/** + * security check + */ +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +global $cfg, $idcat, $idart, $idcatart, $lang, $client, $username, $encoding; + +$err_catart = trim(getEffectiveSetting("login_error_page", "idcatart", "")); +$err_cat = trim(getEffectiveSetting("login_error_page", "idcat", "")); +$err_art = trim(getEffectiveSetting("login_error_page", "idart", "")); + +$oUrl = Contenido_Url::getInstance(); + +$sClientHtmlPath = $cfgClient[$client]['path']['htmlpath']; + +$sUrl = $sClientHtmlPath . 'front_content.php'; + +$sErrorUrl = $sUrl; +$bRedirect = false; + +if ($err_catart != '') { + $sErrorUrl .= '?idcatart=' . $err_catart . '&lang=' . $lang; + $bRedirect = true; +} elseif ($err_art != '' && $err_cat != '') { + $sErrorUrl .= '?idcat=' . $err_cat . '&idart=' . $err_art . '&lang=' . $lang; + $bRedirect = true; +} elseif ($err_cat != '') { + $sErrorUrl .= '?idcat=' . $err_cat . '&lang=' . $lang; + $bRedirect = true; +} elseif ($err_art != '') { + $sErrorUrl .= '?idart=' . $err_art . '&lang=' . $lang; + $bRedirect = true; +} + +if ($bRedirect) { + $aUrl = $oUrl->parse($sess->url($sErrorUrl)); + $sErrorUrl = $oUrl->buildRedirect($aUrl['params']); + header('Location: ' . $sErrorUrl); + exit(); +} + +if (isset($_GET['return']) || isset($_POST['return'])){ + $aLocator = array('lang=' . (int) $lang); + + if ($idcat > 0) { + $aLocator[] = 'idcat=' . intval($idcat); + } + if ($idart > 0) { + $aLocator[] = 'idart=' . intval($idart); + } + if (isset($_POST['username']) || isset($_GET['username'])){ + $aLocator[] = 'wrongpass=1'; + } + + $sErrorUrl = $sUrl . '?' . implode('&', $aLocator); + $aUrl = $oUrl->parse($sess->url($sErrorUrl)); + $sErrorUrl = $oUrl->buildRedirect($aUrl['params']); + header ('Location: ' . $sErrorUrl); + exit(); +} + +// set form action +$sFormAction = $sess->url($sUrl . '?idcat=' . intval($idcat) . '&lang=' . $lang); +$aUrl = $oUrl->parse($sFormAction); +$sFormAction = $oUrl->build($aUrl['params']); + +// set login input image, use button as fallback +if ( file_exists($cfgClient[$client]['path']['frontend'] . 'images/but_ok.gif') ) { + $sLoginButton = '' . "\n"; +} else { + $sLoginButton = '' . "\n"; +} + +?> + + + + + :: :: :: :: Contenido Login + + + + + +
+
+ + + +
Login
+
+
+
+
+
+
+
+ +
+
+
+ + + + \ No newline at end of file diff --git a/branches/conlite20/cms/images/SimpleGallery/ClosePopup.png b/branches/conlite20/cms/images/SimpleGallery/ClosePopup.png new file mode 100644 index 0000000000000000000000000000000000000000..d3881e4050510e6ede06ccf00baf0a6906275a9e GIT binary patch literal 2704 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 literal 0 HcmV?d00001 diff --git a/branches/conlite20/cms/images/SimpleGallery/NaviLeftDisabled.png b/branches/conlite20/cms/images/SimpleGallery/NaviLeftDisabled.png new file mode 100644 index 0000000000000000000000000000000000000000..2ffddf96d3eb3d7c6f6f33576ca50f0374ef6955 GIT binary patch literal 1106 zcmaJ=TWHfz7!FRH7DRVJ@CGqM#)fS!y_vYGThne8J4#o!2|g@K&bm006O&V$PP}Xb z-B6JUzKG%l1VI^ieNmjsU=F6fdO_KP527+JASie{sqOT^nunbK9KP@SzyCk~8A-G@ zFLteP5d^U~)*>eH>crIx7vTT(*~{&CS&kx|s15d@tYiYBQGwlnjA>FDB!Q&lc1?i> zf+!=^R43|;Zxv*yc_atpu{8s;38G<>ZAfw-Kx8*at9pofe`}l~RV74q_~T662!md= zrQZZ?{jDjvzfa~BYSTut!4|N929QMB+D_dP>=2dL6>#hv(-fJ9puQ0G+f-*fL586T zNWX`1%S?bF1FVPj`hvmWI+9~phGsaL<=kvg@NxpfkcE%J*-WKJNQ%)yF1!m-y$Bfs zO=q)NPuA;!W}0Sso_91j&W#anE2ksLcI#G6Q9%TjY^nxQp-wuAQa8+?5QUxoE-p`6ixj*49650@>;bp}B*aApyh>TaM!O{kIif(5mt z7dBE-ufSDGdSRm_ximIIJJ^R}v(BjS9*aIEUx`~JS_0#lO{2(60#Kx5U z?8xzZuEEVq4?diFQ!OrSZ$e|k)a%cC4m}!}xiEAw(U`dUz3f`o;n~@{we@EnjbB?i zf1m$tt|e@Is5o|@=}`61TKmbw$hV`H-c?S{OuGl><;Ei?2djo(@#Qz_#_lfjZFuqZ zeB?)e?Y*B{>Q3w!?YLQ9_WV=k@H78(g4@2ir|RM9Z9_*t{%|F^i7mq`uh{37-$1#k zca@{fGtt$fFK>@`tzlhPU+o`Uawc-8b~07Zud2wMnw&SicY<#IvWOuD?o-m^_O-j5 OS00PBiepV(gTDaOEpF|7$5(&x@Ilnr4I2JDHPkCnRVB7Cs*Cw(OhU2S-12O?d;539dzbRGf#Jv zPze+YiEeq2!ib27Am|YE$BT!ghzjb^tvVK!9ZD*&H@a&b+U79tdyn7m_x--_eeYa< z@@SoVznh|{x}7GlU0F4(BBkQc(qEAxLP_Fib&7nLND) zJ1D9GsOcd*Bp%~sr1>NVS&kKi^-WfvQC4!Jx>BMjVc) zeN!eJm`bMQsZlws&|RIN!{&*A2C)QeZA`a#J3?>i@+5YS85(Rs@MwhIHZ>&ngE%rF z2>MvB%(k(hjq`D>flw%P82DL^WmrGM`Mq3-Z}sym3kn}ivYASbPYJz+Tx1uaM=&;c zhRNsizI>|>nZpbh4u>5Lzu!v`UTadvlI_*4#-f4%E!k8JtRfvaic%Jh;|NWhZkM1L zJF>b}XcK7|V@n3Z`B{x0Rb4@OYYQ!kd_uRdq{}cNL}5aAq zgY6vG;}5q-1JR(rEf5XG18jgRas?!hYf#5UuJVT)E6H^RK{H5Z0h;OrRC-OMfvtjh zwX~P^l6nQMQrb(nB$pv(80T95y5`~$nH?wG8CtU08GERcSvSd0zj{(vMjphCgb+>J zZ?c(8=1T_De=N_|#Lh3yZq$0d*UQ;j&!#Ke6>~pacCVD(IoLV3)cwnKbECrZq5kXh znWpKg)o=G2a&&X$+bi8m^H<+(Zf<54u6yP$m2+L3TT0d_G`;btV*OO?&@)%|z?sWs zRfBul-tTQ}{;|-q3|#F^6Hkrs>xwo0!TQO%Xo)0F#_B``>5S}R7)Lh=o1!YK98*@>AO_8_RWm~LmwOLrps68xpD)J6%rH!A zJG(8|*j=Acy4#eXN>^Ig4;s$l&NH_0fdnS zfsf%l3g_p5pJ#aQmOvm-4g`+pSWaMh!NUhcuOM<9nEq&z%~D&$xD=VrMRp-Njj<`R zY$lUoGF}E*tt=l523-w7@DPN@?lQ3Kcno_(PC9VUNpvhGMhzRwh61Bfh$ehS(^N4S4oVeXzu@)x zgFIg=)Oh_BH4%XiR{QvfKOD(%C8Tuf(7-vaI?MIu<+_8Qnit2xW^(;F$_$2$d>UMdu=TY`?-;(r*Gtc58wZ4yKBj z?<2`~FYkOCxOD1>{%Ovp_xgwwd3zc?$KUUtm%d%v^WvmE*55n4;Md#C=l<)|T*{%! UMt|TnsXaYC3a#Rw(F z>k4#G!V&XDFdq^EN=0@k6b;*<5vPBpAP{|&6-qvo2`Ly>$`)bqRybu!>p&*+|3d|W zk7x<(1ODyze+otp7OX^(~}#l+%w*i!462Jt#zaU5qp}Cs~w_La8+~=nj6;p_Z%w z7h~4;b|#_sw}8@epTV8!701(~FzJ|zm_|m=p??K<9WHd5Ova)&mwz6b;4LfuJUG~| z_~}#Hblaod!Oh>+!U7u=&FG+nS2y5GGnnEssi#fVnyQA@R15P#t9;Bv(tTl6HY$6* zmcaAR%*;$AiCq35q0*a|$lywQXw@x`lvuL5y86ll-y1 z-t(H8nj#DabKCQs+UCs{xP-xo+RXAULqo$RDjsiC8I+t;SDBPC7@QK;{osMDL z!i-!lce@N8(J0Nz%j@DtM!GlD*FWi5k=j0%T>nnxHkC?U+mkev(HnkwGQr@p=V&9N zG3*y5J ztX{E2jbB<~hlBt{jg0~BYDs(p^k7nzr|qV;^p;P48t(5uppkI@o64BNk`n$S49?rw z=3r-M=lsOPL`zp!S5IA+gAKKC?P`UJ>C!^LIakv!ckR+0!s=hSJ32aAUt3Fz!Qk!} znUqg0E?+x;UhjTKM@M6KcX~#~PgAqAHaE4loV|4i+M=$0CO$r%o^kQbiKWuD%{k>0 zp{4tJ^nci|K^kc#G~BMN)ES#DlOMaLrLDa>`Nj4Dmt|K(|BkwTt0$8=BAy5u`YMvR za-+C-lGhOUZn)`WsPtrhmira=dYeR<%r=!F&#jn7qlu`5pMP`iE%14I;Br;VsZ(2x zcBjS;>t+@g7gMkOGS>cV+W&@`x29=ybaX3+nJRVM@69^s>gw9$>E>pQlOL}P5M|?E zoz{Be*9Y|N*s)_tekoCJj-S%<`=N4TLtP!KzNx7@R=>i_ye%y)?I?I7E4b&5<7=H{ z`qb3aK@NxW)#BT??TxQ1SS%K`ZS|hQ*NpXux78Rt1t%Y+jE+lnrt(h-<;NX`}IZXw!GZjKN~kW|G1i@ zJ`gl@Se+r$Wm*hV{aGv$=9EiqkP2Kb#X7d}*d9sj9NF^F zaG$<`!LYZl@9R1jlc9#gmX>-0{r#zNYLVa1cn?)0*+n3?N1Nqh9?Ro7kKrqIo3!(w zvf^Ut`RweQW8nrqvvwzw%3m3q58s`ipTCNf^7@6g*%vQPl$Dm6pM05zA{BZY?Rr<@ zw|h}bMei7a)M}AKZ2q-Zk#X8t_2)Qn^e7B3lnm6C9O&Gusi|4>$12pf0@NK3R(;e@ z$#yO(DtcH|RduAg)c47^mAZ*P*gZ6+uTY8K)5bf#{?hLHQJKoHj-g?Nm4(F-xhc;q zN5zlqm@j+2Nm1l)nV6fCv(k46p!+7;Q&9P4aS1}9m11GRrenN%aw0KXeNe%;)SKl` ndUZRS9&I+0YJb*kZCeNmm*;?IZJ*^T|LzPY4|;`TNYZ}+S!{y{ literal 0 HcmV?d00001 diff --git a/branches/conlite20/cms/images/SimpleGallery/PopupImageNaviRight.png b/branches/conlite20/cms/images/SimpleGallery/PopupImageNaviRight.png new file mode 100644 index 0000000000000000000000000000000000000000..9be9ee5e3464909faa1b52f7ba663987b1a90a89 GIT binary patch literal 2162 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 B7G?kd literal 0 HcmV?d00001 diff --git a/branches/conlite20/cms/images/glyphicons-halflings.png b/branches/conlite20/cms/images/glyphicons-halflings.png new file mode 100644 index 0000000000000000000000000000000000000000..a9969993201f9cee63cf9f49217646347297b643 GIT binary patch literal 12799 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 literal 0 HcmV?d00001 diff --git a/branches/conlite20/cms/images/ico/apple-touch-icon-114-precomposed.png b/branches/conlite20/cms/images/ico/apple-touch-icon-114-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..dbd92fa5d6b8b70817457f70207c8d25c8081e7b GIT binary patch literal 9686 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 literal 0 HcmV?d00001 diff --git a/branches/conlite20/cms/images/ico/apple-touch-icon-57-precomposed.png b/branches/conlite20/cms/images/ico/apple-touch-icon-57-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..17a7748c348b45b2516e835bb9de24ace254f3ec GIT binary patch literal 2752 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 literal 0 HcmV?d00001 diff --git a/branches/conlite20/cms/images/ico/apple-touch-icon-72-precomposed.png b/branches/conlite20/cms/images/ico/apple-touch-icon-72-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..da2b86c071de00104ffdeee83a8046efa5cfd957 GIT binary patch literal 5609 zcmaJ_XH-*ZyQMdgA}AuD0jWX=EkHt%Kq#R~D53+>5_$+EfzSjJl`2YaQUn1(5ESWM z1?iEFh2EtjT@fzMH#6V;ap#`3&Uwq)dp~XeI*~VwbDOZIjqd5fOVG9=m|>j=M0*^X3WmZupaBSsy)zn#wnzDUccN9PsAvJM=2iqNBSWYo z79(x{8zb$9@j7KwQK??{^RjnzM-u=JXlGYXHKC3AW+8wpN=@h{*ht36OAGDdsuzGm zn*|t~I|jHrLQq22)d8x0&{F{nnqUv`!+3b&p?+#Yf9gU{_rI?}LV!OZ1a~!||0HE) zbOWG;#i0RUX&IoSjG_!cQC3=3UO`DoNeUn*BP#=vkps!f0cDk-@^Vla8NgqU&}lRr z$_a{u>--h#^rR-_LLhiSK_DWLC{2`?#^RhovJeR5w}zY?@Du^W`+E}X{eYhMtA8uN z(RfFks~5o)>k0U+XzzgaA*czRX8NBJFkb)2dgA|T(`my%e)e7uKo_?1=Yf#?Fm?%ITq{jcNcHCU4-+a)r3y@(yp#3s1_Ikmy?HUDT2XpSy^p4 zh$0-UqXbcumsi$;Y3qRh=EAX#J{Yto;cqVLzg+mga(^2E<8>Mtj>ftAqER|HEC%pr z!BE$K&jt3cdVg_I|DKEHzj8sR$$);3^?!}|@2gYq{NDa!+S9{7wnuxOdL4Ia>XTt< zS}Lk@wg@=P-0#b(HM3XZqJQv-<3^I@k`9w#iye!)8$a&T>lhmq=F9bHhoGreh}T!c z*#c#R%DMvLxxB!0pE6;iOUQUu%vO!7$LK@8cG*&Ql~6}MhoI0}P8w!G(t6{`?8^4> zN&NsB;(PO)vV73ytK#A2ljF(l>l=r6qYDyqqi1`xn)TjllSLH_kDsq?Uza#M8$LR| z&8IfqAJVU{UbRd;&t*;#CmC9z!P!?*&q`5C&sWpnNxUteOTW{-VpL{WrI}#ZqrLk~ zKR?{Mt0cQNDY-g0Ix#SdTOsl)LlDz}jlTy+d9KDq8GU74$v&F7P=#1J1`_c*97OuE z=+mo)yJO^Wj={u*-s@~1n-tYKuALZ8n1EHLPlrXy^kGl<%Kl({I>v^n>DR&G=mwE| zTU$bjraGF}XxXk)05^3;0eZY!N12tpttjpO$fM}0HtoUi3C%~E%ncY>yQwwR96Egl(WfwVXDT`ufO(PlelG9) z?vam8J6_URHGvV5-P%29f_LFKplWIDWo%;SZ{VQw?l_j(l!)6+WYy|n(TDu-dQZwO zOFhnTd)N?gH8{(ZeEp~)k0%6F^w$4s1m^g0=tsm-78ExX>yybA@~m{bt^RhFPr6W< z6g?y**)Qt$l)OXEB+XtXJK1W)mTEoaOlr9xTP=RKV%;b^ZEHwRYi@Uv7Ba7+vlrL= zk#gpM0!Ki3U>V(GB6LPit~ng|iZvFH19ysjbni5j?H2Wi^^K@#P zmK@CP#jUq1dER4qZ0>t&|0otaVLr(nxXU(Vl`y|p(^Jd$>1;`{unCk4#xJ))tFDUR z=|b^yIMmTun~3CO*u9(>aowLyFiC&?gHG`G!k*O zl1oju-pJe5EQMi-uVJa{=^%?Z>3C&d5zv%&(&qF=5Uq?vWr zO{hFf_oOJj+bS04$jVR4`4Q`? zIFeT2?h+7=S=2?=_8iN6+X$sJwny%jenX(NNbCbI3~bVED)ZURkEuSyr3^Wm(vK?J zKr>=yt{8}R#A56>%c0X&u}o zIQq$NnZWHr3XRt^W41UfbnkJWVHD?ocBCiW@3d3lCJUc~igm?OyFz`i4Ms zb6VH9&SXt|sxYH|08;2{Hp2ThWy*6=EHtLYrHBq3LB1^s2p3qI-Gpp7F+Pd~kDbY$ zZ7I=IB4w2E_P6>t)pYgIaujer)dT3Ayqo1c2Cldd=6m1iP? zP36-f9EOU?0vuc!pqXCT)mZu%qqmE^YCf+G9FMkwwrOaznnh=iyy{hcWKdO{fUZX^ zUwWW1)Dw11zg5!$u$n;eL}RZ92TirB!R{Zk7Y8m{3?}V@R^L9y`v&>bGo#fGC4s94 zFY(}Z#6?VTD8F&t9i98juLrb(zdwHhOy{hzWp4{_LUMdo zRh|v?Cy8q-M$9T}kM0h;(90Ucdh9GJlu{<%yMM^g(TTrh4@vA)Nu=jIlvURDl5jpOllPyBS$^K; z0t@W!De#*y?p1I;F1%`dQa3wWQZBXLauQi&C;>|kdc@T#V#4 z4!*%Mi8CmHCbf5LjqZ{fEMb4eayOKDv(Z=s-uk=@d#4E=kXdlgiY4?$h1n6YscNw~j~|(=p#W7boKBpr306=XXfds{7!R zgnLsnKi*Y2sG(UKX2KS{n3l0Jyx+t=<6yZD{%~J{a?oN|wjvhp6M-|0J*RQ}J`R}H zYqsbWHIRnNvW~`=Q3nROg>jg#>ockBc@)tJ#N`zYi8cyqI|x|~FNIegQ|!f^<%cR* z^~5Q8NwKpKOfQ~tSy0MqPcY!^v)Rb?6h2xAr3%AB%6Pgi31nVWO-Cdo7_9eOJ70-> zdttZFIpuSKJ&d4NgggfuYe}82^v`yRg zbSqT~4f~0Hp!~6a^cV**-FfdnVqZU~y6q^orkrXbokq#mRTSO+OiQe&A&iQQOX+cm z-8LurdtW9Na+6uYdLk{c^u~`=Vln*ww2?Xog4-8+R$Rpk?|r=t=r)UeenItGHPr!d z{^4~HIc(I3;T$@+dEuSKoEhqQINN+lkG%4JBwxDjQbE;;#E$QUi0e|-#3qw3ts5ez1-vreACxhMl0W!O^LLB5MDi7nq&Y&WYOMq%iwl!P#w50>>~%eTtvgOLHsWB zvZs$(Oun3&v6;mF8eeM4FXd$3XJM%S3|nDN_Kle967cvr8pzY>!+pdi+V{A#j1ls< z-tvQ~B}I%mLCo}_uJIOLu+s-adXVz@inA5unQy>>Y{qQ;guo)V-551}-tHyfcHN+y zZM8XhPj9<;>;qSQ!XG5Ghtu?jS`_?6S}aj!c0*J9G4wETc0qok+=L{4rHVu3g?D?> z`!0MAzY18{?Ri*mVae+CY0bwFtQ*KJnPibM|ULU4zp+Fom=JI}Lv4hOSL2UqhV zJlKXm=2|x|eCa$^x>0jX>ogJFisfahu~s7IrBRo~EwuR?U0LCY$#3LihI<-3_v}AF!2L5KJ7}jH5=q$)>NlU-we5HLOaJqr0sScW|v~`@2uuNqW<^P&n zUIAxm_+)sXpKTzk3TkJ!6;F0;#K+OFt?gsPl;E39-?H`irQ734Or z`y&AVE3>&}<;hg9)&NN%f2i7vHPA^}5#uMQE;{-4cPh*pf7pI|nY$JFQ%d{uJ$}-Am=$S4+Ce^zBxeLVv}U z@0v`|K)Ft)rS0p-nhSu;@4uSklWr(z<~DF7y~^oQH9D9TJ>Z+$a9}srKZmJnR^`_?mwR?Ib?` zQ(#T4+xYHz#jb;eySL~zuO0qO(TO&c5t-N9BhYz2=$^bgwMHyxO$tG1)0u&Nt=86C#+u(5X1atKM>G|Vb65Jh%Qec673bZQioFor1v$@_OtT;7(7 z9J*~E&?XFCNS_P3c}5V@i2|DrY`5$;XylyV4NypFh$uB)dGzKET}jYlh=x>tWyI3E zo3E|D1yV-D1I-LEUxj^Te7xt*;!H8xYb?ef%jhp3(zH99yz?T12X;B~UsjnR%0((W zOg8H@&pmJ#ZW-d1TC~n=HOkFnOaJkPe=a)VD*O2@ zqA5A(ZFOceAo;VI=0MK22C_1C$4>Cse(AuJ&t2_$9Zwwr-}s{QiZTSFVfv(jXeah& z9X+VmWj%c+1Uo`d9|%}VvrcRp@s@0a_&pvS|GsMa z*PD=(8KfG^*B@wgy~)*v$U7@19JWd-b-?$%nZ|!kHI*;q>k@Tr zMa2HYiYHLDOvAo1hQ&Db;9WJGjft@){0Rq)zJ3um2kJceF*||`s85)xIaDc6fsFCr zGr8nzxNK~rl=bsR=fu^P!I=ioMc4yx!=Q7E(kIfNy*;BcL=p&PiHvKj6{8PF2CoVb z%}jngYZ@$&jX#b$$~?Z8Utumb$e8Jg%2Rt+uy_9;KR+I*E0&h`YAEa_43vI}QilTa z3hejMVk`)V-8T=^`;7%%qYqxKNUri4vB28EoQ~NF;}^K?AECOE3U_PfYyPJ9XTk191yUyTKR zp7M8u?@jkLc{U=(T<**@9oQ0#EV%3S`r5qXo<`Fd5ssRvXsLGJC=0a)J171A`HIjs KhL>vEk^cu)uQz%C literal 0 HcmV?d00001 diff --git a/branches/conlite20/cms/images/ico/social_icons_sprite.png b/branches/conlite20/cms/images/ico/social_icons_sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..f79efb10eb937527439779905747faa65f76349e GIT binary patch literal 26603 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 mqN4)*>)ro%vq2_9wEqM0zKDvz%!G9S0000 diff --git a/branches/conlite20/cms/images/logo-small.png b/branches/conlite20/cms/images/logo-small.png new file mode 100644 index 0000000000000000000000000000000000000000..f9bc9dd6651cf84140c6beb93d51b7c38705b868 GIT binary patch literal 3455 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 literal 0 HcmV?d00001 diff --git a/branches/conlite20/cms/images/logo.png b/branches/conlite20/cms/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..edcf5ec63eefc087319bc372bc7b33e858bc0bdc GIT binary patch literal 10376 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 Zf|%uCf?Wv(;IDrJ6=YRqK1-Q}{0~sER + * + * $Id: Contenido_NavMain_Util.class.php 450 2016-07-20 11:11:12Z oldperl $ + */ + +class Contenido_NavMain_Util { + /** + * Recursive Loop over all (sub)categories. + * Each level will be assigned a css class navmainStandardLevel_x + * + * @param Contenido_Category $oCategory + * @param Contenido_FrontendNavigation $oFrontendNavigation + * @param Template $oTpl + * @param string $sUrlStyle + * @param array $aCfg + * @param int $iLang + * @param array $aLevelInfo Information for marking active cat per levels + * @param array $aDepthInfo Info on level depth / where to stop. Format: array(iCurrentLoopCount, iMaxLoopCount) + * @return void + */ + public static function loopCats(Contenido_Category $oCategory, Contenido_FrontendNavigation $oFrontendNavigation, Template $oTpl, array $aCfg, $iLang, array $aLevelInfo, $iCurrentPageIdcat, array $aDepthInfo = array()) { + $aDepthInfo[0] = isset($aDepthInfo[0]) ? $aDepthInfo[0] + 1 : 1; + $aDepthInfo[1] = isset($aDepthInfo[1]) ? $aDepthInfo[1] : 1; + // display current item + $iItemLevel = $oFrontendNavigation->getLevel($oCategory->getIdCat()); + if (!isset($aLevelInfo[$oCategory->getIdCat()])) { + $aLevelInfo[$oCategory->getIdCat()] = array(); + } + $oCurrentSubcategories = $oFrontendNavigation->getSubCategories($oCategory->getIdCat()); + $aLevelInfo[$oCategory->getIdCat()]['has_children'] = $oCurrentSubcategories->count() > 0; + $aLevelInfo[$oCategory->getIdCat()]['first_child_item'] = -1; + $aLevelInfo[$oCategory->getIdCat()]['last_child_item'] = -1; + $bMarkActive = $oCategory->getIdCat() == $iCurrentPageIdcat || $oFrontendNavigation->isInPathToRoot($oCategory->getIdCat(), $iCurrentPageIdcat); + if ($oCurrentSubcategories->count() > 0) { + $aLevelInfo[$oCategory->getIdCat()]['first_child_item'] = $oCurrentSubcategories[0]->getIdCat(); + $aLevelInfo[$oCategory->getIdCat()]['last_child_item'] = $oCurrentSubcategories[$oCurrentSubcategories->count()-1]->getIdCat(); + } + // this is just for sample client - modify to your needs! + if (($aCfg['url_builder']['name'] == 'front_content') || ($aCfg['url_builder']['name'] == 'MR')) { + $aParams = array('lang' => $iLang, 'idcat' => $oCategory->getIdCat()); + } else { + $aParams = array('a' => $oCategory->getIdCat(), + 'idcat' => $oCategory->getIdCat(), // needed to build category path + 'lang' => $iLang, // needed to build category path + 'level' => 1); // needed to build category path + } + // fill template with values + $oTpl->set('d', 'name', $oCategory->getCategoryLanguage()->getName()); + $oTpl->set('d', 'css_level', $iItemLevel); + $oTpl->set('d', 'css_first_item', ($aLevelInfo[$oCategory->getIdParent()]['first_child_item'] == $oCategory->getIdCat() ? ' first' : '')); + $oTpl->set('d', 'css_last_item', ($aLevelInfo[$oCategory->getIdParent()]['last_child_item'] == $oCategory->getIdCat() ? ' last' : '')); + $oTpl->set('d', 'css_active_item', ($bMarkActive === true ? ' active' : '')); + try { + $oTpl->set('d', 'url', Contenido_Url::getInstance()->build($aParams)); + } catch (InvalidArgumentException $e) { + $oTpl->set('d', 'url', '#'); + } + $oTpl->next(); + // continue until max level depth + if ($aDepthInfo[1] > $aDepthInfo[0]) { + // check if current item has sub-items to be displayed + $bShowFollowUps = ($oCategory->getIdCat() == $iCurrentPageIdcat || $oFrontendNavigation->isInPathToRoot($oCategory->getIdCat(), $iCurrentPageIdcat)) + ? true : false; + if ($bShowFollowUps === true && $oCurrentSubcategories->count() > 0) { + $oSubCategories = $oCurrentSubcategories; + foreach ($oSubCategories as $oSubCategory) { + self::loopCats($oSubCategory, $oFrontendNavigation, $oTpl, $aCfg, $iLang, $aLevelInfo, $iCurrentPageIdcat, $aDepthInfo); + } + } + } + } +} +?> \ No newline at end of file diff --git a/branches/conlite20/cms/includes/Util/Modules/Contenido_Sitemap_Util.class.php b/branches/conlite20/cms/includes/Util/Modules/Contenido_Sitemap_Util.class.php new file mode 100644 index 0000000..3fc3b1b --- /dev/null +++ b/branches/conlite20/cms/includes/Util/Modules/Contenido_Sitemap_Util.class.php @@ -0,0 +1,66 @@ + + * + * $Id: Contenido_Sitemap_Util.class.php 450 2016-07-20 11:11:12Z oldperl $ + */ +class Contenido_Sitemap_Util { + /** + * Recursive Loop over all (sub)categories. + * Each level will be assigned a css class sitemapStandardLevel_x + * + * @param Contenido_Category $oCategory + * @param Contenido_FrontendNavigation $oFrontendNavigation + * @param Template $oTpl + * @param string $sUrlStyle + * @param array $aCfg + * @param int $iLang + * @param array $aDepthInfo Info on level depth / where to stop. Format: array(iCurrentLoopCount, iMaxLoopCount) + * @return void + */ + public static function loopCats(Contenido_Category $oCategory, Contenido_FrontendNavigation $oFrontendNavigation, Template $oTpl, $sUrlStyle, array $aCfg, $iLang, array $aDepthInfo = array()) { + $aDepthInfo[0] = isset($aDepthInfo[0]) ? $aDepthInfo[0] + 1 : 1; + $aDepthInfo[1] = isset($aDepthInfo[1]) ? $aDepthInfo[1] : 1; + // display current item + $iItemLevel = $oFrontendNavigation->getLevel($oCategory->getIdCat()); + // this is just for sample client - modify to your needs! + if (($aCfg['url_builder']['name'] == 'front_content') || ($aCfg['url_builder']['name'] == 'MR')) { + $aParams = array('lang' => $iLang, 'idcat' => $oCategory->getIdCat()); + } else { + $aParams = array('a' => $oCategory->getIdCat(), + 'idcat' => $oCategory->getIdCat(), // needed to build category path + 'lang' => $iLang, // needed to build category path + 'level' => 1); // needed to build category path + } + // fill template with values + $oTpl->set('d', 'name', $oCategory->getCategoryLanguage()->getName()); + $oTpl->set('d', 'css_level', $iItemLevel); + try { + $oTpl->set('d', 'url', Contenido_Url::getInstance()->build($aParams)); + } catch (InvalidArgumentException $e) { + $oTpl->set('d', 'url', '#'); + } + $oTpl->next(); + // continue until max level depth + if ($aDepthInfo[1] > $aDepthInfo[0]) { + // check if current item has sub-items + $oSubCategories = $oFrontendNavigation->getSubCategories($oCategory->getIdCat()); + if ($oSubCategories->count() > 0) { + foreach ($oSubCategories as $oSubCategory) { + self::loopCats($oSubCategory, $oFrontendNavigation, $oTpl, $sUrlStyle, $aCfg, $iLang, $aDepthInfo); + } + } + } + } +} +?> \ No newline at end of file diff --git a/branches/conlite20/cms/includes/class.concache.php b/branches/conlite20/cms/includes/class.concache.php new file mode 100644 index 0000000..72cadcc --- /dev/null +++ b/branches/conlite20/cms/includes/class.concache.php @@ -0,0 +1,531 @@ + + * @copyright four for business AG + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * $Id: class.concache.php 450 2016-07-20 11:11:12Z oldperl $: + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +class cConCache{ + + /** + * PEAR Cache Output Object + * + * @var obj $_oPearCache + */ + var $_oPearCache; + + /** + * Flag 2 activate caching. + * + * @var bool $_bEnableCaching + */ + var $_bEnableCaching = false; + + /** + * Flag for output of debug informations. + * + * @var bool $_bDebug + */ + var $_bDebug = false; + + /** + * Flag 2 print html comment including some debug informations. + * + * @var bool $_bHtmlComment + */ + var $_bHtmlComment = false; + + /** + * Start time of caching. + * + * @var int $_iStartTime + */ + var $_iStartTime; + + /** + * Option array 4 generating cache identifier (e. g. $_GET,$_POST, $_COOKIE, ...). + * + * @var array _aIDOptions + */ + var $_aIDOptions; + + /** + * Option array 4 pear caching. + * + * @var array $_aIDOptions + */ + var $_aCacheOptions; + + /** + * Handler array 2 store code, beeing executed on some events. + * We have actually two events: + * - 'beforeoutput': code to execute before doing the output + * - 'afteroutput' code to execute after output + * + * @var array $_aEventCode + */ + var $_aEventCode; + + /** + * Unique identifier for caching. + * + * @var string $_sID + */ + var $_sID; + + /** + * Directory 2 store cached output. + * + * @var string $_sDir + */ + var $_sDir = 'cache/'; + + /** + * Subdirectory 2 store cached output. + * + * @var string $_sGroup + */ + var $_sGroup = 'default'; + + /** + * Substring 2 add as prefix to cache-filename. + * + * @var string $_sPrefix + */ + var $_sPrefix = 'cache_'; + + /** + * Default lifetime of cached files. + * + * @var int $_iLifetime + */ + var $_iLifetime = 3600; + + /** + * Used 2 store debug message. + * + * @var string $_sDebugMsg + */ + var $_sDebugMsg = ''; + + /** + * HTML code template used for debug message. + * + * @var string $_sDebugTpl + */ + var $_sDebugTpl = '

%s
'; + + /** + * HTML comment template used for generating some debug infos. + * + * @var string $_sDebugTpl + */ + var $_sHtmlCommentTpl = ' + +'; + + /** + * Constructor of cConCache + * + * @param string $cachedir Directory 2 cache files + * @param string $cachegroup Subdirectory 2 cache files + * @param string $cacheprefix Prefixname 2 add 2 cached files + */ + function cConCache($cachedir=null, $cachegroup=null, $cacheprefix=null){ + // wherever you want the cache files + if(!is_null($cachedir)){ + $this->_sDir = $cachedir; + } + + // subdirectory where you want the cache files + if(!is_null($cachegroup)){ + $this->_sGroup = $cachegroup; + } + + // optional a filename prefix + if(!is_null($cacheprefix)){ + $this->_sPrefix = $cacheprefix; + } + + // config options are passed to the cache as an array + $this->_aCacheOptions = array('cache_dir' => $this->_sDir, 'filename_prefix' => $this->_sPrefix); + + } // function cConCache() + + + /** + * Set/Get the flag 2 enable caching. + * + * @param bool $enable True 2 enable chaching or false + * @return mixed Enable flag or void + */ + function enable($enable=null){ + if(!is_null($enable) && is_bool($enable)){ + $this->_bEnableCaching = $enable; + } else { + return $this->_bEnableCaching; + } + } // function enable() + + + /** + * Set/Get the flag 2 debug cache object (prints out miss/hit state with execution time). + * + * @param bool $debug True 2 activate debugging or false. + * @return mixed Debug flag or void + */ + function debug($debug){ + if(!is_null($debug) && is_bool($debug)){ + $this->_bDebug = $debug; + } else { + return $this->_bDebug; + } + } // function debug() + + + /** + * Set/Get flag 2 print out cache info as html comment. + * + * @param bool $htmlcomment True debugging or false. + * @return void Htmlcomment flag or void + */ + function htmlComment($htmlcomment){ + if(!is_null($htmlcomment) && is_bool($htmlcomment)){ + $this->_bHtmlComment = $htmlcomment; + } else { + return $this->_bHtmlComment; + } + } // function htmlComment() + + + /** + * Set/Get caching lifetime in seconds. + * + * @param int $seconds New Lifetime in seconds + * @return mixed Actual lifetime or void + */ + function lifetime($seconds=null){ + if ($seconds != null && is_numeric($seconds) && $seconds > 0) { + $this->_iLifetime = $seconds; + } else { + return $this->_iLifetime; + } + } // function lifetime() + + + /** + * Set/Get template to use on printing the chache info. + * + * @param string $template Template string including the '%s' format definition. + * @return void + */ + function infoTemplate($template){ + $this->_sDebugTpl = $template; + } // function infoTemplate() + + + /** + * Add option 4 caching (e. g. $_GET,$_POST, $_COOKIE, ...). Used 2 generate the id for caching. + * + * @param string $name Name of option + * @param string $option Value of option (any variable) + * @return void + */ + function addOption($name, $option){ + $this->_aIDOptions[$name] = $option; + } // function addOption() + + + /** + * Returns information cache hit/miss and execution time if caching is enabled. + * + * @return string Information about cache if caching is enabled, otherwhise nothing. + */ + function getInfo(){ + if(!$this->_bEnableCaching){ return; } + return $this->_sDebugMsg; + } // function getInfo() + + + /** + * Handles PEAR caching. The script will be terminated by calling die(), if any cached + * content is found. + * + * @param int $iPageStartTime Optional start time, e. g. start time of main script + * @return void + */ + function start($iPageStartTime=null){ + if(!$this->_bEnableCaching){ return; } + + $this->_iStartTime = $this->_getMicroTime(); + + // set cache object and unique id + $this->_initPEARCache(); + + // check if it's cached and start the output buffering if neccessary + if ($content = $this->_oPearCache->start($this->_sID, $this->_sGroup)) { + + //raise beforeoutput event + $this->_raiseEvent('beforeoutput'); + + $iEndTime = $this->_getMicroTime(); + if ($this->_bHtmlComment) { + $time = sprintf("%2.4f", $iEndTime - $this->_iStartTime); + $exp = date('Y-m-d H:i:s', $this->_oPearCache->container->expires); + $content .= sprintf($this->_sHtmlCommentTpl, 'HIT', $time.' sec.', $exp); + if ($iPageStartTime != null && is_numeric($iPageStartTime)) { + $content .= ''; + } + } + + if ($this->_bDebug) { + $info = sprintf("HIT: %2.4f sec.", $iEndTime - $this->_iStartTime); + $info = sprintf($this->_sDebugTpl, $info); + $content = str_ireplace('', $info."\n", $content); + } + + echo $content; + + //raise afteroutput event + $this->_raiseEvent('afteroutput'); + + die(); + } + } // function start() + + + /** + * Handles ending of PEAR caching. + * + * @return void + */ + function end(){ + if (!$this->_bEnableCaching){ return; } + + // this might go into your auto_append file. store the data into the cache, default lifetime is set in $this->_iLifetime + $this->_oPearCache->endPrint($this->_iLifetime, __FILE__ . ' ' . filemtime(__FILE__)); + + if ($this->_bDebug) { + $this->_sDebugMsg .= "\n".sprintf("MISS: %2.4f sec.\n", $this->_getMicroTime() - $this->_iStartTime); + $this->_sDebugMsg = sprintf($this->_sDebugTpl, $this->_sDebugMsg); + } + } // function end() + + + /** + * Removes any cached content if exists. + * This is nesessary to delete cached articles, if they are changed on backend. + * + * @return void + */ + function removeFromCache(){ + // set cache object and unique id + $this->_initPEARCache(); + $bExists = $this->_oPearCache->isCached($this->_sID, $this->_sGroup); + if ($bExists) { + $this->_oPearCache->remove($this->_sID, $this->_sGroup); + } + } // function removeFromCache() + + + /* + * Creates one-time a instance of PEAR cache output object and also the unique id, + * if propery $this->_oPearCache is not set. + * + * @return void + * @access private + */ + function _initPEARCache(){ + if (is_object($this->_oPearCache)) { + return; + } + + // create a output cache object mode - file storage + cInclude('pear', 'Cache/Output.php'); + $this->_oPearCache = new Cache_Output('file', $this->_aCacheOptions); + + // generate an ID from whatever might influence the script behavoiur + $this->_sID = $this->_oPearCache->generateID($this->_aIDOptions); + } // function _initPEARCache() + + + /** + * Raises any defined event code by using eval(). + * + * @param string $name Name of event 2 raise + * @return void + * @access private + */ + function _raiseEvent($name){ + // check if event exists, get out if not + if (!isset($this->_aEventCode[$name]) && !is_array($this->_aEventCode[$name])) { + return; + } + + // loop array and execute each defined php-code + foreach ($this->_aEventCode[$name] as $code) { + eval($code); + } + + } // function _raiseEvent() + + + /** + * Returns microtime (Unix-Timestamp), used to calculate time of execution. + * + * @return float Timestamp + * @access private + */ + function _getMicroTime(){ + $mtime = explode(' ', microtime()); + $mtime = $mtime[1] + $mtime[0]; + return $mtime; + } // function _getMicroTime() + +} // class cConCache + + + +/** +* @class cConCacheHandler +* @brief Class cConCacheHandler. This is used to set configuration +* and to manage caching output +* @version 0.9 +* @date 07.07.2006 +* @author Murat Purc +* @copyright � Murat Purc 2006 +*/ +class cConCacheHandler extends cConCache { + + /** + * Constructor of cConCacheHandler. + * Does some checks and sets the configuration of cache object. + * + * @param array $aConf Configuration of caching as follows: + * - $a['excludecontenido'] bool. don't cache output, if we have a contenido variable, + * e. g. on calling frontend preview from backend + * - $a['enable'] bool. activate caching of frontend output + * - $a['debug'] bool. compose debuginfo (hit/miss and execution time of caching) + * - $a['infotemplate'] string. debug information template + * - $a['htmlcomment'] bool. add a html comment including several debug messages to output + * - $a['lifetime'] int. lifetime in seconds 2 cache output + * - $a['cachedir'] string. directory where cached content is 2 store. + * - $a['cachegroup'] string. cache group, will be a subdirectory inside cachedir + * - $a['cacheprefix'] string. add prefix 2 stored filenames + * - $a['idoptions'] array. several variables 2 create a unique id, if the output depends + * on them. e. g. array('uri'=>$_SERVER['REQUEST_URI'],'post'=>$_POST,'get'=>$_GET); + * @param obj $db Reference 2 Contenido database object + * @param int $iCreateCode Flag of createcode state from table con_cat_art + */ + function cConCacheHandler($aConf, &$db, $iCreateCode=null) { + + // check if caching is allowed on contenido variable + if ($aConf['excludecontenido'] == true) { + if (isset($GLOBALS['contenido'])) { + // contenido variable exists, set state and get out here + $this->_bEnableCaching = false; + return; + } + } + + // set enable state of caching + if (is_bool($aConf['enable'])) { + $this->_bEnableCaching = $aConf['enable']; + } + if ($this->_bEnableCaching == false) { + return; + } + + // check if current article shouldn't be cached (by stese) + $sExcludeIdarts = getEffectiveSetting('cache', 'excludeidarts', false); + if ($sExcludeIdarts && strlen($sExcludeIdarts)>0) { + $sExcludeIdarts = preg_replace("/[^0-9,]/", '', $sExcludeIdarts); + $aExcludeIdart = explode(',', $sExcludeIdarts); + if (in_array($GLOBALS['idart'], $aExcludeIdart)) { + $this->_bEnableCaching = false; + return; + } + } + + $this->_oDB = $db; + + // set caching configuration + parent::cConCache($aConf['cachedir'], $aConf['cachegroup']); + $this->debug($aConf['debug']); + $this->htmlComment($aConf['htmlcomment']); + $this->lifetime($aConf['lifetime']); + $this->infoTemplate($aConf['infotemplate']); + foreach ($aConf['idoptions'] as $name => $var) { + $this->addOption($name, $var); + } + + if (is_array($aConf['raiseonevent'])) { + $this->_aEventCode = $aConf['raiseonevent']; + } + + // check, if code is to create + $this->_bEnableCaching = !$this->_isCode2Create($iCreateCode); + if ($this->_bEnableCaching == false) { + $this->removeFromCache(); + } + + } // function cConCacheHandler() + + + /** + * Checks, if the create code flag is set. Output will be loaded from cache, if no code is 2 create. + * It also checks the state of global variable $force. + * + * @param mixed $iCreateCode State of create code (0 or 1). The state will be loaded from database if value is "null" + * @return bool True if code is to create, otherwhise false. + * @access private + */ + function _isCode2Create($iCreateCode){ + if ($this->_bEnableCaching == false) { + return; + } + + // check content of global variable $force, get out if is's set to '1' + if (isset($GLOBALS['force']) && is_numeric($GLOBALS['force']) && $GLOBALS['force'] == 1) { + return true; + } + + if (is_null($iCreateCode)) { + // check if code is expired + + $oApiCatArtColl = new cApiCategoryArticleCollection('idart="'.$GLOBALS['idart'].'" AND idcat="'.$GLOBALS['idcat'].'"'); + if ($oApiCatArt = $oApiCatArtColl->next()) { + $iCreateCode = $oApiCatArt->get('createcode'); + unset($oApiCatArt); + } + unset($oApiCatArtColl); + } + + return ($iCreateCode == 1) ? true : false; + } // function _isCode2Create() + + +} // class cConCacheHandler + +?> \ No newline at end of file diff --git a/branches/conlite20/cms/includes/class.input.helper.php b/branches/conlite20/cms/includes/class.input.helper.php new file mode 100644 index 0000000..fc7b816 --- /dev/null +++ b/branches/conlite20/cms/includes/class.input.helper.php @@ -0,0 +1,573 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * $Id: class.input.helper.php 450 2016-07-20 11:11:12Z oldperl $: + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +// Select box with additional functions for category and article selection +class cHTMLInputSelectElement extends cHTMLSelectElement +{ + /** + * Constructor. Creates an HTML select field (aka "DropDown"). + * + * @param string $sName Name of the element + * @param int $iWidth Width of the select element + * @param string $sID ID of the element + * @param string $bDisabled Item disabled flag (non-empty to set disabled) + * @param int $iTabIndex Tab index for form elements + * @param string $sAccesskey Key to access the field + * + * @return none + **/ + function cHTMLInputSelectElement ($sName, $iWidth = "", $sID = "", $bDisabled = false, $iTabIndex = null, $sAccessKey = "") + { + cHTMLSelectElement :: __construct($sName, $iWidth, $sID, $bDisabled, $iTabIndex, $sAccessKey); + } + + + /** + * Function addArticles. Adds articles to select box values. + * + * @param int $iIDCat idcat of the category to be listed + * @param bool $bColored Add color information to option elements + * @param bool $bArtOnline If true, only online articles will be added + * @param string $sSpaces Just some " " to show data hierarchically (used in conjunction with addCategories) + * + * @return int Number of items added + **/ + function addArticles ($iIDCat, $bColored = false, $bArtOnline = true, $sSpaces = "") + { + global $cfg, $lang; + + $oDB = new DB_Contenido; + + if (is_numeric($iIDCat) && $iIDCat > 0) + { + $sSQL = "SELECT tblArtLang.title AS title, tblArtLang.idartlang AS idartlang, tblCatArt.idcat AS idcat, "; + $sSQL .= "tblCatArt.idcatart AS idcatart, tblCatArt.is_start AS isstart, tblArtLang.online AS online, "; + $sSQL .= "tblCatLang.startidartlang as idstartartlang "; + $sSQL .= "FROM ".$cfg["tab"]["art_lang"]." AS tblArtLang, ".$cfg["tab"]["cat_art"]." AS tblCatArt, "; + $sSQL .= $cfg["tab"]["cat_lang"]." AS tblCatLang "; + $sSQL .= "WHERE tblCatArt.idcat = '".Contenido_Security::toInteger($iIDCat)."' AND tblCatLang.idcat = tblCatArt.idcat AND tblCatLang.idlang = tblArtLang.idlang AND "; + + if ($bArtOnline) { + $sSQL .= "tblArtLang.online = '1' AND "; + } + + $sSQL .= "tblArtLang.idart = tblCatArt.idart AND tblArtLang.idlang = '".Contenido_Security::escapeDB($lang, $oDB)."' "; + if ($cfg["is_start_compatible"] == true) { + $sSQL .= "ORDER BY tblCatArt.is_start DESC, tblArtLang.title"; // Getting start article as first article + } else { + $sSQL .= "ORDER BY tblArtLang.title"; + } + + $oDB->query($sSQL); + + $iCount = $oDB->num_rows(); + if ($iCount == 0) { + return 0; + } else { + $iCounter = count($this->_options); + while ($oDB->next_record()) + { + // Generate new option element + $oOption = new cHTMLOptionElement($sSpaces."   ".substr(urldecode($oDB->f("title")), 0, 32), $oDB->f("idcatart")); + + if ($bColored) + { + $bIsStartArticle = false; + if ($cfg["is_start_compatible"] == true && $oDB->f("isstart") == 1) { + // Compatible mode and "start article" flag is set + $bIsStartArticle = true; + } else if ($cfg["is_start_compatible"] != true && $oDB->f("idstartartlang") == $oDB->f("idartlang")) { + // No compatible mode and current article is start article (idstartartlang is the same for all records within a category) + $bIsStartArticle = true; + } + + if ($bIsStartArticle) + { + if ($oDB->f("online") == 0) { + // Start article, but offline -> red + $oOption->setStyle("color: #ff0000;"); + } else { + // Start article -> blue + $oOption->setStyle("color: #0000ff;"); + } + } else if ($oDB->f("online") == 0) { + // Offline article -> grey + $oOption->setStyle("color: #666666;"); + } + } + + // Add option element to the list + $this->addOptionElement($iCounter, $oOption); + $iCounter++; + } + return $iCount; + } + } else { + return 0; + } + } + + /** + * Function addCategories. Adds category elements (optionally including articles) to select box values. + * Note: Using "with articles" adds the articles also - but the categories will get a negative value! + * There is no way to distinguish between a category id and an article id... + * + * @param int $iMaxLevel Max. level shown (to be exact: except this level) + * @param bool $bColored Add color information to option elements + * @param bool $bCatVisible If true, only add idcat as value, if cat is visible + * @param bool $bCatPublic If true, only add idcat as value, if cat is public + * @param bool $bWithArt Add also articles per category + * @param bool $bArtOnline If true, show only online articles + * + * @return int Number of items added + **/ + function addCategories ($iMaxLevel = 0, $bColored = false, $bCatVisible = true, $bCatPublic = true, + $bWithArt = false, $bArtOnline = true) + { + global $cfg, $client, $lang; + + $oDB = new DB_Contenido; + + $sSQL = "SELECT tblCat.idcat AS idcat, tblCatLang.name AS name, "; + $sSQL .= "tblCatLang.visible AS visible, tblCatLang.public AS public, tblCatTree.level AS level "; + $sSQL .= "FROM ".$cfg["tab"]["cat"]." AS tblCat, ".$cfg["tab"]["cat_lang"]." AS tblCatLang, "; + $sSQL .= $cfg["tab"]["cat_tree"]." AS tblCatTree "; + $sSQL .= "WHERE tblCat.idclient = '".Contenido_Security::escapeDB($client, $oDB)."' AND tblCatLang.idlang = '".Contenido_Security::escapeDB($lang, $oDB)."' AND "; + $sSQL .= "tblCatLang.idcat = tblCat.idcat AND tblCatTree.idcat = tblCat.idcat "; + + if ($iMaxLevel > 0) { + $sSQL .= "AND tblCatTree.level < '".Contenido_Security::escapeDB($iMaxLevel, $oDB)."' "; + } + $sSQL .= "ORDER BY tblCatTree.idtree"; + + $oDB->query($sSQL); + + $iCount = $oDB->num_rows(); + if ($iCount == 0) { + return false; + } else { + $iCounter = count($this->_options); + while ($oDB->next_record()) + { + $sSpaces = ""; + $sStyle = ""; + $iID = $oDB->f("idcat"); + + for ($i = 0; $i < $oDB->f("level"); $i++) { + $sSpaces .= "   "; + } + + // Generate new option element + if (($bCatVisible && $oDB->f("visible") == 0) || + ($bCatPublic && $oDB->f("public") == 0)) { + // If category has to be visible or public and it isn't, don't add value + $sValue = ""; + } else if ($bWithArt) { + // If article will be added, set negative idcat as value + $sValue = "-".$iID; + } else { + // Show only categories - and everything is fine... + $sValue = $iID; + } + $oOption = new cHTMLOptionElement($sSpaces."> ".urldecode($oDB->f("name")), $sValue); + + // Coloring option element, restricted shows grey color + $oOption->setStyle("background-color: #EFEFEF"); + if ($bColored && ($oDB->f("visible") == 0 || $oDB->f("public") == 0)) { + $oOption->setStyle("color: #666666;"); + } + + // Add option element to the list + $this->addOptionElement($iCounter, $oOption); + + if ($bWithArt) { + $iArticles = $this->addArticles($iID, $bColored, $bArtOnline, $sSpaces); + $iCount += $iArticles; + } + $iCounter = count($this->_options); + } + } + return $iCount; + } + + /** + * Function addTypesFromArt. Adds types and type ids which are available for the specified article + * + * @param int $iIDCatArt Article id + * @param string $sTypeRange Komma separated list of Contenido type ids which may be in the resulting list (e.g. '1','17','28') + * + * @return int Number of items added + **/ + function addTypesFromArt ($iIDCatArt, $sTypeRange = "") + { + global $cfg, $lang; + + $oDB = new DB_Contenido; + + if (is_numeric($iIDCatArt) && $iIDCatArt > 0) + { + $sSQL = "SELECT tblContent.typeid AS typeid, tblContent.idtype AS idtype, tblType.type AS type, tblType.description AS description, "; + $sSQL .= "tblContent.value AS value "; + $sSQL .= "FROM ".$cfg["tab"]["content"]." AS tblContent, ".$cfg["tab"]["art_lang"]." AS tblArtLang, "; + $sSQL .= $cfg["tab"]["cat_art"]." AS tblCatArt, ".$cfg["tab"]["type"]." AS tblType "; + $sSQL .= "WHERE tblContent.idtype = tblType.idtype AND tblContent.idartlang = tblArtLang.idartlang AND "; + $sSQL .= "tblArtLang.idart = tblCatArt.idart AND tblArtLang.idlang = '". Contenido_Security::escapeDB($lang, $oDB)."' AND tblCatArt.idcatart = '". Contenido_Security::toInteger($iIDCatArt)."' "; + + if ($sTypeRange != "") { + $sSQL .= "AND tblContent.idtype IN (". Contenido_Security::escapeDB($sTypeRange, $oDB).") "; + } + + $sql .= "ORDER BY tblContent.idtype, tblContent.typeid"; + + $oDB->query($sSQL); + + $iCount = $oDB->num_rows(); + if ($iCount == 0) { + return false; + } else { + while ($oDB->next_record()) + { + $sTypeIdentifier = "tblData.idtype = '".$oDB->f('idtype')."' AND tblData.typeid = '".$oDB->f('typeid')."'"; + + // Generate new option element + $oOption = new cHTMLOptionElement($oDB->f('type')."[".$oDB->f('typeid')."]: ".substr(strip_tags(urldecode($oDB->f("value"))), 0, 50), $sTypeIdentifier); + + // Add option element to the list + $this->addOptionElement($sTypeIdentifier, $oOption); + } + return $iCount; + } + } else { + return false; + } + } + + /** + * Selects specified elements as selected + * + * @param array $aElements Array with "values" of the cHTMLOptionElement to set + * + * @return none + */ + function setSelected($aElements) + { + if (is_array($this->_options) && is_array($aElements)) + { + foreach ($this->_options as $sKey => $oOption) + { + if (in_array($oOption->getAttribute("value"), $aElements)) + { + $oOption->setSelected(true); + $this->_options[$sKey] = $oOption; + } else { + $oOption->setSelected(false); + $this->_options[$sKey] = $oOption; + } + } + } + } +} + +class UI_Config_Table +{ + var $_sTplCellCode; + var $_sTplTableFile; + + var $_sWidth; + var $_sBorder; + var $_sBorderColor; + var $_bSolidBorder; + var $_sPadding; + var $_aCells; + var $_aCellAlignment; + var $_aCellVAlignment; + var $_aCellColSpan; + var $_aCellClass; + var $_aRowBgColor; + var $_aRowExtra; + var $_bAddMultiSelJS; + + var $_sColorLight; + var $_sColorDark; + + function UI_Config_Table() + { + global $cfg; + + $this->_sPadding = 2; + $this->_sBorder = 0; + $this->_sBorderColor = $cfg['color']['table_border']; + $this->_sTplCellCode = ' {CONTENT}'."\n"; + $this->_sTplTableFile = $cfg['path']['contenido'].$cfg['path']['templates'].$cfg['templates']['generic_list']; + $this->_sColorLight = $cfg['color']['table_light']; + $this->_sColorDark = $cfg['color']['table_dark']; + } + + function setCellTemplate($sCode) + { + $this->_sTplCellCode = $sCode; + } + + + function setTableTemplateFile($sPath) + { + $this->_sTplTableFile = $sPath; + } + + function setLightColor($sColor) + { + $this->_sColorLight = $sColor; + } + + function setDarkColor($sColor) + { + $this->_sColorDark = $sColor; + } + + function setAddMultiSelJS($bEnabled = true) + { + $this->_bAddMultiSelJS = (bool)$bEnabled; + } + + function setWidth ($sWidth) + { + $this->_sWidth = $sWidth; + } + + function setPadding ($sPadding) + { + $this->_sPadding = $sPadding; + } + + function setBorder ($sBorder) + { + $this->_sBorder = $sBorder; + } + + function setBorderColor ($sBorderColor) + { + $this->_sBorderColor = $sBorderColor; + } + + function setSolidBorder ($bSolidBorder = true) + { + $this->_bSolidBorder = (bool)$bSolidBorder; + } + + function setCell ($sRow, $sCell, $sContent) + { + $this->_aCells[$sRow][$sCell] = $sContent; + $this->_aCellAlignment[$sRow][$sCell] = ""; + } + + function setCellAlignment ($sRow, $sCell, $sAlignment) + { + $this->_aCellAlignment[$sRow][$sCell] = $sAlignment; + } + + function setCellVAlignment ($sRow, $sCell, $sAlignment) + { + $this->_aCellVAlignment[$sRow][$sCell] = $sAlignment; + } + + function setCellColspan ($sRow, $sCell, $iColSpan) + { + $this->_aCellColSpan[$sRow][$sCell] = $iColSpan; + } + + function setCellClass ($sRow, $sCell, $sClass) + { + $this->_aCellClass[$sRow][$sCell] = $sClass; + } + + function setRowBgColor ($sRow, $sColor) + { + $this->_aRowBgColor[$sRow] = $sColor; + } + + function setRowExtra ($sRow, $sExtra) + { + $this->_aRowExtra[$sRow] = $sExtra; + } + + function _addMultiSelJS() + { + // Trick: To save multiple selections in  '; + html += '
'; + + } else { + // Implied consent disclosure + html += scriptsDisclosure + settings.impliedDisclosureText + ' ' + settings.privacyPolicyLinkText + '.'; + html += '
'; + } + html += ''; + $('body').append(html); + + // Serve the disclosure, and be smarter about branching + var dp = settings.position.toLowerCase(); + if(dp != 'top' && dp!= 'bottom') { + dp = 'top'; + } + var opts = new Array(); + if(dp == 'top') { + opts['in'] = {'top':'0'}; + opts['out'] = {'top':'-300'}; + } else { + opts['in'] = {'bottom':'0'}; + opts['out'] = {'bottom':'-300'}; + } + + // Start animation + $('#cookiesdirective').animate(opts['in'], 1000, function() { + // Set event handlers depending on type of disclosure + if(settings.explicitConsent) { + // Explicit, need to check a box and click a button + $('#explicitsubmit').click(function() { + if($('#epdagree').is(':checked')) { + // Set a cookie to prevent this being displayed again + setCookie('cookiesDirective',1,365); + // Close the overlay + $('#cookiesdirective').animate(opts['out'],1000,function() { + // Remove the elements from the DOM and reload page + $('#cookiesdirective').remove(); + location.reload(true); + }); + } else { + // We need the box checked we want "explicit consent", display message + $('#epdnotick').css('display', 'block'); + } + }); + } else { + // Implied consent, just a button to close it + $('#impliedsubmit').click(function() { + // Set a cookie to prevent this being displayed again + setCookie('cookiesDirective',1,365); + // Close the overlay + $('#cookiesdirective').animate(opts['out'],1000,function() { + // Remove the elements from the DOM and reload page + $('#cookiesdirective').remove(); + }); + }); + } + + // Set a timer to remove the warning after 'settings.duration' seconds + setTimeout(function(){ + $('#cookiesdirective').animate({ + opacity:'0' + },2000, function(){ + $('#cookiesdirective').css(dp,'-300px'); + }); + }, settings.duration * 1000); + }); + } +})(jQuery); diff --git a/branches/conlite20/cms/js/libs/jquery-1.9.0.min.js b/branches/conlite20/cms/js/libs/jquery-1.9.0.min.js new file mode 100644 index 0000000..50d1b22 --- /dev/null +++ b/branches/conlite20/cms/js/libs/jquery-1.9.0.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.9.0 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license */(function(e,t){"use strict";function n(e){var t=e.length,n=st.type(e);return st.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e){var t=Tt[e]={};return st.each(e.match(lt)||[],function(e,n){t[n]=!0}),t}function i(e,n,r,i){if(st.acceptData(e)){var o,a,s=st.expando,u="string"==typeof n,l=e.nodeType,c=l?st.cache:e,f=l?e[s]:e[s]&&s;if(f&&c[f]&&(i||c[f].data)||!u||r!==t)return f||(l?e[s]=f=K.pop()||st.guid++:f=s),c[f]||(c[f]={},l||(c[f].toJSON=st.noop)),("object"==typeof n||"function"==typeof n)&&(i?c[f]=st.extend(c[f],n):c[f].data=st.extend(c[f].data,n)),o=c[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[st.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[st.camelCase(n)])):a=o,a}}function o(e,t,n){if(st.acceptData(e)){var r,i,o,a=e.nodeType,u=a?st.cache:e,l=a?e[st.expando]:st.expando;if(u[l]){if(t&&(r=n?u[l]:u[l].data)){st.isArray(t)?t=t.concat(st.map(t,st.camelCase)):t in r?t=[t]:(t=st.camelCase(t),t=t in r?[t]:t.split(" "));for(i=0,o=t.length;o>i;i++)delete r[t[i]];if(!(n?s:st.isEmptyObject)(r))return}(n||(delete u[l].data,s(u[l])))&&(a?st.cleanData([e],!0):st.support.deleteExpando||u!=u.window?delete u[l]:u[l]=null)}}}function a(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(Nt,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:wt.test(r)?st.parseJSON(r):r}catch(o){}st.data(e,n,r)}else r=t}return r}function s(e){var t;for(t in e)if(("data"!==t||!st.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(){return!0}function l(){return!1}function c(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function f(e,t,n){if(t=t||0,st.isFunction(t))return st.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return st.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=st.grep(e,function(e){return 1===e.nodeType});if(Wt.test(t))return st.filter(t,r,!n);t=st.filter(t,r)}return st.grep(e,function(e){return st.inArray(e,t)>=0===n})}function p(e){var t=zt.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function d(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function h(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function g(e){var t=nn.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)st._data(n,"globalEval",!t||st._data(t[r],"globalEval"))}function y(e,t){if(1===t.nodeType&&st.hasData(e)){var n,r,i,o=st._data(e),a=st._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)st.event.add(t,n,s[n][r])}a.data&&(a.data=st.extend({},a.data))}}function v(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!st.support.noCloneEvent&&t[st.expando]){r=st._data(t);for(i in r.events)st.removeEvent(t,i,r.handle);t.removeAttribute(st.expando)}"script"===n&&t.text!==e.text?(h(t).text=e.text,g(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),st.support.html5Clone&&e.innerHTML&&!st.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Zt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function b(e,n){var r,i,o=0,a=e.getElementsByTagName!==t?e.getElementsByTagName(n||"*"):e.querySelectorAll!==t?e.querySelectorAll(n||"*"):t;if(!a)for(a=[],r=e.childNodes||e;null!=(i=r[o]);o++)!n||st.nodeName(i,n)?a.push(i):st.merge(a,b(i,n));return n===t||n&&st.nodeName(e,n)?st.merge([e],a):a}function x(e){Zt.test(e.type)&&(e.defaultChecked=e.checked)}function T(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Nn.length;i--;)if(t=Nn[i]+n,t in e)return t;return r}function w(e,t){return e=t||e,"none"===st.css(e,"display")||!st.contains(e.ownerDocument,e)}function N(e,t){for(var n,r=[],i=0,o=e.length;o>i;i++)n=e[i],n.style&&(r[i]=st._data(n,"olddisplay"),t?(r[i]||"none"!==n.style.display||(n.style.display=""),""===n.style.display&&w(n)&&(r[i]=st._data(n,"olddisplay",S(n.nodeName)))):r[i]||w(n)||st._data(n,"olddisplay",st.css(n,"display")));for(i=0;o>i;i++)n=e[i],n.style&&(t&&"none"!==n.style.display&&""!==n.style.display||(n.style.display=t?r[i]||"":"none"));return e}function C(e,t,n){var r=mn.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function k(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=st.css(e,n+wn[o],!0,i)),r?("content"===n&&(a-=st.css(e,"padding"+wn[o],!0,i)),"margin"!==n&&(a-=st.css(e,"border"+wn[o]+"Width",!0,i))):(a+=st.css(e,"padding"+wn[o],!0,i),"padding"!==n&&(a+=st.css(e,"border"+wn[o]+"Width",!0,i)));return a}function E(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=ln(e),a=st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=un(e,t,o),(0>i||null==i)&&(i=e.style[t]),yn.test(i))return i;r=a&&(st.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+k(e,t,n||(a?"border":"content"),r,o)+"px"}function S(e){var t=V,n=bn[e];return n||(n=A(e,t),"none"!==n&&n||(cn=(cn||st("'; + ifr = document.getElementById('iframe'); + doc = ifr.contentWindow.document; + + // Force absolute CSS urls + css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")]; + css = css.concat(tinymce.explode(ed.settings.content_css) || []); + tinymce.each(css, function(u) { + cssHTML += ''; + }); + + // Write content into iframe + doc.open(); + doc.write('' + cssHTML + ''); + doc.close(); + + doc.designMode = 'on'; + this.resize(); + + window.setTimeout(function() { + ifr.contentWindow.focus(); + }, 10); + }, + + insert : function() { + var h = document.getElementById('iframe').contentWindow.document.body.innerHTML; + + tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true}); + tinyMCEPopup.close(); + }, + + resize : function() { + var vp = tinyMCEPopup.dom.getViewPort(window), el; + + el = document.getElementById('iframe'); + + if (el) { + el.style.width = (vp.w - 20) + 'px'; + el.style.height = (vp.h - 90) + 'px'; + } + } +}; + +tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/langs/de_dlg.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/langs/de_dlg.js new file mode 100644 index 0000000..d7bbe93 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.paste_dlg',{"word_title":"Strg V auf der Tastatur dr\u00fccken, um den Text einzuf\u00fcgen.","text_linebreaks":"Zeilenumbr\u00fcche beibehalten","text_title":"Strg V auf der Tastatur dr\u00fccken, um den Text einzuf\u00fcgen."}); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js new file mode 100644 index 0000000..bc74daf --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.paste_dlg',{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."}); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/pastetext.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/pastetext.htm new file mode 100644 index 0000000..8ccfbb9 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/pastetext.htm @@ -0,0 +1,27 @@ + + + {#paste.paste_text_desc} + + + + +
+
{#paste.paste_text_desc}
+ +
+ +
+ +
+ +
{#paste_dlg.text_title}
+ + + +
+ + +
+
+ + \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/pasteword.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/pasteword.htm new file mode 100644 index 0000000..7731f39 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/paste/pasteword.htm @@ -0,0 +1,21 @@ + + + {#paste.paste_word_desc} + + + + +
+
{#paste.paste_word_desc}
+ +
{#paste_dlg.word_title}
+ +
+ +
+ + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/editor_plugin.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/editor_plugin.js new file mode 100644 index 0000000..507909c --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Preview",{init:function(a,b){var d=this,c=tinymce.explode(a.settings.content_css);d.editor=a;tinymce.each(c,function(f,e){c[e]=a.documentBaseURI.toAbsolute(f)});a.addCommand("mcePreview",function(){a.windowManager.open({file:a.getParam("plugin_preview_pageurl",b+"/preview.html"),width:parseInt(a.getParam("plugin_preview_width","550")),height:parseInt(a.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:c?c.join(","):a.baseURI.toAbsolute("themes/"+a.settings.theme+"/skins/"+a.settings.skin+"/content.css"),inline:a.getParam("plugin_preview_inline",1)},{base:a.documentBaseURI.getURI()})});a.addButton("preview",{title:"preview.preview_desc",cmd:"mcePreview"})},getInfo:function(){return{longname:"Preview",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("preview",tinymce.plugins.Preview)})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js new file mode 100644 index 0000000..80f00f0 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js @@ -0,0 +1,53 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Preview', { + init : function(ed, url) { + var t = this, css = tinymce.explode(ed.settings.content_css); + + t.editor = ed; + + // Force absolute CSS urls + tinymce.each(css, function(u, k) { + css[k] = ed.documentBaseURI.toAbsolute(u); + }); + + ed.addCommand('mcePreview', function() { + ed.windowManager.open({ + file : ed.getParam("plugin_preview_pageurl", url + "/preview.html"), + width : parseInt(ed.getParam("plugin_preview_width", "550")), + height : parseInt(ed.getParam("plugin_preview_height", "600")), + resizable : "yes", + scrollbars : "yes", + popup_css : css ? css.join(',') : ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css"), + inline : ed.getParam("plugin_preview_inline", 1) + }, { + base : ed.documentBaseURI.getURI() + }); + }); + + ed.addButton('preview', {title : 'preview.preview_desc', cmd : 'mcePreview'}); + }, + + getInfo : function() { + return { + longname : 'Preview', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('preview', tinymce.plugins.Preview); +})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/example.html b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/example.html new file mode 100644 index 0000000..4820222 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/example.html @@ -0,0 +1,28 @@ + + + + + +Example of a custom preview page + + + +Editor contents:
+
+ +
+ + + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/jscripts/embed.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/jscripts/embed.js new file mode 100644 index 0000000..6fe25de --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/jscripts/embed.js @@ -0,0 +1,73 @@ +/** + * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose. + */ + +function writeFlash(p) { + writeEmbed( + 'D27CDB6E-AE6D-11cf-96B8-444553540000', + 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', + 'application/x-shockwave-flash', + p + ); +} + +function writeShockWave(p) { + writeEmbed( + '166B1BCA-3F9C-11CF-8075-444553540000', + 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0', + 'application/x-director', + p + ); +} + +function writeQuickTime(p) { + writeEmbed( + '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B', + 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0', + 'video/quicktime', + p + ); +} + +function writeRealMedia(p) { + writeEmbed( + 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA', + 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', + 'audio/x-pn-realaudio-plugin', + p + ); +} + +function writeWindowsMedia(p) { + p.url = p.src; + writeEmbed( + '6BF52A52-394A-11D3-B153-00C04F79FAA6', + 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701', + 'application/x-mplayer2', + p + ); +} + +function writeEmbed(cls, cb, mt, p) { + var h = '', n; + + h += ''; + + h += ' + + + + + +{#preview.preview_desc} + + + + + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/print/editor_plugin.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/print/editor_plugin.js new file mode 100644 index 0000000..b5b3a55 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/print/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Print",{init:function(a,b){a.addCommand("mcePrint",function(){a.getWin().print()});a.addButton("print",{title:"print.print_desc",cmd:"mcePrint"})},getInfo:function(){return{longname:"Print",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("print",tinymce.plugins.Print)})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/print/editor_plugin_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/print/editor_plugin_src.js new file mode 100644 index 0000000..47e666a --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/print/editor_plugin_src.js @@ -0,0 +1,34 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Print', { + init : function(ed, url) { + ed.addCommand('mcePrint', function() { + ed.getWin().print(); + }); + + ed.addButton('print', {title : 'print.print_desc', cmd : 'mcePrint'}); + }, + + getInfo : function() { + return { + longname : 'Print', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('print', tinymce.plugins.Print); +})(); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/save/editor_plugin.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/save/editor_plugin.js new file mode 100644 index 0000000..8e93996 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/save/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Save",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceSave",c._save,c);a.addCommand("mceCancel",c._cancel,c);a.addButton("save",{title:"save.save_desc",cmd:"mceSave"});a.addButton("cancel",{title:"save.cancel_desc",cmd:"mceCancel"});a.onNodeChange.add(c._nodeChange,c);a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")},getInfo:function(){return{longname:"Save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,c){var b=this.editor;if(b.getParam("save_enablewhendirty")){a.setDisabled("save",!b.isDirty());a.setDisabled("cancel",!b.isDirty())}},_save:function(){var c=this.editor,a,e,d,b;a=tinymce.DOM.get(c.id).form||tinymce.DOM.getParent(c.id,"form");if(c.getParam("save_enablewhendirty")&&!c.isDirty()){return}tinyMCE.triggerSave();if(e=c.getParam("save_onsavecallback")){if(c.execCallback("save_onsavecallback",c)){c.startContent=tinymce.trim(c.getContent({format:"raw"}));c.nodeChanged()}return}if(a){c.isNotDirty=true;if(a.onsubmit==null||a.onsubmit()!=false){a.submit()}c.nodeChanged()}else{c.windowManager.alert("Error: No form element found.")}},_cancel:function(){var a=this.editor,c,b=tinymce.trim(a.startContent);if(c=a.getParam("save_oncancelcallback")){a.execCallback("save_oncancelcallback",a);return}a.setContent(b);a.undoManager.clear();a.nodeChanged()}});tinymce.PluginManager.add("save",tinymce.plugins.Save)})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/save/editor_plugin_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/save/editor_plugin_src.js new file mode 100644 index 0000000..5ab6491 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/save/editor_plugin_src.js @@ -0,0 +1,101 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.Save', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceSave', t._save, t); + ed.addCommand('mceCancel', t._cancel, t); + + // Register buttons + ed.addButton('save', {title : 'save.save_desc', cmd : 'mceSave'}); + ed.addButton('cancel', {title : 'save.cancel_desc', cmd : 'mceCancel'}); + + ed.onNodeChange.add(t._nodeChange, t); + ed.addShortcut('ctrl+s', ed.getLang('save.save_desc'), 'mceSave'); + }, + + getInfo : function() { + return { + longname : 'Save', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _nodeChange : function(ed, cm, n) { + var ed = this.editor; + + if (ed.getParam('save_enablewhendirty')) { + cm.setDisabled('save', !ed.isDirty()); + cm.setDisabled('cancel', !ed.isDirty()); + } + }, + + // Private methods + + _save : function() { + var ed = this.editor, formObj, os, i, elementId; + + formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form'); + + if (ed.getParam("save_enablewhendirty") && !ed.isDirty()) + return; + + tinyMCE.triggerSave(); + + // Use callback instead + if (os = ed.getParam("save_onsavecallback")) { + if (ed.execCallback('save_onsavecallback', ed)) { + ed.startContent = tinymce.trim(ed.getContent({format : 'raw'})); + ed.nodeChanged(); + } + + return; + } + + if (formObj) { + ed.isNotDirty = true; + + if (formObj.onsubmit == null || formObj.onsubmit() != false) + formObj.submit(); + + ed.nodeChanged(); + } else + ed.windowManager.alert("Error: No form element found."); + }, + + _cancel : function() { + var ed = this.editor, os, h = tinymce.trim(ed.startContent); + + // Use callback instead + if (os = ed.getParam("save_oncancelcallback")) { + ed.execCallback('save_oncancelcallback', ed); + return; + } + + ed.setContent(h); + ed.undoManager.clear(); + ed.nodeChanged(); + } + }); + + // Register plugin + tinymce.PluginManager.add('save', tinymce.plugins.Save); +})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css new file mode 100644 index 0000000..3e2eaf3 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css @@ -0,0 +1,6 @@ +.panel_wrapper {height:85px;} +.panel_wrapper div.current {height:85px;} + +/* IE */ +* html .panel_wrapper {height:100px;} +* html .panel_wrapper div.current {height:100px;} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js new file mode 100644 index 0000000..165bc12 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){window.focus();a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js new file mode 100644 index 0000000..b0c013f --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js @@ -0,0 +1,61 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.SearchReplacePlugin', { + init : function(ed, url) { + function open(m) { + // Keep IE from writing out the f/r character to the editor + // instance while initializing a new dialog. See: #3131190 + window.focus(); + + ed.windowManager.open({ + file : url + '/searchreplace.htm', + width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)), + height : 170 + parseInt(ed.getLang('searchreplace.delta_height', 0)), + inline : 1, + auto_focus : 0 + }, { + mode : m, + search_string : ed.selection.getContent({format : 'text'}), + plugin_url : url + }); + }; + + // Register commands + ed.addCommand('mceSearch', function() { + open('search'); + }); + + ed.addCommand('mceReplace', function() { + open('replace'); + }); + + // Register buttons + ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'}); + ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'}); + + ed.addShortcut('ctrl+f', 'searchreplace.search_desc', 'mceSearch'); + }, + + getInfo : function() { + return { + longname : 'Search/Replace', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin); +})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js new file mode 100644 index 0000000..b00bf0c --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js @@ -0,0 +1,148 @@ +tinyMCEPopup.requireLangPack(); + +var SearchReplaceDialog = { + init : function(ed) { + var t = this, f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode"); + + t.switchMode(m); + + f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string"); + + // Focus input field + f[m + '_panel_searchstring'].focus(); + + mcTabs.onChange.add(function(tab_id, panel_id) { + t.switchMode(tab_id.substring(0, tab_id.indexOf('_'))); + }); + + }, + + switchMode : function(m) { + var f, lm = this.lastMode; + + if (lm != m) { + f = document.forms[0]; + + if (lm) { + f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value; + f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked; + f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked; + f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked; + } + + mcTabs.displayTab(m + '_tab', m + '_panel'); + document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none"; + document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none"; + this.lastMode = m; + } + }, + + searchNext : function(a) { + var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0; + + if (tinymce.isIE11 && !window.find) { + ed.windowManager.alert("This feature is not available in IE 11+. Upgrade TinyMCE to 4.x to get this functionallity back."); + return; + } + + // Get input + f = document.forms[0]; + s = f[m + '_panel_searchstring'].value; + b = f[m + '_panel_backwardsu'].checked; + ca = f[m + '_panel_casesensitivebox'].checked; + rs = f['replace_panel_replacestring'].value; + + if (tinymce.isIE) { + r = ed.getDoc().selection.createRange(); + } + + if (s == '') + return; + + function fix() { + // Correct Firefox graphics glitches + // TODO: Verify if this is actually needed any more, maybe it was for very old FF versions? + r = se.getRng().cloneRange(); + ed.getDoc().execCommand('SelectAll', false, null); + se.setRng(r); + }; + + function replace() { + ed.selection.setContent(rs); // Needs to be duplicated due to selection bug in IE + }; + + // IE flags + if (ca) + fl = fl | 4; + + switch (a) { + case 'all': + // Move caret to beginning of text + ed.execCommand('SelectAll'); + ed.selection.collapse(true); + + if (tinymce.isIE) { + ed.focus(); + r = ed.getDoc().selection.createRange(); + + while (r.findText(s, b ? -1 : 1, fl)) { + r.scrollIntoView(); + r.select(); + replace(); + fo = 1; + + if (b) { + r.moveEnd("character", -(rs.length)); // Otherwise will loop forever + } + } + + tinyMCEPopup.storeSelection(); + } else { + while (w.find(s, ca, b, false, false, false, false)) { + replace(); + fo = 1; + } + } + + if (fo) + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced')); + else + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); + + return; + + case 'current': + if (!ed.selection.isCollapsed()) + replace(); + + break; + } + + se.collapse(b); + r = se.getRng(); + + // Whats the point + if (!s) + return; + + if (tinymce.isIE) { + ed.focus(); + r = ed.getDoc().selection.createRange(); + + if (r.findText(s, b ? -1 : 1, fl)) { + r.scrollIntoView(); + r.select(); + } else + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); + + tinyMCEPopup.storeSelection(); + } else { + if (!w.find(s, ca, b, false, false, false, false)) + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); + else + fix(); + } + } +}; + +tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/langs/de_dlg.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/langs/de_dlg.js new file mode 100644 index 0000000..7c40acd --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.searchreplace_dlg',{findwhat:"Zu suchender Text",replacewith:"Ersetzen durch",direction:"Suchrichtung",up:"Aufw\u00e4rts",down:"Abw\u00e4rts",mcase:"Gro\u00df-/Kleinschreibung beachten",findnext:"Weitersuchen",allreplaced:"Alle Vorkommen der Zeichenkette wurden ersetzt.","searchnext_desc":"Weitersuchen",notfound:"Die Suche ist am Ende angelangt. Die Zeichenkette konnte nicht gefunden werden.","search_title":"Suchen","replace_title":"Suchen/Ersetzen",replaceall:"Alle ersetzen",replace:"Ersetzen"}); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js new file mode 100644 index 0000000..8a65900 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.searchreplace_dlg',{findwhat:"Find What",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match Case",findnext:"Find Next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find Again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace All",replace:"Replace"}); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm new file mode 100644 index 0000000..f5bafc4 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm @@ -0,0 +1,100 @@ + + + + {#searchreplace_dlg.replace_title} + + + + + + + + +
+ + +
+
+ + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + +
+
+
+ +
+ +
+ + + + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/css/content.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/css/content.css new file mode 100644 index 0000000..656ce1e --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/css/content.css @@ -0,0 +1 @@ +.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js new file mode 100644 index 0000000..6b57241 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});if(e.settings.content_css!==false){e.contentCSS.push(f+"/css/content.css")}e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);f.menuItems={};c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){if(n==f.selectedLang){return}f._updateMenu(l);f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);f.menuItems[n]=l;if(n==f.selectedLang){f.selectedItem=l}})});return g}},setLanguage:function(e){var d=this;if(e==d.selectedLang){return}if(tinymce.grep(d.languages,function(f){return f===e}).length===0){throw"Unknown language: "+e}d.selectedLang=e;if(d.menuItems){d._updateMenu(d.menuItems[e])}if(d.active){d._done()}},_updateMenu:function(d){d.setSelected(1);this.selectedItem.setSelected(0);this.selectedItem=d},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}\u201d\u201c');for(d=0;d$2");while((s=p.indexOf(""))!=-1){o=p.substring(0,s);if(o.length){r=j.createTextNode(g.decode(o));q.appendChild(r)}p=p.substring(s+10);s=p.indexOf("");o=p.substring(0,s);p=p.substring(s+11);q.appendChild(g.create("span",{"class":"mceItemHiddenSpellWord"},o))}if(p.length){r=j.createTextNode(g.decode(p));q.appendChild(r)}}else{q.innerHTML=p.replace(f,'$1$2')}g.replace(q,t)}});i.setRng(d)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){d=h.controlManager.createDropMenu("spellcheckermenu",{"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}if(h.getParam("show_ignore_words",true)){e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}})}if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});l=b.getPos(h.getContentAreaContainer());d.settings.offset_x=l.x;d.settings.offset_y=l.y;h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js new file mode 100644 index 0000000..4081181 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js @@ -0,0 +1,471 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM; + + tinymce.create('tinymce.plugins.SpellcheckerPlugin', { + getInfo : function() { + return { + longname : 'Spellchecker', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + init : function(ed, url) { + var t = this, cm; + + t.url = url; + t.editor = ed; + t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}"); + + if (t.rpcUrl == '{backend}') { + // Sniff if the browser supports native spellchecking (Don't know of a better way) + if (tinymce.isIE) + return; + + t.hasSupport = true; + + // Disable the context menu when spellchecking is active + ed.onContextMenu.addToTop(function(ed, e) { + if (t.active) + return false; + }); + } + + // Register commands + ed.addCommand('mceSpellCheck', function() { + if (t.rpcUrl == '{backend}') { + // Enable/disable native spellchecker + t.editor.getBody().spellcheck = t.active = !t.active; + return; + } + + if (!t.active) { + ed.setProgressState(1); + t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) { + if (r.length > 0) { + t.active = 1; + t._markWords(r); + ed.setProgressState(0); + ed.nodeChanged(); + } else { + ed.setProgressState(0); + + if (ed.getParam('spellchecker_report_no_misspellings', true)) + ed.windowManager.alert('spellchecker.no_mpell'); + } + }); + } else + t._done(); + }); + + if (ed.settings.content_css !== false) + ed.contentCSS.push(url + '/css/content.css'); + + ed.onClick.add(t._showMenu, t); + ed.onContextMenu.add(t._showMenu, t); + ed.onBeforeGetContent.add(function() { + if (t.active) + t._removeWords(); + }); + + ed.onNodeChange.add(function(ed, cm) { + cm.setActive('spellchecker', t.active); + }); + + ed.onSetContent.add(function() { + t._done(); + }); + + ed.onBeforeGetContent.add(function() { + t._done(); + }); + + ed.onBeforeExecCommand.add(function(ed, cmd) { + if (cmd == 'mceFullScreen') + t._done(); + }); + + // Find selected language + t.languages = {}; + each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) { + if (k.indexOf('+') === 0) { + k = k.substring(1); + t.selectedLang = v; + } + + t.languages[k] = v; + }); + }, + + createControl : function(n, cm) { + var t = this, c, ed = t.editor; + + if (n == 'spellchecker') { + // Use basic button if we use the native spellchecker + if (t.rpcUrl == '{backend}') { + // Create simple toggle button if we have native support + if (t.hasSupport) + c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); + + return c; + } + + c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); + + c.onRenderMenu.add(function(c, m) { + m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + t.menuItems = {}; + each(t.languages, function(v, k) { + var o = {icon : 1}, mi; + + o.onclick = function() { + if (v == t.selectedLang) { + return; + } + t._updateMenu(mi); + t.selectedLang = v; + }; + + o.title = k; + mi = m.add(o); + mi.setSelected(v == t.selectedLang); + t.menuItems[v] = mi; + if (v == t.selectedLang) + t.selectedItem = mi; + }); + }); + + + + return c; + } + }, + + setLanguage: function(lang) { + var t = this; + + if (lang == t.selectedLang) { + // allowed + return; + } + + if (tinymce.grep(t.languages, function(v) { return v === lang; }).length === 0) { + throw "Unknown language: " + lang; + } + + t.selectedLang = lang; + + // if the menu has been shown, update it as well + if (t.menuItems) { + t._updateMenu(t.menuItems[lang]); + } + + if (t.active) { + // clear error in the old language. + t._done(); + + // Don't immediately block the UI to check spelling in the new language, this is an API not a user action. + } + }, + + // Internal functions + + _updateMenu: function(mi) { + mi.setSelected(1); + this.selectedItem.setSelected(0); + this.selectedItem = mi; + }, + + _walk : function(n, f) { + var d = this.editor.getDoc(), w; + + if (d.createTreeWalker) { + w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false); + + while ((n = w.nextNode()) != null) + f.call(this, n); + } else + tinymce.walk(n, f, 'childNodes'); + }, + + _getSeparators : function() { + var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}\u201d\u201c'); + + // Build word separator regexp + for (i=0; i elements content is broken after spellchecking. + // Bug #1408: Preceding whitespace characters are removed + // @TODO: I'm not sure that both are still issues on IE9. + if (tinymce.isIE) { + // Enclose mispelled words with temporal tag + v = v.replace(rx, '$1$2'); + // Loop over the content finding mispelled words + while ((pos = v.indexOf('')) != -1) { + // Add text node for the content before the word + txt = v.substring(0, pos); + if (txt.length) { + node = doc.createTextNode(dom.decode(txt)); + elem.appendChild(node); + } + v = v.substring(pos+10); + pos = v.indexOf(''); + txt = v.substring(0, pos); + v = v.substring(pos+11); + // Add span element for the word + elem.appendChild(dom.create('span', {'class' : 'mceItemHiddenSpellWord'}, txt)); + } + // Add text node for the rest of the content + if (v.length) { + node = doc.createTextNode(dom.decode(v)); + elem.appendChild(node); + } + } else { + // Other browsers preserve whitespace characters on innerHTML usage + elem.innerHTML = v.replace(rx, '$1$2'); + } + + // Finally, replace the node with the container + dom.replace(elem, n); + } + }); + + se.setRng(r); + }, + + _showMenu : function(ed, e) { + var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target; + + e = 0; // Fixes IE memory leak + + if (!m) { + m = ed.controlManager.createDropMenu('spellcheckermenu', {'class' : 'mceNoIcons'}); + t._menu = m; + } + + if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) { + m.removeAll(); + m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) { + var ignoreRpc; + + m.removeAll(); + + if (r.length > 0) { + m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + each(r, function(v) { + m.add({title : v, onclick : function() { + dom.replace(ed.getDoc().createTextNode(v), wordSpan); + t._checkDone(); + }}); + }); + + m.addSeparator(); + } else + m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + if (ed.getParam('show_ignore_words', true)) { + ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", ''); + m.add({ + title : 'spellchecker.ignore_word', + onclick : function() { + var word = wordSpan.innerHTML; + + dom.remove(wordSpan, 1); + t._checkDone(); + + // tell the server if we need to + if (ignoreRpc) { + ed.setProgressState(1); + t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + } + }); + + m.add({ + title : 'spellchecker.ignore_words', + onclick : function() { + var word = wordSpan.innerHTML; + + t._removeWords(dom.decode(word)); + t._checkDone(); + + // tell the server if we need to + if (ignoreRpc) { + ed.setProgressState(1); + t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + } + }); + } + + if (t.editor.getParam("spellchecker_enable_learn_rpc")) { + m.add({ + title : 'spellchecker.learn_word', + onclick : function() { + var word = wordSpan.innerHTML; + + dom.remove(wordSpan, 1); + t._checkDone(); + + ed.setProgressState(1); + t._sendRPC('learnWord', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + }); + } + + m.update(); + }); + + p1 = DOM.getPos(ed.getContentAreaContainer()); + m.settings.offset_x = p1.x; + m.settings.offset_y = p1.y; + + ed.selection.select(wordSpan); + p1 = dom.getPos(wordSpan); + m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y); + + return tinymce.dom.Event.cancel(e); + } else + m.hideMenu(); + }, + + _checkDone : function() { + var t = this, ed = t.editor, dom = ed.dom, o; + + each(dom.select('span'), function(n) { + if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) { + o = true; + return false; + } + }); + + if (!o) + t._done(); + }, + + _done : function() { + var t = this, la = t.active; + + if (t.active) { + t.active = 0; + t._removeWords(); + + if (t._menu) + t._menu.hideMenu(); + + if (la) + t.editor.nodeChanged(); + } + }, + + _sendRPC : function(m, p, cb) { + var t = this; + + JSONRequest.sendRPC({ + url : t.rpcUrl, + method : m, + params : p, + success : cb, + error : function(e, x) { + t.editor.setProgressState(0); + t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText)); + } + }); + } + }); + + // Register plugin + tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin); +})(); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif new file mode 100644 index 0000000000000000000000000000000000000000..7d0a4dbca03cc13177a359a5f175dda819fdf464 GIT binary patch literal 46 ycmZ?wbhEHbWMN=tXkcXcqowu#|9{1wEQ|~cj0`#qKmd|qU}ANVOOs?}um%7FLkRf* literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/css/props.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/css/props.css new file mode 100644 index 0000000..51a3b1f --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/css/props.css @@ -0,0 +1,14 @@ +#text_font {width:250px;} +#text_size {width:70px;} +.mceAddSelectValue {background:#DDD;} +select, #block_text_indent, #box_width, #box_height, #box_padding_top, #box_padding_right, #box_padding_bottom, #box_padding_left {width:70px;} +#box_margin_top, #box_margin_right, #box_margin_bottom, #box_margin_left, #positioning_width, #positioning_height, #positioning_zindex {width:70px;} +#positioning_placement_top, #positioning_placement_right, #positioning_placement_bottom, #positioning_placement_left {width:70px;} +#positioning_clip_top, #positioning_clip_right, #positioning_clip_bottom, #positioning_clip_left {width:70px;} +.panel_toggle_insert_span {padding-top:10px;} +.panel_wrapper div.current {padding-top:10px;height:230px;} +.delim {border-left:1px solid gray;} +.tdelim {border-bottom:1px solid gray;} +#block_display {width:145px;} +#list_type {width:115px;} +.disabled {background:#EEE;} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/editor_plugin.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/editor_plugin.js new file mode 100644 index 0000000..dda9f92 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){var c=false;var f=a.selection.getSelectedBlocks();var d=[];if(f.length===1){d.push(a.selection.getNode().style.cssText)}else{tinymce.each(f,function(g){d.push(a.dom.getAttrib(g,"style"))});c=true}a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:340+parseInt(a.getLang("style.delta_height",0)),inline:1},{applyStyleToBlocks:c,plugin_url:b,styles:d})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/editor_plugin_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/editor_plugin_src.js new file mode 100644 index 0000000..5a2d848 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/editor_plugin_src.js @@ -0,0 +1,71 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.StylePlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceStyleProps', function() { + + var applyStyleToBlocks = false; + var blocks = ed.selection.getSelectedBlocks(); + var styles = []; + + if (blocks.length === 1) { + styles.push(ed.selection.getNode().style.cssText); + } + else { + tinymce.each(blocks, function(block) { + styles.push(ed.dom.getAttrib(block, 'style')); + }); + applyStyleToBlocks = true; + } + + ed.windowManager.open({ + file : url + '/props.htm', + width : 480 + parseInt(ed.getLang('style.delta_width', 0)), + height : 340 + parseInt(ed.getLang('style.delta_height', 0)), + inline : 1 + }, { + applyStyleToBlocks : applyStyleToBlocks, + plugin_url : url, + styles : styles + }); + }); + + ed.addCommand('mceSetElementStyle', function(ui, v) { + if (e = ed.selection.getNode()) { + ed.dom.setAttrib(e, 'style', v); + ed.execCommand('mceRepaint'); + } + }); + + ed.onNodeChange.add(function(ed, cm, n) { + cm.setDisabled('styleprops', n.nodeName === 'BODY'); + }); + + // Register buttons + ed.addButton('styleprops', {title : 'style.desc', cmd : 'mceStyleProps'}); + }, + + getInfo : function() { + return { + longname : 'Style', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('style', tinymce.plugins.StylePlugin); +})(); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/js/props.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/js/props.js new file mode 100644 index 0000000..853222b --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/js/props.js @@ -0,0 +1,709 @@ +tinyMCEPopup.requireLangPack(); + +var defaultFonts = "" + + "Arial, Helvetica, sans-serif=Arial, Helvetica, sans-serif;" + + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + + "Courier New, Courier, mono=Courier New, Courier, mono;" + + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + + "Georgia, Times New Roman, Times, serif=Georgia, Times New Roman, Times, serif;" + + "Verdana, Arial, Helvetica, sans-serif=Verdana, Arial, Helvetica, sans-serif;" + + "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif"; + +var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger"; +var defaultMeasurement = "+pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; +var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%"; +var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; +var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900"; +var defaultTextStyle = "normal;italic;oblique"; +var defaultVariant = "normal;small-caps"; +var defaultLineHeight = "normal"; +var defaultAttachment = "fixed;scroll"; +var defaultRepeat = "no-repeat;repeat;repeat-x;repeat-y"; +var defaultPosH = "left;center;right"; +var defaultPosV = "top;center;bottom"; +var defaultVAlign = "baseline;sub;super;top;text-top;middle;bottom;text-bottom"; +var defaultDisplay = "inline;block;list-item;run-in;compact;marker;table;inline-table;table-row-group;table-header-group;table-footer-group;table-row;table-column-group;table-column;table-cell;table-caption;none"; +var defaultBorderStyle = "none;solid;dashed;dotted;double;groove;ridge;inset;outset"; +var defaultBorderWidth = "thin;medium;thick"; +var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none"; + +function aggregateStyles(allStyles) { + var mergedStyles = {}; + + tinymce.each(allStyles, function(style) { + if (style !== '') { + var parsedStyles = tinyMCEPopup.editor.dom.parseStyle(style); + for (var name in parsedStyles) { + if (parsedStyles.hasOwnProperty(name)) { + if (mergedStyles[name] === undefined) { + mergedStyles[name] = parsedStyles[name]; + } + else if (name === 'text-decoration') { + if (mergedStyles[name].indexOf(parsedStyles[name]) === -1) { + mergedStyles[name] = mergedStyles[name] +' '+ parsedStyles[name]; + } + } + } + } + } + }); + + return mergedStyles; +} + +var applyActionIsInsert; +var existingStyles; + +function init(ed) { + var ce = document.getElementById('container'), h; + + existingStyles = aggregateStyles(tinyMCEPopup.getWindowArg('styles')); + ce.style.cssText = tinyMCEPopup.editor.dom.serializeStyle(existingStyles); + + applyActionIsInsert = ed.getParam("edit_css_style_insert_span", false); + document.getElementById('toggle_insert_span').checked = applyActionIsInsert; + + h = getBrowserHTML('background_image_browser','background_image','image','advimage'); + document.getElementById("background_image_browser").innerHTML = h; + + document.getElementById('text_color_pickcontainer').innerHTML = getColorPickerHTML('text_color_pick','text_color'); + document.getElementById('background_color_pickcontainer').innerHTML = getColorPickerHTML('background_color_pick','background_color'); + document.getElementById('border_color_top_pickcontainer').innerHTML = getColorPickerHTML('border_color_top_pick','border_color_top'); + document.getElementById('border_color_right_pickcontainer').innerHTML = getColorPickerHTML('border_color_right_pick','border_color_right'); + document.getElementById('border_color_bottom_pickcontainer').innerHTML = getColorPickerHTML('border_color_bottom_pick','border_color_bottom'); + document.getElementById('border_color_left_pickcontainer').innerHTML = getColorPickerHTML('border_color_left_pick','border_color_left'); + + fillSelect(0, 'text_font', 'style_font', defaultFonts, ';', true); + fillSelect(0, 'text_size', 'style_font_size', defaultSizes, ';', true); + fillSelect(0, 'text_size_measurement', 'style_font_size_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'text_case', 'style_text_case', "capitalize;uppercase;lowercase", ';', true); + fillSelect(0, 'text_weight', 'style_font_weight', defaultWeight, ';', true); + fillSelect(0, 'text_style', 'style_font_style', defaultTextStyle, ';', true); + fillSelect(0, 'text_variant', 'style_font_variant', defaultVariant, ';', true); + fillSelect(0, 'text_lineheight', 'style_font_line_height', defaultLineHeight, ';', true); + fillSelect(0, 'text_lineheight_measurement', 'style_font_line_height_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'background_attachment', 'style_background_attachment', defaultAttachment, ';', true); + fillSelect(0, 'background_repeat', 'style_background_repeat', defaultRepeat, ';', true); + + fillSelect(0, 'background_hpos_measurement', 'style_background_hpos_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'background_vpos_measurement', 'style_background_vpos_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'background_hpos', 'style_background_hpos', defaultPosH, ';', true); + fillSelect(0, 'background_vpos', 'style_background_vpos', defaultPosV, ';', true); + + fillSelect(0, 'block_wordspacing', 'style_wordspacing', 'normal', ';', true); + fillSelect(0, 'block_wordspacing_measurement', 'style_wordspacing_measurement', defaultSpacingMeasurement, ';', true); + fillSelect(0, 'block_letterspacing', 'style_letterspacing', 'normal', ';', true); + fillSelect(0, 'block_letterspacing_measurement', 'style_letterspacing_measurement', defaultSpacingMeasurement, ';', true); + fillSelect(0, 'block_vertical_alignment', 'style_vertical_alignment', defaultVAlign, ';', true); + fillSelect(0, 'block_text_align', 'style_text_align', "left;right;center;justify", ';', true); + fillSelect(0, 'block_whitespace', 'style_whitespace', "normal;pre;nowrap", ';', true); + fillSelect(0, 'block_display', 'style_display', defaultDisplay, ';', true); + fillSelect(0, 'block_text_indent_measurement', 'style_text_indent_measurement', defaultIndentMeasurement, ';', true); + + fillSelect(0, 'box_width_measurement', 'style_box_width_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_height_measurement', 'style_box_height_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_float', 'style_float', 'left;right;none', ';', true); + fillSelect(0, 'box_clear', 'style_clear', 'left;right;both;none', ';', true); + fillSelect(0, 'box_padding_left_measurement', 'style_padding_left_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_top_measurement', 'style_padding_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_bottom_measurement', 'style_padding_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_right_measurement', 'style_padding_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_left_measurement', 'style_margin_left_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_top_measurement', 'style_margin_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_bottom_measurement', 'style_margin_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_right_measurement', 'style_margin_right_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'border_style_top', 'style_border_style_top', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_right', 'style_border_style_right', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_bottom', 'style_border_style_bottom', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_left', 'style_border_style_left', defaultBorderStyle, ';', true); + + fillSelect(0, 'border_width_top', 'style_border_width_top', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_right', 'style_border_width_right', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_bottom', 'style_border_width_bottom', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_left', 'style_border_width_left', defaultBorderWidth, ';', true); + + fillSelect(0, 'border_width_top_measurement', 'style_border_width_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_right_measurement', 'style_border_width_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_bottom_measurement', 'style_border_width_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_left_measurement', 'style_border_width_left_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'list_type', 'style_list_type', defaultListType, ';', true); + fillSelect(0, 'list_position', 'style_list_position', "inside;outside", ';', true); + + fillSelect(0, 'positioning_type', 'style_positioning_type', "absolute;relative;static", ';', true); + fillSelect(0, 'positioning_visibility', 'style_positioning_visibility', "inherit;visible;hidden", ';', true); + + fillSelect(0, 'positioning_width_measurement', 'style_positioning_width_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_height_measurement', 'style_positioning_height_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_overflow', 'style_positioning_overflow', "visible;hidden;scroll;auto", ';', true); + + fillSelect(0, 'positioning_placement_top_measurement', 'style_positioning_placement_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_right_measurement', 'style_positioning_placement_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_bottom_measurement', 'style_positioning_placement_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_left_measurement', 'style_positioning_placement_left_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'positioning_clip_top_measurement', 'style_positioning_clip_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_right_measurement', 'style_positioning_clip_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_bottom_measurement', 'style_positioning_clip_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_left_measurement', 'style_positioning_clip_left_measurement', defaultMeasurement, ';', true); + + TinyMCE_EditableSelects.init(); + setupFormData(); + showDisabledControls(); +} + +function setupFormData() { + var ce = document.getElementById('container'), f = document.forms[0], s, b, i; + + // Setup text fields + + selectByValue(f, 'text_font', ce.style.fontFamily, true, true); + selectByValue(f, 'text_size', getNum(ce.style.fontSize), true, true); + selectByValue(f, 'text_size_measurement', getMeasurement(ce.style.fontSize)); + selectByValue(f, 'text_weight', ce.style.fontWeight, true, true); + selectByValue(f, 'text_style', ce.style.fontStyle, true, true); + selectByValue(f, 'text_lineheight', getNum(ce.style.lineHeight), true, true); + selectByValue(f, 'text_lineheight_measurement', getMeasurement(ce.style.lineHeight)); + selectByValue(f, 'text_case', ce.style.textTransform, true, true); + selectByValue(f, 'text_variant', ce.style.fontVariant, true, true); + f.text_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.color); + updateColor('text_color_pick', 'text_color'); + f.text_underline.checked = inStr(ce.style.textDecoration, 'underline'); + f.text_overline.checked = inStr(ce.style.textDecoration, 'overline'); + f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through'); + f.text_blink.checked = inStr(ce.style.textDecoration, 'blink'); + f.text_none.checked = inStr(ce.style.textDecoration, 'none'); + updateTextDecorations(); + + // Setup background fields + + f.background_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.backgroundColor); + updateColor('background_color_pick', 'background_color'); + f.background_image.value = ce.style.backgroundImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); + selectByValue(f, 'background_repeat', ce.style.backgroundRepeat, true, true); + selectByValue(f, 'background_attachment', ce.style.backgroundAttachment, true, true); + selectByValue(f, 'background_hpos', getNum(getVal(ce.style.backgroundPosition, 0)), true, true); + selectByValue(f, 'background_hpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 0))); + selectByValue(f, 'background_vpos', getNum(getVal(ce.style.backgroundPosition, 1)), true, true); + selectByValue(f, 'background_vpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 1))); + + // Setup block fields + + selectByValue(f, 'block_wordspacing', getNum(ce.style.wordSpacing), true, true); + selectByValue(f, 'block_wordspacing_measurement', getMeasurement(ce.style.wordSpacing)); + selectByValue(f, 'block_letterspacing', getNum(ce.style.letterSpacing), true, true); + selectByValue(f, 'block_letterspacing_measurement', getMeasurement(ce.style.letterSpacing)); + selectByValue(f, 'block_vertical_alignment', ce.style.verticalAlign, true, true); + selectByValue(f, 'block_text_align', ce.style.textAlign, true, true); + f.block_text_indent.value = getNum(ce.style.textIndent); + selectByValue(f, 'block_text_indent_measurement', getMeasurement(ce.style.textIndent)); + selectByValue(f, 'block_whitespace', ce.style.whiteSpace, true, true); + selectByValue(f, 'block_display', ce.style.display, true, true); + + // Setup box fields + + f.box_width.value = getNum(ce.style.width); + selectByValue(f, 'box_width_measurement', getMeasurement(ce.style.width)); + + f.box_height.value = getNum(ce.style.height); + selectByValue(f, 'box_height_measurement', getMeasurement(ce.style.height)); + selectByValue(f, 'box_float', ce.style.cssFloat || ce.style.styleFloat, true, true); + + selectByValue(f, 'box_clear', ce.style.clear, true, true); + + setupBox(f, ce, 'box_padding', 'padding', ''); + setupBox(f, ce, 'box_margin', 'margin', ''); + + // Setup border fields + + setupBox(f, ce, 'border_style', 'border', 'Style'); + setupBox(f, ce, 'border_width', 'border', 'Width'); + setupBox(f, ce, 'border_color', 'border', 'Color'); + + updateColor('border_color_top_pick', 'border_color_top'); + updateColor('border_color_right_pick', 'border_color_right'); + updateColor('border_color_bottom_pick', 'border_color_bottom'); + updateColor('border_color_left_pick', 'border_color_left'); + + f.elements.border_color_top.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_top.value); + f.elements.border_color_right.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_right.value); + f.elements.border_color_bottom.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_bottom.value); + f.elements.border_color_left.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_left.value); + + // Setup list fields + + selectByValue(f, 'list_type', ce.style.listStyleType, true, true); + selectByValue(f, 'list_position', ce.style.listStylePosition, true, true); + f.list_bullet_image.value = ce.style.listStyleImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); + + // Setup box fields + + selectByValue(f, 'positioning_type', ce.style.position, true, true); + selectByValue(f, 'positioning_visibility', ce.style.visibility, true, true); + selectByValue(f, 'positioning_overflow', ce.style.overflow, true, true); + f.positioning_zindex.value = ce.style.zIndex ? ce.style.zIndex : ""; + + f.positioning_width.value = getNum(ce.style.width); + selectByValue(f, 'positioning_width_measurement', getMeasurement(ce.style.width)); + + f.positioning_height.value = getNum(ce.style.height); + selectByValue(f, 'positioning_height_measurement', getMeasurement(ce.style.height)); + + setupBox(f, ce, 'positioning_placement', '', '', ['top', 'right', 'bottom', 'left']); + + s = ce.style.clip.replace(new RegExp("rect\\('?([^']*)'?\\)", 'gi'), "$1"); + s = s.replace(/,/g, ' '); + + if (!hasEqualValues([getVal(s, 0), getVal(s, 1), getVal(s, 2), getVal(s, 3)])) { + f.positioning_clip_top.value = getNum(getVal(s, 0)); + selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); + f.positioning_clip_right.value = getNum(getVal(s, 1)); + selectByValue(f, 'positioning_clip_right_measurement', getMeasurement(getVal(s, 1))); + f.positioning_clip_bottom.value = getNum(getVal(s, 2)); + selectByValue(f, 'positioning_clip_bottom_measurement', getMeasurement(getVal(s, 2))); + f.positioning_clip_left.value = getNum(getVal(s, 3)); + selectByValue(f, 'positioning_clip_left_measurement', getMeasurement(getVal(s, 3))); + } else { + f.positioning_clip_top.value = getNum(getVal(s, 0)); + selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); + f.positioning_clip_right.value = f.positioning_clip_bottom.value = f.positioning_clip_left.value; + } + +// setupBox(f, ce, '', 'border', 'Color'); +} + +function getMeasurement(s) { + return s.replace(/^([0-9.]+)(.*)$/, "$2"); +} + +function getNum(s) { + if (new RegExp('^(?:[0-9.]+)(?:[a-z%]+)$', 'gi').test(s)) + return s.replace(/[^0-9.]/g, ''); + + return s; +} + +function inStr(s, n) { + return new RegExp(n, 'gi').test(s); +} + +function getVal(s, i) { + var a = s.split(' '); + + if (a.length > 1) + return a[i]; + + return ""; +} + +function setValue(f, n, v) { + if (f.elements[n].type == "text") + f.elements[n].value = v; + else + selectByValue(f, n, v, true, true); +} + +function setupBox(f, ce, fp, pr, sf, b) { + if (typeof(b) == "undefined") + b = ['Top', 'Right', 'Bottom', 'Left']; + + if (isSame(ce, pr, sf, b)) { + f.elements[fp + "_same"].checked = true; + + setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); + f.elements[fp + "_top"].disabled = false; + + f.elements[fp + "_right"].value = ""; + f.elements[fp + "_right"].disabled = true; + f.elements[fp + "_bottom"].value = ""; + f.elements[fp + "_bottom"].disabled = true; + f.elements[fp + "_left"].value = ""; + f.elements[fp + "_left"].disabled = true; + + if (f.elements[fp + "_top_measurement"]) { + selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); + f.elements[fp + "_left_measurement"].disabled = true; + f.elements[fp + "_bottom_measurement"].disabled = true; + f.elements[fp + "_right_measurement"].disabled = true; + } + } else { + f.elements[fp + "_same"].checked = false; + + setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); + f.elements[fp + "_top"].disabled = false; + + setValue(f, fp + "_right", getNum(ce.style[pr + b[1] + sf])); + f.elements[fp + "_right"].disabled = false; + + setValue(f, fp + "_bottom", getNum(ce.style[pr + b[2] + sf])); + f.elements[fp + "_bottom"].disabled = false; + + setValue(f, fp + "_left", getNum(ce.style[pr + b[3] + sf])); + f.elements[fp + "_left"].disabled = false; + + if (f.elements[fp + "_top_measurement"]) { + selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); + selectByValue(f, fp + '_right_measurement', getMeasurement(ce.style[pr + b[1] + sf])); + selectByValue(f, fp + '_bottom_measurement', getMeasurement(ce.style[pr + b[2] + sf])); + selectByValue(f, fp + '_left_measurement', getMeasurement(ce.style[pr + b[3] + sf])); + f.elements[fp + "_left_measurement"].disabled = false; + f.elements[fp + "_bottom_measurement"].disabled = false; + f.elements[fp + "_right_measurement"].disabled = false; + } + } +} + +function isSame(e, pr, sf, b) { + var a = [], i, x; + + if (typeof(b) == "undefined") + b = ['Top', 'Right', 'Bottom', 'Left']; + + if (typeof(sf) == "undefined" || sf == null) + sf = ""; + + a[0] = e.style[pr + b[0] + sf]; + a[1] = e.style[pr + b[1] + sf]; + a[2] = e.style[pr + b[2] + sf]; + a[3] = e.style[pr + b[3] + sf]; + + for (i=0; i 0 ? s.substring(1) : s; + + if (f.text_none.checked) + s = "none"; + + ce.style.textDecoration = s; + + // Build background styles + + ce.style.backgroundColor = f.background_color.value; + ce.style.backgroundImage = f.background_image.value != "" ? "url(" + f.background_image.value + ")" : ""; + ce.style.backgroundRepeat = f.background_repeat.value; + ce.style.backgroundAttachment = f.background_attachment.value; + + if (f.background_hpos.value != "") { + s = ""; + s += f.background_hpos.value + (isNum(f.background_hpos.value) ? f.background_hpos_measurement.value : "") + " "; + s += f.background_vpos.value + (isNum(f.background_vpos.value) ? f.background_vpos_measurement.value : ""); + ce.style.backgroundPosition = s; + } + + // Build block styles + + ce.style.wordSpacing = f.block_wordspacing.value + (isNum(f.block_wordspacing.value) ? f.block_wordspacing_measurement.value : ""); + ce.style.letterSpacing = f.block_letterspacing.value + (isNum(f.block_letterspacing.value) ? f.block_letterspacing_measurement.value : ""); + ce.style.verticalAlign = f.block_vertical_alignment.value; + ce.style.textAlign = f.block_text_align.value; + ce.style.textIndent = f.block_text_indent.value + (isNum(f.block_text_indent.value) ? f.block_text_indent_measurement.value : ""); + ce.style.whiteSpace = f.block_whitespace.value; + ce.style.display = f.block_display.value; + + // Build box styles + + ce.style.width = f.box_width.value + (isNum(f.box_width.value) ? f.box_width_measurement.value : ""); + ce.style.height = f.box_height.value + (isNum(f.box_height.value) ? f.box_height_measurement.value : ""); + ce.style.styleFloat = f.box_float.value; + ce.style.cssFloat = f.box_float.value; + + ce.style.clear = f.box_clear.value; + + if (!f.box_padding_same.checked) { + ce.style.paddingTop = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); + ce.style.paddingRight = f.box_padding_right.value + (isNum(f.box_padding_right.value) ? f.box_padding_right_measurement.value : ""); + ce.style.paddingBottom = f.box_padding_bottom.value + (isNum(f.box_padding_bottom.value) ? f.box_padding_bottom_measurement.value : ""); + ce.style.paddingLeft = f.box_padding_left.value + (isNum(f.box_padding_left.value) ? f.box_padding_left_measurement.value : ""); + } else + ce.style.padding = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); + + if (!f.box_margin_same.checked) { + ce.style.marginTop = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); + ce.style.marginRight = f.box_margin_right.value + (isNum(f.box_margin_right.value) ? f.box_margin_right_measurement.value : ""); + ce.style.marginBottom = f.box_margin_bottom.value + (isNum(f.box_margin_bottom.value) ? f.box_margin_bottom_measurement.value : ""); + ce.style.marginLeft = f.box_margin_left.value + (isNum(f.box_margin_left.value) ? f.box_margin_left_measurement.value : ""); + } else + ce.style.margin = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); + + // Build border styles + + if (!f.border_style_same.checked) { + ce.style.borderTopStyle = f.border_style_top.value; + ce.style.borderRightStyle = f.border_style_right.value; + ce.style.borderBottomStyle = f.border_style_bottom.value; + ce.style.borderLeftStyle = f.border_style_left.value; + } else + ce.style.borderStyle = f.border_style_top.value; + + if (!f.border_width_same.checked) { + ce.style.borderTopWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); + ce.style.borderRightWidth = f.border_width_right.value + (isNum(f.border_width_right.value) ? f.border_width_right_measurement.value : ""); + ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : ""); + ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : ""); + } else + ce.style.borderWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); + + if (!f.border_color_same.checked) { + ce.style.borderTopColor = f.border_color_top.value; + ce.style.borderRightColor = f.border_color_right.value; + ce.style.borderBottomColor = f.border_color_bottom.value; + ce.style.borderLeftColor = f.border_color_left.value; + } else + ce.style.borderColor = f.border_color_top.value; + + // Build list styles + + ce.style.listStyleType = f.list_type.value; + ce.style.listStylePosition = f.list_position.value; + ce.style.listStyleImage = f.list_bullet_image.value != "" ? "url(" + f.list_bullet_image.value + ")" : ""; + + // Build positioning styles + + ce.style.position = f.positioning_type.value; + ce.style.visibility = f.positioning_visibility.value; + + if (ce.style.width == "") + ce.style.width = f.positioning_width.value + (isNum(f.positioning_width.value) ? f.positioning_width_measurement.value : ""); + + if (ce.style.height == "") + ce.style.height = f.positioning_height.value + (isNum(f.positioning_height.value) ? f.positioning_height_measurement.value : ""); + + ce.style.zIndex = f.positioning_zindex.value; + ce.style.overflow = f.positioning_overflow.value; + + if (!f.positioning_placement_same.checked) { + ce.style.top = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); + ce.style.right = f.positioning_placement_right.value + (isNum(f.positioning_placement_right.value) ? f.positioning_placement_right_measurement.value : ""); + ce.style.bottom = f.positioning_placement_bottom.value + (isNum(f.positioning_placement_bottom.value) ? f.positioning_placement_bottom_measurement.value : ""); + ce.style.left = f.positioning_placement_left.value + (isNum(f.positioning_placement_left.value) ? f.positioning_placement_left_measurement.value : ""); + } else { + s = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); + ce.style.top = s; + ce.style.right = s; + ce.style.bottom = s; + ce.style.left = s; + } + + if (!f.positioning_clip_same.checked) { + s = "rect("; + s += (isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_right.value) ? f.positioning_clip_right.value + f.positioning_clip_right_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_bottom.value) ? f.positioning_clip_bottom.value + f.positioning_clip_bottom_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_left.value) ? f.positioning_clip_left.value + f.positioning_clip_left_measurement.value : "auto"); + s += ")"; + + if (s != "rect(auto auto auto auto)") + ce.style.clip = s; + } else { + s = "rect("; + t = isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto"; + s += t + " "; + s += t + " "; + s += t + " "; + s += t + ")"; + + if (s != "rect(auto auto auto auto)") + ce.style.clip = s; + } + + ce.style.cssText = ce.style.cssText; +} + +function isNum(s) { + return new RegExp('[0-9]+', 'g').test(s); +} + +function showDisabledControls() { + var f = document.forms, i, a; + + for (i=0; i 1) { + addSelectValue(f, s, p[0], p[1]); + + if (se) + selectByValue(f, s, p[1]); + } else { + addSelectValue(f, s, p[0], p[0]); + + if (se) + selectByValue(f, s, p[0]); + } + } +} + +function toggleSame(ce, pre) { + var el = document.forms[0].elements, i; + + if (ce.checked) { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = true; + el[pre + "_bottom"].disabled = true; + el[pre + "_left"].disabled = true; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = true; + el[pre + "_bottom_measurement"].disabled = true; + el[pre + "_left_measurement"].disabled = true; + } + } else { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = false; + el[pre + "_bottom"].disabled = false; + el[pre + "_left"].disabled = false; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = false; + el[pre + "_bottom_measurement"].disabled = false; + el[pre + "_left_measurement"].disabled = false; + } + } + + showDisabledControls(); +} + +function synch(fr, to) { + var f = document.forms[0]; + + f.elements[to].value = f.elements[fr].value; + + if (f.elements[fr + "_measurement"]) + selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value); +} + +function updateTextDecorations(){ + var el = document.forms[0].elements; + + var textDecorations = ["text_underline", "text_overline", "text_linethrough", "text_blink"]; + var noneChecked = el["text_none"].checked; + tinymce.each(textDecorations, function(id) { + el[id].disabled = noneChecked; + if (noneChecked) { + el[id].checked = false; + } + }); +} + +tinyMCEPopup.onInit.add(init); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/langs/de_dlg.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/langs/de_dlg.js new file mode 100644 index 0000000..ad04664 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.style_dlg',{"text_lineheight":"Zeilenh\u00f6he","text_variant":"Variante","text_style":"Stil","text_weight":"Dicke","text_size":"Gr\u00f6\u00dfe","text_font":"Schriftart","text_props":"Text","positioning_tab":"Positionierung","list_tab":"Liste","border_tab":"Rahmen","box_tab":"Box","block_tab":"Block","background_tab":"Hintergrund","text_tab":"Text",apply:"\u00dcbernehmen",title:"CSS-Styles bearbeiten",clip:"Ausschnitt",placement:"Platzierung",overflow:"Verhalten bei \u00dcbergr\u00f6\u00dfe",zindex:"Z-Wert",visibility:"Sichtbar","positioning_type":"Art der Positionierung",position:"Positionierung","bullet_image":"Listenpunkt-Grafik","list_type":"Listenpunkt-Art",color:"Textfarbe",height:"H\u00f6he",width:"Breite",style:"Format",margin:"\u00c4u\u00dferer Abstand",left:"Links",bottom:"Unten",right:"Rechts",top:"Oben",same:"Alle gleich",padding:"Innerer Abstand","box_clear":"Umflie\u00dfung verhindern","box_float":"Umflie\u00dfung","box_height":"H\u00f6he","box_width":"Breite","block_display":"Umbruchverhalten","block_whitespace":"Automatischer Umbruch","block_text_indent":"Einr\u00fcckung","block_text_align":"Ausrichtung","block_vertical_alignment":"Vertikale Ausrichtung","block_letterspacing":"Buchstabenabstand","block_wordspacing":"Wortabstand","background_vpos":"Position Y","background_hpos":"Position X","background_attachment":"Wasserzeicheneffekt","background_repeat":"Wiederholung","background_image":"Hintergrundbild","background_color":"Hintergrundfarbe","text_none":"keine","text_blink":"blinkend","text_case":"Schreibung","text_striketrough":"durchgestrichen","text_underline":"unterstrichen","text_overline":"\u00fcberstrichen","text_decoration":"Gestaltung","text_color":"Farbe",text:"Text",background:"Hintergrund",block:"Block",box:"Box",border:"Rahmen",list:"Liste"}); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/langs/en_dlg.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/langs/en_dlg.js new file mode 100644 index 0000000..35881b3 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.style_dlg',{"text_lineheight":"Line Height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",toggle_insert_span:"Insert span at selection",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet Image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for All",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text Indent","block_text_align":"Text Align","block_vertical_alignment":"Vertical Alignment","block_letterspacing":"Letter Spacing","block_wordspacing":"Word Spacing","background_vpos":"Vertical Position","background_hpos":"Horizontal Position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background Image","background_color":"Background Color","text_none":"None","text_blink":"Blink","text_case":"Case","text_striketrough":"Strikethrough","text_underline":"Underline","text_overline":"Overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/props.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/props.htm new file mode 100644 index 0000000..7dc087a --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/props.htm @@ -0,0 +1,845 @@ + + + + {#style_dlg.title} + + + + + + + + + + +
+ + +
+
+
+ {#style_dlg.text} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
  + + +
+
+ +
+ + + +
+ + + + + + +
+ +   + + +
+
+ +
+ + + + + +
 
+
{#style_dlg.text_decoration} + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+ {#style_dlg.background} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
 
+
+ + + + +
 
+
+ + + + + + +
  + + +
+
+ + + + + + +
  + + +
+
+
+
+ +
+
+ {#style_dlg.block} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
  + + +
+
+ + + + + + +
  + + +
+
+ + + + + + +
  + + + +
+
+
+
+ +
+
+ {#style_dlg.box} + + + + + + + + + + + + + + +
+ + + + + + +
  + + +
+
   
+ + + + + + +
  + + +
+
   
+
+ +
+
+ {#style_dlg.padding} + + + + + + + + + + + + + + + + + + + + + + +
 
+ + + + + + +
  + + +
+
+ + + + + + +
  + + +
+
+ + + + + + +
  + + +
+
+ + + + + + +
  + + +
+
+
+
+ +
+
+ {#style_dlg.margin} + + + + + + + + + + + + + + + + + + + + + + +
 
+ + + + + + +
  + + +
+
+ + + + + + +
  + + +
+
+ + + + + + +
  + + +
+
+ + + + + + +
  + + +
+
+
+
+
+
+ +
+
+ {#style_dlg.border} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  {#style_dlg.style} {#style_dlg.width} {#style_dlg.color}
      
{#style_dlg.top}   + + + + + + +
  + + +
+
  + + + + + +
 
+
{#style_dlg.right}   + + + + + + +
  + + +
+
  + + + + + +
 
+
{#style_dlg.bottom}   + + + + + + +
  + + +
+
  + + + + + +
 
+
{#style_dlg.left}   + + + + + + +
  + + +
+
  + + + + + +
 
+
+
+
+ +
+
+ {#style_dlg.list} + + + + + + + + + + + + + + + +
+
+
+ +
+
+ {#style_dlg.position} + + + + + + + + + + + + + + + + + + + + + +
   
+ + + + + + +
  + + +
+
   
+ + + + + + +
  + + +
+
   
+
+ +
+
+ {#style_dlg.placement} + + + + + + + + + + + + + + + + + + + + + + +
 
{#style_dlg.top} + + + + + + +
  + + +
+
{#style_dlg.right} + + + + + + +
  + + +
+
{#style_dlg.bottom} + + + + + + +
  + + +
+
{#style_dlg.left} + + + + + + +
  + + +
+
+
+
+ +
+
+ {#style_dlg.clip} + + + + + + + + + + + + + + + + + + + + + + +
 
{#style_dlg.top} + + + + + + +
  + + +
+
{#style_dlg.right} + + + + + + +
  + + +
+
{#style_dlg.bottom} + + + + + + +
  + + +
+
{#style_dlg.left} + + + + + + +
  + + +
+
+
+
+
+
+
+ +
+ + +
+ +
+ + + +
+
+ +
+
+
+ + + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/readme.txt b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/readme.txt new file mode 100644 index 0000000..5bac302 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/style/readme.txt @@ -0,0 +1,19 @@ +Edit CSS Style plug-in notes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Unlike WYSIWYG editor functionality that operates only on the selected text, +typically by inserting new HTML elements with the specified styles. +This plug-in operates on the HTML blocks surrounding the selected text. +No new HTML elements are created. + +This plug-in only operates on the surrounding blocks and not the nearest +parent node. This means that if a block encapsulates a node, +e.g

text

, then only the styles in the block are +recognized, not those in the span. + +When selecting text that includes multiple blocks at the same level (peers), +this plug-in accumulates the specified styles in all of the surrounding blocks +and populates the dialogue checkboxes accordingly. There is no differentiation +between styles set in all the blocks versus styles set in some of the blocks. + +When the [Update] or [Apply] buttons are pressed, the styles selected in the +checkboxes are applied to all blocks that surround the selected text. diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js new file mode 100644 index 0000000..2c51291 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js @@ -0,0 +1 @@ +(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(t){n=c.select(":input:enabled,*[tabindex]:not(iframe)");function s(v){return v.nodeName==="BODY"||(v.type!="hidden"&&!(v.style.display=="none")&&!(v.style.visibility=="hidden")&&s(v.parentNode))}function i(v){return v.attributes.tabIndex.specified||v.nodeName=="INPUT"||v.nodeName=="TEXTAREA"}function u(){return tinymce.isIE6||tinymce.isIE7}function r(v){return((!u()||i(v)))&&v.getAttribute("tabindex")!="-1"&&s(v)}d(n,function(w,v){if(w.id==l.id){j=v;return false}});if(t>0){for(m=j+1;m=0;m--){if(r(n[m])){return n[m]}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(n.id&&(l=tinymce.get(n.id||n.name))){l.focus()}else{window.setTimeout(function(){if(!tinymce.isWebKit){window.focus()}n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js new file mode 100644 index 0000000..94f4532 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js @@ -0,0 +1,122 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode; + + tinymce.create('tinymce.plugins.TabFocusPlugin', { + init : function(ed, url) { + function tabCancel(ed, e) { + if (e.keyCode === 9) + return Event.cancel(e); + } + + function tabHandler(ed, e) { + var x, i, f, el, v; + + function find(d) { + el = DOM.select(':input:enabled,*[tabindex]:not(iframe)'); + + function canSelectRecursive(e) { + return e.nodeName==="BODY" || (e.type != 'hidden' && + !(e.style.display == "none") && + !(e.style.visibility == "hidden") && canSelectRecursive(e.parentNode)); + } + function canSelectInOldIe(el) { + return el.attributes["tabIndex"].specified || el.nodeName == "INPUT" || el.nodeName == "TEXTAREA"; + } + function isOldIe() { + return tinymce.isIE6 || tinymce.isIE7; + } + function canSelect(el) { + return ((!isOldIe() || canSelectInOldIe(el))) && el.getAttribute("tabindex") != '-1' && canSelectRecursive(el); + } + + each(el, function(e, i) { + if (e.id == ed.id) { + x = i; + return false; + } + }); + if (d > 0) { + for (i = x + 1; i < el.length; i++) { + if (canSelect(el[i])) + return el[i]; + } + } else { + for (i = x - 1; i >= 0; i--) { + if (canSelect(el[i])) + return el[i]; + } + } + + return null; + } + + if (e.keyCode === 9) { + v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next'))); + + if (v.length == 1) { + v[1] = v[0]; + v[0] = ':prev'; + } + + // Find element to focus + if (e.shiftKey) { + if (v[0] == ':prev') + el = find(-1); + else + el = DOM.get(v[0]); + } else { + if (v[1] == ':next') + el = find(1); + else + el = DOM.get(v[1]); + } + + if (el) { + if (el.id && (ed = tinymce.get(el.id || el.name))) + ed.focus(); + else + window.setTimeout(function() { + if (!tinymce.isWebKit) + window.focus(); + el.focus(); + }, 10); + + return Event.cancel(e); + } + } + } + + ed.onKeyUp.add(tabCancel); + + if (tinymce.isGecko) { + ed.onKeyPress.add(tabHandler); + ed.onKeyDown.add(tabCancel); + } else + ed.onKeyDown.add(tabHandler); + + }, + + getInfo : function() { + return { + longname : 'Tabfocus', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin); +})(); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/cell.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/cell.htm new file mode 100644 index 0000000..2922f7a --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/cell.htm @@ -0,0 +1,180 @@ + + + + {#table_dlg.cell_title} + + + + + + + + + +
+ + +
+
+
+ {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ +
+
+
+ +
+
+ {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + +
 
+
+ + + + + +
 
+
+ + + + + +
 
+
+
+
+
+ +
+
+ +
+ + + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/css/cell.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/css/cell.css new file mode 100644 index 0000000..a47cc1a --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/css/cell.css @@ -0,0 +1,17 @@ +/* CSS file for cell dialog in the table plugin */ + +.panel_wrapper div.current { + height: 200px; +} + +.advfield { + width: 200px; +} + +#action { + margin-bottom: 3px; +} + +#class { + width: 150px; +} \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/css/row.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/css/row.css new file mode 100644 index 0000000..0e397db --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/css/row.css @@ -0,0 +1,25 @@ +/* CSS file for row dialog in the table plugin */ + +.panel_wrapper div.current { + height: 200px; +} + +.advfield { + width: 200px; +} + +#action { + margin-bottom: 3px; +} + +#rowtype,#align,#valign,#class,#height { + width: 150px; +} + +#height { + width: 50px; +} + +.col2 { + padding-left: 20px; +} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/css/table.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/css/table.css new file mode 100644 index 0000000..8f10783 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/css/table.css @@ -0,0 +1,13 @@ +/* CSS file for table dialog in the table plugin */ + +.panel_wrapper div.current { + height: 245px; +} + +.advfield { + width: 200px; +} + +#class { + width: 150px; +} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/editor_plugin.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/editor_plugin.js new file mode 100644 index 0000000..4a92e1b --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/editor_plugin.js @@ -0,0 +1 @@ +(function(d){var e=d.each;function c(g,h){var j=h.ownerDocument,f=j.createRange(),k;f.setStartBefore(h);f.setEnd(g.endContainer,g.endOffset);k=j.createElement("body");k.appendChild(f.cloneContents());return k.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(g,f){return parseInt(g.getAttribute(f)||1)}function b(H,G,K){var g,L,D,o;t();o=G.getParent(K.getStart(),"th,td");if(o){L=F(o);D=I();o=z(L.x,L.y)}function A(N,M){N=N.cloneNode(M);N.removeAttribute("id");return N}function t(){var M=0;g=[];e(["thead","tbody","tfoot"],function(N){var O=G.select("> "+N+" tr",H);e(O,function(P,Q){Q+=M;e(G.select("> td, > th",P),function(W,R){var S,T,U,V;if(g[Q]){while(g[Q][R]){R++}}U=a(W,"rowspan");V=a(W,"colspan");for(T=Q;T'}return false}},"childNodes");M=A(M,false);s(M,"rowSpan",1);s(M,"colSpan",1);if(N){M.appendChild(N)}else{if(!d.isIE||d.isIE11){M.innerHTML='
'}}return M}function q(){var M=G.createRng();e(G.select("tr",H),function(N){if(N.cells.length==0){G.remove(N)}});if(G.select("tr",H).length==0){M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H);return}e(G.select("thead,tbody,tfoot",H),function(N){if(N.rows.length==0){G.remove(N)}});t();row=g[Math.min(g.length-1,L.y)];if(row){K.select(row[Math.min(row.length-1,L.x)].elm,true);K.collapse(true)}}function u(S,Q,U,R){var P,N,M,O,T;P=g[Q][S].elm.parentNode;for(M=1;M<=U;M++){P=G.getNext(P,"tr");if(P){for(N=S;N>=0;N--){T=g[Q+M][N].elm;if(T.parentNode==P){for(O=1;O<=R;O++){G.insertAfter(f(T),T)}break}}if(N==-1){for(O=1;O<=R;O++){P.insertBefore(f(P.cells[0]),P.cells[0])}}}}}function C(){e(g,function(M,N){e(M,function(P,O){var S,R,T,Q;if(j(P)){P=P.elm;S=a(P,"colspan");R=a(P,"rowspan");if(S>1||R>1){s(P,"rowSpan",1);s(P,"colSpan",1);for(Q=0;Q1){s(S,"rowSpan",O+1);continue}}else{if(M>0&&g[M-1][R]){V=g[M-1][R].elm;O=a(V,"rowSpan");if(O>1){s(V,"rowSpan",O+1);continue}}}N=f(S);s(N,"colSpan",S.colSpan);U.appendChild(N);P=S}}if(U.hasChildNodes()){if(!Q){G.insertAfter(U,T)}else{T.parentNode.insertBefore(U,T)}}}function h(N){var O,M;e(g,function(P,Q){e(P,function(S,R){if(j(S)){O=R;if(N){return false}}});if(N){return !O}});e(g,function(S,T){var P,Q,R;if(!S[O]){return}P=S[O].elm;if(P!=M){R=a(P,"colspan");Q=a(P,"rowspan");if(R==1){if(!N){G.insertAfter(f(P),P);u(O,T,Q-1,R)}else{P.parentNode.insertBefore(f(P),P);u(O,T,Q-1,R)}}else{s(P,"colSpan",P.colSpan+1)}M=P}})}function n(){var M=[];e(g,function(N,O){e(N,function(Q,P){if(j(Q)&&d.inArray(M,P)===-1){e(g,function(T){var R=T[P].elm,S;S=a(R,"colSpan");if(S>1){s(R,"colSpan",S-1)}else{G.remove(R)}});M.push(P)}})});q()}function m(){var N;function M(Q){var P,R,O;P=G.getNext(Q,"tr");e(Q.cells,function(S){var T=a(S,"rowSpan");if(T>1){s(S,"rowSpan",T-1);R=F(S);u(R.x,R.y,1,1)}});R=F(Q.cells[0]);e(g[R.y],function(S){var T;S=S.elm;if(S!=O){T=a(S,"rowSpan");if(T<=1){G.remove(S)}else{s(S,"rowSpan",T-1)}O=S}})}N=k();e(N.reverse(),function(O){M(O)});q()}function E(){var M=k();G.remove(M);q();return M}function J(){var M=k();e(M,function(O,N){M[N]=A(O,true)});return M}function B(O,N){if(!O){return}var P=k(),M=P[N?0:P.length-1],Q=M.cells.length;e(g,function(S){var R;Q=0;e(S,function(U,T){if(U.real){Q+=U.colspan}if(U.elm.parentNode==M){R=1}});if(R){return false}});if(!N){O.reverse()}e(O,function(T){var S=T.cells.length,R;for(i=0;iN){N=R}if(Q>M){M=Q}if(S.real){U=S.colspan-1;T=S.rowspan-1;if(U){if(R+U>N){N=R+U}}if(T){if(Q+T>M){M=Q+T}}}}})});return{x:N,y:M}}function v(S){var P,O,U,T,N,M,Q,R;D=F(S);if(L&&D){P=Math.min(L.x,D.x);O=Math.min(L.y,D.y);U=Math.max(L.x,D.x);T=Math.max(L.y,D.y);N=U;M=T;for(y=O;y<=M;y++){S=g[y][P];if(!S.real){if(P-(S.colspan-1)N){N=x+Q}}if(R){if(y+R>M){M=y+R}}}}}G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=O;y<=M;y++){for(x=P;x<=N;x++){if(g[y][x]){G.addClass(g[y][x].elm,"mceSelected")}}}}}d.extend(this,{deleteTable:r,split:C,merge:p,insertRow:l,insertCol:h,deleteCols:n,deleteRows:m,cutRows:E,copyRows:J,pasteRows:B,getPos:F,setStartCell:w,setEndCell:v})}d.create("tinymce.plugins.TablePlugin",{init:function(g,h){var f,m,j=true;function l(p){var o=g.selection,n=g.dom.getParent(p||o.getNode(),"table");if(n){return new b(n,g.dom,o)}}function k(){g.getBody().style.webkitUserSelect="";if(j){g.dom.removeClass(g.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");j=false}}e([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(n){g.addButton(n[0],{title:n[1],cmd:n[2],ui:n[3]})});if(!d.isIE){g.onClick.add(function(n,o){o=o.target;if(o.nodeName==="TABLE"){n.selection.select(o);n.nodeChanged()}})}g.onPreProcess.add(function(o,p){var n,q,r,t=o.dom,s;n=t.select("table",p.node);q=n.length;while(q--){r=n[q];t.setAttrib(r,"data-mce-style","");if((s=t.getAttrib(r,"width"))){t.setStyle(r,"width",s);t.setAttrib(r,"width","")}if((s=t.getAttrib(r,"height"))){t.setStyle(r,"height",s);t.setAttrib(r,"height","")}}});g.onNodeChange.add(function(q,o,s){var r;s=q.selection.getStart();r=q.dom.getParent(s,"td,th,caption");o.setActive("table",s.nodeName==="TABLE"||!!r);if(r&&r.nodeName==="CAPTION"){r=0}o.setDisabled("delete_table",!r);o.setDisabled("delete_col",!r);o.setDisabled("delete_table",!r);o.setDisabled("delete_row",!r);o.setDisabled("col_after",!r);o.setDisabled("col_before",!r);o.setDisabled("row_after",!r);o.setDisabled("row_before",!r);o.setDisabled("row_props",!r);o.setDisabled("cell_props",!r);o.setDisabled("split_cells",!r);o.setDisabled("merge_cells",!r)});g.onInit.add(function(r){var p,t,q=r.dom,u;f=r.windowManager;r.onMouseDown.add(function(w,z){if(z.button!=2){k();t=q.getParent(z.target,"td,th");p=q.getParent(t,"table")}});q.bind(r.getDoc(),"mouseover",function(C){var A,z,B=C.target;if(t&&(u||B!=t)&&(B.nodeName=="TD"||B.nodeName=="TH")){z=q.getParent(B,"table");if(z==p){if(!u){u=l(z);u.setStartCell(t);r.getBody().style.webkitUserSelect="none"}u.setEndCell(B);j=true}A=r.selection.getSel();try{if(A.removeAllRanges){A.removeAllRanges()}else{A.empty()}}catch(w){}C.preventDefault()}});r.onMouseUp.add(function(F,G){var z,B=F.selection,H,I=B.getSel(),w,C,A,E;if(t){if(u){F.getBody().style.webkitUserSelect=""}function D(J,L){var K=new d.dom.TreeWalker(J,J);do{if(J.nodeType==3&&d.trim(J.nodeValue).length!=0){if(L){z.setStart(J,0)}else{z.setEnd(J,J.nodeValue.length)}return}if(J.nodeName=="BR"){if(L){z.setStartBefore(J)}else{z.setEndBefore(J)}return}}while(J=(L?K.next():K.prev()))}H=q.select("td.mceSelected,th.mceSelected");if(H.length>0){z=q.createRng();C=H[0];E=H[H.length-1];z.setStartBefore(C);z.setEndAfter(C);D(C,1);w=new d.dom.TreeWalker(C,q.getParent(H[0],"table"));do{if(C.nodeName=="TD"||C.nodeName=="TH"){if(!q.hasClass(C,"mceSelected")){break}A=C}}while(C=w.next());D(A);B.setRng(z)}F.nodeChanged();t=u=p=null}});r.onKeyUp.add(function(w,z){k()});r.onKeyDown.add(function(w,z){n(w)});r.onMouseDown.add(function(w,z){if(z.button!=2){n(w)}});function o(D,z,A,F){var B=3,G=D.dom.getParent(z.startContainer,"TABLE"),C,w,E;if(G){C=G.parentNode}w=z.startContainer.nodeType==B&&z.startOffset==0&&z.endOffset==0&&F&&(A.nodeName=="TR"||A==C);E=(A.nodeName=="TD"||A.nodeName=="TH")&&!F;return w||E}function n(A){if(!d.isWebKit){return}var z=A.selection.getRng();var C=A.selection.getNode();var B=A.dom.getParent(z.startContainer,"TD,TH");if(!o(A,z,C,B)){return}if(!B){B=C}var w=B.lastChild;while(w.lastChild){w=w.lastChild}z.setEnd(w,w.nodeValue.length);A.selection.setRng(z)}r.plugins.table.fixTableCellSelection=n;if(r&&r.plugins.contextmenu){r.plugins.contextmenu.onContextMenu.add(function(A,w,C){var D,B=r.selection,z=B.getNode()||r.getBody();if(r.dom.getParent(C,"td")||r.dom.getParent(C,"th")||r.dom.select("td.mceSelected,th.mceSelected").length){w.removeAll();if(z.nodeName=="A"&&!r.dom.getAttrib(z,"name")){w.add({title:"advanced.link_desc",icon:"link",cmd:r.plugins.advlink?"mceAdvLink":"mceLink",ui:true});w.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});w.addSeparator()}if(z.nodeName=="IMG"&&z.className.indexOf("mceItem")==-1){w.add({title:"advanced.image_desc",icon:"image",cmd:r.plugins.advimage?"mceAdvImage":"mceImage",ui:true});w.addSeparator()}w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});w.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});w.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});w.addSeparator();D=w.addMenu({title:"table.cell"});D.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});D.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});D.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});D=w.addMenu({title:"table.row"});D.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});D.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});D.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});D.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});D.addSeparator();D.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});D.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});D.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!m);D.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!m);D=w.addMenu({title:"table.col"});D.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});D.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});D.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(d.isWebKit){function v(C,N){var L=d.VK;var Q=N.keyCode;function O(Y,U,S){var T=Y?"previousSibling":"nextSibling";var Z=C.dom.getParent(U,"tr");var X=Z[T];if(X){z(C,U,X,Y);d.dom.Event.cancel(S);return true}else{var aa=C.dom.getParent(Z,"table");var W=Z.parentNode;var R=W.nodeName.toLowerCase();if(R==="tbody"||R===(Y?"tfoot":"thead")){var V=w(Y,aa,W,"tbody");if(V!==null){return K(Y,V,U,S)}}return M(Y,Z,T,aa,S)}}function w(V,T,U,X){var S=C.dom.select(">"+X,T);var R=S.indexOf(U);if(V&&R===0||!V&&R===S.length-1){return B(V,T)}else{if(R===-1){var W=U.tagName.toLowerCase()==="thead"?0:S.length-1;return S[W]}else{return S[R+(V?-1:1)]}}}function B(U,T){var S=U?"thead":"tfoot";var R=C.dom.select(">"+S,T);return R.length!==0?R[0]:null}function K(V,T,S,U){var R=J(T,V);R&&z(C,S,R,V);d.dom.Event.cancel(U);return true}function M(Y,U,R,X,W){var S=X[R];if(S){F(S);return true}else{var V=C.dom.getParent(X,"td,th");if(V){return O(Y,V,W)}else{var T=J(U,!Y);F(T);return d.dom.Event.cancel(W)}}}function J(S,R){var T=S&&S[R?"lastChild":"firstChild"];return T&&T.nodeName==="BR"?C.dom.getParent(T,"td,th"):T}function F(R){C.selection.setCursorLocation(R,0)}function A(){return Q==L.UP||Q==L.DOWN}function D(R){var T=R.selection.getNode();var S=R.dom.getParent(T,"tr");return S!==null}function P(S){var R=0;var T=S;while(T.previousSibling){T=T.previousSibling;R=R+a(T,"colspan")}return R}function E(T,R){var U=0;var S=0;e(T.children,function(V,W){U=U+a(V,"colspan");S=W;if(U>R){return false}});return S}function z(T,W,Y,V){var X=P(T.dom.getParent(W,"td,th"));var S=E(Y,X);var R=Y.childNodes[S];var U=J(R,V);F(U||R)}function H(R){var T=C.selection.getNode();var U=C.dom.getParent(T,"td,th");var S=C.dom.getParent(R,"td,th");return U&&U!==S&&I(U,S)}function I(S,R){return C.dom.getParent(S,"TABLE")===C.dom.getParent(R,"TABLE")}if(A()&&D(C)){var G=C.selection.getNode();setTimeout(function(){if(H(G)){O(!N.shiftKey&&Q===L.UP,G,N)}},0)}}r.onKeyDown.add(v)}function s(){var w;for(w=r.getBody().lastChild;w&&w.nodeType==3&&!w.nodeValue.length;w=w.previousSibling){}if(w&&w.nodeName=="TABLE"){if(r.settings.forced_root_block){r.dom.add(r.getBody(),r.settings.forced_root_block,null,d.isIE&&!d.isIE11?" ":'
')}else{r.dom.add(r.getBody(),"br",{"data-mce-bogus":"1"})}}}if(d.isGecko){r.onKeyDown.add(function(z,B){var w,A,C=z.dom;if(B.keyCode==37||B.keyCode==38){w=z.selection.getRng();A=C.getParent(w.startContainer,"table");if(A&&z.getBody().firstChild==A){if(c(w,A)){w=C.createRng();w.setStartBefore(A);w.setEndBefore(A);z.selection.setRng(w);B.preventDefault()}}}})}r.onKeyUp.add(s);r.onSetContent.add(s);r.onVisualAid.add(s);r.onPreProcess.add(function(w,A){var z=A.node.lastChild;if(z&&(z.nodeName=="BR"||(z.childNodes.length==1&&(z.firstChild.nodeName=="BR"||z.firstChild.nodeValue=="\u00a0")))&&z.previousSibling&&z.previousSibling.nodeName=="TABLE"){w.dom.remove(z)}});s();r.startContent=r.getContent({format:"raw"})});e({mceTableSplitCells:function(n){n.split()},mceTableMergeCells:function(o){var p,q,n;n=g.dom.getParent(g.selection.getNode(),"th,td");if(n){p=n.rowSpan;q=n.colSpan}if(!g.dom.select("td.mceSelected,th.mceSelected").length){f.open({url:h+"/merge_cells.htm",width:240+parseInt(g.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(g.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:p,cols:q,onaction:function(r){o.merge(n,r.cols,r.rows)},plugin_url:h})}else{o.merge()}},mceTableInsertRowBefore:function(n){n.insertRow(true)},mceTableInsertRowAfter:function(n){n.insertRow()},mceTableInsertColBefore:function(n){n.insertCol(true)},mceTableInsertColAfter:function(n){n.insertCol()},mceTableDeleteCol:function(n){n.deleteCols()},mceTableDeleteRow:function(n){n.deleteRows()},mceTableCutRow:function(n){m=n.cutRows()},mceTableCopyRow:function(n){m=n.copyRows()},mceTablePasteRowBefore:function(n){n.pasteRows(m,true)},mceTablePasteRowAfter:function(n){n.pasteRows(m)},mceTableDelete:function(n){n.deleteTable()}},function(o,n){g.addCommand(n,function(){var p=l();if(p){o(p);g.execCommand("mceRepaint");k()}})});e({mceInsertTable:function(n){f.open({url:h+"/table.htm",width:400+parseInt(g.getLang("table.table_delta_width",0)),height:320+parseInt(g.getLang("table.table_delta_height",0)),inline:1},{plugin_url:h,action:n?n.action:0})},mceTableRowProps:function(){f.open({url:h+"/row.htm",width:400+parseInt(g.getLang("table.rowprops_delta_width",0)),height:295+parseInt(g.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:h})},mceTableCellProps:function(){f.open({url:h+"/cell.htm",width:400+parseInt(g.getLang("table.cellprops_delta_width",0)),height:295+parseInt(g.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:h})}},function(o,n){g.addCommand(n,function(p,q){o(q)})})}});d.PluginManager.add("table",d.plugins.TablePlugin)})(tinymce); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/editor_plugin_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/editor_plugin_src.js new file mode 100644 index 0000000..0456483 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/editor_plugin_src.js @@ -0,0 +1,1456 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function(tinymce) { + var each = tinymce.each; + + // Checks if the selection/caret is at the start of the specified block element + function isAtStart(rng, par) { + var doc = par.ownerDocument, rng2 = doc.createRange(), elm; + + rng2.setStartBefore(par); + rng2.setEnd(rng.endContainer, rng.endOffset); + + elm = doc.createElement('body'); + elm.appendChild(rng2.cloneContents()); + + // Check for text characters of other elements that should be treated as content + return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length == 0; + }; + + function getSpanVal(td, name) { + return parseInt(td.getAttribute(name) || 1); + } + + /** + * Table Grid class. + */ + function TableGrid(table, dom, selection) { + var grid, startPos, endPos, selectedCell; + + buildGrid(); + selectedCell = dom.getParent(selection.getStart(), 'th,td'); + if (selectedCell) { + startPos = getPos(selectedCell); + endPos = findEndPos(); + selectedCell = getCell(startPos.x, startPos.y); + } + + function cloneNode(node, children) { + node = node.cloneNode(children); + node.removeAttribute('id'); + + return node; + } + + function buildGrid() { + var startY = 0; + + grid = []; + + each(['thead', 'tbody', 'tfoot'], function(part) { + var rows = dom.select('> ' + part + ' tr', table); + + each(rows, function(tr, y) { + y += startY; + + each(dom.select('> td, > th', tr), function(td, x) { + var x2, y2, rowspan, colspan; + + // Skip over existing cells produced by rowspan + if (grid[y]) { + while (grid[y][x]) + x++; + } + + // Get col/rowspan from cell + rowspan = getSpanVal(td, 'rowspan'); + colspan = getSpanVal(td, 'colspan'); + + // Fill out rowspan/colspan right and down + for (y2 = y; y2 < y + rowspan; y2++) { + if (!grid[y2]) + grid[y2] = []; + + for (x2 = x; x2 < x + colspan; x2++) { + grid[y2][x2] = { + part : part, + real : y2 == y && x2 == x, + elm : td, + rowspan : rowspan, + colspan : colspan + }; + } + } + }); + }); + + startY += rows.length; + }); + }; + + function getCell(x, y) { + var row; + + row = grid[y]; + if (row) + return row[x]; + }; + + function setSpanVal(td, name, val) { + if (td) { + val = parseInt(val); + + if (val === 1) + td.removeAttribute(name, 1); + else + td.setAttribute(name, val, 1); + } + } + + function isCellSelected(cell) { + return cell && (dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell); + }; + + function getSelectedRows() { + var rows = []; + + each(table.rows, function(row) { + each(row.cells, function(cell) { + if (dom.hasClass(cell, 'mceSelected') || cell == selectedCell.elm) { + rows.push(row); + return false; + } + }); + }); + + return rows; + }; + + function deleteTable() { + var rng = dom.createRng(); + + rng.setStartAfter(table); + rng.setEndAfter(table); + + selection.setRng(rng); + + dom.remove(table); + }; + + function cloneCell(cell) { + var formatNode; + + // Clone formats + tinymce.walk(cell, function(node) { + var curNode; + + if (node.nodeType == 3) { + each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) { + node = cloneNode(node, false); + + if (!formatNode) + formatNode = curNode = node; + else if (curNode) + curNode.appendChild(node); + + curNode = node; + }); + + // Add something to the inner node + if (curNode) + curNode.innerHTML = tinymce.isIE && !tinymce.isIE11 ? ' ' : '
'; + + return false; + } + }, 'childNodes'); + + cell = cloneNode(cell, false); + setSpanVal(cell, 'rowSpan', 1); + setSpanVal(cell, 'colSpan', 1); + + if (formatNode) { + cell.appendChild(formatNode); + } else { + if (!tinymce.isIE || tinymce.isIE11) + cell.innerHTML = '
'; + } + + return cell; + }; + + function cleanup() { + var rng = dom.createRng(); + + // Empty rows + each(dom.select('tr', table), function(tr) { + if (tr.cells.length == 0) + dom.remove(tr); + }); + + // Empty table + if (dom.select('tr', table).length == 0) { + rng.setStartAfter(table); + rng.setEndAfter(table); + selection.setRng(rng); + dom.remove(table); + return; + } + + // Empty header/body/footer + each(dom.select('thead,tbody,tfoot', table), function(part) { + if (part.rows.length == 0) + dom.remove(part); + }); + + // Restore selection to start position if it still exists + buildGrid(); + + // Restore the selection to the closest table position + row = grid[Math.min(grid.length - 1, startPos.y)]; + if (row) { + selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true); + selection.collapse(true); + } + }; + + function fillLeftDown(x, y, rows, cols) { + var tr, x2, r, c, cell; + + tr = grid[y][x].elm.parentNode; + for (r = 1; r <= rows; r++) { + tr = dom.getNext(tr, 'tr'); + + if (tr) { + // Loop left to find real cell + for (x2 = x; x2 >= 0; x2--) { + cell = grid[y + r][x2].elm; + + if (cell.parentNode == tr) { + // Append clones after + for (c = 1; c <= cols; c++) + dom.insertAfter(cloneCell(cell), cell); + + break; + } + } + + if (x2 == -1) { + // Insert nodes before first cell + for (c = 1; c <= cols; c++) + tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]); + } + } + } + }; + + function split() { + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan, newCell, i; + + if (isCellSelected(cell)) { + cell = cell.elm; + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan > 1 || rowSpan > 1) { + setSpanVal(cell, 'rowSpan', 1); + setSpanVal(cell, 'colSpan', 1); + + // Insert cells right + for (i = 0; i < colSpan - 1; i++) + dom.insertAfter(cloneCell(cell), cell); + + fillLeftDown(x, y, rowSpan - 1, colSpan); + } + } + }); + }); + }; + + function merge(cell, cols, rows) { + var startX, startY, endX, endY, x, y, startCell, endCell, cell, children, count; + + // Use specified cell and cols/rows + if (cell) { + pos = getPos(cell); + startX = pos.x; + startY = pos.y; + endX = startX + (cols - 1); + endY = startY + (rows - 1); + } else { + startPos = endPos = null; + + // Calculate start/end pos by checking for selected cells in grid works better with context menu + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + if (!startPos) { + startPos = {x: x, y: y}; + } + + endPos = {x: x, y: y}; + } + }); + }); + + // Use selection + startX = startPos.x; + startY = startPos.y; + endX = endPos.x; + endY = endPos.y; + } + + // Find start/end cells + startCell = getCell(startX, startY); + endCell = getCell(endX, endY); + + // Check if the cells exists and if they are of the same part for example tbody = tbody + if (startCell && endCell && startCell.part == endCell.part) { + // Split and rebuild grid + split(); + buildGrid(); + + // Set row/col span to start cell + startCell = getCell(startX, startY).elm; + setSpanVal(startCell, 'colSpan', (endX - startX) + 1); + setSpanVal(startCell, 'rowSpan', (endY - startY) + 1); + + // Remove other cells and add it's contents to the start cell + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + if (!grid[y] || !grid[y][x]) + continue; + + cell = grid[y][x].elm; + + if (cell != startCell) { + // Move children to startCell + children = tinymce.grep(cell.childNodes); + each(children, function(node) { + startCell.appendChild(node); + }); + + // Remove bogus nodes if there is children in the target cell + if (children.length) { + children = tinymce.grep(startCell.childNodes); + count = 0; + each(children, function(node) { + if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1) + startCell.removeChild(node); + }); + } + + // Remove cell + dom.remove(cell); + } + } + } + + // Remove empty rows etc and restore caret location + cleanup(); + } + }; + + function insertRow(before) { + var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan; + + // Find first/last row + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + cell = cell.elm; + rowElm = cell.parentNode; + newRow = cloneNode(rowElm, false); + posY = y; + + if (before) + return false; + } + }); + + if (before) + return !posY; + }); + + for (x = 0; x < grid[0].length; x++) { + // Cell not found could be because of an invalid table structure + if (!grid[posY][x]) + continue; + + cell = grid[posY][x].elm; + + if (cell != lastCell) { + if (!before) { + rowSpan = getSpanVal(cell, 'rowspan'); + if (rowSpan > 1) { + setSpanVal(cell, 'rowSpan', rowSpan + 1); + continue; + } + } else { + // Check if cell above can be expanded + if (posY > 0 && grid[posY - 1][x]) { + otherCell = grid[posY - 1][x].elm; + rowSpan = getSpanVal(otherCell, 'rowSpan'); + if (rowSpan > 1) { + setSpanVal(otherCell, 'rowSpan', rowSpan + 1); + continue; + } + } + } + + // Insert new cell into new row + newCell = cloneCell(cell); + setSpanVal(newCell, 'colSpan', cell.colSpan); + + newRow.appendChild(newCell); + + lastCell = cell; + } + } + + if (newRow.hasChildNodes()) { + if (!before) + dom.insertAfter(newRow, rowElm); + else + rowElm.parentNode.insertBefore(newRow, rowElm); + } + }; + + function insertCol(before) { + var posX, lastCell; + + // Find first/last column + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + posX = x; + + if (before) + return false; + } + }); + + if (before) + return !posX; + }); + + each(grid, function(row, y) { + var cell, rowSpan, colSpan; + + if (!row[posX]) + return; + + cell = row[posX].elm; + if (cell != lastCell) { + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan == 1) { + if (!before) { + dom.insertAfter(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } else { + cell.parentNode.insertBefore(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } + } else + setSpanVal(cell, 'colSpan', cell.colSpan + 1); + + lastCell = cell; + } + }); + }; + + function deleteCols() { + var cols = []; + + // Get selected column indexes + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) { + each(grid, function(row) { + var cell = row[x].elm, colSpan; + + colSpan = getSpanVal(cell, 'colSpan'); + + if (colSpan > 1) + setSpanVal(cell, 'colSpan', colSpan - 1); + else + dom.remove(cell); + }); + + cols.push(x); + } + }); + }); + + cleanup(); + }; + + function deleteRows() { + var rows; + + function deleteRow(tr) { + var nextTr, pos, lastCell; + + nextTr = dom.getNext(tr, 'tr'); + + // Move down row spanned cells + each(tr.cells, function(cell) { + var rowSpan = getSpanVal(cell, 'rowSpan'); + + if (rowSpan > 1) { + setSpanVal(cell, 'rowSpan', rowSpan - 1); + pos = getPos(cell); + fillLeftDown(pos.x, pos.y, 1, 1); + } + }); + + // Delete cells + pos = getPos(tr.cells[0]); + each(grid[pos.y], function(cell) { + var rowSpan; + + cell = cell.elm; + + if (cell != lastCell) { + rowSpan = getSpanVal(cell, 'rowSpan'); + + if (rowSpan <= 1) + dom.remove(cell); + else + setSpanVal(cell, 'rowSpan', rowSpan - 1); + + lastCell = cell; + } + }); + }; + + // Get selected rows and move selection out of scope + rows = getSelectedRows(); + + // Delete all selected rows + each(rows.reverse(), function(tr) { + deleteRow(tr); + }); + + cleanup(); + }; + + function cutRows() { + var rows = getSelectedRows(); + + dom.remove(rows); + cleanup(); + + return rows; + }; + + function copyRows() { + var rows = getSelectedRows(); + + each(rows, function(row, i) { + rows[i] = cloneNode(row, true); + }); + + return rows; + }; + + function pasteRows(rows, before) { + // If we don't have any rows in the clipboard, return immediately + if(!rows) + return; + + var selectedRows = getSelectedRows(), + targetRow = selectedRows[before ? 0 : selectedRows.length - 1], + targetCellCount = targetRow.cells.length; + + // Calc target cell count + each(grid, function(row) { + var match; + + targetCellCount = 0; + each(row, function(cell, x) { + if (cell.real) + targetCellCount += cell.colspan; + + if (cell.elm.parentNode == targetRow) + match = 1; + }); + + if (match) + return false; + }); + + if (!before) + rows.reverse(); + + each(rows, function(row) { + var cellCount = row.cells.length, cell; + + // Remove col/rowspans + for (i = 0; i < cellCount; i++) { + cell = row.cells[i]; + setSpanVal(cell, 'colSpan', 1); + setSpanVal(cell, 'rowSpan', 1); + } + + // Needs more cells + for (i = cellCount; i < targetCellCount; i++) + row.appendChild(cloneCell(row.cells[cellCount - 1])); + + // Needs less cells + for (i = targetCellCount; i < cellCount; i++) + dom.remove(row.cells[i]); + + // Add before/after + if (before) + targetRow.parentNode.insertBefore(row, targetRow); + else + dom.insertAfter(row, targetRow); + }); + + // Remove current selection + dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); + }; + + function getPos(target) { + var pos; + + each(grid, function(row, y) { + each(row, function(cell, x) { + if (cell.elm == target) { + pos = {x : x, y : y}; + return false; + } + }); + + return !pos; + }); + + return pos; + }; + + function setStartCell(cell) { + startPos = getPos(cell); + }; + + function findEndPos() { + var pos, maxX, maxY; + + maxX = maxY = 0; + + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan; + + if (isCellSelected(cell)) { + cell = grid[y][x]; + + if (x > maxX) + maxX = x; + + if (y > maxY) + maxY = y; + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) + maxX = x + colSpan; + } + + if (rowSpan) { + if (y + rowSpan > maxY) + maxY = y + rowSpan; + } + } + } + }); + }); + + return {x : maxX, y : maxY}; + }; + + function setEndCell(cell) { + var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan; + + endPos = getPos(cell); + + if (startPos && endPos) { + // Get start/end positions + startX = Math.min(startPos.x, endPos.x); + startY = Math.min(startPos.y, endPos.y); + endX = Math.max(startPos.x, endPos.x); + endY = Math.max(startPos.y, endPos.y); + + // Expand end positon to include spans + maxX = endX; + maxY = endY; + + // Expand startX + for (y = startY; y <= maxY; y++) { + cell = grid[y][startX]; + + if (!cell.real) { + if (startX - (cell.colspan - 1) < startX) + startX -= cell.colspan - 1; + } + } + + // Expand startY + for (x = startX; x <= maxX; x++) { + cell = grid[startY][x]; + + if (!cell.real) { + if (startY - (cell.rowspan - 1) < startY) + startY -= cell.rowspan - 1; + } + } + + // Find max X, Y + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + cell = grid[y][x]; + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) + maxX = x + colSpan; + } + + if (rowSpan) { + if (y + rowSpan > maxY) + maxY = y + rowSpan; + } + } + } + } + + // Remove current selection + dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); + + // Add new selection + for (y = startY; y <= maxY; y++) { + for (x = startX; x <= maxX; x++) { + if (grid[y][x]) + dom.addClass(grid[y][x].elm, 'mceSelected'); + } + } + } + }; + + // Expose to public + tinymce.extend(this, { + deleteTable : deleteTable, + split : split, + merge : merge, + insertRow : insertRow, + insertCol : insertCol, + deleteCols : deleteCols, + deleteRows : deleteRows, + cutRows : cutRows, + copyRows : copyRows, + pasteRows : pasteRows, + getPos : getPos, + setStartCell : setStartCell, + setEndCell : setEndCell + }); + }; + + tinymce.create('tinymce.plugins.TablePlugin', { + init : function(ed, url) { + var winMan, clipboardRows, hasCellSelection = true; // Might be selected cells on reload + + function createTableGrid(node) { + var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table'); + + if (tblElm) + return new TableGrid(tblElm, ed.dom, selection); + }; + + function cleanup() { + // Restore selection possibilities + ed.getBody().style.webkitUserSelect = ''; + + if (hasCellSelection) { + ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); + hasCellSelection = false; + } + }; + + // Register buttons + each([ + ['table', 'table.desc', 'mceInsertTable', true], + ['delete_table', 'table.del', 'mceTableDelete'], + ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'], + ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'], + ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'], + ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'], + ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'], + ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'], + ['row_props', 'table.row_desc', 'mceTableRowProps', true], + ['cell_props', 'table.cell_desc', 'mceTableCellProps', true], + ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true], + ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true] + ], function(c) { + ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]}); + }); + + // Select whole table is a table border is clicked + if (!tinymce.isIE) { + ed.onClick.add(function(ed, e) { + e = e.target; + + if (e.nodeName === 'TABLE') { + ed.selection.select(e); + ed.nodeChanged(); + } + }); + } + + ed.onPreProcess.add(function(ed, args) { + var nodes, i, node, dom = ed.dom, value; + + nodes = dom.select('table', args.node); + i = nodes.length; + while (i--) { + node = nodes[i]; + dom.setAttrib(node, 'data-mce-style', ''); + + if ((value = dom.getAttrib(node, 'width'))) { + dom.setStyle(node, 'width', value); + dom.setAttrib(node, 'width', ''); + } + + if ((value = dom.getAttrib(node, 'height'))) { + dom.setStyle(node, 'height', value); + dom.setAttrib(node, 'height', ''); + } + } + }); + + // Handle node change updates + ed.onNodeChange.add(function(ed, cm, n) { + var p; + + n = ed.selection.getStart(); + p = ed.dom.getParent(n, 'td,th,caption'); + cm.setActive('table', n.nodeName === 'TABLE' || !!p); + + // Disable table tools if we are in caption + if (p && p.nodeName === 'CAPTION') + p = 0; + + cm.setDisabled('delete_table', !p); + cm.setDisabled('delete_col', !p); + cm.setDisabled('delete_table', !p); + cm.setDisabled('delete_row', !p); + cm.setDisabled('col_after', !p); + cm.setDisabled('col_before', !p); + cm.setDisabled('row_after', !p); + cm.setDisabled('row_before', !p); + cm.setDisabled('row_props', !p); + cm.setDisabled('cell_props', !p); + cm.setDisabled('split_cells', !p); + cm.setDisabled('merge_cells', !p); + }); + + ed.onInit.add(function(ed) { + var startTable, startCell, dom = ed.dom, tableGrid; + + winMan = ed.windowManager; + + // Add cell selection logic + ed.onMouseDown.add(function(ed, e) { + if (e.button != 2) { + cleanup(); + + startCell = dom.getParent(e.target, 'td,th'); + startTable = dom.getParent(startCell, 'table'); + } + }); + + dom.bind(ed.getDoc(), 'mouseover', function(e) { + var sel, table, target = e.target; + + if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) { + table = dom.getParent(target, 'table'); + if (table == startTable) { + if (!tableGrid) { + tableGrid = createTableGrid(table); + tableGrid.setStartCell(startCell); + + ed.getBody().style.webkitUserSelect = 'none'; + } + + tableGrid.setEndCell(target); + hasCellSelection = true; + } + + // Remove current selection + sel = ed.selection.getSel(); + + try { + if (sel.removeAllRanges) + sel.removeAllRanges(); + else + sel.empty(); + } catch (ex) { + // IE9 might throw errors here + } + + e.preventDefault(); + } + }); + + ed.onMouseUp.add(function(ed, e) { + var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode; + + // Move selection to startCell + if (startCell) { + if (tableGrid) + ed.getBody().style.webkitUserSelect = ''; + + function setPoint(node, start) { + var walker = new tinymce.dom.TreeWalker(node, node); + + do { + // Text node + if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) { + if (start) + rng.setStart(node, 0); + else + rng.setEnd(node, node.nodeValue.length); + + return; + } + + // BR element + if (node.nodeName == 'BR') { + if (start) + rng.setStartBefore(node); + else + rng.setEndBefore(node); + + return; + } + } while (node = (start ? walker.next() : walker.prev())); + } + + // Try to expand text selection as much as we can only Gecko supports cell selection + selectedCells = dom.select('td.mceSelected,th.mceSelected'); + if (selectedCells.length > 0) { + rng = dom.createRng(); + node = selectedCells[0]; + endNode = selectedCells[selectedCells.length - 1]; + rng.setStartBefore(node); + rng.setEndAfter(node); + + setPoint(node, 1); + walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table')); + + do { + if (node.nodeName == 'TD' || node.nodeName == 'TH') { + if (!dom.hasClass(node, 'mceSelected')) + break; + + lastNode = node; + } + } while (node = walker.next()); + + setPoint(lastNode); + + sel.setRng(rng); + } + + ed.nodeChanged(); + startCell = tableGrid = startTable = null; + } + }); + + ed.onKeyUp.add(function(ed, e) { + cleanup(); + }); + + ed.onKeyDown.add(function (ed, e) { + fixTableCellSelection(ed); + }); + + ed.onMouseDown.add(function (ed, e) { + if (e.button != 2) { + fixTableCellSelection(ed); + } + }); + function tableCellSelected(ed, rng, n, currentCell) { + // The decision of when a table cell is selected is somewhat involved. The fact that this code is + // required is actually a pointer to the root cause of this bug. A cell is selected when the start + // and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases) + // or the parent of the table (in the case of the selection containing the last cell of a table). + var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'), + tableParent, allOfCellSelected, tableCellSelection; + if (table) + tableParent = table.parentNode; + allOfCellSelected =rng.startContainer.nodeType == TEXT_NODE && + rng.startOffset == 0 && + rng.endOffset == 0 && + currentCell && + (n.nodeName=="TR" || n==tableParent); + tableCellSelection = (n.nodeName=="TD"||n.nodeName=="TH")&& !currentCell; + return allOfCellSelected || tableCellSelection; + // return false; + } + + // this nasty hack is here to work around some WebKit selection bugs. + function fixTableCellSelection(ed) { + if (!tinymce.isWebKit) + return; + + var rng = ed.selection.getRng(); + var n = ed.selection.getNode(); + var currentCell = ed.dom.getParent(rng.startContainer, 'TD,TH'); + + if (!tableCellSelected(ed, rng, n, currentCell)) + return; + if (!currentCell) { + currentCell=n; + } + + // Get the very last node inside the table cell + var end = currentCell.lastChild; + while (end.lastChild) + end = end.lastChild; + + // Select the entire table cell. Nothing outside of the table cell should be selected. + rng.setEnd(end, end.nodeValue.length); + ed.selection.setRng(rng); + } + ed.plugins.table.fixTableCellSelection=fixTableCellSelection; + + // Add context menu + if (ed && ed.plugins.contextmenu) { + ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) { + var sm, se = ed.selection, el = se.getNode() || ed.getBody(); + + if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th') || ed.dom.select('td.mceSelected,th.mceSelected').length) { + m.removeAll(); + + if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) { + m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true}); + m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'}); + m.addSeparator(); + } + + if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) { + m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true}); + m.addSeparator(); + } + + m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', value : {action : 'insert'}}); + m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable'}); + m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete'}); + m.addSeparator(); + + // Cell menu + sm = m.addMenu({title : 'table.cell'}); + sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps'}); + sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells'}); + sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells'}); + + // Row menu + sm = m.addMenu({title : 'table.row'}); + sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps'}); + sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'}); + sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'}); + sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'}); + sm.addSeparator(); + sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'}); + sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'}); + sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'}).setDisabled(!clipboardRows); + sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'}).setDisabled(!clipboardRows); + + // Column menu + sm = m.addMenu({title : 'table.col'}); + sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'}); + sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'}); + sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'}); + } else + m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'}); + }); + } + + // Fix to allow navigating up and down in a table in WebKit browsers. + if (tinymce.isWebKit) { + function moveSelection(ed, e) { + var VK = tinymce.VK; + var key = e.keyCode; + + function handle(upBool, sourceNode, event) { + var siblingDirection = upBool ? 'previousSibling' : 'nextSibling'; + var currentRow = ed.dom.getParent(sourceNode, 'tr'); + var siblingRow = currentRow[siblingDirection]; + + if (siblingRow) { + moveCursorToRow(ed, sourceNode, siblingRow, upBool); + tinymce.dom.Event.cancel(event); + return true; + } else { + var tableNode = ed.dom.getParent(currentRow, 'table'); + var middleNode = currentRow.parentNode; + var parentNodeName = middleNode.nodeName.toLowerCase(); + if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) { + var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody'); + if (targetParent !== null) { + return moveToRowInTarget(upBool, targetParent, sourceNode, event); + } + } + return escapeTable(upBool, currentRow, siblingDirection, tableNode, event); + } + } + + function getTargetParent(upBool, topNode, secondNode, nodeName) { + var tbodies = ed.dom.select('>' + nodeName, topNode); + var position = tbodies.indexOf(secondNode); + if (upBool && position === 0 || !upBool && position === tbodies.length - 1) { + return getFirstHeadOrFoot(upBool, topNode); + } else if (position === -1) { + var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1; + return tbodies[topOrBottom]; + } else { + return tbodies[position + (upBool ? -1 : 1)]; + } + } + + function getFirstHeadOrFoot(upBool, parent) { + var tagName = upBool ? 'thead' : 'tfoot'; + var headOrFoot = ed.dom.select('>' + tagName, parent); + return headOrFoot.length !== 0 ? headOrFoot[0] : null; + } + + function moveToRowInTarget(upBool, targetParent, sourceNode, event) { + var targetRow = getChildForDirection(targetParent, upBool); + targetRow && moveCursorToRow(ed, sourceNode, targetRow, upBool); + tinymce.dom.Event.cancel(event); + return true; + } + + function escapeTable(upBool, currentRow, siblingDirection, table, event) { + var tableSibling = table[siblingDirection]; + if (tableSibling) { + moveCursorToStartOfElement(tableSibling); + return true; + } else { + var parentCell = ed.dom.getParent(table, 'td,th'); + if (parentCell) { + return handle(upBool, parentCell, event); + } else { + var backUpSibling = getChildForDirection(currentRow, !upBool); + moveCursorToStartOfElement(backUpSibling); + return tinymce.dom.Event.cancel(event); + } + } + } + + function getChildForDirection(parent, up) { + var child = parent && parent[up ? 'lastChild' : 'firstChild']; + // BR is not a valid table child to return in this case we return the table cell + return child && child.nodeName === 'BR' ? ed.dom.getParent(child, 'td,th') : child; + } + + function moveCursorToStartOfElement(n) { + ed.selection.setCursorLocation(n, 0); + } + + function isVerticalMovement() { + return key == VK.UP || key == VK.DOWN; + } + + function isInTable(ed) { + var node = ed.selection.getNode(); + var currentRow = ed.dom.getParent(node, 'tr'); + return currentRow !== null; + } + + function columnIndex(column) { + var colIndex = 0; + var c = column; + while (c.previousSibling) { + c = c.previousSibling; + colIndex = colIndex + getSpanVal(c, "colspan"); + } + return colIndex; + } + + function findColumn(rowElement, columnIndex) { + var c = 0; + var r = 0; + each(rowElement.children, function(cell, i) { + c = c + getSpanVal(cell, "colspan"); + r = i; + if (c > columnIndex) + return false; + }); + return r; + } + + function moveCursorToRow(ed, node, row, upBool) { + var srcColumnIndex = columnIndex(ed.dom.getParent(node, 'td,th')); + var tgtColumnIndex = findColumn(row, srcColumnIndex); + var tgtNode = row.childNodes[tgtColumnIndex]; + var rowCellTarget = getChildForDirection(tgtNode, upBool); + moveCursorToStartOfElement(rowCellTarget || tgtNode); + } + + function shouldFixCaret(preBrowserNode) { + var newNode = ed.selection.getNode(); + var newParent = ed.dom.getParent(newNode, 'td,th'); + var oldParent = ed.dom.getParent(preBrowserNode, 'td,th'); + return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent) + } + + function checkSameParentTable(nodeOne, NodeTwo) { + return ed.dom.getParent(nodeOne, 'TABLE') === ed.dom.getParent(NodeTwo, 'TABLE'); + } + + if (isVerticalMovement() && isInTable(ed)) { + var preBrowserNode = ed.selection.getNode(); + setTimeout(function() { + if (shouldFixCaret(preBrowserNode)) { + handle(!e.shiftKey && key === VK.UP, preBrowserNode, e); + } + }, 0); + } + } + + ed.onKeyDown.add(moveSelection); + } + + // Fixes an issue on Gecko where it's impossible to place the caret behind a table + // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled + function fixTableCaretPos() { + var last; + + // Skip empty text nodes form the end + for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ; + + if (last && last.nodeName == 'TABLE') { + if (ed.settings.forced_root_block) + ed.dom.add(ed.getBody(), ed.settings.forced_root_block, null, tinymce.isIE && !tinymce.isIE11 ? ' ' : '
'); + else + ed.dom.add(ed.getBody(), 'br', {'data-mce-bogus': '1'}); + } + }; + + // Fixes an bug where it's impossible to place the caret before a table in Gecko + // this fix solves it by detecting when the caret is at the beginning of such a table + // and then manually moves the caret infront of the table + if (tinymce.isGecko) { + ed.onKeyDown.add(function(ed, e) { + var rng, table, dom = ed.dom; + + // On gecko it's not possible to place the caret before a table + if (e.keyCode == 37 || e.keyCode == 38) { + rng = ed.selection.getRng(); + table = dom.getParent(rng.startContainer, 'table'); + + if (table && ed.getBody().firstChild == table) { + if (isAtStart(rng, table)) { + rng = dom.createRng(); + + rng.setStartBefore(table); + rng.setEndBefore(table); + + ed.selection.setRng(rng); + + e.preventDefault(); + } + } + } + }); + } + + ed.onKeyUp.add(fixTableCaretPos); + ed.onSetContent.add(fixTableCaretPos); + ed.onVisualAid.add(fixTableCaretPos); + + ed.onPreProcess.add(function(ed, o) { + var last = o.node.lastChild; + + if (last && (last.nodeName == "BR" || (last.childNodes.length == 1 && (last.firstChild.nodeName == 'BR' || last.firstChild.nodeValue == '\u00a0'))) && last.previousSibling && last.previousSibling.nodeName == "TABLE") { + ed.dom.remove(last); + } + }); + + + /** + * Fixes bug in Gecko where shift-enter in table cell does not place caret on new line + * + * Removed: Since the new enter logic seems to fix this one. + */ + /* + if (tinymce.isGecko) { + ed.onKeyDown.add(function(ed, e) { + if (e.keyCode === tinymce.VK.ENTER && e.shiftKey) { + var node = ed.selection.getRng().startContainer; + var tableCell = dom.getParent(node, 'td,th'); + if (tableCell) { + var zeroSizedNbsp = ed.getDoc().createTextNode("\uFEFF"); + dom.insertAfter(zeroSizedNbsp, node); + } + } + }); + } + */ + + fixTableCaretPos(); + ed.startContent = ed.getContent({format : 'raw'}); + }); + + // Register action commands + each({ + mceTableSplitCells : function(grid) { + grid.split(); + }, + + mceTableMergeCells : function(grid) { + var rowSpan, colSpan, cell; + + cell = ed.dom.getParent(ed.selection.getNode(), 'th,td'); + if (cell) { + rowSpan = cell.rowSpan; + colSpan = cell.colSpan; + } + + if (!ed.dom.select('td.mceSelected,th.mceSelected').length) { + winMan.open({ + url : url + '/merge_cells.htm', + width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)), + height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)), + inline : 1 + }, { + rows : rowSpan, + cols : colSpan, + onaction : function(data) { + grid.merge(cell, data.cols, data.rows); + }, + plugin_url : url + }); + } else + grid.merge(); + }, + + mceTableInsertRowBefore : function(grid) { + grid.insertRow(true); + }, + + mceTableInsertRowAfter : function(grid) { + grid.insertRow(); + }, + + mceTableInsertColBefore : function(grid) { + grid.insertCol(true); + }, + + mceTableInsertColAfter : function(grid) { + grid.insertCol(); + }, + + mceTableDeleteCol : function(grid) { + grid.deleteCols(); + }, + + mceTableDeleteRow : function(grid) { + grid.deleteRows(); + }, + + mceTableCutRow : function(grid) { + clipboardRows = grid.cutRows(); + }, + + mceTableCopyRow : function(grid) { + clipboardRows = grid.copyRows(); + }, + + mceTablePasteRowBefore : function(grid) { + grid.pasteRows(clipboardRows, true); + }, + + mceTablePasteRowAfter : function(grid) { + grid.pasteRows(clipboardRows); + }, + + mceTableDelete : function(grid) { + grid.deleteTable(); + } + }, function(func, name) { + ed.addCommand(name, function() { + var grid = createTableGrid(); + + if (grid) { + func(grid); + ed.execCommand('mceRepaint'); + cleanup(); + } + }); + }); + + // Register dialog commands + each({ + mceInsertTable : function(val) { + winMan.open({ + url : url + '/table.htm', + width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)), + height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)), + inline : 1 + }, { + plugin_url : url, + action : val ? val.action : 0 + }); + }, + + mceTableRowProps : function() { + winMan.open({ + url : url + '/row.htm', + width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)), + height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }, + + mceTableCellProps : function() { + winMan.open({ + url : url + '/cell.htm', + width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)), + height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + } + }, function(func, name) { + ed.addCommand(name, function(ui, val) { + func(val); + }); + }); + } + }); + + // Register plugin + tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin); +})(tinymce); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/js/cell.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/js/cell.js new file mode 100644 index 0000000..6f77e67 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/js/cell.js @@ -0,0 +1,319 @@ +tinyMCEPopup.requireLangPack(); + +var ed; + +function init() { + ed = tinyMCEPopup.editor; + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor') + + var inst = ed; + var tdElm = ed.dom.getParent(ed.selection.getStart(), "td,th"); + var formObj = document.forms[0]; + var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style")); + + // Get table cell data + var celltype = tdElm.nodeName.toLowerCase(); + var align = ed.dom.getAttrib(tdElm, 'align'); + var valign = ed.dom.getAttrib(tdElm, 'valign'); + var width = trimSize(getStyle(tdElm, 'width', 'width')); + var height = trimSize(getStyle(tdElm, 'height', 'height')); + var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor')); + var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor')); + var className = ed.dom.getAttrib(tdElm, 'class'); + var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); + var id = ed.dom.getAttrib(tdElm, 'id'); + var lang = ed.dom.getAttrib(tdElm, 'lang'); + var dir = ed.dom.getAttrib(tdElm, 'dir'); + var scope = ed.dom.getAttrib(tdElm, 'scope'); + + // Setup form + addClassesToList('class', 'table_cell_styles'); + TinyMCE_EditableSelects.init(); + + if (!ed.dom.hasClass(tdElm, 'mceSelected')) { + formObj.bordercolor.value = bordercolor; + formObj.bgcolor.value = bgcolor; + formObj.backgroundimage.value = backgroundimage; + formObj.width.value = width; + formObj.height.value = height; + formObj.id.value = id; + formObj.lang.value = lang; + formObj.style.value = ed.dom.serializeStyle(st); + selectByValue(formObj, 'align', align); + selectByValue(formObj, 'valign', valign); + selectByValue(formObj, 'class', className, true, true); + selectByValue(formObj, 'celltype', celltype); + selectByValue(formObj, 'dir', dir); + selectByValue(formObj, 'scope', scope); + + // Resize some elements + if (isVisible('backgroundimagebrowser')) + document.getElementById('backgroundimage').style.width = '180px'; + + updateColor('bordercolor_pick', 'bordercolor'); + updateColor('bgcolor_pick', 'bgcolor'); + } else + tinyMCEPopup.dom.hide('action'); +} + +function updateAction() { + var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0]; + + if (!AutoValidator.validate(formObj)) { + tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.'); + return false; + } + + tinyMCEPopup.restoreSelection(); + el = ed.selection.getStart(); + tdElm = ed.dom.getParent(el, "td,th"); + trElm = ed.dom.getParent(el, "tr"); + tableElm = ed.dom.getParent(el, "table"); + + // Cell is selected + if (ed.dom.hasClass(tdElm, 'mceSelected')) { + // Update all selected sells + tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) { + updateCell(td); + }); + + ed.addVisual(); + ed.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + tinyMCEPopup.close(); + return; + } + + switch (getSelectValue(formObj, 'action')) { + case "cell": + var celltype = getSelectValue(formObj, 'celltype'); + var scope = getSelectValue(formObj, 'scope'); + + function doUpdate(s) { + if (s) { + updateCell(tdElm); + + ed.addVisual(); + ed.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + tinyMCEPopup.close(); + } + }; + + if (ed.getParam("accessibility_warnings", 1)) { + if (celltype == "th" && scope == "") + tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate); + else + doUpdate(1); + + return; + } + + updateCell(tdElm); + break; + + case "row": + var cell = trElm.firstChild; + + if (cell.nodeName != "TD" && cell.nodeName != "TH") + cell = nextCell(cell); + + do { + cell = updateCell(cell, true); + } while ((cell = nextCell(cell)) != null); + + break; + + case "col": + var curr, col = 0, cell = trElm.firstChild, rows = tableElm.getElementsByTagName("tr"); + + if (cell.nodeName != "TD" && cell.nodeName != "TH") + cell = nextCell(cell); + + do { + if (cell == tdElm) + break; + col += cell.getAttribute("colspan")?cell.getAttribute("colspan"):1; + } while ((cell = nextCell(cell)) != null); + + for (var i=0; i 0) { + tinymce.each(tableElm.rows, function(tr) { + var i; + + for (i = 0; i < tr.cells.length; i++) { + if (dom.hasClass(tr.cells[i], 'mceSelected')) { + updateRow(tr, true); + return; + } + } + }); + + inst.addVisual(); + inst.nodeChanged(); + inst.execCommand('mceEndUndoLevel'); + tinyMCEPopup.close(); + return; + } + + switch (action) { + case "row": + updateRow(trElm); + break; + + case "all": + var rows = tableElm.getElementsByTagName("tr"); + + for (var i=0; i colLimit) { + tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit)); + return false; + } else if (rowLimit && rows > rowLimit) { + tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit)); + return false; + } else if (cellLimit && cols * rows > cellLimit) { + tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit)); + return false; + } + + // Update table + if (action == "update") { + dom.setAttrib(elm, 'cellPadding', cellpadding, true); + dom.setAttrib(elm, 'cellSpacing', cellspacing, true); + + if (!isCssSize(border)) { + dom.setAttrib(elm, 'border', border); + } else { + dom.setAttrib(elm, 'border', ''); + } + + if (border == '') { + dom.setStyle(elm, 'border-width', ''); + dom.setStyle(elm, 'border', ''); + dom.setAttrib(elm, 'border', ''); + } + + dom.setAttrib(elm, 'align', align); + dom.setAttrib(elm, 'frame', frame); + dom.setAttrib(elm, 'rules', rules); + dom.setAttrib(elm, 'class', className); + dom.setAttrib(elm, 'style', style); + dom.setAttrib(elm, 'id', id); + dom.setAttrib(elm, 'summary', summary); + dom.setAttrib(elm, 'dir', dir); + dom.setAttrib(elm, 'lang', lang); + + capEl = inst.dom.select('caption', elm)[0]; + + if (capEl && !caption) + capEl.parentNode.removeChild(capEl); + + if (!capEl && caption) { + capEl = elm.ownerDocument.createElement('caption'); + + if (!tinymce.isIE || tinymce.isIE11) + capEl.innerHTML = '
'; + + elm.insertBefore(capEl, elm.firstChild); + } + + if (width && inst.settings.inline_styles) { + dom.setStyle(elm, 'width', width); + dom.setAttrib(elm, 'width', ''); + } else { + dom.setAttrib(elm, 'width', width, true); + dom.setStyle(elm, 'width', ''); + } + + // Remove these since they are not valid XHTML + dom.setAttrib(elm, 'borderColor', ''); + dom.setAttrib(elm, 'bgColor', ''); + dom.setAttrib(elm, 'background', ''); + + if (height && inst.settings.inline_styles) { + dom.setStyle(elm, 'height', height); + dom.setAttrib(elm, 'height', ''); + } else { + dom.setAttrib(elm, 'height', height, true); + dom.setStyle(elm, 'height', ''); + } + + if (background != '') + elm.style.backgroundImage = "url('" + background + "')"; + else + elm.style.backgroundImage = ''; + +/* if (tinyMCEPopup.getParam("inline_styles")) { + if (width != '') + elm.style.width = getCSSSize(width); + }*/ + + if (bordercolor != "") { + elm.style.borderColor = bordercolor; + elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle; + elm.style.borderWidth = cssSize(border); + } else + elm.style.borderColor = ''; + + elm.style.backgroundColor = bgcolor; + elm.style.height = getCSSSize(height); + + inst.addVisual(); + + // Fix for stange MSIE align bug + //elm.outerHTML = elm.outerHTML; + + inst.nodeChanged(); + inst.execCommand('mceEndUndoLevel', false, {}, {skip_undo: true}); + + // Repaint if dimensions changed + if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight) + inst.execCommand('mceRepaint'); + + tinyMCEPopup.close(); + return true; + } + + // Create new table + html += ''); + + tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) { + if (patt) + patt += ','; + + patt += n + ' ._mce_marker'; + }); + + tinymce.each(inst.dom.select(patt), function(n) { + inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n); + }); + + dom.setOuterHTML(dom.select('br._mce_marker')[0], html); + } else + inst.execCommand('mceInsertContent', false, html); + + tinymce.each(dom.select('table[data-mce-new]'), function(node) { + var tdorth = dom.select('td,th', node); + + // Fixes a bug in IE where the caret cannot be placed after the table if the table is at the end of the document + if (tinymce.isIE && !tinymce.isIE11 && node.nextSibling == null) { + if (inst.settings.forced_root_block) + dom.insertAfter(dom.create(inst.settings.forced_root_block), node); + else + dom.insertAfter(dom.create('br', {'data-mce-bogus': '1'}), node); + } + + try { + // IE9 might fail to do this selection + inst.selection.setCursorLocation(tdorth[0], 0); + } catch (ex) { + // Ignore + } + + dom.setAttrib(node, 'data-mce-new', ''); + }); + + inst.addVisual(); + inst.execCommand('mceEndUndoLevel', false, {}, {skip_undo: true}); + + tinyMCEPopup.close(); +} + +function makeAttrib(attrib, value) { + var formObj = document.forms[0]; + var valueElm = formObj.elements[attrib]; + + if (typeof(value) == "undefined" || value == null) { + value = ""; + + if (valueElm) + value = valueElm.value; + } + + if (value == "") + return ""; + + // XML encode it + value = value.replace(/&/g, '&'); + value = value.replace(/\"/g, '"'); + value = value.replace(//g, '>'); + + return ' ' + attrib + '="' + value + '"'; +} + +function init() { + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + + var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', ''); + var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = ""; + var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules = "", frame = ""; + var inst = tinyMCEPopup.editor, dom = inst.dom; + var formObj = document.forms[0]; + var elm = dom.getParent(inst.selection.getNode(), "table"); + + // Hide advanced fields that isn't available in the schema + tinymce.each("summary id rules dir style frame".split(" "), function(name) { + var tr = tinyMCEPopup.dom.getParent(name, "tr") || tinyMCEPopup.dom.getParent("t" + name, "tr"); + + if (tr && !tinyMCEPopup.editor.schema.isValid("table", name)) { + tr.style.display = 'none'; + } + }); + + action = tinyMCEPopup.getWindowArg('action'); + + if (!action) + action = elm ? "update" : "insert"; + + if (elm && action != "insert") { + var rowsAr = elm.rows; + var cols = 0; + for (var i=0; i cols) + cols = rowsAr[i].cells.length; + + cols = cols; + rows = rowsAr.length; + + st = dom.parseStyle(dom.getAttrib(elm, "style")); + border = trimSize(getStyle(elm, 'border', 'borderWidth')); + cellpadding = dom.getAttrib(elm, 'cellpadding', ""); + cellspacing = dom.getAttrib(elm, 'cellspacing', ""); + width = trimSize(getStyle(elm, 'width', 'width')); + height = trimSize(getStyle(elm, 'height', 'height')); + bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor')); + bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor')); + align = dom.getAttrib(elm, 'align', align); + frame = dom.getAttrib(elm, 'frame'); + rules = dom.getAttrib(elm, 'rules'); + className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, '')); + id = dom.getAttrib(elm, 'id'); + summary = dom.getAttrib(elm, 'summary'); + style = dom.serializeStyle(st); + dir = dom.getAttrib(elm, 'dir'); + lang = dom.getAttrib(elm, 'lang'); + background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); + formObj.caption.checked = elm.getElementsByTagName('caption').length > 0; + + orgTableWidth = width; + orgTableHeight = height; + + action = "update"; + formObj.insert.value = inst.getLang('update'); + } + + addClassesToList('class', "table_styles"); + TinyMCE_EditableSelects.init(); + + // Update form + selectByValue(formObj, 'align', align); + selectByValue(formObj, 'tframe', frame); + selectByValue(formObj, 'rules', rules); + selectByValue(formObj, 'class', className, true, true); + formObj.cols.value = cols; + formObj.rows.value = rows; + formObj.border.value = border; + formObj.cellpadding.value = cellpadding; + formObj.cellspacing.value = cellspacing; + formObj.width.value = width; + formObj.height.value = height; + formObj.bordercolor.value = bordercolor; + formObj.bgcolor.value = bgcolor; + formObj.id.value = id; + formObj.summary.value = summary; + formObj.style.value = style; + formObj.dir.value = dir; + formObj.lang.value = lang; + formObj.backgroundimage.value = background; + + updateColor('bordercolor_pick', 'bordercolor'); + updateColor('bgcolor_pick', 'bgcolor'); + + // Resize some elements + if (isVisible('backgroundimagebrowser')) + document.getElementById('backgroundimage').style.width = '180px'; + + // Disable some fields in update mode + if (action == "update") { + formObj.cols.disabled = true; + formObj.rows.disabled = true; + } +} + +function changedSize() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + +/* var width = formObj.width.value; + if (width != "") + st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : ""; + else + st['width'] = "";*/ + + var height = formObj.height.value; + if (height != "") + st['height'] = getCSSSize(height); + else + st['height'] = ""; + + formObj.style.value = dom.serializeStyle(st); +} + +function isCssSize(value) { + return /^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)$/.test(value); +} + +function cssSize(value, def) { + value = tinymce.trim(value || def); + + if (!isCssSize(value)) { + return parseInt(value, 10) + 'px'; + } + + return value; +} + +function changedBackgroundImage() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + st['background-image'] = "url('" + formObj.backgroundimage.value + "')"; + + formObj.style.value = dom.serializeStyle(st); +} + +function changedBorder() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + // Update border width if the element has a color + if (formObj.border.value != "" && (isCssSize(formObj.border.value) || formObj.bordercolor.value != "")) + st['border-width'] = cssSize(formObj.border.value); + else { + if (!formObj.border.value) { + st['border'] = ''; + st['border-width'] = ''; + } + } + + formObj.style.value = dom.serializeStyle(st); +} + +function changedColor() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + st['background-color'] = formObj.bgcolor.value; + + if (formObj.bordercolor.value != "") { + st['border-color'] = formObj.bordercolor.value; + + // Add border-width if it's missing + if (!st['border-width']) + st['border-width'] = cssSize(formObj.border.value, 1); + } + + formObj.style.value = dom.serializeStyle(st); +} + +function changedStyle() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + if (st['background-image']) + formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); + else + formObj.backgroundimage.value = ''; + + if (st['width']) + formObj.width.value = trimSize(st['width']); + + if (st['height']) + formObj.height.value = trimSize(st['height']); + + if (st['background-color']) { + formObj.bgcolor.value = st['background-color']; + updateColor('bgcolor_pick','bgcolor'); + } + + if (st['border-color']) { + formObj.bordercolor.value = st['border-color']; + updateColor('bordercolor_pick','bordercolor'); + } +} + +tinyMCEPopup.onInit.add(init); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/langs/de_dlg.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/langs/de_dlg.js new file mode 100644 index 0000000..1498c14 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.table_dlg',{"rules_border":"alle 4 Seiten (Border)","rules_box":"alle 4 Seiten (Box)","rules_vsides":"links und rechts","rules_rhs":"nur rechts","rules_lhs":"nur links","rules_hsides":"oben und unten","rules_below":"nur unten","rules_above":"nur oben","rules_void":"keins",rules:"Gitter","frame_all":"zwischen allen Zellen","frame_cols":"zwischen Spalten","frame_rows":"zwischen Zeilen","frame_groups":"zwischen Gruppen","frame_none":"keine",frame:"Rahmen",caption:"Beschriftung der Tabelle","missing_scope":"Soll f\u00fcr diese \u00dcberschrift wirklich kein Bereich angegeben werden? Benutzer mit k\u00f6rperlichen Einschr\u00e4nkungen k\u00f6nnten Schwierigkeiten haben, den Inhalt der Tabelle zu verstehen.","cell_limit":"Die maximale Zellenzahl von {$cells} wurde \u00fcberschritten.","row_limit":"Die maximale Zeilenzahl von {$rows} wurde \u00fcberschritten.","col_limit":"Die maximale Spaltenzahl von {$cols} wurde \u00fcberschritten.",colgroup:"Horizontal gruppieren",rowgroup:"Vertikal gruppieren",scope:"Bezug",tfoot:"Tabellenfu\u00df",tbody:"Tabelleninhalt",thead:"Tabellenkopf","row_all":"Alle Zeilen ver\u00e4ndern","row_even":"Gerade Zeilen ver\u00e4ndern","row_odd":"Ungerade Zeilen ver\u00e4ndern","row_row":"Diese Zeile ver\u00e4ndern","cell_all":"Alle Zellen der Tabelle ver\u00e4ndern","cell_row":"Alle Zellen in dieser Zeile ver\u00e4ndern","cell_cell":"Diese Zelle ver\u00e4ndern",th:"\u00dcberschrift",td:"Textzelle",summary:"Zusammenfassung",bgimage:"Hintergrundbild",rtl:"Rechts nach links",ltr:"Links nach rechts",mime:"MIME-Type des Inhalts",langcode:"Sprachcode",langdir:"Schriftrichtung",style:"Format",id:"ID","merge_cells_title":"Zellen vereinen",bgcolor:"Hintergrundfarbe",bordercolor:"Rahmenfarbe","align_bottom":"Unten","align_top":"Oben",valign:"Vertikale Ausrichtung","cell_type":"Zellentyp","cell_title":"Eigenschaften der Zelle","row_title":"Eigenschaften der Zeile","align_middle":"Mittig","align_right":"Rechts","align_left":"Links","align_default":"Standard",align:"Ausrichtung",border:"Rahmen",cellpadding:"Abstand innerhalb der Zellen",cellspacing:"Zellenabstand",rows:"Zeilen",cols:"Spalten",height:"H\u00f6he",width:"Breite",title:"Tabelle einf\u00fcgen/bearbeiten",rowtype:"Gruppierung","advanced_props":"Erweiterte Einstellungen","general_props":"Allgemeine Einstellungen","advanced_tab":"Erweitert","general_tab":"Allgemein","cell_col":"Alle Zellen in dieser Spalte aktualisieren"}); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/langs/en_dlg.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/langs/en_dlg.js new file mode 100644 index 0000000..463e09e --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","missing_scope":"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/merge_cells.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/merge_cells.htm new file mode 100644 index 0000000..788acf6 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/merge_cells.htm @@ -0,0 +1,32 @@ + + + + {#table_dlg.merge_cells_title} + + + + + + +
+
+ {#table_dlg.merge_cells_title} + + + + + + + + + +
:
:
+
+ +
+ + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/row.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/row.htm new file mode 100644 index 0000000..7b46137 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/row.htm @@ -0,0 +1,158 @@ + + + + {#table_dlg.row_title} + + + + + + + + + +
+ + +
+
+
+ {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+ +
+
+ {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + +
 
+
+ + + + + + +
 
+
+
+
+
+
+ +
+
+ +
+ + + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/table.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/table.htm new file mode 100644 index 0000000..52e6bf2 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/table/table.htm @@ -0,0 +1,188 @@ + + + + {#table_dlg.title} + + + + + + + + + + +
+ + +
+
+
+ {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+ {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
 
+
+ +
+ +
+ +
+ + + + + +
 
+
+ + + + + +
 
+
+
+
+
+ +
+ + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/blank.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/blank.htm new file mode 100644 index 0000000..538a3b1 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/blank.htm @@ -0,0 +1,12 @@ + + + blank_page + + + + + + + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/css/template.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/css/template.css new file mode 100644 index 0000000..0a03f2e --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/css/template.css @@ -0,0 +1,23 @@ +#frmbody { + padding: 10px; + background-color: #FFF; + border: 1px solid #CCC; +} + +.frmRow { + margin-bottom: 10px; +} + +#templatesrc { + border: none; + width: 320px; + height: 240px; +} + +.title { + padding-bottom: 5px; +} + +.mceActionPanel { + padding-top: 5px; +} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/editor_plugin.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/editor_plugin.js new file mode 100644 index 0000000..ebe3c27 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TemplatePlugin",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceTemplate",function(e){b.windowManager.open({file:c+"/template.htm",width:b.getParam("template_popup_width",750),height:b.getParam("template_popup_height",600),inline:1},{plugin_url:c})});b.addCommand("mceInsertTemplate",d._insertTemplate,d);b.addButton("template",{title:"template.desc",cmd:"mceTemplate"});b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("div",g.node),function(h){if(f.hasClass(h,"mceTmpl")){a(f.select("*",h),function(i){if(f.hasClass(i,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){i.innerHTML=d._getDateTime(new Date(),e.getParam("template_mdate_format",e.getLang("template.mdate_format")))}});d._replaceVals(h)}})})},getInfo:function(){return{longname:"Template plugin",author:"Moxiecode Systems AB",authorurl:"http://www.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_insertTemplate:function(i,j){var k=this,g=k.editor,f,c,d=g.dom,b=g.selection.getContent();f=j.content;a(k.editor.getParam("template_replace_values"),function(l,h){if(typeof(l)!="function"){f=f.replace(new RegExp("\\{\\$"+h+"\\}","g"),l)}});c=d.create("div",null,f);n=d.select(".mceTmpl",c);if(n&&n.length>0){c=d.create("div",null);c.appendChild(n[0].cloneNode(true))}function e(l,h){return new RegExp("\\b"+h+"\\b","g").test(l.className)}a(d.select("*",c),function(h){if(e(h,g.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_cdate_format",g.getLang("template.cdate_format")))}if(e(h,g.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_mdate_format",g.getLang("template.mdate_format")))}if(e(h,g.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))){h.innerHTML=b}});k._replaceVals(c);g.execCommand("mceInsertContent",false,c.innerHTML);g.addVisual()},_replaceVals:function(c){var d=this.editor.dom,b=this.editor.getParam("template_replace_values");a(d.select("*",c),function(f){a(b,function(g,e){if(d.hasClass(f,e)){if(typeof(b[e])=="function"){b[e](f)}}})})},_getDateTime:function(e,b){if(!b){return""}function c(g,d){var f;g=""+g;if(g.length 0) { + el = dom.create('div', null); + el.appendChild(n[0].cloneNode(true)); + } + + function hasClass(n, c) { + return new RegExp('\\b' + c + '\\b', 'g').test(n.className); + }; + + each(dom.select('*', el), function(n) { + // Replace cdate + if (hasClass(n, ed.getParam('template_cdate_classes', 'cdate').replace(/\s+/g, '|'))) + n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_cdate_format", ed.getLang("template.cdate_format"))); + + // Replace mdate + if (hasClass(n, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|'))) + n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format"))); + + // Replace selection + if (hasClass(n, ed.getParam('template_selected_content_classes', 'selcontent').replace(/\s+/g, '|'))) + n.innerHTML = sel; + }); + + t._replaceVals(el); + + ed.execCommand('mceInsertContent', false, el.innerHTML); + ed.addVisual(); + }, + + _replaceVals : function(e) { + var dom = this.editor.dom, vl = this.editor.getParam('template_replace_values'); + + each(dom.select('*', e), function(e) { + each(vl, function(v, k) { + if (dom.hasClass(e, k)) { + if (typeof(vl[k]) == 'function') + vl[k](e); + } + }); + }); + }, + + _getDateTime : function(d, fmt) { + if (!fmt) + return ""; + + function addZeros(value, len) { + var i; + + value = "" + value; + + if (value.length < len) { + for (i=0; i<(len-value.length); i++) + value = "0" + value; + } + + return value; + } + + fmt = fmt.replace("%D", "%m/%d/%y"); + fmt = fmt.replace("%r", "%I:%M:%S %p"); + fmt = fmt.replace("%Y", "" + d.getFullYear()); + fmt = fmt.replace("%y", "" + d.getYear()); + fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2)); + fmt = fmt.replace("%d", addZeros(d.getDate(), 2)); + fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2)); + fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2)); + fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2)); + fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1)); + fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM")); + fmt = fmt.replace("%B", "" + this.editor.getLang("template_months_long").split(',')[d.getMonth()]); + fmt = fmt.replace("%b", "" + this.editor.getLang("template_months_short").split(',')[d.getMonth()]); + fmt = fmt.replace("%A", "" + this.editor.getLang("template_day_long").split(',')[d.getDay()]); + fmt = fmt.replace("%a", "" + this.editor.getLang("template_day_short").split(',')[d.getDay()]); + fmt = fmt.replace("%%", "%"); + + return fmt; + } + }); + + // Register plugin + tinymce.PluginManager.add('template', tinymce.plugins.TemplatePlugin); +})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/js/template.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/js/template.js new file mode 100644 index 0000000..673395a --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/template/js/template.js @@ -0,0 +1,106 @@ +tinyMCEPopup.requireLangPack(); + +var TemplateDialog = { + preInit : function() { + var url = tinyMCEPopup.getParam("template_external_list_url"); + + if (url != null) + document.write(''); + }, + + init : function() { + var ed = tinyMCEPopup.editor, tsrc, sel, x, u; + + tsrc = ed.getParam("template_templates", false); + sel = document.getElementById('tpath'); + + // Setup external template list + if (!tsrc && typeof(tinyMCETemplateList) != 'undefined') { + for (x=0, tsrc = []; x'); + }); + }, + + selectTemplate : function(u, ti) { + var d = window.frames['templatesrc'].document, x, tsrc = this.tsrc; + + if (!u) + return; + + d.body.innerHTML = this.templateHTML = this.getFileContents(u); + + for (x=0; x + + {#template_dlg.title} + + + + + +
+
+
{#template_dlg.desc}
+
+ +
+
+
+
+ {#template_dlg.preview} + +
+
+ +
+ + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css new file mode 100644 index 0000000..681b588 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css @@ -0,0 +1,21 @@ +p, h1, h2, h3, h4, h5, h6, hgroup, aside, div, section, article, blockquote, address, pre, figure {display: block; padding-top: 10px; border: 1px dashed #BBB; background: transparent no-repeat} +p, h1, h2, h3, h4, h5, h6, hgroup, aside, div, section, article, address, pre, figure {margin-left: 3px} +section, article, address, hgroup, aside, figure {margin: 0 0 1em 3px} + +p {background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)} +h1 {background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)} +h2 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)} +h3 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)} +h4 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)} +h5 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)} +h6 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)} +div {background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)} +section {background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)} +article {background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)} +blockquote {background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)} +address {background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)} +pre {background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)} +hgroup {background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)} +aside {background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)} +figure {background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)} +figcaption {border: 1px dashed #BBB} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js new file mode 100644 index 0000000..c65eaf2 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.VisualBlocks",{init:function(a,b){var c;if(!window.NodeList){return}a.addCommand("mceVisualBlocks",function(){var e=a.dom,d;if(!c){c=e.uniqueId();d=e.create("link",{id:c,rel:"stylesheet",href:b+"/css/visualblocks.css"});a.getDoc().getElementsByTagName("head")[0].appendChild(d)}else{d=e.get(c);d.disabled=!d.disabled}a.controlManager.setActive("visualblocks",!d.disabled)});a.addButton("visualblocks",{title:"visualblocks.desc",cmd:"mceVisualBlocks"});a.onInit.add(function(){if(a.settings.visualblocks_default_state){a.execCommand("mceVisualBlocks",false,null,{skip_focus:true})}})},getInfo:function(){return{longname:"Visual blocks",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualblocks",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("visualblocks",tinymce.plugins.VisualBlocks)})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js new file mode 100644 index 0000000..51f8a61 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js @@ -0,0 +1,63 @@ +/** + * editor_plugin_src.js + * + * Copyright 2012, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.VisualBlocks', { + init : function(ed, url) { + var cssId; + + // We don't support older browsers like IE6/7 and they don't provide prototypes for DOM objects + if (!window.NodeList) { + return; + } + + ed.addCommand('mceVisualBlocks', function() { + var dom = ed.dom, linkElm; + + if (!cssId) { + cssId = dom.uniqueId(); + linkElm = dom.create('link', { + id: cssId, + rel : 'stylesheet', + href : url + '/css/visualblocks.css' + }); + + ed.getDoc().getElementsByTagName('head')[0].appendChild(linkElm); + } else { + linkElm = dom.get(cssId); + linkElm.disabled = !linkElm.disabled; + } + + ed.controlManager.setActive('visualblocks', !linkElm.disabled); + }); + + ed.addButton('visualblocks', {title : 'visualblocks.desc', cmd : 'mceVisualBlocks'}); + + ed.onInit.add(function() { + if (ed.settings.visualblocks_default_state) { + ed.execCommand('mceVisualBlocks', false, null, {skip_focus : true}); + } + }); + }, + + getInfo : function() { + return { + longname : 'Visual blocks', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualblocks', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('visualblocks', tinymce.plugins.VisualBlocks); +})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js new file mode 100644 index 0000000..1a148e8 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.VisualChars",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceVisualChars",c._toggleVisualChars,c);a.addButton("visualchars",{title:"visualchars.desc",cmd:"mceVisualChars"});a.onBeforeGetContent.add(function(d,e){if(c.state&&e.format!="raw"&&!e.draft){c.state=true;c._toggleVisualChars(false)}})},getInfo:function(){return{longname:"Visual characters",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_toggleVisualChars:function(m){var p=this,k=p.editor,a,g,j,n=k.getDoc(),o=k.getBody(),l,q=k.selection,e,c,f;p.state=!p.state;k.controlManager.setActive("visualchars",p.state);if(m){f=q.getBookmark()}if(p.state){a=[];tinymce.walk(o,function(b){if(b.nodeType==3&&b.nodeValue&&b.nodeValue.indexOf("\u00a0")!=-1){a.push(b)}},"childNodes");for(g=0;g$1');c=k.dom.create("div",null,l);while(node=c.lastChild){k.dom.insertAfter(node,a[g])}k.dom.remove(a[g])}}else{a=k.dom.select("span.mceItemNbsp",o);for(g=a.length-1;g>=0;g--){k.dom.remove(a[g],1)}}q.moveToBookmark(f)}});tinymce.PluginManager.add("visualchars",tinymce.plugins.VisualChars)})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js new file mode 100644 index 0000000..0e3572e --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js @@ -0,0 +1,83 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.VisualChars', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceVisualChars', t._toggleVisualChars, t); + + // Register buttons + ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'}); + + ed.onBeforeGetContent.add(function(ed, o) { + if (t.state && o.format != 'raw' && !o.draft) { + t.state = true; + t._toggleVisualChars(false); + } + }); + }, + + getInfo : function() { + return { + longname : 'Visual characters', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _toggleVisualChars : function(bookmark) { + var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo, div, bm; + + t.state = !t.state; + ed.controlManager.setActive('visualchars', t.state); + + if (bookmark) + bm = s.getBookmark(); + + if (t.state) { + nl = []; + tinymce.walk(b, function(n) { + if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1) + nl.push(n); + }, 'childNodes'); + + for (i = 0; i < nl.length; i++) { + nv = nl[i].nodeValue; + nv = nv.replace(/(\u00a0)/g, '$1'); + + div = ed.dom.create('div', null, nv); + while (node = div.lastChild) + ed.dom.insertAfter(node, nl[i]); + + ed.dom.remove(nl[i]); + } + } else { + nl = ed.dom.select('span.mceItemNbsp', b); + + for (i = nl.length - 1; i >= 0; i--) + ed.dom.remove(nl[i], 1); + } + + s.moveToBookmark(bm); + } + }); + + // Register plugin + tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars); +})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js new file mode 100644 index 0000000..42ece20 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(c,d){var e=this,f=0,g=tinymce.VK;e.countre=c.getParam("wordcount_countregex",/[\w\u2019\'-]+/g);e.cleanre=c.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);e.update_rate=c.getParam("wordcount_update_rate",2000);e.update_on_delete=c.getParam("wordcount_update_on_delete",false);e.id=c.id+"-word-count";c.onPostRender.add(function(i,h){var j,k;k=i.getParam("wordcount_target_id");if(!k){j=tinymce.DOM.get(i.id+"_path_row");if(j){tinymce.DOM.add(j.parentNode,"div",{style:"float: right"},i.getLang("wordcount.words","Words: ")+'0')}}else{tinymce.DOM.add(k,"span",{},'0')}});c.onInit.add(function(h){h.selection.onSetContent.add(function(){e._count(h)});e._count(h)});c.onSetContent.add(function(h){e._count(h)});function b(h){return h!==f&&(h===g.ENTER||f===g.SPACEBAR||a(f))}function a(h){return h===g.DELETE||h===g.BACKSPACE}c.onKeyUp.add(function(h,i){if(b(i.keyCode)||e.update_on_delete&&a(i.keyCode)){e._count(h)}f=i.keyCode})},_getCount:function(c){var a=0;var b=c.getContent({format:"raw"});if(b){b=b.replace(/\.\.\./g," ");b=b.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ");b=b.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," ");b=b.replace(this.cleanre,"");var d=b.match(this.countre);if(d){a=d.length}}return a},_count:function(a){var b=this;if(b.block){return}b.block=1;setTimeout(function(){if(!a.destroyed){var c=b._getCount(a);tinymce.DOM.setHTML(b.id,c.toString());setTimeout(function(){b.block=0},b.update_rate)}},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js new file mode 100644 index 0000000..3fb8fff --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js @@ -0,0 +1,122 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.WordCount', { + block : 0, + id : null, + countre : null, + cleanre : null, + + init : function(ed, url) { + var t = this, last = 0, VK = tinymce.VK; + + t.countre = ed.getParam('wordcount_countregex', /[\w\u2019\'-]+/g); // u2019 == ’ + t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g); + t.update_rate = ed.getParam('wordcount_update_rate', 2000); + t.update_on_delete = ed.getParam('wordcount_update_on_delete', false); + t.id = ed.id + '-word-count'; + + ed.onPostRender.add(function(ed, cm) { + var row, id; + + // Add it to the specified id or the theme advanced path + id = ed.getParam('wordcount_target_id'); + if (!id) { + row = tinymce.DOM.get(ed.id + '_path_row'); + + if (row) + tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '0'); + } else { + tinymce.DOM.add(id, 'span', {}, '0'); + } + }); + + ed.onInit.add(function(ed) { + ed.selection.onSetContent.add(function() { + t._count(ed); + }); + + t._count(ed); + }); + + ed.onSetContent.add(function(ed) { + t._count(ed); + }); + + function checkKeys(key) { + return key !== last && (key === VK.ENTER || last === VK.SPACEBAR || checkDelOrBksp(last)); + } + + function checkDelOrBksp(key) { + return key === VK.DELETE || key === VK.BACKSPACE; + } + + ed.onKeyUp.add(function(ed, e) { + if (checkKeys(e.keyCode) || t.update_on_delete && checkDelOrBksp(e.keyCode)) { + t._count(ed); + } + + last = e.keyCode; + }); + }, + + _getCount : function(ed) { + var tc = 0; + var tx = ed.getContent({ format: 'raw' }); + + if (tx) { + tx = tx.replace(/\.\.\./g, ' '); // convert ellipses to spaces + tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/ | /gi, ' '); // remove html tags and space chars + + // deal with html entities + tx = tx.replace(/(\w+)(&.+?;)+(\w+)/, "$1$3").replace(/&.+?;/g, ' '); + tx = tx.replace(this.cleanre, ''); // remove numbers and punctuation + + var wordArray = tx.match(this.countre); + if (wordArray) { + tc = wordArray.length; + } + } + + return tc; + }, + + _count : function(ed) { + var t = this; + + // Keep multiple calls from happening at the same time + if (t.block) + return; + + t.block = 1; + + setTimeout(function() { + if (!ed.destroyed) { + var tc = t._getCount(ed); + tinymce.DOM.setHTML(t.id, tc.toString()); + setTimeout(function() {t.block = 0;}, t.update_rate); + } + }, 1); + }, + + getInfo: function() { + return { + longname : 'Word Count plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + tinymce.PluginManager.add('wordcount', tinymce.plugins.WordCount); +})(); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm new file mode 100644 index 0000000..d410218 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm @@ -0,0 +1,142 @@ + + + + {#xhtmlxtras_dlg.title_abbr_element} + + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm new file mode 100644 index 0000000..12b189b --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm @@ -0,0 +1,142 @@ + + + + {#xhtmlxtras_dlg.title_acronym_element} + + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm new file mode 100644 index 0000000..d84f378 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm @@ -0,0 +1,149 @@ + + + + {#xhtmlxtras_dlg.attribs_title} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.attribute_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
+ +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.attribute_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm new file mode 100644 index 0000000..ab61b33 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm @@ -0,0 +1,142 @@ + + + + {#xhtmlxtras_dlg.title_cite_element} + + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css new file mode 100644 index 0000000..85b1b37 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css @@ -0,0 +1,11 @@ +.panel_wrapper div.current { + height: 290px; +} + +#id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey { + width: 200px; +} + +#events_panel input { + width: 200px; +} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css new file mode 100644 index 0000000..034b985 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css @@ -0,0 +1,9 @@ +input.field, select.field {width:200px;} +input.picker {width:179px; margin-left: 5px;} +input.disabled {border-color:#F2F2F2;} +img.picker {vertical-align:text-bottom; cursor:pointer;} +h1 {padding: 0 0 5px 0;} +.panel_wrapper div.current {height:160px;} +#xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;} +a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;} +#datetime {width:180px;} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm new file mode 100644 index 0000000..e3f34c7 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm @@ -0,0 +1,162 @@ + + + + {#xhtmlxtras_dlg.title_del_element} + + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_general_tab} + + + + + + + + + +
: + + + + + +
+
:
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js new file mode 100644 index 0000000..9b98a51 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.XHTMLXtrasPlugin",{init:function(a,b){a.addCommand("mceCite",function(){a.windowManager.open({file:b+"/cite.htm",width:350+parseInt(a.getLang("xhtmlxtras.cite_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.cite_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAcronym",function(){a.windowManager.open({file:b+"/acronym.htm",width:350+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.acronym_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAbbr",function(){a.windowManager.open({file:b+"/abbr.htm",width:350+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.abbr_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceDel",function(){a.windowManager.open({file:b+"/del.htm",width:340+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.del_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceIns",function(){a.windowManager.open({file:b+"/ins.htm",width:340+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.ins_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380+parseInt(a.getLang("xhtmlxtras.attr_delta_width",0)),height:370+parseInt(a.getLang("xhtmlxtras.attr_delta_height",0)),inline:1},{plugin_url:b})});a.addButton("cite",{title:"xhtmlxtras.cite_desc",cmd:"mceCite"});a.addButton("acronym",{title:"xhtmlxtras.acronym_desc",cmd:"mceAcronym"});a.addButton("abbr",{title:"xhtmlxtras.abbr_desc",cmd:"mceAbbr"});a.addButton("del",{title:"xhtmlxtras.del_desc",cmd:"mceDel"});a.addButton("ins",{title:"xhtmlxtras.ins_desc",cmd:"mceIns"});a.addButton("attribs",{title:"xhtmlxtras.attribs_desc",cmd:"mceAttributes"});a.onNodeChange.add(function(d,c,f,e){f=d.dom.getParent(f,"CITE,ACRONYM,ABBR,DEL,INS");c.setDisabled("cite",e);c.setDisabled("acronym",e);c.setDisabled("abbr",e);c.setDisabled("del",e);c.setDisabled("ins",e);c.setDisabled("attribs",f&&f.nodeName=="BODY");c.setActive("cite",0);c.setActive("acronym",0);c.setActive("abbr",0);c.setActive("del",0);c.setActive("ins",0);if(f){do{c.setDisabled(f.nodeName.toLowerCase(),0);c.setActive(f.nodeName.toLowerCase(),1)}while(f=f.parentNode)}});a.onPreInit.add(function(){a.dom.create("abbr")})},getInfo:function(){return{longname:"XHTML Xtras Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("xhtmlxtras",tinymce.plugins.XHTMLXtrasPlugin)})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js new file mode 100644 index 0000000..a9c12ef --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js @@ -0,0 +1,132 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + tinymce.create('tinymce.plugins.XHTMLXtrasPlugin', { + init : function(ed, url) { + // Register commands + ed.addCommand('mceCite', function() { + ed.windowManager.open({ + file : url + '/cite.htm', + width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)), + height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAcronym', function() { + ed.windowManager.open({ + file : url + '/acronym.htm', + width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)), + height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAbbr', function() { + ed.windowManager.open({ + file : url + '/abbr.htm', + width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)), + height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceDel', function() { + ed.windowManager.open({ + file : url + '/del.htm', + width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)), + height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceIns', function() { + ed.windowManager.open({ + file : url + '/ins.htm', + width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)), + height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAttributes', function() { + ed.windowManager.open({ + file : url + '/attributes.htm', + width : 380 + parseInt(ed.getLang('xhtmlxtras.attr_delta_width', 0)), + height : 370 + parseInt(ed.getLang('xhtmlxtras.attr_delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register buttons + ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'}); + ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'}); + ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'}); + ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'}); + ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'}); + ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'}); + + ed.onNodeChange.add(function(ed, cm, n, co) { + n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS'); + + cm.setDisabled('cite', co); + cm.setDisabled('acronym', co); + cm.setDisabled('abbr', co); + cm.setDisabled('del', co); + cm.setDisabled('ins', co); + cm.setDisabled('attribs', n && n.nodeName == 'BODY'); + cm.setActive('cite', 0); + cm.setActive('acronym', 0); + cm.setActive('abbr', 0); + cm.setActive('del', 0); + cm.setActive('ins', 0); + + // Activate all + if (n) { + do { + cm.setDisabled(n.nodeName.toLowerCase(), 0); + cm.setActive(n.nodeName.toLowerCase(), 1); + } while (n = n.parentNode); + } + }); + + ed.onPreInit.add(function() { + // Fixed IE issue where it can't handle these elements correctly + ed.dom.create('abbr'); + }); + }, + + getInfo : function() { + return { + longname : 'XHTML Xtras Plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin); +})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm new file mode 100644 index 0000000..226e605 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm @@ -0,0 +1,162 @@ + + + + {#xhtmlxtras_dlg.title_ins_element} + + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_general_tab} + + + + + + + + + +
: + + + + + +
+
:
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js new file mode 100644 index 0000000..1790e83 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js @@ -0,0 +1,28 @@ +/** + * abbr.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('abbr'); + if (SXE.currentAction == "update") { + SXE.showRemoveButton(); + } +} + +function insertAbbr() { + SXE.insertElement('abbr'); + tinyMCEPopup.close(); +} + +function removeAbbr() { + SXE.removeElement('abbr'); + tinyMCEPopup.close(); +} + +tinyMCEPopup.onInit.add(init); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js new file mode 100644 index 0000000..93b8d25 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js @@ -0,0 +1,28 @@ +/** + * acronym.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('acronym'); + if (SXE.currentAction == "update") { + SXE.showRemoveButton(); + } +} + +function insertAcronym() { + SXE.insertElement('acronym'); + tinyMCEPopup.close(); +} + +function removeAcronym() { + SXE.removeElement('acronym'); + tinyMCEPopup.close(); +} + +tinyMCEPopup.onInit.add(init); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js new file mode 100644 index 0000000..9e9b07e --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js @@ -0,0 +1,111 @@ +/** + * attributes.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + tinyMCEPopup.resizeToInnerSize(); + var inst = tinyMCEPopup.editor; + var dom = inst.dom; + var elm = inst.selection.getNode(); + var f = document.forms[0]; + var onclick = dom.getAttrib(elm, 'onclick'); + + setFormValue('title', dom.getAttrib(elm, 'title')); + setFormValue('id', dom.getAttrib(elm, 'id')); + setFormValue('style', dom.getAttrib(elm, "style")); + setFormValue('dir', dom.getAttrib(elm, 'dir')); + setFormValue('lang', dom.getAttrib(elm, 'lang')); + setFormValue('tabindex', dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); + setFormValue('accesskey', dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); + setFormValue('onfocus', dom.getAttrib(elm, 'onfocus')); + setFormValue('onblur', dom.getAttrib(elm, 'onblur')); + setFormValue('onclick', onclick); + setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick')); + setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown')); + setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup')); + setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover')); + setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove')); + setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout')); + setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress')); + setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown')); + setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup')); + className = dom.getAttrib(elm, 'class'); + + addClassesToList('classlist', 'advlink_styles'); + selectByValue(f, 'classlist', className, true); + + TinyMCE_EditableSelects.init(); +} + +function setFormValue(name, value) { + if(value && document.forms[0].elements[name]){ + document.forms[0].elements[name].value = value; + } +} + +function insertAction() { + var inst = tinyMCEPopup.editor; + var elm = inst.selection.getNode(); + + setAllAttribs(elm); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); +} + +function setAttrib(elm, attrib, value) { + var formObj = document.forms[0]; + var valueElm = formObj.elements[attrib.toLowerCase()]; + var inst = tinyMCEPopup.editor; + var dom = inst.dom; + + if (typeof(value) == "undefined" || value == null) { + value = ""; + + if (valueElm) + value = valueElm.value; + } + + dom.setAttrib(elm, attrib.toLowerCase(), value); +} + +function setAllAttribs(elm) { + var f = document.forms[0]; + + setAttrib(elm, 'title'); + setAttrib(elm, 'id'); + setAttrib(elm, 'style'); + setAttrib(elm, 'class', getSelectValue(f, 'classlist')); + setAttrib(elm, 'dir'); + setAttrib(elm, 'lang'); + setAttrib(elm, 'tabindex'); + setAttrib(elm, 'accesskey'); + setAttrib(elm, 'onfocus'); + setAttrib(elm, 'onblur'); + setAttrib(elm, 'onclick'); + setAttrib(elm, 'ondblclick'); + setAttrib(elm, 'onmousedown'); + setAttrib(elm, 'onmouseup'); + setAttrib(elm, 'onmouseover'); + setAttrib(elm, 'onmousemove'); + setAttrib(elm, 'onmouseout'); + setAttrib(elm, 'onkeypress'); + setAttrib(elm, 'onkeydown'); + setAttrib(elm, 'onkeyup'); + + // Refresh in old MSIE +// if (tinyMCE.isMSIE5) +// elm.outerHTML = elm.outerHTML; +} + +function insertAttribute() { + tinyMCEPopup.close(); +} + +tinyMCEPopup.onInit.add(init); +tinyMCEPopup.requireLangPack(); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js new file mode 100644 index 0000000..b73ef47 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js @@ -0,0 +1,28 @@ +/** + * cite.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('cite'); + if (SXE.currentAction == "update") { + SXE.showRemoveButton(); + } +} + +function insertCite() { + SXE.insertElement('cite'); + tinyMCEPopup.close(); +} + +function removeCite() { + SXE.removeElement('cite'); + tinyMCEPopup.close(); +} + +tinyMCEPopup.onInit.add(init); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js new file mode 100644 index 0000000..a5397f7 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js @@ -0,0 +1,53 @@ +/** + * del.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('del'); + if (SXE.currentAction == "update") { + setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime')); + setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite')); + SXE.showRemoveButton(); + } +} + +function setElementAttribs(elm) { + setAllCommonAttribs(elm); + setAttrib(elm, 'datetime'); + setAttrib(elm, 'cite'); + elm.removeAttribute('data-mce-new'); +} + +function insertDel() { + var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL'); + + if (elm == null) { + var s = SXE.inst.selection.getContent(); + if(s.length > 0) { + insertInlineElement('del'); + var elementArray = SXE.inst.dom.select('del[data-mce-new]'); + for (var i=0; i 0) { + tagName = element_name; + + insertInlineElement(element_name); + var elementArray = tinymce.grep(SXE.inst.dom.select(element_name)); + for (var i=0; i -1) ? true : false; +} + +SXE.removeClass = function(elm,cl) { + if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) { + return true; + } + var classNames = elm.className.split(" "); + var newClassNames = ""; + for (var x = 0, cnl = classNames.length; x < cnl; x++) { + if (classNames[x] != cl) { + newClassNames += (classNames[x] + " "); + } + } + elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end +} + +SXE.addClass = function(elm,cl) { + if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl; + return true; +} + +function insertInlineElement(en) { + var ed = tinyMCEPopup.editor, dom = ed.dom; + + ed.getDoc().execCommand('FontName', false, 'mceinline'); + tinymce.each(dom.select('span,font'), function(n) { + if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline') + dom.replace(dom.create(en, {'data-mce-new' : 1}), n, 1); + }); +} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js new file mode 100644 index 0000000..71a8a26 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js @@ -0,0 +1,53 @@ +/** + * ins.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +function init() { + SXE.initElementDialog('ins'); + if (SXE.currentAction == "update") { + setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime')); + setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite')); + SXE.showRemoveButton(); + } +} + +function setElementAttribs(elm) { + setAllCommonAttribs(elm); + setAttrib(elm, 'datetime'); + setAttrib(elm, 'cite'); + elm.removeAttribute('data-mce-new'); +} + +function insertIns() { + var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS'); + + if (elm == null) { + var s = SXE.inst.selection.getContent(); + if(s.length > 0) { + insertInlineElement('ins'); + var elementArray = SXE.inst.dom.select('ins[data-mce-new]'); + for (var i=0; i + + + {#advanced_dlg.about_title} + + + + + + + +
+
+

{#advanced_dlg.about_title}

+

Version: ()

+

TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL + by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.

+

Copyright © 2003-2008, Moxiecode Systems AB, All rights reserved.

+

For more information about this software visit the TinyMCE website.

+ +
+ Got Moxie? +
+
+ +
+
+

{#advanced_dlg.about_loaded}

+ +
+
+ +

 

+
+
+ +
+
+
+
+ +
+ +
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/anchor.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/anchor.htm new file mode 100644 index 0000000..dc53312 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/anchor.htm @@ -0,0 +1,26 @@ + + + + {#advanced_dlg.anchor_title} + + + + +
+ + + + + + + + +
{#advanced_dlg.anchor_title}
+ +
+ + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/charmap.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/charmap.htm new file mode 100644 index 0000000..12acfe1 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/charmap.htm @@ -0,0 +1,55 @@ + + + + {#advanced_dlg.charmap_title} + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
 
 
+
+ + + + + + + + + + + + + + + + +
 
 
 
+
{#advanced_dlg.charmap_usage}
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/color_picker.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/color_picker.htm new file mode 100644 index 0000000..66633d0 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/color_picker.htm @@ -0,0 +1,70 @@ + + + + {#advanced_dlg.colorpicker_title} + + + + + + +
+ + +
+
+
+ {#advanced_dlg.colorpicker_picker_title} +
+ + +
+ +
+ +
+
+
+
+ +
+
+ {#advanced_dlg.colorpicker_palette_title} +
+ +
+ +
+
+
+ +
+
+ {#advanced_dlg.colorpicker_named_title} +
+ +
+ +
+ +
+ {#advanced_dlg.colorpicker_name} +
+
+
+
+ +
+ + +
+
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/editor_template.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/editor_template.js new file mode 100644 index 0000000..4b8d563 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/editor_template.js @@ -0,0 +1 @@ +(function(h){var i=h.DOM,g=h.dom.Event,c=h.extend,f=h.each,a=h.util.Cookie,e,d=h.explode;function b(p,m){var k,l,o=p.dom,j="",n,r;previewStyles=p.settings.preview_styles;if(previewStyles===false){return""}if(!previewStyles){previewStyles="font-family font-size font-weight text-decoration text-transform color background-color"}function q(s){return s.replace(/%(\w+)/g,"")}k=m.block||m.inline||"span";l=o.create(k);f(m.styles,function(t,s){t=q(t);if(t){o.setStyle(l,s,t)}});f(m.attributes,function(t,s){t=q(t);if(t){o.setAttrib(l,s,t)}});f(m.classes,function(s){s=q(s);if(!o.hasClass(l,s)){o.addClass(l,s)}});o.setStyles(l,{position:"absolute",left:-65535});p.getBody().appendChild(l);n=o.getStyle(p.getBody(),"fontSize",true);n=/px$/.test(n)?parseInt(n,10):0;f(previewStyles.split(" "),function(s){var t=o.getStyle(l,s,true);if(s=="background-color"&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(t)){t=o.getStyle(p.getBody(),s,true);if(o.toHex(t).toLowerCase()=="#ffffff"){return}}if(s=="font-size"){if(/em|%$/.test(t)){if(n===0){return}t=parseFloat(t,10)/(/%$/.test(t)?100:1);t=(t*n)+"px"}}j+=s+":"+t+";"});o.remove(l);return j}h.ThemeManager.requireLangPack("advanced");h.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(k,l){var m=this,n,j,p;m.editor=k;m.url=l;m.onResolveName=new h.util.Dispatcher(this);n=k.settings;k.forcedHighContrastMode=k.settings.detect_highcontrast&&m._isHighContrast();k.settings.skin=k.forcedHighContrastMode?"highcontrast":k.settings.skin;if(!n.theme_advanced_buttons1){n=c({theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap"},n)}m.settings=n=c({theme_advanced_path:true,theme_advanced_toolbar_location:"top",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"left",theme_advanced_statusbar_location:"bottom",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_font_selector:"span",theme_advanced_show_current_color:0,readonly:k.settings.readonly},n);if(!n.font_size_style_values){n.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(h.is(n.theme_advanced_font_sizes,"string")){n.font_size_style_values=h.explode(n.font_size_style_values);n.font_size_classes=h.explode(n.font_size_classes||"");p={};k.settings.theme_advanced_font_sizes=n.theme_advanced_font_sizes;f(k.getParam("theme_advanced_font_sizes","","hash"),function(r,q){var o;if(q==r&&r>=1&&r<=7){q=r+" ("+m.sizes[r-1]+"pt)";o=n.font_size_classes[r-1];r=n.font_size_style_values[r-1]||(m.sizes[r-1]+"pt")}if(/^\s*\./.test(r)){o=r.replace(/\./g,"")}p[q]=o?{"class":o}:{fontSize:r}});n.theme_advanced_font_sizes=p}if((j=n.theme_advanced_path_location)&&j!="none"){n.theme_advanced_statusbar_location=n.theme_advanced_path_location}if(n.theme_advanced_statusbar_location=="none"){n.theme_advanced_statusbar_location=0}if(k.settings.content_css!==false){k.contentCSS.push(k.baseURI.toAbsolute(l+"/skins/"+k.settings.skin+"/content.css"))}k.onInit.add(function(){if(!k.settings.readonly){k.onNodeChange.add(m._nodeChanged,m);k.onKeyUp.add(m._updateUndoStatus,m);k.onMouseUp.add(m._updateUndoStatus,m);k.dom.bind(k.dom.getRoot(),"dragend",function(){m._updateUndoStatus(k)})}});k.onSetProgressState.add(function(r,o,s){var t,u=r.id,q;if(o){m.progressTimer=setTimeout(function(){t=r.getContainer();t=t.insertBefore(i.create("DIV",{style:"position:relative"}),t.firstChild);q=i.get(r.id+"_tbl");i.add(t,"div",{id:u+"_blocker","class":"mceBlocker",style:{width:q.clientWidth+2,height:q.clientHeight+2}});i.add(t,"div",{id:u+"_progress","class":"mceProgress",style:{left:q.clientWidth/2,top:q.clientHeight/2}})},s||0)}else{i.remove(u+"_blocker");i.remove(u+"_progress");clearTimeout(m.progressTimer)}});i.loadCSS(n.editor_css?k.documentBaseURI.toAbsolute(n.editor_css):l+"/skins/"+k.settings.skin+"/ui.css");if(n.skin_variant){i.loadCSS(l+"/skins/"+k.settings.skin+"/ui_"+n.skin_variant+".css")}},_isHighContrast:function(){var j,k=i.add(i.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});j=(i.getStyle(k,"background-color",true)+"").toLowerCase().replace(/ /g,"");i.remove(k);return j!="rgb(171,239,86)"&&j!="#abef56"},createControl:function(m,j){var k,l;if(l=j.createControl(m)){return l}switch(m){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((k=this.controls[m])){return j.createButton(m,{title:"advanced."+k[0],cmd:k[1],ui:k[2],value:k[3]})}},execCommand:function(l,k,m){var j=this["_"+l];if(j){j.call(this,k,m);return true}return false},_importClasses:function(l){var j=this.editor,k=j.controlManager.get("styleselect");if(k.getLength()==0){f(j.dom.getClasses(),function(q,m){var p="style_"+m,n;n={inline:"span",attributes:{"class":q["class"]},selector:"*"};j.formatter.register(p,n);k.add(q["class"],p,{style:function(){return b(j,n)}})})}},_createStyleSelect:function(o){var l=this,j=l.editor,k=j.controlManager,m;m=k.createListBox("styleselect",{title:"advanced.style_select",onselect:function(q){var r,n=[],p;f(m.items,function(s){n.push(s.value)});j.focus();j.undoManager.add();r=j.formatter.matchAll(n);h.each(r,function(s){if(!q||s==q){if(s){j.formatter.remove(s)}p=true}});if(!p){j.formatter.apply(q)}j.undoManager.add();j.nodeChanged();return false}});j.onPreInit.add(function(){var p=0,n=j.getParam("style_formats");if(n){f(n,function(q){var r,s=0;f(q,function(){s++});if(s>1){r=q.name=q.name||"style_"+(p++);j.formatter.register(r,q);m.add(q.title,r,{style:function(){return b(j,q)}})}else{m.add(q.title)}})}else{f(j.getParam("theme_advanced_styles","","hash"),function(t,s){var r,q;if(t){r="style_"+(p++);q={inline:"span",classes:t,selector:"*"};j.formatter.register(r,q);m.add(l.editor.translate(s),r,{style:function(){return b(j,q)}})}})}});if(m.getLength()==0){m.onPostRender.add(function(p,q){if(!m.NativeListBox){g.add(q.id+"_text","focus",l._importClasses,l);g.add(q.id+"_text","mousedown",l._importClasses,l);g.add(q.id+"_open","focus",l._importClasses,l);g.add(q.id+"_open","mousedown",l._importClasses,l)}else{g.add(q.id,"focus",l._importClasses,l)}})}return m},_createFontSelect:function(){var l,k=this,j=k.editor;l=j.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(m){var n=l.items[l.selectedIndex];if(!m&&n){j.execCommand("FontName",false,n.value);return}j.execCommand("FontName",false,m);l.select(function(o){return m==o});if(n&&n.value==m){l.select(null)}return false}});if(l){f(j.getParam("theme_advanced_fonts",k.settings.theme_advanced_fonts,"hash"),function(n,m){l.add(j.translate(m),n,{style:n.indexOf("dings")==-1?"font-family:"+n:""})})}return l},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(o){var p=n.items[n.selectedIndex];if(!o&&p){p=p.value;if(p["class"]){k.formatter.toggle("fontsize_class",{value:p["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,p.fontSize)}return}if(o["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}n.select(function(q){return o==q});if(p&&(p.value.fontSize==o.fontSize||p.value["class"]&&p.value["class"]==o["class"])){n.select(null)}return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(p,o){var q=p.fontSize;if(q>=1&&q<=7){q=m.sizes[parseInt(q)-1]+"pt"}n.add(o,p,{style:"font-size:"+q,"class":"mceFontSize"+(l++)+(" "+(p["class"]||""))})})}return n},_createBlockFormats:function(){var l,j={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},k=this;l=k.editor.controlManager.createListBox("formatselect",{title:"advanced.block",onselect:function(m){k.editor.execCommand("FormatBlock",false,m);return false}});if(l){f(k.editor.getParam("theme_advanced_blockformats",k.settings.theme_advanced_blockformats,"hash"),function(n,m){l.add(k.editor.translate(m!=n?m:j[n]),n,{"class":"mce_formatPreview mce_"+n,style:function(){return b(k.editor,{block:n})}})})}return l},_createForeColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_text_colors){m.colors=j}if(l.theme_advanced_default_foreground_color){m.default_color=l.theme_advanced_default_foreground_color}m.title="advanced.forecolor_desc";m.cmd="ForeColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("forecolor",m);return n},_createBackColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_background_colors){m.colors=j}if(l.theme_advanced_default_background_color){m.default_color=l.theme_advanced_default_background_color}m.title="advanced.backcolor_desc";m.cmd="HiliteColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("backcolor",m);return n},renderUI:function(l){var q,m,r,w=this,u=w.editor,x=w.settings,v,k,j;if(u.settings){u.settings.aria_label=x.aria_label+u.getLang("advanced.help_shortcut")}q=k=i.create("span",{role:"application","aria-labelledby":u.id+"_voice",id:u.id+"_parent","class":"mceEditor "+u.settings.skin+"Skin"+(x.skin_variant?" "+u.settings.skin+"Skin"+w._ufirst(x.skin_variant):"")+(u.settings.directionality=="rtl"?" mceRtl":"")});i.add(q,"span",{"class":"mceVoiceLabel",style:"display:none;",id:u.id+"_voice"},x.aria_label);if(!i.boxModel){q=i.add(q,"div",{"class":"mceOldBoxModel"})}q=v=i.add(q,"table",{role:"presentation",id:u.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});q=r=i.add(q,"tbody");switch((x.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":m=w._rowLayout(x,r,l);break;case"customlayout":m=u.execCallback("theme_advanced_custom_layout",x,r,l,k);break;default:m=w._simpleLayout(x,r,l,k)}q=l.targetNode;j=v.rows;i.addClass(j[0],"mceFirst");i.addClass(j[j.length-1],"mceLast");f(i.select("tr",r),function(o){i.addClass(o.firstChild,"mceFirst");i.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(i.get(x.theme_advanced_toolbar_container)){i.get(x.theme_advanced_toolbar_container).appendChild(k)}else{i.insertAfter(k,q)}g.add(u.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){w._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return false}});if(!u.getParam("accessibility_focus")){g.add(i.add(k,"a",{href:"#"},""),"focus",function(){tinyMCE.get(u.id).focus()})}if(x.theme_advanced_toolbar_location=="external"){l.deltaHeight=0}w.deltaHeight=l.deltaHeight;l.targetNode=null;u.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){if(h.isWebKit){window.focus()}w.toolbarGroup.focus();return g.cancel(n)}else{if(n.keyCode===o){i.get(p.id+"_path_row").focus();return g.cancel(n)}}}});u.addShortcut("alt+0","","mceShortcuts",w);return{iframeContainer:m,editorContainer:u.id+"_parent",sizeContainer:v,deltaHeight:l.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:h.majorVersion+"."+h.minorVersion}},resizeBy:function(j,k){var l=i.get(this.editor.id+"_ifr");this.resizeTo(l.clientWidth+j,l.clientHeight+k)},resizeTo:function(j,n,l){var k=this.editor,m=this.settings,o=i.get(k.id+"_tbl"),p=i.get(k.id+"_ifr");j=Math.max(m.theme_advanced_resizing_min_width||100,j);n=Math.max(m.theme_advanced_resizing_min_height||100,n);j=Math.min(m.theme_advanced_resizing_max_width||65535,j);n=Math.min(m.theme_advanced_resizing_max_height||65535,n);i.setStyle(o,"height","");i.setStyle(p,"height",n);if(m.theme_advanced_resize_horizontal){i.setStyle(o,"width","");i.setStyle(p,"width",j);if(j"));i.setHTML(l,r.join(""))},_addStatusBar:function(p,k){var l,w=this,q=w.editor,x=w.settings,j,u,v,m;l=i.add(p,"tr");l=m=i.add(l,"td",{"class":"mceStatusbar"});l=i.add(l,"div",{id:q.id+"_path_row",role:"group","aria-labelledby":q.id+"_path_voice"});if(x.theme_advanced_path){i.add(l,"span",{id:q.id+"_path_voice"},q.translate("advanced.path"));i.add(l,"span",{},": ")}else{i.add(l,"span",{}," ")}if(x.theme_advanced_resizing){i.add(m,"a",{id:q.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize",tabIndex:"-1"});if(x.theme_advanced_resizing_use_cookie){q.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+q.id+"_size"),r=i.get(q.id+"_tbl");if(!n){return}w.resizeTo(n.cw,n.ch)})}q.onPostRender.add(function(){g.add(q.id+"_resize","click",function(n){n.preventDefault()});g.add(q.id+"_resize","mousedown",function(E){var t,r,s,o,D,A,B,G,n,F,y;function z(H){H.preventDefault();n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F)}function C(H){g.remove(i.doc,"mousemove",t);g.remove(q.getDoc(),"mousemove",r);g.remove(i.doc,"mouseup",s);g.remove(q.getDoc(),"mouseup",o);n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F,true);q.nodeChanged()}E.preventDefault();D=E.screenX;A=E.screenY;y=i.get(w.editor.id+"_ifr");B=n=y.clientWidth;G=F=y.clientHeight;t=g.add(i.doc,"mousemove",z);r=g.add(q.getDoc(),"mousemove",z);s=g.add(i.doc,"mouseup",C);o=g.add(q.getDoc(),"mouseup",C)})})}k.deltaHeight-=21;l=p=null},_updateUndoStatus:function(k){var j=k.controlManager,l=k.undoManager;j.setDisabled("undo",!l.hasUndo()&&!l.typing);j.setDisabled("redo",!l.hasRedo())},_nodeChanged:function(o,u,E,r,F){var z=this,D,G=0,y,H,A=z.settings,x,l,w,C,m,k,j;h.each(z.stateControls,function(n){u.setActive(n,o.queryCommandState(z.controls[n][1]))});function q(p){var s,n=F.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s0){H.mark(p)}})}if(H=u.get("formatselect")){D=q(o.dom.isBlock);if(D){H.select(D.nodeName.toLowerCase())}}q(function(p){if(p.nodeName==="SPAN"){if(!x&&p.className){x=p.className}}if(o.dom.is(p,A.theme_advanced_font_selector)){if(!l&&p.style.fontSize){l=p.style.fontSize}if(!w&&p.style.fontFamily){w=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!C&&p.style.color){C=p.style.color}if(!m&&p.style.backgroundColor){m=p.style.backgroundColor}}return false});if(H=u.get("fontselect")){H.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==w})}if(H=u.get("fontsizeselect")){if(A.theme_advanced_runtime_fontsize&&!l&&!x){l=o.dom.getStyle(E,"fontSize",true)}H.select(function(n){if(n.fontSize&&n.fontSize===l){return true}if(n["class"]&&n["class"]===x){return true}})}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_path&&A.theme_advanced_statusbar_location){D=i.get(o.id+"_path")||i.add(o.id+"_path_row","span",{id:o.id+"_path"});if(z.statusKeyboardNavigation){z.statusKeyboardNavigation.destroy();z.statusKeyboardNavigation=null}i.setHTML(D,"");q(function(I){var p=I.nodeName.toLowerCase(),s,v,t="";if(I.nodeType!=1||p==="br"||I.getAttribute("data-mce-bogus")||i.hasClass(I,"mceItemHidden")||i.hasClass(I,"mceItemRemoved")){return}if(h.isIE&&I.scopeName!=="HTML"&&I.scopeName){p=I.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(y=i.getAttrib(I,"src")){t+="src: "+y+" "}break;case"a":if(y=i.getAttrib(I,"name")){t+="name: "+y+" ";p+="#"+y}if(y=i.getAttrib(I,"href")){t+="href: "+y+" "}break;case"font":if(y=i.getAttrib(I,"face")){t+="font: "+y+" "}if(y=i.getAttrib(I,"size")){t+="size: "+y+" "}if(y=i.getAttrib(I,"color")){t+="color: "+y+" "}break;case"span":if(y=i.getAttrib(I,"style")){t+="style: "+y+" "}break}if(y=i.getAttrib(I,"id")){t+="id: "+y+" "}if(y=I.className){y=y.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(y){t+="class: "+y+" ";if(o.dom.isBlock(I)||p=="img"||p=="span"){p+="."+y}}}p=p.replace(/(html:)/g,"");p={name:p,node:I,title:t};z.onResolveName.dispatch(z,p);t=p.title;p=p.name;v=i.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(G++)},p);if(D.hasChildNodes()){D.insertBefore(i.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),D.firstChild);D.insertBefore(v,D.firstChild)}else{D.appendChild(v)}},o.getBody());if(i.select("a",D).length>0){z.statusKeyboardNavigation=new h.ui.KeyboardNavigation({root:o.id+"_path_row",items:i.select("a",D),excludeFromTabOrder:true,onCancel:function(){o.focus()}},i)}}},_sel:function(j){this.editor.execCommand("mceSelectNodeDepth",false,j)},_mceInsertAnchor:function(l,k){var j=this.editor;j.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(j.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(j.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var j=this.editor;j.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(j.getLang("advanced.charmap_delta_width",0)),height:265+parseInt(j.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var j=this.editor;j.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var j=this.editor;j.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(l,k){var j=this.editor;k=k||{};j.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(j.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(j.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:k.color,func:k.func,theme_url:this.url})},_mceCodeEditor:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(j.getParam("theme_advanced_source_editor_width",720)),height:parseInt(j.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(k,l){var j=this.editor;if(j.dom.getAttrib(j.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}j.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(j.getLang("advanced.image_delta_width",0)),height:275+parseInt(j.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(j.getLang("advanced.link_delta_width",0)),height:200+parseInt(j.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var j=this.editor;j.windowManager.confirm("advanced.newdocument",function(k){if(k){j.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var j=this;this._mceColorPicker(0,{color:j.fgColor,func:function(k){j.fgColor=k;j.editor.execCommand("ForeColor",false,k)}})},_mceBackColor:function(){var j=this;this._mceColorPicker(0,{color:j.bgColor,func:function(k){j.bgColor=k;j.editor.execCommand("HiliteColor",false,k)}})},_ufirst:function(j){return j.substring(0,1).toUpperCase()+j.substring(1)}});h.ThemeManager.add("advanced",h.themes.AdvancedTheme)}(tinymce)); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/editor_template_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/editor_template_src.js new file mode 100644 index 0000000..84039ce --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/editor_template_src.js @@ -0,0 +1,1490 @@ +/** + * editor_template_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function(tinymce) { + var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode; + + // Generates a preview for a format + function getPreviewCss(ed, fmt) { + var name, previewElm, dom = ed.dom, previewCss = '', parentFontSize, previewStylesName; + + previewStyles = ed.settings.preview_styles; + + // No preview forced + if (previewStyles === false) + return ''; + + // Default preview + if (!previewStyles) + previewStyles = 'font-family font-size font-weight text-decoration text-transform color background-color'; + + // Removes any variables since these can't be previewed + function removeVars(val) { + return val.replace(/%(\w+)/g, ''); + }; + + // Create block/inline element to use for preview + name = fmt.block || fmt.inline || 'span'; + previewElm = dom.create(name); + + // Add format styles to preview element + each(fmt.styles, function(value, name) { + value = removeVars(value); + + if (value) + dom.setStyle(previewElm, name, value); + }); + + // Add attributes to preview element + each(fmt.attributes, function(value, name) { + value = removeVars(value); + + if (value) + dom.setAttrib(previewElm, name, value); + }); + + // Add classes to preview element + each(fmt.classes, function(value) { + value = removeVars(value); + + if (!dom.hasClass(previewElm, value)) + dom.addClass(previewElm, value); + }); + + // Add the previewElm outside the visual area + dom.setStyles(previewElm, {position: 'absolute', left: -0xFFFF}); + ed.getBody().appendChild(previewElm); + + // Get parent container font size so we can compute px values out of em/% for older IE:s + parentFontSize = dom.getStyle(ed.getBody(), 'fontSize', true); + parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0; + + each(previewStyles.split(' '), function(name) { + var value = dom.getStyle(previewElm, name, true); + + // If background is transparent then check if the body has a background color we can use + if (name == 'background-color' && /transparent|rgba\s*\([^)]+,\s*0\)/.test(value)) { + value = dom.getStyle(ed.getBody(), name, true); + + // Ignore white since it's the default color, not the nicest fix + if (dom.toHex(value).toLowerCase() == '#ffffff') { + return; + } + } + + // Old IE won't calculate the font size so we need to do that manually + if (name == 'font-size') { + if (/em|%$/.test(value)) { + if (parentFontSize === 0) { + return; + } + + // Convert font size from em/% to px + value = parseFloat(value, 10) / (/%$/.test(value) ? 100 : 1); + value = (value * parentFontSize) + 'px'; + } + } + + previewCss += name + ':' + value + ';'; + }); + + dom.remove(previewElm); + + return previewCss; + }; + + // Tell it to load theme specific language pack(s) + tinymce.ThemeManager.requireLangPack('advanced'); + + tinymce.create('tinymce.themes.AdvancedTheme', { + sizes : [8, 10, 12, 14, 18, 24, 36], + + // Control name lookup, format: title, command + controls : { + bold : ['bold_desc', 'Bold'], + italic : ['italic_desc', 'Italic'], + underline : ['underline_desc', 'Underline'], + strikethrough : ['striketrough_desc', 'Strikethrough'], + justifyleft : ['justifyleft_desc', 'JustifyLeft'], + justifycenter : ['justifycenter_desc', 'JustifyCenter'], + justifyright : ['justifyright_desc', 'JustifyRight'], + justifyfull : ['justifyfull_desc', 'JustifyFull'], + bullist : ['bullist_desc', 'InsertUnorderedList'], + numlist : ['numlist_desc', 'InsertOrderedList'], + outdent : ['outdent_desc', 'Outdent'], + indent : ['indent_desc', 'Indent'], + cut : ['cut_desc', 'Cut'], + copy : ['copy_desc', 'Copy'], + paste : ['paste_desc', 'Paste'], + undo : ['undo_desc', 'Undo'], + redo : ['redo_desc', 'Redo'], + link : ['link_desc', 'mceLink'], + unlink : ['unlink_desc', 'unlink'], + image : ['image_desc', 'mceImage'], + cleanup : ['cleanup_desc', 'mceCleanup'], + help : ['help_desc', 'mceHelp'], + code : ['code_desc', 'mceCodeEditor'], + hr : ['hr_desc', 'InsertHorizontalRule'], + removeformat : ['removeformat_desc', 'RemoveFormat'], + sub : ['sub_desc', 'subscript'], + sup : ['sup_desc', 'superscript'], + forecolor : ['forecolor_desc', 'ForeColor'], + forecolorpicker : ['forecolor_desc', 'mceForeColor'], + backcolor : ['backcolor_desc', 'HiliteColor'], + backcolorpicker : ['backcolor_desc', 'mceBackColor'], + charmap : ['charmap_desc', 'mceCharMap'], + visualaid : ['visualaid_desc', 'mceToggleVisualAid'], + anchor : ['anchor_desc', 'mceInsertAnchor'], + newdocument : ['newdocument_desc', 'mceNewDocument'], + blockquote : ['blockquote_desc', 'mceBlockQuote'] + }, + + stateControls : ['bold', 'italic', 'underline', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'sub', 'sup', 'blockquote'], + + init : function(ed, url) { + var t = this, s, v, o; + + t.editor = ed; + t.url = url; + t.onResolveName = new tinymce.util.Dispatcher(this); + s = ed.settings; + + ed.forcedHighContrastMode = ed.settings.detect_highcontrast && t._isHighContrast(); + ed.settings.skin = ed.forcedHighContrastMode ? 'highcontrast' : ed.settings.skin; + + // Setup default buttons + if (!s.theme_advanced_buttons1) { + s = extend({ + theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect", + theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code", + theme_advanced_buttons3 : "hr,removeformat,visualaid,|,sub,sup,|,charmap" + }, s); + } + + // Default settings + t.settings = s = extend({ + theme_advanced_path : true, + theme_advanced_toolbar_location : 'top', + theme_advanced_blockformats : "p,address,pre,h1,h2,h3,h4,h5,h6", + theme_advanced_toolbar_align : "left", + theme_advanced_statusbar_location : "bottom", + theme_advanced_fonts : "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats", + theme_advanced_more_colors : 1, + theme_advanced_row_height : 23, + theme_advanced_resize_horizontal : 1, + theme_advanced_resizing_use_cookie : 1, + theme_advanced_font_sizes : "1,2,3,4,5,6,7", + theme_advanced_font_selector : "span", + theme_advanced_show_current_color: 0, + readonly : ed.settings.readonly + }, s); + + // Setup default font_size_style_values + if (!s.font_size_style_values) + s.font_size_style_values = "8pt,10pt,12pt,14pt,18pt,24pt,36pt"; + + if (tinymce.is(s.theme_advanced_font_sizes, 'string')) { + s.font_size_style_values = tinymce.explode(s.font_size_style_values); + s.font_size_classes = tinymce.explode(s.font_size_classes || ''); + + // Parse string value + o = {}; + ed.settings.theme_advanced_font_sizes = s.theme_advanced_font_sizes; + each(ed.getParam('theme_advanced_font_sizes', '', 'hash'), function(v, k) { + var cl; + + if (k == v && v >= 1 && v <= 7) { + k = v + ' (' + t.sizes[v - 1] + 'pt)'; + cl = s.font_size_classes[v - 1]; + v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt'); + } + + if (/^\s*\./.test(v)) + cl = v.replace(/\./g, ''); + + o[k] = cl ? {'class' : cl} : {fontSize : v}; + }); + + s.theme_advanced_font_sizes = o; + } + + if ((v = s.theme_advanced_path_location) && v != 'none') + s.theme_advanced_statusbar_location = s.theme_advanced_path_location; + + if (s.theme_advanced_statusbar_location == 'none') + s.theme_advanced_statusbar_location = 0; + + if (ed.settings.content_css !== false) + ed.contentCSS.push(ed.baseURI.toAbsolute(url + "/skins/" + ed.settings.skin + "/content.css")); + + // Init editor + ed.onInit.add(function() { + if (!ed.settings.readonly) { + ed.onNodeChange.add(t._nodeChanged, t); + ed.onKeyUp.add(t._updateUndoStatus, t); + ed.onMouseUp.add(t._updateUndoStatus, t); + ed.dom.bind(ed.dom.getRoot(), 'dragend', function() { + t._updateUndoStatus(ed); + }); + } + }); + + ed.onSetProgressState.add(function(ed, b, ti) { + var co, id = ed.id, tb; + + if (b) { + t.progressTimer = setTimeout(function() { + co = ed.getContainer(); + co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild); + tb = DOM.get(ed.id + '_tbl'); + + DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}}); + DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}}); + }, ti || 0); + } else { + DOM.remove(id + '_blocker'); + DOM.remove(id + '_progress'); + clearTimeout(t.progressTimer); + } + }); + + DOM.loadCSS(s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : url + "/skins/" + ed.settings.skin + "/ui.css"); + + if (s.skin_variant) + DOM.loadCSS(url + "/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css"); + }, + + _isHighContrast : function() { + var actualColor, div = DOM.add(DOM.getRoot(), 'div', {'style': 'background-color: rgb(171,239,86);'}); + + actualColor = (DOM.getStyle(div, 'background-color', true) + '').toLowerCase().replace(/ /g, ''); + DOM.remove(div); + + return actualColor != 'rgb(171,239,86)' && actualColor != '#abef56'; + }, + + createControl : function(n, cf) { + var cd, c; + + if (c = cf.createControl(n)) + return c; + + switch (n) { + case "styleselect": + return this._createStyleSelect(); + + case "formatselect": + return this._createBlockFormats(); + + case "fontselect": + return this._createFontSelect(); + + case "fontsizeselect": + return this._createFontSizeSelect(); + + case "forecolor": + return this._createForeColorMenu(); + + case "backcolor": + return this._createBackColorMenu(); + } + + if ((cd = this.controls[n])) + return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]}); + }, + + execCommand : function(cmd, ui, val) { + var f = this['_' + cmd]; + + if (f) { + f.call(this, ui, val); + return true; + } + + return false; + }, + + _importClasses : function(e) { + var ed = this.editor, ctrl = ed.controlManager.get('styleselect'); + + if (ctrl.getLength() == 0) { + each(ed.dom.getClasses(), function(o, idx) { + var name = 'style_' + idx, fmt; + + fmt = { + inline : 'span', + attributes : {'class' : o['class']}, + selector : '*' + }; + + ed.formatter.register(name, fmt); + + ctrl.add(o['class'], name, { + style: function() { + return getPreviewCss(ed, fmt); + } + }); + }); + } + }, + + _createStyleSelect : function(n) { + var t = this, ed = t.editor, ctrlMan = ed.controlManager, ctrl; + + // Setup style select box + ctrl = ctrlMan.createListBox('styleselect', { + title : 'advanced.style_select', + onselect : function(name) { + var matches, formatNames = [], removedFormat; + + each(ctrl.items, function(item) { + formatNames.push(item.value); + }); + + ed.focus(); + ed.undoManager.add(); + + // Toggle off the current format(s) + matches = ed.formatter.matchAll(formatNames); + tinymce.each(matches, function(match) { + if (!name || match == name) { + if (match) + ed.formatter.remove(match); + + removedFormat = true; + } + }); + + if (!removedFormat) + ed.formatter.apply(name); + + ed.undoManager.add(); + ed.nodeChanged(); + + return false; // No auto select + } + }); + + // Handle specified format + ed.onPreInit.add(function() { + var counter = 0, formats = ed.getParam('style_formats'); + + if (formats) { + each(formats, function(fmt) { + var name, keys = 0; + + each(fmt, function() {keys++;}); + + if (keys > 1) { + name = fmt.name = fmt.name || 'style_' + (counter++); + ed.formatter.register(name, fmt); + ctrl.add(fmt.title, name, { + style: function() { + return getPreviewCss(ed, fmt); + } + }); + } else + ctrl.add(fmt.title); + }); + } else { + each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) { + var name, fmt; + + if (val) { + name = 'style_' + (counter++); + fmt = { + inline : 'span', + classes : val, + selector : '*' + }; + + ed.formatter.register(name, fmt); + ctrl.add(t.editor.translate(key), name, { + style: function() { + return getPreviewCss(ed, fmt); + } + }); + } + }); + } + }); + + // Auto import classes if the ctrl box is empty + if (ctrl.getLength() == 0) { + ctrl.onPostRender.add(function(ed, n) { + if (!ctrl.NativeListBox) { + Event.add(n.id + '_text', 'focus', t._importClasses, t); + Event.add(n.id + '_text', 'mousedown', t._importClasses, t); + Event.add(n.id + '_open', 'focus', t._importClasses, t); + Event.add(n.id + '_open', 'mousedown', t._importClasses, t); + } else + Event.add(n.id, 'focus', t._importClasses, t); + }); + } + + return ctrl; + }, + + _createFontSelect : function() { + var c, t = this, ed = t.editor; + + c = ed.controlManager.createListBox('fontselect', { + title : 'advanced.fontdefault', + onselect : function(v) { + var cur = c.items[c.selectedIndex]; + + if (!v && cur) { + ed.execCommand('FontName', false, cur.value); + return; + } + + ed.execCommand('FontName', false, v); + + // Fake selection, execCommand will fire a nodeChange and update the selection + c.select(function(sv) { + return v == sv; + }); + + if (cur && cur.value == v) { + c.select(null); + } + + return false; // No auto select + } + }); + + if (c) { + each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) { + c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''}); + }); + } + + return c; + }, + + _createFontSizeSelect : function() { + var t = this, ed = t.editor, c, i = 0, cl = []; + + c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) { + var cur = c.items[c.selectedIndex]; + + if (!v && cur) { + cur = cur.value; + + if (cur['class']) { + ed.formatter.toggle('fontsize_class', {value : cur['class']}); + ed.undoManager.add(); + ed.nodeChanged(); + } else { + ed.execCommand('FontSize', false, cur.fontSize); + } + + return; + } + + if (v['class']) { + ed.focus(); + ed.undoManager.add(); + ed.formatter.toggle('fontsize_class', {value : v['class']}); + ed.undoManager.add(); + ed.nodeChanged(); + } else + ed.execCommand('FontSize', false, v.fontSize); + + // Fake selection, execCommand will fire a nodeChange and update the selection + c.select(function(sv) { + return v == sv; + }); + + if (cur && (cur.value.fontSize == v.fontSize || cur.value['class'] && cur.value['class'] == v['class'])) { + c.select(null); + } + + return false; // No auto select + }}); + + if (c) { + each(t.settings.theme_advanced_font_sizes, function(v, k) { + var fz = v.fontSize; + + if (fz >= 1 && fz <= 7) + fz = t.sizes[parseInt(fz) - 1] + 'pt'; + + c.add(k, v, {'style' : 'font-size:' + fz, 'class' : 'mceFontSize' + (i++) + (' ' + (v['class'] || ''))}); + }); + } + + return c; + }, + + _createBlockFormats : function() { + var c, fmts = { + p : 'advanced.paragraph', + address : 'advanced.address', + pre : 'advanced.pre', + h1 : 'advanced.h1', + h2 : 'advanced.h2', + h3 : 'advanced.h3', + h4 : 'advanced.h4', + h5 : 'advanced.h5', + h6 : 'advanced.h6', + div : 'advanced.div', + blockquote : 'advanced.blockquote', + code : 'advanced.code', + dt : 'advanced.dt', + dd : 'advanced.dd', + samp : 'advanced.samp' + }, t = this; + + c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', onselect : function(v) { + t.editor.execCommand('FormatBlock', false, v); + return false; + }}); + + if (c) { + each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) { + c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v, style: function() { + return getPreviewCss(t.editor, {block: v}); + }}); + }); + } + + return c; + }, + + _createForeColorMenu : function() { + var c, t = this, s = t.settings, o = {}, v; + + if (s.theme_advanced_more_colors) { + o.more_colors_func = function() { + t._mceColorPicker(0, { + color : c.value, + func : function(co) { + c.setColor(co); + } + }); + }; + } + + if (v = s.theme_advanced_text_colors) + o.colors = v; + + if (s.theme_advanced_default_foreground_color) + o.default_color = s.theme_advanced_default_foreground_color; + + o.title = 'advanced.forecolor_desc'; + o.cmd = 'ForeColor'; + o.scope = this; + + c = t.editor.controlManager.createColorSplitButton('forecolor', o); + + return c; + }, + + _createBackColorMenu : function() { + var c, t = this, s = t.settings, o = {}, v; + + if (s.theme_advanced_more_colors) { + o.more_colors_func = function() { + t._mceColorPicker(0, { + color : c.value, + func : function(co) { + c.setColor(co); + } + }); + }; + } + + if (v = s.theme_advanced_background_colors) + o.colors = v; + + if (s.theme_advanced_default_background_color) + o.default_color = s.theme_advanced_default_background_color; + + o.title = 'advanced.backcolor_desc'; + o.cmd = 'HiliteColor'; + o.scope = this; + + c = t.editor.controlManager.createColorSplitButton('backcolor', o); + + return c; + }, + + renderUI : function(o) { + var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl; + + if (ed.settings) { + ed.settings.aria_label = s.aria_label + ed.getLang('advanced.help_shortcut'); + } + + // TODO: ACC Should have an aria-describedby attribute which is user-configurable to describe what this field is actually for. + // Maybe actually inherit it from the original textara? + n = p = DOM.create('span', {role : 'application', 'aria-labelledby' : ed.id + '_voice', id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '') + (ed.settings.directionality == "rtl" ? ' mceRtl' : '')}); + DOM.add(n, 'span', {'class': 'mceVoiceLabel', 'style': 'display:none;', id: ed.id + '_voice'}, s.aria_label); + + if (!DOM.boxModel) + n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'}); + + n = sc = DOM.add(n, 'table', {role : "presentation", id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0}); + n = tb = DOM.add(n, 'tbody'); + + switch ((s.theme_advanced_layout_manager || '').toLowerCase()) { + case "rowlayout": + ic = t._rowLayout(s, tb, o); + break; + + case "customlayout": + ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p); + break; + + default: + ic = t._simpleLayout(s, tb, o, p); + } + + n = o.targetNode; + + // Add classes to first and last TRs + nl = sc.rows; + DOM.addClass(nl[0], 'mceFirst'); + DOM.addClass(nl[nl.length - 1], 'mceLast'); + + // Add classes to first and last TDs + each(DOM.select('tr', tb), function(n) { + DOM.addClass(n.firstChild, 'mceFirst'); + DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast'); + }); + + if (DOM.get(s.theme_advanced_toolbar_container)) + DOM.get(s.theme_advanced_toolbar_container).appendChild(p); + else + DOM.insertAfter(p, n); + + Event.add(ed.id + '_path_row', 'click', function(e) { + e = e.target; + + if (e.nodeName == 'A') { + t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1')); + return false; + } + }); +/* + if (DOM.get(ed.id + '_path_row')) { + Event.add(ed.id + '_tbl', 'mouseover', function(e) { + var re; + + e = e.target; + + if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) { + re = DOM.get(ed.id + '_path_row'); + t.lastPath = re.innerHTML; + DOM.setHTML(re, e.parentNode.title); + } + }); + + Event.add(ed.id + '_tbl', 'mouseout', function(e) { + if (t.lastPath) { + DOM.setHTML(ed.id + '_path_row', t.lastPath); + t.lastPath = 0; + } + }); + } +*/ + + if (!ed.getParam('accessibility_focus')) + Event.add(DOM.add(p, 'a', {href : '#'}, ''), 'focus', function() {tinyMCE.get(ed.id).focus();}); + + if (s.theme_advanced_toolbar_location == 'external') + o.deltaHeight = 0; + + t.deltaHeight = o.deltaHeight; + o.targetNode = null; + + ed.onKeyDown.add(function(ed, evt) { + var DOM_VK_F10 = 121, DOM_VK_F11 = 122; + + if (evt.altKey) { + if (evt.keyCode === DOM_VK_F10) { + // Make sure focus is given to toolbar in Safari. + // We can't do this in IE as it prevents giving focus to toolbar when editor is in a frame + if (tinymce.isWebKit) { + window.focus(); + } + t.toolbarGroup.focus(); + return Event.cancel(evt); + } else if (evt.keyCode === DOM_VK_F11) { + DOM.get(ed.id + '_path_row').focus(); + return Event.cancel(evt); + } + } + }); + + // alt+0 is the UK recommended shortcut for accessing the list of access controls. + ed.addShortcut('alt+0', '', 'mceShortcuts', t); + + return { + iframeContainer : ic, + editorContainer : ed.id + '_parent', + sizeContainer : sc, + deltaHeight : o.deltaHeight + }; + }, + + getInfo : function() { + return { + longname : 'Advanced theme', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + version : tinymce.majorVersion + "." + tinymce.minorVersion + } + }, + + resizeBy : function(dw, dh) { + var e = DOM.get(this.editor.id + '_ifr'); + + this.resizeTo(e.clientWidth + dw, e.clientHeight + dh); + }, + + resizeTo : function(w, h, store) { + var ed = this.editor, s = this.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr'); + + // Boundery fix box + w = Math.max(s.theme_advanced_resizing_min_width || 100, w); + h = Math.max(s.theme_advanced_resizing_min_height || 100, h); + w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w); + h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h); + + // Resize iframe and container + DOM.setStyle(e, 'height', ''); + DOM.setStyle(ifr, 'height', h); + + if (s.theme_advanced_resize_horizontal) { + DOM.setStyle(e, 'width', ''); + DOM.setStyle(ifr, 'width', w); + + // Make sure that the size is never smaller than the over all ui + if (w < e.clientWidth) { + w = e.clientWidth; + DOM.setStyle(ifr, 'width', e.clientWidth); + } + } + + // Store away the size + if (store && s.theme_advanced_resizing_use_cookie) { + Cookie.setHash("TinyMCE_" + ed.id + "_size", { + cw : w, + ch : h + }); + } + }, + + destroy : function() { + var id = this.editor.id; + + Event.clear(id + '_resize'); + Event.clear(id + '_path_row'); + Event.clear(id + '_external_close'); + }, + + // Internal functions + + _simpleLayout : function(s, tb, o, p) { + var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c; + + if (s.readonly) { + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + return ic; + } + + // Create toolbar container at top + if (lo == 'top') + t._addToolbars(tb, o); + + // Create external toolbar + if (lo == 'external') { + n = c = DOM.create('div', {style : 'position:relative'}); + n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'}); + DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'}); + n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0}); + etb = DOM.add(n, 'tbody'); + + if (p.firstChild.className == 'mceOldBoxModel') + p.firstChild.appendChild(c); + else + p.insertBefore(c, p.firstChild); + + t._addToolbars(etb, o); + + ed.onMouseUp.add(function() { + var e = DOM.get(ed.id + '_external'); + DOM.show(e); + + DOM.hide(lastExtID); + + var f = Event.add(ed.id + '_external_close', 'click', function() { + DOM.hide(ed.id + '_external'); + Event.remove(ed.id + '_external_close', 'click', f); + return false; + }); + + DOM.show(e); + DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1); + + // Fixes IE rendering bug + DOM.hide(e); + DOM.show(e); + e.style.filter = ''; + + lastExtID = ed.id + '_external'; + + e = null; + }); + } + + if (sl == 'top') + t._addStatusBar(tb, o); + + // Create iframe container + if (!s.theme_advanced_toolbar_container) { + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + } + + // Create toolbar container at bottom + if (lo == 'bottom') + t._addToolbars(tb, o); + + if (sl == 'bottom') + t._addStatusBar(tb, o); + + return ic; + }, + + _rowLayout : function(s, tb, o) { + var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a; + + dc = s.theme_advanced_containers_default_class || ''; + da = s.theme_advanced_containers_default_align || 'center'; + + each(explode(s.theme_advanced_containers || ''), function(c, i) { + var v = s['theme_advanced_container_' + c] || ''; + + switch (c.toLowerCase()) { + case 'mceeditor': + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + break; + + case 'mceelementpath': + t._addStatusBar(tb, o); + break; + + default: + a = (s['theme_advanced_container_' + c + '_align'] || da).toLowerCase(); + a = 'mce' + t._ufirst(a); + + n = DOM.add(DOM.add(tb, 'tr'), 'td', { + 'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da + }); + + to = cf.createToolbar("toolbar" + i); + t._addControls(v, to); + DOM.setHTML(n, to.renderHTML()); + o.deltaHeight -= s.theme_advanced_row_height; + } + }); + + return ic; + }, + + _addControls : function(v, tb) { + var t = this, s = t.settings, di, cf = t.editor.controlManager; + + if (s.theme_advanced_disable && !t._disabled) { + di = {}; + + each(explode(s.theme_advanced_disable), function(v) { + di[v] = 1; + }); + + t._disabled = di; + } else + di = t._disabled; + + each(explode(v), function(n) { + var c; + + if (di && di[n]) + return; + + // Compatiblity with 2.x + if (n == 'tablecontrols') { + each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) { + n = t.createControl(n, cf); + + if (n) + tb.add(n); + }); + + return; + } + + c = t.createControl(n, cf); + + if (c) + tb.add(c); + }); + }, + + _addToolbars : function(c, o) { + var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a, toolbarGroup, toolbarsExist = false; + + toolbarGroup = cf.createToolbarGroup('toolbargroup', { + 'name': ed.getLang('advanced.toolbar'), + 'tab_focus_toolbar':ed.getParam('theme_advanced_tab_focus_toolbar') + }); + + t.toolbarGroup = toolbarGroup; + + a = s.theme_advanced_toolbar_align.toLowerCase(); + a = 'mce' + t._ufirst(a); + + n = DOM.add(DOM.add(c, 'tr', {role: 'presentation'}), 'td', {'class' : 'mceToolbar ' + a, "role":"toolbar"}); + + // Create toolbar and add the controls + for (i=1; (v = s['theme_advanced_buttons' + i]); i++) { + toolbarsExist = true; + tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i}); + + if (s['theme_advanced_buttons' + i + '_add']) + v += ',' + s['theme_advanced_buttons' + i + '_add']; + + if (s['theme_advanced_buttons' + i + '_add_before']) + v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v; + + t._addControls(v, tb); + toolbarGroup.add(tb); + + o.deltaHeight -= s.theme_advanced_row_height; + } + // Handle case when there are no toolbar buttons and ensure editor height is adjusted accordingly + if (!toolbarsExist) + o.deltaHeight -= s.theme_advanced_row_height; + h.push(toolbarGroup.renderHTML()); + h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '')); + DOM.setHTML(n, h.join('')); + }, + + _addStatusBar : function(tb, o) { + var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td; + + n = DOM.add(tb, 'tr'); + n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'}); + n = DOM.add(n, 'div', {id : ed.id + '_path_row', 'role': 'group', 'aria-labelledby': ed.id + '_path_voice'}); + if (s.theme_advanced_path) { + DOM.add(n, 'span', {id: ed.id + '_path_voice'}, ed.translate('advanced.path')); + DOM.add(n, 'span', {}, ': '); + } else { + DOM.add(n, 'span', {}, ' '); + } + + + if (s.theme_advanced_resizing) { + DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize', tabIndex:"-1"}); + + if (s.theme_advanced_resizing_use_cookie) { + ed.onPostRender.add(function() { + var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl'); + + if (!o) + return; + + t.resizeTo(o.cw, o.ch); + }); + } + + ed.onPostRender.add(function() { + Event.add(ed.id + '_resize', 'click', function(e) { + e.preventDefault(); + }); + + Event.add(ed.id + '_resize', 'mousedown', function(e) { + var mouseMoveHandler1, mouseMoveHandler2, + mouseUpHandler1, mouseUpHandler2, + startX, startY, startWidth, startHeight, width, height, ifrElm; + + function resizeOnMove(e) { + e.preventDefault(); + + width = startWidth + (e.screenX - startX); + height = startHeight + (e.screenY - startY); + + t.resizeTo(width, height); + }; + + function endResize(e) { + // Stop listening + Event.remove(DOM.doc, 'mousemove', mouseMoveHandler1); + Event.remove(ed.getDoc(), 'mousemove', mouseMoveHandler2); + Event.remove(DOM.doc, 'mouseup', mouseUpHandler1); + Event.remove(ed.getDoc(), 'mouseup', mouseUpHandler2); + + width = startWidth + (e.screenX - startX); + height = startHeight + (e.screenY - startY); + t.resizeTo(width, height, true); + + ed.nodeChanged(); + }; + + e.preventDefault(); + + // Get the current rect size + startX = e.screenX; + startY = e.screenY; + ifrElm = DOM.get(t.editor.id + '_ifr'); + startWidth = width = ifrElm.clientWidth; + startHeight = height = ifrElm.clientHeight; + + // Register envent handlers + mouseMoveHandler1 = Event.add(DOM.doc, 'mousemove', resizeOnMove); + mouseMoveHandler2 = Event.add(ed.getDoc(), 'mousemove', resizeOnMove); + mouseUpHandler1 = Event.add(DOM.doc, 'mouseup', endResize); + mouseUpHandler2 = Event.add(ed.getDoc(), 'mouseup', endResize); + }); + }); + } + + o.deltaHeight -= 21; + n = tb = null; + }, + + _updateUndoStatus : function(ed) { + var cm = ed.controlManager, um = ed.undoManager; + + cm.setDisabled('undo', !um.hasUndo() && !um.typing); + cm.setDisabled('redo', !um.hasRedo()); + }, + + _nodeChanged : function(ed, cm, n, co, ob) { + var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, fc, bc, formatNames, matches; + + tinymce.each(t.stateControls, function(c) { + cm.setActive(c, ed.queryCommandState(t.controls[c][1])); + }); + + function getParent(name) { + var i, parents = ob.parents, func = name; + + if (typeof(name) == 'string') { + func = function(node) { + return node.nodeName == name; + }; + } + + for (i = 0; i < parents.length; i++) { + if (func(parents[i])) + return parents[i]; + } + }; + + cm.setActive('visualaid', ed.hasVisual); + t._updateUndoStatus(ed); + cm.setDisabled('outdent', !ed.queryCommandState('Outdent')); + + p = getParent('A'); + if (c = cm.get('link')) { + c.setDisabled((!p && co) || (p && !p.href)); + c.setActive(!!p && (!p.name && !p.id)); + } + + if (c = cm.get('unlink')) { + c.setDisabled(!p && co); + c.setActive(!!p && !p.name && !p.id); + } + + if (c = cm.get('anchor')) { + c.setActive(!co && !!p && (p.name || (p.id && !p.href))); + } + + p = getParent('IMG'); + if (c = cm.get('image')) + c.setActive(!co && !!p && n.className.indexOf('mceItem') == -1); + + if (c = cm.get('styleselect')) { + t._importClasses(); + + formatNames = []; + each(c.items, function(item) { + formatNames.push(item.value); + }); + + matches = ed.formatter.matchAll(formatNames); + c.select(matches[0]); + tinymce.each(matches, function(match, index) { + if (index > 0) { + c.mark(match); + } + }); + } + + if (c = cm.get('formatselect')) { + p = getParent(ed.dom.isBlock); + + if (p) + c.select(p.nodeName.toLowerCase()); + } + + // Find out current fontSize, fontFamily and fontClass + getParent(function(n) { + if (n.nodeName === 'SPAN') { + if (!cl && n.className) + cl = n.className; + } + + if (ed.dom.is(n, s.theme_advanced_font_selector)) { + if (!fz && n.style.fontSize) + fz = n.style.fontSize; + + if (!fn && n.style.fontFamily) + fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase(); + + if (!fc && n.style.color) + fc = n.style.color; + + if (!bc && n.style.backgroundColor) + bc = n.style.backgroundColor; + } + + return false; + }); + + if (c = cm.get('fontselect')) { + c.select(function(v) { + return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn; + }); + } + + // Select font size + if (c = cm.get('fontsizeselect')) { + // Use computed style + if (s.theme_advanced_runtime_fontsize && !fz && !cl) + fz = ed.dom.getStyle(n, 'fontSize', true); + + c.select(function(v) { + if (v.fontSize && v.fontSize === fz) + return true; + + if (v['class'] && v['class'] === cl) + return true; + }); + } + + if (s.theme_advanced_show_current_color) { + function updateColor(controlId, color) { + if (c = cm.get(controlId)) { + if (!color) + color = c.settings.default_color; + if (color !== c.value) { + c.displayColor(color); + } + } + } + updateColor('forecolor', fc); + updateColor('backcolor', bc); + } + + if (s.theme_advanced_show_current_color) { + function updateColor(controlId, color) { + if (c = cm.get(controlId)) { + if (!color) + color = c.settings.default_color; + if (color !== c.value) { + c.displayColor(color); + } + } + }; + + updateColor('forecolor', fc); + updateColor('backcolor', bc); + } + + if (s.theme_advanced_path && s.theme_advanced_statusbar_location) { + p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'}); + + if (t.statusKeyboardNavigation) { + t.statusKeyboardNavigation.destroy(); + t.statusKeyboardNavigation = null; + } + + DOM.setHTML(p, ''); + + getParent(function(n) { + var na = n.nodeName.toLowerCase(), u, pi, ti = ''; + + // Ignore non element and bogus/hidden elements + if (n.nodeType != 1 || na === 'br' || n.getAttribute('data-mce-bogus') || DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved')) + return; + + // Handle prefix + if (tinymce.isIE && n.scopeName !== 'HTML' && n.scopeName) + na = n.scopeName + ':' + na; + + // Remove internal prefix + na = na.replace(/mce\:/g, ''); + + // Handle node name + switch (na) { + case 'b': + na = 'strong'; + break; + + case 'i': + na = 'em'; + break; + + case 'img': + if (v = DOM.getAttrib(n, 'src')) + ti += 'src: ' + v + ' '; + + break; + + case 'a': + if (v = DOM.getAttrib(n, 'name')) { + ti += 'name: ' + v + ' '; + na += '#' + v; + } + + if (v = DOM.getAttrib(n, 'href')) + ti += 'href: ' + v + ' '; + + break; + + case 'font': + if (v = DOM.getAttrib(n, 'face')) + ti += 'font: ' + v + ' '; + + if (v = DOM.getAttrib(n, 'size')) + ti += 'size: ' + v + ' '; + + if (v = DOM.getAttrib(n, 'color')) + ti += 'color: ' + v + ' '; + + break; + + case 'span': + if (v = DOM.getAttrib(n, 'style')) + ti += 'style: ' + v + ' '; + + break; + } + + if (v = DOM.getAttrib(n, 'id')) + ti += 'id: ' + v + ' '; + + if (v = n.className) { + v = v.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g, ''); + + if (v) { + ti += 'class: ' + v + ' '; + + if (ed.dom.isBlock(n) || na == 'img' || na == 'span') + na += '.' + v; + } + } + + na = na.replace(/(html:)/g, ''); + na = {name : na, node : n, title : ti}; + t.onResolveName.dispatch(t, na); + ti = na.title; + na = na.name; + + //u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');"; + pi = DOM.create('a', {'href' : "javascript:;", role: 'button', onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na); + + if (p.hasChildNodes()) { + p.insertBefore(DOM.create('span', {'aria-hidden': 'true'}, '\u00a0\u00bb '), p.firstChild); + p.insertBefore(pi, p.firstChild); + } else + p.appendChild(pi); + }, ed.getBody()); + + if (DOM.select('a', p).length > 0) { + t.statusKeyboardNavigation = new tinymce.ui.KeyboardNavigation({ + root: ed.id + "_path_row", + items: DOM.select('a', p), + excludeFromTabOrder: true, + onCancel: function() { + ed.focus(); + } + }, DOM); + } + } + }, + + // Commands gets called by execCommand + + _sel : function(v) { + this.editor.execCommand('mceSelectNodeDepth', false, v); + }, + + _mceInsertAnchor : function(ui, v) { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/anchor.htm', + width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)), + height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceCharMap : function() { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/charmap.htm', + width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)), + height : 265 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceHelp : function() { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/about.htm', + width : 480, + height : 380, + inline : true + }, { + theme_url : this.url + }); + }, + + _mceShortcuts : function() { + var ed = this.editor; + ed.windowManager.open({ + url: this.url + '/shortcuts.htm', + width: 480, + height: 380, + inline: true + }, { + theme_url: this.url + }); + }, + + _mceColorPicker : function(u, v) { + var ed = this.editor; + + v = v || {}; + + ed.windowManager.open({ + url : this.url + '/color_picker.htm', + width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)), + height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)), + close_previous : false, + inline : true + }, { + input_color : v.color, + func : v.func, + theme_url : this.url + }); + }, + + _mceCodeEditor : function(ui, val) { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/source_editor.htm', + width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)), + height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)), + inline : true, + resizable : true, + maximizable : true + }, { + theme_url : this.url + }); + }, + + _mceImage : function(ui, val) { + var ed = this.editor; + + // Internal image object like a flash placeholder + if (ed.dom.getAttrib(ed.selection.getNode(), 'class', '').indexOf('mceItem') != -1) + return; + + ed.windowManager.open({ + url : this.url + '/image.htm', + width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)), + height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceLink : function(ui, val) { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/link.htm', + width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)), + height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceNewDocument : function() { + var ed = this.editor; + + ed.windowManager.confirm('advanced.newdocument', function(s) { + if (s) + ed.execCommand('mceSetContent', false, ''); + }); + }, + + _mceForeColor : function() { + var t = this; + + this._mceColorPicker(0, { + color: t.fgColor, + func : function(co) { + t.fgColor = co; + t.editor.execCommand('ForeColor', false, co); + } + }); + }, + + _mceBackColor : function() { + var t = this; + + this._mceColorPicker(0, { + color: t.bgColor, + func : function(co) { + t.bgColor = co; + t.editor.execCommand('HiliteColor', false, co); + } + }); + }, + + _ufirst : function(s) { + return s.substring(0, 1).toUpperCase() + s.substring(1); + } + }); + + tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme); +}(tinymce)); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/image.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/image.htm new file mode 100644 index 0000000..884890f --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/image.htm @@ -0,0 +1,80 @@ + + + + {#advanced_dlg.image_title} + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+ x +
+
+
+ +
+ + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1a377aba7784d3a0a0fabb4d22b8114cde25ace GIT binary patch literal 2584 zcmb7Bc{JPk7XQT-ib;b~B!n)ZQYwihloXMus-;?bMO70&%O72KlgJueK-#swASle5Y5YhT*O%%dE zAkc>z8ik-xeL_Q`VvZfo0TzI`m>5`0R2&QjOGtcPyzrU;Ul*Hn2<045)l;>V5-MK0^|t(rvM}*3>DEeQ&X2g z3ksC~i~iFKh=?B5i-83o3#TV^B0=RA*fOi#-=2VN?CKn!VTTmGv17_PGbp~tmc*?G?Q3b)|K!w2vr zE#B_JH@ru}sZ}~Z&Y(BdJ;w0B<_kXtGuOzs3$vq}6fO9@x%kiyX*#pRnd1k|;ZC9lr#>sh{3$yY|bYY6^>YT3sgsjiaZ zt)366^&;$S^TAwvN^I2ac+hLh>*VqIos|eL+aL&+l(KvNwWYDctNE^CZRyy^Hk}Gm zs%JVikvO#Mk)X?@TXY=wD38V@;t?)q3)?k2YvxLQMV|Z{nbR2g{a11;p-%!QgLK)B zOxbfUi(pzhsbuCxGBk6FDP#0RPN626_I($Qo;ZGhzWMfs%mMoI+aSZnc5a0+bG2w> zdwgm4&zp*i7B>D%H%G$4FMfG12)D3b{1}-HBqY<6w=n2s8b{B_D%uFYtH{l(Gjv9e zWpFy-6fULzp*cl~BJ4!l*}~J{8#NXk`;x5Nxc+^GEA?|AACg+K)(M|zxHsxFUr9^W z8>QdvdWEw!My?R7!O*p>?3Vb|(=N3|J09OD{Yf#{7*(=rbThiBH~Pm^1tz8SQ?S_2 zsL7(bX9dJ9E%uV^(+dSB)^w=MsF&jg*N2Yjo41m`+WsE&JM@CatfiOlPhC?QPlCp7 zkjesJENk4=dSaN^0M0u1TG4#qeAKgyC$GLGD7II&*kr2|#1!BvS`Grg^OIWk%YAqd zvOcmz%SU-HCVg&rbnPaNZ@-T>)?IP3SO z`YKP&>q@U~m`o*wvU{S1o};9b|8*hRw?;H&TJo4a*7;m_)Q!aD3a1rnAWdVgkH=Lu zObSl!m}$JlWj5VNXvuO#F5@@cmhB(M4yEbSXe%Ptp_SH5SxG-pk!2PJGzE6Dd$(C0 z@d~vVd*NT)SU<2GYn`hA?4|dNDwAu?ZjXWSO9CasoBO}LQ2uFAj@4t0$2xTLEHxw3 z9KJCkFq|08Vmgmxahm%mjA%=I%Gs1mlNy$Km`%^o|A2`!bMPtTrP9y*c^+0M7OCcy z*j^fh4AjCI;2fso0|cz3p5Ih7h72bSVc6YE5O%+w*;qWtI~3hL4IzfscqG;j3j4$- zGt%o#6n#5{gEJw#3{=edteC(w|C#XBp!T8k; z1)EnwGqJ26>c-cDOJv5}Snt!0vhVoS>u03BZj_q+20phaQo81-&IAo;URjUJNTP{F zJ1=+YL^+~uVv(VHc>guRDB*Gug-NN7$n25zaX5RGugKeb5qMo|<1CcSE4+{PPcxQG zv3ZU;p_ZeurmcbMiK+xooGWRsM@gr+Dhpr7I*ST8obbMa5|CLQW{h63?CM{F=X{nL zs0Exdc{AnwAx@;9BObf9QiL5^p(iN?W^L~%mn5*ee?M2!d$&oxYIK&9bd1oX&-$gA z3T&To>*_6TDnv)9{*of(wm?U7D)X3u^_3;FijXcEo0S{8x^h(v0jeTdW0Q} zOC0Y|wO&b<-xFprPec9-SKwJYz4Pbz|~nyPrCb5|2|%P;^(%>|XHw4OO3JkE+QD zWRIhqlT(0Yu4KKuvUjKlnW`S~l&?fXH-Bf`2d!J=4UHXDv4xLDnvd2_EWTb3hReh6sXpEI(hmlM{1 gF4ie0tgS$y#z=nxNn#Fpd0bt##g=j86Aowo21S>Ot^fc4 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/flash.gif b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/flash.gif new file mode 100644 index 0000000000000000000000000000000000000000..dec3f7c7028df98657860529461af29b8793601c GIT binary patch literal 239 zcmVM~p;I&fgwbZVtlRJPxC7uw?yFxEX;uVr4IeWCJ^(5m4hjYVM>G^+2V)FnXE$mS p86yHh03AmHCKD}bWutOkFce4&0zF5CG_Myp4hRT+ig>^g06S0cRV@Gj literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/icons.gif b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/icons.gif new file mode 100644 index 0000000000000000000000000000000000000000..ca222490188b939d695f5ff8823c42c0394c65f7 GIT binary patch literal 11982 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 z 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 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/iframe.gif b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/iframe.gif new file mode 100644 index 0000000000000000000000000000000000000000..410c7ad084db698e9f35e3230233aa4040682566 GIT binary patch literal 600 zcmZ?wbhEHb6krfwcoxm@|NsB$<##6SeDUYszh8g<{{H*-%a7k_-3KZc-T3+YPwBiX zzyAIE^Y`z!U%$Wp{QdX;|FQ*Fw;jIy{pasbUw?o3{yVB>Q_sRgx-G9iegFLZcfrha#d9w;%sU=Zx~6K$tw~$%z4`#O^Y@3Z zKV#~)MpSKh@#b63l#}6=>yq2|{`&JLqwny)|NnC)o%r$l&-Y)yKYjo8?#quSuRaGB zt_&<%`RV)bl#YEr{`~p)?RU|v^Y1_Z`u*?Ux8J`*N>>+5JlMAOZr+qr@y$D{mfVhO z+zt#7208-8pDc_F4ABfaAUi>E!oa?@A-bu#r8Qd6oKeb*Lx9UTz)0QBL@+vxY38ii zvqGa87c5+~h&?)zVa3W-D;=U$88}^qMBJ^ERU|z17!;#97+4%Rd1XcXJq#>t8KR;E z7zr5i6BgH5y=gAD)sAQlGB zh8au?j!n~E(Pks?@!j1fR&j*RWY8GF(-=x H6d0@lT&58X literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/pagebreak.gif b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/pagebreak.gif new file mode 100644 index 0000000000000000000000000000000000000000..acdf4085f3068c4c0a1d6855f4b80dae8bac3068 GIT binary patch literal 325 zcmV-L0lNN2Nk%w1VPpUd0J9GO`>v<{=;ru;boX6P{`2zsmyZ3>&HK5t_;hIbi-G;z z+4`cI{KdfcXj}GCLjV8&A^8LW000jFEC2ui0Av6R000E?@X1N5y*TU5yZ>M)j$|1M z4Ouvb$pHu>IW8BZq|n;U0s@T!VM5~w1_+1X!EiVl!&PITYdjT!ffYfpt{jAfv%qvh zA63WUHSlr7LkeyaV4(pM0f50(II?RD4RtMg4-E+tFhdAy5{3c=0}3Bg9Y8`B2To20 zR%SO62L%9}0H+dzoKB$+2TOwzUrwi{XiBM^4V#>63q3!LsU3u93zH8CdwqY%62;1g z0g8ze$k93lWExp`CUe|K4qOWk17ZeJ0|5pDP6+}};{>bI@lOWj=kf}r2sHp7w9-Ie XK%9UG6W(*AX-vY05F<*&5CH%?Gwy&_ literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/quicktime.gif b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/quicktime.gif new file mode 100644 index 0000000000000000000000000000000000000000..8f10e7aa6b6ab40ee69a1a41a961c092168d6fda GIT binary patch literal 301 zcmV+|0n+|QNk%w1VGsZi0Q4UK+~)L6v+~s9^fsC5ZpZP=*zu3F=Jxpf8k_5u%JNv6 z=md-84VLU4w)kSE=yI&-yw>b=v+SqE?+kq47pC+YrR?bJ^yu>Zyvpn;hTp*6^mM!O zu+8!}sO$`q%8%`=C5EEn#1d#z95FHtK5(^#(cp^e+Y!d=4FCrFbY9A3U z4-O0-4kHJPJ2(jk13n5879s!!3Q`V>8VwW`9my3H#|R8ZD+fdx0E-+693cQZ;!k;* literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/realmedia.gif b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/realmedia.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdfe0b9ac05869ae845fdd828eaad97cc0c69dbc GIT binary patch literal 439 zcmV;o0Z9HwNk%w1VI=?(0K^{vQcz8xz}f&njBB06v9GQ`Jv%NdDHCI&z`wqZw$(Lw zuFTBL!Pe#<92tv>h)9OE1Xh}vnVEHSaeb-GByg#tqM_B*)YRkdSdqTu&}n`s(k;lb>H+`#+Q6|3c{>OLTv23;utm>DSfy zuOD3adm!iUuGar)4FAhzel5=UwZ7*6(K(+k@BP_g{o}}@k7u_2k7W2iGwlom!+#Z( z|Hj5w_4MwTo8QaHxm#EFYX1DUOO|}vvgQBb!_ST${rmj+`+Fep|C$j4HGtwz7FGrZ zO$Hs1VIV&_u+2R%#bJV$RKJIcL*N7vss0Y-EsB{gGlSJaTr>sRLKbLj5HMTpyK;)l zJcfpaMYltBZdEK6Kht6+BPy*VtthFMtIoqFC=#Tu$e^eaDXCC7U0vOYOJjNk(;P!VagC#fQ*?7otVO)-#9rK#nB%ry4`E_DHQ Wm01j~^6E13^D1O7+^=wCum%9s<%z=p literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/trans.gif b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/trans.gif new file mode 100644 index 0000000000000000000000000000000000000000..388486517fa8da13ebd150e8f65d5096c3e10c3a GIT binary patch literal 43 ncmZ?wbhEHbWMp7un7{x9ia%KxMSyG_5FaGNz{KRj$Y2csb)f_x literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/video.gif b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/img/video.gif new file mode 100644 index 0000000000000000000000000000000000000000..3570104077a3b3585f11403c8d4c3fc9351f35d2 GIT binary patch literal 597 zcmZ?wbhEHb6krfwc$UTx9v<%P?Ok48Ze?YanwpxCkzrwBk(ZYzB_&l;Qw!gmM(Ep^QBwbzIoSdAh>*2n> zz9l6k0Xw#(?);y5^ls9w|LObxXI*si^YfcEYu3*P8J(S-PEJlaNB-yTd}C^Ax@_69 zzP`Ryt5)S5`=P3;TDk9SbaeFk_3NiTjGA~aFd-pf@}tlxQ>GLb7jM|Gp`oFHlaq7F zk|nvhxjsHV=g+oST3Rl6T(N1>rn0iK*Ed>3MMVn>3vF#}**q!otE>Sy|^jDoRUBoBANRc=wyaJged$+}u3x zK}ld>puWET{||NozXdO-0f3nK$V8iNkVNKl+Guy1NeYie$3 zZB}=&Zex!RYq8YfVwgNdMpdFkN|rU!Fha}0m66q>CDxczOhH^pM9qvxw1p`;Rftzu zQJ&9}g>iErlc2ORw;aC_=l*6UJ=st%r*ISVV2jgDT<)w>rXHGL<21Kdo z#uyug^O^t z0hZGrt*x!>$1C!zn`W5@`ts6_uMW)2%<0NUEKIo?SIPPE=}U0}7Z(?JcX!y=*;bF< zCWz-=h7+2ao9)(dOHM;+X=xs9)%!~xc&ICMZdRYdUQ2$^@9y(6X3NCIz{cM7f^Z=Q z1_tQ95kgl8b%R%OiYTIo7LSdE^@}A^8LW002J#EC2ui01p5U000KOz@O0K01zUifeIyT9%!RzMDgehG|mwLz+Eh; z7Z~iE zrX?OfJ^>XeDJK)xJuWOB3_l1N0Ra>g4Gk^=ED0V6LI?>4;Q|6OB{LplLMRLg8U5-E J?0y6R06W6!pgRBn literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/about.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/about.js new file mode 100644 index 0000000..daf4909 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/about.js @@ -0,0 +1,73 @@ +tinyMCEPopup.requireLangPack(); + +function init() { + var ed, tcont; + + tinyMCEPopup.resizeToInnerSize(); + ed = tinyMCEPopup.editor; + + // Give FF some time + window.setTimeout(insertHelpIFrame, 10); + + tcont = document.getElementById('plugintablecontainer'); + document.getElementById('plugins_tab').style.display = 'none'; + + var html = ""; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + + tinymce.each(ed.plugins, function(p, n) { + var info; + + if (!p.getInfo) + return; + + html += ''; + + info = p.getInfo(); + + if (info.infourl != null && info.infourl != '') + html += ''; + else + html += ''; + + if (info.authorurl != null && info.authorurl != '') + html += ''; + else + html += ''; + + html += ''; + html += ''; + + document.getElementById('plugins_tab').style.display = ''; + + }); + + html += ''; + html += '
' + ed.getLang('advanced_dlg.about_plugin') + '' + ed.getLang('advanced_dlg.about_author') + '' + ed.getLang('advanced_dlg.about_version') + '
' + info.longname + '' + info.longname + '' + info.author + '' + info.author + '' + info.version + '
'; + + tcont.innerHTML = html; + + tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion; + tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate; +} + +function insertHelpIFrame() { + var html; + + if (tinyMCEPopup.getParam('docs_url')) { + html = ''; + document.getElementById('iframecontainer').innerHTML = html; + document.getElementById('help_tab').style.display = 'block'; + document.getElementById('help_tab').setAttribute("aria-hidden", "false"); + } +} + +tinyMCEPopup.onInit.add(init); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/anchor.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/anchor.js new file mode 100644 index 0000000..a3a0186 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/anchor.js @@ -0,0 +1,56 @@ +tinyMCEPopup.requireLangPack(); + +var AnchorDialog = { + init : function(ed) { + var action, elm, f = document.forms[0]; + + this.editor = ed; + elm = ed.dom.getParent(ed.selection.getNode(), 'A'); + v = ed.dom.getAttrib(elm, 'name') || ed.dom.getAttrib(elm, 'id'); + + if (v) { + this.action = 'update'; + f.anchorName.value = v; + } + + f.insert.value = ed.getLang(elm ? 'update' : 'insert'); + }, + + update : function() { + var ed = this.editor, elm, name = document.forms[0].anchorName.value, attribName; + + if (!name || !/^[a-z][a-z0-9\-\_:\.]*$/i.test(name)) { + tinyMCEPopup.alert('advanced_dlg.anchor_invalid'); + return; + } + + tinyMCEPopup.restoreSelection(); + + if (this.action != 'update') + ed.selection.collapse(1); + + var aRule = ed.schema.getElementRule('a'); + if (!aRule || aRule.attributes.name) { + attribName = 'name'; + } else { + attribName = 'id'; + } + + elm = ed.dom.getParent(ed.selection.getNode(), 'A'); + if (elm) { + elm.setAttribute(attribName, name); + elm[attribName] = name; + ed.undoManager.add(); + } else { + // create with zero-sized nbsp so that in Webkit where anchor is on last line by itself caret cannot be placed after it + var attrs = {'class' : 'mceItemAnchor'}; + attrs[attribName] = name; + ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', attrs, '\uFEFF')); + ed.nodeChanged(); + } + + tinyMCEPopup.close(); + } +}; + +tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/charmap.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/charmap.js new file mode 100644 index 0000000..cbb4172 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/charmap.js @@ -0,0 +1,363 @@ +/** + * charmap.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +tinyMCEPopup.requireLangPack(); + +var charmap = [ + [' ', ' ', true, 'no-break space'], + ['&', '&', true, 'ampersand'], + ['"', '"', true, 'quotation mark'], +// finance + ['¢', '¢', true, 'cent sign'], + ['€', '€', true, 'euro sign'], + ['£', '£', true, 'pound sign'], + ['¥', '¥', true, 'yen sign'], +// signs + ['©', '©', true, 'copyright sign'], + ['®', '®', true, 'registered sign'], + ['™', '™', true, 'trade mark sign'], + ['‰', '‰', true, 'per mille sign'], + ['µ', 'µ', true, 'micro sign'], + ['·', '·', true, 'middle dot'], + ['•', '•', true, 'bullet'], + ['…', '…', true, 'three dot leader'], + ['′', '′', true, 'minutes / feet'], + ['″', '″', true, 'seconds / inches'], + ['§', '§', true, 'section sign'], + ['¶', '¶', true, 'paragraph sign'], + ['ß', 'ß', true, 'sharp s / ess-zed'], +// quotations + ['‹', '‹', true, 'single left-pointing angle quotation mark'], + ['›', '›', true, 'single right-pointing angle quotation mark'], + ['«', '«', true, 'left pointing guillemet'], + ['»', '»', true, 'right pointing guillemet'], + ['‘', '‘', true, 'left single quotation mark'], + ['’', '’', true, 'right single quotation mark'], + ['“', '“', true, 'left double quotation mark'], + ['”', '”', true, 'right double quotation mark'], + ['‚', '‚', true, 'single low-9 quotation mark'], + ['„', '„', true, 'double low-9 quotation mark'], + ['<', '<', true, 'less-than sign'], + ['>', '>', true, 'greater-than sign'], + ['≤', '≤', true, 'less-than or equal to'], + ['≥', '≥', true, 'greater-than or equal to'], + ['–', '–', true, 'en dash'], + ['—', '—', true, 'em dash'], + ['¯', '¯', true, 'macron'], + ['‾', '‾', true, 'overline'], + ['¤', '¤', true, 'currency sign'], + ['¦', '¦', true, 'broken bar'], + ['¨', '¨', true, 'diaeresis'], + ['¡', '¡', true, 'inverted exclamation mark'], + ['¿', '¿', true, 'turned question mark'], + ['ˆ', 'ˆ', true, 'circumflex accent'], + ['˜', '˜', true, 'small tilde'], + ['°', '°', true, 'degree sign'], + ['−', '−', true, 'minus sign'], + ['±', '±', true, 'plus-minus sign'], + ['÷', '÷', true, 'division sign'], + ['⁄', '⁄', true, 'fraction slash'], + ['×', '×', true, 'multiplication sign'], + ['¹', '¹', true, 'superscript one'], + ['²', '²', true, 'superscript two'], + ['³', '³', true, 'superscript three'], + ['¼', '¼', true, 'fraction one quarter'], + ['½', '½', true, 'fraction one half'], + ['¾', '¾', true, 'fraction three quarters'], +// math / logical + ['ƒ', 'ƒ', true, 'function / florin'], + ['∫', '∫', true, 'integral'], + ['∑', '∑', true, 'n-ary sumation'], + ['∞', '∞', true, 'infinity'], + ['√', '√', true, 'square root'], + ['∼', '∼', false,'similar to'], + ['≅', '≅', false,'approximately equal to'], + ['≈', '≈', true, 'almost equal to'], + ['≠', '≠', true, 'not equal to'], + ['≡', '≡', true, 'identical to'], + ['∈', '∈', false,'element of'], + ['∉', '∉', false,'not an element of'], + ['∋', '∋', false,'contains as member'], + ['∏', '∏', true, 'n-ary product'], + ['∧', '∧', false,'logical and'], + ['∨', '∨', false,'logical or'], + ['¬', '¬', true, 'not sign'], + ['∩', '∩', true, 'intersection'], + ['∪', '∪', false,'union'], + ['∂', '∂', true, 'partial differential'], + ['∀', '∀', false,'for all'], + ['∃', '∃', false,'there exists'], + ['∅', '∅', false,'diameter'], + ['∇', '∇', false,'backward difference'], + ['∗', '∗', false,'asterisk operator'], + ['∝', '∝', false,'proportional to'], + ['∠', '∠', false,'angle'], +// undefined + ['´', '´', true, 'acute accent'], + ['¸', '¸', true, 'cedilla'], + ['ª', 'ª', true, 'feminine ordinal indicator'], + ['º', 'º', true, 'masculine ordinal indicator'], + ['†', '†', true, 'dagger'], + ['‡', '‡', true, 'double dagger'], +// alphabetical special chars + ['À', 'À', true, 'A - grave'], + ['Á', 'Á', true, 'A - acute'], + ['Â', 'Â', true, 'A - circumflex'], + ['Ã', 'Ã', true, 'A - tilde'], + ['Ä', 'Ä', true, 'A - diaeresis'], + ['Å', 'Å', true, 'A - ring above'], + ['Æ', 'Æ', true, 'ligature AE'], + ['Ç', 'Ç', true, 'C - cedilla'], + ['È', 'È', true, 'E - grave'], + ['É', 'É', true, 'E - acute'], + ['Ê', 'Ê', true, 'E - circumflex'], + ['Ë', 'Ë', true, 'E - diaeresis'], + ['Ì', 'Ì', true, 'I - grave'], + ['Í', 'Í', true, 'I - acute'], + ['Î', 'Î', true, 'I - circumflex'], + ['Ï', 'Ï', true, 'I - diaeresis'], + ['Ð', 'Ð', true, 'ETH'], + ['Ñ', 'Ñ', true, 'N - tilde'], + ['Ò', 'Ò', true, 'O - grave'], + ['Ó', 'Ó', true, 'O - acute'], + ['Ô', 'Ô', true, 'O - circumflex'], + ['Õ', 'Õ', true, 'O - tilde'], + ['Ö', 'Ö', true, 'O - diaeresis'], + ['Ø', 'Ø', true, 'O - slash'], + ['Œ', 'Œ', true, 'ligature OE'], + ['Š', 'Š', true, 'S - caron'], + ['Ù', 'Ù', true, 'U - grave'], + ['Ú', 'Ú', true, 'U - acute'], + ['Û', 'Û', true, 'U - circumflex'], + ['Ü', 'Ü', true, 'U - diaeresis'], + ['Ý', 'Ý', true, 'Y - acute'], + ['Ÿ', 'Ÿ', true, 'Y - diaeresis'], + ['Þ', 'Þ', true, 'THORN'], + ['à', 'à', true, 'a - grave'], + ['á', 'á', true, 'a - acute'], + ['â', 'â', true, 'a - circumflex'], + ['ã', 'ã', true, 'a - tilde'], + ['ä', 'ä', true, 'a - diaeresis'], + ['å', 'å', true, 'a - ring above'], + ['æ', 'æ', true, 'ligature ae'], + ['ç', 'ç', true, 'c - cedilla'], + ['è', 'è', true, 'e - grave'], + ['é', 'é', true, 'e - acute'], + ['ê', 'ê', true, 'e - circumflex'], + ['ë', 'ë', true, 'e - diaeresis'], + ['ì', 'ì', true, 'i - grave'], + ['í', 'í', true, 'i - acute'], + ['î', 'î', true, 'i - circumflex'], + ['ï', 'ï', true, 'i - diaeresis'], + ['ð', 'ð', true, 'eth'], + ['ñ', 'ñ', true, 'n - tilde'], + ['ò', 'ò', true, 'o - grave'], + ['ó', 'ó', true, 'o - acute'], + ['ô', 'ô', true, 'o - circumflex'], + ['õ', 'õ', true, 'o - tilde'], + ['ö', 'ö', true, 'o - diaeresis'], + ['ø', 'ø', true, 'o slash'], + ['œ', 'œ', true, 'ligature oe'], + ['š', 'š', true, 's - caron'], + ['ù', 'ù', true, 'u - grave'], + ['ú', 'ú', true, 'u - acute'], + ['û', 'û', true, 'u - circumflex'], + ['ü', 'ü', true, 'u - diaeresis'], + ['ý', 'ý', true, 'y - acute'], + ['þ', 'þ', true, 'thorn'], + ['ÿ', 'ÿ', true, 'y - diaeresis'], + ['Α', 'Α', true, 'Alpha'], + ['Β', 'Β', true, 'Beta'], + ['Γ', 'Γ', true, 'Gamma'], + ['Δ', 'Δ', true, 'Delta'], + ['Ε', 'Ε', true, 'Epsilon'], + ['Ζ', 'Ζ', true, 'Zeta'], + ['Η', 'Η', true, 'Eta'], + ['Θ', 'Θ', true, 'Theta'], + ['Ι', 'Ι', true, 'Iota'], + ['Κ', 'Κ', true, 'Kappa'], + ['Λ', 'Λ', true, 'Lambda'], + ['Μ', 'Μ', true, 'Mu'], + ['Ν', 'Ν', true, 'Nu'], + ['Ξ', 'Ξ', true, 'Xi'], + ['Ο', 'Ο', true, 'Omicron'], + ['Π', 'Π', true, 'Pi'], + ['Ρ', 'Ρ', true, 'Rho'], + ['Σ', 'Σ', true, 'Sigma'], + ['Τ', 'Τ', true, 'Tau'], + ['Υ', 'Υ', true, 'Upsilon'], + ['Φ', 'Φ', true, 'Phi'], + ['Χ', 'Χ', true, 'Chi'], + ['Ψ', 'Ψ', true, 'Psi'], + ['Ω', 'Ω', true, 'Omega'], + ['α', 'α', true, 'alpha'], + ['β', 'β', true, 'beta'], + ['γ', 'γ', true, 'gamma'], + ['δ', 'δ', true, 'delta'], + ['ε', 'ε', true, 'epsilon'], + ['ζ', 'ζ', true, 'zeta'], + ['η', 'η', true, 'eta'], + ['θ', 'θ', true, 'theta'], + ['ι', 'ι', true, 'iota'], + ['κ', 'κ', true, 'kappa'], + ['λ', 'λ', true, 'lambda'], + ['μ', 'μ', true, 'mu'], + ['ν', 'ν', true, 'nu'], + ['ξ', 'ξ', true, 'xi'], + ['ο', 'ο', true, 'omicron'], + ['π', 'π', true, 'pi'], + ['ρ', 'ρ', true, 'rho'], + ['ς', 'ς', true, 'final sigma'], + ['σ', 'σ', true, 'sigma'], + ['τ', 'τ', true, 'tau'], + ['υ', 'υ', true, 'upsilon'], + ['φ', 'φ', true, 'phi'], + ['χ', 'χ', true, 'chi'], + ['ψ', 'ψ', true, 'psi'], + ['ω', 'ω', true, 'omega'], +// symbols + ['ℵ', 'ℵ', false,'alef symbol'], + ['ϖ', 'ϖ', false,'pi symbol'], + ['ℜ', 'ℜ', false,'real part symbol'], + ['ϑ','ϑ', false,'theta symbol'], + ['ϒ', 'ϒ', false,'upsilon - hook symbol'], + ['℘', '℘', false,'Weierstrass p'], + ['ℑ', 'ℑ', false,'imaginary part'], +// arrows + ['←', '←', true, 'leftwards arrow'], + ['↑', '↑', true, 'upwards arrow'], + ['→', '→', true, 'rightwards arrow'], + ['↓', '↓', true, 'downwards arrow'], + ['↔', '↔', true, 'left right arrow'], + ['↵', '↵', false,'carriage return'], + ['⇐', '⇐', false,'leftwards double arrow'], + ['⇑', '⇑', false,'upwards double arrow'], + ['⇒', '⇒', false,'rightwards double arrow'], + ['⇓', '⇓', false,'downwards double arrow'], + ['⇔', '⇔', false,'left right double arrow'], + ['∴', '∴', false,'therefore'], + ['⊂', '⊂', false,'subset of'], + ['⊃', '⊃', false,'superset of'], + ['⊄', '⊄', false,'not a subset of'], + ['⊆', '⊆', false,'subset of or equal to'], + ['⊇', '⊇', false,'superset of or equal to'], + ['⊕', '⊕', false,'circled plus'], + ['⊗', '⊗', false,'circled times'], + ['⊥', '⊥', false,'perpendicular'], + ['⋅', '⋅', false,'dot operator'], + ['⌈', '⌈', false,'left ceiling'], + ['⌉', '⌉', false,'right ceiling'], + ['⌊', '⌊', false,'left floor'], + ['⌋', '⌋', false,'right floor'], + ['⟨', '〈', false,'left-pointing angle bracket'], + ['⟩', '〉', false,'right-pointing angle bracket'], + ['◊', '◊', true, 'lozenge'], + ['♠', '♠', true, 'black spade suit'], + ['♣', '♣', true, 'black club suit'], + ['♥', '♥', true, 'black heart suit'], + ['♦', '♦', true, 'black diamond suit'], + [' ', ' ', false,'en space'], + [' ', ' ', false,'em space'], + [' ', ' ', false,'thin space'], + ['‌', '‌', false,'zero width non-joiner'], + ['‍', '‍', false,'zero width joiner'], + ['‎', '‎', false,'left-to-right mark'], + ['‏', '‏', false,'right-to-left mark'], + ['­', '­', false,'soft hyphen'] +]; + +tinyMCEPopup.onInit.add(function() { + tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML()); + addKeyboardNavigation(); +}); + +function addKeyboardNavigation(){ + var tableElm, cells, settings; + + cells = tinyMCEPopup.dom.select("a.charmaplink", "charmapgroup"); + + settings ={ + root: "charmapgroup", + items: cells + }; + cells[0].tabindex=0; + tinyMCEPopup.dom.addClass(cells[0], "mceFocus"); + if (tinymce.isGecko) { + cells[0].focus(); + } else { + setTimeout(function(){ + cells[0].focus(); + }, 100); + } + tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom); +} + +function renderCharMapHTML() { + var charsPerRow = 20, tdWidth=20, tdHeight=20, i; + var html = '
'+ + ''; + var cols=-1; + + for (i=0; i' + + '' + + charmap[i][1] + + ''; + if ((cols+1) % charsPerRow == 0) + html += ''; + } + } + + if (cols % charsPerRow > 0) { + var padd = charsPerRow - (cols % charsPerRow); + for (var i=0; i '; + } + + html += '
'; + html = html.replace(/<\/tr>/g, ''); + + return html; +} + +function insertChar(chr) { + tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';'); + + // Refocus in window + if (tinyMCEPopup.isWindow) + window.focus(); + + tinyMCEPopup.editor.focus(); + tinyMCEPopup.close(); +} + +function previewChar(codeA, codeB, codeN) { + var elmA = document.getElementById('codeA'); + var elmB = document.getElementById('codeB'); + var elmV = document.getElementById('codeV'); + var elmN = document.getElementById('codeN'); + + if (codeA=='#160;') { + elmV.innerHTML = '__'; + } else { + elmV.innerHTML = '&' + codeA; + } + + elmB.innerHTML = '&' + codeA; + elmA.innerHTML = '&' + codeB; + elmN.innerHTML = codeN; +} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/color_picker.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/color_picker.js new file mode 100644 index 0000000..cc891c1 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/color_picker.js @@ -0,0 +1,345 @@ +tinyMCEPopup.requireLangPack(); + +var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false; + +var colors = [ + "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033", + "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099", + "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff", + "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033", + "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399", + "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff", + "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333", + "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399", + "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff", + "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633", + "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699", + "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff", + "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633", + "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999", + "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff", + "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933", + "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999", + "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff", + "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33", + "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99", + "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff", + "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33", + "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99", + "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff", + "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33", + "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99", + "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff" +]; + +var named = { + '#F0F8FF':'Alice Blue','#FAEBD7':'Antique White','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige', + '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'Blanched Almond','#0000FF':'Blue','#8A2BE2':'Blue Violet','#A52A2A':'Brown', + '#DEB887':'Burly Wood','#5F9EA0':'Cadet Blue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'Cornflower Blue', + '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'Dark Blue','#008B8B':'Dark Cyan','#B8860B':'Dark Golden Rod', + '#A9A9A9':'Dark Gray','#A9A9A9':'Dark Grey','#006400':'Dark Green','#BDB76B':'Dark Khaki','#8B008B':'Dark Magenta','#556B2F':'Dark Olive Green', + '#FF8C00':'Darkorange','#9932CC':'Dark Orchid','#8B0000':'Dark Red','#E9967A':'Dark Salmon','#8FBC8F':'Dark Sea Green','#483D8B':'Dark Slate Blue', + '#2F4F4F':'Dark Slate Gray','#2F4F4F':'Dark Slate Grey','#00CED1':'Dark Turquoise','#9400D3':'Dark Violet','#FF1493':'Deep Pink','#00BFFF':'Deep Sky Blue', + '#696969':'Dim Gray','#696969':'Dim Grey','#1E90FF':'Dodger Blue','#B22222':'Fire Brick','#FFFAF0':'Floral White','#228B22':'Forest Green', + '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'Ghost White','#FFD700':'Gold','#DAA520':'Golden Rod','#808080':'Gray','#808080':'Grey', + '#008000':'Green','#ADFF2F':'Green Yellow','#F0FFF0':'Honey Dew','#FF69B4':'Hot Pink','#CD5C5C':'Indian Red','#4B0082':'Indigo','#FFFFF0':'Ivory', + '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'Lavender Blush','#7CFC00':'Lawn Green','#FFFACD':'Lemon Chiffon','#ADD8E6':'Light Blue', + '#F08080':'Light Coral','#E0FFFF':'Light Cyan','#FAFAD2':'Light Golden Rod Yellow','#D3D3D3':'Light Gray','#D3D3D3':'Light Grey','#90EE90':'Light Green', + '#FFB6C1':'Light Pink','#FFA07A':'Light Salmon','#20B2AA':'Light Sea Green','#87CEFA':'Light Sky Blue','#778899':'Light Slate Gray','#778899':'Light Slate Grey', + '#B0C4DE':'Light Steel Blue','#FFFFE0':'Light Yellow','#00FF00':'Lime','#32CD32':'Lime Green','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon', + '#66CDAA':'Medium Aqua Marine','#0000CD':'Medium Blue','#BA55D3':'Medium Orchid','#9370D8':'Medium Purple','#3CB371':'Medium Sea Green','#7B68EE':'Medium Slate Blue', + '#00FA9A':'Medium Spring Green','#48D1CC':'Medium Turquoise','#C71585':'Medium Violet Red','#191970':'Midnight Blue','#F5FFFA':'Mint Cream','#FFE4E1':'Misty Rose','#FFE4B5':'Moccasin', + '#FFDEAD':'Navajo White','#000080':'Navy','#FDF5E6':'Old Lace','#808000':'Olive','#6B8E23':'Olive Drab','#FFA500':'Orange','#FF4500':'Orange Red','#DA70D6':'Orchid', + '#EEE8AA':'Pale Golden Rod','#98FB98':'Pale Green','#AFEEEE':'Pale Turquoise','#D87093':'Pale Violet Red','#FFEFD5':'Papaya Whip','#FFDAB9':'Peach Puff', + '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'Powder Blue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'Rosy Brown','#4169E1':'Royal Blue', + '#8B4513':'Saddle Brown','#FA8072':'Salmon','#F4A460':'Sandy Brown','#2E8B57':'Sea Green','#FFF5EE':'Sea Shell','#A0522D':'Sienna','#C0C0C0':'Silver', + '#87CEEB':'Sky Blue','#6A5ACD':'Slate Blue','#708090':'Slate Gray','#708090':'Slate Grey','#FFFAFA':'Snow','#00FF7F':'Spring Green', + '#4682B4':'Steel Blue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet', + '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'White Smoke','#FFFF00':'Yellow','#9ACD32':'Yellow Green' +}; + +var namedLookup = {}; + +function init() { + var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color')), key, value; + + tinyMCEPopup.resizeToInnerSize(); + + generatePicker(); + generateWebColors(); + generateNamedColors(); + + if (inputColor) { + changeFinalColor(inputColor); + + col = convertHexToRGB(inputColor); + + if (col) + updateLight(col.r, col.g, col.b); + } + + for (key in named) { + value = named[key]; + namedLookup[value.replace(/\s+/, '').toLowerCase()] = key.replace(/#/, '').toLowerCase(); + } +} + +function toHexColor(color) { + var matches, red, green, blue, toInt = parseInt; + + function hex(value) { + value = parseInt(value).toString(16); + + return value.length > 1 ? value : '0' + value; // Padd with leading zero + }; + + color = tinymce.trim(color); + color = color.replace(/^[#]/, '').toLowerCase(); // remove leading '#' + color = namedLookup[color] || color; + + matches = /^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/.exec(color); + + if (matches) { + red = toInt(matches[1]); + green = toInt(matches[2]); + blue = toInt(matches[3]); + } else { + matches = /^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/.exec(color); + + if (matches) { + red = toInt(matches[1], 16); + green = toInt(matches[2], 16); + blue = toInt(matches[3], 16); + } else { + matches = /^([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(color); + + if (matches) { + red = toInt(matches[1] + matches[1], 16); + green = toInt(matches[2] + matches[2], 16); + blue = toInt(matches[3] + matches[3], 16); + } else { + return ''; + } + } + } + + return '#' + hex(red) + hex(green) + hex(blue); +} + +function insertAction() { + var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func'); + + var hexColor = toHexColor(color); + + if (hexColor === '') { + var text = tinyMCEPopup.editor.getLang('advanced_dlg.invalid_color_value'); + tinyMCEPopup.alert(text + ': ' + color); + } + else { + tinyMCEPopup.restoreSelection(); + + if (f) + f(hexColor); + + tinyMCEPopup.close(); + } +} + +function showColor(color, name) { + if (name) + document.getElementById("colorname").innerHTML = name; + + document.getElementById("preview").style.backgroundColor = color; + document.getElementById("color").value = color.toUpperCase(); +} + +function convertRGBToHex(col) { + var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi"); + + if (!col) + return col; + + var rgb = col.replace(re, "$1,$2,$3").split(','); + if (rgb.length == 3) { + r = parseInt(rgb[0]).toString(16); + g = parseInt(rgb[1]).toString(16); + b = parseInt(rgb[2]).toString(16); + + r = r.length == 1 ? '0' + r : r; + g = g.length == 1 ? '0' + g : g; + b = b.length == 1 ? '0' + b : b; + + return "#" + r + g + b; + } + + return col; +} + +function convertHexToRGB(col) { + if (col.indexOf('#') != -1) { + col = col.replace(new RegExp('[^0-9A-F]', 'gi'), ''); + + r = parseInt(col.substring(0, 2), 16); + g = parseInt(col.substring(2, 4), 16); + b = parseInt(col.substring(4, 6), 16); + + return {r : r, g : g, b : b}; + } + + return null; +} + +function generatePicker() { + var el = document.getElementById('light'), h = '', i; + + for (i = 0; i < detail; i++){ + h += '
'; + } + + el.innerHTML = h; +} + +function generateWebColors() { + var el = document.getElementById('webcolors'), h = '', i; + + if (el.className == 'generated') + return; + + // TODO: VoiceOver doesn't seem to support legend as a label referenced by labelledby. + h += '
' + + ''; + + for (i=0; i' + + ''; + if (tinyMCEPopup.editor.forcedHighContrastMode) { + h += ''; + } + h += ''; + h += ''; + if ((i+1) % 18 == 0) + h += ''; + } + + h += '
'; + + el.innerHTML = h; + el.className = 'generated'; + + paintCanvas(el); + enableKeyboardNavigation(el.firstChild); +} + +function paintCanvas(el) { + tinyMCEPopup.getWin().tinymce.each(tinyMCEPopup.dom.select('canvas.mceColorSwatch', el), function(canvas) { + var context; + if (canvas.getContext && (context = canvas.getContext("2d"))) { + context.fillStyle = canvas.getAttribute('data-color'); + context.fillRect(0, 0, 10, 10); + } + }); +} +function generateNamedColors() { + var el = document.getElementById('namedcolors'), h = '', n, v, i = 0; + + if (el.className == 'generated') + return; + + for (n in named) { + v = named[n]; + h += ''; + if (tinyMCEPopup.editor.forcedHighContrastMode) { + h += ''; + } + h += ''; + h += ''; + i++; + } + + el.innerHTML = h; + el.className = 'generated'; + + paintCanvas(el); + enableKeyboardNavigation(el); +} + +function enableKeyboardNavigation(el) { + tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', { + root: el, + items: tinyMCEPopup.dom.select('a', el) + }, tinyMCEPopup.dom); +} + +function dechex(n) { + return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16); +} + +function computeColor(e) { + var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB, pos = tinyMCEPopup.dom.getPos(e.target); + + x = e.offsetX ? e.offsetX : (e.target ? e.clientX - pos.x : 0); + y = e.offsetY ? e.offsetY : (e.target ? e.clientY - pos.y : 0); + + partWidth = document.getElementById('colors').width / 6; + partDetail = detail / 2; + imHeight = document.getElementById('colors').height; + + r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255; + g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255 + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth); + b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth); + + coef = (imHeight - y) / imHeight; + r = 128 + (r - 128) * coef; + g = 128 + (g - 128) * coef; + b = 128 + (b - 128) * coef; + + changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b)); + updateLight(r, g, b); +} + +function updateLight(r, g, b) { + var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color; + + for (i=0; i=0) && (i'); + }, + + init : function() { + var f = document.forms[0], ed = tinyMCEPopup.editor; + + // Setup browse button + document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); + if (isVisible('srcbrowser')) + document.getElementById('src').style.width = '180px'; + + e = ed.selection.getNode(); + + this.fillFileList('image_list', tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList')); + + if (e.nodeName == 'IMG') { + f.src.value = ed.dom.getAttrib(e, 'src'); + f.alt.value = ed.dom.getAttrib(e, 'alt'); + f.border.value = this.getAttrib(e, 'border'); + f.vspace.value = this.getAttrib(e, 'vspace'); + f.hspace.value = this.getAttrib(e, 'hspace'); + f.width.value = ed.dom.getAttrib(e, 'width'); + f.height.value = ed.dom.getAttrib(e, 'height'); + f.insert.value = ed.getLang('update'); + this.styleVal = ed.dom.getAttrib(e, 'style'); + selectByValue(f, 'image_list', f.src.value); + selectByValue(f, 'align', this.getAttrib(e, 'align')); + this.updateStyle(); + } + }, + + fillFileList : function(id, l) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + l = typeof(l) === 'function' ? l() : window[l]; + + if (l && l.length > 0) { + lst.options[lst.options.length] = new Option('', ''); + + tinymce.each(l, function(o) { + lst.options[lst.options.length] = new Option(o[0], o[1]); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + update : function() { + var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el; + + tinyMCEPopup.restoreSelection(); + + if (f.src.value === '') { + if (ed.selection.getNode().nodeName == 'IMG') { + ed.dom.remove(ed.selection.getNode()); + ed.execCommand('mceRepaint'); + } + + tinyMCEPopup.close(); + return; + } + + if (!ed.settings.inline_styles) { + args = tinymce.extend(args, { + vspace : nl.vspace.value, + hspace : nl.hspace.value, + border : nl.border.value, + align : getSelectValue(f, 'align') + }); + } else + args.style = this.styleVal; + + tinymce.extend(args, { + src : f.src.value.replace(/ /g, '%20'), + alt : f.alt.value, + width : f.width.value, + height : f.height.value + }); + + el = ed.selection.getNode(); + + if (el && el.nodeName == 'IMG') { + ed.dom.setAttribs(el, args); + tinyMCEPopup.editor.execCommand('mceRepaint'); + tinyMCEPopup.editor.focus(); + } else { + tinymce.each(args, function(value, name) { + if (value === "") { + delete args[name]; + } + }); + + ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1}); + ed.undoManager.add(); + } + + tinyMCEPopup.close(); + }, + + updateStyle : function() { + var dom = tinyMCEPopup.dom, st = {}, v, f = document.forms[0]; + + if (tinyMCEPopup.editor.settings.inline_styles) { + tinymce.each(tinyMCEPopup.dom.parseStyle(this.styleVal), function(value, key) { + st[key] = value; + }); + + // Handle align + v = getSelectValue(f, 'align'); + if (v) { + if (v == 'left' || v == 'right') { + st['float'] = v; + delete st['vertical-align']; + } else { + st['vertical-align'] = v; + delete st['float']; + } + } else { + delete st['float']; + delete st['vertical-align']; + } + + // Handle border + v = f.border.value; + if (v || v == '0') { + if (v == '0') + st['border'] = '0'; + else + st['border'] = v + 'px solid black'; + } else + delete st['border']; + + // Handle hspace + v = f.hspace.value; + if (v) { + delete st['margin']; + st['margin-left'] = v + 'px'; + st['margin-right'] = v + 'px'; + } else { + delete st['margin-left']; + delete st['margin-right']; + } + + // Handle vspace + v = f.vspace.value; + if (v) { + delete st['margin']; + st['margin-top'] = v + 'px'; + st['margin-bottom'] = v + 'px'; + } else { + delete st['margin-top']; + delete st['margin-bottom']; + } + + // Merge + st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img'); + this.styleVal = dom.serializeStyle(st, 'img'); + } + }, + + getAttrib : function(e, at) { + var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2; + + if (ed.settings.inline_styles) { + switch (at) { + case 'align': + if (v = dom.getStyle(e, 'float')) + return v; + + if (v = dom.getStyle(e, 'vertical-align')) + return v; + + break; + + case 'hspace': + v = dom.getStyle(e, 'margin-left') + v2 = dom.getStyle(e, 'margin-right'); + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'vspace': + v = dom.getStyle(e, 'margin-top') + v2 = dom.getStyle(e, 'margin-bottom'); + if (v && v == v2) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + + case 'border': + v = 0; + + tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) { + sv = dom.getStyle(e, 'border-' + sv + '-width'); + + // False or not the same as prev + if (!sv || (sv != v && v !== 0)) { + v = 0; + return false; + } + + if (sv) + v = sv; + }); + + if (v) + return parseInt(v.replace(/[^0-9]/g, '')); + + break; + } + } + + if (v = dom.getAttrib(e, at)) + return v; + + return ''; + }, + + resetImageData : function() { + var f = document.forms[0]; + + f.width.value = f.height.value = ""; + }, + + updateImageData : function() { + var f = document.forms[0], t = ImageDialog; + + if (f.width.value == "") + f.width.value = t.preloadImg.width; + + if (f.height.value == "") + f.height.value = t.preloadImg.height; + }, + + getImageData : function() { + var f = document.forms[0]; + + this.preloadImg = new Image(); + this.preloadImg.onload = this.updateImageData; + this.preloadImg.onerror = this.resetImageData; + this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value); + } +}; + +ImageDialog.preInit(); +tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/link.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/link.js new file mode 100644 index 0000000..b08b2ba --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/link.js @@ -0,0 +1,159 @@ +tinyMCEPopup.requireLangPack(); + +var LinkDialog = { + preInit : function() { + var url; + + if (url = tinyMCEPopup.getParam("external_link_list_url")) + document.write(''); + }, + + init : function() { + var f = document.forms[0], ed = tinyMCEPopup.editor; + + // Setup browse button + document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link'); + if (isVisible('hrefbrowser')) + document.getElementById('href').style.width = '180px'; + + this.fillClassList('class_list'); + this.fillFileList('link_list', 'tinyMCELinkList'); + this.fillTargetList('target_list'); + + if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) { + f.href.value = ed.dom.getAttrib(e, 'href'); + f.linktitle.value = ed.dom.getAttrib(e, 'title'); + f.insert.value = ed.getLang('update'); + selectByValue(f, 'link_list', f.href.value); + selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target')); + selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class')); + } + }, + + update : function() { + var f = document.forms[0], ed = tinyMCEPopup.editor, e, b, href = f.href.value.replace(/ /g, '%20'); + + tinyMCEPopup.restoreSelection(); + e = ed.dom.getParent(ed.selection.getNode(), 'A'); + + // Remove element if there is no href + if (!f.href.value) { + if (e) { + b = ed.selection.getBookmark(); + ed.dom.remove(e, 1); + ed.selection.moveToBookmark(b); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + return; + } + } + + // Create new anchor elements + if (e == null) { + ed.getDoc().execCommand("unlink", false, null); + tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1}); + + tinymce.each(ed.dom.select("a"), function(n) { + if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') { + e = n; + + ed.dom.setAttribs(e, { + href : href, + title : f.linktitle.value, + target : f.target_list ? getSelectValue(f, "target_list") : null, + 'class' : f.class_list ? getSelectValue(f, "class_list") : null + }); + } + }); + } else { + ed.dom.setAttribs(e, { + href : href, + title : f.linktitle.value + }); + + if (f.target_list) { + ed.dom.setAttrib(e, 'target', getSelectValue(f, "target_list")); + } + + if (f.class_list) { + ed.dom.setAttrib(e, 'class', getSelectValue(f, "class_list")); + } + } + + // Don't move caret if selection was image + if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') { + ed.focus(); + ed.selection.select(e); + ed.selection.collapse(0); + tinyMCEPopup.storeSelection(); + } + + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + }, + + checkPrefix : function(n) { + if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email'))) + n.value = 'mailto:' + n.value; + + if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external'))) + n.value = 'http://' + n.value; + }, + + fillFileList : function(id, l) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + l = window[l]; + + if (l && l.length > 0) { + lst.options[lst.options.length] = new Option('', ''); + + tinymce.each(l, function(o) { + lst.options[lst.options.length] = new Option(o[0], o[1]); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + fillClassList : function(id) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; + + if (v = tinyMCEPopup.getParam('theme_advanced_styles')) { + cl = []; + + tinymce.each(v.split(';'), function(v) { + var p = v.split('='); + + cl.push({'title' : p[0], 'class' : p[1]}); + }); + } else + cl = tinyMCEPopup.editor.dom.getClasses(); + + if (cl.length > 0) { + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); + + tinymce.each(cl, function(o) { + lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']); + }); + } else + dom.remove(dom.getParent(id, 'tr')); + }, + + fillTargetList : function(id) { + var dom = tinyMCEPopup.dom, lst = dom.get(id), v; + + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self'); + lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank'); + + if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) { + tinymce.each(v.split(','), function(v) { + v = v.split('='); + lst.options[lst.options.length] = new Option(v[0], v[1]); + }); + } + } +}; + +LinkDialog.preInit(); +tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/source_editor.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/source_editor.js new file mode 100644 index 0000000..d417937 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/js/source_editor.js @@ -0,0 +1,78 @@ +tinyMCEPopup.requireLangPack(); +tinyMCEPopup.onInit.add(onLoadInit); + +function saveContent() { + tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true}); + tinyMCEPopup.close(); +} + +function onLoadInit() { + tinyMCEPopup.resizeToInnerSize(); + + // Remove Gecko spellchecking + if (tinymce.isGecko) + document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck"); + + document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true}); + + if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) { + turnWrapOn(); + document.getElementById('wraped').checked = true; + } + + resizeInputs(); +} + +function setWrap(val) { + var v, n, s = document.getElementById('htmlSource'); + + s.wrap = val; + + if (!tinymce.isIE) { + v = s.value; + n = s.cloneNode(false); + n.setAttribute("wrap", val); + s.parentNode.replaceChild(n, s); + n.value = v; + } +} + +function setWhiteSpaceCss(value) { + var el = document.getElementById('htmlSource'); + tinymce.DOM.setStyle(el, 'white-space', value); +} + +function turnWrapOff() { + if (tinymce.isWebKit) { + setWhiteSpaceCss('pre'); + } else { + setWrap('off'); + } +} + +function turnWrapOn() { + if (tinymce.isWebKit) { + setWhiteSpaceCss('pre-wrap'); + } else { + setWrap('soft'); + } +} + +function toggleWordWrap(elm) { + if (elm.checked) { + turnWrapOn(); + } else { + turnWrapOff(); + } +} + +function resizeInputs() { + var vp = tinyMCEPopup.dom.getViewPort(window), el; + + el = document.getElementById('htmlSource'); + + if (el) { + el.style.width = (vp.w - 20) + 'px'; + el.style.height = (vp.h - 65) + 'px'; + } +} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/de.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/de.js new file mode 100644 index 0000000..4bd5419 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/de.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.advanced',{"underline_desc":"Unterstrichen (Strg+U)","italic_desc":"Kursiv (Strg+I)","bold_desc":"Fett (Strg+B)",dd:"Definitionsbeschreibung",dt:"Definitionsbegriff",samp:"Beispiel",code:"Code",blockquote:"Zitatblock",h6:"\u00dcberschrift 6",h5:"\u00dcberschrift 5",h4:"\u00dcberschrift 4",h3:"\u00dcberschrift 3",h2:"\u00dcberschrift 2",h1:"\u00dcberschrift 1",pre:"Rohdaten",address:"Adresse",div:"Zusammenh\u00e4ngender Bereich",paragraph:"Absatz",block:"Vorlage",fontdefault:"Schriftart","font_size":"Schriftgr\u00f6\u00dfe","style_select":"Format","anchor_delta_width":"13","more_colors":"Weitere Farben","toolbar_focus":"Zur Werkzeugleiste springen: Alt+Q; Zum Editor springen: Alt-Z; Zum Elementpfad springen: Alt-X",newdocument:"Soll wirklich der ganze Inhalt gel\u00f6scht werden?",path:"Pfad","clipboard_msg":"Kopieren, Ausschneiden und Einf\u00fcgen sind im Mozilla Firefox nicht m\u00f6glich. Mehr \u00fcber dieses Problem erfahren?","blockquote_desc":"Zitatblock","help_desc":"Hilfe","newdocument_desc":"Neues Dokument","image_props_desc":"Bildeigenschaften","paste_desc":"Einf\u00fcgen","copy_desc":"Kopieren","cut_desc":"Ausschneiden","anchor_desc":"Anker einf\u00fcgen/ver\u00e4ndern","visualaid_desc":"Hilfslinien und unsichtbare Elemente ein-/ausblenden","charmap_desc":"Sonderzeichen einf\u00fcgen","backcolor_desc":"Hintergrundfarbe","forecolor_desc":"Textfarbe","custom1_desc":"Benutzerdefinierte Beschreibung","removeformat_desc":"Formatierungen zur\u00fccksetzen","hr_desc":"Trennlinie einf\u00fcgen","sup_desc":"Hochgestellt","sub_desc":"Tiefgestellt","code_desc":"HTML-Quellcode bearbeiten","cleanup_desc":"Quellcode aufr\u00e4umen","image_desc":"Bild einf\u00fcgen/ver\u00e4ndern","unlink_desc":"Link entfernen","link_desc":"Link einf\u00fcgen/ver\u00e4ndern","redo_desc":"Wiederholen (Strg+Y)","undo_desc":"R\u00fcckg\u00e4ngig (Strg+Z)","indent_desc":"Einr\u00fccken","outdent_desc":"Ausr\u00fccken","numlist_desc":"Sortierte Liste","bullist_desc":"Unsortierte Liste","justifyfull_desc":"Blocksatz","justifyright_desc":"Rechtsb\u00fcndig","justifycenter_desc":"Zentriert","justifyleft_desc":"Linksb\u00fcndig","striketrough_desc":"Durchgestrichen","help_shortcut":"F\u00fcr die Toolbar ALT-F10 dr\u00fccken. F\u00fcr die Hilfe ALT-0 dr\u00fccken","rich_text_area":"Rich Text Feld","shortcuts_desc":"Eingabehilfe",toolbar:"Pfeiltasten verwenden um Funktionen auszuw\u00e4hlen","anchor_delta_height":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/de_dlg.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/de_dlg.js new file mode 100644 index 0000000..0ee5af9 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/de_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.advanced_dlg',{"link_list":"Linkliste","link_is_external":"Diese Adresse scheint ein externer Link zu sein. Soll das dazu ben\u00f6tigte \"http://\" vorangestellt werden?","link_is_email":"Diese Adresse scheint eine E-Mail Adresse zu sein. Soll das dazu ben\u00f6tigte \"mailto:\" vorangestellt werden?","link_titlefield":"Titel","link_target_blank":"In neuem Fenster \u00f6ffnen","link_target_same":"Im selben Fenster \u00f6ffnen","link_target":"Fenster","link_url":"Adresse","link_title":"Link einf\u00fcgen/ver\u00e4ndern","image_align_right":"Rechts","image_align_left":"Links","image_align_textbottom":"Unten im Text","image_align_texttop":"Oben im Text","image_align_bottom":"Unten","image_align_middle":"Mittig","image_align_top":"Oben","image_align_baseline":"Zeile","image_align":"Ausrichtung","image_hspace":"Horizontaler Abstand","image_vspace":"Vertikaler Abstand","image_dimensions":"Abmessungen","image_alt":"Alternativtext","image_list":"Bilderliste","image_border":"Rahmen","image_src":"Adresse","image_title":"Bild einf\u00fcgen/ver\u00e4ndern","charmap_title":"Sonderzeichen","colorpicker_name":"Name:","colorpicker_color":"Farbe:","colorpicker_named_title":"Benannte Farben","colorpicker_named_tab":"Benannte Farben","colorpicker_palette_title":"Farbpalette","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Farbwahl","colorpicker_picker_tab":"Farbwahl","colorpicker_title":"Farbe","code_wordwrap":"Automatischer Zeilenumbruch","code_title":"HTML-Quellcode bearbeiten","anchor_name":"Name des Ankers","anchor_title":"Anker einf\u00fcgen/ver\u00e4ndern","about_loaded":"Geladene Plugins","about_version":"Version","about_author":"Urheber","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Lizenzbedingungen","about_help":"Hilfe","about_general":"\u00dcber","about_title":"\u00dcber TinyMCE","charmap_usage":"Navigation mit linken und rechten Pfeiltasten.","anchor_invalid":"Bitte einen g\u00fcltigen Namen f\u00fcr den Anker eingeben!","accessibility_help":"Eingabehilfe","accessibility_usage_title":"Allgemeine Verwendung","invalid_color_value":"Ung\u00fcltige Farbangabe"}); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/en.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/en.js new file mode 100644 index 0000000..6e58481 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/en.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition Description",dt:"Definition Term ",samp:"Code Sample",code:"Code",blockquote:"Block Quote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"DIV",paragraph:"Paragraph",block:"Format",fontdefault:"Font Family","font_size":"Font Size","style_select":"Styles","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"More Colors...","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Block Quote","help_desc":"Help","newdocument_desc":"New Document","image_props_desc":"Image Properties","paste_desc":"Paste (Ctrl+V)","copy_desc":"Copy (Ctrl+C)","cut_desc":"Cut (Ctrl+X)","anchor_desc":"Insert/Edit Anchor","visualaid_desc":"show/Hide Guidelines/Invisible Elements","charmap_desc":"Insert Special Character","backcolor_desc":"Select Background Color","forecolor_desc":"Select Text Color","custom1_desc":"Your Custom Description Here","removeformat_desc":"Remove Formatting","hr_desc":"Insert Horizontal Line","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup Messy Code","image_desc":"Insert/Edit Image","unlink_desc":"Unlink","link_desc":"Insert/Edit Link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Increase Indent","outdent_desc":"Decrease Indent","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","justifyfull_desc":"Align Full","justifyright_desc":"Align Right","justifycenter_desc":"Align Center","justifyleft_desc":"Align Left","striketrough_desc":"Strikethrough","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js new file mode 100644 index 0000000..50cd87e --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.advanced_dlg', {"link_list":"Link List","link_is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open Link in a New Window","link_target_same":"Open Link in the Same Window","link_target":"Target","link_url":"Link URL","link_title":"Insert/Edit Link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text Bottom","image_align_texttop":"Text Top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal Space","image_vspace":"Vertical Space","image_dimensions":"Dimensions","image_alt":"Image Description","image_list":"Image List","image_border":"Border","image_src":"Image URL","image_title":"Insert/Edit Image","charmap_title":"Select Special Character", "charmap_usage":"Use left and right arrows to navigate.","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named Colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette Colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color Picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a Color","code_wordwrap":"Word Wrap","code_title":"HTML Source Editor","anchor_name":"Anchor Name","anchor_title":"Insert/Edit Anchor","about_loaded":"Loaded Plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","invalid_color_value":"Invalid color value","":""}); diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/link.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/link.htm new file mode 100644 index 0000000..4a2459f --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/link.htm @@ -0,0 +1,57 @@ + + + + {#advanced_dlg.link_title} + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+
+
+ +
+ + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/shortcuts.htm b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/shortcuts.htm new file mode 100644 index 0000000..436091f --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/shortcuts.htm @@ -0,0 +1,47 @@ + + + + {#advanced_dlg.accessibility_help} + + + + +

{#advanced_dlg.accessibility_usage_title}

+

Toolbars

+

Press ALT-F10 to move focus to the toolbars. Navigate through the buttons using the arrow keys. + Press enter to activate a button and return focus to the editor. + Press escape to return focus to the editor without performing any actions.

+ +

Status Bar

+

To access the editor status bar, press ALT-F11. Use the left and right arrow keys to navigate between elements in the path. + Press enter or space to select an element. Press escape to return focus to the editor without changing the selection.

+ +

Context Menu

+

Press shift-F10 to activate the context menu. Use the up and down arrow keys to move between menu items. To open sub-menus press the right arrow key. + To close submenus press the left arrow key. Press escape to close the context menu.

+ +

Keyboard Shortcuts

+ + + + + + + + + + + + + + + + + + + + + +
KeystrokeFunction
Control-BBold
Control-IItalic
Control-ZUndo
Control-YRedo
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/content.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/content.css new file mode 100644 index 0000000..4d63ca9 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/content.css @@ -0,0 +1,50 @@ +body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} +body {background:#FFF;} +body.mceForceColors {background:#FFF; color:#000;} +body.mceBrowserDefaults {background:transparent; color:inherit; font-size:inherit; font-family:inherit;} +h1 {font-size: 2em} +h2 {font-size: 1.5em} +h3 {font-size: 1.17em} +h4 {font-size: 1em} +h5 {font-size: .83em} +h6 {font-size: .75em} +.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} +a.mceItemAnchor {display:inline-block; -webkit-user-select:all; -webkit-user-modify:read-only; -moz-user-select:all; -moz-user-modify:read-only; width:11px !important; height:11px !important; background:url(img/items.gif) no-repeat center center} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table, img, hr, .mceItemAnchor {cursor:default} +table td, table th {cursor:text} +ins {border-bottom:1px solid green; text-decoration: none; color:green} +del {color:red; text-decoration:line-through} +cite {border-bottom:1px dashed blue} +acronym {border-bottom:1px dotted #CCC; cursor:help} +abbr {border-bottom:1px dashed #CCC; cursor:help} + +/* IE */ +* html body { +scrollbar-3dlight-color:#F0F0EE; +scrollbar-arrow-color:#676662; +scrollbar-base-color:#F0F0EE; +scrollbar-darkshadow-color:#DDD; +scrollbar-face-color:#E0E0DD; +scrollbar-highlight-color:#F0F0EE; +scrollbar-shadow-color:#F0F0EE; +scrollbar-track-color:#F5F5F5; +} + +img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} +font[face=mceinline] {font-family:inherit !important} +*[contentEditable]:focus {outline:0} + +.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc} +.mceItemShockWave {background-image:url(../../img/shockwave.gif)} +.mceItemFlash {background-image:url(../../img/flash.gif)} +.mceItemQuickTime {background-image:url(../../img/quicktime.gif)} +.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)} +.mceItemRealMedia {background-image:url(../../img/realmedia.gif)} +.mceItemVideo {background-image:url(../../img/video.gif)} +.mceItemAudio {background-image:url(../../img/video.gif)} +.mceItemEmbeddedAudio {background-image:url(../../img/video.gif)} +.mceItemIframe {background-image:url(../../img/iframe.gif)} +.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css new file mode 100644 index 0000000..8950ba3 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css @@ -0,0 +1,118 @@ +/* Generic */ +body { +font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; +scrollbar-3dlight-color:#F0F0EE; +scrollbar-arrow-color:#676662; +scrollbar-base-color:#F0F0EE; +scrollbar-darkshadow-color:#DDDDDD; +scrollbar-face-color:#E0E0DD; +scrollbar-highlight-color:#F0F0EE; +scrollbar-shadow-color:#F0F0EE; +scrollbar-track-color:#F5F5F5; +background:#F0F0EE; +padding:0; +margin:8px 8px 0 8px; +} + +html {background:#F0F0EE;} +td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +textarea {resize:none;outline:none;} +a:link, a:visited {color:black;} +a:hover {color:#2B6FB6;} +.nowrap {white-space: nowrap} + +/* Forms */ +fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +label.msg {display:none;} +label.invalid {color:#EE0000; display:inline;} +input.invalid {border:1px solid #EE0000;} +input {background:#FFF; border:1px solid #CCC;} +input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +input, select, textarea {border:1px solid #808080;} +input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} +input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} +.input_noborder {border:0;} + +/* Buttons */ +#insert, #cancel, input.button, .updateButton { +border:0; margin:0; padding:0; +font-weight:bold; +width:94px; height:26px; +background:url(img/buttons.png) 0 -26px; +cursor:pointer; +padding-bottom:2px; +float:left; +} + +#insert {background:url(img/buttons.png) 0 -52px} +#cancel {background:url(img/buttons.png) 0 0; float:right} + +/* Browse */ +a.pickcolor, a.browse {text-decoration:none} +a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} +.mceOldBoxModel a.browse span {width:22px; height:20px;} +a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} +a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} +a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;} +.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} +a.pickcolor:hover span {background-color:#B2BBD0;} +a.pickcolor:hover span.disabled {} + +/* Charmap */ +table.charmap {border:1px solid #AAA; text-align:center} +td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} +#charmap a {display:block; color:#000; text-decoration:none; border:0} +#charmap a:hover {background:#CCC;color:#2B6FB6} +#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} +#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} + +/* Source */ +.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} +.mceActionPanel {margin-top:5px;} + +/* Tabs classes */ +.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;} +.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;} +.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;} +.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} + +/* Panels */ +.panel_wrapper div.panel {display:none;} +.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} +.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} + +/* Columns */ +.column {float:left;} +.properties {width:100%;} +.properties .column1 {} +.properties .column2 {text-align:left;} + +/* Titles */ +h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} +h3 {font-size:14px;} +.title {font-size:12px; font-weight:bold; color:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} +#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} +#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap} +#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} +#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} +#colorpicker #light div {overflow:hidden;} +#colorpicker .panel_wrapper div.current {height:175px;} +#colorpicker #namedcolors {width:150px;} +#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} +#colorpicker #colornamecontainer {margin-top:5px;} +#colorpicker #picker_panel fieldset {margin:auto;width:325px;} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png new file mode 100644 index 0000000000000000000000000000000000000000..1e53560e0aa7bb1b9a0373fc2f330acab7d1d51f GIT binary patch literal 3133 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 XtZb~ra4Vor00000NkvXXu0mjf(5kL( literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif new file mode 100644 index 0000000000000000000000000000000000000000..d2f93671ca3090b277e16a67b1aa6cfb6ac4915f GIT binary patch literal 64 zcmZ?wbhEHbjEB<5wG8q|kKzxu41Cw-5|H{*E`4`XOxxoD9Y}F^Z SLTQbO*E^TJI;F+RU=09Vu@yA{ literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif new file mode 100644 index 0000000000000000000000000000000000000000..adfdddccd7cac62a17d68873fa53c248bff8351a GIT binary patch literal 70 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 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/ui.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/ui.css new file mode 100644 index 0000000..2e8c658 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/ui.css @@ -0,0 +1,219 @@ +/* Reset */ +.defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left} +.defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000} +.defaultSkin table td {vertical-align:middle} + +/* Containers */ +.defaultSkin table {direction:ltr;background:transparent} +.defaultSkin iframe {display:block;} +.defaultSkin .mceToolbar {height:26px} +.defaultSkin .mceLeft {text-align:left} +.defaultSkin .mceRight {text-align:right} + +/* External */ +.defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;} +.defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;} +.defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0} + +/* Layout */ +.defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC} +.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC} +.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC} +.defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;} +.defaultSkin td.mceToolbar {background:#F0F0EE; padding-top:1px; vertical-align:top} +.defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC} +.defaultSkin .mceStatusbar {background:#F0F0EE; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px} +.defaultSkin .mceStatusbar div {float:left; margin:2px} +.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0} +.defaultSkin .mceStatusbar a:hover {text-decoration:underline} +.defaultSkin table.mceToolbar {margin-left:3px} +.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px} +.defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} +.defaultSkin td.mceCenter {text-align:center;} +.defaultSkin td.mceCenter table {margin:0 auto; text-align:left;} +.defaultSkin td.mceRight table {margin:0 0 0 auto;} + +/* Button */ +.defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px} +.defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0} +.defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0} +.defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.defaultSkin .mceButtonLabeled {width:auto} +.defaultSkin .mceButtonLabeled span.mceIcon {float:left} +.defaultSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica} +.defaultSkin .mceButtonDisabled .mceButtonLabel {color:#888} + +/* Separator */ +.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px} + +/* ListBox */ +.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block} +.defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden} +.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;} +.defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF} +.defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0} +.defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;} +.defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden} +.defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px} +.defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;} +.defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;} + +/* SplitButton */ +.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr} +.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block} +.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;} +.defaultSkin .mceSplitButton span.mceAction {width:20px; background-image:url(../../img/icons.gif);} +.defaultSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0; border:1px solid #F0F0EE;} +.defaultSkin .mceSplitButton span.mceOpen {display:none} +.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0} +.defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {background-color:#B2BBD0; border:1px solid #0A246A;} +.defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0} +.defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;} + +/* ColorSplitButton */ +.defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray} +.defaultSkin .mceColorSplitMenu td {padding:2px} +.defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080} +.defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} +.defaultSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF} +.defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2} +.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A} +.defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a} +.defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px} + +/* Menu */ +.defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8; direction:ltr} +.defaultSkin .mceNoIcons span.mceIcon {width:0;} +.defaultSkin .mceNoIcons a .mceText {padding-left:10px} +.defaultSkin .mceMenu table {background:#FFF} +.defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block} +.defaultSkin .mceMenu td {height:20px} +.defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0} +.defaultSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block} +.defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px} +.defaultSkin .mceMenu pre.mceText {font-family:Monospace} +.defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;} +.defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3} +.defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px} +.defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD} +.defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px} +.defaultSkin .mceMenuItemDisabled .mceText {color:#888} +.defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)} +.defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center} +.defaultSkin .mceMenu span.mceMenuLine {display:none} +.defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;} +.defaultSkin .mceMenuItem td, .defaultSkin .mceMenuItem th {line-height: normal} + +/* Progress,Resize */ +.defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF} +.defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} + +/* Rtl */ +.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0} +.mceRtl .mceMenuItem .mceText {text-align: right} + +/* Formats */ +.defaultSkin .mce_formatPreview a {font-size:10px} +.defaultSkin .mce_p span.mceText {} +.defaultSkin .mce_address span.mceText {font-style:italic} +.defaultSkin .mce_pre span.mceText {font-family:monospace} +.defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} +.defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} +.defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} +.defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} +.defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} +.defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} + +/* Theme */ +.defaultSkin span.mce_bold {background-position:0 0} +.defaultSkin span.mce_italic {background-position:-60px 0} +.defaultSkin span.mce_underline {background-position:-140px 0} +.defaultSkin span.mce_strikethrough {background-position:-120px 0} +.defaultSkin span.mce_undo {background-position:-160px 0} +.defaultSkin span.mce_redo {background-position:-100px 0} +.defaultSkin span.mce_cleanup {background-position:-40px 0} +.defaultSkin span.mce_bullist {background-position:-20px 0} +.defaultSkin span.mce_numlist {background-position:-80px 0} +.defaultSkin span.mce_justifyleft {background-position:-460px 0} +.defaultSkin span.mce_justifyright {background-position:-480px 0} +.defaultSkin span.mce_justifycenter {background-position:-420px 0} +.defaultSkin span.mce_justifyfull {background-position:-440px 0} +.defaultSkin span.mce_anchor {background-position:-200px 0} +.defaultSkin span.mce_indent {background-position:-400px 0} +.defaultSkin span.mce_outdent {background-position:-540px 0} +.defaultSkin span.mce_link {background-position:-500px 0} +.defaultSkin span.mce_unlink {background-position:-640px 0} +.defaultSkin span.mce_sub {background-position:-600px 0} +.defaultSkin span.mce_sup {background-position:-620px 0} +.defaultSkin span.mce_removeformat {background-position:-580px 0} +.defaultSkin span.mce_newdocument {background-position:-520px 0} +.defaultSkin span.mce_image {background-position:-380px 0} +.defaultSkin span.mce_help {background-position:-340px 0} +.defaultSkin span.mce_code {background-position:-260px 0} +.defaultSkin span.mce_hr {background-position:-360px 0} +.defaultSkin span.mce_visualaid {background-position:-660px 0} +.defaultSkin span.mce_charmap {background-position:-240px 0} +.defaultSkin span.mce_paste {background-position:-560px 0} +.defaultSkin span.mce_copy {background-position:-700px 0} +.defaultSkin span.mce_cut {background-position:-680px 0} +.defaultSkin span.mce_blockquote {background-position:-220px 0} +.defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0} +.defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0} +.defaultSkin span.mce_forecolorpicker {background-position:-720px 0} +.defaultSkin span.mce_backcolorpicker {background-position:-760px 0} + +/* Plugins */ +.defaultSkin span.mce_advhr {background-position:-0px -20px} +.defaultSkin span.mce_ltr {background-position:-20px -20px} +.defaultSkin span.mce_rtl {background-position:-40px -20px} +.defaultSkin span.mce_emotions {background-position:-60px -20px} +.defaultSkin span.mce_fullpage {background-position:-80px -20px} +.defaultSkin span.mce_fullscreen {background-position:-100px -20px} +.defaultSkin span.mce_iespell {background-position:-120px -20px} +.defaultSkin span.mce_insertdate {background-position:-140px -20px} +.defaultSkin span.mce_inserttime {background-position:-160px -20px} +.defaultSkin span.mce_absolute {background-position:-180px -20px} +.defaultSkin span.mce_backward {background-position:-200px -20px} +.defaultSkin span.mce_forward {background-position:-220px -20px} +.defaultSkin span.mce_insert_layer {background-position:-240px -20px} +.defaultSkin span.mce_insertlayer {background-position:-260px -20px} +.defaultSkin span.mce_movebackward {background-position:-280px -20px} +.defaultSkin span.mce_moveforward {background-position:-300px -20px} +.defaultSkin span.mce_media {background-position:-320px -20px} +.defaultSkin span.mce_nonbreaking {background-position:-340px -20px} +.defaultSkin span.mce_pastetext {background-position:-360px -20px} +.defaultSkin span.mce_pasteword {background-position:-380px -20px} +.defaultSkin span.mce_selectall {background-position:-400px -20px} +.defaultSkin span.mce_preview {background-position:-420px -20px} +.defaultSkin span.mce_print {background-position:-440px -20px} +.defaultSkin span.mce_cancel {background-position:-460px -20px} +.defaultSkin span.mce_save {background-position:-480px -20px} +.defaultSkin span.mce_replace {background-position:-500px -20px} +.defaultSkin span.mce_search {background-position:-520px -20px} +.defaultSkin span.mce_styleprops {background-position:-560px -20px} +.defaultSkin span.mce_table {background-position:-580px -20px} +.defaultSkin span.mce_cell_props {background-position:-600px -20px} +.defaultSkin span.mce_delete_table {background-position:-620px -20px} +.defaultSkin span.mce_delete_col {background-position:-640px -20px} +.defaultSkin span.mce_delete_row {background-position:-660px -20px} +.defaultSkin span.mce_col_after {background-position:-680px -20px} +.defaultSkin span.mce_col_before {background-position:-700px -20px} +.defaultSkin span.mce_row_after {background-position:-720px -20px} +.defaultSkin span.mce_row_before {background-position:-740px -20px} +.defaultSkin span.mce_merge_cells {background-position:-760px -20px} +.defaultSkin span.mce_table_props {background-position:-980px -20px} +.defaultSkin span.mce_row_props {background-position:-780px -20px} +.defaultSkin span.mce_split_cells {background-position:-800px -20px} +.defaultSkin span.mce_template {background-position:-820px -20px} +.defaultSkin span.mce_visualchars {background-position:-840px -20px} +.defaultSkin span.mce_abbr {background-position:-860px -20px} +.defaultSkin span.mce_acronym {background-position:-880px -20px} +.defaultSkin span.mce_attribs {background-position:-900px -20px} +.defaultSkin span.mce_cite {background-position:-920px -20px} +.defaultSkin span.mce_del {background-position:-940px -20px} +.defaultSkin span.mce_ins {background-position:-960px -20px} +.defaultSkin span.mce_pagebreak {background-position:0 -40px} +.defaultSkin span.mce_restoredraft {background-position:-20px -40px} +.defaultSkin span.mce_spellchecker {background-position:-540px -20px} +.defaultSkin span.mce_visualblocks {background-position: -40px -40px} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/content.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/content.css new file mode 100644 index 0000000..ee3d369 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/content.css @@ -0,0 +1,24 @@ +body, td, pre { margin:8px;} +body.mceForceColors {background:#FFF; color:#000;} +h1 {font-size: 2em} +h2 {font-size: 1.5em} +h3 {font-size: 1.17em} +h4 {font-size: 1em} +h5 {font-size: .83em} +h6 {font-size: .75em} +.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} +a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !important; background:url(../default/img/items.gif) no-repeat 0 0;} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table, img, hr, .mceItemAnchor {cursor:default} +table td, table th {cursor:text} +ins {border-bottom:1px solid green; text-decoration: none; color:green} +del {color:red; text-decoration:line-through} +cite {border-bottom:1px dashed blue} +acronym {border-bottom:1px dotted #CCC; cursor:help} +abbr {border-bottom:1px dashed #CCC; cursor:help} + +img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} +font[face=mceinline] {font-family:inherit !important} +*[contentEditable]:focus {outline:0} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css new file mode 100644 index 0000000..fa3c31a --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css @@ -0,0 +1,106 @@ +/* Generic */ +body { +font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; +background:#F0F0EE; +color: black; +padding:0; +margin:8px 8px 0 8px; +} + +html {background:#F0F0EE; color:#000;} +td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +textarea {resize:none;outline:none;} +a:link, a:visited {color:black;background-color:transparent;} +a:hover {color:#2B6FB6;background-color:transparent;} +.nowrap {white-space: nowrap} + +/* Forms */ +fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +label.msg {display:none;} +label.invalid {color:#EE0000; display:inline;background-color:transparent;} +input.invalid {border:1px solid #EE0000;background-color:transparent;} +input {background:#FFF; border:1px solid #CCC;color:black;} +input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +input, select, textarea {border:1px solid #808080;} +input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} +input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} +.input_noborder {border:0;} + +/* Buttons */ +#insert, #cancel, input.button, .updateButton { +font-weight:bold; +width:94px; height:23px; +cursor:pointer; +padding-bottom:2px; +float:left; +} + +#cancel {float:right} + +/* Browse */ +a.pickcolor, a.browse {text-decoration:none} +a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} +.mceOldBoxModel a.browse span {width:22px; height:20px;} +a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} +a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} +a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;} +.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} +a.pickcolor:hover span {background-color:#B2BBD0;} +a.pickcolor:hover span.disabled {} + +/* Charmap */ +table.charmap {border:1px solid #AAA; text-align:center} +td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} +#charmap a {display:block; color:#000; text-decoration:none; border:0} +#charmap a:hover {background:#CCC;color:#2B6FB6} +#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} +#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} + +/* Source */ +.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} +.mceActionPanel {margin-top:5px;} + +/* Tabs classes */ +.tabs {width:100%; height:18px; line-height:normal;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; border: 1px solid black; border-bottom:0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block; cursor:pointer;} +.tabs li.current {font-weight: bold; margin-right:2px;} +.tabs span {float:left; display:block; padding:0px 10px 0 0;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} + +/* Panels */ +.panel_wrapper div.panel {display:none;} +.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} +.panel_wrapper {border:1px solid #919B9C; padding:10px; padding-top:5px; clear:both; background:white;} + +/* Columns */ +.column {float:left;} +.properties {width:100%;} +.properties .column1 {} +.properties .column2 {text-align:left;} + +/* Titles */ +h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} +h3 {font-size:14px;} +.title {font-size:12px; font-weight:bold; color:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} +#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} +#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap} +#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} +#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} +#colorpicker #light div {overflow:hidden;} +#colorpicker .panel_wrapper div.current {height:175px;} +#colorpicker #namedcolors {width:150px;} +#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} +#colorpicker #colornamecontainer {margin-top:5px;} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css new file mode 100644 index 0000000..86829c5 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css @@ -0,0 +1,106 @@ +/* Reset */ +.highcontrastSkin table, .highcontrastSkin tbody, .highcontrastSkin a, .highcontrastSkin img, .highcontrastSkin tr, .highcontrastSkin div, .highcontrastSkin td, .highcontrastSkin iframe, .highcontrastSkin span, .highcontrastSkin *, .highcontrastSkin .mceText {border:0; margin:0; padding:0; vertical-align:baseline; border-collapse:separate;} +.highcontrastSkin a:hover, .highcontrastSkin a:link, .highcontrastSkin a:visited, .highcontrastSkin a:active {text-decoration:none; font-weight:normal; cursor:default;} +.highcontrastSkin table td {vertical-align:middle} + +.highcontrastSkin .mceIconOnly {display: block !important;} + +/* External */ +.highcontrastSkin .mceExternalToolbar {position:absolute; border:1px solid; border-bottom:0; display:none; background-color: white;} +.highcontrastSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;} +.highcontrastSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px;} + +/* Layout */ +.highcontrastSkin table.mceLayout {border: 1px solid;} +.highcontrastSkin .mceIframeContainer {border-top:1px solid; border-bottom:1px solid} +.highcontrastSkin .mceStatusbar a:hover {text-decoration:underline} +.highcontrastSkin .mceStatusbar {display:block; line-height:1.5em; overflow:visible;} +.highcontrastSkin .mceStatusbar div {float:left} +.highcontrastSkin .mceStatusbar a.mceResize {display:block; float:right; width:20px; height:20px; cursor:se-resize; outline:0} + +.highcontrastSkin .mceToolbar td { display: inline-block; float: left;} +.highcontrastSkin .mceToolbar tr { display: block;} +.highcontrastSkin .mceToolbar table { display: block; } + +/* Button */ + +.highcontrastSkin .mceButton { display:block; margin: 2px; padding: 5px 10px;border: 1px solid; border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; -ms-border-radius: 3px; height: 2em;} +.highcontrastSkin .mceButton .mceVoiceLabel { height: 100%; vertical-align: center; line-height: 2em} +.highcontrastSkin .mceButtonDisabled .mceVoiceLabel { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);} +.highcontrastSkin .mceButtonActive, .highcontrastSkin .mceButton:focus, .highcontrastSkin .mceButton:active { border: 5px solid; padding: 1px 6px;-webkit-focus-ring-color:none;outline:none;} + +/* Separator */ +.highcontrastSkin .mceSeparator {display:block; width:16px; height:26px;} + +/* ListBox */ +.highcontrastSkin .mceListBox { display: block; margin:2px;-webkit-focus-ring-color:none;outline:none;} +.highcontrastSkin .mceListBox .mceText {padding: 5px 6px; line-height: 2em; width: 15ex; overflow: hidden;} +.highcontrastSkin .mceListBoxDisabled .mceText { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);} +.highcontrastSkin .mceListBox a.mceText { padding: 5px 10px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;} +.highcontrastSkin .mceListBox a.mceOpen { padding: 5px 4px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-left: 0; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;} +.highcontrastSkin .mceListBox:focus a.mceText, .highcontrastSkin .mceListBox:active a.mceText { border-width: 5px; padding: 1px 10px 1px 6px;} +.highcontrastSkin .mceListBox:focus a.mceOpen, .highcontrastSkin .mceListBox:active a.mceOpen { border-width: 5px; padding: 1px 0px 1px 4px;} + +.highcontrastSkin .mceListBoxMenu {overflow-y:auto} + +/* SplitButton */ +.highcontrastSkin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} + +.highcontrastSkin .mceSplitButton { border-collapse: collapse; margin: 2px; height: 2em; line-height: 2em;-webkit-focus-ring-color:none;outline:none;} +.highcontrastSkin .mceSplitButton td { display: table-cell; float: none; margin: 0; padding: 0; height: 2em;} +.highcontrastSkin .mceSplitButton tr { display: table-row; } +.highcontrastSkin table.mceSplitButton { display: table; } +.highcontrastSkin .mceSplitButton a.mceAction { padding: 5px 10px; display: block; height: 2em; line-height: 2em; overflow: hidden; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;} +.highcontrastSkin .mceSplitButton a.mceOpen { padding: 5px 4px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;} +.highcontrastSkin .mceSplitButton .mceVoiceLabel { height: 2em; vertical-align: center; line-height: 2em; } +.highcontrastSkin .mceSplitButton:focus a.mceAction, .highcontrastSkin .mceSplitButton:active a.mceAction { border-width: 5px; border-right-width: 1px; padding: 1px 10px 1px 6px;-webkit-focus-ring-color:none;outline:none;} +.highcontrastSkin .mceSplitButton:focus a.mceOpen, .highcontrastSkin .mceSplitButton:active a.mceOpen { border-width: 5px; border-left-width: 1px; padding: 1px 0px 1px 4px;-webkit-focus-ring-color:none;outline:none;} + +/* Menu */ +.highcontrastSkin .mceNoIcons span.mceIcon {width:0;} +.highcontrastSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid; direction:ltr} +.highcontrastSkin .mceMenu table {background:white; color: black} +.highcontrastSkin .mceNoIcons a .mceText {padding-left:10px} +.highcontrastSkin .mceMenu a, .highcontrastSkin .mceMenu span, .highcontrastSkin .mceMenu {display:block;background:white; color: black} +.highcontrastSkin .mceMenu td {height:2em} +.highcontrastSkin .mceMenu a {position:relative;padding:3px 0 4px 0; display: block;} +.highcontrastSkin .mceMenu .mceText {position:relative; display:block; cursor:default; margin:0; padding:0 25px 0 25px;} +.highcontrastSkin .mceMenu pre.mceText {font-family:Monospace} +.highcontrastSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:26px;} +.highcontrastSkin td.mceMenuItemSeparator {border-top:1px solid; height:1px} +.highcontrastSkin .mceMenuItemTitle a {border:0; border-bottom:1px solid} +.highcontrastSkin .mceMenuItemTitle span.mceText {font-weight:bold; padding-left:4px} +.highcontrastSkin .mceNoIcons .mceMenuItemSelected span.mceText:before {content: "\2713\A0";} +.highcontrastSkin .mceMenu span.mceMenuLine {display:none} +.highcontrastSkin .mceMenuItemSub a .mceText:after {content: "\A0\25B8"} +.highcontrastSkin .mceMenuItem td, .highcontrastSkin .mceMenuItem th {line-height: normal} + +/* ColorSplitButton */ +.highcontrastSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid; color: #000} +.highcontrastSkin .mceColorSplitMenu td {padding:2px} +.highcontrastSkin .mceColorSplitMenu a {display:block; width:16px; height:16px; overflow:hidden; color:#000; margin: 0; padding: 0;} +.highcontrastSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} +.highcontrastSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF} +.highcontrastSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid; background-color:#B6BDD2} +.highcontrastSkin a.mceMoreColors:hover {border:1px solid #0A246A; color: #000;} +.highcontrastSkin .mceColorPreview {display:none;} +.highcontrastSkin .mce_forecolor span.mceAction, .highcontrastSkin .mce_backcolor span.mceAction {height:17px;overflow:hidden} + +/* Progress,Resize */ +.highcontrastSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF} +.highcontrastSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} + +/* Rtl */ +.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0} +.mceRtl .mceMenuItem .mceText {text-align: right} + +/* Formats */ +.highcontrastSkin .mce_p span.mceText {} +.highcontrastSkin .mce_address span.mceText {font-style:italic} +.highcontrastSkin .mce_pre span.mceText {font-family:monospace} +.highcontrastSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} +.highcontrastSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} +.highcontrastSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} +.highcontrastSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} +.highcontrastSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} +.highcontrastSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css new file mode 100644 index 0000000..631fa0e --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css @@ -0,0 +1,48 @@ +body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} +body {background:#FFF;} +body.mceForceColors {background:#FFF; color:#000;} +h1 {font-size: 2em} +h2 {font-size: 1.5em} +h3 {font-size: 1.17em} +h4 {font-size: 1em} +h5 {font-size: .83em} +h6 {font-size: .75em} +.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} +a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !important; background:url(../default/img/items.gif) no-repeat 0 0;} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table, img, hr, .mceItemAnchor {cursor:default} +table td, table th {cursor:text} +ins {border-bottom:1px solid green; text-decoration: none; color:green} +del {color:red; text-decoration:line-through} +cite {border-bottom:1px dashed blue} +acronym {border-bottom:1px dotted #CCC; cursor:help} +abbr {border-bottom:1px dashed #CCC; cursor:help} + +/* IE */ +* html body { +scrollbar-3dlight-color:#F0F0EE; +scrollbar-arrow-color:#676662; +scrollbar-base-color:#F0F0EE; +scrollbar-darkshadow-color:#DDD; +scrollbar-face-color:#E0E0DD; +scrollbar-highlight-color:#F0F0EE; +scrollbar-shadow-color:#F0F0EE; +scrollbar-track-color:#F5F5F5; +} + +img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} +font[face=mceinline] {font-family:inherit !important} +*[contentEditable]:focus {outline:0} + +.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc} +.mceItemShockWave {background-image:url(../../img/shockwave.gif)} +.mceItemFlash {background-image:url(../../img/flash.gif)} +.mceItemQuickTime {background-image:url(../../img/quicktime.gif)} +.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)} +.mceItemRealMedia {background-image:url(../../img/realmedia.gif)} +.mceItemVideo {background-image:url(../../img/video.gif)} +.mceItemAudio {background-image:url(../../img/video.gif)} +.mceItemIframe {background-image:url(../../img/iframe.gif)} +.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css new file mode 100644 index 0000000..84d2fe9 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css @@ -0,0 +1,118 @@ +/* Generic */ +body { +font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; +scrollbar-3dlight-color:#F0F0EE; +scrollbar-arrow-color:#676662; +scrollbar-base-color:#F0F0EE; +scrollbar-darkshadow-color:#DDDDDD; +scrollbar-face-color:#E0E0DD; +scrollbar-highlight-color:#F0F0EE; +scrollbar-shadow-color:#F0F0EE; +scrollbar-track-color:#F5F5F5; +background:#F0F0EE; +padding:0; +margin:8px 8px 0 8px; +} + +html {background:#F0F0EE;} +td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +textarea {resize:none;outline:none;} +a:link, a:visited {color:black;} +a:hover {color:#2B6FB6;} +.nowrap {white-space: nowrap} + +/* Forms */ +fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +label.msg {display:none;} +label.invalid {color:#EE0000; display:inline;} +input.invalid {border:1px solid #EE0000;} +input {background:#FFF; border:1px solid #CCC;} +input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +input, select, textarea {border:1px solid #808080;} +input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} +input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} +.input_noborder {border:0;} + +/* Buttons */ +#insert, #cancel, input.button, .updateButton { +border:0; margin:0; padding:0; +font-weight:bold; +width:94px; height:26px; +background:url(../default/img/buttons.png) 0 -26px; +cursor:pointer; +padding-bottom:2px; +float:left; +} + +#insert {background:url(../default/img/buttons.png) 0 -52px} +#cancel {background:url(../default/img/buttons.png) 0 0; float:right} + +/* Browse */ +a.pickcolor, a.browse {text-decoration:none} +a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} +.mceOldBoxModel a.browse span {width:22px; height:20px;} +a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} +a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} +a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;} +.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} +a.pickcolor:hover span {background-color:#B2BBD0;} +a.pickcolor:hover span.disabled {} + +/* Charmap */ +table.charmap {border:1px solid #AAA; text-align:center} +td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} +#charmap a {display:block; color:#000; text-decoration:none; border:0} +#charmap a:hover {background:#CCC;color:#2B6FB6} +#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} +#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} + +/* Source */ +.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} +.mceActionPanel {margin-top:5px;} + +/* Tabs classes */ +.tabs {width:100%; height:18px; line-height:normal; background:url(../default/img/tabs.gif) repeat-x 0 -72px;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; background:url(../default/img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;} +.tabs li.current {background:url(../default/img/tabs.gif) no-repeat 0 -18px; margin-right:2px;} +.tabs span {float:left; display:block; background:url(../default/img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;} +.tabs .current span {background:url(../default/img/tabs.gif) no-repeat right -54px;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} + +/* Panels */ +.panel_wrapper div.panel {display:none;} +.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} +.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} + +/* Columns */ +.column {float:left;} +.properties {width:100%;} +.properties .column1 {} +.properties .column2 {text-align:left;} + +/* Titles */ +h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} +h3 {font-size:14px;} +.title {font-size:12px; font-weight:bold; color:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} +#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} +#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap} +#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} +#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} +#colorpicker #light div {overflow:hidden;} +#colorpicker .panel_wrapper div.current {height:175px;} +#colorpicker #namedcolors {width:150px;} +#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} +#colorpicker #colornamecontainer {margin-top:5px;} +#colorpicker #picker_panel fieldset {margin:auto;width:325px;} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..13a5cb03097c004f7b37658654a9250748cf073c GIT binary patch literal 2766 zcmd^B`#;nBAK!9c(dCSc_`04XBu+J597MXvt(oeZlcJpHIOSO7atc#AMWG$3$V7)q zNx38nEwRmIE*oapX3E%2Y_rQ}@3ZgU@qIsD@7L?`e7_#g=kxt|zu!N+{|XHbG)7n; zU@(~Rf&KpB+Imzw{S0-qnWxWD!C*SD&>&2J76Jgq`yNnO3$>r8@B|Y69x0pfIh#Ow z)WjyX^8T)+6I-}NwZreI-$r>-HeZJQv#zX#Th_uMwsMIrlO4mNj{|cbX#CdxSrSA1 zi7x6G7Jj7hJB9?EBN7TrO5@0TC%zA`m*~?n<~POISNRA}Ix(kW@s(5astLYgTBw@h z%VrlKo=`C@ST1R1m9LYgOf7Md z%vzvMe5Z_y2DwWEoJHD{xNkz(%My(67Mb6qJc(v%ez|*GL}7^sxZ0gBO!Bo{;Q&WM zV~hKzM04L20BA!600h)@pk@MPCs0oSH5X{4K+yx#GXN3-jT}guz%o@MqX6}sMoQL5 zDbQRgH1}A|FIDkNfw)Q|r2+XcBpuQyW`K$hDQ1Cc9;n4YEdkIH;ALod*EG}Dz-$rp zodRS-8tD*F2^9QBm7ql>XjO|zDiH~iGQlzzD86d`M;8Iw0Wf$N3>*f7!C)X53}FF1 zT0@Toj5C077L3FL<|Sw<4{-A#&RxJIKpX-MAm?_cBlxb#&;M-FLuSz*n4d&h` zXWyvinw0!TAZh`kHX!Z*ViJ&afdz_MOab5f!Qzm5fd-Zs&>|hkCV+ej$T>j02*z+= z>_u@$tA>DwJ(UpDP?lurK+A9mzvO(D-+gFH)8MEW*O2c>3^gu}@HCz3w3$-%Bg0iD72j)nmts zO~01P6^cappH!;k{M1!%*t$nQ=-$~$cX+fEkj^3P+$d^La54PkS=(gpNkdn~8?D*hW^hb50#Qbv(Vr z7mux=@03*OzkBFr1euY0!)>k{MMqGw8F#U zRe``TW;?0PDm5oCUDqnyR2D|VTUKrljh??&VAFx_Y8>n0){SLYN4rN@58&~EY<8F( z0{QSBO|7FRtIxB?ykG0dfo2c-Y&e&zlYMnqkV9vq+=EwnBv2HB%MeBD4xS7LeKIpT_! z`x2_k`zl`LzeQ$W8QpB(KQ+0LVyEJr9M?0CO4qCq-VU);<`uj}<}S1&Q7xSe=5T(8 ziLmqu&AMuP>etg&fo)XY<9~c4ufJu@Ux>Osj0^B-);#sZ?RMt%g}dL*c}ZebdsbpF zCGfuwrDfcoU0*mJ)RD4V;PPr$+Lrfm`b7p-cJd8)xqdLm^ZH#<*JQfYJ~PoB*LK5| zH$C3CzsVSRfseg&M51H8?1)k+yOYwqQqn)B#!aMev)#63aXG;9DDJn_0c)Gxymon< zymu+j@mLckYTb1Up+$oES-Qj(fgx}5+7lCfvmr6-7IAsgPaDgPES=EUr(Q2%O-m}?RmP5S6{I{NuN(T6$1*`X7IJXi>l zhX)mey1{@?Zefvr;ZbWC>l|x544h)bavSVvqawV&>mHYcaIE7arJsyhy0aAZ28%Ea^Z`=aTvh4miaaN0)5vL*wCb?j}Dsf4O@AD!~!zsLr>lt6x7K z3`4aaD)%xv?5(p|tKkpFdnS6dqgrLbo&zQ4gEPu=g5tj(#rWP>nDR~6@jTSz^oix< mOkD9tMJf;J-L)*xtX8`HcJ}PmJwolr6m}pW*#DJZbk@H_2$Vel literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc57f2bc2d63a3ad6fbf98b663f336539f011ec GIT binary patch literal 651 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 O0000 + + {#advanced_dlg.code_title} + + + + +
+
+ +
+ +
+ +
+ + + +
+ + +
+
+ + diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/editor_template.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/editor_template.js new file mode 100644 index 0000000..4b3209c --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/editor_template.js @@ -0,0 +1 @@ +(function(){var a=tinymce.DOM;tinymce.ThemeManager.requireLangPack("simple");tinymce.create("tinymce.themes.SimpleTheme",{init:function(c,d){var e=this,b=["Bold","Italic","Underline","Strikethrough","InsertUnorderedList","InsertOrderedList"],f=c.settings;e.editor=c;c.contentCSS.push(d+"/skins/"+f.skin+"/content.css");c.onInit.add(function(){c.onNodeChange.add(function(h,g){tinymce.each(b,function(i){g.get(i.toLowerCase()).setActive(h.queryCommandState(i))})})});a.loadCSS((f.editor_css?c.documentBaseURI.toAbsolute(f.editor_css):"")||d+"/skins/"+f.skin+"/ui.css")},renderUI:function(h){var e=this,i=h.targetNode,b,c,d=e.editor,f=d.controlManager,g;i=a.insertAfter(a.create("span",{id:d.id+"_container","class":"mceEditor "+d.settings.skin+"SimpleSkin"}),i);i=g=a.add(i,"table",{cellPadding:0,cellSpacing:0,"class":"mceLayout"});i=c=a.add(i,"tbody");i=a.add(c,"tr");i=b=a.add(a.add(i,"td"),"div",{"class":"mceIframeContainer"});i=a.add(a.add(c,"tr",{"class":"last"}),"td",{"class":"mceToolbar mceLast",align:"center"});c=e.toolbar=f.createToolbar("tools1");c.add(f.createButton("bold",{title:"simple.bold_desc",cmd:"Bold"}));c.add(f.createButton("italic",{title:"simple.italic_desc",cmd:"Italic"}));c.add(f.createButton("underline",{title:"simple.underline_desc",cmd:"Underline"}));c.add(f.createButton("strikethrough",{title:"simple.striketrough_desc",cmd:"Strikethrough"}));c.add(f.createSeparator());c.add(f.createButton("undo",{title:"simple.undo_desc",cmd:"Undo"}));c.add(f.createButton("redo",{title:"simple.redo_desc",cmd:"Redo"}));c.add(f.createSeparator());c.add(f.createButton("cleanup",{title:"simple.cleanup_desc",cmd:"mceCleanup"}));c.add(f.createSeparator());c.add(f.createButton("insertunorderedlist",{title:"simple.bullist_desc",cmd:"InsertUnorderedList"}));c.add(f.createButton("insertorderedlist",{title:"simple.numlist_desc",cmd:"InsertOrderedList"}));c.renderTo(i);return{iframeContainer:b,editorContainer:d.id+"_container",sizeContainer:g,deltaHeight:-20}},getInfo:function(){return{longname:"Simple theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add("simple",tinymce.themes.SimpleTheme)})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/editor_template_src.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/editor_template_src.js new file mode 100644 index 0000000..35c19a6 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/editor_template_src.js @@ -0,0 +1,84 @@ +/** + * editor_template_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM; + + // Tell it to load theme specific language pack(s) + tinymce.ThemeManager.requireLangPack('simple'); + + tinymce.create('tinymce.themes.SimpleTheme', { + init : function(ed, url) { + var t = this, states = ['Bold', 'Italic', 'Underline', 'Strikethrough', 'InsertUnorderedList', 'InsertOrderedList'], s = ed.settings; + + t.editor = ed; + ed.contentCSS.push(url + "/skins/" + s.skin + "/content.css"); + + ed.onInit.add(function() { + ed.onNodeChange.add(function(ed, cm) { + tinymce.each(states, function(c) { + cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c)); + }); + }); + }); + + DOM.loadCSS((s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : '') || url + "/skins/" + s.skin + "/ui.css"); + }, + + renderUI : function(o) { + var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc; + + n = DOM.insertAfter(DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SimpleSkin'}), n); + n = sc = DOM.add(n, 'table', {cellPadding : 0, cellSpacing : 0, 'class' : 'mceLayout'}); + n = tb = DOM.add(n, 'tbody'); + + // Create iframe container + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(DOM.add(n, 'td'), 'div', {'class' : 'mceIframeContainer'}); + + // Create toolbar container + n = DOM.add(DOM.add(tb, 'tr', {'class' : 'last'}), 'td', {'class' : 'mceToolbar mceLast', align : 'center'}); + + // Create toolbar + tb = t.toolbar = cf.createToolbar("tools1"); + tb.add(cf.createButton('bold', {title : 'simple.bold_desc', cmd : 'Bold'})); + tb.add(cf.createButton('italic', {title : 'simple.italic_desc', cmd : 'Italic'})); + tb.add(cf.createButton('underline', {title : 'simple.underline_desc', cmd : 'Underline'})); + tb.add(cf.createButton('strikethrough', {title : 'simple.striketrough_desc', cmd : 'Strikethrough'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('undo', {title : 'simple.undo_desc', cmd : 'Undo'})); + tb.add(cf.createButton('redo', {title : 'simple.redo_desc', cmd : 'Redo'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('cleanup', {title : 'simple.cleanup_desc', cmd : 'mceCleanup'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('insertunorderedlist', {title : 'simple.bullist_desc', cmd : 'InsertUnorderedList'})); + tb.add(cf.createButton('insertorderedlist', {title : 'simple.numlist_desc', cmd : 'InsertOrderedList'})); + tb.renderTo(n); + + return { + iframeContainer : ic, + editorContainer : ed.id + '_container', + sizeContainer : sc, + deltaHeight : -20 + }; + }, + + getInfo : function() { + return { + longname : 'Simple theme', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + version : tinymce.majorVersion + "." + tinymce.minorVersion + } + } + }); + + tinymce.ThemeManager.add('simple', tinymce.themes.SimpleTheme); +})(); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/img/icons.gif b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/img/icons.gif new file mode 100644 index 0000000000000000000000000000000000000000..6fcbcb5dedf16a5fa1d15c2aa127bceb612f1e71 GIT binary patch literal 806 zcmZ?wbhEHbJi#Es@KuxH{{08bHy>kQU|4+kcV*u?6Yu2z|Nk2X_I-c9E~4fBsnb_x z&7Ngzq1inB@Woqi-rnfiGF7yw9zM z^p;~=3MY4TT)2AY!iC=7fBwej_wPS(UDm1P!}|}9?`#au+qhx#R?Fl=KuakHia%Lc z85lGfbU;Rd{N%v)|G<<24;`ug6HAIt=2*?Yu%d)ZG@><(acbwmDSj%f4MMZ#%vkt3 z%+g~)i8kP^LLB_(WJHBo z)4eilyozQ8a&qqSt%<6xpa0;xA7k;M?mchbzI*>+`RnL~M?L!{MDwZt;o_B2F2$0=pQSpQ!u@RcUGT{(44KaY91N#ws_nDH9G%Qf=ZF z5o_THWH`G~`GwyilS^z$ZvV~I`dh4Lx_8c>?R@8gr-07UIgFjp0y#A&c{B)cE>2kS zL5I1;i$zoEA)6qV`HGJvVWE!{8MZ6ST|PC}d%Kid7{KiD{l18xziSGKuWtj9AkWy-*`}#c~0`Lrjq> z-;O-o=3A#@&dst%_SasuJq0xZW;OwR3vM!diY%Es?;J~Pp}LYununP(i|XxU>#u=* zSvNC^0?cJ=S?=UK4&2DdcCO^BsHxjWc4vR-Z64x&8r#>V9!JMd4O!Z*d@mNrgX=jUy;0|T>ZntHjDU$=-I8y`|tN~Y9 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/langs/de.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/langs/de.js new file mode 100644 index 0000000..59bf788 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/langs/de.js @@ -0,0 +1 @@ +tinyMCE.addI18n('de.simple',{"cleanup_desc":"Quellcode aufr\u00e4umen","redo_desc":"Wiederholen (Strg+Y)","undo_desc":"R\u00fcckg\u00e4ngig (Strg+Z)","numlist_desc":"Nummerierung","bullist_desc":"Aufz\u00e4hlung","striketrough_desc":"Durchgestrichen","underline_desc":"Unterstrichen (Strg+U)","italic_desc":"Kursiv (Strg+I)","bold_desc":"Fett (Strg+B)"}); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/langs/en.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/langs/en.js new file mode 100644 index 0000000..088ed0f --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/langs/en.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.simple',{"cleanup_desc":"Cleanup Messy Code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/default/content.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/default/content.css new file mode 100644 index 0000000..783b170 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/default/content.css @@ -0,0 +1,25 @@ +body, td, pre { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; +} + +body { + background-color: #FFFFFF; +} + +.mceVisualAid { + border: 1px dashed #BBBBBB; +} + +/* MSIE specific */ + +* html body { + scrollbar-3dlight-color: #F0F0EE; + scrollbar-arrow-color: #676662; + scrollbar-base-color: #F0F0EE; + scrollbar-darkshadow-color: #DDDDDD; + scrollbar-face-color: #E0E0DD; + scrollbar-highlight-color: #F0F0EE; + scrollbar-shadow-color: #F0F0EE; + scrollbar-track-color: #F5F5F5; +} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/default/ui.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/default/ui.css new file mode 100644 index 0000000..32feae6 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/default/ui.css @@ -0,0 +1,32 @@ +/* Reset */ +.defaultSimpleSkin table, .defaultSimpleSkin tbody, .defaultSimpleSkin a, .defaultSimpleSkin img, .defaultSimpleSkin tr, .defaultSimpleSkin div, .defaultSimpleSkin td, .defaultSimpleSkin iframe, .defaultSimpleSkin span, .defaultSimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000} + +/* Containers */ +.defaultSimpleSkin {position:relative} +.defaultSimpleSkin table.mceLayout {background:#F0F0EE; border:1px solid #CCC;} +.defaultSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #CCC;} +.defaultSimpleSkin .mceToolbar {height:24px;} + +/* Layout */ +.defaultSimpleSkin span.mceIcon, .defaultSimpleSkin img.mceIcon {display:block; width:20px; height:20px} +.defaultSimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} + +/* Button */ +.defaultSimpleSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px} +.defaultSimpleSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0} +.defaultSimpleSkin a.mceButtonActive {border:1px solid #0A246A; background-color:#C2CBE0} +.defaultSimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} + +/* Separator */ +.defaultSimpleSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:0 2px 0 4px} + +/* Theme */ +.defaultSimpleSkin span.mce_bold {background-position:0 0} +.defaultSimpleSkin span.mce_italic {background-position:-60px 0} +.defaultSimpleSkin span.mce_underline {background-position:-140px 0} +.defaultSimpleSkin span.mce_strikethrough {background-position:-120px 0} +.defaultSimpleSkin span.mce_undo {background-position:-160px 0} +.defaultSimpleSkin span.mce_redo {background-position:-100px 0} +.defaultSimpleSkin span.mce_cleanup {background-position:-40px 0} +.defaultSimpleSkin span.mce_insertunorderedlist {background-position:-20px 0} +.defaultSimpleSkin span.mce_insertorderedlist {background-position:-80px 0} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css new file mode 100644 index 0000000..e10558f --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css @@ -0,0 +1,17 @@ +body, td, pre {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} + +body {background: #FFF;} +.mceVisualAid {border: 1px dashed #BBB;} + +/* IE */ + +* html body { +scrollbar-3dlight-color: #F0F0EE; +scrollbar-arrow-color: #676662; +scrollbar-base-color: #F0F0EE; +scrollbar-darkshadow-color: #DDDDDD; +scrollbar-face-color: #E0E0DD; +scrollbar-highlight-color: #F0F0EE; +scrollbar-shadow-color: #F0F0EE; +scrollbar-track-color: #F5F5F5; +} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..527e3495a653e57d76bf7e55316793d17dda497a GIT binary patch literal 5102 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 VmjT$ODWe$zObpERYjs_s{s;8{A&me4 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css new file mode 100644 index 0000000..021d650 --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css @@ -0,0 +1,35 @@ +/* Reset */ +.o2k7SimpleSkin table, .o2k7SimpleSkin tbody, .o2k7SimpleSkin a, .o2k7SimpleSkin img, .o2k7SimpleSkin tr, .o2k7SimpleSkin div, .o2k7SimpleSkin td, .o2k7SimpleSkin iframe, .o2k7SimpleSkin span, .o2k7SimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000} + +/* Containers */ +.o2k7SimpleSkin {position:relative} +.o2k7SimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;} +.o2k7SimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #ABC6DD;} +.o2k7SimpleSkin .mceToolbar {height:26px;} + +/* Layout */ +.o2k7SimpleSkin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; } +.o2k7SimpleSkin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px} +.o2k7SimpleSkin span.mceIcon, .o2k7SimpleSkin img.mceIcon {display:block; width:20px; height:20px} +.o2k7SimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} + +/* Button */ +.o2k7SimpleSkin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px} +.o2k7SimpleSkin a.mceButton span, .o2k7SimpleSkin a.mceButton img {margin:1px 0 0 1px} +.o2k7SimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px} +.o2k7SimpleSkin a.mceButtonActive {background-position:0 -44px} +.o2k7SimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} + +/* Separator */ +.o2k7SimpleSkin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px} + +/* Theme */ +.o2k7SimpleSkin span.mce_bold {background-position:0 0} +.o2k7SimpleSkin span.mce_italic {background-position:-60px 0} +.o2k7SimpleSkin span.mce_underline {background-position:-140px 0} +.o2k7SimpleSkin span.mce_strikethrough {background-position:-120px 0} +.o2k7SimpleSkin span.mce_undo {background-position:-160px 0} +.o2k7SimpleSkin span.mce_redo {background-position:-100px 0} +.o2k7SimpleSkin span.mce_cleanup {background-position:-40px 0} +.o2k7SimpleSkin span.mce_insertunorderedlist {background-position:-20px 0} +.o2k7SimpleSkin span.mce_insertorderedlist {background-position:-80px 0} diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/tiny_mce.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/tiny_mce.js new file mode 100644 index 0000000..208dfcc --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/tiny_mce.js @@ -0,0 +1 @@ +(function(e){var a=/^\s*|\s*$/g,b,d="B".replace(/A(.)|B/,"$1")==="$1";var c={majorVersion:"3",minorVersion:"5.10",releaseDate:"2013-10-24",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isIE11=g.indexOf("Trident/")!=-1&&(g.indexOf("rv:")!=-1||o.appName.indexOf("Netscape")!=-1);s.isOpera=e.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName)||s.isIE11;s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&!s.isIE11&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;if(e.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m0?b:[f.scope]);if(e===false){break}}a.inDispatch=false;return e}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w\-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});c=g.base_uri;if(c){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host==="mce_host"){f.port=c.port}if(!f.host||f.host==="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var d=this,f;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:d});if((b.host!="mce_host"&&d.host!=b.host&&b.host)||d.port!=b.port||d.protocol!=b.protocol){return b.getURI()}var c=d.getURI(),e=b.getURI();if(c==e||(c.charAt(c.length-1)=="/"&&c.substr(0,c.length-1)==e)){return c}f=d.toRelPath(d.path,b.path);if(b.query){f+="?"+b.query}if(b.anchor){f+="#"+b.anchor}return f},toAbsolute:function(b,c){b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length=g.length||g[e]!=c[e]){f=e+1;break}}}if(f===1){return h}for(e=0,b=g.length-(f-1);e=0;c--){if(f[c].length===0||f[c]==="."){continue}if(f[c]===".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!==0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(c,e,d){var b=new Date();b.setTime(b.getTime()-1000);this.set(c,"",b,e,d)}})})();(function(){function serialize(o,quote){var i,v,t,name;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&Object.prototype.toString.call(o)==="[object Array]"){for(i=0,v="[";i0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(name in o){if(o.hasOwnProperty(name)){v+=typeof o[name]!="function"?(v.length>1?","+quote:quote)+name+quote+":"+serialize(o[name],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey},metaKeyPressed:function(b){return a.isMac?b.metaKey:b.ctrlKey&&!b.altKey}}})(tinymce);tinymce.util.Quirks=function(a){var j=tinymce.VK,f=j.BACKSPACE,k=j.DELETE,e=a.dom,m=a.selection,I=a.settings,x=a.parser,p=a.serializer,F=tinymce.each;function B(O,N){try{a.getDoc().execCommand(O,false,N)}catch(M){}}function o(){var M=a.getDoc().documentMode;return M?M:6}function A(M){return M.isDefaultPrevented()}function K(){function M(S){var O,Q,N,T,P,R,U;function V(){if(P.nodeType==3){if(S&&R==P.length){return true}if(!S&&R===0){return true}}}O=m.getRng();var W=[O.startContainer,O.startOffset,O.endContainer,O.endOffset];if(!O.collapsed){S=true}P=O[(S?"start":"end")+"Container"];R=O[(S?"start":"end")+"Offset"];if(P.nodeType==3){Q=e.getParent(O.startContainer,e.isBlock);if(S){Q=e.getNext(Q,e.isBlock)}if(Q&&(V()||!O.collapsed)){N=e.create("em",{id:"__mceDel"});F(tinymce.grep(Q.childNodes),function(X){N.appendChild(X)});Q.appendChild(N)}}O=e.createRng();O.setStart(W[0],W[1]);O.setEnd(W[2],W[3]);m.setRng(O);a.getDoc().execCommand(S?"ForwardDelete":"Delete",false,null);if(N){T=m.getBookmark();while(U=e.get("__mceDel")){e.remove(U,true)}m.moveToBookmark(T)}}a.onKeyDown.add(function(N,P){var O;O=P.keyCode==k;if(!A(P)&&(O||P.keyCode==f)&&!j.modifierPressed(P)){P.preventDefault();M(O)}});a.addCommand("Delete",function(){M()})}function r(){function M(P){var O=e.create("body");var Q=P.cloneContents();O.appendChild(Q);return m.serializer.serialize(O,{format:"html"})}function N(O){var Q=M(O);var R=e.createRng();R.selectNode(a.getBody());var P=M(R);return Q===P}a.onKeyDown.add(function(P,R){var Q=R.keyCode,O;if(!A(R)&&(Q==k||Q==f)){O=P.selection.isCollapsed();if(O&&!e.isEmpty(P.getBody())){return}if(tinymce.isIE&&!O){return}if(!O&&!N(P.selection.getRng())){return}P.setContent("");P.selection.setCursorLocation(P.getBody(),0);P.nodeChanged()}})}function J(){a.onKeyDown.add(function(M,N){if(!A(N)&&N.keyCode==65&&j.metaKeyPressed(N)){N.preventDefault();M.execCommand("SelectAll")}})}function L(){if(!a.settings.content_editable){e.bind(a.getDoc(),"focusin",function(M){m.setRng(m.getRng())});e.bind(a.getDoc(),"mousedown",function(M){if(M.target==a.getDoc().documentElement){a.getWin().focus();m.setRng(m.getRng())}})}}function C(){a.onKeyDown.add(function(M,P){if(!A(P)&&P.keyCode===f){if(m.isCollapsed()&&m.getRng(true).startOffset===0){var O=m.getNode();var N=O.previousSibling;if(N&&N.nodeName&&N.nodeName.toLowerCase()==="hr"){e.remove(N);tinymce.dom.Event.cancel(P)}}}})}function z(){if(!Range.prototype.getClientRects){a.onMouseDown.add(function(N,O){if(!A(O)&&O.target.nodeName==="HTML"){var M=N.getBody();M.blur();setTimeout(function(){M.focus()},0)}})}}function h(){a.onClick.add(function(M,N){N=N.target;if(/^(IMG|HR)$/.test(N.nodeName)){m.getSel().setBaseAndExtent(N,0,N,1)}if(N.nodeName=="A"&&e.hasClass(N,"mceItemAnchor")){m.select(N)}M.nodeChanged()})}function c(){function N(){var P=e.getAttribs(m.getStart().cloneNode(false));return function(){var Q=m.getStart();if(Q!==a.getBody()){e.setAttrib(Q,"style",null);F(P,function(R){Q.setAttributeNode(R.cloneNode(true))})}}}function M(){return !m.isCollapsed()&&e.getParent(m.getStart(),e.isBlock)!=e.getParent(m.getEnd(),e.isBlock)}function O(P,Q){Q.preventDefault();return false}a.onKeyPress.add(function(P,R){var Q;if(!A(R)&&(R.keyCode==8||R.keyCode==46)&&M()){Q=N();P.getDoc().execCommand("delete",false,null);Q();R.preventDefault();return false}});e.bind(a.getDoc(),"cut",function(Q){var P;if(!A(Q)&&M()){P=N();a.onKeyUp.addToTop(O);setTimeout(function(){P();a.onKeyUp.remove(O)},0)}})}function b(){var N,M;e.bind(a.getDoc(),"selectionchange",function(){if(M){clearTimeout(M);M=0}M=window.setTimeout(function(){var O=m.getRng();if(!N||!tinymce.dom.RangeUtils.compareRanges(O,N)){a.nodeChanged();N=O}},50)})}function y(){document.body.setAttribute("role","application")}function u(){a.onKeyDown.add(function(M,O){if(!A(O)&&O.keyCode===f){if(m.isCollapsed()&&m.getRng(true).startOffset===0){var N=m.getNode().previousSibling;if(N&&N.nodeName&&N.nodeName.toLowerCase()==="table"){return tinymce.dom.Event.cancel(O)}}}})}function D(){if(o()>7){return}B("RespectVisibilityInDesign",true);a.contentStyles.push(".mceHideBrInPre pre br {display: none}");e.addClass(a.getBody(),"mceHideBrInPre");x.addNodeFilter("pre",function(M,O){var P=M.length,R,N,S,Q;while(P--){R=M[P].getAll("br");N=R.length;while(N--){S=R[N];Q=S.prev;if(Q&&Q.type===3&&Q.value.charAt(Q.value-1)!="\n"){Q.value+="\n"}else{S.parent.insert(new tinymce.html.Node("#text",3),S,true).value="\n"}}}});p.addNodeFilter("pre",function(M,O){var P=M.length,R,N,S,Q;while(P--){R=M[P].getAll("br");N=R.length;while(N--){S=R[N];Q=S.prev;if(Q&&Q.type==3){Q.value=Q.value.replace(/\r?\n$/,"")}}}})}function g(){e.bind(a.getBody(),"mouseup",function(O){var N,M=m.getNode();if(M.nodeName=="IMG"){if(N=e.getStyle(M,"width")){e.setAttrib(M,"width",N.replace(/[^0-9%]+/g,""));e.setStyle(M,"width","")}if(N=e.getStyle(M,"height")){e.setAttrib(M,"height",N.replace(/[^0-9%]+/g,""));e.setStyle(M,"height","")}}})}function d(){a.onKeyDown.add(function(S,T){var R,M,N,P,Q,U,O;R=T.keyCode==k;if(!A(T)&&(R||T.keyCode==f)&&!j.modifierPressed(T)){M=m.getRng();N=M.startContainer;P=M.startOffset;O=M.collapsed;if(N.nodeType==3&&N.nodeValue.length>0&&((P===0&&!O)||(O&&P===(R?0:1)))){U=N.previousSibling;if(U&&U.nodeName=="IMG"){return}nonEmptyElements=S.schema.getNonEmptyElements();T.preventDefault();Q=e.create("br",{id:"__tmp"});N.parentNode.insertBefore(Q,N);S.getDoc().execCommand(R?"ForwardDelete":"Delete",false,null);N=m.getRng().startContainer;U=N.previousSibling;if(U&&U.nodeType==1&&!e.isBlock(U)&&e.isEmpty(U)&&!nonEmptyElements[U.nodeName.toLowerCase()]){e.remove(U)}e.remove("__tmp")}}})}function H(){a.onKeyDown.add(function(Q,R){var O,N,S,M,P;if(A(R)||R.keyCode!=j.BACKSPACE){return}O=m.getRng();N=O.startContainer;S=O.startOffset;M=e.getRoot();P=N;if(!O.collapsed||S!==0){return}while(P&&P.parentNode&&P.parentNode.firstChild==P&&P.parentNode!=M){P=P.parentNode}if(P.tagName==="BLOCKQUOTE"){Q.formatter.toggle("blockquote",null,P);O=e.createRng();O.setStart(N,0);O.setEnd(N,0);m.setRng(O)}})}function G(){function M(){a._refreshContentEditable();B("StyleWithCSS",false);B("enableInlineTableEditing",false);if(!I.object_resizing){B("enableObjectResizing",false)}}if(!I.readonly){a.onBeforeExecCommand.add(M);a.onMouseDown.add(M)}}function t(){function M(N,O){F(e.select("a"),function(R){var P=R.parentNode,Q=e.getRoot();if(P.lastChild===R){while(P&&!e.isBlock(P)){if(P.parentNode.lastChild!==P||P===Q){return}P=P.parentNode}e.add(P,"br",{"data-mce-bogus":1})}})}a.onExecCommand.add(function(N,O){if(O==="CreateLink"){M(N)}});a.onSetContent.add(m.onSetContent.add(M))}function n(){if(I.forced_root_block){a.onInit.add(function(){B("DefaultParagraphSeparator",I.forced_root_block)})}}function q(){function M(O,N){if(!O||!N.initial){a.execCommand("mceRepaint")}}a.onUndo.add(M);a.onRedo.add(M);a.onSetContent.add(M)}function i(){a.onKeyDown.add(function(N,O){var M;if(!A(O)&&O.keyCode==f){M=N.getDoc().selection.createRange();if(M&&M.item){O.preventDefault();N.undoManager.beforeChange();e.remove(M.item(0));N.undoManager.add()}}})}function s(){var M;if(o()>=10){M="";F("p div h1 h2 h3 h4 h5 h6".split(" "),function(N,O){M+=(O>0?",":"")+N+":empty"});a.contentStyles.push(M+"{padding-right: 1px !important}")}}function v(){var O,N,ae,M,Z,ac,aa,ad,P,Q,ab,X,W,Y=document,U=a.getDoc();if(!I.object_resizing||I.webkit_fake_resize===false){return}B("enableObjectResizing",false);ab={n:[0.5,0,0,-1],e:[1,0.5,1,0],s:[0.5,1,0,1],w:[0,0.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};function S(ai){var ah,ag;ah=ai.screenX-ac;ag=ai.screenY-aa;X=ah*Z[2]+ad;W=ag*Z[3]+P;X=X<5?5:X;W=W<5?5:W;if(j.modifierPressed(ai)||(ae.nodeName=="IMG"&&Z[2]*Z[3]!==0)){X=Math.round(W/Q);W=Math.round(X*Q)}e.setStyles(M,{width:X,height:W});if(Z[2]<0&&M.clientWidth<=X){e.setStyle(M,"left",O+(ad-X))}if(Z[3]<0&&M.clientHeight<=W){e.setStyle(M,"top",N+(P-W))}}function af(){function ag(ah,ai){if(ai){if(ae.style[ah]||!a.schema.isValid(ae.nodeName.toLowerCase(),ah)){e.setStyle(ae,ah,ai)}else{e.setAttrib(ae,ah,ai)}}}ag("width",X);ag("height",W);e.unbind(U,"mousemove",S);e.unbind(U,"mouseup",af);if(Y!=U){e.unbind(Y,"mousemove",S);e.unbind(Y,"mouseup",af)}e.remove(M);R(ae)}function R(aj){var ah,ai,ag;T();ah=e.getPos(aj);O=ah.x;N=ah.y;ai=aj.offsetWidth;ag=aj.offsetHeight;if(ae!=aj){ae=aj;X=W=0}F(ab,function(am,ak){var al;al=e.get("mceResizeHandle"+ak);if(!al){al=e.add(U.documentElement,"div",{id:"mceResizeHandle"+ak,"class":"mceResizeHandle",style:"cursor:"+ak+"-resize; margin:0; padding:0"});e.bind(al,"mousedown",function(an){an.preventDefault();af();ac=an.screenX;aa=an.screenY;ad=ae.clientWidth;P=ae.clientHeight;Q=P/ad;Z=am;M=ae.cloneNode(true);e.addClass(M,"mceClonedResizable");e.setStyles(M,{left:O,top:N,margin:0});U.documentElement.appendChild(M);e.bind(U,"mousemove",S);e.bind(U,"mouseup",af);if(Y!=U){e.bind(Y,"mousemove",S);e.bind(Y,"mouseup",af)}})}else{e.show(al)}e.setStyles(al,{left:(ai*am[0]+O)-(al.offsetWidth/2),top:(ag*am[1]+N)-(al.offsetHeight/2)})});if(!tinymce.isOpera&&ae.nodeName=="IMG"){ae.setAttribute("data-mce-selected","1")}}function T(){if(ae){ae.removeAttribute("data-mce-selected")}for(var ag in ab){e.hide("mceResizeHandle"+ag)}}a.contentStyles.push(".mceResizeHandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}.mceResizeHandle:hover {background: #000}img[data-mce-selected] {outline: 1px solid black}img.mceClonedResizable, table.mceClonedResizable {position: absolute;outline: 1px dashed black;opacity: .5;z-index: 10000}");function V(){var ag=e.getParent(m.getNode(),"table,img");F(e.select("img[data-mce-selected]"),function(ah){ah.removeAttribute("data-mce-selected")});if(ag){R(ag)}else{T()}}a.onNodeChange.add(V);e.bind(U,"selectionchange",V);a.serializer.addAttributeFilter("data-mce-selected",function(ag,ah){var ai=ag.length;while(ai--){ag[ai].attr(ah,null)}})}function E(){if(o()<9){x.addNodeFilter("noscript",function(M){var N=M.length,O,P;while(N--){O=M[N];P=O.firstChild;if(P){O.attr("data-mce-innertext",P.value)}}});p.addNodeFilter("noscript",function(M){var N=M.length,O,Q,P;while(N--){O=M[N];Q=M[N].firstChild;if(Q){Q.value=tinymce.html.Entities.decode(Q.value)}else{P=O.attributes.map["data-mce-innertext"];if(P){O.attr("data-mce-innertext",null);Q=new tinymce.html.Node("#text",3);Q.value=P;Q.raw=true;O.append(Q)}}}})}}function l(){a.contentStyles.push("body {min-height: 100px}");a.onClick.add(function(M,N){if(N.target.nodeName=="HTML"){a.execCommand("SelectAll");a.selection.collapse(true);a.nodeChanged()}})}u();H();r();if(tinymce.isWebKit){d();K();L();h();n();if(tinymce.isIDevice){b()}else{v();J()}}if(tinymce.isIE&&!tinymce.isIE11){C();y();D();g();i();s();E()}if(tinymce.isIE11){l()}if(tinymce.isGecko&&!tinymce.isIE11){C();z();c();G();t();q()}if(tinymce.isOpera){v()}};(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':""","'":"'","<":"<",">":">","&":"&"};d={"<":"<",">":">","&":"&",""":'"',"'":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(s){var z={},q,n,x,r,v=d.url_converter,y=d.url_converter_scope||this;function p(D,G){var F,C,B,E;if(z["border-image"]==="none"){delete z["border-image"]}F=z[D+"-top"+G];if(!F){return}C=z[D+"-right"+G];if(F!=C){return}B=z[D+"-bottom"+G];if(C!=B){return}E=z[D+"-left"+G];if(B!=E){return}z[D+G]=E;delete z[D+"-top"+G];delete z[D+"-right"+G];delete z[D+"-bottom"+G];delete z[D+"-left"+G]}function u(C){var D=z[C],B;if(!D||D.indexOf(" ")<0){return}D=D.split(" ");B=D.length;while(B--){if(D[B]!==D[0]){return false}}z[C]=D[0];return true}function A(D,C,B,E){if(!u(C)){return}if(!u(B)){return}if(!u(E)){return}z[D]=z[C]+" "+z[B]+" "+z[E];delete z[C];delete z[B];delete z[E]}function t(B){r=true;return a[B]}function i(C,B){if(r){C=C.replace(/\uFEFF[0-9]/g,function(D){return a[D]})}if(!B){C=C.replace(/\\([\'\";:])/g,"$1")}return C}function o(C,B,F,E,G,D){G=G||D;if(G){G=i(G);return"'"+G.replace(/\'/g,"\\'")+"'"}B=i(B||F||E);if(v){B=v.call(y,B,"style")}return"url('"+B.replace(/\'/g,"\\'")+"')"}if(s){s=s.replace(/\\[\"\';:\uFEFF]/g,t).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(B){return B.replace(/[;:]/g,t)});while(q=b.exec(s)){n=q[1].replace(l,"").toLowerCase();x=q[2].replace(l,"");if(n&&x.length>0){if(n==="font-weight"&&x==="700"){x="bold"}else{if(n==="color"||n==="background-color"){x=x.toLowerCase()}}x=x.replace(k,c);x=x.replace(h,o);z[n]=r?i(x,true):x}b.lastIndex=q.index+q[0].length}p("border","");p("border","-width");p("border","-color");p("border","-style");p("padding","");p("margin","");A("border","border-width","border-style","border-color");if(z.border==="medium none"){delete z.border}}return z},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(f){var a={},e=f.makeMap,g=f.each;function d(j,i){return j.split(i||",")}function h(m,l){var j,k={};function i(n){return n.replace(/[A-Z]+/g,function(o){return i(m[o])})}for(j in m){if(m.hasOwnProperty(j)){m[j]=i(m[j])}}i(l).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(q,o,n,p){n=d(n,"|");k[o]={attributes:e(n),attributesOrder:n,children:e(p,"|",{"#comment":{}})}});return k}function b(){var i=a.html5;if(!i){i=a.html5=h({A:"id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video|wbr",C:"#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video"},"html[A|manifest][body|head]head[A][base|command|link|meta|noscript|script|style|title]title[A][#]base[A|href|target][]link[A|href|rel|media|type|sizes][]meta[A|http-equiv|name|content|charset][]style[A|type|media|scoped][#]script[A|charset|type|src|defer|async][#]noscript[A][C]body[A][C]section[A][C]nav[A][C]article[A][C]aside[A][C]h1[A][B]h2[A][B]h3[A][B]h4[A][B]h5[A][B]h6[A][B]hgroup[A][h1|h2|h3|h4|h5|h6]header[A][C]footer[A][C]address[A][C]p[A][B]br[A][]pre[A][B]dialog[A][dd|dt]blockquote[A|cite][C]ol[A|start|reversed][li]ul[A][li]li[A|value][C]dl[A][dd|dt]dt[A][B]dd[A][C]a[A|href|target|ping|rel|media|type][B]em[A][B]strong[A][B]small[A][B]cite[A][B]q[A|cite][B]dfn[A][B]abbr[A][B]code[A][B]var[A][B]samp[A][B]kbd[A][B]sub[A][B]sup[A][B]i[A][B]b[A][B]mark[A][B]progress[A|value|max][B]meter[A|value|min|max|low|high|optimum][B]time[A|datetime][B]ruby[A][B|rt|rp]rt[A][B]rp[A][B]bdo[A][B]span[A][B]ins[A|cite|datetime][B]del[A|cite|datetime][B]figure[A][C|legend|figcaption]figcaption[A][C]img[A|alt|src|height|width|usemap|ismap][]iframe[A|name|src|height|width|sandbox|seamless][]embed[A|src|height|width|type][]object[A|data|type|height|width|usemap|name|form|classid][param]param[A|name|value][]details[A|open][C|legend]command[A|type|label|icon|disabled|checked|radiogroup][]menu[A|type|label][C|li]legend[A][C|B]div[A][C]source[A|src|type|media][]audio[A|src|autobuffer|autoplay|loop|controls][source]video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]hr[A][]form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]fieldset[A|disabled|form|name][C|legend]label[A|form|for][B]input[A|type|accept|alt|autocomplete|autofocus|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value|name][]button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]datalist[A][B|option]optgroup[A|disabled|label][option]option[A|disabled|selected|label|value][]textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]keygen[A|autofocus|challenge|disabled|form|keytype|name][]output[A|for|form|name][B]canvas[A|width|height][]map[A|name][B|C]area[A|shape|coords|href|alt|target|media|rel|ping|type][]mathml[A][]svg[A][]table[A|border][caption|colgroup|thead|tfoot|tbody|tr]caption[A][C]colgroup[A|span][col]col[A|span][]thead[A][tr]tfoot[A][tr]tbody[A][tr]tr[A][th|td]th[A|headers|rowspan|colspan|scope][B]td[A|headers|rowspan|colspan][C]wbr[A][]")}return i}function c(){var i=a.html4;if(!i){i=a.html4=h({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]")}return i}f.html.Schema=function(A){var u=this,s={},k={},j=[],D,y;var o,q,z,r,v,n,p={};function m(F,E,H){var G=A[F];if(!G){G=a[F];if(!G){G=e(E," ",e(E.toUpperCase()," "));G=f.extend(G,H);a[F]=G}}else{G=e(G,",",e(G.toUpperCase()," "))}return G}A=A||{};y=A.schema=="html5"?b():c();if(A.verify_html===false){A.valid_elements="*[*]"}if(A.valid_styles){D={};g(A.valid_styles,function(F,E){D[E]=f.explode(F)})}o=m("whitespace_elements","pre script noscript style textarea");q=m("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr");z=m("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr");r=m("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls");n=m("non_empty_elements","td th iframe video audio object script",z);textBlockElementsMap=m("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure");v=m("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup",textBlockElementsMap);function i(E){return new RegExp("^"+E.replace(/([?+*])/g,".$1")+"$")}function C(L){var K,G,Z,V,aa,F,I,U,X,Q,Y,ac,O,J,W,E,S,H,ab,ad,P,T,N=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,R=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,M=/[*?+]/;if(L){L=d(L);if(s["@"]){S=s["@"].attributes;H=s["@"].attributesOrder}for(K=0,G=L.length;K=0){for(U=A.length-1;U>=V;U--){T=A[U];if(T.valid){n.end(T.name)}}A.length=V}}function p(U,T,Y,X,W){var Z,V;T=T.toLowerCase();Y=T in H?T:j(Y||X||W||"");if(v&&!z&&T.indexOf("data-")!==0){Z=P[T];if(!Z&&F){V=F.length;while(V--){Z=F[V];if(Z.pattern.test(T)){break}}if(V===-1){Z=null}}if(!Z){return}if(Z.validValues&&!(Y in Z.validValues)){return}}N.map[T]=Y;N.push({name:T,value:Y})}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g");D=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;K={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};M=e.getShortEndedElements();J=c.self_closing_elements||e.getSelfClosingElements();H=e.getBoolAttrs();v=c.validate;s=c.remove_internals;y=c.fix_self_closing;q=a.isIE;o=/^:/;while(g=l.exec(E)){if(G0&&A[A.length-1].name===I){u(I)}if(!v||(m=e.getElementRule(I))){k=true;if(v){P=m.attributes;F=m.attributePatterns}if(R=g[8]){z=R.indexOf("data-mce-type")!==-1;if(z&&s){k=false}N=[];N.map={};R.replace(D,p)}else{N=[];N.map={}}if(v&&!z){S=m.attributesRequired;L=m.attributesDefault;f=m.attributesForced;if(f){Q=f.length;while(Q--){t=f[Q];r=t.name;h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}if(L){Q=L.length;while(Q--){t=L[Q];r=t.name;if(!(r in N.map)){h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}}if(S){Q=S.length;while(Q--){if(S[Q] in N.map){break}}if(Q===-1){k=false}}if(N.map["data-mce-bogus"]){k=false}}if(k){n.start(I,N,O)}}else{k=false}if(B=K[I]){B.lastIndex=G=g.index+g[0].length;if(g=B.exec(E)){if(k){C=E.substr(G,g.index-G)}G=g.index+g[0].length}else{C=E.substr(G);G=E.length}if(k&&C.length>0){n.text(C,true)}if(k){n.end(I)}l.lastIndex=G;continue}if(!O){if(!R||R.indexOf("/")!=R.length-1){A.push({name:I,valid:k})}else{if(k){n.end(I)}}}}else{if(I=g[1]){n.comment(I)}else{if(I=g[2]){n.cdata(I)}else{if(I=g[3]){n.doctype(I)}else{if(I=g[4]){n.pi(I,g[5])}}}}}}G=g.index+g[0].length}if(G=0;Q--){I=A[Q];if(I.valid){n.end(I.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h1){x.reverse();A=o=f.filterNode(x[0].clone());for(u=0;u0){Q.value=l;Q=Q.prev}else{O=Q.prev;Q.remove();Q=O}}}function H(O){var P,l={};for(P in O){if(P!=="li"&&P!="p"){l[P]=O[P]}}return l}n=new b.html.SaxParser({validate:z,self_closing_elements:H(h.getSelfClosingElements()),cdata:function(l){B.append(K("#cdata",4)).value=l},text:function(P,l){var O;if(!L){P=P.replace(k," ");if(B.lastChild&&o[B.lastChild.name]){P=P.replace(E,"")}}if(P.length!==0){O=K("#text",3);O.raw=!!l;B.append(O).value=P}},comment:function(l){B.append(K("#comment",8)).value=l},pi:function(l,O){B.append(K(l,7)).value=O;I(B)},doctype:function(O){var l;l=B.append(K("#doctype",10));l.value=O;I(B)},start:function(l,W,P){var U,R,Q,O,S,X,V,T;Q=z?h.getElementRule(l):{};if(Q){U=K(Q.outputName||l,1);U.attributes=W;U.shortEnded=P;B.append(U);T=p[B.name];if(T&&p[U.name]&&!T[U.name]){M.push(U)}R=d.length;while(R--){S=d[R].name;if(S in W.map){F=c[S];if(F){F.push(U)}else{c[S]=[U]}}}if(o[l]){I(U)}if(!P){B=U}if(!L&&s[l]){L=true}}},end:function(l){var S,P,R,O,Q;P=z?h.getElementRule(l):{};if(P){if(o[l]){if(!L){S=B.firstChild;if(S&&S.type===3){R=S.value.replace(E,"");if(R.length>0){S.value=R;S=S.next}else{O=S.next;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.next;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}S=B.lastChild;if(S&&S.type===3){R=S.value.replace(t,"");if(R.length>0){S.value=R;S=S.prev}else{O=S.prev;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.prev;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}}}if(L&&s[l]){L=false}if(P.removeEmpty||P.paddEmpty){if(B.isEmpty(u)){if(P.paddEmpty){B.empty().append(new a("#text","3")).value="\u00a0"}else{if(!B.attributes.map.name&&!B.attributes.map.id){Q=B.parent;B.empty().remove();B=Q;return}}}}B=B.parent}}},h);J=B=new a(m.context||g.root_name,11);n.parse(v);if(z&&M.length){if(!m.context){j(M)}else{m.invalid=true}}if(q&&J.name=="body"){G()}if(!m.invalid){for(N in i){F=e[N];A=i[N];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(D=0,C=F.length;D0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("")},comment:function(h){c.push("")},pi:function(h,i){if(i){c.push("")}else{c.push("")}if(a){c.push("\n")}},doctype:function(h){c.push("",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n=8;k.boxModel=!e.isIE||o.compatMode=="CSS1Compat"||k.stdMode;k.hasOuterHTML="outerHTML" in o.createElement("a");k.settings=l=e.extend({keep_values:false,hex_colors:1},l);k.schema=l.schema;k.styles=new e.html.Styles({url_converter:l.url_converter,url_converter_scope:l.url_converter_scope},l.schema);if(e.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(m){k.cssFlicker=true}}k.fixDoc(o);k.events=l.ownEvents?new e.dom.EventUtils(l.proxy):e.dom.Event;e.addUnload(k.destroy,k);n=l.schema?l.schema.getBlockElements():{};k.isBlock=function(q){if(!q){return false}var p=q.nodeType;if(p){return !!(p===1&&n[q.nodeName])}return !!n[q]}},fixDoc:function(k){var j=this.settings,i;if(b&&!e.isIE11&&j.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(l){k.createElement(l)});for(i in j.schema.getCustomElements()){k.createElement(i)}}},clone:function(k,i){var j=this,m,l;if(!b||e.isIE11||k.nodeType!==1||i){return k.cloneNode(i)}l=j.doc;if(!i){m=l.createElement(k.nodeName);g(j.getAttribs(k),function(n){j.setAttrib(m,n.nodeName,j.getAttrib(k,n.nodeName))});return m}return m.firstChild},getRoot:function(){var i=this,j=i.settings;return(j&&i.get(j.root_element))||i.doc.body},getViewPort:function(j){var k,i;j=!j?this.win:j;k=j.document;i=this.boxModel?k.documentElement:k.body;return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop,w:j.innerWidth||i.clientWidth,h:j.innerHeight||i.clientHeight}},getRect:function(l){var k,i=this,j;l=i.get(l);k=i.getPos(l);j=i.getSize(l);return{x:k.x,y:k.y,w:j.w,h:j.h}},getSize:function(l){var j=this,i,k;l=j.get(l);i=j.getStyle(l,"width");k=j.getStyle(l,"height");if(i.indexOf("px")===-1){i=0}if(k.indexOf("px")===-1){k=0}return{w:parseInt(i,10)||l.offsetWidth||l.clientWidth,h:parseInt(k,10)||l.offsetHeight||l.clientHeight}},getParent:function(k,j,i){return this.getParents(k,j,i,false)},getParents:function(s,m,k,q){var j=this,i,l=j.settings,p=[];s=j.get(s);q=q===undefined;if(l.strict_root){k=k||j.getRoot()}if(d(m,"string")){i=m;if(m==="*"){m=function(o){return o.nodeType==1}}else{m=function(o){return j.is(o,i)}}}while(s){if(s==k||!s.nodeType||s.nodeType===9){break}if(!m||m(s)){if(q){p.push(s)}else{return s}}s=s.parentNode}return q?p:null},get:function(i){var j;if(i&&this.doc&&typeof(i)=="string"){j=i;i=this.doc.getElementById(i);if(i&&i.id!==j){return this.doc.getElementsByName(j)[1]}}return i},getNext:function(j,i){return this._findSib(j,i,"nextSibling")},getPrev:function(j,i){return this._findSib(j,i,"previousSibling")},select:function(k,j){var i=this;return e.dom.Sizzle(k,i.get(j)||i.get(i.settings.root_element)||i.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(c.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return e.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(l,o,i,k,m){var j=this;return this.run(l,function(r){var q,n;q=d(o,"string")?j.doc.createElement(o):o;j.setAttribs(q,i);if(k){if(k.nodeType){q.appendChild(k)}else{j.setHTML(q,k)}}return !m?r.appendChild(q):q})},create:function(k,i,j){return this.add(this.doc.createElement(k),k,i,j,1)},createHTML:function(q,i,m){var p="",l=this,j;p+="<"+q;for(j in i){if(i.hasOwnProperty(j)){p+=" "+j+'="'+l.encode(i[j])+'"'}}if(typeof(m)!="undefined"){return p+">"+m+""}return p+" />"},remove:function(i,j){return this.run(i,function(l){var m,k=l.parentNode;if(!k){return null}if(j){while(m=l.firstChild){if(!e.isIE||m.nodeType!==3||m.nodeValue){k.insertBefore(m,l)}else{l.removeChild(m)}}}return k.removeChild(l)})},setStyle:function(l,i,j){var k=this;return k.run(l,function(o){var n,m;n=o.style;i=i.replace(/-(\D)/g,function(q,p){return p.toUpperCase()});if(k.pixelStyles.test(i)&&(e.is(j,"number")||/^[\-0-9\.]+$/.test(j))){j+="px"}switch(i){case"opacity":if(b&&!e.isIE11){n.filter=j===""?"":"alpha(opacity="+(j*100)+")";if(!l.currentStyle||!l.currentStyle.hasLayout){n.display="inline-block"}}n[i]=n["-moz-opacity"]=n["-khtml-opacity"]=j||"";break;case"float":(b&&!e.isIE11)?n.styleFloat=j:n.cssFloat=j;break;default:n[i]=j||""}if(k.settings.update_styles){k.setAttrib(o,"data-mce-style")}})},getStyle:function(l,i,k){l=this.get(l);if(!l){return}if(this.doc.defaultView&&k){i=i.replace(/[A-Z]/g,function(m){return"-"+m});try{return this.doc.defaultView.getComputedStyle(l,null).getPropertyValue(i)}catch(j){return null}}i=i.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(i=="float"){i=b?"styleFloat":"cssFloat"}if(l.currentStyle&&k){return l.currentStyle[i]}return l.style?l.style[i]:undefined},setStyles:function(l,m){var j=this,k=j.settings,i;i=k.update_styles;k.update_styles=0;g(m,function(o,p){j.setStyle(l,p,o)});k.update_styles=i;if(k.update_styles){j.setAttrib(l,k.cssText)}},removeAllAttribs:function(i){return this.run(i,function(l){var k,j=l.attributes;for(k=j.length-1;k>=0;k--){l.removeAttributeNode(j.item(k))}})},setAttrib:function(k,l,i){var j=this;if(!k||!l){return}if(j.settings.strict){l=l.toLowerCase()}return this.run(k,function(p){var o=j.settings;var m=p.getAttribute(l);if(i!==null){switch(l){case"style":if(!d(i,"string")){g(i,function(q,r){j.setStyle(p,r,q)});return}if(o.keep_values){if(i&&!j._isRes(i)){p.setAttribute("data-mce-style",i,2)}else{p.removeAttribute("data-mce-style",2)}}p.style.cssText=i;break;case"class":p.className=i||"";break;case"src":case"href":if(o.keep_values){if(o.url_converter){i=o.url_converter.call(o.url_converter_scope||j,i,l,p)}j.setAttrib(p,"data-mce-"+l,i,2)}break;case"shape":p.setAttribute("data-mce-style",i);break}}if(d(i)&&i!==null&&i.length!==0){p.setAttribute(l,""+i,2)}else{p.removeAttribute(l,2)}if(tinyMCE.activeEditor&&m!=i){var n=tinyMCE.activeEditor;n.onSetAttrib.dispatch(n,p,l,i)}})},setAttribs:function(j,k){var i=this;return this.run(j,function(l){g(k,function(m,o){i.setAttrib(l,o,m)})})},getAttrib:function(m,o,k){var i,j=this,l;m=j.get(m);if(!m||m.nodeType!==1){return k===l?false:k}if(!d(k)){k=""}if(/^(src|href|style|coords|shape)$/.test(o)){i=m.getAttribute("data-mce-"+o);if(i){return i}}if(b&&j.props[o]){i=m[j.props[o]];i=i&&i.nodeValue?i.nodeValue:i}if(!i){i=m.getAttribute(o,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)){if(m[j.props[o]]===true&&i===""){return o}return i?o:""}if(m.nodeName==="FORM"&&m.getAttributeNode(o)){return m.getAttributeNode(o).nodeValue}if(o==="style"){i=i||m.style.cssText;if(i){i=j.serializeStyle(j.parseStyle(i),m.nodeName);if(j.settings.keep_values&&!j._isRes(i)){m.setAttribute("data-mce-style",i)}}}if(f&&o==="class"&&i){i=i.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(o){case"rowspan":case"colspan":if(i===1){i=""}break;case"size":if(i==="+0"||i===20||i===0){i=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(i===0){i=""}break;case"hspace":if(i===-1){i=""}break;case"maxlength":case"tabindex":if(i===32768||i===2147483647||i==="32768"){i=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(i===65535){return o}return k;case"shape":i=i.toLowerCase();break;default:if(o.indexOf("on")===0&&i){i=e._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+i)}}}return(i!==l&&i!==null&&i!=="")?""+i:k},getPos:function(q,l){var j=this,i=0,p=0,m,o=j.doc,k;q=j.get(q);l=l||o.body;if(q){if(q.getBoundingClientRect){q=q.getBoundingClientRect();m=j.boxModel?o.documentElement:o.body;i=q.left+(o.documentElement.scrollLeft||o.body.scrollLeft)-m.clientTop;p=q.top+(o.documentElement.scrollTop||o.body.scrollTop)-m.clientLeft;return{x:i,y:p}}k=q;while(k&&k!=l&&k.nodeType){i+=k.offsetLeft||0;p+=k.offsetTop||0;k=k.offsetParent}k=q.parentNode;while(k&&k!=l&&k.nodeType){i-=k.scrollLeft||0;p-=k.scrollTop||0;k=k.parentNode}}return{x:i,y:p}},parseStyle:function(i){return this.styles.parse(i)},serializeStyle:function(j,i){return this.styles.serialize(j,i)},addStyle:function(j){var k=this.doc,i;styleElm=k.getElementById("mceDefaultStyles");if(!styleElm){styleElm=k.createElement("style"),styleElm.id="mceDefaultStyles";styleElm.type="text/css";i=k.getElementsByTagName("head")[0];if(i.firstChild){i.insertBefore(styleElm,i.firstChild)}else{i.appendChild(styleElm)}}if(styleElm.styleSheet){styleElm.styleSheet.cssText+=j}else{styleElm.appendChild(k.createTextNode(j))}},loadCSS:function(i){var k=this,l=k.doc,j;if(!i){i=""}j=l.getElementsByTagName("head")[0];g(i.split(","),function(m){var n;if(k.files[m]){return}k.files[m]=true;n=k.create("link",{rel:"stylesheet",href:e._addVer(m)});if(b&&!e.isIE11&&l.documentMode&&l.recalc){n.onload=function(){if(l.recalc){l.recalc()}n.onload=null}}j.appendChild(n)})},addClass:function(i,j){return this.run(i,function(k){var l;if(!j){return 0}if(this.hasClass(k,j)){return k.className}l=this.removeClass(k,j);return k.className=(l!=""?(l+" "):"")+j})},removeClass:function(k,l){var i=this,j;return i.run(k,function(n){var m;if(i.hasClass(n,l)){if(!j){j=new RegExp("(^|\\s+)"+l+"(\\s+|$)","g")}m=n.className.replace(j," ");m=e.trim(m!=" "?m:"");n.className=m;if(!m){n.removeAttribute("class");n.removeAttribute("className")}return m}return n.className})},hasClass:function(j,i){j=this.get(j);if(!j||!i){return false}return(" "+j.className+" ").indexOf(" "+i+" ")!==-1},show:function(i){return this.setStyle(i,"display","block")},hide:function(i){return this.setStyle(i,"display","none")},isHidden:function(i){i=this.get(i);return !i||i.style.display=="none"||this.getStyle(i,"display")=="none"},uniqueId:function(i){return(!i?"mce_":i)+(this.counter++)},setHTML:function(k,j){var i=this;return i.run(k,function(m){if(b){while(m.firstChild){m.removeChild(m.firstChild)}try{m.innerHTML="
"+j;m.removeChild(m.firstChild)}catch(l){var n=i.create("div");n.innerHTML="
"+j;g(e.grep(n.childNodes),function(p,o){if(o&&m.canHaveHTML){m.appendChild(p)}})}}else{m.innerHTML=j}return j})},getOuterHTML:function(k){var j,i=this;k=i.get(k);if(!k){return null}if(k.nodeType===1&&i.hasOuterHTML){return k.outerHTML}j=(k.ownerDocument||i.doc).createElement("body");j.appendChild(k.cloneNode(true));return j.innerHTML},setOuterHTML:function(l,j,m){var i=this;function k(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){i.insertAfter(s.cloneNode(true),p);s=s.previousSibling}i.remove(p)}return this.run(l,function(o){o=i.get(o);if(o.nodeType==1){m=m||o.ownerDocument||i.doc;if(b){try{if(b&&o.nodeType==1){o.outerHTML=j}else{k(o,j,m)}}catch(n){k(o,j,m)}}else{k(o,j,m)}}})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(i,j){j=this.get(j);return this.run(i,function(l){var k,m;k=j.parentNode;m=j.nextSibling;if(m){k.insertBefore(l,m)}else{k.appendChild(l)}return l})},replace:function(m,l,i){var j=this;if(d(l,"array")){m=m.cloneNode(true)}return j.run(l,function(k){if(i){g(e.grep(k.childNodes),function(n){m.appendChild(n)})}return k.parentNode.replaceChild(m,k)})},rename:function(l,i){var k=this,j;if(l.nodeName!=i.toUpperCase()){j=k.create(i);g(k.getAttribs(l),function(m){k.setAttrib(j,m.nodeName,k.getAttrib(l,m.nodeName))});k.replace(j,l,1)}return j||l},findCommonAncestor:function(k,i){var l=k,j;while(l){j=i;while(j&&l!=j){j=j.parentNode}if(l==j){break}l=l.parentNode}if(!l&&k.ownerDocument){return k.ownerDocument.documentElement}return l},toHex:function(i){var k=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(i);function j(l){l=parseInt(l,10).toString(16);return l.length>1?l:"0"+l}if(k){i="#"+j(k[1])+j(k[2])+j(k[3]);return i}return i},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(i){g(i.imports,function(s){q(s)});g(i.cssRules||i.rules,function(t){switch(t.type||1){case 1:if(t.selectorText){g(t.selectorText.split(","),function(r){r=r.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(r)||!/\.[\w\-]+$/.test(r)){return}l=r;r=e._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",r);if(p&&!(r=p(r,l))){return}if(!o[r]){j.push({"class":r});o[r]=1}})}break;case 3:try{q(t.styleSheet)}catch(s){}break}})}try{g(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(l,k,j){var i=this,m;if(i.doc&&typeof(l)==="string"){l=i.get(l)}if(!l){return false}j=j||this;if(!l.nodeType&&(l.length||l.length===0)){m=[];g(l,function(o,n){if(o){if(typeof(o)=="string"){o=i.doc.getElementById(o)}m.push(k.call(j,o,n))}});return m}return k.call(j,l)},getAttribs:function(j){var i;j=this.get(j);if(!j){return[]}if(b){i=[];if(j.nodeName=="OBJECT"){return j.attributes}if(j.nodeName==="OPTION"&&this.getAttrib(j,"selected")){i.push({specified:1,nodeName:"selected"})}j.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(k){i.push({specified:1,nodeName:k})});return i}return j.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p=0;m=m.firstChild;if(m){j=new e.dom.TreeWalker(m,m.parentNode);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){if(l==="br"){p++;continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if(q==8){return false}if((q===3&&!a.test(m.nodeValue))){return false}}while(m=j.next())}return p<=1},destroy:function(j){var i=this;i.win=i.doc=i.root=i.events=i.frag=null;if(!j){e.removeUnload(i.destroy)}},createRng:function(){var i=this.doc;return i.createRange?i.createRange():new e.dom.Range(this)},nodeIndex:function(m,n){var i=0,k,l,j;if(m){for(k=m.nodeType,m=m.previousSibling,l=m;m;m=m.previousSibling){j=m.nodeType;if(n&&j==3){if(j==k||!m.nodeValue.length){continue}}i++;k=j}}return i},split:function(m,l,p){var q=this,i=q.createRng(),n,k,o;function j(v){var t,s=v.childNodes,u=v.nodeType;function x(A){var z=A.previousSibling&&A.previousSibling.nodeName=="SPAN";var y=A.nextSibling&&A.nextSibling.nodeName=="SPAN";return z&&y}if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=s.length-1;t>=0;t--){j(s[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){var r=e.trim(v.nodeValue).length;if(!q.isBlock(v.parentNode)||r>0||r===0&&x(v)){return}}else{if(u==1){s=v.childNodes;if(s.length==1&&s[0]&&s[0].nodeType==1&&s[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(s[0],v)}if(s.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}q.remove(v)}return v}if(m&&l){i.setStart(m.parentNode,q.nodeIndex(m));i.setEnd(l.parentNode,q.nodeIndex(l));n=i.extractContents();i=q.createRng();i.setStart(l.parentNode,q.nodeIndex(l)+1);i.setEnd(m.parentNode,q.nodeIndex(m)+1);k=i.extractContents();o=m.parentNode;o.insertBefore(j(n),m);if(p){o.replaceChild(p,l)}else{o.insertBefore(l,m)}o.insertBefore(j(k),m);q.remove(m);return p||l}},bind:function(l,i,k,j){return this.events.add(l,i,k,j||this)},unbind:function(k,i,j){return this.events.remove(k,i,j)},fire:function(k,j,i){return this.events.fire(k,j,i)},getContentEditable:function(j){var i;if(j.nodeType!=1){return null}i=j.getAttribute("data-mce-contenteditable");if(i&&i!=="inherit"){return i}return j.contentEditable!=="inherit"?j.contentEditable:null},_findSib:function(l,i,j){var k=this,m=i;if(l){if(d(m,"string")){m=function(n){return k.is(n,i)}}for(l=l[j];l;l=l[j]){if(m(l)){return l}}}return null},_isRes:function(i){return/^(top|left|bottom|right|width|height)/i.test(i)||/;\s*(top|left|bottom|right|width|height)/i.test(i)}});e.DOM=new e.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var O=this,e=c.doc,U=0,F=1,j=2,E=true,S=false,W="startOffset",h="startContainer",Q="endContainer",A="endOffset",k=tinymce.extend,n=c.nodeIndex;k(O,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:E,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:J,setEndBefore:K,setEndAfter:u,collapse:B,selectNode:y,selectNodeContents:G,compareBoundaryPoints:v,deleteContents:p,extractContents:I,cloneContents:d,insertNode:D,surroundContents:N,cloneRange:L,toStringIE:T});function x(){return e.createDocumentFragment()}function q(X,t){C(E,X,t)}function s(X,t){C(S,X,t)}function g(t){q(t.parentNode,n(t))}function J(t){q(t.parentNode,n(t)+1)}function K(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function B(t){if(t){O[Q]=O[h];O[A]=O[W]}else{O[h]=O[Q];O[W]=O[A]}O.collapsed=E}function y(t){g(t);u(t)}function G(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(aa,t){var ad=O[h],Y=O[W],ac=O[Q],X=O[A],ab=t.startContainer,af=t.startOffset,Z=t.endContainer,ae=t.endOffset;if(aa===0){return H(ad,Y,ab,af)}if(aa===1){return H(ac,X,ab,af)}if(aa===2){return H(ac,X,Z,ae)}if(aa===3){return H(ad,Y,Z,ae)}}function p(){l(j)}function I(){return l(U)}function d(){return l(F)}function D(aa){var X=this[h],t=this[W],Z,Y;if((X.nodeType===3||X.nodeType===4)&&X.nodeValue){if(!t){X.parentNode.insertBefore(aa,X)}else{if(t>=X.nodeValue.length){c.insertAfter(aa,X)}else{Z=X.splitText(t);X.parentNode.insertBefore(aa,Z)}}}else{if(X.childNodes.length>0){Y=X.childNodes[t]}if(Y){X.insertBefore(aa,Y)}else{X.appendChild(aa)}}}function N(X){var t=O.extractContents();O.insertNode(X);X.appendChild(t);O.selectNode(X)}function L(){return k(new b(c),{startContainer:O[h],startOffset:O[W],endContainer:O[Q],endOffset:O[A],collapsed:O.collapsed,commonAncestorContainer:O.commonAncestorContainer})}function P(t,X){var Y;if(t.nodeType==3){return t}if(X<0){return t}Y=t.firstChild;while(Y&&X>0){--X;Y=Y.nextSibling}if(Y){return Y}return t}function m(){return(O[h]==O[Q]&&O[W]==O[A])}function H(Z,ab,X,aa){var ac,Y,t,ad,af,ae;if(Z==X){if(ab==aa){return 0}if(ab0){O.collapse(X)}}else{O.collapse(X)}O.collapsed=m();O.commonAncestorContainer=c.findCommonAncestor(O[h],O[Q])}function l(ad){var ac,Z=0,af=0,X,ab,Y,aa,t,ae;if(O[h]==O[Q]){return f(ad)}for(ac=O[Q],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[h]){return r(ac,ad)}++Z}for(ac=O[h],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[Q]){return V(ac,ad)}++af}ab=af-Z;Y=O[h];while(ab>0){Y=Y.parentNode;ab--}aa=O[Q];while(ab<0){aa=aa.parentNode;ab++}for(t=Y.parentNode,ae=aa.parentNode;t!=ae;t=t.parentNode,ae=ae.parentNode){Y=t;aa=ae}return o(Y,aa,ad)}function f(ac){var ae,af,t,Y,Z,ad,aa,X,ab;if(ac!=j){ae=x()}if(O[W]==O[A]){return ae}if(O[h].nodeType==3){af=O[h].nodeValue;t=af.substring(O[W],O[A]);if(ac!=F){Y=O[h];X=O[W];ab=O[A]-O[W];if(X===0&&ab>=Y.nodeValue.length-1){Y.parentNode.removeChild(Y)}else{Y.deleteData(X,ab)}O.collapse(E)}if(ac==j){return}if(t.length>0){ae.appendChild(e.createTextNode(t))}return ae}Y=P(O[h],O[W]);Z=O[A]-O[W];while(Y&&Z>0){ad=Y.nextSibling;aa=z(Y,ac);if(ae){ae.appendChild(aa)}--Z;Y=ad}if(ac!=F){O.collapse(E)}return ae}function r(ad,aa){var ac,ab,X,t,Z,Y;if(aa!=j){ac=x()}ab=i(ad,aa);if(ac){ac.appendChild(ab)}X=n(ad);t=X-O[W];if(t<=0){if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}ab=ad.previousSibling;while(t>0){Z=ab.previousSibling;Y=z(ab,aa);if(ac){ac.insertBefore(Y,ac.firstChild)}--t;ab=Z}if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}function V(ab,aa){var ad,X,ac,t,Z,Y;if(aa!=j){ad=x()}ac=R(ab,aa);if(ad){ad.appendChild(ac)}X=n(ab);++X;t=O[A]-X;ac=ab.nextSibling;while(ac&&t>0){Z=ac.nextSibling;Y=z(ac,aa);if(ad){ad.appendChild(Y)}--t;ac=Z}if(aa!=F){O.setStartAfter(ab);O.collapse(E)}return ad}function o(ab,t,ae){var Y,ag,aa,ac,ad,X,af,Z;if(ae!=j){ag=x()}Y=R(ab,ae);if(ag){ag.appendChild(Y)}aa=ab.parentNode;ac=n(ab);ad=n(t);++ac;X=ad-ac;af=ab.nextSibling;while(X>0){Z=af.nextSibling;Y=z(af,ae);if(ag){ag.appendChild(Y)}af=Z;--X}Y=i(t,ae);if(ag){ag.appendChild(Y)}if(ae!=F){O.setStartAfter(ab);O.collapse(E)}return ag}function i(ac,ad){var Y=P(O[Q],O[A]-1),ae,ab,aa,t,X,Z=Y!=O[Q];if(Y==ac){return M(Y,Z,S,ad)}ae=Y.parentNode;ab=M(ae,S,S,ad);while(ae){while(Y){aa=Y.previousSibling;t=M(Y,Z,S,ad);if(ad!=j){ab.insertBefore(t,ab.firstChild)}Z=E;Y=aa}if(ae==ac){return ab}Y=ae.previousSibling;ae=ae.parentNode;X=M(ae,S,S,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function R(ac,ad){var Z=P(O[h],O[W]),aa=Z!=O[h],ae,ab,Y,t,X;if(Z==ac){return M(Z,aa,E,ad)}ae=Z.parentNode;ab=M(ae,S,E,ad);while(ae){while(Z){Y=Z.nextSibling;t=M(Z,aa,E,ad);if(ad!=j){ab.appendChild(t)}aa=E;Z=Y}if(ae==ac){return ab}Z=ae.nextSibling;ae=ae.parentNode;X=M(ae,S,E,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function M(t,aa,ad,ae){var Z,Y,ab,X,ac;if(aa){return z(t,ae)}if(t.nodeType==3){Z=t.nodeValue;if(ad){X=O[W];Y=Z.substring(X);ab=Z.substring(0,X)}else{X=O[A];Y=Z.substring(0,X);ab=Z.substring(X)}if(ae!=F){t.nodeValue=ab}if(ae==j){return}ac=c.clone(t,S);ac.nodeValue=Y;return ac}if(ae==j){return}return c.clone(t,S)}function z(X,t){if(t!=j){return t==F?c.clone(X,E):X}X.parentNode.removeChild(X)}function T(){return c.create("body",null,d()).outerText}return O}a.Range=b;b.prototype.toString=function(){return this.toStringIE()}})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",1)===0||s!=k.parentElement()){break}o++}}else{k.collapse(true);o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",-1)===0||s!=k.parentElement()){break}o++}}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,v,q,t,s=d.dom.doc,m=s.body,r,u;function j(C){var y,B,x,A,z;x=h.create("a");y=C?k:v;B=C?p:q;A=n.duplicate();if(y==s||y==s.documentElement){y=m;B=0}if(y.nodeType==3){y.parentNode.insertBefore(x,y);A.moveToElementText(x);A.moveStart("character",B);h.remove(x);n.setEndPoint(C?"StartToStart":"EndToEnd",A)}else{z=y.childNodes;if(z.length){if(B>=z.length){h.insertAfter(x,z[z.length-1])}else{y.insertBefore(x,z[B])}A.moveToElementText(x)}else{if(y.canHaveHTML){y.innerHTML="\uFEFF";x=y.firstChild;A.moveToElementText(x);A.collapse(f)}}n.setEndPoint(C?"StartToStart":"EndToEnd",A);h.remove(x)}}k=i.startContainer;p=i.startOffset;v=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==v&&k.nodeType==1){if(p==q&&!k.hasChildNodes()){if(k.canHaveHTML){t=k.previousSibling;if(t&&!t.hasChildNodes()&&h.isBlock(t)){t.innerHTML="\uFEFF"}else{t=null}k.innerHTML="\uFEFF\uFEFF";n.moveToElementText(k.lastChild);n.select();h.doc.selection.clear();k.innerHTML="";if(t){t.innerHTML=""}return}else{p=h.nodeIndex(k);k=k.parentNode}}if(p==q-1){try{u=k.childNodes[p];l=m.createControlRange();l.addElement(u);l.select();r=d.getRng();if(r.item&&u===r.item(0)){return}}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var n=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i="sizcache",o=0,r=Object.prototype.toString,h=false,g=true,q=/\\/g,u=/\r\n/g,x=/\W/;[0,0].sort(function(){g=false;return 0});var d=function(C,e,F,G){F=F||[];e=e||document;var I=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!C||typeof C!=="string"){return F}var z,K,N,y,J,M,L,E,B=true,A=d.isXML(e),D=[],H=C;do{n.exec("");z=n.exec(H);if(z){H=z[3];D.push(z[1]);if(z[2]){y=z[3];break}}}while(z);if(D.length>1&&j.exec(C)){if(D.length===2&&k.relative[D[0]]){K=s(D[0]+D[1],e,G)}else{K=k.relative[D[0]]?[e]:d(D.shift(),e);while(D.length){C=D.shift();if(k.relative[C]){C+=D.shift()}K=s(C,K,G)}}}else{if(!G&&D.length>1&&e.nodeType===9&&!A&&k.match.ID.test(D[0])&&!k.match.ID.test(D[D.length-1])){J=d.find(D.shift(),e,A);e=J.expr?d.filter(J.expr,J.set)[0]:J.set[0]}if(e){J=G?{expr:D.pop(),set:l(G)}:d.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&e.parentNode?e.parentNode:e,A);K=J.expr?d.filter(J.expr,J.set):J.set;if(D.length>0){N=l(K)}else{B=false}while(D.length){M=D.pop();L=M;if(!k.relative[M]){M=""}else{L=D.pop()}if(L==null){L=e}k.relative[M](N,L,A)}}else{N=D=[]}}if(!N){N=K}if(!N){d.error(M||C)}if(r.call(N)==="[object Array]"){if(!B){F.push.apply(F,N)}else{if(e&&e.nodeType===1){for(E=0;N[E]!=null;E++){if(N[E]&&(N[E]===true||N[E].nodeType===1&&d.contains(e,N[E]))){F.push(K[E])}}}else{for(E=0;N[E]!=null;E++){if(N[E]&&N[E].nodeType===1){F.push(K[E])}}}}}else{l(N,F)}if(y){d(y,I,F,G);d.uniqueSort(F)}return F};d.uniqueSort=function(y){if(p){h=g;y.sort(p);if(h){for(var e=1;e0};d.find=function(E,e,F){var D,z,B,A,C,y;if(!E){return[]}for(z=0,B=k.order.length;z":function(D,y){var C,B=typeof y==="string",z=0,e=D.length;if(B&&!x.test(y)){y=y.toLowerCase();for(;z=0)){if(!z){e.push(C)}}else{if(z){y[B]=false}}}}return false},ID:function(e){return e[1].replace(q,"")},TAG:function(y,e){return y[1].replace(q,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){d.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var y=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(y[1]+(y[2]||1))-0;e[3]=y[3]-0}else{if(e[2]){d.error(e[0])}}e[0]=o++;return e},ATTR:function(B,y,z,e,C,D){var A=B[1]=B[1].replace(q,"");if(!D&&k.attrMap[A]){B[1]=k.attrMap[A]}B[4]=(B[4]||B[5]||"").replace(q,"");if(B[2]==="~="){B[4]=" "+B[4]+" "}return B},PSEUDO:function(B,y,z,e,C){if(B[1]==="not"){if((n.exec(B[3])||"").length>1||/^\w/.test(B[3])){B[3]=d(B[3],null,null,y)}else{var A=d.filter(B[3],y,z,true^C);if(!z){e.push.apply(e,A)}return false}}else{if(k.match.POS.test(B[0])||k.match.CHILD.test(B[0])){return true}}return B},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(z,y,e){return !!d(e[3],z).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(z){var e=z.getAttribute("type"),y=z.type;return z.nodeName.toLowerCase()==="input"&&"text"===y&&(e===y||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===y.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===y.type},button:function(y){var e=y.nodeName.toLowerCase();return e==="input"&&"button"===y.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(y,e){return e===0},last:function(z,y,e,A){return y===A.length-1},even:function(y,e){return e%2===0},odd:function(y,e){return e%2===1},lt:function(z,y,e){return ye[3]-0},nth:function(z,y,e){return e[3]-0===y},eq:function(z,y,e){return e[3]-0===y}},filter:{PSEUDO:function(z,E,D,F){var e=E[1],y=k.filters[e];if(y){return y(z,D,E,F)}else{if(e==="contains"){return(z.textContent||z.innerText||b([z])||"").indexOf(E[3])>=0}else{if(e==="not"){var A=E[3];for(var C=0,B=A.length;C=0)}}},ID:function(y,e){return y.nodeType===1&&y.getAttribute("id")===e},TAG:function(y,e){return(e==="*"&&y.nodeType===1)||!!y.nodeName&&y.nodeName.toLowerCase()===e},CLASS:function(y,e){return(" "+(y.className||y.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(C,A){var z=A[1],e=d.attr?d.attr(C,z):k.attrHandle[z]?k.attrHandle[z](C):C[z]!=null?C[z]:C.getAttribute(z),D=e+"",B=A[2],y=A[4];return e==null?B==="!=":!B&&d.attr?e!=null:B==="="?D===y:B==="*="?D.indexOf(y)>=0:B==="~="?(" "+D+" ").indexOf(y)>=0:!y?D&&e!==false:B==="!="?D!==y:B==="^="?D.indexOf(y)===0:B==="$="?D.substr(D.length-y.length)===y:B==="|="?D===y||D.substr(0,y.length+1)===y+"-":false},POS:function(B,y,z,C){var e=y[2],A=k.setFilters[e];if(A){return A(B,z,y,C)}}}};var j=k.match.POS,c=function(y,e){return"\\"+(e-0+1)};for(var f in k.match){k.match[f]=new RegExp(k.match[f].source+(/(?![^\[]*\])(?![^\(]*\))/.source));k.leftMatch[f]=new RegExp(/(^(?:.|\r|\n)*?)/.source+k.match[f].source.replace(/\\(\d+)/g,c))}k.match.globalPOS=j;var l=function(y,e){y=Array.prototype.slice.call(y,0);if(e){e.push.apply(e,y);return e}return y};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(v){l=function(B,A){var z=0,y=A||[];if(r.call(B)==="[object Array]"){Array.prototype.push.apply(y,B)}else{if(typeof B.length==="number"){for(var e=B.length;z";e.insertBefore(y,e.firstChild);if(document.getElementById(z)){k.find.ID=function(B,C,D){if(typeof C.getElementById!=="undefined"&&!D){var A=C.getElementById(B[1]);return A?A.id===B[1]||typeof A.getAttributeNode!=="undefined"&&A.getAttributeNode("id").nodeValue===B[1]?[A]:undefined:[]}};k.filter.ID=function(C,A){var B=typeof C.getAttributeNode!=="undefined"&&C.getAttributeNode("id");return C.nodeType===1&&B&&B.nodeValue===A}}e.removeChild(y);e=y=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){k.find.TAG=function(y,C){var B=C.getElementsByTagName(y[1]);if(y[1]==="*"){var A=[];for(var z=0;B[z];z++){if(B[z].nodeType===1){A.push(B[z])}}B=A}return B}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){k.attrHandle.href=function(y){return y.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=d,A=document.createElement("div"),z="__sizzle__";A.innerHTML="

";if(A.querySelectorAll&&A.querySelectorAll(".TEST").length===0){return}d=function(L,C,G,K){C=C||document;if(!K&&!d.isXML(C)){var J=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(L);if(J&&(C.nodeType===1||C.nodeType===9)){if(J[1]){return l(C.getElementsByTagName(L),G)}else{if(J[2]&&k.find.CLASS&&C.getElementsByClassName){return l(C.getElementsByClassName(J[2]),G)}}}if(C.nodeType===9){if(L==="body"&&C.body){return l([C.body],G)}else{if(J&&J[3]){var F=C.getElementById(J[3]);if(F&&F.parentNode){if(F.id===J[3]){return l([F],G)}}else{return l([],G)}}}try{return l(C.querySelectorAll(L),G)}catch(H){}}else{if(C.nodeType===1&&C.nodeName.toLowerCase()!=="object"){var D=C,E=C.getAttribute("id"),B=E||z,N=C.parentNode,M=/^\s*[+~]/.test(L);if(!E){C.setAttribute("id",B)}else{B=B.replace(/'/g,"\\$&")}if(M&&N){C=C.parentNode}try{if(!M||N){return l(C.querySelectorAll("[id='"+B+"'] "+L),G)}}catch(I){}finally{if(!E){D.removeAttribute("id")}}}}}return e(L,C,G,K)};for(var y in e){d[y]=e[y]}A=null})()}(function(){var e=document.documentElement,z=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(z){var B=!z.call(document.createElement("div"),"div"),y=false;try{z.call(document.documentElement,"[test!='']:sizzle")}catch(A){y=true}d.matchesSelector=function(D,F){F=F.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!d.isXML(D)){try{if(y||!k.match.PSEUDO.test(F)&&!/!=/.test(F)){var C=z.call(D,F);if(C||!B||D.document&&D.document.nodeType!==11){return C}}}catch(E){}}return d(F,null,null,[D]).length>0}}})();(function(){var e=document.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}k.order.splice(1,0,"CLASS");k.find.CLASS=function(y,z,A){if(typeof z.getElementsByClassName!=="undefined"&&!A){return z.getElementsByClassName(y[1])}};e=null})();function a(y,D,C,G,E,F){for(var A=0,z=G.length;A0){B=e;break}}}e=e[y]}G[A]=B}}}if(document.documentElement.contains){d.contains=function(y,e){return y!==e&&(y.contains?y.contains(e):true)}}else{if(document.documentElement.compareDocumentPosition){d.contains=function(y,e){return !!(y.compareDocumentPosition(e)&16)}}else{d.contains=function(){return false}}}d.isXML=function(e){var y=(e?e.ownerDocument||e:0).documentElement;return y?y.nodeName!=="HTML":false};var s=function(z,e,D){var C,E=[],B="",F=e.nodeType?[e]:e;while((C=k.match.PSEUDO.exec(z))){B+=C[0];z=z.replace(k.match.PSEUDO,"")}z=k.relative[z]?z+"*":z;for(var A=0,y=F.length;A"+(i.item?i.item(0).outerHTML:i.htmlText);m.removeChild(m.firstChild)}else{m.innerHTML=i.toString()}}if(/^\s/.test(m.innerHTML)){j=" "}if(/\s+$/.test(m.innerHTML)){l=" "}h.getInner=true;h.content=g.isCollapsed()?"":j+g.serializer.serialize(m,h)+l;g.onGetContent.dispatch(g,h);return h.content},setContent:function(h,j){var o=this,g=o.getRng(),k,l=o.win.document,n,m;j=j||{format:"html"};j.set=true;h=j.content=h;if(!j.no_events){o.onBeforeSetContent.dispatch(o,j)}h=j.content;if(g.insertNode){h+='_';if(g.startContainer==l&&g.endContainer==l){l.body.innerHTML=h}else{g.deleteContents();if(l.body.childNodes.length===0){l.body.innerHTML=h}else{if(g.createContextualFragment){g.insertNode(g.createContextualFragment(h))}else{n=l.createDocumentFragment();m=l.createElement("div");n.appendChild(m);m.outerHTML=h;g.insertNode(n)}}}k=o.dom.get("__caret");g=l.createRange();g.setStartBefore(k);g.setEndBefore(k);o.setRng(g);o.dom.remove("__caret");try{o.setRng(g)}catch(i){}}else{if(g.item){l.execCommand("Delete",false,null);g=o.getRng()}if(/^\s+/.test(h)){g.pasteHTML('_'+h);o.dom.remove("__mce_tmp")}else{g.pasteHTML(h)}}if(!j.no_events){o.onSetContent.dispatch(o,j)}},getStart:function(){var i=this,h=i.getRng(),j,g,l,k;if(h.duplicate||h.item){if(h.item){return h.item(0)}l=h.duplicate();l.collapse(1);j=l.parentElement();if(j.ownerDocument!==i.dom.doc){j=i.dom.getRoot()}g=k=h.parentElement();while(k=k.parentNode){if(k==j){j=g;break}}return j}else{j=h.startContainer;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[Math.min(j.childNodes.length-1,h.startOffset)]}if(j&&j.nodeType==3){return j.parentNode}return j}},getEnd:function(){var h=this,g=h.getRng(),j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(0);j=g.parentElement();if(j.ownerDocument!==h.dom.doc){j=h.dom.getRoot()}if(j&&j.nodeName=="BODY"){return j.lastChild||j}return j}else{j=g.endContainer;i=g.endOffset;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[i>0?i-1:i]}if(j&&j.nodeType==3){return j.parentNode}return j}},getBookmark:function(s,v){var y=this,n=y.dom,h,k,j,o,i,p,q,m="\uFEFF",x;function g(z,A){var t=0;e(n.select(z),function(C,B){if(C==A){t=B}});return t}function u(t){function z(E){var A,D,C,B=E?"start":"end";A=t[B+"Container"];D=t[B+"Offset"];if(A.nodeType==1&&A.nodeName=="TR"){C=A.childNodes;A=C[Math.min(E?D:D-1,C.length-1)];if(A){D=E?0:A.childNodes.length;t["set"+(E?"Start":"End")](A,D)}}}z(true);z();return t}function l(){var z=y.getRng(true),t=n.getRoot(),A={};function B(E,J){var D=E[J?"startContainer":"endContainer"],I=E[J?"startOffset":"endOffset"],C=[],F,H,G=0;if(D.nodeType==3){if(v){for(F=D.previousSibling;F&&F.nodeType==3;F=F.previousSibling){I+=F.nodeValue.length}}C.push(I)}else{H=D.childNodes;if(I>=H.length&&H.length){G=1;I=Math.max(0,H.length-1)}C.push(y.dom.nodeIndex(H[I],v)+G)}for(;D&&D!=t;D=D.parentNode){C.push(y.dom.nodeIndex(D,v))}return C}A.start=B(z,true);if(!y.isCollapsed()){A.end=B(z)}return A}if(s==2){if(y.tridentSel){return y.tridentSel.getBookmark(s)}return l()}if(s){h=y.getRng();if(h.setStart){h={startContainer:h.startContainer,startOffset:h.startOffset,endContainer:h.endContainer,endOffset:h.endOffset}}return{rng:h}}h=y.getRng();j=n.uniqueId();o=tinyMCE.activeEditor.selection.isCollapsed();x="overflow:hidden;line-height:0px";if(h.duplicate||h.item){if(!h.item){k=h.duplicate();try{h.collapse();h.pasteHTML(''+m+"");if(!o){k.collapse(false);h.moveToElementText(k.parentElement());if(h.compareEndPoints("StartToEnd",k)===0){k.move("character",-1)}k.pasteHTML(''+m+"")}}catch(r){return null}}else{p=h.item(0);i=p.nodeName;return{name:i,index:g(i,p)}}}else{p=y.getNode();i=p.nodeName;if(i=="IMG"){return{name:i,index:g(i,p)}}k=u(h.cloneRange());if(!o){k.collapse(false);k.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_end",style:x},m))}h=u(h);h.collapse(true);h.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_start",style:x},m))}y.moveToBookmark({id:j,keep:1});return{id:j}},moveToBookmark:function(q){var v=this,n=v.dom,l,j,g,i,u,k,x,r,s;function h(C){var t=q[C?"start":"end"],z,A,B,y;if(t){B=t[0];for(A=u,z=t.length-1;z>=1;z--){y=A.childNodes;if(t[z]>y.length-1){return}A=y[t[z]]}if(A.nodeType===3){B=Math.min(t[0],A.nodeValue.length)}if(A.nodeType===1){B=Math.min(t[0],A.childNodes.length)}if(C){g.setStart(A,B)}else{g.setEnd(A,B)}}return true}function m(D){var y=n.get(q.id+"_"+D),C,t,A,B,z=q.keep;if(y){C=y.parentNode;if(D=="start"){if(!z){t=n.nodeIndex(y)}else{C=y.firstChild;t=1}k=x=C;r=s=t}else{if(!z){t=n.nodeIndex(y)}else{C=y.firstChild;t=1}x=C;s=t}if(!z){B=y.previousSibling;A=y.nextSibling;e(d.grep(y.childNodes),function(E){if(E.nodeType==3){E.nodeValue=E.nodeValue.replace(/\uFEFF/g,"")}});while(y=n.get(q.id+"_"+D)){n.remove(y,1)}if(B&&A&&B.nodeType==A.nodeType&&B.nodeType==3&&!d.isOpera){t=B.nodeValue.length;B.appendData(A.nodeValue);n.remove(A);if(D=="start"){k=x=B;r=s=t}else{x=B;s=t}}}}}function o(t){if(n.isBlock(t)&&!t.innerHTML&&!b){t.innerHTML='
'}return t}if(q){if(q.start){g=n.createRng();u=n.getRoot();if(v.tridentSel){return v.tridentSel.moveToBookmark(q)}if(h(true)&&h()){v.setRng(g)}}else{if(q.id){m("start");m("end");if(k){g=n.createRng();g.setStart(o(k),r);g.setEnd(o(x),s);v.setRng(g)}}else{if(q.name){v.select(n.select(q.name)[q.index])}else{if(q.rng){g=q.rng;if(g.startContainer){i=v.dom.createRng();try{i.setStart(g.startContainer,g.startOffset);i.setEnd(g.endContainer,g.endOffset)}catch(p){}g=i}v.setRng(g)}}}}}},select:function(l,k){var j=this,m=j.dom,h=m.createRng(),g;function i(n,p){var o=new a(n,n);do{if(n.nodeType==3&&d.trim(n.nodeValue).length!==0){if(p){h.setStart(n,0)}else{h.setEnd(n,n.nodeValue.length)}return}if(n.nodeName=="BR"){if(p){h.setStartBefore(n)}else{h.setEndBefore(n)}return}}while(n=(p?o.next():o.prev()))}if(l){g=m.nodeIndex(l);h.setStart(l.parentNode,g);h.setEnd(l.parentNode,g+1);if(k){i(l,1);i(l)}j.setRng(h)}return l},isCollapsed:function(){var g=this,i=g.getRng(),h=g.getSel();if(!i||i.item){return false}if(i.compareEndPoints){return i.compareEndPoints("StartToEnd",i)===0}return !h||i.collapsed},collapse:function(g){var i=this,h=i.getRng(),j;if(h.item){j=h.item(0);h=i.win.document.body.createTextRange();h.moveToElementText(j)}h.collapse(!!g);i.setRng(h)},getSel:function(){var h=this,g=this.win;return g.getSelection?g.getSelection():g.document.selection},getRng:function(m){var h=this,j,g,l,k=h.win.document;if(m&&h.tridentSel){return h.tridentSel.getRangeAt(0)}try{if(j=h.getSel()){g=j.rangeCount>0?j.getRangeAt(0):(j.createRange?j.createRange():k.createRange())}}catch(i){}if(d.isIE&&!d.isIE11&&g&&g.setStart&&k.selection.createRange().item){l=k.selection.createRange().item(0);g=k.createRange();g.setStartBefore(l);g.setEndAfter(l)}if(!g){g=k.createRange?k.createRange():k.body.createTextRange()}if(g.setStart&&g.startContainer.nodeType===9&&g.collapsed){l=h.dom.getRoot();g.setStart(l,0);g.setEnd(l,0)}if(h.selectedRange&&h.explicitRange){if(g.compareBoundaryPoints(g.START_TO_START,h.selectedRange)===0&&g.compareBoundaryPoints(g.END_TO_END,h.selectedRange)===0){g=h.explicitRange}else{h.selectedRange=null;h.explicitRange=null}}return g},setRng:function(k,g){var j,i=this;if(!i.tridentSel){j=i.getSel();if(j){i.explicitRange=k;try{j.removeAllRanges()}catch(h){}j.addRange(k);if(g===false&&j.extend){j.collapse(k.endContainer,k.endOffset);j.extend(k.startContainer,k.startOffset)}i.selectedRange=j.rangeCount>0?j.getRangeAt(0):null}}else{if(k.cloneRange){try{i.tridentSel.addRange(k);return}catch(h){}}try{k.select()}catch(h){}}},setNode:function(h){var g=this;g.setContent(g.dom.getOuterHTML(h));return h},getNode:function(){var i=this,h=i.getRng(),j=i.getSel(),m,l=h.startContainer,g=h.endContainer;function k(q,o){var p=q;while(q&&q.nodeType===3&&q.length===0){q=o?q.nextSibling:q.previousSibling}return q||p}if(!h){return i.dom.getRoot()}if(h.setStart){m=h.commonAncestorContainer;if(!h.collapsed){if(h.startContainer==h.endContainer){if(h.endOffset-h.startOffset<2){if(h.startContainer.hasChildNodes()){m=h.startContainer.childNodes[h.startOffset]}}}if(l.nodeType===3&&g.nodeType===3){if(l.length===h.startOffset){l=k(l.nextSibling,true)}else{l=l.parentNode}if(h.endOffset===0){g=k(g.previousSibling,false)}else{g=g.parentNode}if(l&&l===g){return l}}}if(m&&m.nodeType==3){return m.parentNode}return m}return h.item?h.item(0):h.parentElement()},getSelectedBlocks:function(p,h){var o=this,k=o.dom,m,l,i,j=[];m=k.getParent(p||o.getStart(),k.isBlock);l=k.getParent(h||o.getEnd(),k.isBlock);if(m){j.push(m)}if(m&&l&&m!=l){i=m;var g=new a(m,k.getRoot());while((i=g.next())&&i!=l){if(k.isBlock(i)){j.push(i)}}}if(l&&m!=l){j.push(l)}return j},isForward:function(){var i=this.dom,g=this.getSel(),j,h;if(!g||g.anchorNode==null||g.focusNode==null){return true}j=i.createRng();j.setStart(g.anchorNode,g.anchorOffset);j.collapse(true);h=i.createRng();h.setStart(g.focusNode,g.focusOffset);h.collapse(true);return j.compareBoundaryPoints(j.START_TO_START,h)<=0},normalize:function(){var h=this,g,m,l,j,i;function k(p){var o,r,n,s=h.dom,u=s.getRoot(),q,t,v;function y(z,A){var B=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(z=B[A?"prev":"next"]()){if(z.nodeName==="BR"){return true}}}function x(B,z){var C,A;z=z||o;C=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(q=C[B?"prev":"next"]()){if(q.nodeType===3&&q.nodeValue.length>0){o=q;r=B?q.nodeValue.length:0;m=true;return}if(s.isBlock(q)||t[q.nodeName.toLowerCase()]){return}A=q}if(l&&A){o=A;m=true;r=0}}o=g[(p?"start":"end")+"Container"];r=g[(p?"start":"end")+"Offset"];t=s.schema.getNonEmptyElements();if(o.nodeType===9){o=s.getRoot();r=0}if(o===u){if(p){q=o.childNodes[r>0?r-1:0];if(q){v=q.nodeName.toLowerCase();if(t[q.nodeName]||q.nodeName=="TABLE"){return}}}if(o.hasChildNodes()){o=o.childNodes[Math.min(!p&&r>0?r-1:r,o.childNodes.length-1)];r=0;if(o.hasChildNodes()&&!/TABLE/.test(o.nodeName)){q=o;n=new a(o,u);do{if(q.nodeType===3&&q.nodeValue.length>0){r=p?0:q.nodeValue.length;o=q;m=true;break}if(t[q.nodeName.toLowerCase()]){r=s.nodeIndex(q);o=q.parentNode;if(q.nodeName=="IMG"&&!p){r++}m=true;break}}while(q=(p?n.next():n.prev()))}}}if(l){if(o.nodeType===3&&r===0){x(true)}if(o.nodeType===1){q=o.childNodes[r];if(q&&q.nodeName==="BR"&&!y(q)&&!y(q,true)){x(true,o.childNodes[r])}}}if(p&&!l&&o.nodeType===3&&r===o.nodeValue.length){x(false)}if(m){g["set"+(p?"Start":"End")](o,r)}}if(d.isIE){return}g=h.getRng();l=g.collapsed;k(true);if(!l){k()}if(m){if(l){g.collapse(true)}h.setRng(g,h.isForward())}},selectorChanged:function(g,j){var h=this,i;if(!h.selectorChangedData){h.selectorChangedData={};i={};h.editor.onNodeChange.addToTop(function(l,k,o){var p=h.dom,m=p.getParents(o,null,p.getRoot()),n={};e(h.selectorChangedData,function(r,q){e(m,function(s){if(p.is(s,q)){if(!i[q]){e(r,function(t){t(true,{node:s,selector:q,parents:m})});i[q]=r}n[q]=r;return false}})});e(i,function(r,q){if(!n[q]){delete i[q];e(r,function(s){s(false,{node:o,selector:q,parents:m})})}})})}if(!h.selectorChangedData[g]){h.selectorChangedData[g]=[]}h.selectorChangedData[g].push(j);return h},scrollIntoView:function(k){var j,h,g=this,i=g.dom;h=i.getViewPort(g.editor.getWin());j=i.getPos(k).y;if(jh.y+h.h){g.editor.getWin().scrollTo(0,j0){p.setEndPoint("StartToStart",o)}else{p.setEndPoint("EndToEnd",o)}p.select()}}else{l()}}function l(){var p=n.selection.createRange();if(o&&!p.item&&p.compareEndPoints("StartToEnd",p)===0){o.select()}h.unbind(n,"mouseup",l);h.unbind(n,"mousemove",m);o=k=0}n.documentElement.unselectable=true;h.bind(n,["mousedown","contextmenu"],function(p){if(p.target.nodeName==="HTML"){if(k){l()}g=n.documentElement;if(g.scrollHeight>g.clientHeight){return}k=1;o=j(p.x,p.y);if(o){h.bind(n,"mouseup",l);h.bind(n,"mousemove",m);h.win.focus();o.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/(?:^|\s)mce(Item\w+|Selected)(?!\S)/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addAttributeFilter("data-mce-expando",function(j,l,k){var m=j.length;while(m--){j[m].attr(l,null)}});c.addNodeFilter("noscript",function(j){var k=j.length,l;while(k--){l=j[k].firstChild;if(l){l.value=a.html.Entities.decode(l.value)}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// "}}else{if(o.length>0){n.firstChild.value=""}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(a.trim(m.getInner?o.innerHTML:i.getOuterHTML(o)),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],e={},d=[],g=0,f;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=document.createElement("script");s.id=n;s.type="text/javascript";s.src=a._addVer(m);if(!a.isIE||a.isIE11){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==f){j.push(m);l[m]=c}if(q){if(!e[m]){e[m]=[]}e[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(e[r],function(s){s.func.call(s.scope)});e[r]=f}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&dd){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d0&&g=m.length){r=0}}t=m[r];f.setAttrib(g,"tabindex","-1");f.setAttrib(t.id,"tabindex","0");f.get(t.id).focus();if(e.actOnFocus){e.onAction(t.id)}if(s){a.cancel(s)}};p=function(z){var v=37,u=39,y=38,A=40,r=27,t=14,s=13,x=32;switch(z.keyCode){case v:if(i){q.moveFocus(-1)}a.cancel(z);break;case u:if(i){q.moveFocus(1)}a.cancel(z);break;case y:if(o){q.moveFocus(-1)}a.cancel(z);break;case A:if(o){q.moveFocus(1)}a.cancel(z);break;case r:if(e.onCancel){e.onCancel();a.cancel(z)}break;case t:case s:case x:if(e.onAction){e.onAction(g);a.cancel(z)}break}};c(m,function(t,r){var s,u;if(!t.id){t.id=f.uniqueId("_mce_item_")}u=f.get(t.id);if(l){f.bind(u,"blur",h);s="-1"}else{s=(r===0?"0":"-1")}u.setAttribute("tabindex",s);f.bind(u,"focus",k)});if(m[0]){g=m[0].id}f.setAttrib(n,"tabindex","-1");var j=f.get(n);f.bind(j,"focus",d);f.bind(j,"keydown",p)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.offsetWidth,j.max_width):g.offsetWidth;k=j.max_height?Math.min(g.offsetHeight,j.max_height):g.offsetHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeightv){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return false}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){if(typeof h.settings.style=="function"){h.settings.style=h.settings.style()}c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+=''+a.encode(e.title)+''+(c?''+c+"":"")}else{d+=''+(c?''+c+"":"")}d+='";d+="";return d},postRender:function(){var d=this,e=d.settings,c;if(b.isIE&&d.editor){b.dom.Event.add(d.id,"mousedown",function(f){var g=d.editor.selection.getNode().nodeName;c=g==="IMG"?d.editor.selection.getBookmark():null})}b.dom.Event.add(d.id,"click",function(f){if(!d.isDisabled()){if(b.isIE&&d.editor&&c!==null){d.editor.selection.moveToBookmark(c)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(d.id,"keydown",function(f){if(!d.isDisabled()&&f.keyCode==b.VK.SPACEBAR){b.dom.Event.cancel(f);return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(j,i,g){var h=this;h.parent(j,i,g);h.items=[];h.onChange=new a(h);h.onPostRender=new a(h);h.onAdd=new a(h);h.onRenderMenu=new e.util.Dispatcher(this);h.classPrefix="mceListBox";h.marked={}},select:function(h){var g=this,j,i;g.marked={};if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){var i=this,j,k,h;i.marked={};if(g!=i.selectedIndex){j=d.get(i.id+"_text");h=d.get(i.id+"_voiceDesc");k=i.items[g];if(k){i.selectedValue=k.value;i.selectedIndex=g;d.setHTML(j,d.encode(k.title));d.setHTML(h,i.settings.title+" - "+k.title);d.removeClass(j,"mceTitle");d.setAttrib(i.id,"aria-valuenow",k.title)}else{d.setHTML(j,d.encode(i.settings.title));d.setHTML(h,d.encode(i.settings.title));d.addClass(j,"mceTitle");i.selectedValue=i.selectedIndex=null;d.setAttrib(i.id,"aria-valuenow",i.settings.title)}j=0}},mark:function(g){this.marked[g]=true},add:function(j,g,i){var h=this;i=i||{};i=e.extend(i,{title:j,value:g});h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var j="",g=this,i=g.settings,k=g.classPrefix;j='';j+="";j+="";j+="";return j},showMenu:function(){var h=this,j,i=d.get(this.id),g;if(h.isDisabled()||h.items.length===0){return}if(h.menu&&h.menu.isMenuVisible){return h.hideMenu()}if(!h.isMenuRendered){h.renderMenu();h.isMenuRendered=true}j=d.getPos(i);g=h.menu;g.settings.offset_x=j.x;g.settings.offset_y=j.y;g.settings.keyboard_focus=!e.isOpera;f(h.items,function(k){if(g.items[k.id]){g.items[k.id].setSelected(0)}});f(h.items,function(k){if(g.items[k.id]&&h.marked[k.value]){g.items[k.id].setSelected(1)}if(k.value===h.selectedValue){g.items[k.id].setSelected(1)}});g.showMenu(0,i.clientHeight);b.add(d.doc,"mousedown",h.hideMenu,h);d.addClass(h.id,h.classPrefix+"Selected")},hideMenu:function(h){var g=this;if(g.menu&&g.menu.isMenuVisible){d.removeClass(g.id,g.classPrefix+"Selected");if(h&&h.type=="mousedown"&&(h.target.id==g.id+"_text"||h.target.id==g.id+"_open")){return}if(!h||!d.getParent(h.target,".mceMenu")){d.removeClass(g.id,g.classPrefix+"Selected");b.remove(d.doc,"mousedown",g.hideMenu,g);g.menu.hideMenu()}}},renderMenu:function(){var h=this,g;g=h.settings.control_manager.createDropMenu(h.id+"_menu",{menu_line:1,"class":h.classPrefix+"Menu mceNoIcons",max_width:250,max_height:150});g.onHideMenu.add(function(){h.hideMenu();h.focus()});g.add({title:h.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}});f(h.items,function(i){if(i.value===c){g.add({title:i.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}})}else{i.id=d.uniqueId();i.role="option";i.onclick=function(){if(h.settings.onselect(i.value)!==false){h.select(i.value)}};g.add(i)}});h.onRenderMenu.dispatch(h,g);h.menu=g},postRender:function(){var g=this,h=g.classPrefix;b.add(g.id,"click",g.showMenu,g);b.add(g.id,"keydown",function(i){if(i.keyCode==32){g.showMenu(i);b.cancel(i)}});b.add(g.id,"focus",function(){if(!g._focused){g.keyDownHandler=b.add(g.id,"keydown",function(i){if(i.keyCode==40){g.showMenu();b.cancel(i)}});g.keyPressHandler=b.add(g.id,"keypress",function(j){var i;if(j.keyCode==13){i=g.selectedValue;g.selectedValue=null;b.cancel(j);g.settings.onselect(i)}})}g._focused=1});b.add(g.id,"blur",function(){b.remove(g.id,"keydown",g.keyDownHandler);b.remove(g.id,"keypress",g.keyPressHandler);g._focused=0});if(e.isIE6||!d.boxModel){b.add(g.id,"mouseover",function(){if(!d.hasClass(g.id,h+"Disabled")){d.addClass(g.id,h+"Hover")}});b.add(g.id,"mouseout",function(){if(!d.hasClass(g.id,h+"Disabled")){d.removeClass(g.id,h+"Hover")}})}g.onPostRender.dispatch(g,d.get(g.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(h,g){this.parent(h,g);this.classPrefix="mceNativeListBox"},setDisabled:function(g){d.get(this.id).disabled=g;this.setAriaProperty("disabled",g)},isDisabled:function(){return d.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){d.get(this.id).selectedIndex=g+1;this.selectedValue=this.items[g]?this.items[g].value:null},add:function(k,h,g){var j,i=this;g=g||{};g.value=h;if(i.isRendered()){d.add(d.get(this.id),"option",g,k)}j={title:k,value:h,attribs:g};i.items.push(j);i.onAdd.dispatch(i,j)},getLength:function(){return this.items.length},renderHTML:function(){var i,g=this;i=d.createHTML("option",{value:""},"-- "+g.settings.title+" --");f(g.items,function(h){i+=d.createHTML("option",{value:h.value},h.title)});i=d.createHTML("select",{id:g.id,"class":"mceNativeListBox","aria-labelledby":g.id+"_aria"},i);i+=d.createHTML("span",{id:g.id+"_aria",style:"display: none"},g.settings.title);return i},postRender:function(){var h=this,i,j=true;h.rendered=true;function g(l){var k=h.items[l.target.selectedIndex-1];if(k&&(k=k.value)){h.onChange.dispatch(h,k);if(h.settings.onselect){h.settings.onselect(k)}}}b.add(h.id,"change",g);b.add(h.id,"keydown",function(q){var n,p=37,m=39,l=38,r=40,k=13,o=32;b.remove(h.id,"change",i);j=false;n=b.add(h.id,"blur",function(){if(j){return}j=true;b.add(h.id,"change",g);b.remove(h.id,"blur",n)});if(q.keyCode==k||q.keyCode==o){g(q);return b.cancel(q)}else{if(q.keyCode==r||q.keyCode==l){q.stopImmediatePropagation()}}});h.onPostRender.dispatch(h,d.get(h.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.firstChild.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+=""+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'');i+=""+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";i+="";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.firstChild.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.keyboardNav=new d.ui.KeyboardNavigation({root:f.id+"_menu",items:c.select("a",f.id+"_menu"),onCancel:function(){f.hideMenu();f.focus()}});f.keyboardNav.focus();f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch();f.keyboardNav.destroy()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return false});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){var f=this;f.parent();a.clear(f.id+"_menu");a.clear(f.id+"_more");c.remove(f.id+"_menu");if(f.keyboardNav){f.keyboardNav.destroy()}}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('
');i.push("");i.push('");j(e,function(h){i.push(h.renderHTML())});i.push("");i.push("
");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,""))}}if(c.stdMode){f+=''+k.renderHTML()+""}else{f+=""+k.renderHTML()+""}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,""))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,""));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},""+f+"")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!==0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(x){var v=this,o,n=j.ScriptLoader,u,l=[],r;function q(t){var s=t.id;if(!s){s=t.name;if(s&&!k.get(s)){s=t.name}else{s=k.uniqueId()}t.setAttribute("id",s)}return s}function m(z,A,t){var y=z[A];if(!y){return}if(j.is(y,"string")){t=y.replace(/\.\w+$/,"");t=t?j.resolve(t):0;y=j.resolve(y)}return y.apply(t||this,Array.prototype.slice.call(arguments,2))}function p(t,s){return s.constructor===RegExp?s.test(t.className):k.hasClass(t,s)}v.settings=x;i.bind(window,"ready",function(){var s,t;m(x,"onpageload");switch(x.mode){case"exact":s=x.elements||"";if(s.length>0){g(e(s),function(y){if(k.get(y)){r=new j.Editor(y,x);l.push(r);r.render(1)}else{g(document.forms,function(z){g(z.elements,function(A){if(A.name===y){y="mce_editor_"+c++;k.setAttrib(A,"id",y);r=new j.Editor(y,x);l.push(r);r.render(1)}})})}})}break;case"textareas":case"specific_textareas":g(k.select("textarea"),function(y){if(x.editor_deselector&&p(y,x.editor_deselector)){return}if(!x.editor_selector||p(y,x.editor_selector)){r=new j.Editor(q(y),x);l.push(r);r.render(1)}});break;default:if(x.types){g(x.types,function(y){g(k.select(y.selector),function(A){var z=new j.Editor(q(A),j.extend({},x,y));l.push(z);z.render(1)})})}else{if(x.selector){g(k.select(x.selector),function(z){var y=new j.Editor(q(z),x);l.push(y);y.render(1)})}}}if(x.oninit){s=t=0;g(l,function(y){t++;if(!y.initialized){y.onInit.add(function(){s++;if(s==t){m(x,"oninit")}})}else{s++}if(s==t){m(x,"oninit")}})}})},get:function(l){if(l===a){return this.editors}if(!this.editors.hasOwnProperty(l)){return a}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l':"",visual:n,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:n,directionality:"ltr",forced_root_block:"p",hidden_input:n,padd_empty_editor:n,render_ui:n,indentation:"30px",fix_table_elements:n,inline_styles:n,convert_fonts_to_spans:n,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:n,entity_encoding:"named",url_converter:m.convertURL,url_converter_scope:m,ie7_compat:n},o);m.id=m.editorId=p;m.isNotDirty=false;m.plugins={};m.documentBaseURI=new k.util.URI(o.document_base_url||k.documentBaseURL,{base_uri:tinyMCE.baseURI});m.baseURI=k.baseURI;m.contentCSS=[];m.contentStyles=[];m.setupEvents();m.execCommands={};m.queryStateCommands={};m.queryValueCommands={};m.execCallback("setup",m)},render:function(o){var p=this,q=p.settings,r=p.id,m=k.ScriptLoader;if(!j.domLoaded){j.add(window,"ready",function(){p.render()});return}tinyMCE.settings=q;if(!p.getElement()){return}if(k.isIDevice&&!k.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(p.getElement().nodeName)&&q.hidden_input&&l.getParent(r,"form")){l.insertAfter(l.create("input",{type:"hidden",name:r}),r)}if(!q.content_editable){p.orgVisibility=p.getElement().style.visibility;p.getElement().style.visibility="hidden"}if(k.WindowManager){p.windowManager=new k.WindowManager(p)}if(q.encoding=="xml"){p.onGetContent.add(function(s,t){if(t.save){t.content=l.encode(t.content)}})}if(q.add_form_submit_trigger){p.onSubmit.addToTop(function(){if(p.initialized){p.save();p.isNotDirty=1}})}if(q.add_unload_trigger){p._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(p.initialized&&!p.destroyed&&!p.isHidden()){p.save({format:"raw",no_events:true})}})}k.addUnload(p.destroy,p);if(q.submit_patch){p.onBeforeRenderUI.add(function(){var s=p.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){p.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){k.triggerSave();p.isNotDirty=1;return p.formElement._mceOldSubmit(p.formElement)}}s=null})}function n(){if(q.language&&q.language_load!==false){m.add(k.baseURL+"/langs/"+q.language+".js")}if(q.theme&&typeof q.theme!="function"&&q.theme.charAt(0)!="-"&&!h.urls[q.theme]){h.load(q.theme,"themes/"+q.theme+"/editor_template"+k.suffix+".js")}i(g(q.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(v){var u={prefix:"plugins/",resource:v,suffix:"/editor_plugin"+k.suffix+".js"};v=c.createUrl(u,v);c.load(v.resource,v)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+k.suffix+".js"})}}});m.loadQueue(function(){if(!p.removed){p.init()}})}n()},init:function(){var q,G=this,H=G.settings,D,y,z,C=G.getElement(),p,m,E,v,B,F,x,r=[];k.add(G);H.aria_label=H.aria_label||l.getAttrib(C,"aria-label",G.getLang("aria.rich_text_area"));if(H.theme){if(typeof H.theme!="function"){H.theme=H.theme.replace(/-/,"");p=h.get(H.theme);G.theme=new p();if(G.theme.init){G.theme.init(G,h.urls[H.theme]||k.documentBaseURL.replace(/\/$/,""))}}else{G.theme=H.theme}}function A(s){var t=c.get(s),o=c.urls[s]||k.documentBaseURL.replace(/\/$/,""),n;if(t&&k.inArray(r,s)===-1){i(c.dependencies(s),function(u){A(u)});n=new t(G,o);G.plugins[s]=n;if(n.init){n.init(G,o);r.push(s)}}}i(g(H.plugins.replace(/\-/g,"")),A);if(H.popup_css!==false){if(H.popup_css){H.popup_css=G.documentBaseURI.toAbsolute(H.popup_css)}else{H.popup_css=G.baseURI.toAbsolute("themes/"+H.theme+"/skins/"+H.skin+"/dialog.css")}}if(H.popup_css_add){H.popup_css+=","+G.documentBaseURI.toAbsolute(H.popup_css_add)}G.controlManager=new k.ControlManager(G);G.onBeforeRenderUI.dispatch(G,G.controlManager);if(H.render_ui&&G.theme){G.orgDisplay=C.style.display;if(typeof H.theme!="function"){D=H.width||C.style.width||C.offsetWidth;y=H.height||C.style.height||C.offsetHeight;z=H.min_height||100;F=/^[0-9\.]+(|px)$/i;if(F.test(""+D)){D=Math.max(parseInt(D,10)+(p.deltaWidth||0),100)}if(F.test(""+y)){y=Math.max(parseInt(y,10)+(p.deltaHeight||0),z)}p=G.theme.renderUI({targetNode:C,width:D,height:y,deltaWidth:H.delta_width,deltaHeight:H.delta_height});l.setStyles(p.sizeContainer||p.editorContainer,{width:D,height:y});y=(p.iframeHeight||y)+(typeof(y)=="number"?(p.deltaHeight||0):"");if(y';if(H.document_base_url!=k.documentBaseURL){G.iframeHTML+=''}if(k.isIE8){if(H.ie7_compat){G.iframeHTML+=''}else{G.iframeHTML+=''}}G.iframeHTML+='';for(x=0;x'}G.contentCSS=[];v=H.body_id||"tinymce";if(v.indexOf("=")!=-1){v=G.getParam("body_id","","hash");v=v[G.id]||v}B=H.body_class||"";if(B.indexOf("=")!=-1){B=G.getParam("body_class","","hash");B=B[G.id]||""}G.iframeHTML+='
";if(k.relaxedDomain&&(b||(k.isOpera&&parseFloat(opera.version())<11))){E='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+G.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()'}q=l.add(p.iframeContainer,"iframe",{id:G.id+"_ifr",src:E||'javascript:""',frameBorder:"0",allowTransparency:"true",title:H.aria_label,style:{width:"100%",height:y,display:"block"}});G.contentAreaContainer=p.iframeContainer;if(p.editorContainer){l.get(p.editorContainer).style.display=G.orgDisplay}C.style.visibility=G.orgVisibility;l.get(G.id).style.display="none";l.setAttrib(G.id,"aria-hidden",true);if(!k.relaxedDomain||!E){G.initContentBody()}C=q=p=null},initContentBody:function(){var n=this,p=n.settings,q=l.get(n.id),r=n.getDoc(),o,m,s;if((!b||!k.relaxedDomain)&&!p.content_editable){r.open();r.write(n.iframeHTML);r.close();if(k.relaxedDomain){r.domain=k.relaxedDomain}}if(p.content_editable){l.addClass(q,"mceContentBody");n.contentDocument=r=p.content_document||document;n.contentWindow=p.content_window||window;n.bodyElement=q;p.content_document=p.content_window=null}m=n.getBody();m.disabled=true;if(!p.readonly){m.contentEditable=n.getParam("content_editable_state",true)}m.disabled=false;n.schema=new k.html.Schema(p);n.dom=new k.dom.DOMUtils(r,{keep_values:true,url_converter:n.convertURL,url_converter_scope:n,hex_colors:p.force_hex_style_colors,class_filter:p.class_filter,update_styles:true,root_element:p.content_editable?n.id:null,schema:n.schema});n.parser=new k.html.DomParser(p,n.schema);n.parser.addAttributeFilter("src,href,style",function(t,u){var v=t.length,y,A=n.dom,z,x;while(v--){y=t[v];z=y.attr(u);x="data-mce-"+u;if(!y.attributes.map[x]){if(u==="style"){y.attr(x,A.serializeStyle(A.parseStyle(z),y.name))}else{y.attr(x,n.convertURL(z,u,y.name))}}}});n.parser.addNodeFilter("script",function(t,u){var v=t.length,x;while(v--){x=t[v];x.attr("type","mce-"+(x.attr("type")||"text/javascript"))}});n.parser.addNodeFilter("#cdata",function(t,u){var v=t.length,x;while(v--){x=t[v];x.type=8;x.name="#comment";x.value="[CDATA["+x.value+"]]"}});n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(u,v){var x=u.length,y,t=n.schema.getNonEmptyElements();while(x--){y=u[x];if(y.isEmpty(t)){y.empty().append(new k.html.Node("br",1)).shortEnded=true}}});n.serializer=new k.dom.Serializer(p,n.dom,n.schema);n.selection=new k.dom.Selection(n.dom,n.getWin(),n.serializer,n);n.formatter=new k.Formatter(n);n.undoManager=new k.UndoManager(n);n.forceBlocks=new k.ForceBlocks(n);n.enterKey=new k.EnterKey(n);n.editorCommands=new k.EditorCommands(n);n.onExecCommand.add(function(t,u){if(!/^(FontName|FontSize)$/.test(u)){n.nodeChanged()}});n.serializer.onPreProcess.add(function(t,u){return n.onPreProcess.dispatch(n,u,t)});n.serializer.onPostProcess.add(function(t,u){return n.onPostProcess.dispatch(n,u,t)});n.onPreInit.dispatch(n);if(!p.browser_spellcheck&&!p.gecko_spellcheck){r.body.spellcheck=false}if(!p.readonly){n.bindNativeEvents()}n.controlManager.onPostRender.dispatch(n,n.controlManager);n.onPostRender.dispatch(n);n.quirks=k.util.Quirks(n);if(p.directionality){m.dir=p.directionality}if(p.nowrap){m.style.whiteSpace="nowrap"}if(p.protect){n.onBeforeSetContent.add(function(t,u){i(p.protect,function(v){u.content=u.content.replace(v,function(x){return""})})})}n.onSetContent.add(function(){n.addVisual(n.getBody())});if(p.padd_empty_editor){n.onPostProcess.add(function(t,u){u.content=u.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\r\n]*)$/,"")})}n.load({initial:true,format:"html"});n.startContent=n.getContent({format:"raw"});n.initialized=true;n.onInit.dispatch(n);n.execCallback("setupcontent_callback",n.id,m,r);n.execCallback("init_instance_callback",n);n.focus(true);n.nodeChanged({initial:true});if(n.contentStyles.length>0){s="";i(n.contentStyles,function(t){s+=t+"\r\n"});n.dom.addStyle(s)}i(n.contentCSS,function(t){n.dom.loadCSS(t)});if(p.auto_focus){setTimeout(function(){var t=k.get(p.auto_focus);t.selection.select(t.getBody(),1);t.selection.collapse(1);t.getBody().focus();t.getWin().focus()},100)}q=r=m=null},focus:function(p){var o,u=this,t=u.selection,q=u.settings.content_editable,n,r,s=u.getDoc(),m;if(!p){if(u.bookmark){t.moveToBookmark(u.bookmark);u.bookmark=null}n=t.getRng();if(n.item){r=n.item(0)}u._refreshContentEditable();if(!q){u.getWin().focus()}if(k.isGecko||q){m=u.getBody();if(m.setActive&&!k.isIE11){m.setActive()}else{m.focus()}if(q){t.normalize()}}if(r&&r.ownerDocument==s){n=s.body.createControlRange();n.addElement(r);n.select()}}if(k.activeEditor!=u){if((o=k.activeEditor)!=null){o.onDeactivate.dispatch(o,u)}u.onActivate.dispatch(u,o)}k._setActive(u)},execCallback:function(q){var m=this,p=m.settings[q],o;if(!p){return}if(m.callbackLookup&&(o=m.callbackLookup[q])){p=o.func;o=o.scope}if(d(p,"string")){o=p.replace(/\.\w+$/,"");o=o?k.resolve(o):0;p=k.resolve(p);m.callbackLookup=m.callbackLookup||{};m.callbackLookup[q]={func:p,scope:o}}return p.apply(o||m,Array.prototype.slice.call(arguments,1))},translate:function(m){var o=this.settings.language||"en",n=k.i18n;if(!m){return""}return n[o+"."+m]||m.replace(/\{\#([^\}]+)\}/g,function(q,p){return n[o+"."+p]||"{#"+p+"}"})},getLang:function(o,m){return k.i18n[(this.settings.language||"en")+"."+o]||(d(m)?m:"{#"+o+"}")},getParam:function(t,q,m){var r=k.trim,p=d(this.settings[t])?this.settings[t]:q,s;if(m==="hash"){s={};if(d(p,"string")){i(p.indexOf("=")>0?p.split(/[;,](?![^=;,]*(?:[;,]|$))/):p.split(","),function(n){n=n.split("=");if(n.length>1){s[r(n[0])]=r(n[1])}else{s[r(n[0])]=r(n)}})}else{s=p}return s}return p},nodeChanged:function(q){var m=this,n=m.selection,p;if(m.initialized){q=q||{};p=n.getStart()||m.getBody();p=b&&p.ownerDocument!=m.getDoc()?m.getBody():p;q.parents=[];m.dom.getParent(p,function(o){if(o.nodeName=="BODY"){return true}q.parents.push(o)});m.onNodeChange.dispatch(m,q?q.controlManager||m.controlManager:m.controlManager,p,n.isCollapsed(),q)}},addButton:function(n,o){var m=this;m.buttons=m.buttons||{};m.buttons[n]=o},addCommand:function(m,o,n){this.execCommands[m]={func:o,scope:n||this}},addQueryStateHandler:function(m,o,n){this.queryStateCommands[m]={func:o,scope:n||this}},addQueryValueHandler:function(m,o,n){this.queryValueCommands[m]={func:o,scope:n||this}},addShortcut:function(o,q,m,p){var n=this,r;if(n.settings.custom_shortcuts===false){return false}n.shortcuts=n.shortcuts||{};if(d(m,"string")){r=m;m=function(){n.execCommand(r,false,null)}}if(d(m,"object")){r=m;m=function(){n.execCommand(r[0],r[1],r[2])}}i(g(o),function(s){var t={func:m,scope:p||this,desc:n.translate(q),alt:false,ctrl:false,shift:false};i(g(s,"+"),function(u){switch(u){case"alt":case"ctrl":case"shift":t[u]=true;break;default:t.charCode=u.charCodeAt(0);t.keyCode=u.toUpperCase().charCodeAt(0)}});n.shortcuts[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t});return true},execCommand:function(u,r,x,m){var p=this,q=0,v,n;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(u)&&(!m||!m.skip_focus)){p.focus()}m=f({},m);p.onBeforeExecCommand.dispatch(p,u,r,x,m);if(m.terminate){return false}if(p.execCallback("execcommand_callback",p.id,p.selection.getNode(),u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(v=p.execCommands[u]){n=v.func.call(v.scope,r,x);if(n!==true){p.onExecCommand.dispatch(p,u,r,x,m);return n}}i(p.plugins,function(o){if(o.execCommand&&o.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);q=1;return false}});if(q){return true}if(p.theme&&p.theme.execCommand&&p.theme.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(p.editorCommands.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}p.getDoc().execCommand(u,r,x);p.onExecCommand.dispatch(p,u,r,x,m)},queryCommandState:function(q){var n=this,r,p;if(n._isHidden()){return}if(r=n.queryStateCommands[q]){p=r.func.call(r.scope);if(p!==true){return p}}r=n.editorCommands.queryCommandState(q);if(r!==-1){return r}try{return this.getDoc().queryCommandState(q)}catch(m){}},queryCommandValue:function(r){var n=this,q,p;if(n._isHidden()){return}if(q=n.queryValueCommands[r]){p=q.func.call(q.scope);if(p!==true){return p}}q=n.editorCommands.queryCommandValue(r);if(d(q)){return q}try{return this.getDoc().queryCommandValue(r)}catch(m){}},show:function(){var m=this;l.show(m.getContainer());l.hide(m.id);m.load()},hide:function(){var m=this,n=m.getDoc();if(b&&n){n.execCommand("SelectAll")}m.save();l.hide(m.getContainer());l.setStyle(m.id,"display",m.orgDisplay)},isHidden:function(){return !l.isHidden(this.id)},setProgressState:function(m,n,p){this.onSetProgressState.dispatch(this,m,n,p);return m},load:function(q){var m=this,p=m.getElement(),n;if(p){q=q||{};q.load=true;n=m.setContent(d(p.value)?p.value:p.innerHTML,q);q.element=p;if(!q.no_events){m.onLoadContent.dispatch(m,q)}q.element=p=null;return n}},save:function(r){var m=this,q=m.getElement(),n,p;if(!q||!m.initialized){return}r=r||{};r.save=true;r.element=q;n=r.content=m.getContent(r);if(!r.no_events){m.onSaveContent.dispatch(m,r)}n=r.content;if(!/TEXTAREA|INPUT/i.test(q.nodeName)){q.innerHTML=n;if(p=l.getParent(m.id,"form")){i(p.elements,function(o){if(o.name==m.id){o.value=n;return false}})}}else{q.value=n}r.element=q=null;return n},setContent:function(r,p){var o=this,n,m=o.getBody(),q;p=p||{};p.format=p.format||"html";p.set=true;p.content=r;if(!p.no_events){o.onBeforeSetContent.dispatch(o,p)}r=p.content;if(!k.isIE&&(r.length===0||/^\s+$/.test(r))){q=o.settings.forced_root_block;if(q){r="<"+q+'>
"}else{r='
'}m.innerHTML=r;o.selection.select(m,true);o.selection.collapse(true);return}if(p.format!=="raw"){r=new k.html.Serializer({},o.schema).serialize(o.parser.parse(r))}p.content=k.trim(r);o.dom.setHTML(m,p.content);if(!p.no_events){o.onSetContent.dispatch(o,p)}if(!o.settings.content_editable||document.activeElement===o.getBody()){o.selection.normalize()}return p.content},getContent:function(o){var n=this,p,m=n.getBody();o=o||{};o.format=o.format||"html";o.get=true;o.getInner=true;if(!o.no_events){n.onBeforeGetContent.dispatch(n,o)}if(o.format=="raw"){p=m.innerHTML}else{if(o.format=="text"){p=m.innerText||m.textContent}else{p=n.serializer.serialize(m,o)}}if(o.format!="text"){o.content=k.trim(p)}else{o.content=p}if(!o.no_events){n.onGetContent.dispatch(n,o)}return o.content},isDirty:function(){var m=this;return k.trim(m.startContent)!=k.trim(m.getContent({format:"raw",no_events:1}))&&!m.isNotDirty},getContainer:function(){var m=this;if(!m.container){m.container=l.get(m.editorContainer||m.id+"_parent")}return m.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return l.get(this.settings.content_element||this.id)},getWin:function(){var m=this,n;if(!m.contentWindow){n=l.get(m.id+"_ifr");if(n){m.contentWindow=n.contentWindow}}return m.contentWindow},getDoc:function(){var m=this,n;if(!m.contentDocument){n=m.getWin();if(n){m.contentDocument=n.document}}return m.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(o,n,q){var m=this,p=m.settings;if(p.urlconverter_callback){return m.execCallback("urlconverter_callback",o,q,true,n)}if(!p.convert_urls||(q&&q.nodeName=="LINK")||o.indexOf("file:")===0){return o}if(p.relative_urls){return m.documentBaseURI.toRelative(o)}o=m.documentBaseURI.toAbsolute(o,p.remove_script_host);return o},addVisual:function(q){var n=this,o=n.settings,p=n.dom,m;q=q||n.getBody();if(!d(n.hasVisual)){n.hasVisual=o.visual}i(p.select("table,a",q),function(s){var r;switch(s.nodeName){case"TABLE":m=o.visual_table_class||"mceItemTable";r=p.getAttrib(s,"border");if(!r||r=="0"){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}return;case"A":if(!p.getAttrib(s,"href",false)){r=p.getAttrib(s,"name")||s.id;m="mceItemAnchor";if(r){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}}return}});n.onVisualAid.dispatch(n,q,n.hasVisual)},remove:function(){var m=this,o=m.getContainer(),n=m.getDoc();if(!m.removed){m.removed=1;if(b&&n){n.execCommand("SelectAll")}m.save();l.setStyle(m.id,"display",m.orgDisplay);if(!m.settings.content_editable){j.unbind(m.getWin());j.unbind(m.getDoc())}j.unbind(m.getBody());j.clear(o);m.execCallback("remove_instance_callback",m);m.onRemove.dispatch(m);m.onExecCommand.listeners=[];k.remove(m);l.remove(o)}},destroy:function(n){var m=this;if(m.destroyed){return}if(a){j.unbind(m.getDoc());j.unbind(m.getWin());j.unbind(m.getBody())}if(!n){k.removeUnload(m.destroy);tinyMCE.onBeforeUnload.remove(m._beforeUnload);if(m.theme&&m.theme.destroy){m.theme.destroy()}m.controlManager.destroy();m.selection.destroy();m.dom.destroy()}if(m.formElement){m.formElement.submit=m.formElement._mceOldSubmit;m.formElement._mceOldSubmit=null}m.contentAreaContainer=m.formElement=m.container=m.settings.content_element=m.bodyElement=m.contentDocument=m.contentWindow=null;if(m.selection){m.selection=m.selection.win=m.selection.dom=m.selection.dom.doc=null}m.destroyed=1},_refreshContentEditable:function(){var n=this,m,o;if(n._isHidden()){m=n.getBody();o=m.parentNode;o.removeChild(m);o.appendChild(m);m.focus()}},_isHidden:function(){var m;if(!a){return 0}m=this.selection.getSel();return(!m||!m.rangeCount||m.rangeCount===0)}})})(tinymce);(function(a){var b=a.each;a.Editor.prototype.setupEvents=function(){var c=this,d=c.settings;b(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState","onSetAttrib"],function(e){c[e]=new a.util.Dispatcher(c)});if(d.cleanup_callback){c.onBeforeSetContent.add(function(e,f){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)});c.onPreProcess.add(function(e,f){if(f.set){e.execCallback("cleanup_callback","insert_to_editor_dom",f.node,f)}if(f.get){e.execCallback("cleanup_callback","get_from_editor_dom",f.node,f)}});c.onPostProcess.add(function(e,f){if(f.set){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)}if(f.get){f.content=e.execCallback("cleanup_callback","get_from_editor",f.content,f)}})}if(d.save_callback){c.onGetContent.add(function(e,f){if(f.save){f.content=e.execCallback("save_callback",e.id,f.content,e.getBody())}})}if(d.handle_event_callback){c.onEvent.add(function(f,g,h){if(c.execCallback("handle_event_callback",g,f,h)===false){g.preventDefault();g.stopPropagation()}})}if(d.handle_node_change_callback){c.onNodeChange.add(function(f,e,g){f.execCallback("handle_node_change_callback",f.id,g,-1,-1,true,f.selection.isCollapsed())})}if(d.save_callback){c.onSaveContent.add(function(e,g){var f=e.execCallback("save_callback",e.id,g.content,e.getBody());if(f){g.content=f}})}if(d.onchange_callback){c.onChange.add(function(f,e){f.execCallback("onchange_callback",f,e)})}};a.Editor.prototype.bindNativeEvents=function(){var l=this,f,d=l.settings,e=l.dom,h;h={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function c(i,m){var n=i.type;if(l.removed){return}if(l.onEvent.dispatch(l,i,m)!==false){l[h[i.fakeType||i.type]].dispatch(l,i,m)}}function j(i){l.focus(true)}function k(i,m){if(m.keyCode!=65||!a.VK.metaKeyPressed(m)){l.selection.normalize()}l.nodeChanged()}b(h,function(m,n){var i=d.content_editable?l.getBody():l.getDoc();switch(n){case"contextmenu":e.bind(i,n,c);break;case"paste":e.bind(l.getBody(),n,c);break;case"submit":case"reset":e.bind(l.getElement().form||a.DOM.getParent(l.id,"form"),n,c);break;default:e.bind(i,n,c)}});e.bind(d.content_editable?l.getBody():(a.isGecko?l.getDoc():l.getWin()),"focus",function(i){l.focus(true)});if(d.content_editable&&a.isOpera){e.bind(l.getBody(),"click",j);e.bind(l.getBody(),"keydown",j)}l.onMouseUp.add(k);l.onKeyUp.add(function(i,n){var m=n.keyCode;if((m>=33&&m<=36)||(m>=37&&m<=40)||m==13||m==45||m==46||m==8||(a.isMac&&(m==91||m==93))||n.ctrlKey){k(i,n)}});l.onReset.add(function(){l.setContent(l.startContent,{format:"raw"})});function g(m,i){if(m.altKey||m.ctrlKey||m.metaKey){b(l.shortcuts,function(n){var o=a.isMac?m.metaKey:m.ctrlKey;if(n.ctrl!=o||n.alt!=m.altKey||n.shift!=m.shiftKey){return}if(m.keyCode==n.keyCode||(m.charCode&&m.charCode==n.charCode)){m.preventDefault();if(i){n.func.call(n.scope)}return true}})}}l.onKeyUp.add(function(i,m){g(m)});l.onKeyPress.add(function(i,m){g(m)});l.onKeyDown.add(function(i,m){g(m,true)});if(a.isOpera){l.onClick.add(function(i,m){m.preventDefault()})}}})(tinymce);(function(d){var e=d.each,b,a=true,c=false;d.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return c}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return c}function u(v,x){x=x||"exec";e(v,function(z,y){e(y.toLowerCase().split(","),function(A){j[x][A]=z})})}d.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===b){x=c}if(v===b){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:b)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(d.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(c)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);e("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=d.explode(k.font_size_style_values);v=d.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return c}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new d.html.Serializer({},n.schema);v='\uFEFF';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=p.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(//i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.yL.x+L.w||C.x")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();if(p.getRng().setStart){v.setStart(x,0);v.setEnd(x,x.childNodes.length);p.setRng(v)}else{f("SelectAll")}}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[m.getParent(p.getNode(),m.isBlock)]:p.getSelectedBlocks();var y=d.map(v,function(A){return !!q.matchNode(A,x)});return d.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(x){var v=m.getParent(p.getNode(),"ul,ol");return v&&(x==="insertunorderedlist"&&v.tagName==="UL"||x==="insertorderedlist"&&v.tagName==="OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(h){var l,i=0,e=[],g,k,j,f;function c(){return b.trim(h.getContent({format:"raw",no_events:1}).replace(/]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g,""))}function d(){l.typing=false;l.add()}onBeforeAdd=new a(l);k=new a(l);j=new a(l);f=new a(l);k.add(function(m,n){if(m.hasUndo()){return h.onChange.dispatch(h,n,m)}});j.add(function(m,n){return h.onUndo.dispatch(h,n,m)});f.add(function(m,n){return h.onRedo.dispatch(h,n,m)});h.onInit.add(function(){l.add()});h.onBeforeExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.beforeChange()}});h.onExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.add()}});h.onSaveContent.add(d);h.dom.bind(h.dom.getRoot(),"dragend",d);h.dom.bind(h.getBody(),"focusout",function(m){if(!h.removed&&l.typing){d()}});h.onKeyUp.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45||n==13||o.ctrlKey){d()}});h.onKeyDown.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45){if(l.typing){d()}return}if((n<16||n>20)&&n!=224&&n!=91&&!l.typing){l.beforeChange();l.typing=true;l.add()}});h.onMouseDown.add(function(m,n){if(l.typing){d()}});h.addShortcut("ctrl+z","undo_desc","Undo");h.addShortcut("ctrl+y","redo_desc","Redo");l={data:e,typing:false,onBeforeAdd:onBeforeAdd,onAdd:k,onUndo:j,onRedo:f,beforeChange:function(){g=h.selection.getBookmark(2,true)},add:function(p){var m,n=h.settings,o;p=p||{};p.content=c();l.onBeforeAdd.dispatch(l,p);o=e[i];if(o&&o.content==p.content){return null}if(e[i]){e[i].beforeBookmark=g}if(n.custom_undo_redo_levels){if(e.length>n.custom_undo_redo_levels){for(m=0;m0){n=e[--i];h.setContent(n.content,{format:"raw"});h.selection.moveToBookmark(n.beforeBookmark);l.onUndo.dispatch(l,n)}return n},redo:function(){var m;if(i0||this.typing},hasRedo:function(){return i0){g.moveEnd("character",q)}g.select()}catch(n){}}}c.nodeChanged()}}if(b.forced_root_block){c.onKeyUp.add(f);c.onNodeChange.add(f)}};(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(j){var o,k,g,h=this,m=h.editor,n,f;if(!h.controlFactories){h.controlFactories=[];d(m.plugins,function(i){if(i.createControl){h.controlFactories.push(i)}})}n=h.controlFactories;for(k=0,g=n.length;k1||ag==ay||ag.tagName=="BR"){return ag}}}var aq=aa.selection.getRng();var av=aq.startContainer;var ap=aq.endContainer;if(av!=ap&&aq.endOffset===0){var au=ar(av,ap);var at=au.nodeType==3?au.length:au.childNodes.length;aq.setEnd(au,at)}return aq}function ad(at,ay,aw,av,aq){var ap=[],ar=-1,ax,aA=-1,au=-1,az;T(at.childNodes,function(aC,aB){if(aC.nodeName==="UL"||aC.nodeName==="OL"){ar=aB;ax=aC;return false}});T(at.childNodes,function(aC,aB){if(aC.nodeName==="SPAN"&&c.getAttrib(aC,"data-mce-type")=="bookmark"){if(aC.id==ay.id+"_start"){aA=aB}else{if(aC.id==ay.id+"_end"){au=aB}}}});if(ar<=0||(aAar)){T(a.grep(at.childNodes),aq);return 0}else{az=c.clone(aw,X);T(a.grep(at.childNodes),function(aC,aB){if((aAar&&aB>ar)){ap.push(aC);aC.parentNode.removeChild(aC)}});if(aAar){at.insertBefore(az,ax.nextSibling)}}av.push(az);T(ap,function(aB){az.appendChild(aB)});return az}}function an(aq,at,aw){var ap=[],av,ar,au=true;av=am.inline||am.block;ar=c.create(av);ab(ar);N.walk(aq,function(ax){var ay;function az(aA){var aF,aD,aB,aC,aE;aE=au;aF=aA.nodeName.toLowerCase();aD=aA.parentNode.nodeName.toLowerCase();if(aA.nodeType===1&&x(aA)){aE=au;au=x(aA)==="true";aC=true}if(g(aF,"br")){ay=0;if(am.block){c.remove(aA)}return}if(am.wrapper&&y(aA,ae,al)){ay=0;return}if(au&&!aC&&am.block&&!am.wrapper&&I(aF)){aA=c.rename(aA,av);ab(aA);ap.push(aA);ay=0;return}if(am.selector){T(ah,function(aG){if("collapsed" in aG&&aG.collapsed!==ai){return}if(c.is(aA,aG.selector)&&!b(aA)){ab(aA,aG);aB=true}});if(!am.inline||aB){ay=0;return}}if(au&&!aC&&d(av,aF)&&d(aD,av)&&!(!aw&&aA.nodeType===3&&aA.nodeValue.length===1&&aA.nodeValue.charCodeAt(0)===65279)&&!b(aA)&&(!am.inline||!H(aA))){if(!ay){ay=c.clone(ar,X);aA.parentNode.insertBefore(ay,aA);ap.push(ay)}ay.appendChild(aA)}else{if(aF=="li"&&at){ay=ad(aA,at,ar,ap,az)}else{ay=0;T(a.grep(aA.childNodes),az);if(aC){au=aE}ay=0}}}T(ax,az)});if(am.wrap_links===false){T(ap,function(ax){function ay(aC){var aB,aA,az;if(aC.nodeName==="A"){aA=c.clone(ar,X);ap.push(aA);az=a.grep(aC.childNodes);for(aB=0;aB1||!H(az))&&ax===0){c.remove(az,1);return}if(am.inline||am.wrapper){if(!am.exact&&ax===1){az=ay(az)}T(ah,function(aB){T(c.select(aB.inline,az),function(aD){var aC;if(aB.wrap_links===false){aC=aD.parentNode;do{if(aC.nodeName==="A"){return}}while(aC=aC.parentNode)}Z(aB,al,aD,aB.exact?aD:null)})});if(y(az.parentNode,ae,al)){c.remove(az,1);az=0;return C}if(am.merge_with_parents){c.getParent(az.parentNode,function(aB){if(y(aB,ae,al)){c.remove(az,1);az=0;return C}})}if(az&&am.merge_siblings!==false){az=u(E(az),az);az=u(az,E(az,C))}}})}if(am){if(ag){if(ag.nodeType){ac=c.createRng();ac.setStartBefore(ag);ac.setEndAfter(ag);an(p(ac,ah),null,true)}else{an(ag,null,true)}}else{if(!ai||!am.inline||c.select("td.mceSelected,th.mceSelected").length){var ao=aa.selection.getNode();if(!m&&ah[0].defaultBlock&&!c.getParent(ao,c.isBlock)){Y(ah[0].defaultBlock)}aa.selection.setRng(af());ak=r.getBookmark();an(p(r.getRng(C),ah),ak);if(am.styles&&(am.styles.color||am.styles.textDecoration)){a.walk(ao,L,"childNodes");L(ao)}r.moveToBookmark(ak);R(r.getRng(C));aa.nodeChanged()}else{U("apply",ae,al)}}}}function B(ad,am,af){var ag=V(ad),ao=ag[0],ak,aj,ac,al=true;function ae(av){var au,at,ar,aq,ax,aw;if(av.nodeType===3){return}if(av.nodeType===1&&x(av)){ax=al;al=x(av)==="true";aw=true}au=a.grep(av.childNodes);if(al&&!aw){for(at=0,ar=ag.length;at=0;ac--){ab=ah[ac].selector;if(!ab){return C}for(ag=ad.length-1;ag>=0;ag--){if(c.is(ad[ag],ab)){return C}}}}return X}function J(ab,ae,ac){var ad;if(!P){P={};ad={};aa.onNodeChange.addToTop(function(ag,af,ai){var ah=n(ai),aj={};T(P,function(ak,al){T(ah,function(am){if(y(am,al,{},ak.similar)){if(!ad[al]){T(ak,function(an){an(true,{node:am,format:al,parents:ah})});ad[al]=ak}aj[al]=ak;return false}})});T(ad,function(ak,al){if(!aj[al]){delete ad[al];T(ak,function(am){am(false,{node:ai,format:al,parents:ah})})}})})}T(ab.split(","),function(af){if(!P[af]){P[af]=[];P[af].similar=ac}P[af].push(ae)});return this}a.extend(this,{get:V,register:l,apply:Y,remove:B,toggle:F,match:k,matchAll:v,matchNode:y,canApply:z,formatChanged:J});j();W();function h(ab,ac){if(g(ab,ac.inline)){return C}if(g(ab,ac.block)){return C}if(ac.selector){return c.is(ab,ac.selector)}}function g(ac,ab){ac=ac||"";ab=ab||"";ac=""+(ac.nodeName||ac);ab=""+(ab.nodeName||ab);return ac.toLowerCase()==ab.toLowerCase()}function O(ac,ab){var ad=c.getStyle(ac,ab);if(ab=="color"||ab=="backgroundColor"){ad=c.toHex(ad)}if(ab=="fontWeight"&&ad==700){ad="bold"}return""+ad}function q(ab,ac){if(typeof(ab)!="string"){ab=ab(ac)}else{if(ac){ab=ab.replace(/%(\w+)/g,function(ae,ad){return ac[ad]||ae})}}return ab}function f(ab){return ab&&ab.nodeType===3&&/^([\t \r\n]+|)$/.test(ab.nodeValue)}function S(ad,ac,ab){var ae=c.create(ac,ab);ad.parentNode.insertBefore(ae,ad);ae.appendChild(ad);return ae}function p(ab,am,ae){var ap,an,ah,al,ad=ab.startContainer,ai=ab.startOffset,ar=ab.endContainer,ak=ab.endOffset;function ao(aA){var au,ax,az,aw,av,at;au=ax=aA?ad:ar;av=aA?"previousSibling":"nextSibling";at=c.getRoot();function ay(aB){return aB.nodeName=="BR"&&aB.getAttribute("data-mce-bogus")&&!aB.nextSibling}if(au.nodeType==3&&!f(au)){if(aA?ai>0:akan?an:ai];if(ad.nodeType==3){ai=0}}if(ar.nodeType==1&&ar.hasChildNodes()){an=ar.childNodes.length-1;ar=ar.childNodes[ak>an?an:ak-1];if(ar.nodeType==3){ak=ar.nodeValue.length}}function aq(au){var at=au;while(at){if(at.nodeType===1&&x(at)){return x(at)==="false"?at:au}at=at.parentNode}return au}function aj(au,ay,aA){var ax,av,az,at;function aw(aC,aE){var aF,aB,aD=aC.nodeValue;if(typeof(aE)=="undefined"){aE=aA?aD.length:0}if(aA){aF=aD.lastIndexOf(" ",aE);aB=aD.lastIndexOf("\u00a0",aE);aF=aF>aB?aF:aB;if(aF!==-1&&!ae){aF++}}else{aF=aD.indexOf(" ",aE);aB=aD.indexOf("\u00a0",aE);aF=aF!==-1&&(aB===-1||aF0&&ah.node.nodeType===3&&ah.node.nodeValue.charAt(ah.offset-1)===" "){if(ah.offset>1){ar=ah.node;ar.splitText(ah.offset-1)}}}}if(am[0].inline||am[0].block_expand){if(!am[0].inline||(ad.nodeType!=3||ai===0)){ad=ao(true)}if(!am[0].inline||(ar.nodeType!=3||ak===ar.nodeValue.length)){ar=ao()}}if(am[0].selector&&am[0].expand!==X&&!am[0].inline){ad=af(ad,"previousSibling");ar=af(ar,"nextSibling")}if(am[0].block||am[0].selector){ad=ac(ad,"previousSibling");ar=ac(ar,"nextSibling");if(am[0].block){if(!H(ad)){ad=ao(true)}if(!H(ar)){ar=ao()}}}if(ad.nodeType==1){ai=s(ad);ad=ad.parentNode}if(ar.nodeType==1){ak=s(ar)+1;ar=ar.parentNode}return{startContainer:ad,startOffset:ai,endContainer:ar,endOffset:ak}}function Z(ah,ag,ae,ab){var ad,ac,af;if(!h(ae,ah)){return X}if(ah.remove!="all"){T(ah.styles,function(aj,ai){aj=q(aj,ag);if(typeof(ai)==="number"){ai=aj;ab=0}if(!ab||g(O(ab,ai),aj)){c.setStyle(ae,ai,"")}af=1});if(af&&c.getAttrib(ae,"style")==""){ae.removeAttribute("style");ae.removeAttribute("data-mce-style")}T(ah.attributes,function(ak,ai){var aj;ak=q(ak,ag);if(typeof(ai)==="number"){ai=ak;ab=0}if(!ab||g(c.getAttrib(ab,ai),ak)){if(ai=="class"){ak=c.getAttrib(ae,ai);if(ak){aj="";T(ak.split(/\s+/),function(al){if(/mce\w+/.test(al)){aj+=(aj?" ":"")+al}});if(aj){c.setAttrib(ae,ai,aj);return}}}if(ai=="class"){ae.removeAttribute("className")}if(e.test(ai)){ae.removeAttribute("data-mce-"+ai)}ae.removeAttribute(ai)}});T(ah.classes,function(ai){ai=q(ai,ag);if(!ab||c.hasClass(ab,ai)){c.removeClass(ae,ai)}});ac=c.getAttribs(ae);for(ad=0;adad?ad:af]}if(ab.nodeType===3&&ag&&af>=ab.nodeValue.length){ab=new t(ab,aa.getBody()).next()||ab}if(ab.nodeType===3&&!ag&&af===0){ab=new t(ab,aa.getBody()).prev()||ab}return ab}function U(ak,ab,ai){var al="_mce_caret",ac=aa.settings.caret_debug;function ad(ap){var ao=c.create("span",{id:al,"data-mce-bogus":true,style:ac?"color:red":""});if(ap){ao.appendChild(aa.getDoc().createTextNode(G))}return ao}function aj(ap,ao){while(ap){if((ap.nodeType===3&&ap.nodeValue!==G)||ap.childNodes.length>1){return false}if(ao&&ap.nodeType===1){ao.push(ap)}ap=ap.firstChild}return true}function ag(ao){while(ao){if(ao.id===al){return ao}ao=ao.parentNode}}function af(ao){var ap;if(ao){ap=new t(ao,ao);for(ao=ap.current();ao;ao=ap.next()){if(ao.nodeType===3){return ao}}}}function ae(aq,ap){var ar,ao;if(!aq){aq=ag(r.getStart());if(!aq){while(aq=c.get(al)){ae(aq,false)}}}else{ao=r.getRng(true);if(aj(aq)){if(ap!==false){ao.setStartBefore(aq);ao.setEndBefore(aq)}c.remove(aq)}else{ar=af(aq);if(ar.nodeValue.charAt(0)===G){ar=ar.deleteData(0,1)}c.remove(aq,1)}r.setRng(ao)}}function ah(){var aq,ao,av,au,ar,ap,at;aq=r.getRng(true);au=aq.startOffset;ap=aq.startContainer;at=ap.nodeValue;ao=ag(r.getStart());if(ao){av=af(ao)}if(at&&au>0&&au=0;au--){aq.appendChild(c.clone(ay[au],false));aq=aq.firstChild}aq.appendChild(c.doc.createTextNode(G));aq=aq.firstChild;var ar=c.getParent(az,I);if(ar&&c.isEmpty(ar)){az.parentNode.replaceChild(ax,az)}else{c.insertAfter(ax,az)}r.setCursorLocation(aq,1);if(c.isEmpty(az)){c.remove(az)}}}function an(){var ap,ao,aq;ao=ag(r.getStart());if(ao&&!c.isEmpty(ao)){a.walk(ao,function(ar){if(ar.nodeType==1&&ar.id!==al&&!c.isEmpty(ar)){c.setAttrib(ar,"data-mce-bogus",null)}},"childNodes")}}if(!self._hasCaretEvents){aa.onBeforeGetContent.addToTop(function(){var ao=[],ap;if(aj(ag(r.getStart()),ao)){ap=ao.length;while(ap--){c.setAttrib(ao[ap],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(ao){aa[ao].addToTop(function(){ae();an()})});aa.onKeyDown.addToTop(function(ao,aq){var ap=aq.keyCode;if(ap==8||ap==37||ap==39){ae(ag(r.getStart()))}an()});r.onSetContent.add(an);self._hasCaretEvents=true}if(ak=="apply"){ah()}else{am()}}function R(ac){var ab=ac.startContainer,ai=ac.startOffset,ae,ah,ag,ad,af;if(ab.nodeType==3&&ai>=ab.nodeValue.length){ai=s(ab);ab=ab.parentNode;ae=true}if(ab.nodeType==1){ad=ab.childNodes;ab=ad[Math.min(ai,ad.length-1)];ah=new t(ab,c.getParent(ab,c.isBlock));if(ai>ad.length-1||ae){ah.next()}for(ag=ah.current();ag;ag=ah.next()){if(ag.nodeType==3&&!f(ag)){af=c.create("a",null,G);ag.parentNode.insertBefore(af,ag);ac.setStart(ag,0);r.setRng(ac);c.remove(af);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}if(c.inline_styles){h=e.explode(c.font_size_legacy_values);d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size,10)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});(function(b){var a=b.dom.TreeWalker;b.EnterKey=function(f){var i=f.dom,e=f.selection,d=f.settings,h=f.undoManager,c=f.schema.getNonEmptyElements();function g(B){var v=e.getRng(true),G,j,A,u,p,M,C,o,k,n,t,J,x,D;function E(N){return N&&i.isBlock(N)&&!/^(TD|TH|CAPTION|FORM)$/.test(N.nodeName)&&!/^(fixed|absolute)/i.test(N.style.position)&&i.getContentEditable(N)!=="true"}function F(O){var N;if(b.isIE&&!b.isIE11&&i.isBlock(O)){N=e.getRng();O.appendChild(i.create("span",null,"\u00a0"));e.select(O);O.lastChild.outerHTML="";e.setRng(N)}}function z(P){var O=P,Q=[],N;while(O=O.firstChild){if(i.isBlock(O)){return}if(O.nodeType==1&&!c[O.nodeName.toLowerCase()]){Q.push(O)}}N=Q.length;while(N--){O=Q[N];if(!O.hasChildNodes()||(O.firstChild==O.lastChild&&O.firstChild.nodeValue==="")){i.remove(O)}else{if(O.nodeName=="A"&&(O.innerText||O.textContent)===" "){i.remove(O)}}}}function m(O){var T,R,N,U,S,Q=O,P;N=i.createRng();if(O.hasChildNodes()){T=new a(O,O);while(R=T.current()){if(R.nodeType==3){N.setStart(R,0);N.setEnd(R,0);break}if(c[R.nodeName.toLowerCase()]){N.setStartBefore(R);N.setEndBefore(R);break}Q=R;R=T.next()}if(!R){N.setStart(Q,0);N.setEnd(Q,0)}}else{if(O.nodeName=="BR"){if(O.nextSibling&&i.isBlock(O.nextSibling)){if(!M||M<9){P=i.create("br");O.parentNode.insertBefore(P,O)}N.setStartBefore(O);N.setEndBefore(O)}else{N.setStartAfter(O);N.setEndAfter(O)}}else{N.setStart(O,0);N.setEnd(O,0)}}e.setRng(N);i.remove(P);S=i.getViewPort(f.getWin());U=i.getPos(O).y;if(US.y+S.h){f.getWin().scrollTo(0,U'}return R}function q(Q){var P,O,N;if(A.nodeType==3&&(Q?u>0:u0){return true}}}function L(){var P,O,N;if(A&&A.nodeType==3&&u>=A.nodeValue.length){if((!b.isIE||b.isIE11)&&!y()){P=i.create("br");v.insertNode(P);v.setStartAfter(P);v.setEndAfter(P);O=true}}P=i.create("br");v.insertNode(P);if((b.isIE&&!b.isIE11)&&t=="PRE"&&(!M||M<8)){P.parentNode.insertBefore(i.doc.createTextNode("\r"),P)}N=i.create("span",{}," ");P.parentNode.insertBefore(N,P);e.scrollIntoView(N);i.remove(N);if(!O){v.setStartAfter(P);v.setEndAfter(P)}else{v.setStartBefore(P);v.setEndBefore(P)}e.setRng(v);h.add()}function s(N){do{if(N.nodeType===3){N.nodeValue=N.nodeValue.replace(/^[\r\n]+/,"")}N=N.firstChild}while(N)}function K(P){var N=i.getRoot(),O,Q;O=P;while(O!==N&&i.getContentEditable(O)!=="false"){if(i.getContentEditable(O)==="true"){Q=O}O=O.parentNode}return O!==N?Q:N}function I(O){var N;if(!b.isIE||b.isIE11){O.normalize();N=O.lastChild;if(!N||(/^(left|right)$/gi.test(i.getStyle(N,"float",true)))){i.add(O,"br")}}}if(!v.collapsed){f.execCommand("Delete");return}if(B.isDefaultPrevented()){return}A=v.startContainer;u=v.startOffset;x=(d.force_p_newlines?"p":"")||d.forced_root_block;x=x?x.toUpperCase():"";M=i.doc.documentMode;C=B.shiftKey;if(A.nodeType==1&&A.hasChildNodes()){D=u>A.childNodes.length-1;A=A.childNodes[Math.min(u,A.childNodes.length-1)]||A;if(D&&A.nodeType==3){u=A.nodeValue.length}else{u=0}}j=K(A);if(!j){return}h.beforeChange();if(!i.isBlock(j)&&j!=i.getRoot()){if(!x||C){L()}return}if((x&&!C)||(!x&&C)){A=l(A,u)}p=i.getParent(A,i.isBlock);n=p?i.getParent(p.parentNode,i.isBlock):null;t=p?p.nodeName.toUpperCase():"";J=n?n.nodeName.toUpperCase():"";if(J=="LI"&&!B.ctrlKey){p=n;t=J}if(t=="LI"){if(!x&&C){L();return}if(i.isEmpty(p)){if(/^(UL|OL|LI)$/.test(n.parentNode.nodeName)){return false}H();return}}if(t=="PRE"&&d.br_in_pre!==false){if(!C){L();return}}else{if((!x&&!C&&t!="LI")||(x&&C)){L();return}}x=x||"P";if(q()){if(/^(H[1-6]|PRE)$/.test(t)&&J!="HGROUP"){o=r(x)}else{o=r()}if(d.end_container_on_empty_block&&E(n)&&i.isEmpty(p)){o=i.split(n,p)}else{i.insertAfter(o,p)}m(o)}else{if(q(true)){o=p.parentNode.insertBefore(r(),p);F(o)}else{G=v.cloneRange();G.setEndAfter(p);k=G.extractContents();s(k);o=k.firstChild;i.insertAfter(k,p);z(o);I(p);m(o)}}i.setAttrib(o,"id","");h.add()}f.onKeyDown.add(function(k,j){if(j.keyCode==13){if(g(j)!==false){j.preventDefault()}}})}})(tinymce); \ No newline at end of file diff --git a/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/tiny_mce_popup.js b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/tiny_mce_popup.js new file mode 100644 index 0000000..0808f8f --- /dev/null +++ b/branches/conlite20/conlite/external/wysiwyg/tinymce3/jscripts/tiny_mce/tiny_mce_popup.js @@ -0,0 +1,5 @@ + +// Uncomment and change this document.domain value if you are loading the script cross subdomains +// document.domain = 'moxiecode.com'; + +var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document,{ownEvents:true,proxy:tinyMCEPopup._eventProxy});b.dom.bind(window,"ready",b._onDOMLoaded,b);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var a=this;setTimeout(function(){var b=a.dom.getViewPort(window);a.editor.windowManager.resizeBy(a.getWindowArg("mce_width")-b.w,a.getWindowArg("mce_height")-b.h,a.id||window)},10)},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false&&b.editor.settings.language_load!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write(' +{COMPRESSOR} + + + diff --git a/branches/conlite20/conlite/favicon.ico b/branches/conlite20/conlite/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fbca42b7360bfad06a9e6b3f67fe35c3d7c81acc GIT binary patch literal 29038 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 aVvXMgvCXt&iUIsa2xFiHbYJcFL;f56R8$%O literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/frameset.php b/branches/conlite20/conlite/frameset.php new file mode 100644 index 0000000..c60d994 --- /dev/null +++ b/branches/conlite20/conlite/frameset.php @@ -0,0 +1,132 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-20 + * modified 2008-06-16, Holger Librenz, Hotfix: added check for illegal calling + * modified 2008-06-25, Timo Trautmann, Contenido Framework Constand added + * modified 2008-07-02, Frederic Schneider, add security fix and include security_class + * modified 2008-10-22, Oliver Lohkemper, update default-value for leftframewidth from 250px to 245px + * modified 2009-10-16, Ortwin Pinke, added rewrite of ampersand in frameset url + * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307] + * + * $Id: frameset.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +// Contenido startup process +include_once ('./includes/startup.php'); + +page_open( + array('sess' => 'Contenido_Session', + 'auth' => 'Contenido_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); + +i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang); + +cInclude ("includes", 'cfg_language_de.inc.php'); +cInclude ("includes", 'functions.forms.php'); + +# Create Contenido classes +$db = new DB_ConLite; +$tpl = new Template; + +# Build the Contenido +# Content area frameset +$tpl->reset(); + +if (isset($_GET["appendparameters"])) +{ + $tpl->set('s', 'LEFT', str_replace("&", "&", $sess->url("frameset_left.php?area=$area&appendparameters=".$_GET["appendparameters"]))); + $tpl->set('s', 'RIGHT', str_replace("&", "&", $sess->url("frameset_right.php?area=$area&appendparameters=".$_GET["appendparameters"]))); + $tpl->set('s', 'WIDTH', getEffectiveSetting("backend", "leftframewidth", 245)); +} else { + $tpl->set('s', 'LEFT', str_replace("&", "&", $sess->url("frameset_left.php?area=$area"))); + $tpl->set('s', 'RIGHT', str_replace("&", "&", $sess->url("frameset_right.php?area=$area"))); + $tpl->set('s', 'WIDTH', getEffectiveSetting("backend", "leftframewidth", 245)); +} + +$tpl->set('s', 'VERSION', $cfg['version']); +$tpl->set('s', 'LOCATION', $cfg['path']['contenido_fullhtml']); + +/* Hide menu-frame for some areas */ + +/* First of all, fetch the meta data of the area table to check if there's a menuless column */ +$aMetadata = $db->metadata($cfg["tab"]["area"]); +$bFound = false; + +foreach ($aMetadata as $aFieldDescriptor) +{ + if ($aFieldDescriptor["name"] == "menuless") + { + $bFound = true; + break; + } +} + +$menuless_areas = array(); + +if ($bFound == true) +{ + /* Yes, a menuless column does exist */ + $sql = "SELECT name FROM ".$cfg["tab"]["area"]." WHERE menuless='1'"; + $db->query($sql); + + while ($db->next_record()) + { + $menuless_areas[] = $db->f("name"); + } +} else { + /* No, use old style hard-coded menuless area stuff */ + $menuless_areas = array("str", "logs", "debug", "system"); +} + +if ( in_array($area, $menuless_areas) || (isset($menuless) && $menuless == 1)) { + $menuless = true; + if (isset($_GET["appendparameters"])) + { + $tpl->set('s', 'FRAME[1]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=1&appendparameters=".$_GET["appendparameters"]))); + $tpl->set('s', 'FRAME[2]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=2&appendparameters=".$_GET["appendparameters"]))); + $tpl->set('s', 'FRAME[3]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=3&appendparameters=".$_GET["appendparameters"]))); + $tpl->set('s', 'FRAME[4]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=4&appendparameters=".$_GET["appendparameters"]))); + } else { + $tpl->set('s', 'FRAME[1]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=1"))); + $tpl->set('s', 'FRAME[2]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=2"))); + $tpl->set('s', 'FRAME[3]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=3"))); + $tpl->set('s', 'FRAME[4]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=4"))); + } +} +$tpl->set('s', 'CONTENIDOPATH', $cfg["path"]["contenido_fullhtml"]."favicon.ico"); + +if ((isset($menuless) && $menuless == 1)) { + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['frameset_menuless_content']); +} else { + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['frameset_content']); +} + +page_close(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/frameset_left.php b/branches/conlite20/conlite/frameset_left.php new file mode 100644 index 0000000..b6dc746 --- /dev/null +++ b/branches/conlite20/conlite/frameset_left.php @@ -0,0 +1,77 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-20 + * modified 2008-06-16, Holger Librenz, Hotfix: added check for illegal calling + * modified 2008-06-25, Timo Trautmann, Contenido Framework Constand added + * modified 2008-07-02, Frederic Schneider, new code-header and include security_class + * modified 2009-10-16, Ortwin Pinke, added rewrite of ampersand in frameset url + * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307] + * + * $Id: frameset_left.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +// Contenido startup process +include_once ('./includes/startup.php'); + +page_open( + array('sess' => 'Contenido_Session', + 'auth' => 'Contenido_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); + +i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang); + +cInclude ("includes", 'cfg_language_de.inc.php'); +cInclude ("includes", 'functions.forms.php'); + +# Create Contenido classes +$db = new DB_ConLite; +$tpl = new Template; + +# Build the Contenido +# Content area frameset +$tpl->reset(); + +if (isset($_GET["appendparameters"])) +{ + $tpl->set('s', 'FRAME[1]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=1&appendparameters=".$_GET["appendparameters"]))); + $tpl->set('s', 'FRAME[2]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=2&appendparameters=".$_GET["appendparameters"]))); + $tpl->set('s', 'FRAME[3]', "templates/standard/template.deco.html"); +} else { + $tpl->set('s', 'FRAME[1]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=1"))); + $tpl->set('s', 'FRAME[2]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=2"))); + $tpl->set('s', 'FRAME[3]', "templates/standard/template.deco.html"); +} + +$tpl->set('s', 'VERSION', $cfg['version']); +$tpl->set('s', 'CONTENIDOPATH', $cfg["path"]["contenido_fullhtml"]."favicon.ico"); +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['frameset_left']); + +page_close(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/frameset_right.php b/branches/conlite20/conlite/frameset_right.php new file mode 100644 index 0000000..58b59fc --- /dev/null +++ b/branches/conlite20/conlite/frameset_right.php @@ -0,0 +1,75 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-20# + * modified 2008-06-25, Timo Trautmann, Contenido Framework Constand added + * modified 2008-07-02, Frederic Schneider, new code-header and include security_class + * modified 2009-10-16, Ortwin Pinke, added rewrite of ampersand in frameset url + * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307] + * + * $Id: frameset_right.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +// Contenido startup process +include_once ('./includes/startup.php'); + +page_open( + array('sess' => 'Contenido_Session', + 'auth' => 'Contenido_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); + +i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang); + +cInclude ("includes", 'cfg_language_de.inc.php'); +cInclude ("includes", 'functions.forms.php'); + +# Create Contenido classes +$db = new DB_ConLite; +$tpl = new Template; + +# Build the Contenido +# Content area frameset +$tpl->reset(); + +if (isset($_GET["appendparameters"])) +{ + $tpl->set('s', 'FRAME[3]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=3&appendparameters=".$_GET["appendparameters"]))); + $tpl->set('s', 'FRAME[4]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=4&appendparameters=".$_GET["appendparameters"]))); +} else { + $tpl->set('s', 'FRAME[3]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=3"))); + $tpl->set('s', 'FRAME[4]', str_replace("&", "&", $sess->url("main.php?area=$area&frame=4"))); +} + +$tpl->set('s', 'VERSION', $cfg['version']); +$tpl->set('s', 'CONTENIDOPATH', $cfg["path"]["contenido_fullhtml"]."favicon.ico"); + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['frameset_right']); + +page_close(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/header.php b/branches/conlite20/conlite/header.php new file mode 100644 index 0000000..c2724c0 --- /dev/null +++ b/branches/conlite20/conlite/header.php @@ -0,0 +1,128 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-03-18 + * modified 2008-06-25, Timo Trautmann, Contenido Framework Constand added + * modified 2008-07-02, Frederic Schneider, add security fix and include_security_class + * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307] + * + * $Id: header.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +// Contenido startup process +include_once ('./includes/startup.php'); + +$db = new DB_ConLite; + + +page_open( + array('sess' => 'Contenido_Session', + 'auth' => 'Contenido_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); + +i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang); + +cInclude ("includes", 'cfg_language_de.inc.php'); +cInclude ("includes", 'functions.forms.php'); + +if (isset($killperms)) +{ + $sess->unregister("right_list"); + $sess->unregister("area_rights"); + $sess->unregister("item_rights"); +} + +i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang); + +$sess->register("sess_area"); + +if (isset($area)) { + $sess_area = $area; +} else { + $area = (isset($sess_area)) ? $sess_area : 'login'; +} + +if (is_numeric($changelang)) { + unset($area_rights); + unset($item_rights); + + $sess->register("lang"); + $lang = $changelang; +} + +if (empty($client) || !is_numeric($client) || + (!$perm->have_perm_client("client[".$client."]") && + !$perm->have_perm_client("admin[".$client."]"))) +{ + // use first client which is accessible + $sess->register("client"); + $sql = "SELECT idclient FROM ".$cfg["tab"]["clients"]." ORDER BY idclient ASC"; + $db->query($sql); + + while ($db->next_record()) + { + $mclient = $db->f("idclient"); + + if ($perm->have_perm_client("client[".$mclient."]") || + $perm->have_perm_client("admin[".$mclient."]") ) + { + unset($lang); + $client = $mclient; + break; + } + } +} else { + $sess->register("client"); +} + +if (empty($lang) || !is_numeric($lang)) { // use first language found + $sess->register("lang"); + $sql = "SELECT * FROM ".$cfg["tab"]["lang"]." AS A, ".$cfg["tab"]["clients_lang"]." AS B WHERE A.idlang=B.idlang AND idclient='".Contenido_Security::toInteger($client)."' ORDER BY A.idlang ASC"; + $db->query($sql); + $db->next_record(); + $lang = $db->f("idlang"); +} else { + $sess->register("lang"); +} + +// call http encoding header sending function +sendEncodingHeader($db, $cfg, $lang); + +$perm->load_permissions(); + +$xml = new XML_doc; +$tpl = new Template; +$nav = new Contenido_Navigation; + +rereadClients(); + +$nav->buildHeader($lang); + +page_close(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/images/actions/clear_right.gif b/branches/conlite20/conlite/images/actions/clear_right.gif new file mode 100644 index 0000000000000000000000000000000000000000..7444b3ba116a4192f61c984d5c0a1d4faae3f6ca GIT binary patch literal 158 zcmZ?wbhEHb6krfw*v!M=;NY-#@80d(w|8`OL`6kqW@b*FJXu#)_x$A8Au$;-2Eof;Kdk~f5$UZByuaMLkM-6N~6 zXa|ZIZDwG<{fa?@DW%&bDbZVN{_@^{gBLwa&OS>!wj^n;F+`TPB%#pCw*{J_}krN`qKZ@5d3 z$OB@sx6?fok1SWXbUa L!7w2N6#)P{)y^5x^^{0FnJ}1rf?n!3@8(s(!X#8clSz-E(fdJ3nDiU_^@d{I+(<@Dbt35 ak&VG9mi>>nZ{!T1kqn-$elF{r5}E+k@;C|r literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/article.gif b/branches/conlite20/conlite/images/article.gif new file mode 100644 index 0000000000000000000000000000000000000000..dc112aa7214f648f164e16739f3274f546677728 GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4EYin$Xj%S^=HrbG f#VdGU+O$5hsJ)+@_2iVC=88QL-oa}E7#OSpyAm2n literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/article_locked.gif b/branches/conlite20/conlite/images/article_locked.gif new file mode 100644 index 0000000000000000000000000000000000000000..35566f826ebd653c5847cf1a1955158072693fed GIT binary patch literal 190 zcmV;v073spNk%w1VGsZi0J9GOTA0lMV6p%I|E$aA>+|_Hg25GSxCmvm4QRFE?e_8Z z`}g|&hqT%oakddAP@=%FJMRr1{D!tg`5CLl@TKFWK0mFs9+jk&;nRN@;ezU s3Qt8(kT6UR4uY}yW)T1e!&Aql6htmM1seeeAtNPygo_g?jExZhJ4wPuTL1t6 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/article_unlocked.gif b/branches/conlite20/conlite/images/article_unlocked.gif new file mode 100644 index 0000000000000000000000000000000000000000..3e9bdf52665a039b16b50f921d556f6e4478c176 GIT binary patch literal 173 zcmV;e08;-)Nk%w1VGsZi0J9GO0AR8I|Nm5!%Mxq1)a3GRq|?IL?FMAC`1}1DaJl5} z_Y7yX4{5f~;qb=W?f?J)A^8LW000jFEC2ui01yBW000D9@PSDycv#vkaXp2BAVzU$ z8jv(W>o%Eo5P>2jiJ%0;Q5C#FWk4%b3<1GL5HM5_0mfz#Ks=+RU1{}ZOu=t_b ba5|o^lAyU-gv15_LN-nFyd|ZdJR$%)?PEtl literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/artikel_spez_akt.gif b/branches/conlite20/conlite/images/artikel_spez_akt.gif new file mode 100644 index 0000000000000000000000000000000000000000..94358f2ffbb57394a0d33f1cb9fb905b1928349b GIT binary patch literal 171 zcmZ?wbhEHb6krfw*v!Mgkg)Op|Nr~XGraorbNi*2vPHY@Kd(P^U2DU+=LO3y|M>OP zvgHs15>Wif!pOkD!=M8a1DV0V5;39CGkdC8c7Tv1^F)zbO)ME*I$?#&44i^ES4kXC z)W`@D)M!r7Fj&AbmGPB>h)h89lTAN)Tr>|fOvvC-$TXYNC;lNYX2Xr1Bro=`S?APE PZr#wF@w-Kkk--`O<9a{D literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/artikel_spez_inakt.gif b/branches/conlite20/conlite/images/artikel_spez_inakt.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf081b0949b88eaa31623bb80efc05f55bc8a6cf GIT binary patch literal 148 zcmZ?wbhEHb6krfw*v!Gekg)Op|Nq-By)0OE`PHYNvPHW#oO^EBa)<#3Q2fcl$iTqC zpaYTznZdx~DA4GcJ=H8bpiQC0K;%{;OGcJVSmCk_jzP>h?9QrpHUtRn5qT)?!mGJ^ eQGeKx&=|*=M@ynJt>$0IIJ`7rm#_;9gEas#D=vWm literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/avail_clients.gif b/branches/conlite20/conlite/images/avail_clients.gif new file mode 100644 index 0000000000000000000000000000000000000000..dc97c8c5b5cdf8c13e5b845b850e1888f65d4f42 GIT binary patch literal 90 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr%i}cN0_Et8@r>Lo+ o;NEokyRC~>ggywheU-In5>t}lp0gouYcqG-`S1&fFfdpH08#H82mk;8 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/back.gif b/branches/conlite20/conlite/images/back.gif new file mode 100644 index 0000000000000000000000000000000000000000..23816477fcd56f970ff42d6ff9481862fe3e3df1 GIT binary patch literal 251 zcmVNk%w1VH5xq0K^{v|Ns9qOJm}Cdg`#S;A(2^z`)*JUFM&k{q^9Vr?^YiD4iSyjt{`~y?^z{Dv`rKVz{rUOdb94Rr`uy~jEv=tjQ{`uA^8LW0018VEC2ui02BZe000Ge;3tk`X`X1RqCxAvuNeSzZPS5V zLpG1=fJeqcvt%B>(o9ld6eyHtK?2ArX^X*OpdBodq!|r?*=#U~nl)T&bSf23Lk(02 zCW5;_0UpgF1RMkx7l8y3RX`2~2{Z`?4t*kG02(%yk{^^eHfw$`pe-w-q@|=G06Qp? Bc?bXi literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/background.jpg b/branches/conlite20/conlite/images/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c8c58135cab2371eff3ef64294b92d079b957b55 GIT binary patch literal 724 zcmex=*9TT{6PP!$IwBLgEV)0E9=XJ-jK?vA>4aq+tSU~wjp_{VxM zn;D7C#KdOLBn}ZqFc}%)qKwRp_KJmPeAqTzyWDa5`m?mOw4@}6IY2ktD<(@EvrY4H z5@=C!>4z8t68))9z=Qtz>TG{5cz*m;F7$7kp2uUZsC1=i zy*57|v`d7=Z7i&D+B;#<;<3X+x;IKHpZMxtQSGFj{A2KFTZ-XSF&bX)j@|gNKR)&+$ N=EdW4lkNZC1OU_LsmA~S literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/bg_dark.gif b/branches/conlite20/conlite/images/bg_dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..abb48866719fdd004dbd9cef7c8f858b83d4ba17 GIT binary patch literal 59 zcmZ?wbhEHbWMvRxn8?7ee*K~U|Nk5NmoqRhDE?#tk_-$wAOa-Mz{E49f92`7{E9P- JBcd4?tO4Ni4@Uq1 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/bg_high.gif b/branches/conlite20/conlite/images/bg_high.gif new file mode 100644 index 0000000000000000000000000000000000000000..94a5dbc154ced853d67a8e4976adfe166bbcb015 GIT binary patch literal 52 zcmZ?wbhEHbWMmLwn8?6zTwt+d6eufwge#j&`_vA4*vwaBTj z!m6>ut+K|mxyiG*$*HiztFXhexXG=u#jCNzu(ijpufnsr%C5A=ueHaju*0dZ!>qBz zvA4;ouEPKS{{R30A^8LV00000EC2ui00jUP000F(U?+~`Fmy_%t!$AMPbNdzWKYYc vZz>% literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_art_conf2.gif b/branches/conlite20/conlite/images/but_art_conf2.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2015c5c86d608eccf0e789e3267e23fd65718d1 GIT binary patch literal 76 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$uls?iuBD~_LhI~oGokx Z#`ku8t`7~iU{iV0`-s!voTdnaH2}|L6;%KL literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_art_new.gif b/branches/conlite20/conlite/images/but_art_new.gif new file mode 100644 index 0000000000000000000000000000000000000000..0472fdc878dc9817fffa313fd47ec8e064adc858 GIT binary patch literal 74 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulrXi}cN0_Lg6n$5APZ Xzi-R;=arYzCMHi^y6Wf#Rt9STlu8vk literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_back.gif b/branches/conlite20/conlite/images/but_back.gif new file mode 100644 index 0000000000000000000000000000000000000000..716d802faaa965baa2ab13968c9b74726feb950e GIT binary patch literal 131 zcmZ?wbhEHb6krfw*v!YUdGn6{|NmdUd~L^$y<4{I{P*wQuV26J-+%b!%h!GT4jnso z>dl+CCr+Gs_3AYP7%2W^VPs(7W6%NdKxQzo7+h%d%${oY`mDO8tf`43hl)o)S=YjS h>s3VxbT60Y80PJZ(wNF=5b?)p{=%XTLrWzFYXC$tJ3{~f literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_cancel.gif b/branches/conlite20/conlite/images/but_cancel.gif new file mode 100644 index 0000000000000000000000000000000000000000..1037f3bf7a754c954309398d4f41fb719e370509 GIT binary patch literal 104 zcmZ?wbhEHb6krfwSj56`-AM5Dtj^cd+yDRn&wvCJf3h$#Ft9M_fW$y*8JKlFHr!dO wcgnK0!>p}vrbOeG(s+wr)vY-TcGb*@?hE0%5OMl}Z^AeG=@Xa)g@hQa0Vj_j^Z)<= literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_cancel_off.gif b/branches/conlite20/conlite/images/but_cancel_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..360dd20308122f7571cb1d5d0368d860585c5110 GIT binary patch literal 104 zcmZ?wbhEHb6krfwSj57xdGn5&H}BlMdHetW{|rb#@h1x-0|N_#4oD27mVsHDz+ac-(YNe);R~@XYkn?!ofx<|fPujp0Hd25egFUf literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_cat_conf2.gif b/branches/conlite20/conlite/images/but_cat_conf2.gif new file mode 100644 index 0000000000000000000000000000000000000000..f336990eb7c2e6c92724482d9c01b724d5a5ac9b GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr1i}Wqp{o=rl+2<~F gZ@y>Dz+ac-(YNe);R~@XYkn?!ofx<|fPujp0Hd25egFUf literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_copy.gif b/branches/conlite20/conlite/images/but_copy.gif new file mode 100644 index 0000000000000000000000000000000000000000..f485489deade6210bb4f4af200cb7efcf27e838c GIT binary patch literal 86 zcmZ?wbhEHb6krfwn8?Jykg$;f1{8m?FfuSOG3bBLPudhnDS^sL5R=Fvr#+ g=Sr=N8q>mxx|iFc=9-mCDqk;3e%?FbJ}ZMY0Mbhqg#Z8m literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_delete.gif b/branches/conlite20/conlite/images/but_delete.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7251de2aa2b794c5650312624330e8c6c49f083 GIT binary patch literal 195 zcmZ?wbhEHb6krfwI3mn&-AM5N|NkGiuYOvU`euIrkK0!tBzfNP(*1H`|F0(x?#DX+ z`||sK=CIFBLjmlgAPbJ$W8`UhX*V@DUn@i ztEM?_=*!jF{mf?hwl&X8?kP-Yce%J)lBLD*VL*!PWqF%B0`G+5DDVrA^eLVm0BL-|h@h1x- z0|O_64oDJY1_O(^L8E8(RI_YrftyzqSdOxHIY#9jo3SeG>b@_DXG^qrqW7h1GQ4Hy X31B*sWU$iYlf#7WqF%B0`G+5DDVrA^eLVm0BL-|h@h1x- z0|O_64oDJY1_O(^L8E8(RI_YrftyzqSdOxHIY#9jo3SeG>b@_DXG^qrqW7h1GQ4Hy X31B*sWU$iYlf#7wnrz<>}KjRBA)aBK05AVXNk%w1VGsZi0K^{v0AR7f+3Y=r!}j_7HG;xPj>qZo`73+A-0AfH|Noi4 z;DWK(daT#T-0tx9`U7IJ~LzTcd|;fl7~*yrD$+@8`i9v*x!5Y^2K9^56+l2b=9(E z%a<&9|Mtzod2{dFyt!}J&Zeg3|Ns9p5Dj!dDnWKJupVBZ*q4$yFJslZHxhdbbWR^~ zyj{HR{T{t<*6d3Z8#p_6w+np;vJ+_O_}s|+tnS)O0VYkC?RQu780I+0J#kas;IVq< zO-Zx7Cq>Ns1}yr_4spE9b-n`4C3bA>rDZW(Ju%FN%xwJ30!+-jzKqO_SsY!4#qCwR zd`tO^c-eSaU3vNSIa${(=UHg5xFnjbU{8TjtDyip4?kndfgSq03i&FM1kdwdG<4do jpTNm<{q&;Fg*-P59^HF(|M|;TJ9Xc_d;dXIk--`OBAIta literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_editswf.gif b/branches/conlite20/conlite/images/but_editswf.gif new file mode 100644 index 0000000000000000000000000000000000000000..ae87011a6fbee4b4b492052912a79d1e7fc84a23 GIT binary patch literal 337 zcmZ?wbhEHb3}E14IKseiZRgcDw_n{odUsyXjKy*DzkmLIc>4Z5Jv%O}J-fAG)2ghc z+nP6jeE$CAqGKD%RzJD$bcV~s|Ns9p5Dj!dDnWKJuwGxF+?SF$FJslZHxhdbbdEPF zTrXbt-bVl1F7_jW4V<0UZig8KVS*yyCh zdtxyIBaf@^`ZcTT8xJ${)(bQmap^ZX39_*G^Oeb^Uq%cT?S?@nG7Ws25SIZ CR(THq literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_edittext.gif b/branches/conlite20/conlite/images/but_edittext.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe4639956a69b72372d38a10afabe58fcc5b62f5 GIT binary patch literal 138 zcmZ?wbhEHb6krfw*v!emkg)Op|Nq-Bz2r>WqF%B0`G+5DDVrA^eLVm0BL-|h@h1x- z0|O_64oDJY1_O(^L8E8(RI_YrftyzqSdOxHIY#9jo3SeG>b@_DXG^qrqW7h1GQ4Hy X31B*sWU$iYlf#7aeFLRzs0z`Wb zqa$nvk~5SJq@E#;V-06bAG8d%B3KhxdqJ?Vpo{^)AjQGSvdPTB9na9w(iRZ_J8{=> AHvj+t literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_help.gif b/branches/conlite20/conlite/images/but_help.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b11a63d22c8116f89c0677eeeeed7948fb089c8 GIT binary patch literal 79 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr1i1f`|_Lkp&h9Z;K cL!aBFk&!chxGt59T2++w@|D4=00stY014d}1poj5 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_invert_selection.gif b/branches/conlite20/conlite/images/but_invert_selection.gif new file mode 100644 index 0000000000000000000000000000000000000000..36e4043fc44ca58fb08b1f1e11f11c6472e48ea6 GIT binary patch literal 90 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr%i}cN0CMhpvBN)0$ o??RQeOzfPmDVMJ=(Rwy#Nk^5U#qpxtn^S+6acy?u;9{@_01z)5ZU6uP literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_lastnode.gif b/branches/conlite20/conlite/images/but_lastnode.gif new file mode 100644 index 0000000000000000000000000000000000000000..604eadb5057aec2b6481636dc062677f1cc8e576 GIT binary patch literal 69 zcmZ?wbhEHb6krfwn8?Jykg##{<{kh4|7T!eQ2fcl$iTqFpaWzBWd(q2u_^kEr%%ma XFlWoH?#6ouTKZcbc}(+XWUvMR!Pyqv literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_logout.gif b/branches/conlite20/conlite/images/but_logout.gif new file mode 100644 index 0000000000000000000000000000000000000000..85f1684263c30d1a2c1c579b3d1be64a8113d572 GIT binary patch literal 238 zcmVg)z~)|**+ij%*5=UkMFIZ@wu+yWlZj< zn)>JC=Z16gzO&v|JNMSl@2j2LNGkc@+x+qF+)6FqTS4V|W$&+}@U*Dwnu**^Fzum| z-A^;?mxuAUs{jB1A^8LW0018VEC2ui01yBW000GR;0KIkS&C+=mJqa(1O*5JKoM#r zO>;d-kyIgI=>aT(f+-PDjA$c8AW_-`IL{hD6EKtxfkAdO2wX~?fMbO5j2wYXsS-G( oz!g)YD+UY<0SzexLkkE93rRRB0}KxV0S^p)FE1#SBOf6EJK$bo5&!@I literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_minus.gif b/branches/conlite20/conlite/images/but_minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..ecd71c6fea1d923a8dad7c111fdb03bec6d9c773 GIT binary patch literal 70 zcmZ?wbhEHb6krfwn8?JidGij2gpL3I|7T!eQ2fcl$iTqFpaWzBWd(q2@hSQZr%%ma YFlWoH?&f<38~R%xc~s3fEW%(70N<$>-T(jq literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_move_subtree.gif b/branches/conlite20/conlite/images/but_move_subtree.gif new file mode 100644 index 0000000000000000000000000000000000000000..785ccde503f09a51619c6b58c0a07e6fe8b3790a GIT binary patch literal 138 zcmZ?wbhEHb6krfw*v!Mgkg)Op|NmN5`>sCy^zG*#&a^G_4?jwnb8gYm$FZ}{@}zJ5 z{NpzR5>Wif!pOkD!=M8a1DV0VVm_hKbLQUZSq&fm&0^_Gm^5M51_3565oZA&)~pko h9x{Eh`>MyH*Whq4g}K$+A>k(~sbN~PV literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_move_subtree_target.gif b/branches/conlite20/conlite/images/but_move_subtree_target.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2ad54b2924f083599c8dcce22c3a8b3f453733e GIT binary patch literal 114 zcmZ?wbhEHb6krfwSj57xdGn6{|NqaNIgkg)Op|No5}Zq%*6!GHu5f3h$#Ft9M_fW$y*8JN{QHr!du r*CMcb$+fd<4C8Na=V;o&(_Fc7VU(ki;`z_c_l=t0pFa1VlffDQcM~AZ literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_ok.gif b/branches/conlite20/conlite/images/but_ok.gif new file mode 100644 index 0000000000000000000000000000000000000000..ba15678e24186ca18c28119583f9fa8c749c8e1b GIT binary patch literal 192 zcmZ?wbhEHb6krfwI3mrk|2%_BEbIJ@j7gO&yH7KCC9%3EuCMAkCly5(e4Hz-s$|ttTb2D{a-foLwx=-eHXj%##G~N3HeaKg4nH#!>}FS2l-_ hE2U;QJbYxZif>xOHMQ;od5c-ZeexFO%@$y=1^^bXJbeHF literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_ok_off.gif b/branches/conlite20/conlite/images/but_ok_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..84c943987e427ebb81019dfb9e97b22435948820 GIT binary patch literal 138 zcmV;50CoRINk%w1VGsZi0J9GOv$MGW|Nr9R~Gj s3KO11sS$!P8Oxdt!O;MYt09K~!!fXF45WasLo#*>rjt~PIXxl(JA|b_EdT%j literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_online.gif b/branches/conlite20/conlite/images/but_online.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9e8b72f742b65dda8c594ce2b7ad069aa17e7fc GIT binary patch literal 138 zcmV;50CoRINk%w1VGsZi0J9GO0AR7d&jA1b|5K1;Y@^aEd5NvX5iNR$=kWMBgu*<9 z!{qMwtHTp@snv3))BpegA^8LW000jFEC2ui01yBW000Cx@PSEdl{V|mCs_;80f}G= sN#~qG(i_@% literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_plus.gif b/branches/conlite20/conlite/images/but_plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..bffd8a0f25552160ca6cc5502744ca3503abda44 GIT binary patch literal 75 zcmZ?wbhEHb6krfwn8?Jykg##{<{kh4|7T!eQ2fcl$iTqFpaWzBWd(q2nJM~>r%%ma dFejv`N>8k+i9hS$kCLgL3vZv==FP}p4FEQR7+wGX literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_preview.gif b/branches/conlite20/conlite/images/but_preview.gif new file mode 100644 index 0000000000000000000000000000000000000000..5975ba0e9fba16b04d66bf83fc7df31e2bf3569a GIT binary patch literal 167 zcmV;Y09gM=Nk%w1VGsZi0J9GO0AR6Gl*<%sx8v>i|NsBO+U*^3x<7}+)a3FFXtlA< z=kfRYc&pY&jK}Bj_y7O^A^8LW000jFEC2ui01yBW000D3@PSEdl{RZ|)ELUK0n88> zMldkife4j=h*l8*#FPg`wj?CNv=k19qEX;_ VN0UUki%zf4Xf+{#i8me*06XcIMGOD{ literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_properties.gif b/branches/conlite20/conlite/images/but_properties.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2015c5c86d608eccf0e789e3267e23fd65718d1 GIT binary patch literal 76 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$uls?iuBD~_LhI~oGokx Z#`ku8t`7~iU{iV0`-s!voTdnaH2}|L6;%KL literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_refresh.gif b/branches/conlite20/conlite/images/but_refresh.gif new file mode 100644 index 0000000000000000000000000000000000000000..c828989e483a017ea208b6ce7cce80660b16d6b9 GIT binary patch literal 211 zcmZ?wbhEHb6krfwI3mozkg)Op|Nq~9{>fQJmqPMt>|zWH|Y?z=Ph-!l*g6o0ZXGB5};=zx@i>||gKc)-$=64{lu zs*hQO<>G=hz7GttHCg@RxENdb9V+&6EIzEb)nE?~r-P${#*$^B4u>QSbb?L=UhMdy e$kg=kh2Vr0l6?-zOC?<5CNx^L2l+cOSOWllm`Mr% literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_rename.gif b/branches/conlite20/conlite/images/but_rename.gif new file mode 100644 index 0000000000000000000000000000000000000000..b529a4cba9f93dbd1704161b67f5f463595ed5c4 GIT binary patch literal 84 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulsiiu5ho{o=rl+2<~F iGtaBqUB|kBqs~8EPV>}UE!TYxudaSeyXwTqU=0Ahmm2Q? literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_rss.gif b/branches/conlite20/conlite/images/but_rss.gif new file mode 100644 index 0000000000000000000000000000000000000000..6b678fd4e29bb5f1633c12e332ba95baf6832687 GIT binary patch literal 156 zcmV;N0Av40Nk%w1VGsZi0J9GO0AR8I|Nl^u$-md@fUww)x!vFE^NU{dcBvgxJwzE KC+4#`0suQeT|k@w literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_setreminder.gif b/branches/conlite20/conlite/images/but_setreminder.gif new file mode 100644 index 0000000000000000000000000000000000000000..bd2e025caa84ae69f4c13b07ceb09c3085befa5e GIT binary patch literal 142 zcmV;90CE3ENk%w1VGsZi0J9GO0AR5-g2Mm*|E|pD9&@_J+wK@|xWL%#`TPCY=kr&V z%=Y>GEquR$u-J{b+yDRoA^8LW000jFEC2ui01yBW000C#@PSEdl{V{o$hOMxO~F)@ wlaLXJ6NssxT1>K_>1H&e*7cK64|SrCMAkCly5(e4Hz-s$|ttTb2D{a-foLwx=-eHXj%##G~N3HeaKg4nH#!>}FS2l-_ hE2U;QJbYxZif>xOHMQ;od5c-ZeexFO%@$y=1^^bXJbeHF literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_sync_art.gif b/branches/conlite20/conlite/images/but_sync_art.gif new file mode 100644 index 0000000000000000000000000000000000000000..a0b760dc916fa79a6eebca8b73e69c991dc1b060 GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr1i}cN0_Eui0hcUqY fY3QequWF-bG%8-2JFPQI^4YRQUh+L!A`I35YH}F$ literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_sync_art_off.gif b/branches/conlite20/conlite/images/but_sync_art_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..5cd0ebb1a53b493768bc1cb69a963aa28de6a801 GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4EYde~*;{#~9>xIo gr=g!dzN(F$(WrQ7?zGM<$!E(JdCB)^i7;3L0J4%A0ssI2 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_sync_cat.gif b/branches/conlite20/conlite/images/but_sync_cat.gif new file mode 100644 index 0000000000000000000000000000000000000000..38f0b10dd45866244792d7521ed15942e21ced2d GIT binary patch literal 86 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulsii}Wqp{o=rl*$bVb km`@a^pS2BZpLloqO!ie>nXeNclt-2PJ+xsVH!FiR00mJU0RR91 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_sync_cat_off.gif b/branches/conlite20/conlite/images/but_sync_cat_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe6fb4ad2ca2eccbc49dd523dab5a8affd03ba68 GIT binary patch literal 86 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4F4DJX_lpBJW-oM# kVm?uve%3aued68aGuc;lWxh^)P##tC_t1ug+^h`N08ynL4gdfE literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_time_1.gif b/branches/conlite20/conlite/images/but_time_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..05d8cc5ed983dde7379a972738a53424ad9869b3 GIT binary patch literal 152 zcmV;J0B8S4Nk%w1VGsZi0J9GOv$MGW|NpkOyW-;H+uPmf=;`qA@!#L!!^6kw>g@FN z^})f#%*@Zo$jklx{Qv*}A^8LW000jFEC2ui01yBW000C<@PSEdl{V{%jxj^C0Y?x3 zW>5$jk)r8fEzX;oBIVk5Q6)E6O7RO;0z}Wt*; zllJ)A?((|d=YIYE`2YX_A^8LW000jFEC2ui01yBW000C=@PSEdl{V{16hcR_0ZI@6 zW-tg@lcK3%5zd>MB9+{5I#dkaEwBLcD#Xfec>7TZ%v+99iaIL-19P<@7(Stqc!C)N H9uWXLcmP9c literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/but_todo.gif b/branches/conlite20/conlite/images/but_todo.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe4639956a69b72372d38a10afabe58fcc5b62f5 GIT binary patch literal 138 zcmZ?wbhEHb6krfw*v!emkg)Op|Nq-Bz2r>WqF%B0`G+5DDVrA^eLVm0BL-|h@h1x- z0|O_64oDJY1_O(^L8E8(RI_YrftyzqSdOxHIY#9jo3SeG>b@_DXG^qrqW7h1GQ4Hy X31B*sWU$iYlf#7OC}l~qBtvPD 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 AcsPMF2Yp)+})V literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/configure.gif b/branches/conlite20/conlite/images/configure.gif new file mode 100644 index 0000000000000000000000000000000000000000..2624387a58334681193f321921732f58e033cc1c GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4JcV~<`RaK`lHc6y g-h9u7{X^>mjcHGQmcClSmY04=n>#Txgn_{t0OrvffdBvi literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/conlogo.gif b/branches/conlite20/conlite/images/conlogo.gif new file mode 100644 index 0000000000000000000000000000000000000000..19e07563fce85a4f323b72f2ad5ca91384e00a6c GIT binary patch literal 3909 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 D;shaM literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/dash.gif b/branches/conlite20/conlite/images/dash.gif new file mode 100644 index 0000000000000000000000000000000000000000..19404fb2c2e4ed3e23f7373fc5bb468ed651c90d GIT binary patch literal 43 scmZ?wbhEHbWMyDvXkcL2ym#+!Negf(N%HZ{PR+ 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%0AA*Qn_(>Xh2_>mBD6`$Gk8+ZdlG4)+-82tg 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 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/delete.gif b/branches/conlite20/conlite/images/delete.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7251de2aa2b794c5650312624330e8c6c49f083 GIT binary patch literal 195 zcmZ?wbhEHb6krfwI3mn&-AM5N|NkGiuYOvU`euIrkK0!tBzfNP(*1H`|F0(x?#DX+ z`||sK=CIFBLjmlgAPbJ$W8`UhX*V@DUn@i ztEM?_=*!jF{mf?hwl&X8?kP-Yce%J)lBLD*VL*!Pg;}IvwYi{XC~(q`i?qZS}n`b*0>-bMRxLOHO&tpM&Th#Lb-xngeI^x QaX;95jzPpqmWja{0F%E`8~^|S literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/delete_inact_g.gif b/branches/conlite20/conlite/images/delete_inact_g.gif new file mode 100644 index 0000000000000000000000000000000000000000..268c7e2d48a50bf1282ec35999dd2007f9c3aa7d GIT binary patch literal 195 zcmZ?wbhEHb6krfwI3mojdGn6{|Nnpb^y%EWi%*_B+q37u?c4W`9zFT$)tj$hzrB6? z?#h+xr%#{%^XJdQhmXH}`TF6*$Dcoc9zJ}WfjFS}lZBCiL6|`Yq#R@?1FORWmY$Tz zuC!It95?jk>g;}IvwYi{XC~(q`i?qZS}n`b*0>-bMRxLOHO&tpM&Th#Lb-xngeI^x QaX;95jzPpqmWja{0F%E`8~^|S literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/delete_inact_h.gif b/branches/conlite20/conlite/images/delete_inact_h.gif new file mode 100644 index 0000000000000000000000000000000000000000..268c7e2d48a50bf1282ec35999dd2007f9c3aa7d GIT binary patch literal 195 zcmZ?wbhEHb6krfwI3mojdGn6{|Nnpb^y%EWi%*_B+q37u?c4W`9zFT$)tj$hzrB6? z?#h+xr%#{%^XJdQhmXH}`TF6*$Dcoc9zJ}WfjFS}lZBCiL6|`Yq#R@?1FORWmY$Tz zuC!It95?jk>g;}IvwYi{XC~(q`i?qZS}n`b*0>-bMRxLOHO&tpM&Th#Lb-xngeI^x QaX;95jzPpqmWja{0F%E`8~^|S literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/delete_over.gif b/branches/conlite20/conlite/images/delete_over.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7251de2aa2b794c5650312624330e8c6c49f083 GIT binary patch literal 195 zcmZ?wbhEHb6krfwI3mn&-AM5N|NkGiuYOvU`euIrkK0!tBzfNP(*1H`|F0(x?#DX+ z`||sK=CIFBLjmlgAPbJ$W8`UhX*V@DUn@i ztEM?_=*!jF{mf?hwl&X8?kP-Yce%J)lBLD*VL*!PWqF%B0`G+5DDVrA^eLVm0BL-|h@h1x- z0|O_64oDJY1_O(^L8E8(RI_YrftyzqSdOxHIY#9jo3SeG>b@_DXG^qrqW7h1GQ4Hy X31B*sWU$iYlf#7(sK?9tKG{r&yI!p6wR z%=Y&8`}_R4xxV4yKZlhyVaPqI^aF literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/filetypes/excel.gif b/branches/conlite20/conlite/images/filetypes/excel.gif new file mode 100644 index 0000000000000000000000000000000000000000..d241a28072c9da34fc0685f3029559c9d1e8644c GIT binary patch literal 77 zcmZ?wbhEHb6krfwn8?JidGn6{V8Fn@p!k!8k%57UK?leN$_fD4aw2^*m%Zgz<}teH b@tO0^UHe>*JWv~VSz(E-i literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/filetypes/gif.gif b/branches/conlite20/conlite/images/filetypes/gif.gif new file mode 100644 index 0000000000000000000000000000000000000000..f0384a88b5e9e00107e05bc18834f4e914fa3eb4 GIT binary patch literal 79 zcmZ?wbhEHb6krfwn8?JidGn6{V8Fn@p!k!8k%57UK?leN$_fD43L~Wz2V+}MpcBt8UXeC8lV6G literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/filetypes/html.gif b/branches/conlite20/conlite/images/filetypes/html.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ce764edc612ecb5693520a5ccd07a75a4dc34a7 GIT binary patch literal 81 zcmZ?wbhEHb6krfwn8?JidGn6{V8Fn@p!k!8k%57UK?leN$_fD4N+NwTm%Zgr=IU_c f{=hvg{axryi=bJai_%w4y2O2a)0sU^j11NQHa8qe literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/filetypes/javascript.gif b/branches/conlite20/conlite/images/filetypes/javascript.gif new file mode 100644 index 0000000000000000000000000000000000000000..e6dc0ff44aa0d2d9518c698c47a625cd4cc2d210 GIT binary patch literal 73 zcmZ?wbhEHb6krfwn8?JidGn6{V8Fn@p!k!8k%57UK?leN$_fD4QX+jbm%ZhG%)QA^ XVAGNO|_8 NL+7$&OnF2A06P;$JO=;( literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/filetypes/odf.gif b/branches/conlite20/conlite/images/filetypes/odf.gif new file mode 100644 index 0000000000000000000000000000000000000000..17a6c50c38ffa78bf6861b271754f1bf90faf5fd GIT binary patch literal 81 zcmZ?wbhEHb6krfwn8?JidGn6{V8Fn@p!k!8k%57UK?leN$_fD4N+NwTm%Zg*%+ukP f9ehIi%^TS(8d?z*vm(U3-fN~(octex??aofPujp08B?4kpKVy literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/filetypes/ppt.gif b/branches/conlite20/conlite/images/filetypes/ppt.gif new file mode 100644 index 0000000000000000000000000000000000000000..d077c9b0a224b9c17ff882674ff46b11fc64d5da GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?JidGn6{V8Fn@p!k!8k%57UK?leN$_fD4$|8L;m%Zg*Y?HX? g7SlD6lwc$I9>T@c;k+A^8LW000jFEC2ui01yBW000Cr@PSEdl{RY|(9S{kRe=x? m;}lGTkggN+Qo}qQcB5!TxWJo4XgD%BLavl@Nx>)|5db^<%t74% literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/filetypes/swf.gif b/branches/conlite20/conlite/images/filetypes/swf.gif new file mode 100644 index 0000000000000000000000000000000000000000..d5749c7a9de3331300beb3d47afd2a6585b10d91 GIT binary patch literal 80 zcmZ?wbhEHb6krfwn8?JidGn6{V8Fn@p!k!8k%57UK?leN$_fD4iXwe8m%Zg*9FjP% etBGyv=i1ae9%(bgXQg*WzT-a5Wz5OSU=08$iW=1b literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/filetypes/txt.gif b/branches/conlite20/conlite/images/filetypes/txt.gif new file mode 100644 index 0000000000000000000000000000000000000000..885af78b0b349b71038c9fb253d522850c68d8a4 GIT binary patch literal 78 zcmZ?wbhEHb6krfwn8?JidGn6{V8Fn@p!k!8k%57UK?leN$_fD4@*;gRm%Zgr=KdU5 cs(x4D$&^_6jt;Tyy_ZgH(>uM!iIKq?0P2(){Qv*} literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/filetypes/unknown.gif b/branches/conlite20/conlite/images/filetypes/unknown.gif new file mode 100644 index 0000000000000000000000000000000000000000..d4b939bc8ed33164c430b1032723bb923b36ceed GIT binary patch literal 79 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4AksH;*;{`98H!9^ c4}ETzMn=y3;kr~ZYE@Cz%U1@g0vH&q0Z!H!5&!@I literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/filetypes/vcf.gif b/branches/conlite20/conlite/images/filetypes/vcf.gif new file mode 100644 index 0000000000000000000000000000000000000000..93ee9b8047560ddfad9cee258a5e564d7e164004 GIT binary patch literal 77 zcmZ?wbhEHb6krfwn8?JidGn6{V8Fn@p!k!8k%57UK?leN$_fD4aw2^*m%Zg*?2|Ze bl@{Nu^aX+E)XXG2qF$Za#%IjQ%3uuuzM&X+ literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/filetypes/word.gif b/branches/conlite20/conlite/images/filetypes/word.gif new file mode 100644 index 0000000000000000000000000000000000000000..84e293f390bc862bdfd4b453711ba1b60b81ebe2 GIT binary patch literal 80 zcmZ?wbhEHb6krfwn8?JidGn6{V8Fn@p!k!8k%57UK?leN$_fD4iXwe8m%Zgr<~F*> eb?9oxcb=x{s&ZFuRK~R>z2iR45zNWTU=08qf*Pp+ literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/filetypes/zip.gif b/branches/conlite20/conlite/images/filetypes/zip.gif new file mode 100644 index 0000000000000000000000000000000000000000..48401ddd726d39d6f0f5dcb78145160bc4ec6334 GIT binary patch literal 79 zcmZ?wbhEHb6krfwn8?JidGn6{V8Fn@p!k!8k%57UK?leN$_fD43L5MGvd)r{j^oF#{rdHb0R|L*vVfU7AQGgOfmu{zv+@@M Xx1)3R^y_sm&ATgVz#wkN$zTlt-@O+X literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/folder.gif b/branches/conlite20/conlite/images/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..1948043fc1638410104f51c9075e98bcdb9377de GIT binary patch literal 64 zcmZ?wbhEHb6krfwXkcX6ym*k+H0DZu+Z*Q(l*?RbQ=W8M!Ecfx#L8_0b#^ literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/folder_delocked.gif b/branches/conlite20/conlite/images/folder_delocked.gif new file mode 100644 index 0000000000000000000000000000000000000000..e6b016463483e0eacf341a3e7b16813a17d273f7 GIT binary patch literal 85 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4CepWP_lpBJW}myj j-E^$DSiELIN5-LPudhnDS^sL5R=Fvr#+ g=Sr=N8q>mxx|iFc=9-mCDqk;3e%?FbJ}ZMY0Mbhqg#Z8m literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/folder_duplicate_off.gif b/branches/conlite20/conlite/images/folder_duplicate_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..bfce0798cd23e7f2f707d65496ff56cce0519c0e GIT binary patch literal 86 zcmZ?wbhEHb6krfwn8?JidGihi7*PDl!pOkD#GnHb0Le2jsf+Y+9$L0vq9%8hz#LnP goGZ05YD^0&>RxV(nrl`nseHXC`FZbz`>YJs03NOvk^lez literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/folder_lock.gif b/branches/conlite20/conlite/images/folder_lock.gif new file mode 100644 index 0000000000000000000000000000000000000000..ba9deac2a4873f0bc246a1ca5416262605f7e93e GIT binary patch literal 87 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr%i1aPm{o=rl+2=0& lZn_s??aw+{qVIa!q-3sjD&kEWs?SKSPMW?{-ieXH8UQ9u8}R@D literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/folder_locked.gif b/branches/conlite20/conlite/images/folder_locked.gif new file mode 100644 index 0000000000000000000000000000000000000000..97081dff48f7a784c5bec7ddc321b5b2f8961702 GIT binary patch literal 87 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4A=0;K_lpBJW}mz8 lyXjtpwLj}*iN5P?lajgCsfagis6HdPI%)b+c_&5&YXEbu9R2_R literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/folder_move.gif b/branches/conlite20/conlite/images/folder_move.gif new file mode 100644 index 0000000000000000000000000000000000000000..261f8041a647e2260c5475ea9b5adcddc23ad71a GIT binary patch literal 138 zcmZ?wbhEHb6krfw*v!MQdGn6{|NkF2aOBgc&wu{>*|u%>qeo93KYn`Q!sYYlFa7@g zXZ!Zu3`junCkrD30}q1^NDO2K1B>~DM$eghr)M>M{5OlGFJaPzSqlW1xI~-i;h0ls@lhszLhg=3j;Qw_>+Z^ zfq|1j2P6qHgMmfcpwV;k-sxElAOFo_=}TG3+UU9P)sb!akqa^cl~}xFmKpN2O>?-Q LwaVo<2ZJ>LU^Xc; literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/folder_movedown_inact.gif b/branches/conlite20/conlite/images/folder_movedown_inact.gif new file mode 100644 index 0000000000000000000000000000000000000000..2fbd4ed9885a4066b0109aece8e65bace6f0f877 GIT binary patch literal 126 zcmZ?wbhEHb6krfw*v!eWdGn6{|NsB_^XI~a%bz}dK5*d3R`RDVG-wfD*;!hSv z1_n+B9grl*3yj+u literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/grid_collapse.gif b/branches/conlite20/conlite/images/grid_collapse.gif new file mode 100644 index 0000000000000000000000000000000000000000..ecd71c6fea1d923a8dad7c111fdb03bec6d9c773 GIT binary patch literal 70 zcmZ?wbhEHb6krfwn8?JidGij2gpL3I|7T!eQ2fcl$iTqFpaWzBWd(q2@hSQZr%%ma YFlWoH?&f<38~R%xc~s3fEW%(70N<$>-T(jq literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/grid_expand.gif b/branches/conlite20/conlite/images/grid_expand.gif new file mode 100644 index 0000000000000000000000000000000000000000..bffd8a0f25552160ca6cc5502744ca3503abda44 GIT binary patch literal 75 zcmZ?wbhEHb6krfwn8?Jykg##{<{kh4|7T!eQ2fcl$iTqFpaWzBWd(q2nJM~>r%%ma dFejv`N>8k+i9hS$kCLgL3vZv==FP}p4FEQR7+wGX literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/grid_folder.gif b/branches/conlite20/conlite/images/grid_folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..1948043fc1638410104f51c9075e98bcdb9377de GIT binary patch literal 64 zcmZ?wbhEHb6krfwXkcX6ym-T(jq literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/grid_linedownrightend.gif b/branches/conlite20/conlite/images/grid_linedownrightend.gif new file mode 100644 index 0000000000000000000000000000000000000000..48da527c5d9bd0a08906239daa1cc30b2227d502 GIT binary patch literal 65 zcmZ?wbhEHb6k-r!XkdT>#h)yU3=E76Iv_qshJi_zux_Kkh-A0Ml^q$Yf+|+m9me| MQMQ#99Gnc+09GF+>;M1& literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/groups_o.gif b/branches/conlite20/conlite/images/groups_o.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1262aa2addc8a923e0985a4838aad463d794e8a GIT binary patch literal 119 zcmZ?wbhEHb6krfwSj58c|NsBZn|Iv2dHd$gI}Aub@h1x-0|N_#4oD27mVw#EW8z8`sGnh$cHT}o>ry) zxO?OO-#^z)MDBR$-V3pKzk2SkCl78pD1E1AK_r+u5>uU~xAPX2jY@t31}o>nB? zk9Ge0`6B}iDE?$&WMGhG&;bd6>||hdOJMIwiR?;SwT#)3M>~?kQ9&d-n!SDN%FVY} ziaRqi8ard+cxf@EO)FuBp~9padY?Ob%R-G4j)(5PuU?_f!e9*mLuy;C literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/icon_warning.gif b/branches/conlite20/conlite/images/icon_warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..23528805018f06fa25b91cbe3260b404b946ad2d GIT binary patch literal 91 zcmZ?wbhEHb6krfwSj56`-AM5N|NpONb-te7&VU3If3h$#Ft9M_fW$y*8JHD3Hr!dO jcgi!8W9!`k2XYRjG zo_GG?n{OxYzLPH8Y1VXzCw(hh%H|u-KQj;q6o0ZXGB5};=zx@i>||iIeZbO_64{lu zY8Hzy3-7}<-U_zaD_K0^xEee73o7>V?Q?k;+Q7rkbTGlfNMgl}>t5bQRr{B&w`ee3 KxMH#ZgEatv>p}(q literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/index.php b/branches/conlite20/conlite/images/index.php new file mode 100644 index 0000000..ef8b776 --- /dev/null +++ b/branches/conlite20/conlite/images/index.php @@ -0,0 +1,4 @@ + diff --git a/branches/conlite20/conlite/images/info.gif b/branches/conlite20/conlite/images/info.gif new file mode 100644 index 0000000000000000000000000000000000000000..8f8629e962a5ddf25582ec9694fa4843dea54d84 GIT binary patch literal 90 zcmZ?wbhEHb6krfwSj57>kg)Op|No5}Zq%*6!GHu5f3h$#Ft9M_fW$y*8JOigHr!dO icgi!8W9!{BEe}o`G#p@?B{OTKsQ1p4KNDP-7_0$)${WQ1 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/isstart0.gif b/branches/conlite20/conlite/images/isstart0.gif new file mode 100644 index 0000000000000000000000000000000000000000..06c2bf37435fabb71698c34d5d0aa70ab42373c9 GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr1i}Z0GT9$vK`FLYP f@e1CTHm#2=YVRj!Jvk+(xnfU*ckr431_o;Ya`G8G literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/isstart0m.gif b/branches/conlite20/conlite/images/isstart0m.gif new file mode 100644 index 0000000000000000000000000000000000000000..839e63660aee1e8d8c78f9a15aa2ac3bb48c3976 GIT binary patch literal 101 zcmZ?wbhEHb6krfwn8?h)kg$<~f#LuE|3FglCkrD312cmTkPVa-U|?V}i?L%qJ+oaT z`qe=b%~r)u{Q$n_jgk&t&nK<(;X3x-^oW}G?usRgxBQ*y+OROzeQVZB9-He67#OSp DW_Te( literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/isstart0mr.gif b/branches/conlite20/conlite/images/isstart0mr.gif new file mode 100644 index 0000000000000000000000000000000000000000..8c130eb5bdc1b6642aa904e50a1c2d7f3b28e47e GIT binary patch literal 159 zcmV;Q0AT+|Nk%w1VGsZi0J9GO0AR5I00960|B1ER>hk$`tJV)`whU*r`TPB)$K$us z=>uZ2BX+!EozM39`~Uy|A^8LW000jFEC2ui01yBW000C`@P+vvxVY9yExy*qRUZg) zK_v*ECXLSu93_B~SCKH^?EwXWV?YDARI8+b&@djAN#??b2_goD3pJ|uX|}i0=~|f0rN`qQbGj#Z zy#r#h_WAtz`~7L5(EtDdA^8LW000jFEC2ui01yBW000C#@PSDycv#vk@#d2T1Y}@k wVrc@z=MG5XT0_7LZKdvkaOk{}z_FOs8iT@YGB7AUJAl#^U0Sao>>~mIJBvg-^Z)<= literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/isstart1.gif b/branches/conlite20/conlite/images/isstart1.gif new file mode 100644 index 0000000000000000000000000000000000000000..649049d89ed8b3e5f8119667ac39fc8ce7f729d0 GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?Ji|2)J0|Nj}lK=CIFBLf2ygARxXl4oF27U|EuxlE>!y0tNw00960|N8st!_p4j=6KfNTENf);OKW#_P zC;k5T$JHL$<7w;gt^fc4A^8LW000jFEC2ui01yBW000C|@P+vvxVY9yExy*qRUZg) zK_v*ECXLSu5G8<;SK%<fPpe!_p7J(G17c9@*n*;pvIi;9AMn zC;k5Tz|aHe?xpSVw*UYDA^8LW000jFEC2ui01yBW000Cz@PSDycv#vk@#d2T1SDBy uVrdp%J2XaX4Z(u2m8u6qlJ6zKfgz*W2(rn*q4?+k$ksDSt%9tN2mm`oK|j&} literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/lock_closed.gif b/branches/conlite20/conlite/images/lock_closed.gif new file mode 100644 index 0000000000000000000000000000000000000000..667d613dc146103056fd42fca2833b2bc8a4ebce GIT binary patch literal 89 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr%iS%(ET9$vK`MB?u nH=KLo52!vAu~E&8yIVEu&5L<*mghdQY3Kj*jnda(V6X-NI3OG< literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/lock_open.gif b/branches/conlite20/conlite/images/lock_open.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f4589cd194d5d18b22cb8a101a8d343d25bbda5 GIT binary patch literal 85 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4Cep`wXj%S^=HtFs jd~TF~TE~)Lp?146PGeQw%I9_Gf1g_&qjgO~guxmB90MHm literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/my_contenido.gif b/branches/conlite20/conlite/images/my_contenido.gif new file mode 100644 index 0000000000000000000000000000000000000000..6bfa1e830096a5862904f701842ab9c62cf97de6 GIT binary patch literal 154 zcmV;L0A>G2Nk%w1VGsZi0J9GO0AR8I|NpPe=a0GFK#0YCuGjDN`VeZiFn++#;qV}I zyI`EopTpw6*X!Tw^#A|>A^8LW000jFEC2ui01yBW000C>@PSEdl{V|myGBA_Fbanl zLF$y&Av8%kFa)qP168DHK`Fe&WXJPO5XFhhfiesRwLwB~un>5GM3qB`1q29>cub~X I#E%F7JJvHmg#Z8m literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/newsletter.gif b/branches/conlite20/conlite/images/newsletter.gif new file mode 100644 index 0000000000000000000000000000000000000000..9930f9aa52c448a84d012a6434b26a064f58a93d GIT binary patch literal 90 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4Ez&o0+1vL`b3&GN n9cGQpPD#8|?vtF+s5Wa_Vr5*MX`ZZlx$cqg43C9H7#OSpmjfIl literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/newsletter_16.gif b/branches/conlite20/conlite/images/newsletter_16.gif new file mode 100644 index 0000000000000000000000000000000000000000..d95569d9158c8c4d9b0b16136de9ff8e5e963f96 GIT binary patch literal 90 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr%i}cN0_V#_#oRDQ* nhgl=DQxfl#`y^*Hs?C~~SQ!^*nkTDXu6yJ=!((9)1_o;YMtd6; literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/newsletter_dispatch_16.gif b/branches/conlite20/conlite/images/newsletter_dispatch_16.gif new file mode 100644 index 0000000000000000000000000000000000000000..2431855acf28347e6a56f388389f1b27f2a51935 GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr1i}cN0_V#_#oRC9V f@eEr_t0IFn@-Aky-C42r%}vKoJqB9>7#OSpg#Q|U literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/newsletter_dispatch_16_off.gif b/branches/conlite20/conlite/images/newsletter_dispatch_16_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..74a4de9cdfeaf998aabb3421148a59ea899b2c48 GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4EYde~+1vL`b3zVf g#WQRzt%?lR$h(-)c4x)fH#Z$W^%!gkU|_HY0L>p8i~s-t literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/newsletter_dispatch_off.gif b/branches/conlite20/conlite/images/newsletter_dispatch_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..74a4de9cdfeaf998aabb3421148a59ea899b2c48 GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4EYde~+1vL`b3zVf g#WQRzt%?lR$h(-)c4x)fH#Z$W^%!gkU|_HY0L>p8i~s-t literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/newsletter_dispatch_on.gif b/branches/conlite20/conlite/images/newsletter_dispatch_on.gif new file mode 100644 index 0000000000000000000000000000000000000000..2431855acf28347e6a56f388389f1b27f2a51935 GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr1i}cN0_V#_#oRC9V f@eEr_t0IFn@-Aky-C42r%}vKoJqB9>7#OSpg#Q|U literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/newsletter_off.gif b/branches/conlite20/conlite/images/newsletter_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..9930f9aa52c448a84d012a6434b26a064f58a93d GIT binary patch literal 90 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4Ez&o0+1vL`b3&GN n9cGQpPD#8|?vtF+s5Wa_Vr5*MX`ZZlx$cqg43C9H7#OSpmjfIl literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/newsletter_on.gif b/branches/conlite20/conlite/images/newsletter_on.gif new file mode 100644 index 0000000000000000000000000000000000000000..d95569d9158c8c4d9b0b16136de9ff8e5e963f96 GIT binary patch literal 90 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr%i}cN0_V#_#oRDQ* nhgl=DQxfl#`y^*Hs?C~~SQ!^*nkTDXu6yJ=!((9)1_o;YMtd6; literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/newsletter_recipientgroups_off.gif b/branches/conlite20/conlite/images/newsletter_recipientgroups_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..ac7f9313cd04361947c816b8868503b7009761aa GIT binary patch literal 122 zcmZ?wbhEHb6krfwSj58c|NsBZn|Iv2dHd$gI}Aub@h1x-0|N_#4oD27mVw#cW24R? zpMwev6~#ME-(*CT7S2zzl{M%{pD^uk`dJ3gNJd+Gt9#FF@AF8A2(@pyvuK&JTjBD@^v0XMh0sDc|<0; literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/newsletter_recipients_off.gif b/branches/conlite20/conlite/images/newsletter_recipients_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..1330b81a95fafc378fcccaf3a4762720c77f6db5 GIT binary patch literal 111 zcmZ?wbhEHb6krfwSj57xdGn6{|Nq~-dHd$gI}Aub@h1x-0|N_#4oD27mVw#CV}s5i zA4dhJ3S)ljP4aWuL$9gorB*Vn+`6rC`LZ>qFX+`i&yan;@8){;$8Wnkg)Op|NnLCZ!~VW!GHu5f3h$#Ft9M_fW$y*8JJBxHs~Dk zaa3@sFy^=3BtMru^qQ((Y9-Ukt=k%xFI#i^f?nKRlcg5EYa+dqn$y6I3+S3rgz+epk+hrSL literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/newsletter_sendtest_16_off.gif b/branches/conlite20/conlite/images/newsletter_sendtest_16_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..7dd250267e005b0dc8a62a01bab4a8a0ff308d05 GIT binary patch literal 85 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4Cek-^+1vL`b3&Fe jygDOZ)Z+MXVP?4J+!bFp$XV`NCsS>FXiq}`1A{dHCc7MP literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/offline.gif b/branches/conlite20/conlite/images/offline.gif new file mode 100644 index 0000000000000000000000000000000000000000..15852f0e6ec2109bfa2a9aabf485169ad5418a18 GIT binary patch literal 93 zcmZ?wbhEHb6krfwn8?h)kg)Op|NjhNp!k!8k%57kK?lSG$ultN$@I-!_Eum~kDkry rH8*6;&gRCkwJ1$%csOI4TK9q!tE(Y7kGI&S{`t#c)YRd~$Y2csoERPG literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/offline_off.gif b/branches/conlite20/conlite/images/offline_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..3de858dcd6235a5f1f66f55c88c821ce511e8336 GIT binary patch literal 93 zcmZ?wbhEHb6krfwn8?hqdGn6{|Nk?9f#OdVMg|6E1|1L&B+tO4C(}1`*;|1{J$g2) r*W8dXJDVHF)}l16;o*#FYTXM`tgeRSJl3s$!mIFBu(Ik;^L61@NGxu)dXbmoU8a{;nOc5!oXk+0Ehe>TmS$7 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/open_all.gif b/branches/conlite20/conlite/images/open_all.gif new file mode 100644 index 0000000000000000000000000000000000000000..4818400dc83c1c29bb90aaa1701225373ef08946 GIT binary patch literal 53 zcmZ?wbhEHbWM^P!XkcVuNZ9!Q|9{1wEI=kBgAM}_fMgh$czO~gSIlNmF3#N-!oXk+ E08<+bM*si- literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/ordner_oben.gif b/branches/conlite20/conlite/images/ordner_oben.gif new file mode 100644 index 0000000000000000000000000000000000000000..8b8a3b0602ad4cc0a60e363a6350ea7660a1b164 GIT binary patch literal 126 zcmZ?wbhEHb6krfw*v!emkg)Op|NpVG&T^)0x%%|e{KJp5s`h>R`RDVG-wfD*;!hSv z1_n+B9grl*34dnawVIAQaJyZ0a7y8GblwYx=&PC2#h7tPtm zoV4lE&HJkkU32X?uxRfU#h)w;AfN*xKxQzoC|zjaR4IM`Oq1!6oP>&x`83B30?%$~ T@_snhR8a8EMC6K}D}yxvR+2Jn literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/paging/previous.gif b/branches/conlite20/conlite/images/paging/previous.gif new file mode 100644 index 0000000000000000000000000000000000000000..4fcf515a2b5c5f53386ac5581901f44452df92ba GIT binary patch literal 119 zcmZ?wbhEHb4dnawVIAQaJyZ0a7y8GblwYx=&PC2#h7tPtm zoV4lE&HJkkU32X?uyp@b#h)w;AfN*xKxQzos0er@sLef}$QvLqN!`Hn!^C9{IxlB2 V^?o{N#39qvd)vX#XCDWHH2|EKG2H+F literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/pfeil_links.gif b/branches/conlite20/conlite/images/pfeil_links.gif new file mode 100644 index 0000000000000000000000000000000000000000..f0fa9be500d9a69a86bd07a6c5ce2f03b6445553 GIT binary patch literal 81 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr1iS*4}CdunxQ5eOo eIV<$#8Q0qyO!ucxR1K?IyE!iZ^d2Wh25SHtzZT>G literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/pfeil_runter.gif b/branches/conlite20/conlite/images/pfeil_runter.gif new file mode 100644 index 0000000000000000000000000000000000000000..8c372d96f8f236bdc4b226d940d25cf13574b3c0 GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulr1i}cN0_Es{fM*TwC f`bknL>uVo;?c{f#sb=KZ$FhD+O`MOq2!k~MSw|Om literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/print.gif b/branches/conlite20/conlite/images/print.gif new file mode 100644 index 0000000000000000000000000000000000000000..7cd04a3e0f2272b6ab41fd4094f5580d29fe73c4 GIT binary patch literal 85 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulsiiS*4}_Eum~PyV^A im$x;a$2mR_Ylw?fTA|jNr5(q`W3GPO&_Y3k!5RRrgBQ^N literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/reminder/prio_high.gif b/branches/conlite20/conlite/images/reminder/prio_high.gif new file mode 100644 index 0000000000000000000000000000000000000000..7941ffbed8d71e2aa045c928289cbea7afec139b GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?JidGn6{|Nk?9f#OdVMg|5Z1|1L&B+tO4EYde~+1vk47L)u! f9nWRP_f>=`XN7-Xdf}AYD$jih-sV2qA`I35vE3PQ literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/reminder/prio_low.gif b/branches/conlite20/conlite/images/reminder/prio_low.gif new file mode 100644 index 0000000000000000000000000000000000000000..f290f2ab0f3ab72d66e02201bbcede63240eaff4 GIT binary patch literal 85 zcmZ?wbhEHb6krfwn8?hqdGihi28RFt{{ufN8UO45p%5z_Wx4DnD2!k~MH~<%p literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/reminder/progress.gif b/branches/conlite20/conlite/images/reminder/progress.gif new file mode 100644 index 0000000000000000000000000000000000000000..29b6ee7ef3bd382e5a1b657a712a8c5f47cb9469 GIT binary patch literal 69 zcmZ?wbhEHb6krfwXkcUzv?~4o|G(l-7DfgJMg|=QAOOiQFv;}vuROh$VR6l-OH%r5 WQsuLAA~lMZ{O~<@YMTcmgEats>Jy`yHjUPnRgsep9#>qt z`j8r%%fl_fnoRpzni?v6E4-cB4c0htwlhujXyhwio_77m*@bITHb~|M@Z2kCeBSx; P#@lIo>gM+|FjxZsG=f39 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/reminder/status_done.gif b/branches/conlite20/conlite/images/reminder/status_done.gif new file mode 100644 index 0000000000000000000000000000000000000000..0b0fe2c6a1d2f49c2f7e8e5a9db668590b2647ef GIT binary patch literal 173 zcmZ?wbhEHb6krfw*v!qK=-p8^`@)BJ?^dl^b@l31--@k*R;9mw{i?68XJBCX4+cO6 z94P)|VPs(7X3znNfXrZEi7Ghh`P#`MS^J`;lSWR6QH9s6v|uKcjAa?#L3>uLlI!4= z*wCDpZp@(XbcCTTK!xd;i~9>6l~or#&!zE-^xayrx`4Solv7zC@MDeLOO{68izzco N`s&WdyD%_V0|0&nKKlRw literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/reminder/status_inprogress.gif b/branches/conlite20/conlite/images/reminder/status_inprogress.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc58dbdbb4f700f1a83ba1d11d91f8ff7739fbee GIT binary patch literal 169 zcmZ?wbhEHb6krfw*v!Mgt`@|=EmJo8!ovp-u3o+R;oUpmimifHrN4gtVqjqS|Nnn| zeLau_vLQh6CkrD30}q1^hzl}lO%<)@k zUDG7k6ZShCNxJ@;(Si%ENdakyzNN%l~-k!+wq(H%uVa zC+&kGSIdJ56;9iVW;q`!@M&uCW;s|DduYX4&XCClp+#{A-F341uQ0q*T@@Mq?uU&k H6N5DXepf&2 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/save.gif b/branches/conlite20/conlite/images/save.gif new file mode 100644 index 0000000000000000000000000000000000000000..d840ce07b852c8d3026c06b60e7eae2d8fdf717d GIT binary patch literal 296 zcmZ?wbhEHb6k!lyXpv?B0#y@#8ykB?hYEkw7D3;Qy1uL2JZ1$32Kfi9jf_q6i#V20 z&{~pnxuB}IukX#WdCw-VeY9@bzuo%|?%Vh8@X328Zhp9a@5_r9-@kwT@$cWi|ENIm zpP+M5YGO%hib8p2Nrr;Er*8m*;!hSvE(Uo99gy`PhcK{Cc%a^wk~uG9)uIq@PoXbo z{F7(DUHtaXJ{3+G*Xy@a#TpYljdZe%B%GZ+lgzp;CfNp7wJy8k7vJoW(C-*OyKBX*p!k}G`4?nuT;ra%AHLef&a9ky+CIF)D{Far z?edzrm)e%!Ht}uz{Pl-JNS#;4!cSj*RL!}VQ8}l1(UnhMe$LqZz%jHTD5+`Uh9{8) zbFCvLwl2AB;F4qRnHQctrF_aUpS0=rNsIkst9+xYe6p8@ruBJ6*UesiTE{-~-G|TK z`RjvHCpxDrH1Q~yu=Y++a{I~4Pwo8+JhN9GIep{a^Dp_GJMTRCv~cCF>6`AxRjmt4 zZ3#$Fghg@%_(VeQa5L-8{74C$ZbouQE8PIUun`*C8t`waqT5)-JU9+mAmV zKYjHo*yxqH#3rE9D|yPqjnB#^9*)RpcZ!{&<6O|U`i^JLnuw|`-m%U8NnQ1G&bftE z1|~Gs&N$Vx@`i85ERW3PE=hA;qdSB0mi+to&%il*=C-HuCP{`aS;x;@xAZA;2ri$$ z>5^SgjeGi%s;S345+{BB_N#N+`i8mZFJ6D_7So;AzO{M6%Addgwl2Qxojxn1Vr$d9 zb3Tb(&XH}lLDk-g{UOP%U%viOcPKi4<7M~idj(y)PF;Fr7uMds;&%V)Tb5C?jC@<| zLmDsLczo^V!~V4obNY_@#x^>{&TxsJ6kNQ{Ew|9zE(6 z?h<*lpeE{YQiQrd|GF2Qk2D(>L@wl6!*D=|VTX~5k>&>l7tY3njsF;4BxPOQmZx{f zK|$g4q)oD0HZfWha|g0&=f5-YP;C!sSG$_SC~)lzhkQocuNDcH)F6{w-N>NLn^}Ye zQr7v!NNr+eS7R`Kw&2my)E-Xt<64m%ElYg`7y?XVPS+O!;ZL%5dw?b`_v0ne(q9hJIls! zqi@Ts1x*Kcuqz84T=+q^Q=TE~g@wk)N0Afbc6J!bPjvGT)@I1C`}1L8*PL}uiCMz{Q{g5(b&Uz#_7t#nM|yp?k3hTZIH0 literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/sort_up.gif b/branches/conlite20/conlite/images/sort_up.gif new file mode 100644 index 0000000000000000000000000000000000000000..d188bb98a61cd3e0cfb06d5cd752951e39c8d218 GIT binary patch literal 103 zcmZ?wbhEHbWM^Py*v!Gekgzdr!G(}1rzh;Xd-&Gdy7f0c|M<<8vibl2{|wlG;!hSv n1_llW9grl*3Hq)$ literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/submit.gif b/branches/conlite20/conlite/images/submit.gif new file mode 100644 index 0000000000000000000000000000000000000000..aec9416cc76667187895d65de52004a4f452d498 GIT binary patch literal 131 zcmZ?wbhEHb6krfw*v!Ykkg)Op|Nl9QFWr9mMJRjw|A@o*}U4vjTc)qrfM$Gm}$2xMJTz*g@M5u0MLy#QUCw| literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/submit_hover.gif b/branches/conlite20/conlite/images/submit_hover.gif new file mode 100644 index 0000000000000000000000000000000000000000..71cbcf7f2f9dcd3e4049dfa56ef3fc50e3318c9a GIT binary patch literal 131 zcmV-}0DS*PNk%w1VGsZi0J9DN0AR7d&j6&q8M4O=8*rFzpi2T_uf5I!4QQoNk7kLm zGB$sIFMEZMv@HMs{{R30A^8LW000gEEC2ui01yBW000Cq(1A&7l{V|mYcX9FC`dR3 lfk0?z+YU_T&PQU+Zhhmyu!Ja;DbOgHKBi<6V{$|Q06WDgE~o$i literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/sync.png b/branches/conlite20/conlite/images/sync.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2e33a346d6f0c30b3037c59e4dfc3444de8400 GIT binary patch literal 852 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rIkMV3ziDaSW-r#VEl1{tx5-|Nnt9 z!~+&&rTdQTJNWS6i5JJ7eR;;n_>YU3$5_nFQNc09H3X=vcXe;e@g{@~HA`ydT%4_> zEM{mTCnCZJRPpWGkDJ$Do;ZHXLfXP5#v8nWkPExxqGTg}s1-ZjNHWzV5KmtS38 zd2`uk=69iSW*nTXzyAFB_4n_uzkg=;?g44=o8af8^|m z{{Q{=&+k8f7fd<;^7N*HO=wCXTmvz~4Y$^R{q~cYo$>eIe?WVH;w(J2bFr%KD*oAc zw81Cb5TyFgUx=%KDjB(L<`h(i!S$TK@Zk9FvoTI0i{D1W1(6xhc=-AI@9*FLK7ajj z@#qzx>Pgi;&U+Vq`uPd2RDeUk*U1;ig=+Zo_y4bd|9<@V^Zn~jLlp_2guk;tTs4rf zb?1@z>WvFq{h8V1{4DIWzx@OT-2eYfOq~3@OE=tn^YSVC|F`mTvJgF8vv<`kc*M@e z6z8K2vf=sbPv?(ZkyMi5mk<(^647%pUw`4&tgY9jMehSW`Rc>ZZ{PpOh;vm&N&^*x zYnV!_Y)2AQ4d-6uf{p&Bo|Nn++JdpwNDG^RUWl(VN@G)Ryqk#?E4)5M~ b6ipDqU37LiRgRkcr-cFhwCCXq80M~XL9RL6T literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/toggle_frame_left.gif b/branches/conlite20/conlite/images/toggle_frame_left.gif new file mode 100644 index 0000000000000000000000000000000000000000..c3409c10ed42c77d88662e383671a1d82e901794 GIT binary patch literal 136 zcmZ?wbhEHb6krfw*v!Gekg)Op|NpN({S?jJ9zN|%;N(;5&OBRj@(BYDp!k!8k%57O zK?fucGJ}D|RG`r_d#c&<1G}GxE(lbz^i%z{R&mu*2hQ0gRx)|EqD^;>2|MXe-z?d2 TUpQdk+NP|G)qL|2q);|Nq}h04NNk zN5N+|z`(_z!vF-JJi)+W$so!hkg#$8d4{;@QHe9c8IXYDPZmZ71{MY#kQhiU1GAdPhC6HZ pPN^L!QDUjSe!=-T&%zm*(d~;~No`pzaaw0>=Ybx70Y4Q6YXE7X8=wFH literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/users.gif b/branches/conlite20/conlite/images/users.gif new file mode 100644 index 0000000000000000000000000000000000000000..0f489df746187a2b42aa6058f7880a4f69978988 GIT binary patch literal 97 zcmZ?wbhEHb6krfwSj57>kg)Op|NnLCZ!~VW!GHu5f3h$#Ft9M_fW$y*8JN{PHr!dO qcS`L@i4sfo^$X6&c^1ydjBa1_N@~k$iPJi3I}h~u3;3xpSOWk@8XkTC literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/users_o.gif b/branches/conlite20/conlite/images/users_o.gif new file mode 100644 index 0000000000000000000000000000000000000000..cace1cde6f4d1b4a133b8e145fc705d57ba534ca GIT binary patch literal 97 zcmZ?wbhEHb6krfwSj57xdGn6{|Nq~-dHd$gI}Aub@h1x-0|N_#4oD27mVsH#W5b=b qdZ*Nmlqj)OU%%jdoM+*T%;@$-ucWrDmN>1mw(~%bzkr_#gEau}10a|H literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/vert-neu.gif b/branches/conlite20/conlite/images/vert-neu.gif new file mode 100644 index 0000000000000000000000000000000000000000..a900a01f04b9e5c6b501dd8ae45bdac54fb14b6f GIT binary patch literal 2327 zcmV+y3F!7mNk%w1Vdw*70Du4hv$MGW|NkNR1OWg50RSuj0002!17rXI0{@I3fXk>2 z&x>$UX0OvN^YkqqH)`c|QfahS;r1GB7t1wR&)BVt{GS8Hda$AJMU)&vNn7w~gd&%p zCN7GdN|{tr*Yrh&Rby7!wXL3MX>S|+7RSkRa~+-K-r0Hee)s1SSfthGW(bEUr%1}(8;EUiq<{EQu)J-uDseXSkNE$&SYK8{|Vey-lm{{Cwn|2=PB zzkctY53l*!@B44rzJUSd6{L62UP62e^)=+j$zMc(69qmbSkYicg#Q~Ac4YX`VMvIc zERMujQe#SvD?PRZ`BG#|l1c{E>~vG&Oq4k(?z{-}WYC{NixNHB(!TO{YG!^5m-2>rk;q$u7O}6l_$rQ`uH^dlhb0xm(e8rTf)xSiEETmi2qq zir_VU^{zGC7V%rfaT(8bTz9Zdz-B8`z6?392XiaMIuV~j!0IAo1Q-gsn=N$%+5l0Y^IrI1k)Ii-sU?|Qeu-w7X^y#OnQfk_W}Ixw=_Z|U&WUH8dETjKpM3uLq?v)fIjEh5 z?s=%6i2|zPkBvI{=$4C48mXX_5_+kjnIgKWqMb6zqNAZgI;y0fQd+8|sbadSrmb@N zs;9An>Y}N$qFSq}xw5*etG&YdtE|D&s@;Uews@?l!~f!%EUC+$3hk}YJ}Ygt)Lz@H zt=M{pEVs&Lt1Gy?it8)6z?v&8y2N_xth&sytF61!%4;pX+n)C=yy5CQF2CjadoIA~ z3cN19?GpU1!SNzIFT?dZe6M*D@7J)x`&!&D#{X&@FvkOXT=2xkLTqozB%cg&!XkH@ za>Xm>+w#LPM@+HIFCRR!$vLBZ^TIp--1EgjXFT-AMR$Dk$4Q4=GtDCd-L%e2s~k1Y zRYU#s)GlAGwar|Aoi*4jckT4pV#7?f)Mw+Iw$)+3Z8qF!ukCZ&SjUa`+;X!`x6pkP z{kPG9BR#m%g)_Z(-G@`1xZjNf{2W zIqH(DPC4tAyN-G3vTF`I=d*iWJLtKKzB}o(-+nsqsSCe4@vR&GI`Xmq&OGkQ+unTe z(GNd;@zo!Hee&5a@BH@AcMrbw;Zr}p_2pxKzV_*JFMj*vyKg@H=*zD@{p`PwfBgB+ zzkmJx-><&_@=t*NBOm|=h`<6S@PGM6?=C@8UIcZiCLuK7H^T1B%dr3Y4D&m1aY!`A};{6#ttO)n-MxxzK`Ml$;rLXh$LXQHh3>q9e6vNimvG zhMtt8Db?so*ZER+#Ow&v7@zYX*YXX&!!f%O8shU-TKV)vdt1}y7PY%oZEso2 zRM!RPBrdyky~BmW|z6!b#8Z|`(5dVm%93# zX?dG^Ug3@xyXhtFdXEd=>&ExJ@~tm@@7rGM;@6+(<*$14t6czdSHRvSFnA3tUIdfZ zzwT8qdl{@>2hUf+_NDNC5BgsS2Ux=c=5T>Md|(hKSi}p)aDz$wU=v3e#S><6gXhtah=*U;wmw0&J|U}sy{+a@-(uYGKACtKXhCU>*V{cLnc``hfs zwz{p|?r_I@-19DXz0ZB`bmx2B?%p@N`weh;2b|smw|BwueQcsPMF2Yp)+})V literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/images/widgets/foldingrow/expanded.gif b/branches/conlite20/conlite/images/widgets/foldingrow/expanded.gif new file mode 100644 index 0000000000000000000000000000000000000000..b0875b2fc8a2097e881db31ae5c262fe050166bc GIT binary patch literal 111 zcmZ?wbhEHb|sK=CIFBLjmlgAPbJ$W8`UhX*V@DUn@i ztEM?_=*!jF{mf?hwl&X8?kP-Yce%J)lBLD*VL*!P + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release 4.8.9 + * + * {@internal + * created 2008-09-08 + * modified 2009-06-25, Ingo van Peeren, added some array checks and initializing + * $Id: include.ajax.con.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +if (!$idcat) { + $idcat = Contenido_Security::toInteger($_REQUEST['idcat']); +} + +$sCatlist = Contenido_Security::toString($_REQUEST['wholelist']); +if ($sCatlist != '') { + $aCatlist = explode(',', $sCatlist); +} else { + $aCatlist = array(); +} + +$aConexpandedList = unserialize($currentuser->getUserProperty("system", "con_cat_expandstate")); +if (!is_array($aConexpandedList)) { + $aConexpandedList = array(); +} + +if ($bDebug) { + print_r($aConexpandedList); + print_r($aCatlist); +} + +if ($action == 'toggle') { + $sKey = array_search($idcat, $aConexpandedList); + if ($sKey !== false) { + unset($aConexpandedList[$sKey]); + } elseif (in_array($idcat, $aCatlist)) { + $aConexpandedList[] = $idcat; + } +} elseif ($action == 'expand') { + if (!in_array($idcat, $aConexpandedList) && in_array($idcat, $aCatlist)) { + $aConexpandedList[] = $idcat; + } +} elseif ($action == 'collapse') { + $sKey = array_search($idcat, $aConexpandedList); + if ($sKey !== false) { + unset($aConexpandedList[$sKey]); + } +} elseif ($action == 'collapseall') { + if (count($aConexpandedList)) { + $aConexpandedList = array(); + } +} elseif ($action == 'expandall') { + $aConexpandedList = $aCatlist; +} + +$currentuser->setUserProperty("system", "con_cat_expandstate", serialize($aConexpandedList)); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/api/functions.api.general.php b/branches/conlite20/conlite/includes/api/functions.api.general.php new file mode 100644 index 0000000..a03498c --- /dev/null +++ b/branches/conlite20/conlite/includes/api/functions.api.general.php @@ -0,0 +1,243 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-09-01 + * modified 2008-06-25, Frederic Schneider, add security fix + * modified 2009-10-27, Murat Purc, initialization of variable $bError to prevent PHP strict messages + * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307] + * + * $Id: functions.api.general.php 378 2015-11-09 20:01:25Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +/* Info: + * This file contains Contenido General API functions. + * + * If you are planning to add a function, please make sure that: + * 1.) The function is in the correct place + * 2.) The function is documented + * 3.) The function makes sense and is generically usable + * + */ + +/** + * Includes a file and takes care of all path transformations. + * + * Example: + * contenido_include('classes', 'class.backend.php'); + * + * Currently defined areas: + * + * frontend Path to the *current* frontend + * conlib Path to conlib + * pear Path to the bundled pear copy + * classes Path to the contenido classes (see NOTE below) + * cronjobs Path to the cronjobs + * external Path to the external tools + * includes Path to the contenido includes + * scripts Path to the contenido scripts + * + * NOTE: Since Contenido (since v 4.8.15) provides autoloading of required + * class files, there is no need to load Contenido class files of by using + * contenido_include() or cInclude(). + * + * @param string $sWhere The area which should be included + * @param string $sWhat The filename of the include + * @param bool $bForce If true, force the file to be included + * @param string $bReturnPath Flag to return the path instead of including the file + * @return void + */ +function contenido_include($sWhere, $sWhat, $bForce = false, $bReturnPath = false) +{ + global $client, $cfg, $cfgClient; + + // Sanity check for $sWhat + $sWhat = trim($sWhat); + $sWhere = strtolower($sWhere); + $bError = false; + + switch ($sWhere) { + case 'config': + $sInclude = $cfg['path']['config']. $sWhat; + break; + case 'frontend': + $sInclude = $cfgClient[$client]['path']['frontend'] . $sWhat; + break; + case 'wysiwyg': + $sInclude = $cfg['path']['wysiwyg'] . $sWhat; + break; + case 'all_wysiwyg': + $sInclude = $cfg['path']['all_wysiwyg'] . $sWhat; + break; + case 'conlib': + case 'phplib': + $sInclude = $cfg['path']['phplib'] . $sWhat; + break; + case 'pear': + $sInclude = $sWhat; + $sIncludePath = ini_get('include_path'); + + if (!preg_match('|' . $cfg['path']['pear'] . '|i', $sIncludePath)) { + // contenido pear path is not set in include_path + // we try to add it via ini_set + if (!@ini_set('include_path', $sIncludePath . PATH_SEPARATOR . $cfg['path']['pear'])) { + // not able to change include_path + trigger_error("Can't add {$cfg['path']['pear']} to include_path", E_USER_NOTICE); + $sInclude = $cfg['path']['pear'] . $sWhat; + unset($sWhere); + } else { + $aPaths = explode(PATH_SEPARATOR, ini_get('include_path')); + $iLast = count($aPaths) - 1; + if ($iLast >= 2) { + $tmp = $aPaths[1]; + $aPaths[1] = $aPaths[$iLast]; + $aPaths[$iLast] = $tmp; + @ini_set('include_path', implode(PATH_SEPARATOR, $aPaths)); + } + unset($aPaths, $iLast, $tmp); + } + } + break; + default: + // FIXME: A workaround to provide inclusion of classes which are not + // handled by the autoloader + if ($sWhere === 'classes') { + if (cAutoload::isAutoloadable($cfg['path'][$sWhere] . $sWhat)) { + // it's a class file and it will be loaded automatically by + // the autoloader - get out here + return; + } + } + $sInclude = $cfg['path']['contenido'] . $cfg['path'][$sWhere] . $sWhat; + break; + } + + $sFoundPath = ''; + + if ($sWhere === 'pear') { + // now we check if the file is available in the include path + $aPaths = explode(PATH_SEPARATOR, ini_get('include_path')); + foreach ($aPaths as $sPath) { + if (@file_exists($sPath . DIRECTORY_SEPARATOR . $sInclude)) { + $sFoundPath = $sPath; + break; + } + } + + if (!$sFoundPath) { + $bError = true; + } + + unset($aPaths, $sPath); + } else { + if (!file_exists($sInclude) || preg_match('#^\.\./#', $sWhat)) { + $bError = true; + } + } + + // should the path be returned? + if ($bReturnPath) { + if ($sFoundPath !== '') { + $sInclude = $sFoundPath . DIRECTORY_SEPARATOR . $sInclude; + } + + if (!$bError) { + return $sInclude; + } else { + return false; + } + } + + if ($bError) { + $aBackTrace = debug_backtrace(); + if(is_array($aBackTrace[1])) { + $sError = " in ".$aBackTrace[1]['file'] + ." on line ".$aBackTrace[1]['line'] + ." function: ".$aBackTrace[1]['function']." "; + } else { + $sError = ""; + } + + trigger_error("Can't include $sInclude $sError", E_USER_ERROR); + return; + } + + // now include the file + if ($bForce == true) { + include($sInclude); + } else { + include_once($sInclude); + } +} + + +/** + * Shortcut to contenido_include. + * + * @see contenido_include + * + * @param string $sWhere The area which should be included + * @param string $sWhat The filename of the include + * @param bool $bForce If true, force the file to be included + * @return void + */ +function cInclude($sWhere, $sWhat, $bForce = false) +{ + contenido_include($sWhere, $sWhat, $bForce); +} + +/** + * Includes a file from a plugin and takes care of all path transformations. + * + * Example: + * plugin_include('formedit', 'classes/class.formedit.php'); + * + * @param string $sWhere The name of the plugin + * @param string $sWhat The filename of the include + * @return void + */ +function plugin_include($sWhere, $sWhat) { + global $cfg; + $sInclude = $cfg['path']['contenido'] . $cfg['path']['plugins'] . $sWhere. '/' . $sWhat; + if(is_readable($sInclude)) { + include_once($sInclude); + } else { + $sCaller = ""; + $aTrace = debug_backtrace(); + foreach($aTrace as $iKey=>$aValue) { + if($aValue['function'] == __METHOD__) { + $sCaller = $aValue['file']." line ".$aValue['line']; + break; + } + } + trigger_error("Function ".__METHOD__.": Can't include $sInclude in ".$sCaller, E_USER_WARNING); + } +} + + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/api/functions.frontend.list.php b/branches/conlite20/conlite/includes/api/functions.frontend.list.php new file mode 100644 index 0000000..5fce957 --- /dev/null +++ b/branches/conlite20/conlite/includes/api/functions.frontend.list.php @@ -0,0 +1,252 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-10-09 + * modified 2008-06-25, Frederic Schneider, add security fix + * + * $Id: functions.frontend.list.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * Class FrontendList + * Class for scrollable frontend lists + * @author Timo A. Hummel + * @version 0.1 + */ +class FrontendList +{ + /** + * Wrap for a single item + * @var string + */ + var $itemwrap; + + /** + * Wrap for table start + * @var string + */ + var $startwrap; + + /** + * Wrap for table end + * @var string + */ + var $endwrap; + + /** + * Data container + * @var array + */ + var $data = Array(); + + /** + * Number of records displayed per page + * @var string + */ + var $resultsPerPage; + + /** + * Start page + * @var string + */ + var $listStart; + + + /** + * Creates a new FrontendList object. + * + * The placeholder for item wraps are the same as for + * sprintf. See the documentation for sprintf. + * + * Caution: Make sure that percentage signs are written as %%. + * + * @param $startwrap Wrap for the list start + * @param $endwrap Wrap for the list end + * @param $itemwrap Wrap for a single item + */ + function FrontendList ($startwrap, $endwrap, $itemwrap) + { + $this->resultsPerPage = 0; + $this->listStart = 1; + + $this->itemwrap = $itemwrap; + $this->startwrap = $startwrap; + $this->endwrap = $endwrap; + } + + /** + * Sets data. + * + * Note: This function eats as many parameters as you specify. + * + * Example: + * $obj->setData(0, "foo", "bar"); + * + * Make sure that the amount of parameters stays the same for all + * setData calls in a single object. + * + * @param $index Numeric index + * @param ... Additional parameters (data) + */ + function setData ($index) + { + + $numargs = func_num_args(); + + for ($i=1;$i<$numargs;$i++) + { + $this->data[$index][$i] = func_get_arg($i); + } + } + + /** + * Sets the number of records per page. + * + * @param $numresults Amount of records per page + */ + function setResultsPerPage ($numresults) + { + $this->resultsPerPage = $numresults; + } + + /** + * Sets the starting page number. + * + * @param $startpage Page number on which the list display starts + */ + function setListStart ($startpage) + { + $this->listStart = $startpage; + } + + /** + * Returns the current page. + * + * @param $none + * @returns Current page number + */ + function getCurrentPage () + { + if ($this->resultsPerPage == 0) + { + return 1; + } + + return ($this->listStart); + } + + /** + * Returns the amount of pages. + * + * @param $none + * @returns Amount of pages + */ + function getNumPages () + { + return (ceil(count($this->data) / $this->resultsPerPage)); + } + + /** + * Sorts the list by a given field and a given order. + * + * @param $field Field index + * @param $order Sort order (see php's sort documentation) + */ + function sort ($field, $order) + { + $this->data = array_csort($this->data, "$field", $order); + } + + /** + * Field converting facility. + * Needs to be overridden in the child class to work properbly. + * + * @param $field Field index + * @param $value Field value + */ + function convert ($field, $value) + { + return $value; + } + + /** + * Outputs or optionally returns + * + * @param $return If true, returns the list + */ + function output ($return = false) + { + $output = $this->startwrap; + + $currentpage = $this->getCurrentPage(); + + $itemstart = (($currentpage-1)*$this->resultsPerPage)+1; + + if ($this->resultsPerPage == 0) + { + $itemend = count($this->data) - ($itemstart-1); + } else { + $itemend = $currentpage*$this->resultsPerPage; + } + + if ($itemend > count($this->data)) + { + $itemend = count($this->data); + } + + for ($i=$itemstart;$i<$itemend+1;$i++) + { + $items = ""; + + foreach ($this->data[$i-1] as $key => $value) + { + $items .= ", '".addslashes($this->convert($key, $value))."'"; + } + + $execute = '$output .= sprintf($this->itemwrap '.$items.');'; + + eval($execute); + + } + + $output .= $this->endwrap; + + $output = stripslashes($output); + + if ($return == true) + { + return $output; + } else { + echo $output; + } + } +} + + + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/cfg_language_de.inc.php b/branches/conlite20/conlite/includes/cfg_language_de.inc.php new file mode 100644 index 0000000..de7f1a9 --- /dev/null +++ b/branches/conlite20/conlite/includes/cfg_language_de.inc.php @@ -0,0 +1,409 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2002-03-02 + * modified 2008-06-25, Frederic Schneider, add security fix + * modified 2008-07-04, Dominik Ziegler, fixed bug CON-169 + * + * $Id: cfg_language_de.inc.php 80 2012-05-29 12:38:23Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes", "functions.i18n.php"); + +global $lngArea, $lngLogin, $lngErr, $a_description, $lngAct; + +$lngLogin["pleaselogin"] = "Bitte geben Sie Ihren Benutzernamen und Ihr Pa�wort ein."; +$lngLogin["username"] = "Benutzername"; +$lngLogin["password"] = "Pa�wort"; +$lngLogin["invalidlogin"] = "Entweder ist Ihr Benutzername oder Ihr Pa�wort ung�ltig.
Bitte versuchen Sie es nochmal!"; + +$lngLogout["thanksforusingcontenido"] = "Vielen Dank, dass sie Contenido benutzt haben. Bis bald."; +$lngLogout["youareloggedout"] = "Sie sind jetzt abgemeldet."; +$lngLogout["backtologin1"] = "Hier kommen Sie wieder zur"; +$lngLogout["backtologin2"] = "Anmeldung"; + +//Datas for Areas which are not in the Navigation +$lngArea["con_artlist"] = " - Artikelliste"; +$lngArea["con_editart"] = " - Artikel bearbeiten"; +$lngArea["lay_edit"] = " - Layout bearbeiten"; +$lngArea["mod_edit"] = " - Modul bearbeiten"; +$lngArea["tpl_edit"] = " - Template bearbeiten"; +$lngArea["news_edit"] = " - Newsletter bearbeiten"; + +$lngCon["actionsconf"] = "Aktionen"; +$lngCon["allarts"] = "Alle Artikeln"; +$lngCon["artname"] = "Artikelnname"; +$lngCon["artoff"] = "Artikel offline schalten"; +$lngCon["arton"] = "Artikel online schalten"; +$lngCon["artswithoutcategory"] = "Artikeln ohne Zuordnung"; +$lngCon["author"] = "Redakteur"; +$lngCon["created"] = "Datum der Erstellung"; +$lngCon["dateend"] = "Enddatum"; +$lngCon["datestart"] = "Startdatum"; +$lngCon["defaulttemplate"] = "Template"; +$lngCon["imgagedescription"] = "Beschreibung"; +$lngCon["lastmodified"] = "Datum der letzten �nderung"; +$lngCon["moduleincontainer"] = "Modul in Container"; +$lngCon["noarts"] = "Es gibt keine Artikel."; +$lngCon["noartsinthiscategory"] = "Es gibt keine Artikel in dieser Kategorie."; +$lngCon["nostartingart"] = "Nicht als StartArtikel konfigurieren."; +$lngCon["online"] = "Online"; +$lngCon["preview"] = "Vorschau"; +$lngCon["properties"] = "Eigenschaften"; +$lngCon["startart"] = "StartArtikel"; +$lngCon["structure"] = "Kategorie"; +$lngCon["structureandarts"] = "Kategorie / Artikeln"; +$lngCon["summary"] = "Zusammenfassung"; +$lngCon["redirect"] = "Weiterleitung"; +$lngCon["redirect_url"] = "Weiterleitungsadresse"; +$lngCon["template"] = "Template"; +$lngCon["title"] = "Titel"; +$lngCon["keywordart"] = "Keywords Artikel"; +$lngCon["keywordcat"] = "Keywords Kategorie"; +$lngCon["keywordautoart"] = "Automatisch generiert"; +$lngCon["unconfigured"] = "unkonfiguriert"; +$lngCon["dynhead"] = "�berschrift"; +$lngCon["dyntext"] = "Text"; +$lngCon["dynimg"] = "Bild"; +$lngCon["dynlink"] = "Link"; +$lngCon["actions"]["10"] = "Artikeln der gew�hlten Kategorie"; +$lngCon["actions"]["11"] = "Liste aller Artikeln"; +$lngCon["actions"]["12"] = "Liste der Artikeln ohne Zuordnung"; + +$lngAct["con"]["con_lock"] = i18n("Freeze article"); +$lngAct["con"]["con_makecatonline"] = i18n("Make category online"); +$lngAct["con"]["con_changetemplate"] = i18n("Change template"); +$lngAct["con"]["con_makestart"] = i18n("Set start article"); +$lngAct["con"]["con_makeonline"] = i18n("Make article online"); +$lngAct["con"]["con_synccat"] = i18n("Syncronize Category"); +$lngAct["con"]["con_syncarticle"] = i18n("Syncronize Article"); +$lngAct["con"]["con_makepublic"] = i18n("Protect category"); +$lngAct["con"]["con_deleteart"] = i18n("Delete article"); +$lngAct["con"]["con_tplcfg_edit"] = i18n("Edit template configuration"); +$lngAct["con"]["con_duplicate"] = i18n("Duplicate Article"); +$lngAct["con"]["con_expand"] = i18n("Expand boxes"); +$lngAct["con_edittpl"]["10"] = i18n("Configure template"); +$lngAct["con_editart"]["con_newart"] = i18n("Create article"); +$lngAct["con_editart"]["35"] = i18n("Configure article"); +$lngAct["con_editart"]["con_saveart"] = i18n("Save article"); +$lngAct["con_editart"]["remove_assignments"] = i18n("Remove assignments"); +$lngAct["con_editcontent"]["15"] = i18n("Edit article"); +$lngAct["con_editart"]["con_edit"] = i18n("Edit article properties"); +$lngAct["con_editcontent"]["con_editart"] = i18n("Edit article"); +$lngAct["con_tplcfg"]["con_edddittemplate"] = i18n("Help"); + +$lngAct["str"]["str_renamecat"] = i18n("Rename category"); +$lngAct["str"]["str_newcat"] = i18n("New category"); +$lngAct["str"]["str_makevisible"] = i18n("Set category on- or offline"); +$lngAct["str"]["50"] = i18n("Disable category"); +$lngAct["str"]["str_makepublic"] = i18n("Protect category"); +$lngAct["str"]["front_allow"] = i18n("Frontend access"); +$lngAct["str"]["str_deletecat"] = i18n("Delete category"); +$lngAct["str"]["str_moveupcat"] = i18n("Move category up"); +$lngAct["str"]["str_movedowncat"] = i18n("Move category down"); +$lngAct["str"]["str_movesubtree"] = i18n("Move category"); +$lngAct["str"]["str_newtree"] = i18n("Create new tree"); +$lngAct["str"]["str_duplicate"] = i18n("Duplicate category"); +$lngAct["str_tplcfg"]["str_tplcfg"] = i18n("Configure category"); +$lngAct["str_tplcfg"]["tplcfg_edit"] = i18n("Edit category"); + +$lngAct["upl"]["upl_mkdir"] = i18n("Create directory"); +$lngAct["upl"]["upl_upload"] = i18n("Upload files"); +$lngAct["upl"]["upl_delete"] = i18n("Delete files"); +$lngAct["upl"]["upl_rmdir"] = i18n("Remove directory"); +$lngAct["upl"]["upl_renamedir"] = i18n("Rename directory"); +$lngAct["upl"]["upl_modify_file"] = i18n("Modify file"); +$lngAct["upl"]["upl_renamefile"] = i18n("Rename file"); +$lngAct["upl"]["upl_multidelete"] = i18n("Multidelete Files"); +$lngAct["upl"]["21"] = i18n("Delete file"); +$lngAct["upl"]["40"] = i18n("Upload files"); +$lngAct["upl"]["31"] = i18n("Create directory"); + +$lngAct["lay"]["lay_delete"] = i18n("Delete layout"); +$lngAct["lay_edit"]["lay_edit"] = i18n("Modify layout"); +$lngAct["lay_edit"]["lay_new"] = i18n("Create layout"); +$lngAct["lay_history"]["lay_history_manage"] = i18n("Manage History"); +$lngAct["lay_history"]["history_truncate"] = i18n("Truncate History"); + + +$lngAct["mod"]["mod_delete"] = i18n("Delete module"); +$lngAct["mod_history"]["mod_history_manage"] = i18n("Manage History"); +$lngAct["mod_history"]["history_truncate"] = i18n("Truncate History"); +$lngAct["mod_edit"]["mod_edit"] = i18n("Edit module"); +$lngAct["mod_edit"]["mod_new"] = i18n("Create module"); +$lngAct["mod_edit"]["mod_importexport_module"] = i18n("Import/Export module"); +$lngAct["mod_translate"]["mod_translation_save"] = i18n("Translate modules"); +$lngAct["mod_translate"]["mod_importexport_translation"] = i18n("Translation import/export"); +$lngAct["mod_package"]["mod_importexport_package"] = i18n("Import/Export package"); + +$lngAct["tpl"]["tpl_delete"] = i18n("Delete template"); +$lngAct["tpl_edit"]["tpl_edit"] = i18n("Edit template"); +$lngAct["tpl_edit"]["tpl_new"] = i18n("Create template"); +$lngAct["tpl_edit"]["tpl_duplicate"] = i18n("Duplicate template"); +$lngAct["tpl"]["tpl_duplicate"] = i18n("Duplicate template"); +$lngAct["tpl_visual"]["tpl_visedit"] = i18n("Visual edit"); + +$lngAct["user"]["user_create"] = i18n("Create user"); +$lngAct["user"]["user_delete"] = i18n("Delete user"); +$lngAct["user_areas"]["user_saverightsarea"] = i18n("Save user area rights"); +$lngAct["user_create"]["user_createuser"] = i18n("Create user"); +$lngAct["user_rights"]["10"] = i18n("Edit rights"); +$lngAct["user_overview"]["user_edit"] = i18n("Edit user"); + +$lngAct["groups_members"]["group_deletemember"] = i18n("Delete group members"); +$lngAct["groups_members"]["group_addmember"] = i18n("Add group members"); +$lngAct["groups_overview"]["group_edit"] = i18n("Edit group"); +$lngAct["groups_create"]["group_create"] = i18n("Create group"); +$lngAct["groups"]["group_delete"] = i18n("Delete group"); + +$lngAct["stat"]["stat_show"] = i18n("Show statistics"); + +$lngAct["lang"]["lang_activatelanguage"] = i18n("Activate language"); +$lngAct["lang"]["lang_deactivatelanguage"] = i18n("Deactivate language"); +$lngAct["lang"]["lang_renamelanguage"] = i18n("Rename language"); +$lngAct["lang_edit"]["lang_newlanguage"] = i18n("Create language"); +$lngAct["lang_edit"]["lang_deletelanguage"] = i18n("Delete language"); +$lngAct["lang_edit"]["lang_edit"] = i18n("Edit language"); + +$lngAct["linkchecker"]["linkchecker"] = i18n("Linkchecker"); +$lngAct["linkchecker"]["whitelist_view"] = i18n("Linkchecker Whitelist"); + +$lngAct["plug"]["10"] = i18n("Install/Remove plugins"); + +$lngAct["style"]["style_edit"] = i18n("Modify CSS"); +$lngAct["style"]["style_create"] = i18n("Create CSS"); +$lngAct["style"]["style_delete"] = i18n("Delete CSS"); +$lngAct["style_history"]["style_history_manage"] = i18n("Manage History"); +$lngAct["style_history"]["history_truncate"] = i18n("Truncate History"); + +$lngAct["js"]["js_edit"] = i18n("Edit script"); +$lngAct["js"]["js_delete"] = i18n("Delete script"); +$lngAct["js"]["js_create"] = i18n("Create script"); +$lngAct["js_history"]["js_history_manage"] = i18n("Manage History"); +$lngAct["js_history"]["history_truncate"] = i18n("Truncate History"); + +$lngAct["htmltpl"]["htmltpl_edit"] = i18n("Modify HTML-Template"); +$lngAct["htmltpl"]["htmltpl_create"] = i18n("Create HTML-Template"); +$lngAct["htmltpl"]["htmltpl_delete"] = i18n("Delete HTML-Template"); +$lngAct["htmltpl_history"]["htmltpl_history_manage"] = i18n("Manage History"); +$lngAct["htmltpl_history"]["history_truncate"] = i18n("Truncate History"); + +$lngAct["news"]["news_save"] = i18n("Edit newsletter"); +$lngAct["news"]["news_create"] = i18n("Create newsletter"); +$lngAct["news"]["news_delete"] = i18n("Delete newsletter"); +$lngAct["news"]["news_duplicate"] = i18n("Duplicate newsletter"); +$lngAct["news"]["news_add_job"] = i18n("Add newsletter dispatch job"); +$lngAct["news"]["news_html_settings"] = i18n("Change global HTML newsletter settings"); +$lngAct["news"]["news_send_test"] = i18n("Send test newsletter (to groups)"); +$lngAct["news_jobs"]["news_job_delete"] = i18n("Delete dispatch job"); +$lngAct["news_jobs"]["news_job_detail_delete"] = i18n("Remove recipient from dispatch job"); +$lngAct["news_jobs"]["news_job_run"] = i18n("Run job"); +$lngAct["news_jobs"]["news_job_details"] = i18n("View dispatch job details"); + +$lngAct["recipients"]["recipients_save"] = i18n("Edit recipient"); +$lngAct["recipients"]["recipients_create"] = i18n("Create recipient"); +$lngAct["recipients"]["recipients_delete"] = i18n("Delete recipient"); +$lngAct["recipients"]["recipients_purge"] = i18n("Purge recipients"); +$lngAct["recipients_import"]["recipients_import"] = i18n("Import recipients"); +$lngAct["recipients_import"]["recipients_import_exec"] = i18n("Execute recipients import"); +$lngAct["recipientgroups"]["recipientgroup_delete"] = i18n("Delete recipient group"); +$lngAct["recipientgroups"]["recipientgroup_create"] = i18n("Create recipient group"); +$lngAct["recipientgroups"]["recipientgroup_recipient_delete"] = i18n("Delete recipient from group"); +$lngAct["recipientgroups"]["recipientgroup_save_group"] = i18n("Save recipient group"); + +$lngAct["mycontenido_settings"]["mycontenido_editself"] = i18n("Edit own MyContenido settings"); +$lngAct["mycontenido_tasks"]["mycontenido_tasks_delete"] = i18n("Delete reminder item"); +$lngAct["mycontenido_tasks"]["todo_save_item"] = i18n("Save todo item"); + +$lngAct["client_edit"]["client_new"] = i18n("Create client"); +$lngAct["client_edit"]["client_edit"] = i18n("Edit client"); +$lngAct["client"]["client_delete"] = i18n("Remove client"); +$lngAct["client_settings"]["clientsettings_delete_item"] = i18n("Delete clientsetting"); +$lngAct["client_settings"]["clientsettings_edit_item"] = i18n("Edit clientsetting"); +$lngAct["client_settings"]["clientsettings_save_item"] = i18n("Save clientsetting"); +$lngAct["client_articlespec"]["client_artspec_save"] = i18n("Create/Edit articlespecifications"); +$lngAct["client_articlespec"]["client_artspec_delete"] = i18n("Delete articlespecifications"); +$lngAct["client_articlespec"]["client_artspec_default"] = i18n("Define default articlespecification"); +$lngAct["client_articlespec"]["client_artspec_edit"] = i18n("Edit articlespecifications"); +$lngAct["client_articlespec"]["client_artspec_online"] = i18n("Make articlespecifications online"); + +$lngAct["frontend"]["frontend_save_user"] = i18n("Save frontenduser"); +$lngAct["frontend"]["frontend_create"] = i18n("Create frontenduser"); +$lngAct["frontend"]["frontend_delete"] = i18n("Delete frontenduser"); +$lngAct["frontendgroups"]["frontendgroup_delete"] = i18n("Delete frontendgroup"); +$lngAct["frontendgroups"]["frontendgroup_save_group"] = i18n("Save frontendgroup"); +$lngAct["frontendgroups"]["frontendgroup_create"] = i18n("Create frontendgroup"); +$lngAct["frontendgroups"]["frontendgroup_create"] = i18n("Create frontendgroup"); +$lngAct["frontendgroups"]["frontendgroup_user_add"] = i18n("Add frontendusers"); +$lngAct["frontendgroups"]["frontendgroups_user_delete"] = i18n("Delete frontenduser"); +$lngAct["frontendgroups_rights"]["fegroups_save_perm"] = i18n("Save frontendgroup permissions"); + +$lngAct["system_settings"]["systemsettings_delete_item"] = i18n("Delete system property"); +$lngAct["system_settings"]["systemsettings_edit_item"] = i18n("Edit system property"); +$lngAct["system_settings"]["systemsettings_save_item"] = i18n("Save system property"); + +$lngAct["system"]["emptyLog"] = i18n("Empty log"); +$lngAct["system_configuration"]["edit_sysconf"] = i18n("Edit Systemconfigration"); +$lngAct["system_purge"]["do_purge"] = i18n("Do system purge"); + +$lngAct["logs"]["log_show"] = i18n("Show log"); + +$lngAct["login"]["login"] = i18n("Login"); +$lngAct["login"]["request_pw"] = i18n("Request password?"); + +$lngAct["note"]["note_delete"] = i18n("Delete note"); +$lngAct["note"]["note_save_item"] = i18n("Save note"); + +$lngAct[""]["sendMail"] = i18n("Send mail"); +$lngAct[""]["fake_permission_action"] = i18n("Fake permissions"); + +$lngStr["actions"]["10"] = "Neuer Baum"; +$lngStr["structure"] = "Kategorie"; +$lngStr["properties"] = "Aktionen"; +$lngStr["makeinvisible"] = "Diese Kategorie offline setzen."; +$lngStr["makevisible"] = "Diese Kategorie online setzen."; +$lngStr["protect"] = "Diese Kategorie schützen."; +$lngStr["makepublic"] = "Diese Kategorie frei zugänglich machen."; +$lngStr["moveup"] = "Diese Kategorie eins nachoben verschieben."; +$lngStr["tofirstlevel"] = "Diese Kategorie in die oberste Ebene umhängen."; +$lngStr["movehere"] = "Die zuvor ausgewählte Kategorie hierher umhaengen."; +$lngStr["movesubtree"] = "Diese Kategorie (und den darunterliegenden Teilbaum) umhaengen."; + +$lngLay["lay"]["lay_new"] = "Neues Layout"; +$lngLay["layoutname"] = "Name des Layouts"; +$lngLay["description"] = "Beschreibung"; +$lngLay["code"] = "Code"; +$lngLay["notemplates"] = "Es gibt keine Layouts."; + +$lngMod["actions"]["10"] = "Neues Modul"; +$lngMod["modulename"] = "Name des Moduls"; +$lngMod["description"] = "Beschreibung"; +$lngMod["input"] = "Input"; +$lngMod["output"] = "Output"; +$lngMod["nomodules"] = "Es gibt keine Module."; +$lngMod["cmsvariables"] = "CMS_Variablen"; + +$lngTpl["actions"]["10"] = "Neues Template"; +$lngTpl["templatename"] = "Name des Templates"; +$lngTpl["description"] = "Beschreibung"; +$lngTpl["container"] = "Container"; +$lngTpl["notemplates"] = "Es gibt keine Templates."; +$lngTpl["layout"] = "Layout"; + + +$lngUpl["description"] = 'Beschreibung'; +$lngUpl['action'] = 'Aktionen'; +$lngUpl['delfolder'] = 'Verzeichnis l�schen'; +$lngUpl['delfile'] = 'Datei l�schen'; +$lngUpl['directoriesandfiles'] = 'Verzeichnisse / Dateien'; +$lngUpl['opendirectory'] = 'Verzeichnis �ffnen'; +$lngUpl['closedirectory'] = 'Verzeichnis schlie�en'; +$lngUpl['file'] = 'Datei'; +$lngUpl['fileopen'] = 'Datei �ffnen'; +$lngUpl['popupclose'] = 'Fenster schliessen'; +$lngUpl['renamefolder'] = 'Verzeichnis umbenennen'; +$lngUpl['renamefile'] = 'Datei umbenennen'; +$lngUpl['description'] = 'Beschreibung'; +$lngUpl['dirisempty'] = 'Verzeichnis ist leer'; +$lngUpl['upload'] = 'Dateien hochladen'; +$lngUpl['delete'] = 'l�schen'; +$lngUpl["filesize"] = 'Dateigr��e'; + +$lngUser["username"] = "Benutzername"; +$lngUser["password"] = "Pa�wort"; +$lngUser["level"] = "Berechtigungen"; +$lngUser["action"] = "Aktionen"; +$lngUser["create"] = "Erstellen"; +$lngUser["kill"] = "L�schen"; +$lngUser["edit"] = "Bearbeiten"; +$lngUser["error"] = "Fehler"; +$lngUser["nopermissiontocreateusers"] = "Sie haben keine Berechtigung Benutzer zu erstellen."; +$lngUser["pleasefilloutusernameandpassword"] = "Bitte f�llen Sie Benutzername und Pa�wort aus"; +$lngUser["usernamealreadyexists"] = "Benutzername existiert bereits"; +$lngUser["failed"] = "Fehlgeschlagen:"; +$lngUser["usercreated"] = "Benutzer erstellt"; +$lngUser["nopermissiontoeditusers"] = "Sie haben keine Berechtigung Benutzer zu bearbeiten"; +$lngUser["passwordchanged1"] = "Pa�wort von"; +$lngUser["passwordchanged2"] = "ge�ndert"; +$lngUser["nopermissiontodeleteusers"] = "Sie haben keine Berechtigung Benutzer zu l�schen"; +$lngUser["userdeleted"] = "Benutzer gel�scht"; + +$lngLang["language"] = "Sprache"; +$lngLang["active"] = "aktiv"; +$lngLang["actions"] = "Aktionen"; +$lngLang["rename"] = "umbenennen"; +$lngLang["delete"] = "l�schen"; +$lngLang["notactive"] = "deaktiviert"; +$lngLang["newlanguage"] = "Neue Sprache"; + +$lngStat["structureandarts"] = "Kategorie / Artikeln"; +$lngStat["numberofarts"] = "Anzahl der Artikeln"; +$lngStat["total"] = "Total"; +$lngStat["inthislanguage"] = "In dieser Sprache"; +$lngStat["sum"] = "Summe"; + +$lngForm["nothing"] = "--- ".i18n("None")." ---"; +$lngForm["all"] = "--- Alles ---"; + +$lngAll["yes"] = "ja"; +$lngAll["no"] = "nein"; +$lngAll["default"] = "default"; +$lngAll["defaultdoesnotexist"] = "Kein Default-Template eingestellt"; +$lngAll["logout"] = "Logout"; +$lngAll["back"] = "Zurück"; + +$mod["font"] = "Schriftart"; +$mod["errorfont"] = "Schriftart f�r Fehlermeldungen"; +$mod["inputformfont"] = "Schriftart f�r die Eingabefelder"; +$mod["select"] = "Auswahlmöglichkeiten"; +$mod["number"] = "Nummer"; +$mod["picforsend"] = "Bild f�r den Sendebutton"; + +$modLink["click"] = "Bitte klicken Sie hier."; + +$modNews["inputname"] = "Feld f�r Namen"; +$modNews["email"] = "E-Mail Adresse"; +$modNews["name"] = "Name (freiwillig)"; +$modNews["subcribe"] = "anmelden"; +$modNews["unsubcribe"] = "abmelden"; +$modNews["both"] = "beides"; +$modNews["headline"] = "Stets die neusten Informationen per E-Mail."; +$modNews["subcribemessage"] = "Wir haben Ihre Daten in unsere Datenbank aufgenommen."; +$modNews["unsubcribemessage"] = "Wir haben Sie aus unserem Newsletterverteiler gelöscht."; +$modNews["stopmessage"] = "Der Newsletterempfang wurde deaktiviert."; +$modNews["goonmessage"] = "Der Newsletterempfang wurde aktiviert."; + +$modLogin["error"] = "Logindaten sind nicht korrekt."; +$modLogin["send"] = "Login now"; +$modLogin["sendout"] = "logout"; +$modLogin["name"] = "Bitte Login-Namen eintragen"; +$modLogin["password"] = "Bitte Passwort eintragen"; +$modLogin["login"] = "Bitte klicken um einzuloggen"; +$modLogin["logout"] = "Bitte klicken um auszuloggen"; +$modLogin["picforlogout"] = "Bild f�r Logout"; +?> diff --git a/branches/conlite20/conlite/includes/functions.api.category.php b/branches/conlite20/conlite/includes/functions.api.category.php new file mode 100644 index 0000000..a0a9575 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.api.category.php @@ -0,0 +1,106 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-08-08 + * modified 2008-06-25, Frederic Schneider, add security fix + * + * $Id: functions.api.category.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/* Info: + * This file contains Contenido Category API functions. + * + * If you are planning to add a function, please make sure that: + * 1.) The function is in the correct place + * 2.) The function is documented + * 3.) The function makes sense and is generically usable + * + */ + + +/** + * capiCatGetLevelNode: Seeks through the category + * tree and returns the node on a specific level. + * + * Example: + * + * + Category A (15) + * |-+ News (16) + * | |- News A (17) + * + Category B (18) + * |-+ Internal (19) + * + * Given you are in the leaf "News A" (idcat 17), + * and you want to get out in which "main" tree you + * are, you can call the function like this: + * + * capi_cat_getlevelnode(17,1); + * + * The example would return "Category A" (idcat 15). + * If you specify an invalid level, the results are + * undefined. + * + * @param $int idcat The category number + * @param $minLevel int The level to extract + * + * @return int The category node on a specific level + */ +function capi_cat_getlevelnode($idcat, $minLevel = 0) +{ + global $cfg, $client, $lang; + + $db = new DB_ConLite; + + $sql = "SELECT + a.name AS name, + a.idcat AS idcat, + b.parentid AS parentid, + c.level AS level + FROM + ".$cfg["tab"]["cat_lang"]." AS a, + ".$cfg["tab"]["cat"]." AS b, + ".$cfg["tab"]["cat_tree"]." AS c + WHERE + a.idlang = '".$lang."' AND + b.idclient = '".$client."' AND + b.idcat = '".$idcat."' AND + c.idcat = b.idcat AND + a.idcat = b.idcat"; + + $db->query($sql); + $db->next_record(); + + $parentid = $db->f("parentid"); + $thislevel = $db->f("level"); + + if ( $parentid != 0 && $thislevel >= $minLevel) { + return capi_cat_getlevelnode($parentid, $minLevel); + } else { + return $idcat; + } +} \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.api.images.php b/branches/conlite20/conlite/includes/functions.api.images.php new file mode 100644 index 0000000..adb27b9 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.api.images.php @@ -0,0 +1,690 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-08-08 + * modified 2008-06-25, Frederic Schneider, add security fix + * + * $Id: functions.api.images.php 358 2015-09-28 17:53:12Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/* Info: + * This file contains Contenido Image API functions. + * + * If you are planning to add a function, please make sure that: + * 1.) The function is in the correct place + * 2.) The function is documented + * 3.) The function makes sense and is generically usable + * + */ + +/** + * capiImgScaleGetMD5CacheFile: Returns the MD5 Filename used + * for caching. + * + * @return string Path to the resulting image + */ +function capiImgScaleGetMD5CacheFile($sImg, $iMaxX, $iMaxY, $bCrop, $bExpand) { + if (!file_exists($sImg)) { + return false; + } + + $iFilesize = filesize($sImg); + + if (function_exists("md5_file")) { + $sMD5 = md5(implode("", array( + $sImg, + md5_file($sImg), + $iFilesize, + $iMaxX, + $iMaxY, + $bCrop, + $bExpand))); + } else { + $sMD5 = md5(implode("", array( + $sImg, + $iFilesize, + $iMaxX, + $iMaxY, + $bCrop, + $bExpand))); + } + + return $sMD5; +} + +/** + * capiImgScaleLQ: Scales (or crops) an image. + * If scaling, the aspect ratio is maintained. + * + * Returns the path to the scaled temporary image. + * + * Note that this function does some very poor caching; + * it calculates an md5 hash out of the image plus the + * maximum X and Y sizes, and uses that as the file name. + * If the file is older than 10 minutes, regenerate it. + * + * @param string $img The path to the image (relative to the frontend) + * @param int $maxX The maximum size in x-direction + * @param int $maxY The maximum size in y-direction + * @param boolean $crop If true, the image is cropped and not scaled. + * @param boolean $expand If true, the image is expanded (e.g. really scaled). + * If false, the image will only be made smaller. + * @param int $cacheTime The number of minutes to cache the image, use 0 for unlimited + * @param int $quality The quality of the output file + * @param boolean $keepType If true and a png file is source, output file is also png + * + * @return string !!!URL!!! to the resulting image (http://... + */ +function capiImgScaleLQ($img, $maxX, $maxY, $crop = false, $expand = false, $cacheTime = 10, $quality = 75, $keepType = false) { + global $cfgClient, $lang, $client; + + $filename = $img; + $cacheTime = (int) $cacheTime; + $quality = (int) $quality; + + if ($quality <= 0 || $quality > 100) { + $quality = 75; + } + + $filetype = substr($filename, strlen($filename) - 4, 4); + $filesize = filesize($img); + $md5 = capiImgScaleGetMD5CacheFile($img, $maxX, $maxY, $crop, $expand); + + // Create the target file names for web and server + if ($keepType) { // Should we keep the file type? + switch (strtolower($filetype)) { // Just using switch if someone likes to add other types + case ".png": + $cfileName = $md5 . ".png"; + break; + default: + $cfileName = $md5 . ".jpg"; + } + } else { // No... use .jpg + $cfileName = $md5 . ".jpg"; + } + + $cacheFile = $cfgClient[$client]["path"]["frontend"] . "cache/" . $cfileName; + $webFile = $cfgClient[$client]["path"]["htmlpath"] . "cache/" . $cfileName; + + // Check if the file exists. If it does, check if the file is valid. + if (file_exists($cacheFile)) { + if ($cacheTime == 0) { + // Do not check expiration date + return $webFile; + } else if (!function_exists("md5_file")) { // TODO: Explain why this is still needed ... or remove it + if ((filemtime($cacheFile) + (60 * $cacheTime)) < time()) { + /* Cache time expired, unlink the file */ + unlink($cacheFile); + } else { + /* Return the web file name */ + return $webFile; + } + } else { + return $webFile; + } + } + + /* Get out which file we have */ + switch (strtolower($filetype)) { + case ".gif": $function = "imagecreatefromgif"; + break; + case ".png": $function = "imagecreatefrompng"; + break; + case ".jpg": $function = "imagecreatefromjpeg"; + break; + case "jpeg": $function = "imagecreatefromjpeg"; + break; + default: return false; + } + + if (function_exists($function)) { + $imageHandle = @$function($filename); + } + + /* If we can't open the image, return false */ + if (!$imageHandle) { + return false; + } + + $x = imagesx($imageHandle); + $y = imagesy($imageHandle); + + /* Calculate the aspect ratio */ + $aspectXY = $x / $y; + $aspectYX = $y / $x; + + if (($maxX / $x) < ($maxY / $y)) { + $targetY = $y * ($maxX / $x); + $targetX = round($maxX); + + // force wished height + if ($targetY < $maxY) { + $targetY = ceil($targetY); + } else { + $targetY = floor($targetY); + } + } else { + $targetX = $x * ($maxY / $y); + $targetY = round($maxY); + + // force wished width + if ($targetX < $maxX) { + $targetX = ceil($targetX); + } else { + $targetX = floor($targetX); + } + } + + if ($expand == false && (($targetX > $x) || ($targetY > $y))) { + $targetX = $x; + $targetY = $y; + } + + $targetX = ($targetX != 0) ? $targetX : 1; + $targetY = ($targetY != 0) ? $targetY : 1; + + /* Create the target image with the target size, resize it afterwards. */ + if ($crop) { + /* Create the target image with the max size, crop it afterwards. */ + $targetImage = imagecreate($maxX, $maxY); + imagecopy($targetImage, $imageHandle, 0, 0, 0, 0, $maxX, $maxY); + } else { + /* Create the target image with the target size, resize it afterwards. */ + $targetImage = imagecreate($targetX, $targetY); + imagecopyresized($targetImage, $imageHandle, 0, 0, 0, 0, $targetX, $targetY, $x, $y); + } + + // Output the file + if ($keepType) { + switch (strtolower($filetype)) { + case ".png": + imagepng($targetImage, $cacheFile); // no quality option available + break; + default: + imagejpeg($targetImage, $cacheFile, $quality); + } + } else { + imagejpeg($targetImage, $cacheFile, $quality); + } + + return ($webFile); +} + +/** + * capiImgScaleHQ: Scales (or crops) an image in high quality. + * If scaling, the aspect ratio is maintained. + * + * Note: GDLib 2.x is required! + * + * Returns the path to the scaled temporary image. + * + * Note that this function does some very poor caching; + * it calculates an md5 hash out of the image plus the + * maximum X and Y sizes, and uses that as the file name. + * If the file is older than the specified cache time, regenerate it. + * + * @param string $img The path to the image (relative to the frontend) + * @param int $maxX The maximum size in x-direction + * @param int $maxY The maximum size in y-direction + * @param boolean $crop If true, the image is cropped and not scaled. + * @param boolean $expand If true, the image is expanded (e.g. really scaled). + * If false, the image will only be made smaller. + * @param int $cacheTime The number of minutes to cache the image, use 0 for unlimited + * @param int $quality The quality of the output file + * @param boolean $keepType If true and a png file is source, output file is also png + * + * @return string !!!URL!!! to the resulting image (http://...) + */ +function capiImgScaleHQ($img, $maxX, $maxY, $crop = false, $expand = false, $cacheTime = 10, $quality = 75, $keepType = false) { + global $cfgClient, $lang, $client; + + $filename = $img; + $cacheTime = (int) $cacheTime; + $quality = (int) $quality; + + if ($quality <= 0 || $quality > 100) { + $quality = 75; + } + + $filetype = substr($filename, strlen($filename) - 4, 4); + $filesize = filesize($img); + $md5 = capiImgScaleGetMD5CacheFile($img, $maxX, $maxY, $crop, $expand); + + /* Create the target file names for web and server */ + if ($keepType) { // Should we keep the file type? + switch (strtolower($filetype)) { // Just using switch if someone likes to add other types + case ".png": + $cfileName = $md5 . ".png"; + break; + default: + $cfileName = $md5 . ".jpg"; + } + } else { // No... use .jpg + $cfileName = $md5 . ".jpg"; + } + + $cacheFile = $cfgClient[$client]["path"]["frontend"] . "cache/" . $cfileName; + $webFile = $cfgClient[$client]["path"]["htmlpath"] . "cache/" . $cfileName; + + /* Check if the file exists. If it does, check if the file is valid. */ + if (file_exists($cacheFile)) { + if ($cacheTime == 0) { + // Do not check expiration date + return $webFile; + } else if (!function_exists("md5_file")) { // TODO: Explain why this is still needed ... or remove it + if ((filemtime($cacheFile) + (60 * $cacheTime)) < time()) { + /* Cache time expired, unlink the file */ + unlink($cacheFile); + } else { + /* Return the web file name */ + return $webFile; + } + } else { + return $webFile; + } + } + + /* Get out which file we have */ + switch (strtolower($filetype)) { + case ".gif": $function = "imagecreatefromgif"; + break; + case ".png": $function = "imagecreatefrompng"; + break; + case ".jpg": $function = "imagecreatefromjpeg"; + break; + case "jpeg": $function = "imagecreatefromjpeg"; + break; + default: return false; + } + + if (function_exists($function)) { + $imageHandle = @$function($filename); + } + + /* If we can't open the image, return false */ + if (!$imageHandle) { + return false; + } + + $x = imagesx($imageHandle); + $y = imagesy($imageHandle); + + /* Calculate the aspect ratio */ + $aspectXY = $x / $y; + $aspectYX = $y / $x; + + if (($maxX / $x) < ($maxY / $y)) { + $targetY = $y * ($maxX / $x); + $targetX = round($maxX); + + // force wished height + if ($targetY < $maxY) { + $targetY = ceil($targetY); + } else { + $targetY = floor($targetY); + } + } else { + $targetX = $x * ($maxY / $y); + $targetY = round($maxY); + + // force wished width + if ($targetX < $maxX) { + $targetX = ceil($targetX); + } else { + $targetX = floor($targetX); + } + } + + if ($expand == false && (($targetX > $x) || ($targetY > $y))) { + $targetX = $x; + $targetY = $y; + } + + $targetX = ($targetX != 0) ? $targetX : 1; + $targetY = ($targetY != 0) ? $targetY : 1; + + /* Create the target image with the target size, resize it afterwards. */ + if ($crop) { + /* Create the target image with the max size, crop it afterwards. */ + $targetImage = imagecreatetruecolor($maxX, $maxY); + imagecopy($targetImage, $imageHandle, 0, 0, 0, 0, $maxX, $maxY); + } else { + /* Create the target image with the target size, resize it afterwards. */ + $targetImage = imagecreatetruecolor($targetX, $targetY); + imagecopyresampled($targetImage, $imageHandle, 0, 0, 0, 0, $targetX, $targetY, $x, $y); + } + + // Output the file + if ($keepType) { + switch (strtolower($filetype)) { + case ".png": + imagepng($targetImage, $cacheFile); // no quality option available + break; + default: + imagejpeg($targetImage, $cacheFile, $quality); + } + } else { + imagejpeg($targetImage, $cacheFile, $quality); + } + + return ($webFile); +} + +/** + * capiImgScaleImageMagick: Scales (or crops) an image using ImageMagick. + * If scaling, the aspect ratio is maintained. + * + * Note: ImageMagick is required! + * + * Returns the path to the scaled temporary image. + * + * Note that this function does some very poor caching; + * it calculates an md5 hash out of the image plus the + * maximum X and Y sizes, and uses that as the file name. + * If the file is older than the specified cache time, regenerate it. + * + * @param string $img The path to the image (relative to the frontend) + * @param int $maxX The maximum size in x-direction + * @param int $maxY The maximum size in y-direction + * @param boolean $crop If true, the image is cropped and not scaled. + * @param boolean $expand If true, the image is expanded (e.g. really scaled). + * If false, the image will only be made smaller. + * @param int $cacheTime The number of minutes to cache the image, use 0 for unlimited + * @param int $quality The quality of the output file + * @param boolean $keepType If true and a png file is source, output file is also png + * + * @return string !!!URL!!! to the resulting image (http://...) + */ +function capiImgScaleImageMagick($img, $maxX, $maxY, $crop = false, $expand = false, $cacheTime = 10, $quality = 75, $keepType = false) { + global $cfgClient, $lang, $client; + + $filename = $img; + $cacheTime = (int) $cacheTime; + $quality = (int) $quality; + + if ($quality <= 0 || $quality > 100) { + $quality = 75; + } + + $filetype = substr($filename, strlen($filename) - 4, 4); + $filesize = filesize($img); + $md5 = capiImgScaleGetMD5CacheFile($img, $maxX, $maxY, $crop, $expand); + + /* Create the target file names for web and server */ + if ($keepType) { // Should we keep the file type? + switch (strtolower($filetype)) { // Just using switch if someone likes to add other types + case ".png": + $cfileName = $md5 . ".png"; + break; + default: + $cfileName = $md5 . ".jpg"; + } + } else { // No... use .jpg + $cfileName = $md5 . ".jpg"; + } + + $cacheFile = $cfgClient[$client]["path"]["frontend"] . "cache/" . $cfileName; + $webFile = $cfgClient[$client]["path"]["htmlpath"] . "cache/" . $cfileName; + + /* Check if the file exists. If it does, check if the file is valid. */ + if (file_exists($cacheFile)) { + if ($cacheTime == 0) { + // Do not check expiration date + return $webFile; + } else if (!function_exists("md5_file")) { // TODO: Explain why this is still needed ... or remove it + if ((filemtime($cacheFile) + (60 * $cacheTime)) < time()) { + /* Cache time expired, unlink the file */ + unlink($cacheFile); + } else { + /* Return the web file name */ + return $webFile; + } + } else { + return $webFile; + } + } + + list($x, $y) = @getimagesize($filename); + if ($x == 0 || $y == 0) { + return false; + } + + /* Calculate the aspect ratio */ + $aspectXY = $x / $y; + $aspectYX = $y / $x; + + if (($maxX / $x) < ($maxY / $y)) { + $targetY = $y * ($maxX / $x); + $targetX = round($maxX); + + // force wished height + if ($targetY < $maxY) { + $targetY = ceil($targetY); + } else { + $targetY = floor($targetY); + } + } else { + $targetX = $x * ($maxY / $y); + $targetY = round($maxY); + + // force wished width + if ($targetX < $maxX) { + $targetX = ceil($targetX); + } else { + $targetX = floor($targetX); + } + } + + if ($expand == false && (($targetX > $x) || ($targetY > $y))) { + $targetX = $x; + $targetY = $y; + } + + $targetX = ($targetX != 0) ? $targetX : 1; + $targetY = ($targetY != 0) ? $targetY : 1; + + // if is animated gif resize first frame + if ($filetype == ".gif") { + if (isAnimGif($filename)) { + $filename .= "[0]"; + } + } + + /* Try to execute convert */ + $output = array(); + $retVal = 0; + if ($crop) { + exec("convert -gravity center -quality " . $quality . " -crop {$maxX}x{$maxY}+1+1 \"$filename\" $cacheFile", $output, $retVal); + } else { + exec("convert -quality " . $quality . " -geometry {$targetX}x{$targetY} \"$filename\" $cacheFile", $output, $retVal); + } + + if (!file_exists($cacheFile)) { + return false; + } else { + return ($webFile); + } +} + +/** + * check if gif is animated + * + * @param string file path + * + * @return boolean true (gif is animated)/ false (single frame gif) + */ +function isAnimGif($sFile) { + $output = array(); + $retval = 0; + + exec('identify ' . $sFile, $output, $retval); + + if (count($output) == 1) { + return false; + } + + return true; +} + +/** + * capiImgScale: Scales (or crops) an image. + * If scaling, the aspect ratio is maintained. + * + * This function chooses the best method to scale, depending on + * the system environment and/or the parameters. + * + * Returns the path to the scaled temporary image. + * + * Note that this function does some very poor caching; + * it calculates an md5 hash out of the image plus the + * maximum X and Y sizes, and uses that as the file name. + * If the file is older than 10 minutes, regenerate it. + * + * @param string $img The path to the image (relative to the frontend) + * @param int $maxX The maximum size in x-direction + * @param int $maxY The maximum size in y-direction + * @param boolean $crop If true, the image is cropped and not scaled. + * @param boolean $expand If true, the image is expanded (e.g. really scaled). + * If false, the image will only be made smaller. + * @param int $cacheTime The number of minutes to cache the image, use 0 for unlimited + * @param boolean $wantHQ If true, try to force high quality mode + * @param int $quality The quality of the output file + * @param boolean $keepType If true and a png file is source, output file is also png + * + * @return string !!!URL!!! to the resulting image (http://...) + * + * @return string Path to the resulting image + */ +function capiImgScale($img, $maxX, $maxY, $crop = false, $expand = false, $cacheTime = 10, $wantHQ = false, $quality = 75, $keepType = false) { + global $client, $db, $cfg, $cfgClient; + + $deleteAfter = false; + + $sRelativeImg = str_replace($cfgClient[$client]["upl"]["path"], "", $img); + if (is_dbfs($sRelativeImg)) { + // This check should be faster than a file existance check + $dbfs = new DBFSCollection; + + $file = basename($sRelativeImg); + + $dbfs->writeToFile($sRelativeImg, $cfgClient[$client]["path"]["frontend"] . "cache/" . $file); + + $img = $cfgClient[$client]["path"]["frontend"] . "cache/" . $file; + $deleteAfter = true; + } else if (!file_exists($img)) { + /* Try with upload string */ + if (file_exists($cfgClient[$client]["upl"]["path"] . $img) && !is_dir($cfgClient[$client]["upl"]["path"] . $img)) { + $img = $cfgClient[$client]["upl"]["path"] . $img; + } else { + /* No, it's neither in the upload directory nor in the dbfs. return. */ + return false; + } + } + + $filename = $img; + $filetype = substr($filename, strlen($filename) - 4, 4); + + $mxdAvImgEditingPosibility = checkImageEditingPosibility(); + switch ($mxdAvImgEditingPosibility) { + case '1': // gd1 + $method = 'gd1'; + if (!function_exists('imagecreatefromgif') && $filetype == '.gif') { + $method = 'failure'; + } + break; + case '2': //gd2 + $method = 'gd2'; + if (!function_exists('imagecreatefromgif') && $filetype == '.gif') { + $method = 'failure'; + } + break; + case 'im': //imagemagick + $method = 'im'; + break; + case '0': + $method = 'failure'; + break; + default: + $method = 'failure'; + break; + } + + switch ($method) { + case 'gd1': + $return = capiImgScaleLQ($img, $maxX, $maxY, $crop, $expand, $cacheTime, $quality, $keepType); + break; + + case 'gd2': + $return = capiImgScaleHQ($img, $maxX, $maxY, $crop, $expand, $cacheTime, $quality, $keepType); + break; + + case 'im': + $return = capiImgScaleImageMagick($img, $maxX, $maxY, $crop, $expand, $cacheTime, $quality, $keepType); + break; + + case 'failure': + $return = str_replace($cfgClient[$client]["path"]["frontend"], $cfgClient[$client]["path"]["htmlpath"], $img); + break; + } + + if ($deleteAfter == true) { + unlink($img); + } + + return $return; +} + +/** + * check possible image editing functionality + * + * return mixed information about installed image editing extensions/tools + */ +function checkImageEditingPosibility() { + + if (isImageMagickAvailable()) { + return 'im'; + } else { + if (extension_loaded('gd')) { + if (function_exists('gd_info')) { + $arrGDInformations = gd_info(); + + if (preg_match('#([0-9\.])+#', $arrGDInformations['GD Version'], $strGDVersion)) { + if ($strGDVersion[0] >= '2') { + return '2'; + } + return '1'; + } + return '1'; + } + return '1'; + } + return '0'; + } +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.api.php b/branches/conlite20/conlite/includes/functions.api.php new file mode 100644 index 0000000..5452bf4 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.api.php @@ -0,0 +1,39 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-08-08 + * modified 2008-06-25, Frederic Schneider, add security fix + * + * $Id: functions.api.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude('includes', 'functions.api.category.php'); +cInclude('includes', 'functions.api.string.php'); +cInclude('includes', 'functions.api.images.php'); + +?> diff --git a/branches/conlite20/conlite/includes/functions.api.string.php b/branches/conlite20/conlite/includes/functions.api.string.php new file mode 100644 index 0000000..2c45428 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.api.string.php @@ -0,0 +1,398 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-08-08 + * modified 2008-06-25, Frederic Schneider, add security fix + * modified 2008-09-15, Murat Purc, add replacement of characters with diacritics + * modified 2009-04-30, Ortwin Pinke, CON-252 + * modified 2010-01-07, Ingo van Peren, CON-293 + * + * $Id: functions.api.string.php 401 2015-11-19 14:07:25Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * Info: + * This file contains Contenido String API functions. + * + * If you are planning to add a function, please make sure that: + * 1.) The function is in the correct place + * 2.) The function is documented + * 3.) The function makes sense and is generically usable + * + */ + + +/** + * capiStrTrimAfterWord: Trims a string to a given + * length and makes sure that all words up to + * $maxlen are preserved, without exceeding $maxlen. + * + * Warning: Currently, this function uses a regular + * ASCII-Whitespace to do the seperation test. If + * you are using ' ' to create spaces, this + * function will fail. + * + * Example: + * $string = "This is a simple test"; + * echo capiStrTrimAfterWord ($string, 15); + * + * This would output "This is a", since + * this function respects word boundaries + * and doesn't operate beyond the limit given + * by $maxlen. + * + * @param $string string The string to operate on + * @param $maxlen int The maximum number of characters + * + * @return string The resulting string + */ +function capiStrTrimAfterWord ($string, $maxlen) +{ + /* If the string is smaller than the maximum + lenght, it makes no sense to process it any + further. Return it. */ + if (strlen($string) < $maxlen) + { + return $string; + } + + /* If the character after the $maxlen + position is a space, we can return + the string until $maxlen */ + if (substr($string, $maxlen,1) == ' ') + { + return substr($string, 0, $maxlen); + } + + /* Cut the string up to $maxlen so we can + use strrpos (reverse str position) */ + $cutted_string = substr($string, 0, $maxlen); + + /* Extract the end of the last word */ + $last_word_position = strrpos($cutted_string, ' '); + + return (substr($cutted_string, 0, $last_word_position)); +} + +/** + * capiStrTrimHard: Trims a string to a specific + * length. If the string is longer than $maxlen, + * dots are inserted ("...") right before $maxlen. + * + * Example: + * $string = "This is a simple test"; + * echo capiStrTrimHard ($string, 15); + * + * This would output "This is a si...", since + * the string is longer than $maxlen and the + * resulting string matches 15 characters including + * the dots. + * + * @param $string string The string to operate on + * @param $maxlen int The maximum number of characters + * + * @return string The resulting string + */ +function capiStrTrimHard ($string, $maxlen, $fillup = "...") +{ + + /* If the string is smaller than the maximum + lenght, it makes no sense to process it any + further. Return it. */ + if (strlen($string) < $maxlen) + { + return $string; + } + + /* Calculate the maximum text length */ + $maximum_text_length = $maxlen - strlen($fillup); + + /* Cut it */ + $cutted_string = substr($string, 0, $maximum_text_length); + + /* Append the fillup string */ + $cutted_string .= $fillup; + + return ($cutted_string); +} + +/** + * capiStrTrimSentence: Trims a string to a + * approximate length. Sentence boundaries are + * preserved. + * + * The algorythm inside calculates the sentence + * length to the previous and next sentences. + * The distance to the next sentence which is + * smaller will be taken to trim the string + * to match the approximate length parameter. + * + * Example: + * + * $string = "This contains two sentences. "; + * $string .= "Lets play around with them. "; + * + * echo capiStrTrimSentence($string, 40); + * echo capiStrTrimSentence($string, 50); + * + * The first example would only output the first sentence, + * the second example both sentences. + * + * Explanation: + * + * To match the given max length closely, + * the function calculates the distance to + * the next and previous sentences. Using + * the maxlength of 40 characters, the + * distance to the previous sentence would + * be 8 characters, and to the next sentence + * it would be 19 characters. Therefore, + * only the previous sentence is displayed. + * + * The second example displays the second + * sentence also, since the distance to the + * next sentence is only 9 characters, but + * to the previous it is 18 characters. + * + * If you specify the boolean flag "$hard", + * the limit parameter creates a hard limit + * instead of calculating the distance. + * + * This function ensures that at least one + * sentence is returned. + * + * @param $string string The string to operate on + * @param $approxlen int The approximate number of characters + * @param $hard boolean If true, use a hard limit for the number of characters (default: false) + * @return string The resulting string + */ +function capiStrTrimSentence ($string, $approxlen, $hard = false) +{ + + /* If the string is smaller than the maximum + lenght, it makes no sense to process it any + further. Return it. */ + if (strlen($string) < $approxlen) + { + return $string; + } + + /* Find out the start of the next sentence */ + $next_sentence_start = strpos($string, '.', $approxlen); + + /* If there's no next sentence (somebody forgot the dot?), + set it to the end of the string. */ + if ($next_sentence_start === false) + { + $next_sentence_start = strlen($string); + } + + /* Cut the previous sentence so we can use strrpos */ + $previous_sentence_cutted = substr($string, 0, $approxlen); + + /* Get out the previous sentence start */ + $previous_sentence_start = strrpos($previous_sentence_cutted, '.'); + + /* If the sentence doesn't contain a dot, use the text start. */ + if ($previous_sentence_start === false) + { + $previous_sentence_start = 0; + } + + /* If we have a hard limit, we only want to process + everything before $approxlen */ + if (($hard == true) && ($next_sentence_start > $approxlen)) + { + return (substr($string, 0, $previous_sentence_start+1)); + } + + /* Calculate next and previous sentence distances */ + $distance_previous_sentence = $approxlen - $previous_sentence_start; + $distance_next_sentence = $next_sentence_start - $approxlen; + + /* Sanity: Return at least one sentence. */ + $sanity = substr($string, 0, $previous_sentence_start + 1); + + if (strpos($sanity,'.') === false) + { + return (substr($string, 0, $next_sentence_start + 1)); + } + + /* Decide wether the next or previous sentence is nearer */ + if ($distance_previous_sentence > $distance_next_sentence) + { + return (substr($string, 0, $next_sentence_start+1)); + } else { + return (substr($string, 0, $previous_sentence_start+1)); + } +} + +/** + * capiStrReplaceDiacritics: Converts diactritics + * to english characters whenever possible. + * + * Source and Target-Encoding isn't used anymore, remain for compatibility reasons + * string is always converted to utf-8 + * + * @since CL 2.0 + * + * @staticvar array $aSearch + * @staticvar array $aReplace + * @param string $sString + * @param string $sourceEncoding + * @param string $targetEncoding + * @return string returns cleaned string + */ +function capiStrReplaceDiacritics($sString, $sourceEncoding = null, $targetEncoding = null) { + static $aSearch, $aReplace; + if (!isset($aSearch) || !isset($aReplace)) { + $aSearch = array('Ä','Ö','Ü','ä','ö','ü','ß','Á','À','Â','á','à','â','É','È','Ê','é','è','ê','Í','Ì','Î','í','ì','î','Ó','Ò','Ô','ó','ò','ô','Ú','Ù','Û','ú','ù','û'); + $aReplace = array('Ae','Oe','Ue','ae','oe','ue','ss','A','A','A','a','a','a','E','E','E','e','e','e','I','I','I','i','i','i','O','O','O','o','o','o','U','U','U','u','u','u'); + } + // always use utf-8 + if(function_exists("mb_convert_encoding")) { + $sString = mb_convert_encoding($sString, "UTF-8", mb_detect_encoding($sString, "UTF-8, ISO-8859-1, ISO-8859-15", true)); + } else { + $sString = utf8_encode($sString); + } + $sString = str_replace($aSearch, $aReplace, $sString); + + return $sString; +} + + +/** + * capiStrRecodeString: Converts a string to another encoding. + * This function tries to detect which function to use (either + * recode or iconv). + * + * If $sourceEncoding and $targetEncoding are the same, this + * function returns immediately. + * + * For more information about encodings, refer to + * http://en.wikipedia.org/wiki/Character_encoding + * + * For more information about the supported encodings in recode, + * refer to + * http://www.delorie.com/gnu/docs/recode/recode_toc.html + * + * Note: depending on whether recode or iconv is used, the + * supported charsets differ. The following ones are commonly used + * and are most likely supported by both converters: + * + * - ISO-8859-1 to ISO-8859-15 + * - ASCII + * - UTF-8 + * + * @todo Check if the charset names are the same for both converters + * @todo Implement a converter and charset checker to ensure compilance. + * + * @param $sString string The string to operate on + * @param $targetEncoding string The target encoding (if false, use source encoding) + * @param $sourceEncoding string The source encoding (default: ISO-8859-1) + * @return string The resulting string + * + * @author Timo A. Hummel + * @copyright four for business AG, http://www.4fb.de + */ +function capiStrRecodeString ($sString, $sourceEncoding, $targetEncoding) +{ + /* If sourceEncoding and targetEncoding are the same, return */ + if ($sourceEncoding == $targetEncoding) + { + return $sString; + } + + /* Check for the "recode" support */ + if (function_exists("recode")) + { + $sResult = recode_string("$sourceEncoding..$targetEncoding", $sString); + + return ($sResult); + } + + /* Check for the "iconv" support */ + if (function_exists("iconv")) + { + $sResult = iconv($sourceEncoding, $targetEncoding, $sString); + + return ($sResult); + } + + /* No charset converters found; return with warning */ + cWarning(__FILE__, __LINE__, "capiStrRecodeString could not find either recode or iconv to do charset conversion."); + return ($sString); +} + +/** + * capiStrCleanURLCharacters: Removes or converts all "evil" + * URL characters. + * + * This function removes or converts all characters which can + * make an URL invalid. + * + * Clean characters include: + * - All characters between 32 and 126 which are not alphanumeric and + * aren't one of the following: _-. + * + * @param $sString string The string to operate on + * @param $bReplace string If true, all "unclean" characters are replaced + * @return string The resulting string + * + * @author Timo A. Hummel + * @copyright four for business AG, http://www.4fb.de + */ +function capiStrCleanURLCharacters ($sString, $bReplace = false) +{ + $sString = capiStrReplaceDiacritics($sString); + $sString = str_replace(" ", "-", $sString); + $sString = str_replace("/", "-", $sString); + $sString = str_replace("&", "-", $sString); + $sString = str_replace("+", "-", $sString); + + $iStrLen = strlen($sString); + + for ($i=0; $i < $iStrLen; $i++) + { + $sChar = substr($sString, $i, 1); + + if (preg_match('/^[a-z0-9]*$/i', $sChar) || $sChar == "-" || $sChar == "_" || $sChar == ".") + { + $sResultString .= $sChar; + } else { + if ($bReplace == true) + { + $sResultString .= "_"; + } + } + + } + + return ($sResultString); +} +?> diff --git a/branches/conlite20/conlite/includes/functions.con.php b/branches/conlite20/conlite/includes/functions.con.php new file mode 100644 index 0000000..c84534a --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.con.php @@ -0,0 +1,2247 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-11-24, Mario Diaz, function conFlagOnOffline: Set publish date if article goes online + * modified 2008-06-25, Frederic Schneider, add security fix + * modified 2008-06-26, Timo.Trautmann, add security fix fix setting article online was not possible + * modified 2008-08-29, Murat Purc, add new chain execution, and handling og new field con_cat_lang.urlname + * modified 2008-09-07, Murat Purc, bugfix in conCopyArtLang at chain execution + * modified 2008-09-12, Oliver Lohkemper, bugfix in function conChangeTemplateForCat, add conGenerateCodeForAllartsInCategory() + * modified 2009-04-23, Andreas Lindner, also copy alias of article when syncing article to another language + * modified 2009-05-05, Timo Trautmann - optional use for copy label on copy proccess + * modified 2009-10-07, Murat Purc, bugfix in conMoveArticles (missing apostrophe) + * modified 2009-12-01, Dominik Ziegler, bugfix in conFlagOnOffline (article is still offline if enddate in time management is missing) + * modified 2009-10-27, Murat Purc, fixed/modified CEC_Hook, see [#CON-256] + * modified 2010-10-13, Dominik Ziegler, No copy label per default when copying articles or categories (CON-352) + * + * $Id: functions.con.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/* Compatibility: Include new functions.con2.php */ +cInclude("includes", "functions.con2.php"); + + +/** + * Create a new Article + * + * @param mixed many + * @author Olaf Niemann + * @copyright four for business AG + * + * @return int Id of the new article + */ +function conEditFirstTime($idcat, $idcatnew, $idart, $is_start, $idtpl, + $idartlang, $idlang, $title, $summary, $artspec, $created, + $lastmodified, $author, $online, $datestart, $dateend, + $artsort, $keyart=0) +{ + + global $db; + global $client; + global $lang; + global $cfg; + global $auth; + global $urlname; + global $page_title; + //Some stuff for the redirect + global $redirect; + global $redirect_url; + global $external_redirect; + global $time_move_cat; // Used to indicate "move to cat" + global $time_target_cat; // Used to indicate the target category + global $time_online_move; // Used to indicate if the moved article should be online + global $timemgmt; + global $_POST; + + $page_title = addslashes($page_title); + + $urlname = (trim($urlname) == '') ? trim($title) : trim($urlname); + $urlname = clHtmlSpecialChars(capiStrCleanURLCharacters($urlname), ENT_QUOTES); + $usetimemgmt = ($timemgmt == '1') ? '1' : '0'; + $movetocat = ($time_move_cat == '1') ? '1' : '0'; + $onlineaftermove = ($time_online_move == '1') ? '1' : '0'; + $redirect = ($redirect == '1') ? '1' : '0'; + $external_redirect = ($external_redirect == '1') ? '1' : '0'; + $redirect_url = ($redirect_url == 'http://' || $redirect_url == '') ? '0' : $redirect_url; + + if ($is_start == 1) { + $usetimemgmt = "0"; + } + + $new_idart = $db->nextid($cfg["tab"]["art"]); + + # Table 'cat_art' + # Check if there are articles in this category. + # If not make it a start article + $sql = "SELECT * FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'"; + $db->query($sql); + + if ( $db->next_record() ) { + + if ($cfg["is_start_compatible"] == true) + { + $sql = "INSERT INTO ".$cfg["tab"]["cat_art"]." (idcatart, idcat, idart, is_start) VALUES ('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["cat_art"]))."', '".Contenido_Security::toInteger($idcat)."', + '".Contenido_Security::toInteger($new_idart)."', '0')"; + $db->query($sql); + } else { + $autostart = false; + } + } else { + if ($cfg["is_start_compatible"] == true) + { + $sql = "INSERT INTO ".$cfg["tab"]["cat_art"]." (idcatart, idcat, idart, is_start) VALUES ('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["cat_art"]))."', '".Contenido_Security::toInteger($idcat) ."', + '".Contenido_Security::toInteger($new_idart)."', '1')"; + $db->query($sql); + } else { + $autostart = false; + } + } + + # Table 'con_art' + $sql = "INSERT INTO ".$cfg["tab"]["art"]." (idart, idclient) VALUES ('".Contenido_Security::toInteger($new_idart)."', '".Contenido_Security::toInteger($client)."')"; + $db->query($sql); + + # Table 'con_stat' + $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat = '".Contenido_Security::toInteger($idcat)."' AND idart = '".Contenido_Security::toInteger($new_idart)."'"; + $db->query($sql); + $db->next_record(); + $idcatart = $db->f("idcatart"); + + $a_languages[] = $lang; + foreach ($a_languages as $tmp_lang) { + $sql = "INSERT INTO ".$cfg["tab"]["stat"]." (idstat, idcatart, idlang, idclient, visited) VALUES ('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["stat"]))."', + '".Contenido_Security::toInteger($idcatart)."', '".Contenido_Security::toInteger($tmp_lang)."', '".Contenido_Security::toInteger($client)."', '0')"; + $db->query($sql); + } + + # Table 'con_art_lang' + # One entry for every language + foreach ($a_languages as $tmp_lang) { + + $lastmodified = ( $lang == $tmp_lang ) ? $lastmodified : 0; + + $nextidartlang = $db->nextid($cfg["tab"]["art_lang"]); + if(($online==1)){ + $published_value = date("Y-m-d H:i:s"); + $publishedby_value = $auth->auth["uname"]; + }else{ + $published_value = ''; + $publishedby_value = ''; + } + + $sql = "INSERT INTO + ".$cfg["tab"]["art_lang"]." ( + idartlang, + idart, + idlang, + title, + urlname, + pagetitle, + summary, + artspec, + created, + lastmodified, + author, + published, + publishedby, + online, + redirect, + redirect_url, + external_redirect, + artsort, + timemgmt, + datestart, + dateend, + status, + time_move_cat, + time_target_cat, + time_online_move + ) VALUES ( + '".Contenido_Security::toInteger($nextidartlang)."', + '".Contenido_Security::toInteger($new_idart)."', + '".Contenido_Security::toInteger($tmp_lang)."', + '".Contenido_Security::escapeDB($title, $db)."', + '".Contenido_Security::escapeDB($urlname, $db)."', + '".Contenido_Security::escapeDB($page_title, $db)."', + '".Contenido_Security::escapeDB($summary, $db)."', + '".Contenido_Security::escapeDB($artspec, $db)."', + '".Contenido_Security::escapeDB($created, $db)."', + '".Contenido_Security::escapeDB($lastmodified, $db)."', + '".Contenido_Security::escapeDB($auth->auth["uname"], $db)."', + '".Contenido_Security::escapeDB($published_value, $db)."', + '".Contenido_Security::escapeDB($publishedby_value, $db)."', + '".Contenido_Security::escapeDB($online, $db)."', + '".Contenido_Security::escapeDB($redirect, $db)."', + '".Contenido_Security::escapeDB($redirect_url, $db)."', + '".Contenido_Security::escapeDB($external_redirect, $db)."', + '".Contenido_Security::escapeDB($artsort, $db)."', + '".Contenido_Security::escapeDB($usetimemgmt, $db)."', + '".Contenido_Security::escapeDB($datestart, $db)."', + '".Contenido_Security::escapeDB($dateend, $db)."', + '0', + '".Contenido_Security::escapeDB($movetocat, $db)."', + '".Contenido_Security::escapeDB($time_target_cat, $db)."', + '".Contenido_Security::escapeDB($onlineaftermove, $db)."')"; + + $db->query($sql); + + if ($cfg["is_start_compatible"] == false) + { + if ($autostart == true) + { + conMakeStart($idcatart, 1); + } else { + conMakeStart($idcatart, 0); + } + + } + + $availableTags = conGetAvailableMetaTagTypes(); + + foreach ($availableTags as $key => $value) + { + conSetMetaValue($nextidartlang, + $key, + $_POST['META'.$value["name"]]); + } + } + + # Set new idart + $idart = $new_idart; + + # Table 'cat_art' + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart='".Contenido_Security::toInteger($idart)."'"; // get all idcats that contain art + $db->query($sql); + + while ($db->next_record()) { + $tmp_idcat[] = $db->f("idcat"); + } + + if ( !is_array($idcatnew) ) { $idcatnew[0] = 0; } + if ( !is_array($tmp_idcat) ) { $tmp_idcat[0] = 0; } + + foreach ($idcatnew as $value) { + + if ( !in_array($value, $tmp_idcat) ) { + + # INSERT -> Table 'cat_art' + $sql = "INSERT INTO ".$cfg["tab"]["cat_art"]." (idcatart, idcat, idart) VALUES ('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["cat_art"]))."', '".Contenido_Security::toInteger($value)."', + '".Contenido_Security::toInteger($idart)."')"; + $db->query($sql); + + # Entry in 'stat'-table for all languages + $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($value)."' AND idart='".Contenido_Security::toInteger($idart)."'"; + $db->query($sql); + + $db->next_record(); + $tmp_idcatart = $db->f("idcatart"); + + $a_languages = getLanguagesByClient($client); + + foreach ($a_languages as $tmp_lang) { + + $sql = "INSERT INTO ".$cfg["tab"]["stat"]." (idstat, idcatart, idlang, idclient, visited) VALUES ('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["stat"]))."', + '".Contenido_Security::toInteger($tmp_idcatart)."', '".Contenido_Security::toInteger($tmp_lang)."', '".Contenido_Security::toInteger($client)."', '0')"; + $db->query($sql); + } + } + } + + + foreach ($tmp_idcat as $value) { + + if ( !in_array($value, $idcatnew) ) { + + $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($value)."' AND idart='".Contenido_Security::toInteger($idart)."'"; // get all idcatarts that will no longer exist + $db->query($sql); + + //******** delete from 'code'-table *************** // and delete corresponding code + $sql = "DELETE FROM ".$cfg["tab"]["code"]." WHERE idcatart='".Contenido_Security::toInteger($db->f("idcatart"))."'"; + $db->query($sql); + + //******* delete from 'stat'-table **************** + $sql = "SELECT * FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($value)."' AND idart='".Contenido_Security::toInteger($idart)."' "; + $db->query($sql); + + while ($db->next_record()) { + $a_idcatart[] = $db->f("idcatart"); + } + + if (is_array($a_idcatart)) { + + foreach ($a_idcatart AS $value2) { + //****** delete from 'stat'-table ************ + $sql = "DELETE FROM ".$cfg["tab"]["stat"]." WHERE idcatart='".Contenido_Security::toInteger($value2)."'"; + $db->query($sql); + } + } + + //******** delete from 'cat_art'-table *************** + $sql = "DELETE FROM ".$cfg["tab"]["cat_art"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idcat='".Contenido_Security::toInteger($value)."'"; + $db->query($sql); + + /* Remove startidartlang */ + if (isStartArticle($idartlang, $idcat, $lang)) + { + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET startidartlang='0' WHERE idcat='".Contenido_Security::toInteger($value)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + } + + //******** delete from 'tpl_conf'-table *************** + $sql = "SELECT idtplcfg FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + $db->next_record(); + $tmp_idtplcfg = $db->f('idtplcfg'); + + $sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($tmp_idtplcfgm)."'"; + $db->query($sql); + + } + } + + + //********* update into 'art_lang'-table for all languages ****** + if ( !$title ) $title = "--- " . i18n("Default title"). " ---"; + + $a_languages = getLanguagesByClient($client); + + foreach ($a_languages as $tmp_lang) { + $tmp_online = ( $lang == $tmp_lang ) ? $online : 0; + $tmp_lastmodified = ( $lang == $tmp_lang ) ? $lastmodified : 0; + + $sql = "UPDATE + ".$cfg["tab"]["art_lang"]." + SET + title = '".Contenido_Security::escapeDB($title, $db)."', + urlname = '".Contenido_Security::escapeDB($urlname, $db)."', + pagetitle = '".Contenido_Security::escapeDB($page_title, $db)."', + summary = '".Contenido_Security::escapeDB($summary, $db)."', + artspec = '".Contenido_Security::escapeDB($artspec, $db)."', + created = '".Contenido_Security::escapeDB($created, $db)."', + lastmodified = '".Contenido_Security::escapeDB($tmp_lastmodified, $db)."', + modifiedby = '".Contenido_Security::escapeDB($author, $db)."', + online = '".Contenido_Security::toInteger($tmp_online)."', + datestart = '".Contenido_Security::escapeDB($datestart, $db)."', + dateend = '".Contenido_Security::escapeDB($dateend, $db)."', + redirect = '".Contenido_Security::escapeDB($redirect, $db)."', + external_redirect = '".Contenido_Security::escapeDB($external_redirect, $db)."', + redirect_url = '".Contenido_Security::escapeDB($redirect_url, $db)."', + artsort = '".Contenido_Security::escapeDB($artsort, $db)."' + WHERE + idart = '".Contenido_Security::toInteger($new_idart)."' AND + idlang = '".Contenido_Security::toInteger($tmp_lang)."'"; + + $db->query($sql); + } + + return $new_idart; +} + + + + +/** + * Edit an existing article + * + * @param mixed many + * @return void + * + * @author Olaf Niemann + * @copyright four for business AG + */ +function conEditArt($idcat, $idcatnew, $idart, $is_start, $idtpl, $idartlang, + $idlang, $title, $summary, $artspec, $created, $lastmodified, $author, + $online, $datestart, $dateend, $artsort, $keyart = 0) +{ + $args = func_get_args(); + + global $db, $client, $lang, $cfg, $redirect, $redirect_url, $external_redirect, $perm; + global $urlname; + global $time_move_cat, $time_target_cat; + global $time_online_move; // Used to indicate if the moved article should be online + global $timemgmt; + global $page_title; + global $_POST; + + /* Add slashes because single quotes + will crash the db */ + $page_title = addslashes($page_title); + + $urlname = (trim($urlname) == '') ? trim($title) : trim($urlname); + $urlname = clHtmlSpecialChars(capiStrCleanURLCharacters($urlname), ENT_QUOTES); + $usetimemgmt = ($timemgmt == '1') ? '1': '0'; + $onlineaftermove = ($time_online_move == '1') ? '1' : '0'; + $movetocat = ($time_move_cat == '1') ? '1' : '0'; + $redirect = ('1' == $redirect ) ? 1 : 0; + $redirect_url = ($redirect_url == 'http://' || $redirect_url == '') ? '0' : $redirect_url; + $external_redirect = ($external_redirect == '1') ? 1 : 0; + + if ($is_start == 1) + { + $usetimemgmt = "0"; + } + + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart='".Contenido_Security::toInteger($idart)."'"; // get all idcats that contain art + $db->query($sql); + + while ($db->next_record()) { + $tmp_idcat[] = $db->f("idcat"); + } + + if ( !is_array($idcatnew) ) { + $idcatnew[0] = 0; + } + + if ( !is_array($tmp_idcat) ) { + $tmp_idcat[0] = 0; + } + + // if (is_array($idcatnew)) { + foreach ($idcatnew as $value) { + + if (!in_array($value, $tmp_idcat) ) { + + # INSERT insert 'cat_art' table + $sql = "INSERT INTO ".$cfg["tab"]["cat_art"]." (idcatart, idcat, idart) VALUES ('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["cat_art"]))."', '".Contenido_Security::toInteger($value)."', + '".Contenido_Security::toInteger($idart)."')"; + $db->query($sql); + + # entry in 'stat'-table for all languages + $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($value)."' AND idart='".Contenido_Security::toInteger($idart)."'"; + $db->query($sql); + $db->next_record(); + + $tmp_idcatart = $db->f("idcatart"); + + $a_languages = getLanguagesByClient($client); + + foreach ($a_languages as $tmp_lang) { + $sql = "INSERT INTO ".$cfg["tab"]["stat"]." (idstat, idcatart, idlang, idclient, visited) VALUES ('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["stat"]))."', + '".Contenido_Security::toInteger($tmp_idcatart)."', '".Contenido_Security::toInteger($tmp_lang)."', '".Contenido_Security::toInteger($client)."', '0')"; + $db->query($sql); + } + } + } + + + foreach ($tmp_idcat as $value) { + + if (!in_array($value, $idcatnew)) { + + $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($value)."' AND idart='".Contenido_Security::toInteger($idart)."'"; // get all idcatarts that will no longer exist + $db->query($sql); + + //******** delete from 'code'-table *************** // and delete corresponding code + $sql = "DELETE FROM ".$cfg["tab"]["code"]." WHERE idcatart='".Contenido_Security::toInteger($db->f("idcatart"))."'"; + $db->query($sql); + + //******* delete from 'stat'-table **************** + $sql = "SELECT * FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($value)."' AND idart='".Contenido_Security::toInteger($idart)."'"; + $db->query($sql); + + while ($db->next_record()) { + $a_idcatart[] = $db->f("idcatart"); + } + + if (is_array($a_idcatart)) { + foreach ($a_idcatart as $value2) { + //****** delete from 'stat'-table ************ + $sql = "DELETE FROM ".$cfg["tab"]["stat"]." WHERE idcatart='".Contenido_Security::toInteger($value2)."'"; + $db->query($sql); + } + } + + //******** delete from 'cat_art'-table *************** + $sql = "DELETE FROM ".$cfg["tab"]["cat_art"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idcat='".Contenido_Security::toInteger($value)."'"; + $db->query($sql); + + /* Remove startidartlang */ + if (isStartArticle($idartlang, $idcat, $lang)) + { + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET startidartlang='0' WHERE idcat='".Contenido_Security::toInteger($value)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + } + + } + + } + + // If the user has no right for makeonline, don't update it. + if (!$perm->have_perm_area_action("con","con_makeonline") && + !$perm->have_perm_area_action_item("con","con_makeonline", $idcat)) + { + $sqlonline = ""; + } else { + $sqlonline = "online = '".Contenido_Security::escapeDB($online, $db)."',"; + if($online=='1'){ + //Check if online id is currently 0 + $sql = "SELECT online FROM ".$cfg["tab"]["art_lang"]." WHERE idartlang='".Contenido_Security::toInteger($idartlang)."'"; + $db->query($sql); + if($db->next_record()){ + if($db->f("online")==0){ + //Only update if value changed from 0 to 1 + $sqlonline.="published = '".date("Y-m-d H:i:s")."', publishedby='".Contenido_Security::escapeDB($author, $db)."',"; + } + } + } + } + + if ($title == "") + { + $title = "--- ".i18n("Default title")." ---"; + } + + //******** update 'art_lang'-table ********** + $sql = "UPDATE + ".$cfg["tab"]["art_lang"]." + SET + title = '".Contenido_Security::escapeDB($title, $db)."', + urlname = '".Contenido_Security::escapeDB($urlname, $db)."', + pagetitle = '".Contenido_Security::escapeDB($page_title, $db)."', + summary = '".Contenido_Security::escapeDB($summary, $db)."', + artspec = '".Contenido_Security::escapeDB($artspec, $db)."', + created = '".Contenido_Security::escapeDB($created, $db)."', + lastmodified = '".Contenido_Security::escapeDB($lastmodified, $db)."', + modifiedby = '".Contenido_Security::escapeDB($author, $db)."', + $sqlonline + timemgmt = '".Contenido_Security::escapeDB($usetimemgmt, $db)."', + redirect = '".Contenido_Security::escapeDB($redirect, $db)."', + external_redirect = '".Contenido_Security::escapeDB($external_redirect, $db)."', + redirect_url = '".Contenido_Security::escapeDB($redirect_url, $db)."', + artsort = '".Contenido_Security::toInteger($artsort)."'"; + + if ($perm->have_perm_area_action("con", "con_makeonline") || + $perm->have_perm_area_action_item("con","con_makeonline", $idcat)) + { + $sql .= ", datestart = '".Contenido_Security::escapeDB($datestart, $db)."', + dateend = '".Contenido_Security::escapeDB($dateend, $db)."', + time_move_cat = '".Contenido_Security::toInteger($movetocat)."', + time_target_cat = '".Contenido_Security::toInteger($time_target_cat)."', + time_online_move = '".Contenido_Security::toInteger($onlineaftermove)."'"; + } + + + $sql .= "WHERE idartlang='".Contenido_Security::toInteger($idartlang)."'"; + $db->query($sql); + + $availableTags = conGetAvailableMetaTagTypes(); + + foreach ($availableTags as $key => $value) + { + conSetMetaValue($idartlang, + $key, + $_POST['META'.$value["name"]]); + } + +} + +/** + * Save a content element and generate index + * + * @param integer $idartlang idartlang of the article + * @param string $type Type of content element + * @param integer $typeid Serial number of the content element + * @param string $value Content + * + * @return void + * + * @author Olaf Niemann + * Jan Lengowski + * + * @copyright four for business AG + * + */ +function conSaveContentEntry($idartlang, $type, $typeid, $value, $bForce = false) +{ + global $auth, $cfg, $cfgClient, $client, $lang, $_cecRegistry; + + if ($bForce == true) { + $db = new DB_ConLite; + } else { + global $db; + } + + $date = date("Y-m-d H:i:s"); + $author = $auth->auth["uname"]; + + $cut_path = $cfgClient[$client]["path"]["htmlpath"]; + + $value = str_replace($cut_path, "", $value); + $value = stripslashes($value); + + $iterator = $_cecRegistry->getIterator("Contenido.Content.SaveContentEntry"); + + while ($chainEntry = $iterator->next()) + { + $value = $chainEntry->execute($idartlang, $type, $typeid, $value); + } + $value = urlencode($value); + + $sql = "SELECT * FROM ".$cfg["tab"]["type"]." WHERE type = '".Contenido_Security::escapeDB($type, $db)."'"; + $db->query($sql); + $db->next_record(); + $idtype=$db->f("idtype"); + + $sql = "SELECT * FROM ".$cfg["tab"]["content"]." WHERE idartlang='".Contenido_Security::toInteger($idartlang)."' AND idtype='".Contenido_Security::toInteger($idtype)."' AND typeid='".Contenido_Security::toInteger($typeid)."'"; + $db->query($sql); + + if ($db->next_record()) { + $sql = "UPDATE ".$cfg["tab"]["content"]." SET value='".Contenido_Security::escapeDB($value, $db)."', author='".Contenido_Security::escapeDB($author, $db)."', lastmodified='".Contenido_Security::escapeDB($date, $db)."' + WHERE idartlang='".Contenido_Security::toInteger($idartlang)."' AND idtype='".Contenido_Security::toInteger($idtype)."' AND typeid='".Contenido_Security::toInteger($typeid)."'"; + $db->query($sql); + } else { + + $sql = "INSERT INTO ".$cfg["tab"]["content"]." (idcontent, idartlang, idtype, typeid, value, author, created, lastmodified) VALUES('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["content"]))."', + '".Contenido_Security::toInteger($idartlang)."', '".Contenido_Security::toInteger($idtype)."', '".Contenido_Security::toInteger($typeid)."', '".Contenido_Security::escapeDB($value, $db)."', + '".Contenido_Security::escapeDB($author, $db)."', '".Contenido_Security::escapeDB($date, $db)."', '".Contenido_Security::escapeDB($date, $db)."')"; + $db->query($sql); + } + + /* Touch the article to update last modified date */ + $lastmodified = date("Y-m-d H:i:s"); + + $sql = "UPDATE + ".$cfg["tab"]["art_lang"]." + SET + lastmodified = '".Contenido_Security::escapeDB($lastmodified, $db)."', + modifiedby = '".Contenido_Security::escapeDB($author, $db)."' + WHERE + idartlang='".Contenido_Security::toInteger($idartlang)."'"; + $db->query($sql); +} + +/** + * generate index of article content + * + * added by stese + * removed from function conSaveContentEntry before + * Touch the article to update last modified date + * + * @see conSaveContentEntry + * @param integer $idart + */ +function conMakeArticleIndex ( $idartlang, $idart ) { + global $db, $auth, $cfg; + + # generate index of article content + $oIndex = new Index($db); + $aOptions = array("img", "link", "linktarget", "swf"); // cms types to be excluded from indexing + # indexing an article depends on the complete content with all content types, i.e it can not by differentiated by specific content types. + # Therefore one must fetch the complete content arrray. + + $aContent = conGetContentFromArticle($idartlang); + $oIndex->start($idart, $aContent, 'auto', $aOptions); +} + +/** + * Toggle the online status + * of an article + * + * @param int $idart Article Id + * @param ing $lang Language Id + * + * @author Olaf Niemann + * Jan Lengowski + * + * @copyright four for business AG + */ +function conMakeOnline($idart, $lang) +{ + global $db, $cfg, $auth; + + $sql = "SELECT online FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + + $db->next_record(); + + $set = ( $db->f("online") == 0 ) ? 1 : 0; + + if($set==1){ + $publisher_info ="published = '".date("Y-m-d H:i:s")."', publishedby='".$auth->auth["uname"]."',"; + }else{ + $publisher_info = ''; + } + $sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET ".$publisher_info." online = '".Contenido_Security::toInteger($set)."' WHERE idart = '".Contenido_Security::toInteger($idart)."' + AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); +} + +/** + * Toggle the lock status + * of an article + * + * @param int $idart Article Id + * @param ing $lang Language Id + * + */ +function conLock($idart, $lang) +{ + global $db, $cfg; + + $sql = "SELECT locked FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + + $db->next_record(); + + $set = ( $db->f("locked") == 0 ) ? 1 : 0; + + $sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET locked = '".Contenido_Security::toInteger($set)."' WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); +} + +/** + * Toggle the online status of + * a category + * + * @param int $idcat id of the category + * @param int $lang id of the language + * @param int $status status of the category + * + * @author Jan Lengowski + * @copyright four for business AG + */ +function conMakeCatOnline($idcat, $lang, $status) +{ + global $cfg, $db; + + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET visible = '".Contenido_Security::toInteger($status)."', + lastmodified = '".Contenido_Security::escapeDB(date("Y-m-d H:i:s"), $db)."' + WHERE idcat = '".Contenido_Security::toInteger($idcat)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + + if ($cfg["pathresolve_heapcache"] == true && !$status = 0) + { + $pathresolve_tablename = $cfg["sql"]["sqlprefix"]."_pathresolve_cache"; + $sql = "DELETE FROM %s WHERE idlang = '%s' AND idcat = '%s'"; + $db->query(sprintf(Contenido_Security::escapeDB($sql, $db), $pathresolve_tablename, $lang, $idcat)); + } +} + +/** + * Toggle the public status of a category + * + * Almost the same function as strMakePublic in + * functions.str.php (conDeeperCategoriesArray instead of + * strDeeperCategoriesArray) + * + * @param int $idcat Article Id + * @param int $idcat Language Id + * @param bool $is_start Start status of the Article + * + * @author Olaf Niemann + * Jan Lengowski + * + * @copyright four for business AG + */ +function conMakePublic($idcat, $lang, $public) +{ + global $db, $cfg; + $public = (int) $public; + if ($public != 1) { + $public = 0; + } + + $a_catstring = conDeeperCategoriesArray($idcat); + foreach ($a_catstring as $value) { + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]. + " SET public='".Contenido_Security::toInteger($public)."', lastmodified = '".Contenido_Security::escapeDB(date("Y-m-d H:i:s"), $db). + "' WHERE idcat='".Contenido_Security::toInteger($value)."' AND idlang='".Contenido_Security::toInteger($lang)."' "; + $db->query($sql); + } +} + +/** + * Delete an Article + * + * @param int $idart Article Id + * + * @author Olaf Niemann + * Jan Lengowski + * + * @copyright four for business AG + */ +function conDeleteart($idart) +{ + global $db, $cfg, $lang, $_cecRegistry; + + /* Delete current language */ + $sql = "SELECT idartlang, idtplcfg FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + $db->next_record(); + + $idartlang = $db->f("idartlang"); + $idtplcfg = $db->f("idtplcfg"); + + /* Fetch idcat */ + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'"; + $db->query($sql); + $db->next_record(); + + $idcat = $db->f("idcat"); + + /* Remove startidartlang */ + if (isStartArticle($idartlang, $idcat, $lang)) + { + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET startidartlang='0' WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + } + + $sql = "DELETE FROM ".$cfg["tab"]["content"]." WHERE idartlang = '".Contenido_Security::toInteger($idartlang)."'"; + $db->query($sql); + + $sql = "DELETE FROM ".$cfg["tab"]["art_lang"]." WHERE idartlang = '".Contenido_Security::toInteger($idartlang)."'"; + $db->query($sql); + + if ($idtplcfg != "0") { + + $sql = "DELETE FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($idtplcfg)."'"; + $db->query($sql); + + $sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($idtplcfg)."'"; + $db->query($sql); + + } + + /* Check if there are remaining languages */ + $sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'"; + $db->query($sql); + + if ($db->num_rows() > 0) + { + return; + } + + $sql = "SELECT * FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'"; + $db->query($sql); + + while ( $db->next_record() ) { + $idcatart[] = $db->f("idcatart"); + } + + if ( is_array($idcatart) ) { + + foreach ($idcatart AS $value) { + + //********* delete from code table ********** + $sql = "DELETE FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($value)."'"; + $db->query($sql); + + //****** delete from 'stat'-table ************ + $sql = "DELETE FROM ".$cfg["tab"]["stat"]." WHERE idcatart = '".Contenido_Security::toInteger($value)."'"; + $db->query($sql); + + } + } + + $sql = "SELECT * FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'"; + + $db->query($sql); + + while ( $db->next_record() ) { + $idartlang[] = $db->f("idartlang"); + } + + if ( is_array($idartlang) ) { + + foreach ($idartlang AS $value) { + + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET startidartlang='0' WHERE startidartlang ='".Contenido_Security::toInteger($value)."'"; + $db->query($sql); + + //********* delete from content table ********** + $sql = "DELETE FROM ".$cfg["tab"]["content"]." WHERE idartlang = '".Contenido_Security::toInteger($value)."'"; + $db->query($sql); + } + } + + $sql = "DELETE FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'"; + $db->query($sql); + + $sql = "DELETE FROM ".$cfg["tab"]["art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'"; + $db->query($sql); + + $sql = "DELETE FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'"; + $db->query($sql); + + # Contenido Extension Chain + # @see docs/techref/plugins/Contenido Extension Chainer.pdf + # + # Usage: + # One could define the file contenido/includes/config.local.php + # with following code. + # + # global $_cecRegistry; + # cInclude("plugins", "extension/extension.php"); + # $_cecRegistry->addChainFunction("Contenido.Content.DeleteArticle", "AdditionalFunction1"); + # + # If function "AdditionalFunction1" is defined in file extension.php, it would be called via + # $chainEntry->execute($idart); + + $iterator = $_cecRegistry->getIterator("Contenido.Content.DeleteArticle"); + + while ($chainEntry = $iterator->next()) + { + $chainEntry->execute($idart); + } +} + +/** + * Extract a number from a string + * + * @param string $string String var by reference + * + * @author Olaf Niemann + * Jan Lengowski + * + * @copyright four for business AG + */ +function extractNumber(&$string) +{ + $string = preg_replace("/[^0-9]/","",$string); +} + + + +/** + * Change the template of a category + * + * @param int $idcat Category Id + * @param int $idtpl Template Id + * + * @return void + * @author Jan Lengowski + * @copyright four for business AG + */ +function conChangeTemplateForCat($idcat, $idtpl) +{ + /* Global vars */ + global $db, $db2, $cfg, $lang; + + /* DELETE old entries */ + $sql = "SELECT idtplcfg FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat = '".Contenido_Security::toInteger($idcat)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + $db->next_record(); + $old_idtplcfg = $db->f("idtplcfg"); + + $sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($old_idtplcfg)."'"; + $db->query($sql); + + $sql = "DELETE FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($old_idtplcfg)."'"; + $db->query($sql); + + /* parameter $idtpl is 0, + reset the template */ + if ( 0 == $idtpl ) { + + /* get $idtplcfg */ + $sql = "SELECT idtplcfg FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat = '".Contenido_Security::toInteger($idcat)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + + $db->query($sql); + $db->next_record(); + + $idtplcfg = $db->f("idtplcfg"); + + /* DELETE 'template_conf' entry */ + $sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($idtplcfg)."'"; + $db->query($sql); + + /* DELETE 'container_conf entries' */ + $sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($idtplcfg)."'"; + $db->query($sql); + + /* UPDATE 'cat_lang' table */ + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET idtplcfg = '0' WHERE idcat = '".Contenido_Security::toInteger($idcat)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + + } else { + + if ( !is_object($db2) ) $db2 = new DB_ConLite; + + /* check if a pre-configuration + is assigned */ + $sql = "SELECT idtplcfg FROM ".$cfg["tab"]["tpl"]." WHERE idtpl = '".Contenido_Security::toInteger($idtpl)."'"; + + $db->query($sql); + $db->next_record(); + + if ( 0 != $db->f("idtplcfg") ) { + + /* template is pre-configured, + create new configuration and + copy data from pre-cfg */ + + /* get new id */ + $new_idtplcfg = $db2->nextid($cfg["tab"]["tpl_conf"]); + + /* create new configuration */ + $sql = "INSERT INTO ".$cfg["tab"]["tpl_conf"]." (idtplcfg, idtpl) VALUES ('".Contenido_Security::toInteger($new_idtplcfg)."', '".Contenido_Security::toInteger($idtpl)."')"; + $db->query($sql); + + /* extract pre-configuration data */ + $sql = "SELECT * FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($db->f("idtplcfg"))."'"; + $db->query($sql); + + while ( $db->next_record() ) { + + /* get data */ + $nextid = $db2->nextid($cfg["tab"]["container_conf"]); + $number = $db->f("number"); + $container = $db->f("container"); + + /* write new entry */ + $sql = "INSERT INTO + ".$cfg["tab"]["container_conf"]." + (idcontainerc, idtplcfg, number, container) + VALUES + ('".Contenido_Security::toInteger($nextid)."', '".Contenido_Security::toInteger($new_idtplcfg)."', '".Contenido_Security::toInteger($number)."', '".Contenido_Security::escapeDB($container, $db2)."')"; + + $db2->query($sql); + + } + + /* extract old idtplcfg */ + $sql = "SELECT idtplcfg FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat = '".Contenido_Security::toInteger($idcat)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + $db->next_record(); + $tmp_idtplcfg = $db->f("idtplcfg"); + + if ( $tmp_idtplcfg != 0 ) { + + /* DELETE 'template_conf' entry */ + $sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($tmp_idtplcfg)."'"; + $db->query($sql); + + /* DELETE 'container_conf entries' */ + $sql = "DELETE FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($tmp_idtplcfg)."'"; + $db->query($sql); + + } + + /* update 'cat_lang' table */ + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET idtplcfg = '".Contenido_Security::toInteger($new_idtplcfg)."' WHERE idcat = '".Contenido_Security::toInteger($idcat)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + + } else { + + /* template is not pre-configured, + create a new configuration. */ + $new_idtplcfg = $db->nextid($cfg["tab"]["tpl_conf"]); + + $sql = "INSERT INTO ".$cfg["tab"]["tpl_conf"]." + (idtplcfg, idtpl) VALUES + ('".Contenido_Security::toInteger($new_idtplcfg)."', '".Contenido_Security::toInteger($idtpl)."')"; + + $db->query($sql); + + /* update 'cat_lang' table */ + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET idtplcfg = '".Contenido_Security::toInteger($new_idtplcfg)."' WHERE idcat = '".Contenido_Security::toInteger($idcat)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + + } + + } + conGenerateCodeForAllartsInCategory($idcat); +} // end function + + +function conFetchCategoryTree ($client = false, $lang = false) +{ + global $db, $cfg; + + if ($client === false) + { + $client = $GLOBALS["client"]; + } + + if ($lang === false) + { + $lang = $GLOBALS["lang"]; + } + + $sql = "SELECT + * + FROM + ".$cfg["tab"]["cat_tree"]." AS A, + ".$cfg["tab"]["cat"]." AS B, + ".$cfg["tab"]["cat_lang"]." AS C + WHERE + A.idcat = B.idcat AND + B.idcat = C.idcat AND + C.idlang = '".Contenido_Security::toInteger($lang)."' AND + idclient = '".Contenido_Security::toInteger($client)."' + ORDER BY + idtree"; + + $catarray = array(); + + $db->query($sql); + + while ($db->next_record()) + { + $catarray[$db->f("idtree")] = array( + "idcat" => $db->f("idcat"), + "level" => $db->f("level"), + "idtplcfg" => $db->f("idtplcfg"), + "visible" => $db->f("visible"), + "name" => $db->f("name"), + "public" => $db->f("public"), + "urlname" => $db->f("urlname"), + "is_start" => $db->f("is_start") + ); + } + + return ($catarray); +} + +/** + * + * Fetch all deeper categories by a given id + * + * @param int $idcat Id of category + * @return array Array with all deeper categories + * + * @author Olaf Niemann + * Jan Lengowski + * + * @copyright four for business AG + */ +function conDeeperCategoriesArray($idcat_start) +{ + global $db, $client, $cfg; + + $sql = "SELECT + * + FROM + ".$cfg["tab"]["cat_tree"]." AS A, + ".$cfg["tab"]["cat"]." AS B + WHERE + A.idcat = B.idcat AND + idclient = '".Contenido_Security::toInteger($client)."' + ORDER BY + idtree"; + + $db->query($sql); + + $found = false; + $curLevel = 0; + + while ( $db->next_record() ) { + + if ($found && $db->f("level") <= $curLevel) { // ending part of tree + $found = false; + } + + if ($db->f("idcat") == $idcat_start) { // starting part of tree + $found = true; + $curLevel = $db->f("level"); + } + + if ($found) { + $catstring[] = $db->f("idcat"); + } + } + + return $catstring; +} + +/** + * Recursive function to create an location string + * + * @param int $idcat ID of the starting category + * @param string $seperator Seperation string + * @param string $cat_str Category location string (by reference) + * @param boolean $makeLink create location string with links + * @param string $linkClass stylesheet class for the links + * @param integer first navigation level location string should be printed out (first level = 0!!) + * + * @return string location string + * + * @author Jan Lengowski + * @author Marco Jahn + * + * @copyright four for business AG + */ +function conCreateLocationString($idcat, $seperator, &$cat_str, $makeLink = false, $linkClass = "", $firstTreeElementToUse = 0, $uselang = 0, $final = true, $usecache = false) +{ + global $cfg, $client, $cfgClient, $lang, $sess, $_locationStringCache; + + if ($idcat == 0) + { + $cat_str = "Lost and Found"; + return; + } + + if ($uselang == 0) + { + $uselang = $lang; + } + + if ($final == true && $usecache == true) + { + if (!is_array($_locationStringCache)) + { + if (file_exists($cfgClient[$client]["path"]["frontend"]."cache/locationstring-cache-$uselang.txt")) + { + $_locationStringCache = unserialize(file_get_contents($cfgClient[$client]["path"]["frontend"]."cache/locationstring-cache-$uselang.txt")); + } else { + $_locationStringCache = array(); + } + } + + if (array_key_exists($idcat, $_locationStringCache)) + { + if ($_locationStringCache[$idcat]["expires"] > time()) + { + $cat_str = $_locationStringCache[$idcat]["name"]; + return; + } + } + } + + $db = new DB_ConLite; + + $sql = "SELECT + a.name AS name, + a.idcat AS idcat, + b.parentid AS parentid, + c.level as level + FROM + ".$cfg["tab"]["cat_lang"]." AS a, + ".$cfg["tab"]["cat"]." AS b, + ".$cfg["tab"]["cat_tree"]." AS c + WHERE + a.idlang = '".Contenido_Security::toInteger($uselang)."' AND + b.idclient = '".Contenido_Security::toInteger($client)."' AND + b.idcat = '".Contenido_Security::toInteger($idcat)."' AND + a.idcat = b.idcat AND + c.idcat = b.idcat"; + + $db->query($sql); + $db->next_record(); + + if ($db->f("level") >= $firstTreeElementToUse) + { + + $name = $db->f("name"); + $parentid = $db->f("parentid"); + + //create link + if ($makeLink == true) + { + $linkUrl = $sess->url("front_content.php?idcat=$idcat"); + $name = ''.$name.''; + } + + $tmp_cat_str = $name . $seperator . $cat_str; + $cat_str = $tmp_cat_str; + + } + + if ( $parentid != 0 ) { + conCreateLocationString($parentid, $seperator, $cat_str, $makeLink, $linkClass, $firstTreeElementToUse ,$uselang, false); + + } else { + $sep_length = strlen($seperator); + $str_length = strlen($cat_str); + $tmp_length = $str_length - $sep_length; + $cat_str = substr($cat_str, 0, $tmp_length); + } + + if ($final == true && $usecache == true) + { + $_locationStringCache[$idcat]["name"] = $cat_str; + $_locationStringCache[$idcat]["expires"] = time() + 3600; + + if (is_writable($cfgClient[$client]["path"]["frontend"]."cache/")) + { + file_put_contents($cfgClient[$client]["path"]["frontend"]."cache/locationstring-cache-$uselang.txt", serialize($_locationStringCache)); + } + } +} + +/** + * Set a start-article + * + * @param int $idcatart Idcatart of the article + * + * @return void + * + * @author Olaf Niemann + * Jan Lengowski + * + * @copyright four for business AG + */ +function conMakeStart($idcatart, $is_start) +{ + global $db, $cfg, $lang; + + if ($cfg["is_start_compatible"] == true) + { + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."'"; + + $db->query($sql); + $db->next_record(); + + $tmp_idcat = $db->f("idcat"); + + + $sql = "SELECT tblCatArt.idcatart ". + "FROM ".$cfg["tab"]["cat_art"]." tblCatArt, ". $cfg["tab"]["art_lang"]." tblArtLang ". + "WHERE tblCatArt.idart = tblArtLang.idart AND tblCatArt.is_start = '1' AND ". + "tblArtLang.idlang = '".Contenido_Security::toInteger($lang)."' AND tblCatArt.idcat = '".Contenido_Security::toInteger($tmp_idcat)."'"; + $db->query($sql); + + $aIDs = array(); + while ($db->next_record()) + { + $aIDs[] = Contenido_Security::toInteger($db->f("idcatart")); + } + + if (count($aIDs) > 0) + { + $sql = "UPDATE ".$cfg["tab"]["cat_art"]." SET is_start = 0 WHERE idcatart IN ('" . implode("','", $aIDs) . "')"; + $db->query($sql); + } + + $sql = "UPDATE ".$cfg["tab"]["cat_art"]." SET is_start='".Contenido_Security::toInteger($is_start)."' WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."'"; + $db->query($sql); + } else { + $sql = "SELECT idcat, idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart='".Contenido_Security::toInteger($idcatart)."'"; + $db->query($sql); + $db->next_record(); + + $idart = $db->f("idart"); + $idcat = $db->f("idcat"); + + $sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + $db->next_record(); + + $idartlang = $db->f("idartlang"); + + if ($is_start == 1) + { + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET startidartlang='".Contenido_Security::toInteger($idartlang)."' WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + } else { + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET startidartlang='0' WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."' AND startidartlang='".Contenido_Security::toInteger($idartlang)."'"; + $db->query($sql); + } + } + + if ( $is_start == 1 ) + { + // Deactivate time management if article is a start article + $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."'"; + + $db->query($sql); + $db->next_record(); + + $idart = $db->f("idart"); + + $sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET timemgmt = 0 WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + } +} + +/** + * Create code for one article in all categorys + * + * @param int $idart Article ID + * + * @author Jan Lengowski + * @copyright four for business AG 2003 + */ +function conGenerateCodeForArtInAllCategories($idart) +{ + global $lang, $client, $cfg; + $db = new DB_ConLite; + + $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'"; + + $db->query($sql); + + while ($db->next_record()) + { + conSetCodeFlag($db->f("idcatart")); + } +} + + +/** + * Generate code for all articles in a category + * + * @param int $idcat Category ID + * + * @author Jan Lengowski + * @copyright four for business AG 2003 + */ +function conGenerateCodeForAllArtsInCategory($idcat) +{ + global $cfg; + $db = new DB_ConLite; + + $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'"; + $db->query($sql); + + while ($db->next_record()) + { + conSetCodeFlag($db->f("idcatart")); + } +} + +/** + * Generate code for the active client + * + * @author Jan Lengowski + * @copyright four for business AG 2003 + */ +function conGenerateCodeForClient() { + + global $client, $cfg; + $db = new DB_ConLite; + + $sql = "SELECT A.idcatart + FROM ".$cfg["tab"]["cat_art"]." as A, ".$cfg["tab"]["cat"]." as B + WHERE B.idclient=''".Contenido_Security::toInteger($client)."' AND B.idcat=A.idcat"; + $db->query($sql); + + while ($db->next_record()) + { + conSetCodeFlag($db->f("idcatart")); + } +} + +/** + * Create code for all arts using the + * same layout + * + * @param int $idlay Layout-ID + * + * @author Jan Lengowski + * @copyright four for business AG 2003 + */ +function conGenerateCodeForAllartsUsingLayout($idlay) +{ + global $cfg; + $db = new DB_ConLite; + + $sql = "SELECT idtpl FROM ".$cfg["tab"]["tpl"]." WHERE idlay='".Contenido_Security::toInteger($idlay)."'"; + $db->query($sql); + while ($db->next_record()) + { + conGenerateCodeForAllartsUsingTemplate($db->f("idtpl")); + } +} + +/** + * Create code for all articles using + * the same module + * + * @param int $idmod Module id + * + * @author Jan Lengowski + * @copyright four for business AG 2003 + */ +function conGenerateCodeForAllartsUsingMod($idmod) +{ + global $cfg; + $db = new DB_ConLite; + + $sql = "SELECT idtpl FROM ".$cfg["tab"]["container"]." WHERE idmod = '".Contenido_Security::toInteger($idmod)."'"; + $db->query($sql); + + while($db->next_record()) + { + conGenerateCodeForAllArtsUsingTemplate($db->f("idtpl")); + } +} + + +/** + * Generate code for all articles + * using one template + * + * @param int $idtpl Template-Id + * + * @author Jan Lengowski + * @copyright four for business AG 2003 + */ +function conGenerateCodeForAllArtsUsingTemplate($idtpl) +{ + global $cfg, $lang, $client; + + $db = new DB_ConLite; + $db2 = new DB_ConLite; + + /* Search all categories */ + $sql = "SELECT + b.idcat + FROM + ".$cfg["tab"]["tpl_conf"]." AS a, + ".$cfg["tab"]["cat_lang"]." AS b, + ".$cfg["tab"]["cat"]." AS c + WHERE + a.idtpl = '".Contenido_Security::toInteger($idtpl)."' AND + b.idtplcfg = a.idtplcfg AND + c.idclient = '".Contenido_Security::toInteger($client)."' AND + b.idcat = c.idcat"; + + $db->query($sql); + + while ($db->next_record()) + { + $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($db->f("idcat"))."'"; + $db2->query($sql); + + while ($db2->next_record()) + { + conSetCodeFlag($db2->f("idcatart")); + } + } + + /* Search all articles */ + $sql = "SELECT + b.idart + FROM + ".$cfg["tab"]["tpl_conf"]." AS a, + ".$cfg["tab"]["art_lang"]." AS b, + ".$cfg["tab"]["art"]." AS c + WHERE + a.idtpl = '".Contenido_Security::toInteger($idtpl)."' AND + b.idtplcfg = a.idtplcfg AND + c.idclient = '".Contenido_Security::toInteger($client)."' AND + b.idart = c.idart"; + + $db->query($sql); + + while ($db->next_record()) + { + $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idart='".Contenido_Security::toInteger($db->f("idart"))."'"; + $db2->query($sql); + + while ($db2->next_record()) + { + conSetCodeFlag($db2->f("idcatart")); + } + } +} + + +/** + * Create code for all articles + * + * @author Jan Lengowski + * @copyright four for business AG 2003 + */ +function conGenerateCodeForAllArts() +{ + global $cfg; + $db = new DB_ConLite; + + $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]; + $db->query($sql); + + while ($db->next_record()) + { + conSetCodeFlag($db->f("idcatart")); + } +} + +/** + * Set code creation flag to true + * + * @param int $idcatart Contenido Category-Article-ID + * + * @author Jan Lengowski + * @copyright four for business AG 2003 + */ +function conSetCodeFlag($idcatart) +{ + global $cfg; + $db = new DB_ConLite; + + $sql = "UPDATE ".$cfg["tab"]["cat_art"]." SET createcode = '1' WHERE idcatart='".Contenido_Security::toInteger($idcatart)."'"; + $db->query($sql); + + /* Setting the createcode flag is not enough due to a bug in the + * database structure. Remove all con_code entries for a specific + * idcatart in the con_code table. + */ + + $sql = "DELETE FROM ".$cfg["tab"]["code"] ." WHERE idcatart='".Contenido_Security::toInteger($idcatart)."'"; + $db->query($sql); +} + + +/** + * Set articles on/offline for the time management function + * + * @param none + * + * @author Timo A. Hummel + * @copyright four for business AG 2003 + */ +function conFlagOnOffline() { + global $cfg; + $db = new DB_ConLite; + $db2 = new DB_ConLite; + + /* Set all articles which are before our starttime to offline */ + $sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() < datestart AND datestart != '0000-00-00 00:00:00' AND datestart IS NOT NULL AND timemgmt = 1"; + + $db->query($sql); + + while ($db->next_record()) { + $sql = "UPDATE ".$cfg["tab"]["art_lang"] ." SET online = 0 WHERE idartlang = '".Contenido_Security::toInteger($db->f("idartlang"))."'"; + $db2->query($sql); + } + + /* Set all articles which are in between of our start/endtime to online */ + $sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > datestart AND (NOW() < dateend OR dateend = '0000-00-00 00:00:00') AND " . + "online = 0 AND timemgmt = 1"; + + $db->query($sql); + + while ($db->next_record()) { + // modified 2007-11-14: Set publish date if article goes online + $sql = "UPDATE " . $cfg["tab"]["art_lang"] . " SET online = 1, published = datestart " . + "WHERE idartlang = " . Contenido_Security::toInteger($db->f("idartlang")); + $db2->query($sql); + } + + /* Set all articles after our endtime to offline */ + $sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > dateend AND dateend != '0000-00-00 00:00:00' AND timemgmt = 1"; + + $db->query($sql); + + while ($db->next_record()) + { + $sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET online = 0 WHERE idartlang = '" . Contenido_Security::toInteger($db->f("idartlang")) . "'"; + $db2->query($sql); + } + +} +/** + * Move articles for the time management function + * @param none + * + * @author Timo A. Hummel + * @copyright four for business AG 2003 + */ +function conMoveArticles() +{ + global $cfg; + $db = new DB_ConLite; + $db2 = new DB_ConLite; + + /* Perform after-end updates */ + $sql = "SELECT idartlang, idart, time_move_cat, time_target_cat, time_online_move FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > dateend AND dateend != '0000-00-00 00:00:00' AND timemgmt = 1"; + + $db->query($sql); + + while ($db->next_record()) + { + if ($db->f("time_move_cat") == "1") + { + $sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET timemgmt = 0, online = 0 WHERE idartlang = '".Contenido_Security::toInteger($db->f("idartlang"))."'"; + $db2->query($sql); + + $sql = "UPDATE ".$cfg["tab"]["cat_art"]." SET idcat = '" . Contenido_Security::toInteger($db->f("time_target_cat")) . "', createcode = '1' WHERE idart = '" . Contenido_Security::toInteger($db->f("idart")) . "'"; + $db2->query($sql); + + if ($db->f("time_online_move") == "1") + { + $sql = "UPDATE ".$cfg["tab"]["art_lang"] ." SET online = 1 WHERE idart = '".Contenido_Security::toInteger($db->f("idart"))."'"; + } else { + $sql = "UPDATE ".$cfg["tab"]["art_lang"] ." SET online = 0 WHERE idart = '".Contenido_Security::toInteger($db->f("idart"))."'"; + } + $db2->query($sql); + + // execute CEC hook + CEC_Hook::execute('Contenido.Article.conMoveArticles_Loop', $db->Record); + } + } + +} + + +function conCopyTemplateConfiguration ($srcidtplcfg) +{ + global $cfg; + + $sql = "SELECT idtpl FROM ".$cfg["tab"]["tpl_conf"] ." WHERE idtplcfg = '".Contenido_Security::toInteger($srcidtplcfg)."'"; + $db = new DB_ConLite; + $db->query($sql); + + if (!$db->next_record()) + { + return false; + } + + $idtpl = $db->f("idtpl"); + + $nextidtplcfg = $db->nextid($cfg["tab"]["tpl_conf"]); + $created = date("Y-m-d H:i:s"); + + $sql = "INSERT INTO ".$cfg["tab"]["tpl_conf"] . " (idtplcfg, idtpl, created) VALUES ('".Contenido_Security::toInteger($nextidtplcfg)."', '".Contenido_Security::toInteger($idtpl)."', '".Contenido_Security::escapeDB($created, $db)."')"; + $db->query($sql); + + return $nextidtplcfg; +} + +function conCopyContainerConf ($srcidtplcfg, $dstidtplcfg) +{ + global $cfg; + + $db = new DB_ConLite; + $sql = "SELECT number, container FROM ".$cfg["tab"]["container_conf"] . " WHERE idtplcfg = '".Contenido_Security::toInteger($srcidtplcfg)."'"; + + $db->query($sql); + + while ($db->next_record()) + { + $val[$db->f("number")] = $db->f("container"); + } + + if (!is_array($val)) + { + return false; + } + + foreach ($val as $key => $value) + { + $nextidcontainerc = $db->nextid($cfg["tab"]["container_conf"]); + + $sql = "INSERT INTO ".$cfg["tab"]["container_conf"]." (idcontainerc, idtplcfg, number, container) VALUES ('".Contenido_Security::toInteger($nextidcontainerc)."', '".Contenido_Security::toInteger($dstidtplcfg)."', + '".Contenido_Security::toInteger($key)."', '".Contenido_Security::escapeDB($value, $db)."')"; + $db->query($sql); + } + + return true; + +} + +function conCopyContent ($srcidartlang, $dstidartlang) +{ + global $cfg; + + $db = new DB_ConLite; + + $sql = "SELECT idtype, typeid, value, version, author FROM ".$cfg["tab"]["content"]." WHERE idartlang = '".Contenido_Security::toInteger($srcidartlang)."'"; + + $db->query($sql); + + $id = 0; + + while ($db->next_record()) + { + $id++; + $val[$id]["idtype"] = $db->f("idtype"); + $val[$id]["typeid"] = $db->f("typeid"); + $val[$id]["value"] = $db->f("value"); + $val[$id]["version"] = $db->f("version"); + $val[$id]["author"] = $db->f("author"); + } + + if (!is_array($val)) + { + return false; + } + + foreach ($val as $key => $value) + { + $nextid = $db->nextid($cfg["tab"]["content"]); + $idtype = $value["idtype"]; + $typeid = $value["typeid"]; + $lvalue = $value["value"]; + $version = $value["version"]; + $author = $value["author"]; + $created = date("Y-m-d H:i:s"); + + $sql = "INSERT INTO ".$cfg["tab"]["content"] + ." (idcontent, idartlang, idtype, typeid, value, version, author, created) ". + "VALUES ('".Contenido_Security::toInteger($nextid)."', '".Contenido_Security::toInteger($dstidartlang)."', '".Contenido_Security::toInteger($idtype)."', '".Contenido_Security::toInteger($typeid)."', + '".Contenido_Security::escapeDB($lvalue, $db)."', '".Contenido_Security::escapeDB($version, $db)."', '".Contenido_Security::escapeDB($author, $db)."', '".Contenido_Security::escapeDB($created, $db)."')"; + + $db->query($sql); + + } +} + +function conCopyArtLang ($srcidart, $dstidart, $newtitle, $bUseCopyLabel = true) +{ + global $cfg, $lang; + + $db = new DB_ConLite; + $db2 = new DB_ConLite; + + $sql = "SELECT idartlang, idlang, idtplcfg, title, pagetitle, summary, + author, online, redirect, redirect, redirect_url, + artsort, timemgmt, datestart, dateend, status, free_use_01, + free_use_02, free_use_03, time_move_cat, time_target_cat, + time_online_move, external_redirect, locked FROM + ".$cfg["tab"]["art_lang"]." WHERE idart = '".Contenido_Security::toInteger($srcidart)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + + while ($db->next_record()) + { + + $nextid = $db2->nextid($cfg["tab"]["art_lang"]); + /* Copy the template configuration */ + if ($db->f("idtplcfg") != 0) + { + $newidtplcfg = conCopyTemplateConfiguration($db->f("idtplcfg")); + conCopyContainerConf($db->f("idtplcfg"), $newidtplcfg); + } + + conCopyContent($db->f("idartlang"), $nextid); + + $idartlang = $nextid; + $idart = $dstidart; + $idlang = $db->f("idlang"); + $idtplcfg = $newidtplcfg; + + if ($newtitle != "") + { + $title = sprintf($newtitle, addslashes($db->f("title"))); + } else { + if ($bUseCopyLabel == true) { + $title = sprintf(i18n("%s (Copy)"), addslashes($db->f("title"))); + } else { + $title = addslashes($db->f("title")); + } + } + $pagetitle = addslashes($db->f("pagetitle")); + $summary = addslashes($db->f("summary")); + $created = date("Y-m-d H:i:s"); + $author = $db->f("author"); + $online = 0; + $redirect = $db->f("redirect"); + $redirecturl = $db->f("redirect_url"); + $artsort = $db->f("artsort"); + $timemgmt = $db->f("timemgmt"); + $datestart = $db->f("datestart"); + $dateend = $db->f("dateend"); + $status = $db->f("status"); + $freeuse01 = $db->f("free_use_01"); + $freeuse02 = $db->f("free_use_02"); + $freeuse03 = $db->f("free_use_03"); + $timemovecat = $db->f("time_move_cat"); + $timetargetcat = $db->f("time_target_cat"); + $timeonlinemove = $db->f("time_online_move"); + $externalredirect = $db->f("external_redirect"); + $locked = $db->f("locked"); + + $sql = "INSERT INTO ".$cfg["tab"]["art_lang"]." + (idartlang, idart, idlang, idtplcfg, title, + pagetitle, summary, created, lastmodified, + author, online, redirect, redirect_url, + artsort, timemgmt, datestart, dateend, + status, free_use_01, free_use_02, free_use_03, + time_move_cat, time_target_cat, time_online_move, + external_redirect, locked) VALUES ('".Contenido_Security::toInteger($idartlang)."', + '".Contenido_Security::toInteger($idart)."', + '".Contenido_Security::toInteger($idlang)."', + '".Contenido_Security::toInteger($idtplcfg)."', + '".Contenido_Security::escapeDB($title, $db2)."', + '".Contenido_Security::escapeDB($pagetitle, $db2)."', + '".Contenido_Security::escapeDB($summary, $db2)."', + '".Contenido_Security::escapeDB($created, $db2)."', + '".Contenido_Security::escapeDB($created, $d2b)."', + '".Contenido_Security::escapeDB($author, $db2)."', + '".Contenido_Security::toInteger($online)."', + '".Contenido_Security::escapeDB($redirect, $db2)."', + '".Contenido_Security::escapeDB($redirecturl, $db2)."', + '".Contenido_Security::toInteger($artsort)."', + '".Contenido_Security::toInteger($timemgmt)."', + '".Contenido_Security::escapeDB($datestart, $db2)."', + '".Contenido_Security::escapeDB($dateend, $db2)."', + '".Contenido_Security::toInteger($status)."', + '".Contenido_Security::toInteger($freeuse01)."', + '".Contenido_Security::toInteger($freeuse02)."', + '".Contenido_Security::toInteger($freeuse03)."', + '".Contenido_Security::toInteger($timemovecat)."', + '".Contenido_Security::toInteger($timetargetcat)."', + '".Contenido_Security::toInteger($timeonlinemove)."', + '".Contenido_Security::escapeDB($externalredirect, $db)."', + '".Contenido_Security::toInteger($locked)."')"; + + $db2->query($sql); + + // execute CEC hook + CEC_Hook::execute('Contenido.Article.conCopyArtLang_AfterInsert', array( + 'idartlang' => Contenido_Security::toInteger($idartlang), + 'idart' => Contenido_Security::toInteger($idart), + 'idlang' => Contenido_Security::toInteger($idlang), + 'idtplcfg' => Contenido_Security::toInteger($idtplcfg), + 'title' => Contenido_Security::escapeDB($title, $db2) + )); + + /* Copy meta tags */ + $sql = "SELECT idmetatype, metavalue FROM ".$cfg["tab"]["meta_tag"]." WHERE idartlang = '".Contenido_Security::toInteger($db->f("idartlang"))."'"; + $db->query($sql); + + while ($db->next_record()) + { + $nextidmetatag = $db2->nextid($cfg["tab"]["meta_tag"]); + $metatype = $db->f("idmetatype"); + $metavalue = $db->f("metavalue"); + $sql = "INSERT INTO ".$cfg["tab"]["meta_tag"]." + (idmetatag, idartlang, idmetatype, metavalue) + VALUES + ('".Contenido_Security::toInteger($nextidmetatag)."', '".Contenido_Security::toInteger($idartlang)."', '".Contenido_Security::toInteger($metatype)."', '".Contenido_Security::escapeDB($metavalue, $db2)."')"; + $db2->query($sql); + } + + /* Update keyword list for new article */ + conMakeArticleIndex ($idartlang, $idart); + } +} + +function conCopyArticle ($srcidart, $targetcat = 0, $newtitle = "", $bUseCopyLabel = true) +{ + global $cfg, $_cecRegistry; + + $db = new DB_ConLite; + $db2 = new DB_ConLite; + + $sql = "SELECT idclient FROM ".$cfg["tab"]["art"] ." WHERE idart = '".Contenido_Security::toInteger($srcidart)."'"; + + $db->query($sql); + + if (!$db->next_record()) + { + return false; + } + + $idclient = $db->f("idclient"); + $dstidart = $db->nextid($cfg["tab"]["art"]); + + $sql = "INSERT INTO ".$cfg["tab"]["art"]." (idart, idclient) VALUES ('".Contenido_Security::toInteger($dstidart)."', '".Contenido_Security::toInteger($idclient)."')"; + $db->query($sql); + + conCopyArtLang($srcidart, $dstidart, $newtitle, $bUseCopyLabel); + + // Update category relationship + $sql = "SELECT idcat, status FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($srcidart)."'"; + $db->query($sql); + + while ($db->next_record()) + { + $nextid = $db2->nextid($cfg["tab"]["cat_art"]); + + // These are the insert values + $aFields = Array("idcatart" => Contenido_Security::toInteger($nextid), + "idcat" => ($targetcat != 0) ? Contenido_Security::toInteger($targetcat) : Contenido_Security::toInteger($db->f("idcat")), + "idart" => Contenido_Security::toInteger($dstidart), + "is_start" => 0, + "status" => ($db->f("status") != '') ? Contenido_Security::toInteger($db->f("status")) : 0, + "createcode" => 1); + + $sql = "INSERT INTO ".$cfg["tab"]["cat_art"]." (".implode(", ", array_keys($aFields)).") VALUES (".implode(", ", array_values($aFields)).");"; + $db2->query($sql); + + if ($targetcat != 0) { // If true, exit while routine, only one category entry is needed + break; + } + } + + # Contenido Extension Chain + # @see docs/techref/plugins/Contenido Extension Chainer.pdf + # + # Usage: + # One could define the file contenido/includes/config.local.php + # with following code. + # + # global $_cecRegistry; + # cInclude("plugins", "extension/extenison.php"); + # $_cecRegistry->addChainFunction("Contenido.Content.CopyArticle", "AdditionalFunction1"); + # + # If function "AdditionalFunction1" is defined in file extension.php, it would be called via + # $chainEntry->execute($srcidart, $dstidart); + + $iterator = $_cecRegistry->getIterator("Contenido.Content.CopyArticle"); + + while ($chainEntry = $iterator->next()) + { + $chainEntry->execute($srcidart, $dstidart); + } + + return $dstidart; + +} + +function conGetTopmostCat($idcat, $minLevel = 0) +{ + global $cfg, $client, $lang; + + $db = new DB_ConLite; + + $sql = "SELECT + a.name AS name, + a.idcat AS idcat, + b.parentid AS parentid, + c.level AS level + FROM + ".$cfg["tab"]["cat_lang"]." AS a, + ".$cfg["tab"]["cat"]." AS b, + ".$cfg["tab"]["cat_tree"]." AS c + WHERE + a.idlang = '".Contenido_Security::toInteger($lang)."' AND + b.idclient = '".Contenido_Security::toInteger($client)."' AND + b.idcat = '".Contenido_Security::toInteger($idcat)."' AND + c.idcat = b.idcat AND + a.idcat = b.idcat"; + + $db->query($sql); + $db->next_record(); + + $name = $db->f("name"); + $parentid = $db->f("parentid"); + $thislevel = $db->f("level"); + + if ( $parentid != 0 && $thislevel >= $minLevel) { + return conGetTopmostCat($parentid, $minLevel); + } else { + return $idcat; + } +} + + +function conSyncArticle ($idart, $srclang, $dstlang) +{ + global $cfg; + + $db = new DB_ConLite; + $db2 = new DB_ConLite; + + #Check if article has already been synced to target language + $sql = "SELECT * FROM ".$cfg['tab']['art_lang']." WHERE (idart = ".Contenido_Security::toInteger($idart).") AND (idlang= ".Contenido_Security::toInteger($dstlang).")"; + $db2->query($sql); + + $sql = "SELECT idartlang, idart, idlang, idtplcfg, title, urlname, pagetitle, + summary, created, lastmodified, redirect, redirect_url, + artsort, status, external_redirect + FROM + ".$cfg["tab"]["art_lang"]." + WHERE + idart = '".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($srclang)."'"; + $db->query($sql); + + if ($db->next_record() && ($db2->num_rows() == 0) ) { + $newidartlang = $db2->nextid($cfg["tab"]["art_lang"]); + + if ($db->f("idtplcfg") != 0) + { + $newidtplcfg = tplcfgDuplicate($db->f("idtplcfg")); + } else { + $newidtplcfg = 0; + } + + + $idartlang = $db->f("idartlang"); + $idart = $db->f("idart"); + $idlang = $db->f("idlang"); + $title = addslashes($db->f("title")); + $urlname = addslashes($db->f("urlname")); + $pagetitle = addslashes($db->f("pagetitle")); + $summary = addslashes($db->f("summary")); + $created = $db->f("created"); + $lastmodified = $db->f("lastmodified"); + $redirect = $db->f("redirect"); + $redirect_url = $db->f("redirect_url"); + $artsort = $db->f("artsort"); + $status = $db->f("status"); + $external_redirect = $db->f("external_redirect"); + + $sql = "INSERT INTO + ".$cfg["tab"]["art_lang"]." + (idartlang, idart, idlang, idtplcfg, title,urlname, + pagetitle, summary, created, lastmodified, + author, modifiedby, online, redirect, redirect_url, + artsort, status, external_redirect) + VALUES + ('".Contenido_Security::toInteger($newidartlang)."', '".Contenido_Security::toInteger($idart)."', + '".Contenido_Security::toInteger($dstlang)."', '".Contenido_Security::toInteger($newidtplcfg)."', + '".Contenido_Security::escapeDB($title, $db2)."', + '".Contenido_Security::escapeDB($urlname, $db2)."', + '".Contenido_Security::escapeDB($pagetitle, $db2)."', + '".Contenido_Security::escapeDB($summary, $db2)."', + '".Contenido_Security::escapeDB($created, $db2)."', + '".Contenido_Security::escapeDB($lastmodified, $db2)."', + '".Contenido_Security::escapeDB($author, $db2)."', + '".Contenido_Security::escapeDB($modifiedby, $db2)."', + '".Contenido_Security::toInteger($online)."', + '".Contenido_Security::escapeDB($redirect, $db2)."', + '".Contenido_Security::escapeDB($redirect_url, $db2)."', + '".Contenido_Security::toInteger($artsort)."', + '".Contenido_Security::toInteger($status)."', + '".Contenido_Security::escapeDB($external_redirect, $db2)."')"; + $db2->query($sql); + + // execute CEC hook + $param['src_art_lang'] = $db->Record; + $param['dest_art_lang'] = $db2->Record; + $param['dest_art_lang']['idartlang'] = Contenido_Security::toInteger($newidartlang); + $param['dest_art_lang']['idlang'] = Contenido_Security::toInteger($dstlang); + $param['dest_art_lang']['idtplcfg'] = Contenido_Security::toInteger($newidtplcfg); + CEC_Hook::execute('Contenido.Article.conSyncArticle_AfterInsert', $param); + + /* Copy content */ + $sql = "SELECT + idtype, typeid, value, version, author, + created, lastmodified + FROM + ".$cfg["tab"]["content"]." + WHERE + idartlang = '".Contenido_Security::toInteger($idartlang)."'"; + + $db->query($sql); + + while ($db->next_record()) + { + $newidcontent = $db2->nextid($cfg["tab"]["content"]); + $idtype = $db->f("idtype"); + $typeid = $db->f("typeid"); + $value = $db->f("value"); + $version = $db->f("version"); + $author = $db->f("author"); + $created = $db->f("created"); + $lastmodified = $db->f("lastmodified"); + + $sql = "INSERT INTO + ".$cfg["tab"]["content"]." + (idcontent, idartlang, idtype, typeid, + value, version, author, created, lastmodified) + VALUES + ('".Contenido_Security::toInteger($newidcontent)."', '".Contenido_Security::toInteger($newidartlang)."', + '".Contenido_Security::toInteger($idtype)."', '".Contenido_Security::toInteger($typeid)."', + '".Contenido_Security::escapeDB($value, $db2)."', + '".Contenido_Security::escapeDB($version, $db2)."', + '".Contenido_Security::escapeDB($author, $db2)."', + '".Contenido_Security::escapeDB($created, $db2)."', + '".Contenido_Security::escapeDB($lastmodified, $db2)."')"; + + $db2->query($sql); + } + + /* Copy meta tags */ + $sql = "SELECT idmetatype, metavalue FROM ".$cfg["tab"]["meta_tag"]." WHERE idartlang = '$idartlang'"; + $db->query($sql); + + while ($db->next_record()) + { + $nextidmetatag = $db2->nextid($cfg["tab"]["meta_tag"]); + $metatype = $db->f("idmetatype"); + $metavalue = $db->f("metavalue"); + $sql = "INSERT INTO ".$cfg["tab"]["meta_tag"]." + (idmetatag, idartlang, idmetatype, metavalue) + VALUES + ('".Contenido_Security::toInteger($nextidmetatag)."', '".Contenido_Security::toInteger($newidartlang)."', '".Contenido_Security::toInteger($metatype)."', '".Contenido_Security::escapeDB($metavalue, $db2)."')"; + $db2->query($sql); + } + + + } +} + +function isStartArticle ($idartlang, $idcat, $idlang, $db = null) +{ + global $cfg; + + if (!is_object($db)) { + $db = new DB_ConLite; + } + + if ($cfg["is_start_compatible"] == true) + { + $sql = "SELECT idart FROM ".$cfg["tab"]["art_lang"]." WHERE idartlang='".Contenido_Security::toInteger($idartlang)."'"; + $db->query($sql); + + if (!$db->next_record()) + { + return false; + } else { + $idart = $db->f("idart"); + $sql = "SELECT is_start FROM ".$cfg["tab"]["cat_art"]." WHERE is_start = '1' AND idcat='".Contenido_Security::toInteger($idcat)."' AND idart='".Contenido_Security::toInteger($idart)."'"; + $db->query($sql); + + if ($db->next_record()) + { + return true; + } else { + return false; + } + } + } else { + $sql = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." + WHERE startidartlang='".Contenido_Security::toInteger($idartlang)."' AND idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($idlang)."'"; + + $db->query($sql); + + if ($db->next_record()) + { + return true; + } else { + return false; + } + } +} + +/** + * Returns all categories in which the given article is in. + * + * @param idart int Article ID + * @param db object Optional; if specified, uses the given db object + * @return array Flat array which contains all category id's + */ +function conGetCategoryAssignments ($idart, $db = false) +{ + global $cfg; + + if ($db === false) + { + $db = new DB_ConLite; + } + + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'"; + $db->query($sql); + + $categories = array(); + + while ($db->next_record()) + { + $categories[] = $db->f("idcat"); + } + + return ($categories); +} +?> diff --git a/branches/conlite20/conlite/includes/functions.con2.php b/branches/conlite20/conlite/includes/functions.con2.php new file mode 100644 index 0000000..4383190 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.con2.php @@ -0,0 +1,772 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * $Id: functions.con2.php 367 2015-10-19 10:08:51Z oldperl $: + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * Generates the code for one + * article + * + * @param int $idcat Id of category + * @param int $idart Id of article + * @param int $lang Id of language + * @param int $client Id of client + * @param int $layout Layout-ID of alternate Layout (if false, use associated layout) + * + * @author Jan Lengowski + * @copyright four for business AG + */ +function conGenerateCode($idcat, $idart, $lang, $client, $layout = false) +{ + global $frontend_debug, $_cecRegistry; + + $debug = 0; + + if ($debug) + echo "conGenerateCode($idcat, $idart, $lang, $client, $layout);
"; + + global $db, $db2, $sess, $cfg, $code, $cfgClient, $client, $lang, $encoding; + + if (!is_object($db2)) + $db2 = new DB_ConLite; + + /* extract IDCATART */ + $sql = "SELECT + idcatart + FROM + ".$cfg["tab"]["cat_art"]." + WHERE + idcat = '".Contenido_Security::toInteger($idcat)."' AND + idart = '".Contenido_Security::toInteger($idart)."'"; + + $db->query($sql); + $db->next_record(); + + $idcatart = $db->f("idcatart"); + + /* If neither the + article or the category is + configured, no code will be + created and an error occurs. */ + $sql = "SELECT + a.idtplcfg AS idtplcfg + FROM + ".$cfg["tab"]["art_lang"]." AS a, + ".$cfg["tab"]["art"]." AS b + WHERE + a.idart = '".Contenido_Security::toInteger($idart)."' AND + a.idlang = '".Contenido_Security::escapeDB($lang, $db)."' AND + b.idart = a.idart AND + b.idclient = '".Contenido_Security::escapeDB($client, $db)."'"; + + $db->query($sql); + $db->next_record(); + + if ($db->f("idtplcfg") != 0) + { + + /* Article is configured */ + $idtplcfg = $db->f("idtplcfg"); + + if ($debug) + echo "configuration for article found: $idtplcfg

"; + + $a_c = array (); + + $sql2 = "SELECT + * + FROM + ".$cfg["tab"]["container_conf"]." + WHERE + idtplcfg = '".Contenido_Security::toInteger($idtplcfg)."' + ORDER BY + number ASC"; + + $db2->query($sql2); + + while ($db2->next_record()) + { + $a_c[$db2->f("number")] = $db2->f("container"); + + } + + } else + { + + /* Check whether category is + configured. */ + $sql = "SELECT + a.idtplcfg AS idtplcfg + FROM + ".$cfg["tab"]["cat_lang"]." AS a, + ".$cfg["tab"]["cat"]." AS b + WHERE + a.idcat = '".Contenido_Security::toInteger($idcat)."' AND + a.idlang = '".Contenido_Security::escapeDB($lang, $db)."' AND + b.idcat = a.idcat AND + b.idclient = '".Contenido_Security::escapeDB($client, $db)."'"; + + $db->query($sql); + $db->next_record(); + + if ($db->f("idtplcfg") != 0) + { + + /* Category is configured, + extract varstring */ + $idtplcfg = $db->f("idtplcfg"); + + if ($debug) + echo "configuration for category found: $idtplcfg

"; + + $a_c = array (); + + $sql2 = "SELECT + * + FROM + ".$cfg["tab"]["container_conf"]." + WHERE + idtplcfg = '".Contenido_Security::toInteger($idtplcfg)."' + ORDER BY + number ASC"; + + $db2->query($sql2); + + while ($db2->next_record()) + { + $a_c[$db2->f("number")] = $db2->f("container"); + + } + + } else + { + + /* Article nor Category + is configured. Creation of + Code is not possible. Write + Errormsg to DB. */ + + if ($debug) + echo "Neither CAT or ART are configured!

"; + + $code = 'No code was created for this art in this category.'; + + $sql = "SELECT * FROM ".$cfg["tab"]["code"]." WHERE idcatart='".Contenido_Security::toInteger($idcatart)."' AND idlang='".Contenido_Security::escapeDB($lang, $db)."'"; + + $db->query($sql); + + if ($db->next_record()) + { + $sql = "UPDATE ".$cfg["tab"]["code"]." SET code='".Contenido_Security::escapeDB($code, $db)."', idlang='".Contenido_Security::escapeDB($lang, $db)."', idclient='".Contenido_Security::escapeDB($client, $db)."' + WHERE idcatart='".Contenido_Security::toInteger($idcatart)."' AND idlang='".Contenido_Security::escapeDB($lang, $db)."'"; + $db->query($sql); + } else + { + $sql = "INSERT INTO ".$cfg["tab"]["code"]." (idcode, idcatart, code, idlang, idclient) VALUES ('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["code"]))."', '".Contenido_Security::toInteger($idcatart)."', + '".Contenido_Security::escapeDB($code, $db)."', '".Contenido_Security::escapeDB($lang, $db)."', '".Contenido_Security::escapeDB($client, $db)."')"; + $db->query($sql); + } + + return "0601"; + + } + + } + + /* Get IDLAY and IDMOD array */ + $sql = "SELECT + a.idlay AS idlay, + a.idtpl AS idtpl + FROM + ".$cfg["tab"]["tpl"]." AS a, + ".$cfg["tab"]["tpl_conf"]." AS b + WHERE + b.idtplcfg = '".Contenido_Security::toInteger($idtplcfg)."' AND + b.idtpl = a.idtpl"; + + $db->query($sql); + $db->next_record(); + + $idlay = $db->f("idlay"); + + if ($layout != false) + { + $idlay = $layout; + } + + $idtpl = $db->f("idtpl"); + + if ($debug) + echo "Using Layout: $idlay and Template: $idtpl for generation of code.

"; + + /* List of used modules */ + $sql = "SELECT + number, + idmod + FROM + ".$cfg["tab"]["container"]." + WHERE + idtpl = '".Contenido_Security::toInteger($idtpl)."' + ORDER BY + number ASC"; + + $db->query($sql); + + while ($db->next_record()) + { + $a_d[$db->f("number")] = $db->f("idmod"); + } + + $oLayout = new cApiLayout(Contenido_Security::toInteger($idlay)); + $raw_code = $oLayout->getLayout(); + $code = AddSlashes($raw_code); + + /* Create code for all containers */ + if ($idlay) + { + tplPreparseLayout($idlay, $raw_code); + $tmp_returnstring = tplBrowseLayoutForContainers($idlay, $raw_code); + $a_container = explode("&", $tmp_returnstring); + + foreach ($a_container as $key => $value) + { + + $sql = "SELECT * FROM ".$cfg["tab"]["mod"]." WHERE idmod='".$a_d[$value]."'"; + + $db->query($sql); + $db->next_record(); + + if (is_numeric($a_d[$value])) + { + $thisModule = ''; + $thisContainer = ''; + } + /* dceModFileEdit (c)2009 www.dceonline.de */ + if($cfg['dceModEdit']['use'] + && ($cfg['dceModEdit']['allModsFromFile'] == true + || in_array((int) $a_d[$value], $cfg['dceModEdit']['modsFromFile']))) { + cInclude('classes', 'contenido/class.module.php'); + $tmpModule = new cApiModule; + $tmpModule->loadByPrimaryKey($a_d[$value]); + $output = $thisModule.$thisContainer.$tmpModule->get("output"); + unset($tmpModule); + } else { + $output = $thisModule.$thisContainer.$db->f("output"); + } + /* dceModFileEdit (c)2009 www.dceonline.de */ + $output = AddSlashes($output)."\n"; + + $template = $db->f("template"); + + $a_c[$value] = preg_replace("/(&\$)/", "", $a_c[$value]); + + $tmp1 = preg_split("/&/", $a_c[$value]); + + $varstring = array (); + + foreach ($tmp1 as $key1 => $value1) + { + + $tmp2 = explode("=", $value1); + foreach ($tmp2 as $key2 => $value2) + { + $varstring["$tmp2[0]"] = $tmp2[1]; + } + } + + $CiCMS_Var = '$C'.$value.'CMS_VALUE'; + $CiCMS_VALUE = ''; + + foreach ($varstring as $key3 => $value3) + { + $tmp = urldecode($value3); + $tmp = str_replace("\'", "'", $tmp); + $CiCMS_VALUE .= $CiCMS_Var.'['.$key3.']="'.$tmp.'"; '; + $output = str_replace("\$CMS_VALUE[$key3]", $tmp, $output); + $output = str_replace("CMS_VALUE[$key3]", $tmp, $output); + } + + $output = str_replace("CMS_VALUE", $CiCMS_Var, $output); + $output = str_replace("\$".$CiCMS_Var, $CiCMS_Var, $output); + + $output = preg_replace("/(CMS_VALUE\[)([0-9]*)(\])/i", "", $output); + + if ($frontend_debug["container_display"] == true) + { + $fedebug .= "Container: CMS_CONTAINER[$value]".'\\\\n'; + } + if ($frontend_debug["module_display"] == true) + { + $fedebug .= "Modul: ".$db->f("name").'\\\\n'; + } + if ($frontend_debug["module_timing_summary"] == true || $frontend_debug["module_timing"] == true) + { + $fedebug .= 'Eval-Time: $modtime'.$value.'\\\\n'; + $output = ''.$output.''; + } + + if ($fedebug != "") + { + $output = addslashes('\'; ?'.'>'."
").$output; + $output = $output.addslashes('function showmod'.$value.' () { window.alert(\\\'\'. "'.addslashes($fedebug).'".\'\\\');} \'; ?'.'>'); + } + + if ($frontend_debug["module_timing_summary"] == true) + { + $output .= addslashes(' '); + $output .= addslashes(' f("name")).'"; ?>'); + } + /* Replace new containers */ + $code = preg_replace("/(.*)<\/container>/Uis", "CMS_CONTAINER[$value]", $code); + + $code = preg_replace("//i", "CMS_CONTAINER[$value]", $code); + + $code = str_ireplace("CMS_CONTAINER[$value]", "\r\n".$output, $code); + + $fedebug = ""; + + } + } + + /* Find out what kind of CMS_... Vars are in use */ + $sql = "SELECT + * + FROM + ".$cfg["tab"]["content"]." AS A, + ".$cfg["tab"]["art_lang"]." AS B, + ".$cfg["tab"]["type"]." AS C + WHERE + A.idtype = C.idtype AND + A.idartlang = B.idartlang AND + B.idart = '".Contenido_Security::toInteger($idart)."' AND + B.idlang = '".Contenido_Security::escapeDB($lang, $db)."'"; + + $db->query($sql); + + while ($db->next_record()) + { + $a_content[$db->f("type")][$db->f("typeid")] = $db->f("value"); + } + + $sql = "SELECT idartlang, pagetitle FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang='".Contenido_Security::escapeDB($lang, $db)."'"; + + $db->query($sql); + $db->next_record(); + + $idartlang = $db->f("idartlang"); + + $pagetitle = stripslashes($db->f("pagetitle")); + + if ($pagetitle == '') { + CEC_Hook::setDefaultReturnValue($pagetitle); + $pagetitle = CEC_Hook::executeAndReturn('Contenido.Content.CreateTitletag'); + } + + /* replace all CMS_TAGS[] */ + $sql = "SELECT type, code FROM ".$cfg["tab"]["type"]; + + $db->query($sql); + + $match = array (); + while ($db->next_record()) + { + + $tmp = preg_match_all("/(".$db->f("type")."\[+\d+\])/i", $code, $match); + $a_[strtolower($db->f("type"))] = $match[0]; + + $success = array_walk($a_[strtolower($db->f("type"))], 'extractNumber'); + + $search = array (); + $replacements = array (); + + foreach ($a_[strtolower($db->f("type"))] as $val) + { + eval ($db->f("code")); + + $search[$val] = $db->f("type")."[$val]"; + $replacements[$val] = $tmp; + $keycode[$db->f("type")][$val] = $tmp; + } + + $code = str_ireplace($search, $replacements, $code); + + } + + /* add/replace title */ + if ($pagetitle != "") + { + $code = preg_replace("/.*?<\/title>/is", "{TITLE}", $code, 1); + + if (strstr($code, "{TITLE}")) + { + $code = str_ireplace("{TITLE}", addslashes("<title>$pagetitle"), $code); + } else + { + $code = str_ireplace_once("", addslashes("".$pagetitle."\n"), $code); + } + } else + { + $code = str_replace('', '', $code); + } + + // metatags + $availableTags = conGetAvailableMetaTagTypes(); + $metatags = array (); + foreach ($availableTags as $key => $value) { + $metavalue = conGetMetaValue($idartlang, $key); + if (strlen($metavalue) > 0) { + //$metatags[$value["name"]] = array(array("attribute" => $value["fieldname"], "value" => $metavalue), ...); + $metatags[] = array ($value["fieldname"] => $value["name"], 'content' => $metavalue); + } + } + + // generator tag + $aVersion = explode('.', $cfg['version']); + $sCLVersion = $aVersion[0] . '.' . $aVersion[1]; + $metatags[] = array ('name' => 'generator', 'content' => 'CMS ConLite ' . $sCLVersion); + + // charset/encoding tag + if(getEffectiveSetting('generator', 'html5', "false") == "true") { + $metatags[] = array('charset' => $encoding[$lang]); + } else if(getEffectiveSetting('generator', 'xhtml', "false") == "true") { + $metatags[] = array ('http-equiv' => 'Content-Type', 'content' => 'application/xhtml+xml; charset='.$encoding[$lang]); + } else { + $metatags[] = array ('http-equiv' => 'Content-Type', 'content' => 'text/html; charset='.$encoding[$lang]); + } + + // check chains + $_cecIterator = $_cecRegistry->getIterator("Contenido.Content.CreateMetatags"); + + if($_cecIterator->count() > 0) { + $tmpMetatags = $metatags; + if(!is_array($tmpMetatags)) { + $tmpMetatags = array(); + } + + while($chainEntry = $_cecIterator->next()) { + $tmpMetatags = $chainEntry->execute($tmpMetatags); + } + + //added 2008-06-25 Timo Trautmann + //system metatags were merged to user meta tags + //and user meta tags were not longer replaced by system meta tags + /** @todo recode whole meta tag handling */ + if(is_array($tmpMetatags)) { + //check for all system meta tags if there is already a user meta tag + foreach ($tmpMetatags as $aAutValue) { + $bExists = false; + + //get name of meta tag for search + $sSearch = ''; + if (array_key_exists('name', $aAutValue)) { + $sSearch = $aAutValue['name']; + } else if (array_key_exists('http-equiv', $aAutValue)) { + $sSearch = $aAutValue['http-equiv']; + } + + //check if meta tag is already in list of user meta tags + if (strlen($sSearch) > 0) { + foreach ($metatags as $aValue) { + if (array_key_exists('name', $aValue)) { + if ($sSearch == $aValue['name']) { + $bExists = true; + break; + } + } else if (array_key_exists('http-equiv', $aAutValue)) { + if ($sSearch == $aValue['http-equiv']) { + $bExists = true; + break; + } + } + } + } + + //add system meta tag if there is no user meta tag + if ($bExists == false && strlen($aAutValue['content']) > 0) { + array_push($metatags, $aAutValue); + } + } + } + } + $sMetatags = ''; + + foreach ($metatags as $value) { + if(getEffectiveSetting('generator', 'html5', "false") == "true") { + if($value['name'] == 'date') continue; + } + if(!empty($value['content'])) { + $value['content'] = clHtmlEntityDecode($value['content'], ENT_QUOTES, strtoupper($encoding[$lang])); + $value['content'] = htmlspecialchars_decode($value['content'], ENT_QUOTES); + } + + // build up metatag string + $oMetaTagGen = new cHTML5Meta(); + $oMetaTagGen->updateAttributes($value); + + /* HTML does not allow ID for meta tags */ + $oMetaTagGen->removeAttribute("id"); + + /*Check if metatag already exists*/ + if (preg_match('/(]+)>\r?\n?)/i', $code, $aTmetatagfound)) { + $code = str_replace($aTmetatagfound[1], $oMetaTagGen->render()."\n", $code); + } else if(array_key_exists ("charset", $value) + && preg_match('/(]+)\r?\n?)/i', $code, $aTmetatagfound)) { + $code = str_replace($aTmetatagfound[1], $oMetaTagGen->render()."\n", $code); + } else { + $sMetatags .= $oMetaTagGen->render()."\n"; + } + } + + /* Add meta tags */ + $code = str_ireplace_once("", $sMetatags."", $code); + $code = str_ireplace_once("", "\n", $code); + + /* write code into the database */ + $date = date("Y-m-d H:i:s"); + + if ($layout == false) + { + $sql = "SELECT * FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang = '".Contenido_Security::escapeDB($lang, $db)."'"; + + $db->query($sql); + + if ($db->next_record()) + { + if ($debug) + echo "UPDATED code for lang:$lang, client:$client, idcatart:$idcatart"; + $sql = "UPDATE ".$cfg["tab"]["code"]." SET code='".Contenido_Security::escapeDB($code, $db, false)."', idlang='".Contenido_Security::escapeDB($lang, $db)."', idclient='".Contenido_Security::escapeDB($client, $db)."' + WHERE idcatart='".Contenido_Security::toInteger($idcatart)."' AND idlang='".Contenido_Security::escapeDB($lang, $db)."'"; + $db->query($sql); + } else + { + if ($debug) + echo "INSERTED code for lang:$lang, client:$client, idcatart:$idcatart"; + $sql = "INSERT INTO ".$cfg["tab"]["code"]." (idcode, idcatart, code, idlang, idclient) VALUES ('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["code"]))."', '".Contenido_Security::toInteger($idcatart)."', + '".Contenido_Security::escapeDB($code, $db, false)."', '".Contenido_Security::escapeDB($lang, $db)."', '".Contenido_Security::escapeDB($client, $db)."')"; + $db->query($sql); + } + + $sql = "UPDATE ".$cfg["tab"]["cat_art"]." SET createcode = '0' WHERE idcatart='".Contenido_Security::toInteger($idcatart)."'"; + $db->query($sql); + } + + // execute CEC hook + $code = CEC_Hook::executeAndReturn('Contenido.Content.conGenerateCode', $code); + + return $code; +} + +/** + * Returns the idartlang for a given article and language + * + * @deprecated since version 2.0, use renamed conGetArtLang instead + * @param $idart ID of the article + * @param $idlang ID of the language + * @return mixed idartlang of the article or false if nothing was found + */ +function getArtLang($idart, $idlang) { + return conGetArtLang($idart, $idlang); +} + +/** + * Returns the idartlang for a given article and language + * + * @param $idart ID of the article + * @param $idlang ID of the language + * @return mixed idartlang of the article or false if nothing was found + */ +function conGetArtLang($iIdart, $iIdlang) { + $oArtLangs = new cApiArticleLanguageCollection(); + $iRet = $oArtLangs->getIdArtLang($iIdart, $iIdlang); + unset($oArtLangs); // save mem + return $iRet; +} + +/** + * Returns all available meta tag types + * + * @return array Array with available meta types + */ +function conGetAvailableMetaTagTypes() { + $oMetaTypes = new cApiMetaTypeCollection(); + $aRet = $oMetaTypes->getAvailableMetaTypes(); + unset($oMetaTypes); // save mem + return $aRet; +} + +/** + * Get the meta tag value for a specific article + * + * @param int $idartlang + * @param int $idmetatype + * @return string tag value or empty string + */ +function conGetMetaValue($idartlang, $idmetatype) { + + if($idartlang == 0) return; + + $oMetaTags = new cApiMetaTagCollection(); + $oMetaTags->setWhere('idartlang', Contenido_Security::toInteger($idartlang)); + $oMetaTags->setWhere('idmetatype', Contenido_Security::toInteger($idmetatype)); + $oMetaTags->query(); + + if($oMetaTags->count() > 0) { + $sRet = $oMetaTags->next()->get('metavalue'); + } else { + $sRet = ""; + } + unset($oMetaTags); // save mem + return $sRet; +} + +/** + * Set the meta tag value for a specific article + * + * @param $idartlang ID of the article + * @param $idmetatype Metatype-ID + * @param $value Value of the meta tag + * + * @author Timo A. Hummel + * @copyright four for business AG 2003 + */ +function conSetMetaValue($idartlang, $idmetatype, $value) +{ + global $cfg; + + $db = new DB_ConLite; + $sql = "DELETE FROM ".$cfg["tab"]["meta_tag"]." + WHERE idartlang = '".Contenido_Security::toInteger($idartlang)."' + AND idmetatype = '".Contenido_Security::toInteger($idmetatype)."'"; + + $db->query($sql); + + $nextid = $db->nextid($cfg["tab"]["meta_tag"]); + + $sql = "INSERT INTO ".$cfg["tab"]["meta_tag"]." SET idartlang = '".Contenido_Security::toInteger($idartlang)."', + idmetatype = '".Contenido_Security::toInteger($idmetatype)."', + idmetatag = '".Contenido_Security::toInteger($nextid)."', + metavalue = '".Contenido_Security::escapeDB($value, $db)."'"; + + $db->query($sql); + +} + +/** + * (re)generate keywords for all articles of a given client (with specified language) + * @param $client Client + * @param $lang Language of a client + * @return void + * + * @author Willi Man + * Created : 12.05.2004 + * Modified : 13.05.2004 + * @copyright four for business AG 2003 + */ +function conGenerateKeywords($client, $lang) +{ + global $cfg; + $db_art = new DB_ConLite; + + $options = array ("img", "link", "linktarget", "swf"); // cms types to be excluded from indexing + + $sql = "SELECT + a.idart, b.idartlang + FROM + ".$cfg["tab"]["art"]." AS a, + ".$cfg["tab"]["art_lang"]." AS b + WHERE + a.idart = b.idart AND + a.idclient = ".Contenido_Security::escapeDB($client, $db)." AND + b.idlang = ".Contenido_Security::escapeDB($lang, $db); + + $db_art->query($sql); + + $articles = array (); + while ($db_art->next_record()) + { + $articles[$db_art->f("idart")] = $db_art->f("idartlang"); + } + + if (count($articles) > 0) + { + foreach ($articles as $artid => $article_lang) + { + $article_content = array (); + $article_content = conGetContentFromArticle($article_lang); + + if (count($article_content) > 0) + { + $art_index = new Index($db_art); + $art_index->lang = $lang; + $art_index->start($artid, $article_content, 'auto', $options); + } + + } + } + +} + +/** + * get content from article + * @param $article_lang ArticleLanguageId of an article (idartlang) + * @return array Array with content of an article indexed by content-types + * + * @author Willi Man + * Created : 12.05.2004 + * Modified : 13.05.2004 + * @copyright four for business AG 2003 + */ +function conGetContentFromArticle($article_lang) +{ + + global $cfg; + $db_con = new DB_ConLite; + + $sql = "SELECT + * + FROM + ".$cfg["tab"]["content"]." AS A, + ".$cfg["tab"]["art_lang"]." AS B, + ".$cfg["tab"]["type"]." AS C + WHERE + A.idtype = C.idtype AND + A.idartlang = B.idartlang AND + A.idartlang = '".Contenido_Security::escapeDB($article_lang, $db_con)."' "; + + $db_con->query($sql); + + while ($db_con->next_record()) + { + $a_content[$db_con->f("type")][$db_con->f("typeid")] = urldecode($db_con->f("value")); + } + + return $a_content; + +} +?> diff --git a/branches/conlite20/conlite/includes/functions.database.php b/branches/conlite20/conlite/includes/functions.database.php new file mode 100644 index 0000000..107261a --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.database.php @@ -0,0 +1,456 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-06-04 + * modified 2008-06-25, Frederic Schneider, add security fix + * modified 2008-07-11, Dominik Ziegler, removed deprecated functions + * modified 2011-05-17, Murat Purc, documented functions and some optimizations + * + * $Id: functions.database.php 320 2015-01-16 16:06:38Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * Returns existing indexes of a specific table. + * @param DB_ConLite $db + * @param string $table + * @return array Assoziative array where the key and the value is the index name + */ +function dbGetIndexes($db, $table) { + if (!is_object($db)) { + return false; + } + + $sql = "SHOW INDEX FROM " . Contenido_Security::escapeDB($table, $db); + $db->query($sql); + + $indexes = array(); + + while ($db->next_record()) { + $indexes[$db->f("Key_name")] = $db->f("Key_name"); + } + + return ($indexes); +} + +/** + * Updates a specific table. Used e. g. by Contenido setup to create or update + * tables. + * Function logic: + * 1 .) Check, if the table exists + * 2a.) If not, create it with the field specification, exit + * 2b.) If the table exists, check, if the field exist + * 3 .) If not, try to find the field using previous names (if specified in $field like "name1,name2") + * 4a.) If the field hasn't been found, create the field as specified, exit + * 4b.) If the field has been found using a previous name (if specified) rename the column to $field + * 5 .) As the field has been found, check, if the field's type is matching + * 5a.) If the type is matching, exit + * 5b.) If the field's content type is not matching, try to convert first (e.g. string to int + * or int to string), then use the upgrade statement if applicable + * + * Note about the upgrade statement: + * - the code must be eval'able + * - the code needs to read $oldVal (old field value) and needs to set $newVal (value to which the field will be set) + * - $oldVal might be empty if the field didn't exist + * - $tableValues['fieldname'] contains the already existing values + * + * @param DB_ConLite $db Database instance + * @param string $table Name of table to create/update + * @param string $field Name of field to create/update + * @param string $type Data type of field. Feasible values are all possible data types + * e. g. int(10), varchar(32), datetime, varchar(255), text, tinyint(1) + * @param string $null Parameter to forbid null values, feasible values "", "NULL" or "YES" + * where "NULL" or "YES" allows null values and "" doesn't + * @param string $key The field will be added as a primary key, if value is "PRI", + * otherwhise the value should be empty "" + * @param string $default The default value for the field. Feasible is each possible + * value depending on passed $type + * @param string $extra Additional info for the field, e. g. "auto_increment", if the + * field should have the AUTO_INCREMENT attribute and empty otherwise. + * @param string $upgradeStatement NOT USED AT THE MOMENT + * @param bool $bRemoveIndexes Flag to remove all indexes + * @return bool + */ +function dbUpgradeTable($db, $table, $field, $type, $null, $key, $default, $extra, $upgradeStatement, $bRemoveIndexes = false) { + global $columnCache; + global $tableCache; + + if (!is_object($db)) { + return false; + } + + $bDebug = false; + if (($table == 'pica_alloc') && ($field == 'parentid')) { + $bDebug = true; + } + + // Parameter checking for $null. If parameter is "" or "NULL" or "YES", we + // know that we want the colum to forbid null entries. + if ($null == "NULL" || $null == "YES") { + $parameter['NULL'] = "NULL"; + $null = "YES"; + } else { + $parameter['NULL'] = "NOT NULL"; + $null = ""; + } + + // Parameter checking for $key. If parameter is "" or "NULL" or "YES", we + // know that we want the primary key. + if ($key == "PRI") { + $parameter['KEY'] = "PRIMARY KEY"; + } else { + $parameter['KEY'] = ""; + } + + // Parameter check for $default. If set, create a default value + if ($default != "") { + if (((strpos($type, 'timestamp') !== FALSE) && ($default != '')) || ($default == 'NULL')) { + $parameter['DEFAULT'] = "DEFAULT " . Contenido_Security::escapeDB($default, $db); + } else { + $parameter['DEFAULT'] = "DEFAULT '" . Contenido_Security::escapeDB($default, $db) . "'"; + } + } + + if (!dbTableExists($db, $table)) { + $createTable = " CREATE TABLE " . Contenido_Security::escapeDB($table, $db) . " (" . Contenido_Security::escapeDB($field, $db) . " $type " . $parameter['NULL'] . " " . $parameter['DEFAULT'] . " " . $parameter['KEY'] . ") ENGINE = MYISAM"; + $db->query($createTable); + $tableCache[] = $table; + return true; + } + + // Remove auto_increment + $structure = dbGetColumns($db, $table); + + if ($structure[$field]["Extra"] == "auto_increment") { + if ($structure[$field]['NULL'] == "") { + $structure[$field]['NULL'] = "NOT NULL"; + } + $alterField = "ALTER TABLE " . Contenido_Security::escapeDB($table, $db) . " CHANGE COLUMN " . Contenido_Security::escapeDB($field, $db) . " " . Contenido_Security::escapeDB($field, $db) . " + " . Contenido_Security::escapeDB($type, $db) . " " . $structure[$field]['NULL'] . " " . $structure[$field]['DEFAULT'] . " " . $structure[$field]['KEY']; + + $db->query($alterField); + } + + // Remove all keys, as they are being recreated during an upgrade + if ($bRemoveIndexes == true) { + $indexes = dbGetIndexes($db, $table); + + foreach ($indexes as $index) { + if ($index == "PRIMARY") { + if ($structure[$field]['Key'] == "PRI") { + $sql = " ALTER TABLE " . Contenido_Security::escapeDB($table, $db) . " DROP PRIMARY KEY"; + } else { + $sql = ""; + } + } else { + $sql = " ALTER TABLE " . Contenido_Security::escapeDB($table, $db) . "' DROP INDEX " . Contenido_Security::escapeDB($index, $db); + } + + $db->query($sql); + unset($columnCache[$table]); + } + } + + $structure = dbGetColumns($db, $table); + + // If $field contains "," previous names has been specified; separate from $field + $sepPos = strpos($field, ","); + if ($sepPos === false) { + $previousName = ""; + } else { + $previousName = substr($field, $sepPos + 1); + $field = substr($field, 0, $sepPos); + } + + if (!array_key_exists($field, $structure)) { + // HerrB: Search field using $previousName + $blnFound = false; + if ($previousName != "") { + $arrPreviousName = explode(",", $previousName); + foreach ($arrPreviousName as $strPrevious) { + // Maybe someone has used field1, field2, ..., trim spaces + $strPrevious = trim($strPrevious); + if (array_key_exists($strPrevious, $structure)) { + $blnFound = true; + break; + } + } + } + + if ($blnFound) { + // Rename column, update array, proceed + if ($structure[$strPrevious]['Null'] == 'YES') { + $alterField = " ALTER TABLE `" . Contenido_Securiy::escapeDB($table, $db) . "` CHANGE COLUMN `" . Contenido_Security::escapeDB($strPrevious, $db) . "` `" . Contenido_Security::escapeDB($field, $db) . "` + " . $structure[$strPrevious]['Type'] . " DEFAULT '" . $structure[$strPrevious]['Default'] . "'"; + } else { + $alterField = " ALTER TABLE `" . Contenido_Security::escapeDB($table, $db) . "` CHANGE COLUMN `" . Contenido_Security::escapeDB($strPrevious, $db) . "` `" . Contenido_Security::escapeDB($field, $db) . "` + " . $structure[$strPrevious]['Type'] . " NOT NULL DEFAULT '" . $structure[$strPrevious]['Default'] . "'"; + } + + $db->query($alterField); + + $columnCache[$table] = ""; + $structure = dbGetColumns($db, $table); + } else { + switch ($type) { + case "datetime": + if ($parameter['DEFAULT'] == "DEFAULT '0000-00-00 00:00:00'") { + $parameter['DEFAULT'] = "DEFAULT '1000-01-01 00:00:00'"; + } + break; + case "date": + if ($parameter['DEFAULT'] == "DEFAULT '0000-00-00'") { + $parameter['DEFAULT'] = "DEFAULT '1000-01-01'"; + } + break; + } + + $createField = " ALTER TABLE " . Contenido_Security::escapeDB($table, $db) . " ADD COLUMN " . Contenido_Security::escapeDB($field, $db) . " " . Contenido_Security::escapeDB($type, $db) . " + " . $parameter['NULL'] . " " . $parameter['DEFAULT'] . " " . $parameter['KEY']; + $db->query($createField); + $sDebugData = sprintf("%s:%s:ErrorNo. %s:%s\n", $createField, $parameter['DEFAULT'], $db->getErrorNumber(), $db->getErrorMessage()); + + if ($bDebug) { + file_put_contents('../data/logs/setup_queries.txt', $sDebugData, FILE_APPEND); + echo 'createField:' . $createField . '
'; + } + $columnCache[$table] = ""; + return true; + } + } + + $structure = dbGetColumns($db, $table); + + // Third check: Compare field properties + if (($structure[$field]['Type'] != $type) || + ($structure[$field]['Null'] != $null) || + ($structure[$field]['Key'] != $key) || + ($structure[$field]['Default'] != $default) || + ($structure[$field]['Extra'] != $extra)) { + + if ($structure[$field]['Key'] == "PRI") { + $alterField = " ALTER TABLE " . Contenido_Security::escapeDB($table, $db) . " ADD PRIMARY KEY ('" . Contenido_Security::escapeDB($field, $db) . "') "; + } else { + $alterField = " ALTER TABLE " . Contenido_Security::escapeDB($table, $db) . " CHANGE COLUMN $field $field $type " . $parameter['NULL'] . " " . $parameter['DEFAULT'] . " " . $parameter['KEY']; + } + + $db->query($alterField); + + $columnCache[$table] = ""; + } + + return true; +} + +/** + * Checks, if passed table exists in the database + * @param DB_ConLite $db + * @param string $table + * @return bool + */ +function dbTableExists($db, $table) { + global $tableCache; + + if (!is_object($db)) { + return false; + } + + if (!is_array($tableCache)) { + $sql = "SHOW TABLES"; + $db->query($sql); + + $tableCache = array(); + + while ($db->next_record()) { + $tableCache[] = $db->f(0); + } + } + + if (in_array($table, $tableCache)) { + return true; + } else { + return false; + } +} + +/** + * Returns the column structure of a table + * @param DB_ConLite $db + * @param string $table + * @return array|bool Either assoziative column array or false + */ +function dbGetColumns($db, $table) { + global $columnCache; + + if (!is_object($db)) { + return false; + } + + if (isset($columnCache[$table]) && is_array($columnCache[$table])) { + return $columnCache[$table]; + } + + $sql = "SHOW COLUMNS FROM " . Contenido_Security::escapeDB($table, $db); + $db->query($sql); + + $structure = array(); + + while ($db->next_record()) { + $structure[$db->f("Field")] = $db->toArray(); + } + + $columnCache[$table] = $structure; + + return $structure; +} + +/** + * Returns the primary key column of a table + * @param DB_ConLite $db + * @param string $table + * @return string + */ +function dbGetPrimaryKeyName($db, $table) { + $sReturn = ""; + $structure = dbGetColumns($db, $table); + + if (is_array($structure)) { + foreach ($structure as $mykey => $value) { + if ($value['Key'] == "PRI") { + $sReturn = $mykey; + } + } + } + + return $sReturn; +} + +/** + * Updates the sequence table, stores the highest primary key value of a table in it. + * Retrieves the primary key field of the table, retrieves the highes value and + * saves the value in the sequence table. + * + * @param string $sequencetable Name of sequence table + * @param string $table Name of table + * @param DB_ConLite|bool $db Database instance or false + */ +function dbUpdateSequence($sequencetable, $table, $db = false) { + if ($db === false) { + $bClose = true; + $db = new DB_Upgrade; + } else { + $bClose = false; + } + + $key = dbGetPrimaryKeyName($db, $table); + + if ($key != "" && $key != $sequencetable) { + $sql = "SELECT " . Contenido_Security::escapeDB($key, $db) . " FROM " . Contenido_Security::escapeDB($table, $db) . " ORDER BY " . Contenido_Security::escapeDB($key, $db) . " DESC"; + $db->query($sql); + + if ($db->next_record()) { + $highestval = $db->f($key); + } else { + $highestval = 0; + } + + $sql = "DELETE FROM " . Contenido_Security::escapeDB($sequencetable, $db) . " WHERE seq_name = '" . Contenido_Security::escapeDB($table, $db) . "'"; + $db->query($sql); + + $sql = "INSERT INTO " . Contenido_Security::escapeDB($sequencetable, $db) . " SET seq_name = '" . Contenido_Security::escapeDB($table, $db) . "', nextid = '" . Contenido_Security::toInteger($highestval) . "'"; + $db->query($sql); + } + + if ($bClose == true) { + $db->close(); + } +} + +/** + * @deprecated + * @since 2008-07-11 + */ +function dbDumpStructure($db, $table, $return = false) { + /* this function is deprecated since Contenido 4.8.7 - 2008-07-11 */ + return; +} + +/** + * @deprecated + * @since 2008-07-11 + */ +function dbDumpArea($db, $id) { + /* this function is deprecated since Contenido 4.8.7 - 2008-07-11 */ + return; +} + +/** + * @deprecated + * @since 2008-07-11 + */ +function dbDumpAreasAsArray($arrayname, $db) { + /* this function is deprecated since Contenido 4.8.7 - 2008-07-11 */ + return; +} + +/** + * @deprecated + * @since 2008-07-11 + */ +function dbDumpNavSub($arrayname, $db, $nextidarea) { + /* this function is deprecated since Contenido 4.8.7 - 2008-07-11 */ + return; +} + +/** + * @deprecated + * @since 2008-07-11 + */ +function dbInsertData($table, $data) { + /* this function is deprecated since Contenido 4.8.7 - 2008-07-11 */ + return; +} + +/** + * @deprecated + * @since 2008-07-11 + */ +function dbDumpData($table) { + /* this function is deprecated since Contenido 4.8.7 - 2008-07-11 */ + return; +} + +/** + * @deprecated + * @since 2008-07-11 + */ +function dbUpgradeData($table, $valuesArray) { + /* this function is deprecated since Contenido 4.8.7 - 2008-07-11 */ + return; +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.domxml-php4-to-php5.php b/branches/conlite20/conlite/includes/functions.domxml-php4-to-php5.php new file mode 100644 index 0000000..023e872 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.domxml-php4-to-php5.php @@ -0,0 +1,657 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2007-06-05 + * modified 2008-06-26, Frederic Schneider, add security fix + * + * $Id: functions.domxml-php4-to-php5.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * Requires PHP5, uses built-in DOM extension, + * and if domxml_xslt functions are used, needs XSL extension (included). + * + * To be used in PHP4 scripts using DOMXML extension. + * Allows PHP4/DOMXML scripts to run on PHP5/DOM + * http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/ + * */ +define('DOMXML_LOAD_PARSING', 0); +define('DOMXML_LOAD_VALIDATING', 1); +define('DOMXML_LOAD_RECOVERING', 2); +define('DOMXML_LOAD_SUBSTITUTE_ENTITIES', 4); +define('DOMXML_LOAD_DONT_KEEP_BLANKS', 16); + +function domxml_new_doc($version) { + return new php4DOMDocument(); +} + +function domxml_new_xmldoc($version) { + return new php4DOMDocument(); +} + +function domxml_open_file($filename, $mode = DOMXML_LOAD_PARSING, &$error = null) { + $dom = new php4DOMDocument($mode); + $errorMode = (func_num_args() > 2); + if ($errorMode) + libxml_use_internal_errors(true); + if (!$dom->myDOMNode->load($filename)) + $dom = null; + if ($errorMode) { + $error = array_map('_error_report', libxml_get_errors()); + libxml_clear_errors(); + } + return $dom; +} + +function domxml_open_mem($str, $mode = DOMXML_LOAD_PARSING, &$error = null) { + $dom = new php4DOMDocument($mode); + $errorMode = (func_num_args() > 2); + if ($errorMode) + libxml_use_internal_errors(true); + if (!$dom->myDOMNode->loadXML($str)) + $dom = null; + if ($errorMode) { + $error = array_map('_error_report', libxml_get_errors()); + libxml_clear_errors(); + } + return $dom; +} + +function html_doc($html_doc, $from_file = false) { + $dom = new php4DOMDocument(); + if ($from_file) + $result = $dom->myDOMNode->loadHTMLFile($html_doc); + else + $result = $dom->myDOMNode->loadHTML($html_doc); + return $result ? $dom : null; +} + +function html_doc_file($filename) { + return html_doc($filename, true); +} + +function xmldoc($str) { + return domxml_open_mem($str); +} + +function xmldocfile($filename) { + return domxml_open_file($filename); +} + +function xpath_eval($xpath_context, $eval_str, $contextnode = null) { + return $xpath_context->xpath_eval($eval_str, $contextnode); +} + +function xpath_new_context($dom_document) { + return new php4DOMXPath($dom_document); +} + +function xpath_register_ns($xpath_context, $prefix, $namespaceURI) { + return $xpath_context->myDOMXPath->registerNamespace($prefix, $namespaceURI); +} + +function _error_report($error) { + return array('errormessage' => $error->message, 'nodename' => '', 'line' => $error->line, 'col' => $error->column) + ($error->file == '' ? array() : array('directory' => dirname($error->file), 'file' => basename($error->file))); +} + +class php4DOMAttr extends php4DOMNode { + + function name() { + return $this->myDOMNode->name; + } + + function set_value($content) { + return $this->myDOMNode->value = $content; + } + + function specified() { + return $this->myDOMNode->specified; + } + + function value() { + return $this->myDOMNode->value; + } + +} + +class php4DOMDocument extends php4DOMNode { + + function __construct($mode = DOMXML_LOAD_PARSING) { + $this->myDOMNode = new DOMDocument(); + $this->myOwnerDocument = $this; + if ($mode & DOMXML_LOAD_VALIDATING) + $dom->myDOMNode->validateOnParse = true; + if ($mode & DOMXML_LOAD_RECOVERING) + $dom->myDOMNode->recover = true; + if ($mode & DOMXML_LOAD_SUBSTITUTE_ENTITIES) + $dom->myDOMNode->substituteEntities = true; + if ($mode & DOMXML_LOAD_DONT_KEEP_BLANKS) + $dom->myDOMNode->preserveWhiteSpace = false; + } + + function add_root($name) { + if ($this->myDOMNode->hasChildNodes()) + $this->myDOMNode->removeChild($this->myDOMNode->firstChild); + return new php4DOMElement($this->myDOMNode->appendChild($this->myDOMNode->createElement($name)), $this->myOwnerDocument); + } + + function create_attribute($name, $value) { + $myAttr = $this->myDOMNode->createAttribute($name); + $myAttr->value = $value; + return new php4DOMAttr($myAttr, $this); + } + + function create_cdata_section($content) { + return new php4DOMNode($this->myDOMNode->createCDATASection($content), $this); + } + + function create_comment($data) { + return new php4DOMNode($this->myDOMNode->createComment($data), $this); + } + + function create_element($name) { + return new php4DOMElement($this->myDOMNode->createElement($name), $this); + } + + function create_element_ns($uri, $name, $prefix = null) { + if ($prefix == null) + $prefix = $this->myDOMNode->lookupPrefix($uri); + if (($prefix == null) && ($this->myDOMNode->hasChildNodes()) && (!$this->myDOMNode->firstChild->isDefaultNamespace($uri))) + $prefix = 'a' . sprintf('%u', crc32($uri)); + return new php4DOMElement($this->myDOMNode->createElementNS($uri, $prefix == null ? $name : $prefix . ':' . $name), $this); + } + + function create_entity_reference($content) { + return new php4DOMNode($this->myDOMNode->createEntityReference($content), $this); + } + +//By Walter Ebert 2007-01-22 + + function create_text_node($content) { + return new php4DOMText($this->myDOMNode->createTextNode($content), $this); + } + + function document_element() { + return parent::_newDOMElement($this->myDOMNode->documentElement, $this); + } + + function dump_file($filename, $compressionmode = false, $format = false) { + $format0 = $this->myDOMNode->formatOutput; + $this->myDOMNode->formatOutput = $format; + $res = $this->myDOMNode->save($filename); + $this->myDOMNode->formatOutput = $format0; + return $res; + } + + function dump_mem($format = false, $encoding = false) { + $format0 = $this->myDOMNode->formatOutput; + $this->myDOMNode->formatOutput = $format; + $encoding0 = $this->myDOMNode->encoding; + if ($encoding) + $this->myDOMNode->encoding = $encoding; + $dump = $this->myDOMNode->saveXML(); + $this->myDOMNode->formatOutput = $format0; + if ($encoding) + $this->myDOMNode->encoding = $encoding0 == '' ? 'UTF-8' : $encoding0; //UTF-8 is XML default encoding + return $dump; + } + + function free() { + if ($this->myDOMNode->hasChildNodes()) + $this->myDOMNode->removeChild($this->myDOMNode->firstChild); + $this->myDOMNode = null; + $this->myOwnerDocument = null; + } + + function get_element_by_id($id) { + return parent::_newDOMElement($this->myDOMNode->getElementById($id), $this); + } + + function get_elements_by_tagname($name) { + $myDOMNodeList = $this->myDOMNode->getElementsByTagName($name); + $nodeSet = array(); + $i = 0; + if (isset($myDOMNodeList)) + while ($node = $myDOMNodeList->item($i++)) + $nodeSet[] = new php4DOMElement($node, $this); + return $nodeSet; + } + + function html_dump_mem() { + return $this->myDOMNode->saveHTML(); + } + + function root() { + return parent::_newDOMElement($this->myDOMNode->documentElement, $this); + } + + function xpath_new_context() { + return new php4DOMXPath($this); + } + +} + +class php4DOMElement extends php4DOMNode { + + function add_namespace($uri, $prefix) { + if ($this->myDOMNode->hasAttributeNS('http://www.w3.org/2000/xmlns/', $prefix)) + return false; + else { + $this->myDOMNode->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:' . $prefix, $uri); + return true; + } + } + + function get_attribute($name) { + return $this->myDOMNode->getAttribute($name); + } + + function get_attribute_node($name) { + return parent::_newDOMElement($this->myDOMNode->getAttributeNode($name), $this->myOwnerDocument); + } + + function get_elements_by_tagname($name) { + $myDOMNodeList = $this->myDOMNode->getElementsByTagName($name); + $nodeSet = array(); + $i = 0; + if (isset($myDOMNodeList)) + while ($node = $myDOMNodeList->item($i++)) + $nodeSet[] = new php4DOMElement($node, $this->myOwnerDocument); + return $nodeSet; + } + + function has_attribute($name) { + return $this->myDOMNode->hasAttribute($name); + } + + function remove_attribute($name) { + return $this->myDOMNode->removeAttribute($name); + } + + function set_attribute($name, $value) { + $myAttr = $this->myDOMNode->ownerDocument->createAttribute($name); + $myAttr->value = $value; + $this->myDOMNode->setAttributeNode($myAttr); + return new php4DOMAttr($myAttr, $this->myOwnerDocument); + } + + function set_attribute_node($attr) { + $this->myDOMNode->setAttributeNode($this->_importNode($attr)); + return $attr; + } + + function set_name($name) { + if ($this->myDOMNode->prefix == '') + $newNode = $this->myDOMNode->ownerDocument->createElement($name); + else + $newNode = $this->myDOMNode->ownerDocument->createElementNS($this->myDOMNode->namespaceURI, $this->myDOMNode->prefix . ':' . $name); + $myDOMNodeList = $this->myDOMNode->attributes; + $i = 0; + if (isset($myDOMNodeList)) + while ($node = $myDOMNodeList->item($i++)) + if ($node->namespaceURI == '') + $newNode->setAttribute($node->name, $node->value); + else + $newNode->setAttributeNS($node->namespaceURI, $node->nodeName, $node->value); + $myDOMNodeList = $this->myDOMNode->childNodes; + if (isset($myDOMNodeList)) + while ($node = $myDOMNodeList->item(0)) + $newNode->appendChild($node); + $this->myDOMNode->parentNode->replaceChild($newNode, $this->myDOMNode); + $this->myDOMNode = $newNode; + return true; + } + + function tagname() { + return $this->myDOMNode->tagName; + } + +} + +class php4DOMNode { + + public $myDOMNode; + public $myOwnerDocument; + + function __construct($aDomNode, $aOwnerDocument) { + $this->myDOMNode = $aDomNode; + $this->myOwnerDocument = $aOwnerDocument; + } + + function __get($name) { + switch ($name) { + case 'type': return $this->myDOMNode->nodeType; + case 'tagname': return $this->myDOMNode->tagName; + case 'content': return $this->myDOMNode->textContent; + case 'name': return $this->myDOMNode->name; + case 'value': return $this->myDOMNode->value; + default: + $myErrors = debug_backtrace(); + trigger_error('Undefined property: ' . get_class($this) . '::$' . $name . ' [' . $myErrors[0]['file'] . ':' . $myErrors[0]['line'] . ']', E_USER_NOTICE); + return false; + } + } + + function add_child($newnode) { + return append_child($newnode); + } + + function add_namespace($uri, $prefix) { + return false; + } + + function append_child($newnode) { + return self::_newDOMElement($this->myDOMNode->appendChild($this->_importNode($newnode)), $this->myOwnerDocument); + } + + function append_sibling($newnode) { + return self::_newDOMElement($this->myDOMNode->parentNode->appendChild($this->_importNode($newnode)), $this->myOwnerDocument); + } + + function attributes() { + $myDOMNodeList = $this->myDOMNode->attributes; + $nodeSet = array(); + $i = 0; + if (isset($myDOMNodeList)) + while ($node = $myDOMNodeList->item($i++)) + $nodeSet[] = new php4DOMAttr($node, $this->myOwnerDocument); + return $nodeSet; + } + + function child_nodes() { + $myDOMNodeList = $this->myDOMNode->childNodes; + $nodeSet = array(); + $i = 0; + if (isset($myDOMNodeList)) + while ($node = $myDOMNodeList->item($i++)) + $nodeSet[] = self::_newDOMElement($node, $this->myOwnerDocument); + return $nodeSet; + } + + function children() { + return $this->child_nodes(); + } + + function clone_node($deep = false) { + return self::_newDOMElement($this->myDOMNode->cloneNode($deep), $this->myOwnerDocument); + } + + function dump_node($node = null) { + return $node == null ? $this->myOwnerDocument->myDOMNode->saveXML($this->myDOMNode) : $this->myOwnerDocument->myDOMNode->saveXML($node->myDOMNode); + } + + function first_child() { + return self::_newDOMElement($this->myDOMNode->firstChild, $this->myOwnerDocument); + } + + function get_content() { + return $this->myDOMNode->textContent; + } + + function has_attributes() { + return $this->myDOMNode->hasAttributes(); + } + + function has_child_nodes() { + return $this->myDOMNode->hasChildNodes(); + } + + function insert_before($newnode, $refnode) { + return self::_newDOMElement($this->myDOMNode->insertBefore($this->_importNode($newnode), $refnode == null ? null : $refnode->myDOMNode), $this->myOwnerDocument); + } + + function is_blank_node() { + return ($this->myDOMNode->nodeType === XML_TEXT_NODE) && preg_match('%^\s*$%', $this->myDOMNode->nodeValue); + } + + function last_child() { + return self::_newDOMElement($this->myDOMNode->lastChild, $this->myOwnerDocument); + } + + function new_child($name, $content) { + $mySubNode = $this->myDOMNode->ownerDocument->createElement($name); + $mySubNode->appendChild($this->myDOMNode->ownerDocument->createTextNode(clHtmlEntityDecode($content, ENT_QUOTES))); + $this->myDOMNode->appendChild($mySubNode); + return new php4DOMElement($mySubNode, $this->myOwnerDocument); + } + + function next_sibling() { + return self::_newDOMElement($this->myDOMNode->nextSibling, $this->myOwnerDocument); + } + + function node_name() { + return ($this->myDOMNode->nodeType === XML_ELEMENT_NODE) ? $this->myDOMNode->localName : $this->myDOMNode->nodeName; + } + +//Avoid namespace prefix for DOMElement + + function node_type() { + return $this->myDOMNode->nodeType; + } + + function node_value() { + return $this->myDOMNode->nodeValue; + } + + function owner_document() { + return $this->myOwnerDocument; + } + + function parent_node() { + return self::_newDOMElement($this->myDOMNode->parentNode, $this->myOwnerDocument); + } + + function prefix() { + return $this->myDOMNode->prefix; + } + + function previous_sibling() { + return self::_newDOMElement($this->myDOMNode->previousSibling, $this->myOwnerDocument); + } + + function remove_child($oldchild) { + return self::_newDOMElement($this->myDOMNode->removeChild($oldchild->myDOMNode), $this->myOwnerDocument); + } + + function replace_child($newnode, $oldnode) { + return self::_newDOMElement($this->myDOMNode->replaceChild($this->_importNode($newnode), $oldnode->myDOMNode), $this->myOwnerDocument); + } + + function set_content($text) { + return $this->myDOMNode->appendChild($this->myDOMNode->ownerDocument->createTextNode($text)); + } + + function set_namespace($uri, $prefix = null) {//Contributions by Daniel Walker 2006-09-08 + $nsprefix = $this->myDOMNode->lookupPrefix($uri); + if ($nsprefix == null) { + $nsprefix = $prefix == null ? $nsprefix = 'a' . sprintf('%u', crc32($uri)) : $prefix; + if ($this->myDOMNode->nodeType === XML_ATTRIBUTE_NODE) { + if (($prefix != null) && $this->myDOMNode->ownerElement->hasAttributeNS('http://www.w3.org/2000/xmlns/', $nsprefix) && + ($this->myDOMNode->ownerElement->getAttributeNS('http://www.w3.org/2000/xmlns/', $nsprefix) != $uri)) {//Remove namespace + $parent = $this->myDOMNode->ownerElement; + $parent->removeAttributeNode($this->myDOMNode); + $parent->setAttribute($this->myDOMNode->localName, $this->myDOMNode->nodeValue); + $this->myDOMNode = $parent->getAttributeNode($this->myDOMNode->localName); + return; + } + $this->myDOMNode->ownerElement->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:' . $nsprefix, $uri); + } + } + if ($this->myDOMNode->nodeType === XML_ATTRIBUTE_NODE) { + $parent = $this->myDOMNode->ownerElement; + $parent->removeAttributeNode($this->myDOMNode); + $parent->setAttributeNS($uri, $nsprefix . ':' . $this->myDOMNode->localName, $this->myDOMNode->nodeValue); + $this->myDOMNode = $parent->getAttributeNodeNS($uri, $this->myDOMNode->localName); + } elseif ($this->myDOMNode->nodeType === XML_ELEMENT_NODE) { + $NewNode = $this->myDOMNode->ownerDocument->createElementNS($uri, $nsprefix . ':' . $this->myDOMNode->localName); + foreach ($this->myDOMNode->attributes as $n) + $NewNode->appendChild($n->cloneNode(true)); + foreach ($this->myDOMNode->childNodes as $n) + $NewNode->appendChild($n->cloneNode(true)); + $xpath = new DOMXPath($this->myDOMNode->ownerDocument); + $myDOMNodeList = $xpath->query('namespace::*[name()!="xml"]', $this->myDOMNode); //Add old namespaces + foreach ($myDOMNodeList as $n) + $NewNode->setAttributeNS('http://www.w3.org/2000/xmlns/', $n->nodeName, $n->nodeValue); + $this->myDOMNode->parentNode->replaceChild($NewNode, $this->myDOMNode); + $this->myDOMNode = $NewNode; + } + } + + function unlink_node() { + if ($this->myDOMNode->parentNode != null) { + if ($this->myDOMNode->nodeType === XML_ATTRIBUTE_NODE) + $this->myDOMNode->parentNode->removeAttributeNode($this->myDOMNode); + else + $this->myDOMNode->parentNode->removeChild($this->myDOMNode); + } + } + + //To import DOMNode from another DOMDocument + protected function _importNode($newnode) { + return $this->myOwnerDocument === $newnode->myOwnerDocument ? $newnode->myDOMNode : $this->myOwnerDocument->myDOMNode->importNode($newnode->myDOMNode, true); + } + + static function _newDOMElement($aDOMNode, $aOwnerDocument) {//Check the PHP5 DOMNode before creating a new associated PHP4 DOMNode wrapper + if ($aDOMNode == null) + return null; + switch ($aDOMNode->nodeType) { + case XML_ELEMENT_NODE: return new php4DOMElement($aDOMNode, $aOwnerDocument); + case XML_TEXT_NODE: return new php4DOMText($aDOMNode, $aOwnerDocument); + case XML_ATTRIBUTE_NODE: return new php4DOMAttr($aDOMNode, $aOwnerDocument); + default: return new php4DOMNode($aDOMNode, $aOwnerDocument); + } + } + +} + +class php4DOMText extends php4DOMNode { + + function __get($name) { + if ($name === 'tagname') + return '#text'; + else + return parent::__get($name); + } + + function tagname() { + return '#text'; + } + +} + +if (!defined('XPATH_NODESET')) { + define('XPATH_UNDEFINED', 0); + define('XPATH_NODESET', 1); +} + +class php4DOMNodelist { + + private $myDOMNodelist; + public $nodeset; + public $type; + + function __construct($aDOMNodelist, $aOwnerDocument) { + $this->myDOMNodelist = $aDOMNodelist; + $this->nodeset = array(); + $i = 0; + if (isset($this->myDOMNodelist)) { + $this->type = XPATH_NODESET; + while ($node = $this->myDOMNodelist->item($i++)) + $this->nodeset[] = php4DOMNode::_newDOMElement($node, $aOwnerDocument); + } else + $this->type = XPATH_UNDEFINED; + } + +} + +class php4DOMXPath { + + public $myDOMXPath; + private $myOwnerDocument; + + function __construct($dom_document) { + $this->myOwnerDocument = $dom_document->myOwnerDocument; + $this->myDOMXPath = new DOMXPath($this->myOwnerDocument->myDOMNode); + } + + function xpath_eval($eval_str, $contextnode = null) { + return isset($contextnode) ? new php4DOMNodelist($this->myDOMXPath->query($eval_str, $contextnode->myDOMNode), $this->myOwnerDocument) : new php4DOMNodelist($this->myDOMXPath->query($eval_str), $this->myOwnerDocument); + } + + function xpath_register_ns($prefix, $namespaceURI) { + return $this->myDOMXPath->registerNamespace($prefix, $namespaceURI); + } + +} + +if (extension_loaded('xsl')) {//See also: http://alexandre.alapetite.net/doc-alex/xslt-php4-php5/ + + function domxml_xslt_stylesheet($xslstring) { + return new php4DomXsltStylesheet(DOMDocument::loadXML($xslstring)); + } + + function domxml_xslt_stylesheet_doc($dom_document) { + return new php4DomXsltStylesheet($dom_document); + } + + function domxml_xslt_stylesheet_file($xslfile) { + return new php4DomXsltStylesheet(DOMDocument::load($xslfile)); + } + + class php4DomXsltStylesheet { + + private $myxsltProcessor; + + function __construct($dom_document) { + $this->myxsltProcessor = new xsltProcessor(); + $this->myxsltProcessor->importStyleSheet($dom_document); + } + + function process($dom_document, $xslt_parameters = array(), $param_is_xpath = false) { + foreach ($xslt_parameters as $param => $value) + $this->myxsltProcessor->setParameter('', $param, $value); + $myphp4DOMDocument = new php4DOMDocument(); + $myphp4DOMDocument->myDOMNode = $this->myxsltProcessor->transformToDoc($dom_document->myDOMNode); + return $myphp4DOMDocument; + } + + function result_dump_file($dom_document, $filename) { + $html = $dom_document->myDOMNode->saveHTML(); + file_put_contents($filename, $html); + return $html; + } + + function result_dump_mem($dom_document) { + return $dom_document->myDOMNode->saveHTML(); + } + + } + +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.encoding.php b/branches/conlite20/conlite/includes/functions.encoding.php new file mode 100644 index 0000000..bdbd964 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.encoding.php @@ -0,0 +1,95 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-26, Frederic Schneider, add security fix + * modified 2008-11-12, Andreas Lindner, add function htmlentities_iso88592 + * + * $Id: functions.encoding.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * Returns encoding for language with ID $iLang (global $lang in contenido style). + * The parameter $oDb has to be an instance of DB_ConLite (global $db in con) and + * $cfg is the equivalent to global $cfg array in contenido. + * If no encoding is found or any parameter is not valid, the function will return + * false, otherwise the encoding as string like it is stored in database. + * modified 18.03.2008 - Removed special mySQl behaviour (using db object instead) Timo Trautmann + * + * @param DB_ConLite $oDb + * @param int $iLang + * @param array $cfg + * @return string + */ +function getEncodingByLanguage (&$oDb, $iLang, $cfg) { + $sResult = false; + + if (!is_object($oDb)) { + $oDb = new DB_ConLite(); + } + + $iLang = (int) $iLang; + if ($iLang > 0 && is_array($cfg) && is_array($cfg['tab'])) { + // prepare query + $sQuery = " + SELECT + encoding + FROM + " . $cfg["tab"]["lang"] . " + WHERE + idlang = " . Contenido_Security::toInteger($iLang); + + if ($oDb->query($sQuery)) { + if ($oDb->next_record()) { + $sResult = trim($oDb->f('encoding')); + } + } + } + + return $sResult; +} + +/** + * Special version of htmlentites for iso-8859-2 + * Returns transformed string + * + * @param string $sInput + * @return string + */ + +function htmlentities_iso88592 ($sInput = '') { + + $arrEntities_pl = array('ê', 'ó', '±', '¶', '³', '¿', '¼', 'æ', 'ñ', 'Ê', 'Ó', '¡', '¦', '£', '¬', '¯', 'Æ', 'Ñ'); + $arrEntities = clGetHtmlTranslationTable(HTML_ENTITIES); + $arrEntities = array_diff($arrEntities, $arrEntities_pl); + + return strtr($sInput, $arrEntities); + +} + +?> diff --git a/branches/conlite20/conlite/includes/functions.file.php b/branches/conlite20/conlite/includes/functions.file.php new file mode 100644 index 0000000..2341f19 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.file.php @@ -0,0 +1,369 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release >= 4.6 + * + * {@internal + * created 2004-07-13 + * modified 2008-06-26, Frederic Schneider, add security fix + * modified 2008-08-14, Timo.Trautmann added file_information functions for storing file meta indormations + * modified 2009-10-23, Murat Purc, removed deprecated function (PHP 5.3 ready), added new function fileValidateFilename() and commented code + * + * $Id: functions.file.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * Function removes file meta information from database (used when a file is deleted) + * + * @author Timo Trautmann + * @param integer $iIdClient - id of client which contains this file + * @param string $sFilename - name of corresponding file + * @param string $sType - type of file (css, js or templates) + * @param object $oDb - contenido database object + * + * @return void + */ +function removeFileInformation($iIdClient, $sFilename, $sType, $oDb) { + global $cfg; + + if (!isset($oDb) || !is_object($oDb)) { + $oDb = new DB_ConLite(); + } + + $iIdClient = Contenido_Security::toInteger($iIdClient); + $sFilename = Contenido_Security::filter((string) $sFilename, $oDb); + $sType = Contenido_Security::filter((string) $sType, $oDb); + + $sSql = "DELETE FROM `".$cfg["tab"]["file_information"]."` WHERE idclient=$iIdClient AND + filename='$sFilename' AND + type='$sType';"; + $oDb->query($sSql); + $oDb->free(); +} + +/** + * Function returns file meta information from database (used when files were versionned or description is displayed) + * + * @author Timo Trautmann + * @param integer $iIdClient - id of client which contains this file + * @param string $sFilename - name of corresponding file + * @param string $sType - type of file (css, js or templates) + * @param object $oDb - contenido database object + * + * @return array Indexes: + * idsfi - Primary key of database record + * created - Datetime when file was created + * lastmodified - Datetime when file was last modified + * author - Author of file (Contenido Backend User) + * modifiedby - Last modifier of file (Contenido Backend User) + * description - Description which was inserted for this file + * + */ +function getFileInformation ($iIdClient, $sFilename, $sType, $oDb) { + global $cfg; + + if (!isset($oDb) || !is_object($oDb)) { + $oDb = new DB_ConLite(); + } + + $iIdClient = Contenido_Security::toInteger($iIdClient); + $sFilename = Contenido_Security::filter((string) $sFilename, $oDb); + $sType = Contenido_Security::filter((string) $sType, $oDb); + + $aFileInformation = array(); + $sSql = "SELECT * FROM `".$cfg["tab"]["file_information"]."` WHERE idclient=$iIdClient AND + filename='$sFilename' AND + type='$sType';"; + $oDb->query($sSql); + if ($oDb->num_rows() > 0) { + $oDb->next_record(); + $aFileInformation['idsfi'] = $oDb->f('idsfi'); + $aFileInformation['created'] = $oDb->f('created'); + $aFileInformation['lastmodified'] = $oDb->f('lastmodified'); + $aFileInformation['author'] = Contenido_Security::unFilter($oDb->f('author')); + $aFileInformation['modifiedby'] = $oDb->f('modifiedby'); + $aFileInformation['description'] = Contenido_Security::unFilter($oDb->f('description')); + } + $oDb->free(); + + return $aFileInformation; +} + +/** + * Function updates file meta information (used when files were created or edited). + * It creates new database record for file meta informations if database record does + * not exist. Otherwise, existing record will be updated + * + * @author Timo Trautmann + * @param integer $iIdClient - id of client which contains this file + * @param string $sFilename - name of corresponding file + * @param string $sType - type of file (css, js or templates) + * @param string $sAuthor - author of file + * @param string $sDescription - description of file + * @param object $oDb - contenido database object + * @param string $sFilenameNew - new filename if filename was changed (optional) + * + * @return void + */ +function updateFileInformation($iIdClient, $sFilename, $sType, $sAuthor, $sDescription, $oDb, $sFilenameNew = '') { + global $cfg; + + if (!isset($oDb) || !is_object($oDb)) { + $oDb = new DB_ConLite(); + } + + if ($sFilenameNew == '') { + $sFilenameNew = $sFilename; + } + + $iIdClient = Contenido_Security::toInteger($iIdClient); + $sFilename = Contenido_Security::filter((string) $sFilename, $oDb); + $sType = Contenido_Security::filter((string) $sType, $oDb); + $sDescription = Contenido_Security::filter((string) stripslashes($sDescription), $oDb); + $sAuthor = Contenido_Security::filter((string) $sAuthor, $oDb); + + $sSql = "SELECT * from `".$cfg["tab"]["file_information"]."` WHERE idclient=$iIdClient AND + filename='$sFilename' AND + type='$sType';"; + $oDb->query($sSql); + if ($oDb->num_rows() == 0) { + $iNextId = $oDb->nextid('con_style_file_information'); + $sSql = "INSERT INTO `".$cfg["tab"]["file_information"]."` ( `idsfi` , + `idclient` , + `type` , + `filename` , + `created` , + `lastmodified` , + `author` , + `modifiedby` , + `description` ) + VALUES ( + $iNextId , + $iIdClient, + '$sType', + '$sFilenameNew', + NOW(), + '1000-01-01 00:00:00', + '$sAuthor', + '', + '$sDescription' + );"; + } else { + $sSql = "UPDATE `".$cfg["tab"]["file_information"]."` SET `lastmodified` = NOW(), + `modifiedby` = '$sAuthor', + `description` = '$sDescription', + `filename` = '$sFilenameNew' + + WHERE idclient=$iIdClient AND + filename='$sFilename' AND + type='$sType';"; + } + + $oDb->free(); + $oDb->query($sSql); + $oDb->free(); +} + + +/** + * Writes passed data into a file using binary mode. + * + * Exits the script, if file could not opened! + * + * @param string $filename The file to write the content + * @param string $sCode File content to write + * @param string $path Path to the file + * @return (string|void) Either content of file o nothing + */ +function fileEdit($filename, $sCode, $path) { + global $notification; + + // FIXME: fileValidateFilename does also the validation but display another message! + if (strlen(trim($filename)) == 0) { + $notification->displayNotification("error", i18n("Please insert filename.")); + return false; + } + + fileValidateFilename($filename, true); + + // FIXME: Should be replaced against file_put_contents($path . $filename, FILE_BINARY | LOCK_EX | FILE_APPEND) + + if (is_writable($path.$filename)) { + if (strlen(stripslashes(trim($sCode))) > 0) { + # open file + if (!$handle = fopen($path.$filename, "wb+")) { + $notification->displayNotification("error", sprintf(i18n("Could not open file %s"), $path.$filename)); + exit; + } + # write file + if (!fwrite($handle, stripslashes($sCode))) { + $notification->displayNotification("error", sprintf(i18n("Could not write file %s"), $path.$filename)); + exit; + } + + fclose($handle); + return true; + + } else { + return false; + } + } else { + $notification->displayNotification("error", sprintf(i18n("%s is not writable"), $path.$filename)); + exit; + } +} + + +/** + * Reads content of file into memory using binary mode and returns it back. + * + * Exits the script, if file could not opened! + * + * @param string $filename The file to get the content + * @param string $path Path to the file + * @return (string|void) Either content of file o nothing + */ +function getFileContent($filename, $path) { + global $notification; + + // FIXME: Should be replaced against file_get_contents($path . $filename, FILE_BINARY) + + if (!$handle = fopen($path.$filename, "rb")) { + $notification->displayNotification("error", sprintf(i18n("Can not open file%s "), $path.$filename)); + exit; + } + + do { + $_data = fread($handle, 4096); + if (strlen($_data) == 0) { + break; + } + $sFileContents .= $_data; + } while(true); + + fclose($handle); + return $sFileContents; +} + + +/** + * Returns the filetype (extension). + * + * @param string $filename The file to get the type + * @return string Filetype + */ +function getFileType($filename) { + $aFileName = explode(".", $filename); + return $aFileName[count($aFileName) - 1]; +} + + +/** + * Creates a file. + * + * Exits the script, if filename is not valid or creation (touch or chmod) fails! + * + * @param string $filename The file to create + * @param string $path Path to the file + * @return (void|bool) Either true on success or nothing + */ +function createFile($filename, $path) { + global $notification; + + fileValidateFilename($filename, true); + + # create the file + if (touch($path.$filename)) { + # change file access permission + if(chmod ($path.$filename, 0777)) { + return true; + } else { + $notification->displayNotification("error", $path.$filename." ".i18n("Unable to change file access permission.")); + exit; + } + } else { + $notification->displayNotification("error", sprintf(i18n("Unable to create file %s"), $path.$filename)); + exit; + } +} + + +/** + * Renames a existing file. + * + * Exits the script, if new filename is not valid or renaming fails! + * + * @param string $sOldFile Old filename + * @param string $sNewFile New filename + * @param string $path Path to the file + * @return (void|string) Either new filename or nothing + */ +function renameFile($sOldFile, $sNewFile, $path) { + global $notification; + + fileValidateFilename($sNewFile, true); + + if (is_writable($path.$sOldFile)) { + # rename file + if (rename($path.$sOldFile, $path.$sNewFile)) { + return $sNewFile; + } else { + $notification->displayNotification("error", sprintf(i18n("Can not rename file %s"),$path.$sOldFile)); + exit; + } + } else { + $notification->displayNotification("error", sprintf(i18n("%s is not writable"), $path.$sOldFile)); + exit; + } +} + + +/** + * Validates passed filename. Filename can contain alphanumeric characters, dot, underscore or a hyphen. + * + * Exits the script, if second parameter is set to true and validation fails! + * + * @param string $filename The filename to validate + * @param bool $notifyAndExitOnFailure Flag to display notification and to exit further script + * execution, ifd validation fails + * @return (void|bool) Either validation result or nothing (depends on second parameter) + */ +function fileValidateFilename($filename, $notifyAndExitOnFailure = true) { + global $notification; + + if (preg_match('/[^a-z0-9._-]/i', $filename)) { + // validation failure... + if ($notifyAndExitOnFailure == true) { + // display notification and exit + $notification->displayNotification('error', i18n('Wrong filename.')); + exit; + } + return false; + } + return true; +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.forms.php b/branches/conlite20/conlite/includes/functions.forms.php new file mode 100644 index 0000000..cd6df11 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.forms.php @@ -0,0 +1,98 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-20 + * modified 2008-06-26, Frederic Schneider, add security fix + * + * $Id: functions.forms.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * Generates textial Input Form elements + * + * @param $type Either "text", "password" or "textbox" + * @param $name Name of the field + * @param $initvalue Init value of the field + * @param $size Size of the field + * @param $maxlen Maximum length of the field + * @author Timo A. Hummel + * @copyright four for business AG + * + * @return Generated field code + * + */ +function formGenerateField ($type, $name, $initvalue, $width, $maxlen) +{ + switch ($type) + { + case "text": + return (''); + break; + case "password": + return (''); + break; + case "textbox": + return (''); + break; + default: + return(''); + break; + } + + +} + +/** + * Generates check box elements + * + * @param $name Name of the checkbox + * @param $value Value of the checkbox + * @param $checked Initially checked? + * @author Timo A. Hummel + * @copyright four for business AG + * + * @return Generated field code + * + */ +function formGenerateCheckbox ($name, $value, $checked, $caption = "") +{ + if (strlen($caption) > 0) + { + $label = ''; + } else { + $label = ""; + } + + if ($checked) { + return(''.$label); + } else { + return(''.$label); + } + +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.general.php b/branches/conlite20/conlite/includes/functions.general.php new file mode 100644 index 0000000..2da8d38 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.general.php @@ -0,0 +1,2238 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * $Id: functions.general.php 378 2015-11-09 20:01:25Z oldperl $: + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * Extracts the available content-types from the database + * + * Creates an array $a_content[type][number] = content string + * f.e. $a_content['CMS_HTML'][1] = content string + * Same for array $a_description + * + * @param int $idartlang Language specific ID of the arcticle + * @return void + * + * @author Jan Lengowski + * @copyright four for business AG + */ +function getAvailableContentTypes($idartlang) { + global $db, $cfg, $a_content, $a_description; + + $sql = "SELECT + * + FROM + " . $cfg["tab"]["content"] . " AS a, + " . $cfg["tab"]["art_lang"] . " AS b, + " . $cfg["tab"]["type"] . " AS c + WHERE + a.idtype = c.idtype AND + a.idartlang = b.idartlang AND + b.idartlang = '" . Contenido_Security::toInteger($idartlang) . "'"; + + $db->query($sql); + + while ($db->next_record()) { + $a_content[$db->f("type")][$db->f("typeid")] = urldecode($db->f("value")); + $a_description[$db->f("type")][$db->f("typeid")] = i18n($db->f("description")); + } +} + +/** + * Checks if an article is assigned to multiple categories + * + * @param int $idart Article-Id + * @return bool Article assigned to multiple categories + */ +function isArtInMultipleUse($idart) { + global $cfg, $client; + + $db = new DB_ConLite; + $sql = "SELECT idart FROM " . $cfg["tab"]["cat_art"] . " WHERE idart = '" . Contenido_Security::toInteger($idart) . "'"; + $db->query($sql); + + return ($db->affected_rows() > 1); +} + +/** + * Checks if a value is alphanumeric + * + * @param mixed $test Value to test + * @param bool $umlauts [Use german Umlaute] Optional + * @return bool Value is alphanumeric + */ +function is_alphanumeric($test, $umlauts = true) { + + if ($umlauts == true) { + $match = "/^[a-z0-9������� ]+$/i"; + } else { + $match = "/^[a-z0-9 ]+$/i"; + } + + return (preg_match($match, $test)); +} + +/** + * Returns multi-language month name (canonical) by its numeric value + * + * @param int $month + * @return string + */ +function getCanonicalMonth($month) { + switch ($month) { + case 1 : + return (i18n("January")); + break; + case 2 : + return (i18n("February")); + break; + case 3 : + return (i18n("March")); + break; + case 4 : + return (i18n("April")); + break; + case 5 : + return (i18n("May")); + break; + case 6 : + return (i18n("June")); + break; + case 7 : + return (i18n("July")); + break; + case 8 : + return (i18n("August")); + break; + case 9 : + return (i18n("September")); + break; + case 10 : + return (i18n("October")); + break; + case 11 : + return (i18n("November")); + break; + case 12 : + return (i18n("December")); + break; + } +} + +/** + * Get multi-language day + * + * @param int $iDay The day number of date(w) + * @return string Dayname of current language + */ +function getCanonicalDay($iDay) { + switch ($iDay) { + case 1 : + return (i18n("Monday")); + break; + case 2 : + return (i18n("Tuesday")); + break; + case 3 : + return (i18n("Wednesday")); + break; + case 4 : + return (i18n("Thursday")); + break; + case 5 : + return (i18n("Friday")); + break; + case 6 : + return (i18n("Saterday")); + break; + case 0 : + return (i18n("Sunday")); + break; + default: break; + } +} + +/** + * Returns the id of passed area + * + * @param mixed $area Area name + * @return int + */ +function getIDForArea($area) { + global $client, $lang, $cfg, $sess; + + $db = new DB_ConLite; + + if (!is_numeric($area)) { + $sql = "SELECT + idarea + FROM + " . $cfg["tab"]["area"] . " + WHERE + name = '" . Contenido_Security::escapeDB($area, $db) . "'"; + + $db->query($sql); + if ($db->next_record()) { + $area = $db->f(0); + } + } + + return $area; +} + +/** + * Returns the parent id of passed area + * + * @param mixed $area + * @return int + */ +function getParentAreaId($area) { + global $client, $lang, $cfg, $sess; + + $db = new DB_ConLite; + + if (is_numeric($area)) { + $sql = "SELECT + b.name + FROM + " . $cfg["tab"]["area"] . " AS a, + " . $cfg["tab"]["area"] . " AS b + WHERE + a.idarea = '" . Contenido_Security::toInteger($area) . "' AND + b.name = a.parent_id"; + } else { + $sql = "SELECT + b.name + FROM + " . $cfg["tab"]["area"] . " AS a, + " . $cfg["tab"]["area"] . " AS b + WHERE + a.name = '" . Contenido_Security::escapeDB($area, $db) . "' AND + b.name = a.parent_id"; + } + $db->query($sql); + + if ($db->next_record()) { + return $db->f(0); + } else { + return $area; + } +} + +/** + * Write JavaScript to mark + * + * @param int $menuitem Which menuitem to mark + * @param bool $return Return or echo script + * + * @author Jan Lengowski + * @copyright four for business AG + */ +function markSubMenuItem($menuitem, $return = false) { + $str = ''; + + if ($return) { + return $str; + } else { + echo $str; + } +} + +/** + * Redirect to main area + * + * @param bool $send Redirect Yes/No + * + * @author Jan Lengowski + * @copyright four for business AG + */ +function backToMainArea($send) { + if ($send) { + /* Global vars */ + global $area, $cfg, $db, $sess, $idart, $idcat, $idartlang, $idcatart, $frame; + + /* Get main area */ + $sql = "SELECT + a.name + FROM + " . $cfg["tab"]["area"] . " AS a, + " . $cfg["tab"]["area"] . " AS b + WHERE + b.name = '" . Contenido_Security::escapeDB($area, $db) . "' AND + b.parent_id = a.name"; + + $db->query($sql); + $db->next_record(); + + $parent = $db->f("name"); + + /* Create url string */ + $url_str = 'main.php?' . 'area=' . $parent . '&' . 'idcat=' . $idcat . '&' . 'idart=' . $idart . '&' . 'idartlang=' . $idartlang . '&' . 'idcatart=' . $idcatart . '&' . 'force=1&' . 'frame=' . $frame; + + $url = $sess->url($url_str); + + /* Redirect */ + header("location: $url"); + } +} + +function showLocation($area) { + global $db; + global $cfgPath, $lngArea; + global $cfg; + global $belang; + + //Create new xml Class and load the file + + $xml = new XML_doc; + if ($xml->load($cfg['path']['xml'] . $cfg['lang'][$belang]) == false) { + if ($xml->load($cfg['path']['xml'] . 'lang_en_US.xml') == false) { + die("Unable to load any XML language file"); + } + } + + $sql = "SELECT location + FROM " . $cfg["tab"]["area"] . " as A, " . $cfg["tab"]["nav_sub"] . " as B + Where A.name='" . Contenido_Security::escapeDB($area, $db) . "' AND A.idarea=B.idarea AND A.online='1'"; + + $db->query($sql); + if ($db->next_record()) { + + echo "" . $xml->valueOf($db->f("location")) . ""; + } else { + + $sql = "SELECT parent_id + FROM " . $cfg["tab"]["area"] . " + WHERE name='" . Contenido_Security::escapeDB($area, $db) . "' AND online='1'"; + $db->query($sql); + $db->next_record(); + $parent = $db->f("parent_id"); + + $sql = "SELECT location + FROM " . $cfg["tab"]["area"] . " as A, " . $cfg["tab"]["nav_sub"] . " as B + Where A.name='" . Contenido_Security::escapeDB($parent, $db) . "' AND A.idarea = B.idarea AND A.online='1'"; + + $db->query($sql); + $db->next_record(); + echo "" . $xml->valueOf($db->f("location")) . $lngArea[$area] . ""; + } +} + +function showTable($tablename) { + global $db; + + $sql = "SELECT * FROM $tablename"; + $db->query($sql); + while ($db->next_record()) { + while (list ($key, $value) = each($db->Record)) { + print (is_string($key) ? "$key: $value | " : ""); + } + print ("
"); + } +} + +/** + * Get languages for given client + * + * @deprecated since ConLite version 2.0.0, use method in class cApiLanguageCollection instead + * + * @param int $client + * @return array Array of language ids + */ +function getLanguagesByClient($client) { + $oClLangs = new cApiLanguageCollection(); + return $oClLangs->getClientLanguages($client); +} + +/** + * Returns all languages (language ids and names) of an client + * + * @param int $client + * @return array List of languages where the key is the language id and value the language name + */ +function getLanguageNamesByClient($client) { + global $db; + global $cfg; + + $sql = "SELECT + a.idlang AS idlang, + b.name AS name + FROM + " . $cfg["tab"]["clients_lang"] . " AS a, + " . $cfg["tab"]["lang"] . " AS b + WHERE + idclient='" . Contenido_Security::toInteger($client) . "' AND + a.idlang = b.idlang + ORDER BY + idlang ASC"; + + $db->query($sql); + while ($db->next_record()) { + $list[$db->f("idlang")] = $db->f("name"); + } + + return $list; +} + +function set_magic_quotes_gpc(&$code) { + global $cfg; + + if (!$cfg['simulate_magic_quotes']) { + if (get_magic_quotes_gpc() == 0) { + $code = addslashes($code); + } + } +} + +/** + * Returns a list with all clients and languages. + * + * @return array Indexed array where the value is an assoziative array as follows: + * - $arr[0]['idlang'] + * - $arr[0]['langname'] + * - $arr[0]['idclient'] + * - $arr[0]['clientname'] + */ +function getAllClientsAndLanguages() { + global $db, $cfg; + + $sql = "SELECT + a.idlang as idlang, + a.name as langname, + b.name as clientname, + b.idclient as idclient + FROM + " . $cfg["tab"]["lang"] . " as a, + " . $cfg["tab"]["clients_lang"] . " as c, + " . $cfg["tab"]["clients"] . " as b + WHERE + a.idlang = c.idlang AND + c.idclient = b.idclient"; + $db->query($sql); + + $aRs = array(); + while ($db->next_record()) { + $aRs[] = array( + 'idlang' => $db->f('idlang'), + 'langname' => $db->f('langname'), + 'idclient' => $db->f('idclient'), + 'clientname' => $db->f('clientname'), + ); + } + return $aRs; +} + +function fakeheader($time) { + global $con_time0; + if (!isset($con_time0)) { + $con_time0 = $time; + } + + if ($time >= $con_time0 + 1000) { + $con_time0 = $time; + header('X-pmaPing: Pong'); + } // end if +} + +function recursive_copy($from_path, $to_path) { + $oldumask = umask(0); + if (mkdir($to_path, 0777)) { + umask($oldumask); + $old_path = getcwd(); + $this_path = getcwd(); + if (is_dir($from_path)) { + chdir($from_path); + $myhandle = opendir('.'); + + while (($myfile = readdir($myhandle)) !== false) { + if (($myfile != ".") && ($myfile != "..")) { + if (is_dir($myfile)) { + recursive_copy($from_path . $myfile . "/", $to_path . $myfile . "/"); + chdir($from_path); + } else if (file_exists($myfile)) { + copy($from_path . $myfile, $to_path . $myfile); + } + } + } + closedir($myhandle); + } + chdir($old_path); + return true; + } else { + umask($oldumask); + return false; + } +} + +function getmicrotime() { + list ($usec, $sec) = explode(" ", microtime()); + return ((float) $usec + (float) $sec); +} + +/* Small hack to clean up unused sessions. + As we are probably soon rewriting the + session management, this hack is OK. */ + +function cleanupSessions() { + global $cfg; + + $db = new DB_ConLite; + $db2 = new DB_ConLite; + + $col = new InUseCollection; + + $temp = new Contenido_Challenge_Crypt_Auth; + + $maxdate = date("YmdHis", time() - ($temp->lifetime * 60)); + + /* Expire old sessions */ + $sql = "SELECT changed, sid FROM " . $cfg["tab"]["phplib_active_sessions"]; + $db->query($sql); + + while ($db->next_record()) { + if ($db->f("changed") < $maxdate) { + $sql = "DELETE FROM " . $cfg["tab"]["phplib_active_sessions"] . " WHERE sid = '" . Contenido_Security::escapeDB($db->f("sid"), $db2) . "'"; + $db2->query($sql); + $col->removeSessionMarks($db->f("sid")); + } + } + + /* Expire invalid InUse-Entries */ + $col->select(); + + while ($c = $col->next()) { + $sql = "SELECT sid FROM " . $cfg["tab"]["phplib_active_sessions"] . " WHERE sid = '" . Contenido_Security::escapeDB($c->get("session"), $db2) . "'"; + $db2->query($sql); + if (!$db2->next_record()) { + $col->delete($c->get("idinuse")); + } + } +} + +function isGroup($uid) { + $users = new User; + + if ($users->loadUserByUserID($uid) == false) { + return true; + } else { + return false; + } +} + +function getGroupOrUserName($uid) { + $users = new User; + + if ($users->loadUserByUserID($uid) === false) { + $groups = new Group; + /* Yes, it's a group. Let's try to load the group members! */ + if ($groups->loadGroupByGroupID($uid) === false) { + return false; + } else { + return substr($groups->getField("groupname"), 4); + } + } else { + return $users->getField("realname"); + } +} + +/** + * getPhpModuleInfo - parses phpinfo() output + * + * parses phpinfo() output + * (1) get informations for a specific module (parameter $modulname) + * (2) get informations for all modules (no parameter for $modulname needed) + * + * if a specified extension doesn't exists or isn't activated an array will be returned: + * Array + * ( + * [error] => extension is not available + * ) + * + * + * to get specified information on one module use (1): + * getPhpModuleInfo($moduleName = 'gd'); + * + * to get all informations use (2): + * getPhpModuleInfo($moduleName); + * + * + * EXAMPLE OUTPUT (1): + * Array + * ( + * [GD Support] => Array + * ( + * [0] => enabled + * ) + * ... + * ) + * + * + * EXAMPLE OUTPUT (2): + * Array + * ( + * [yp] => Array + * ( + * [YP Support] => Array + * ( + * [0] => enabled + * ) + * + * ) + * ... + * } + * + * foreach ($moduleSettings as $setting => $value) + * $setting contains the modul settings + * $value contains the settings as an array ($value[0] => Local Value && $value[1] => Master Value) + * + * @param $modulName string specify modul name or if not get all settings + * + * @return array see above for example + * @author Marco Jahn + */ +function getPhpModuleInfo($moduleName) { + $moduleSettings = array(); + ob_start(); + phpinfo(INFO_MODULES); // get information vor modules + $string = ob_get_contents(); + ob_end_clean(); + + $pieces = explode("]*)\">/", $val, $sub_key); + + // perform a regular expression match on tabs with 2 columns + preg_match_all("/]*> + ]*>(.*)<\/td> + ]*>(.*)<\/td>/Ux", $val, $sub); + + // perform a regular expression match on tabs with 3 columns + preg_match_all("/]*> + ]*>(.*)<\/td> + ]*>(.*)<\/td> + ]*>(.*)<\/td>/Ux", $val, $sub_ext); + + if (isset($moduleName)) { // if $moduleName is specified + if (extension_loaded($moduleName)) { //check if specified extension exists or is loaded + if (!empty($sub_key[1]) && $sub_key[1] == $moduleName) { //create array only for specified $moduleName + foreach ($sub[0] as $key => $val) { + $moduleSettings[strip_tags($sub[1][$key])] = array(strip_tags($sub[2][$key])); + } + } + } else { //specified extension is not loaded or doesn't exists + $moduleSettings['error'] = 'extension is not available'; + } + } else { // $moduleName isn't specified => get everything + foreach ($sub[0] as $key => $val) { + $moduleSettings[$sub_key[1]][strip_tags($sub[1][$key])] = array(strip_tags($sub[2][$key])); + } + + foreach ($sub_ext[0] as $key => $val) { + $moduleSettings[$sub_key[1]][strip_tags($sub_ext[1][$key])] = array(strip_tags($sub_ext[2][$key]), strip_tags($sub_ext[3][$key])); + } + } + } + return $moduleSettings; +} + +function isValidMail($sEMail, $bStrict = false) { + if ($bStrict) { + // HerrB (14.02.2008), code posted by Calvini + // See http://www.contenido.org/forum/viewtopic.php?p=106612#106612 + // Note, that IDNs are currently only supported if given as punycode + // "Strict" just means "95% real-world match", + // e.g. a.b@c.de, a-b@c.de, a_b@c.de and some special chars (not \n, ;) + // See also http://www.php.net/manual/en/function.eregi.php#52458, + // but note http://www.php.net/manual/en/function.eregi.php#55215 + // or just kill yourself, as being dumb to even try to validate an + // email address: http://www.php.net/manual/en/function.preg-match.php#76615 + + $sLocalChar = '-a-z0-9_!#\\$&\'\\*\\+\\/=\\?\\^`\\{\\|\\}~'; + $sLocalRegEx = '[' . $sLocalChar . '](\\.*[' . $sLocalChar . '])*'; + $sDomainChar = 'a-z���'; + $sDomainRegEx = $sDomainRegEx = '(([' . $sDomainChar . ']|[' . $sDomainChar . '][' . $sDomainChar . '0-9-]{0,61}[' . $sDomainChar . '0-9])\\.)+'; + $sTLDChar = 'a-z'; + $sTLDRegEx = '[' . $sTLDChar . ']{2,}'; + return preg_match('/^' . $sLocalRegEx . '@' . $sDomainRegEx . $sTLDRegEx . '$/i', $sEMail); + } else { + return preg_match("/^[0-9a-z]([-_.]*[0-9a-z]*)*@[a-z0-9-]+\.([a-z])/i", $sEMail); + } +} + +function htmldecode($string) { + $trans_tbl = clGetHtmlTranslationTable(HTML_ENTITIES); + $trans_tbl = array_flip($trans_tbl); + $ret = strtr($string, $trans_tbl); + + return $ret; +} + +/** + * build or rebuild array $cfgClient + * + * @global array $cfgClient + * @global int $errsite_idcat + * @global int $errsite_idart + * @global DB_ConLite $db + * @global array $cfg + */ +function rereadClients() { + global $cfgClient; + global $errsite_idcat; + global $errsite_idart; + global $db; + global $cfg; + + if (!is_object($db)) { + $db = new DB_ConLite(); + } + + if (!is_array($cfgClient)) { + $cfgClient = array(); + } + + $sql = "SELECT + name, + idclient, + frontendpath, + htmlpath, + errsite_cat, + errsite_art + FROM + " . $cfg["tab"]["clients"]; + + $db->query($sql); + + if ($db->affected_rows() <= 0) { + return; + } + while ($db->next_record()) { + $cfgClient["set"] = "set"; + $cfgClient[$db->f("idclient")]["name"] = $db->f("name"); + + $cfgClient[$db->f("idclient")]["errsite"]["idcat"] = $db->f("errsite_cat"); + $cfgClient[$db->f("idclient")]["errsite"]["idart"] = $db->f("errsite_art"); + $cfgClient[$db->f("idclient")]["images"] = $db->f("htmlpath") . "images/"; + $cfgClient[$db->f("idclient")]["upload"] = "upload/"; + $cfgClient[$db->f("idclient")]["path"]["frontend"] = $db->f("frontendpath"); + $cfgClient[$db->f("idclient")]["path"]["htmlpath"] = $db->f("htmlpath"); + $cfgClient[$db->f("idclient")]["htmlpath"]["frontend"] = $cfgClient[$db->f("idclient")]["path"]["htmlpath"]; + $cfgClient[$db->f("idclient")]["upl"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "upload/"; + $cfgClient[$db->f("idclient")]["upl"]["htmlpath"] = $cfgClient[$db->f("idclient")]["htmlpath"]["frontend"] . "upload/"; + $cfgClient[$db->f("idclient")]["upl"]["frontendpath"] = "upload/"; + $cfgClient[$db->f("idclient")]["css"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "css/"; + $cfgClient[$db->f("idclient")]["js"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "js/"; + $cfgClient[$db->f("idclient")]["tpl"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "templates/"; + // added new path variables since v2.0.2 + $cfgClient[$db->f("idclient")]["cache"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "cache/"; + $cfgClient[$db->f("idclient")]["cache"]["frontendpath"] = "cache/"; + $cfgClient[$db->f("idclient")]["code"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "cache/code/"; + $cfgClient[$db->f("idclient")]["code"]["frontendpath"] = "cache/code/"; + + $cfgClient[$db->f("idclient")]["xml"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "xml/"; + $cfgClient[$db->f("idclient")]["xml"]["frontendpath"] = "xml/"; + $cfgClient[$db->f("idclient")]["template"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "templates/"; + $cfgClient[$db->f("idclient")]["template"]["frontendpath"] = "templates/"; + $cfgClient[$db->f("idclient")]["data"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "data/"; + $cfgClient[$db->f("idclient")]["module"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "data/modules/"; + $cfgClient[$db->f("idclient")]["module"]["frontendpath"] = "data/modules/"; + $cfgClient[$db->f("idclient")]["config"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "data/config/production/"; + $cfgClient[$db->f("idclient")]["config"]["frontendpath"] = "data/config/"; + $cfgClient[$db->f("idclient")]["layout"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "data/layouts/"; + $cfgClient[$db->f("idclient")]["layout"]["frontendpath"] = "data/layouts/"; + $cfgClient[$db->f("idclient")]["log"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "data/logs/"; + $cfgClient[$db->f("idclient")]["log"]["frontendpath"] = "data/logs/"; + $cfgClient[$db->f("idclient")]["version"]["path"] = $cfgClient[$db->f("idclient")]["path"]["frontend"] . "data/version/"; + $cfgClient[$db->f("idclient")]["version"]["frontendpath"] = "data/version/"; + + $errsite_idcat[$db->f("idclient")] = $db->f("errsite_cat"); + $errsite_idart[$db->f("idclient")] = $db->f("errsite_art"); + } +} + +/** + * Sets a system property entry + * + * @modified Timo Trautmann 22.02.2008 Support for editing name and type + * + * @param string $type The type of the item + * @param string $name The name of the item + * @param string $value The value of the item + * @param int $idsystemprop The sysprop id, use optional. If set it allows to modify type name and value + */ +function setSystemProperty($type, $name, $value, $idsystemprop = 0) { + global $cfg; + if ($type == "" || $name == "") { + return false; + } + + $idsystemprop = Contenido_Security::toInteger($idsystemprop); + $db_systemprop = new DB_ConLite(); + + if ($idsystemprop == 0) { + $sql = "SELECT idsystemprop FROM " . $cfg["tab"]["system_prop"] . " WHERE type='" . Contenido_Security::escapeDB($type, $db_systemprop) . "' AND name='" . Contenido_Security::escapeDB($name, $db_systemprop) . "'"; + } else { + $sql = "SELECT idsystemprop FROM " . $cfg["tab"]["system_prop"] . " WHERE idsystemprop='$idsystemprop'"; + } + + $db_systemprop->query($sql); + + if ($db_systemprop->num_rows() > 0) { + if ($idsystemprop == 0) { + $sql = "UPDATE " . $cfg["tab"]["system_prop"] . " SET value='" . Contenido_Security::filter($value, $db_systemprop) . "' WHERE type='" . Contenido_Security::escapeDB($type, $db_systemprop) . "' + AND name='" . Contenido_Security::escapeDB($name, $db_systemprop) . "'"; + } else { + $sql = "UPDATE " . $cfg["tab"]["system_prop"] . " SET value='" . Contenido_Security::filter($value, $db_systemprop) . "', type='" . Contenido_Security::escapeDB($type, $db_systemprop) . "', + name='" . Contenido_Security::escapeDB($name, $db_systemprop) . "' WHERE idsystemprop='$idsystemprop'"; + } + } else { + $idsystemprop = $db_systemprop->nextid($cfg["tab"]["system_prop"]); + $sql = "INSERT INTO " . $cfg["tab"]["system_prop"] . " (idsystemprop, value, type, name) VALUES ('$idsystemprop', '" . Contenido_Security::filter($value, $db_systemprop) . "', + '" . Contenido_Security::escapeDB($type, $db_systemprop) . "', '" . Contenido_Security::escapeDB($name, $db_systemprop) . "')"; + } + + $db_systemprop->query($sql); +} + +/** + * Remove a system property entry + * + * @param string $type The type of the item + * @param string $name The name of the item + */ +function deleteSystemProperty($type, $name) { + global $cfg; + + $db_systemprop = new DB_ConLite; + + $sql = "DELETE FROM " . $cfg["tab"]["system_prop"] . " WHERE type='" . Contenido_Security::escapeDB($type, $db_systemprop) . "' AND name='" . Contenido_Security::escapeDB($name, $db_systemprop) . "'"; + $db_systemprop->query($sql); +} + +/** + * Retrieves all available system properties. + * Array format: + * + * $array[$type][$name] = $value; + * + * @modified Timo Trautmann 22.02.2008 Support for editing name and type editing by primaray key idsystemprop + * if bGetPropId is set: + * $array[$type][$name][value] = $value; + * $array[$type][$name][idsystemprop] = $idsystemprop; + * + * @param boolean bGetPropId - if true special mode is activated which generates for each property a third array, which also contains idsystemprop value + * @return array + */ +function getSystemProperties($bGetPropId = 0) { + global $cfg; + + $db_systemprop = new DB_ConLite; + + $sql = "SELECT idsystemprop, type, name, value FROM " . $cfg["tab"]["system_prop"] . " ORDER BY type ASC, name ASC, value ASC"; + $db_systemprop->query($sql); + $results = array(); + + if ($bGetPropId) { + while ($db_systemprop->next_record()) { + $results[$db_systemprop->f("type")][$db_systemprop->f("name")]['value'] = urldecode($db_systemprop->f("value")); + $results[$db_systemprop->f("type")][$db_systemprop->f("name")]['idsystemprop'] = urldecode($db_systemprop->f("idsystemprop")); + } + } else { + while ($db_systemprop->next_record()) { + $results[$db_systemprop->f("type")][$db_systemprop->f("name")] = urldecode($db_systemprop->f("value")); + } + } + + return ($results); +} + +/** + * Gets a system property entry + * + * @param string $type The type of the item + * @param string $name The name of the item + * @return mixed boolean false if nothing was found, or + */ +function getSystemProperty($sType, $sName) { + + $oProperties = new cApiSystemPropertyCollection(); + return $oProperties->getSystemProperty($sType, $sName); + + + /* + global $cfg; + + $db_systemprop = new DB_ConLite; + + $sql = "SELECT value FROM ".$cfg["tab"]["system_prop"]." WHERE type='".Contenido_Security::escapeDB($type, $db_systemprop)."' AND name='".Contenido_Security::escapeDB($name, $db_systemprop)."'"; + $db_systemprop->query($sql); + + if ($db_systemprop->next_record()) + { + return urldecode($db_systemprop->f("value")); + } else + { + return false; + } */ +} + +/** + * Gets system property entries + * + * @param string $type The type of the item + * @return array Value + */ +function getSystemPropertiesByType($sType) { + global $cfg; + + $aResult = array(); + + $db_systemprop = new DB_ConLite; + + $sSQL = "SELECT name, value FROM " . $cfg["tab"]["system_prop"] . " WHERE type='" . Contenido_Security::escapeDB($sType, $db_systemprop) . "' ORDER BY name"; + $db_systemprop->query($sSQL); + + while ($db_systemprop->next_record()) { + $aResult[$db_systemprop->f("name")] = urldecode($db_systemprop->f("value")); + } + + return $aResult; +} + +/** + * Returns the current effective setting for a property. + * + * The order is: + * System => Client => Group => User + * + * System properties can be overridden by the group, and group + * properties can be overridden by the user. + * + * @param string $type The type of the item + * @param string $name The name of the item + * @param string $default Optional default value + * @return mixed boolean false if nothing was found + */ +function getEffectiveSetting($type, $name, $default = "") { + global $auth, $client, $lang; + + if ($auth->auth["uid"] != "nobody") { + $user = new User; + $user->loadUserByUserID($auth->auth["uid"]); + $value = $user->getUserProperty($type, $name, true); + unset($user); + } else { + $value = false; + } + + if ($value == false) { + $oClient = new cApiClientLanguage(false, $client, $lang); + $value = $oClient->getProperty($type, $name); + unset($oClient); + } + + if ($value == false) { + $oClient = new cApiClient($client); + $value = $oClient->getProperty($type, $name); + unset($oClient); + } + + if ($value == false) { + $value = getSystemProperty($type, $name); + } + + if ($value === false) { + return $default; + } else { + return $value; + } +} + +/** + * Returns the current effective settings for a type of properties. + * + * The order is: + * System => Client => Group => User + * + * System properties can be overridden by the group, and group + * properties can be overridden by the user. + * + * You may use default array to preset settings, this will not override found settings + * + * @version $Rev: 378 $ + * @author Ortwin Pinke + * + * @global object $auth + * @global int $client + * @global array $cfg + * @global int $lang + * @param string $sType + * @param array $aDefault + * @return array + */ +function getEffectiveSettingsByType($sType, $aDefault = array()) { + global $auth, $client, $cfg, $lang; + + $aResult = getSystemPropertiesByType($sType); + + $oClient = new cApiClient($client); + $aResult = array_merge($aResult, $oClient->getPropertiesByType($sType)); + unset($oClient); + + $oClient = new cApiClientLanguage(false, $client, $lang); + $aResult = array_merge($aResult, $oClient->getPropertiesByType($sType)); + + unset($oClient); + + if ($auth->auth["uid"] != "nobody") { + $oUser = new User; + $oUser->loadUserByUserID($auth->auth["uid"]); + + $aResult = array_merge($aResult, $oUser->getUserPropertiesByType($sType, true)); + } + + if (is_array($aDefault) && count($aDefault) > 0) { + foreach ($aDefault as $sKey => $sValue) { + if (key_exists($sKey, $aResult)) + continue; + $aResult[$sKey] = $sValue; + } + } + + return $aResult; +} + +/** + * retrieve list of article specifications for current client and language + * + * @return array list of article specifications + */ +function getArtspec() { + global $db, $cfg, $lang, $client; + $sql = "SELECT artspec, idartspec, online, artspecdefault FROM " . $cfg['tab']['art_spec'] . " + WHERE client='" . Contenido_Security::toInteger($client) . "' AND lang='" . Contenido_Security::toInteger($lang) . "' ORDER BY artspec ASC"; + $db->query($sql); + + $artspec = array(); + + while ($db->next_record()) { + $artspec[$db->f("idartspec")]['artspec'] = $db->f("artspec"); + $artspec[$db->f("idartspec")]['online'] = $db->f("online"); + $artspec[$db->f("idartspec")]['default'] = $db->f("artspecdefault"); + } + return $artspec; +} + +/** + * add new article specification + * + * @param string article specification text + * + * @return void + */ +function addArtspec($artspectext, $online) { + global $db, $cfg, $lang, $client; + + if (isset($_POST['idartspec'])) { //update + $sql = "UPDATE " . $cfg['tab']['art_spec'] . " SET + artspec='" . Contenido_Security::escapeDB(urldecode($artspectext), $db) . "', + online='" . Contenido_Security::toInteger($online) . "' + WHERE idartspec=" . Contenido_Security::toInteger($_POST['idartspec']) . ""; + $db->query($sql); + } else { + $sql = "INSERT INTO " . $cfg['tab']['art_spec'] . " + (idartspec, client, lang, artspec, online, artspecdefault) + VALUES + (" . Contenido_Security::toInteger($db->nextid($cfg['tab']['art_spec'])) . ", '" . Contenido_Security::toInteger($client) . "', '" . Contenido_Security::toInteger($lang) . "', + '" . Contenido_Security::escapeDB(urldecode($artspectext), $db) . "', 0, 0)"; + $db->query($sql); + } +} + +/** + * delete specified article specification + * + * @param integer article specification id + * + * @return void + */ +function deleteArtspec($idartspec) { + global $db, $cfg; + $sql = "DELETE FROM " . $cfg['tab']['art_spec'] . " WHERE idartspec = '" . Contenido_Security::toInteger($idartspec) . "'"; + $db->query($sql); + + $sql = "UPDATE " . $cfg["tab"]["art_lang"] . " set artspec = '0' WHERE artspec = '" . Contenido_Security::toInteger($idartspec) . "'"; + $db->query($sql); +} + +/** + * set article specifications online + * + * flag to switch if an article specification should be shown the frontend or not + * + * @param integer article specification id + * @param integer 0/1 switch the status between on an offline + * + * @return void + */ +function setArtspecOnline($idartspec, $online) { + global $db, $cfg; + $sql = "UPDATE " . $cfg['tab']['art_spec'] . " SET online=" . Contenido_Security::toInteger($online) . " WHERE idartspec=" . Contenido_Security::toInteger($idartspec) . ""; + $db->query($sql); +} + +/** + * set a default article specification + * + * while creating a new article this defined article specification will be default setting + * + * @param integer article specification id + * + * @return void + */ +function setArtspecDefault($idartspec) { + global $db, $cfg, $lang, $client; + $sql = "UPDATE " . $cfg['tab']['art_spec'] . " SET artspecdefault=0 WHERE client='" . Contenido_Security::toInteger($client) . "' AND lang='" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + + $sql = "UPDATE " . $cfg['tab']['art_spec'] . " SET artspecdefault=1 WHERE idartspec='" . Contenido_Security::toInteger($idartspec) . "'"; + $db->query($sql); +} + +/** + * Build a Article select Box + * + * @param String Name of the SelectBox + * @param String Value of the SelectBox + * @return String HTML + */ +function buildArticleSelect($sName, $iIdCat, $sValue) { + global $cfg, $client, $lang, $idcat; + $db = new DB_ConLite; + + $html = ''; + $html .= ''; + + return $html; +} + +/** + * Build a Category / Article select Box + * + * @param String Name of the SelectBox + * @param String Value of the SelectBox + * @param Integer Value of highest level that should be shown + * @param String Optional style informations for select + * @return String HTML + */ +function buildCategorySelect($sName, $sValue, $sLevel = 0, $sStyle = "") { + global $cfg, $client, $lang, $idcat; + + $db = new DB_ConLite; + $db2 = new DB_ConLite; + + $html = ''; + $html .= ''; + + return $html; +} + +/** + * getFileExtension + * Returns the file extension of a given file + * + * @param string $filename Name of the file + * @return extension on success, false if no extension could be extracted. + */ +function getFileExtension($filename) { + $dotposition = strrpos($filename, "."); + + if ($dotposition !== false) { + return (strtolower(substr($filename, $dotposition + 1))); + } else { + return false; + } +} + +function human_readable_size($number) { + $base = 1024; + $suffixes = array(" B", " KB", " MB", " GB", " TB", " PB", " EB"); + + $usesuf = 0; + $n = (float) $number; //Appears to be necessary to avoid rounding + while ($n >= $base) { + $n /= (float) $base; + $usesuf ++; + } + + $places = 2 - floor(log10($n)); + $places = max($places, 0); + $retval = number_format($n, $places, ".", "") . $suffixes[$usesuf]; + return $retval; +} + +/** + * Trims an array + * + * @param array Array to trim + * @return array Trimmed array + */ +function trim_array($array) { + if (!is_array($array)) { + return $array; + } + + foreach ($array as $key => $value) { + $array[$key] = trim($value); + } + + return $array; +} + +function array_csort() { //coded by Ichier2003 + $args = func_get_args(); + $marray = array_shift($args); + $msortline = "return(array_multisort("; + $i = 0; + foreach ($args as $arg) { + $i ++; + if (is_string($arg)) { + foreach ($marray as $row) { + $a = strtoupper($row[$arg]); + $sortarr[$i][] = $a; + } + } else { + $sortarr[$i] = $arg; + } + $msortline .= "\$sortarr[" . $i . "],"; + } + $msortline .= "\$marray));"; + @ eval($msortline); + return $marray; +} + +/** + * str_ireplace_once - Replaces a string only once + * + * Caution: This function only takes strings as parameters, + * not arrays! + * @param $find string String to find + * @param $replace string String to replace + * @param $subject string String to process + * + * @return string Processed string + */ +function str_ireplace_once($find, $replace, $subject) { + $start = strpos(strtolower($subject), strtolower($find)); + + if ($start === false) { + return $subject; + } + + $end = $start + strlen($find); + + $first = substr($subject, 0, $start); + $last = substr($subject, $end, strlen($subject) - $end); + + $result = $first . $replace . $last; + + return ($result); +} + +/** + * str_ireplace_once_reverse - Replaces a string only once, in reverse direction + * + * Caution: This function only takes strings as parameters, + * not arrays! + * @param $find string String to find + * @param $replace string String to replace + * @param $subject string String to process + * + * @return string Processed string + */ +function str_ireplace_once_reverse($find, $replace, $subject) { + $start = str_rpos(strtolower($subject), strtolower($find)); + + if ($start === false) { + return $subject; + } + + $end = $start + strlen($find); + + $first = substr($subject, 0, $start); + $last = substr($subject, $end, strlen($subject) - $end); + + $result = $first . $replace . $last; + + return ($result); +} + +/** + * str_rpos - Finds a string position in reverse direction + * + * NOTE: The original strrpos-Function of PHP4 only finds + * a single character as needle. + * + * @param $haystack string String to search in + * @param $needle string String to search for + * @param $start integer Offset + * + * @return string Processed string + */ +function str_rpos($haystack, $needle, $start = 0) { + $tempPos = strpos($haystack, $needle, $start); + + if ($tempPos === false) { + if ($start == 0) { + //Needle not in string at all + return false; + } else { + //No more occurances found + return $start - strlen($needle); + } + } else { + //Find the next occurance + return str_rpos($haystack, $needle, $tempPos + strlen($needle)); + } +} + +/** + * isImageMagickAvailable - checks if ImageMagick is available + * + * @return boolean true if ImageMagick is available + */ +function isImageMagickAvailable() { + global $_imagemagickAvailable; + + if (is_bool($_imagemagickAvailable)) { + if ($_imagemagickAvailable === true) { + return true; + } else { + return false; + } + } + + $output = array(); + $retval = 0; + + @exec("convert", $output, $retval); + + if (!is_array($output) || count($output) == 0) { + return false; + } + + if (strpos($output[0], "ImageMagick") !== false) { + $_imagemagickAvailable = true; + return true; + } else { + $_imagemagickAvailable = false; + return false; + } +} + +/** + * isRunningFromWeb - checks if the script is being runned from the web + * + * @return boolean true if the script is running from the web + */ +function isRunningFromWeb() { + if ($_SERVER["PHP_SELF"] == "" || php_sapi_name() == "cgi" || php_sapi_name() == "cli") { + return false; + } + + return true; +} + +/** + * getClientName: Returns the client name for a given ID + * + * @return string client name + */ +function getClientName($idclient) { + global $cfg; + + $db = new DB_ConLite; + + $sql = "SELECT name FROM " . $cfg["tab"]["clients"] . " WHERE idclient='" . Contenido_Security::toInteger($idclient) . "'"; + + $db->query($sql); + + if ($db->next_record()) { + return $db->f("name"); + } else { + return false; + } +} + +function scanDirectory($sDirectory, $bRecursive = false) { + if (substr($sDirectory, strlen($sDirectory) - 1, 1) == "/") { + $sDirectory = substr($sDirectory, 0, strlen($sDirectory) - 1); + } + + if (!is_dir($sDirectory)) { + return false; + } + + $aFiles = array(); + + $hDirHandle = opendir($sDirectory); + + while ($sFile = readdir($hDirHandle)) { + $sFullpathFile = $sDirectory . "/" . $sFile; + + if (is_file($sFullpathFile) && is_readable($sFullpathFile)) { + $aFiles[] = $sFullpathFile; + } + + if (is_dir($sFullpathFile) && $sFile != "." && $sFile != ".." && $bRecursive == true) { + $aSubFiles = scanDirectory($sFullpathFile, $bRecursive); + + if (is_array($aSubFiles)) { + $aFiles = array_merge($aFiles, $aSubFiles); + } + } + } + + return $aFiles; +} + +/** + * scanPlugins: Scans a given plugin directory and places the + * found plugins into the array $cfg['plugins'] + * + * + * Example: + * scanPlugins("frontendusers"); + * + * Result: + * $cfg['plugins']['frontendusers'] => array with all found plugins + * + * Note: Plugins are only "found" if the following directory structure + * if found: + * + * entity/ + * plugin1/plugin1.php + * plugin2/plugin2.php + * + * The plugin's directory and file name have to be the + * same, otherwise the function won't find them! + * + * @param $entity Name of the directory to scan + * @return string client name + */ +function scanPlugins($entity) { + global $cfg; + + $pluginorder = getSystemProperty("plugin", $entity . "-pluginorder"); + $lastscantime = getSystemProperty("plugin", $entity . "-lastscantime"); + + $plugins = array(); + + /* Fetch and trim the plugin order */ + if ($pluginorder != "") { + $plugins = explode(",", $pluginorder); + + foreach ($plugins as $key => $plugin) { + $plugins[$key] = trim($plugin); + } + } + + $basedir = $cfg["path"]["contenido"] . $cfg["path"]["plugins"] . "$entity/"; + + /* Don't scan all the time, but each 60 seconds */ + if ($lastscantime + 60 < time()) { + setSystemProperty("plugin", $entity . "-lastscantime", time()); + + $dh = opendir($basedir); + + while (($file = readdir($dh)) !== false) { + + if (is_dir($basedir . $file) && $file != "includes" && $file != "." && $file != "..") { + if (!in_array($file, $plugins)) { + if (file_exists($basedir . $file . "/" . $file . ".php")) { + $plugins[] = $file; + } + } + } + } + + foreach ($plugins as $key => $value) { + if (!is_dir($basedir . $value) || !file_exists($basedir . $value . "/" . $value . ".php")) { + unset($plugins[$key]); + } + } + + $pluginorder = implode(",", $plugins); + setSystemProperty("plugin", $entity . "-pluginorder", $pluginorder); + } + + foreach ($plugins as $key => $value) { + if (!is_dir($basedir . $value) || !file_exists($basedir . $value . "/" . $value . ".php")) { + unset($plugins[$key]); + } else { + i18nRegisterDomain($entity . "_" . $value, $basedir . $value . "/locale/"); + } + } + + $cfg['plugins'][$entity] = $plugins; +} + +/** + * includePlugins: Includes plugins for a given entity + * + * Example: + * includePlugins("frontendusers"); + * + * @param $entity Name of the directory to scan + */ +function includePlugins($entity) { + global $cfg; + + if (is_array($cfg['plugins'][$entity])) { + foreach ($cfg['plugins'][$entity] as $plugin) { + plugin_include($entity, $plugin . "/" . $plugin . ".php"); + } + } +} + +/** + * callPluginStore: Calls the plugin's store methods + * + * Example: + * callPluginStore("frontendusers"); + * + * @param $entity Name of the directory to scan + */ +function callPluginStore($entity) { + global $cfg; + + /* Check out if there are any plugins */ + if (is_array($cfg['plugins'][$entity])) { + foreach ($cfg['plugins'][$entity] as $plugin) { + if (function_exists($entity . "_" . $plugin . "_wantedVariables") && function_exists($entity . "_" . $plugin . "_store")) { + $wantVariables = call_user_func($entity . "_" . $plugin . "_wantedVariables"); + + if (is_array($wantVariables)) { + $varArray = array(); + + foreach ($wantVariables as $value) { + $varArray[$value] = stripslashes($GLOBALS[$value]); + } + } + $store = call_user_func($entity . "_" . $plugin . "_store", $varArray); + } + } + } +} + +function displayPlugin($entity, & $form) { + /* TODO: Function can't work, as $feuser is not defined (see $display = + * call_user_func($entity."_".$plugin."_display", $feuser);) and plugins need + * - if data has to be shown - global objects ... + */ + $pluginOrder = trim_array(explode(",", getSystemProperty("plugin", $entity . "-pluginorder"))); + + /* Check out if there are any plugins */ + if (is_array($pluginOrder)) { + foreach ($pluginOrder as $plugin) { + if (function_exists($entity . "_" . $plugin . "_getTitle") && function_exists($entity . "_" . $plugin . "_display")) { + $plugTitle = call_user_func($entity . "_" . $plugin . "_getTitle"); + $display = call_user_func($entity . "_" . $plugin . "_display", $feuser); + + if (is_array($plugTitle) && is_array($display)) { + foreach ($plugTitle as $key => $value) { + $form->add($value, $display[$key]); + } + } else { + if (is_array($plugTitle) || is_array($display)) { + $form->add("WARNING", "The plugin $plugin delivered an array for the displayed titles, but did not return an array for the contents."); + } else { + $form->add($plugTitle, $display); + } + } + } + } + } +} + +/** + * createRandomName: Creates a random name (example: Passwords) + * + * Example: + * echo createRandomName(8); + * + * @param $nameLength Length of the generated string + * @return string random name + */ +function createRandomName($nameLength) { + $NameChars = 'abcdefghijklmnopqrstuvwxyz'; + $Vouel = 'aeiou'; + $Name = ""; + + for ($index = 1; $index <= $nameLength; $index ++) { + if ($index % 3 == 0) { + $randomNumber = rand(1, strlen($Vouel)); + $Name .= substr($Vouel, $randomNumber - 1, 1); + } else { + $randomNumber = rand(1, strlen($NameChars)); + $Name .= substr($NameChars, $randomNumber - 1, 1); + } + } + + return $Name; +} + +/** + * sendPostRequest: Sents a HTTP POST request + * + * Example: + * sendPostRequest("hostname", "serverpath/test.php", $data); + * + * @param $host Hostname or domain + * @param $pathhost Path on the host or domain + * @param $data Data to send + * @param $referer Referer (optional) + * @param $port Port (default: 80) + */ +function sendPostRequest($host, $path, $data, $referer = "", $port = 80) { + $fp = fsockopen($host, $port); + + fputs($fp, "POST $path HTTP/1.1\n"); + fputs($fp, "Host: $host\n"); + fputs($fp, "Referer: $referer\n"); + fputs($fp, "Content-type: application/x-www-form-urlencoded\n"); + fputs($fp, "Content-length: " . strlen($data) . "\n"); + fputs($fp, "Connection: close\n\n"); + fputs($fp, "$data\n"); + + while (!feof($fp)) { + $res .= fgets($fp, 128); + } + + fclose($fp); + + return $res; +} + +function is_dbfs($file) { + if (substr($file, 0, 5) == "dbfs:") { + return true; + } +} + +function setHelpContext($area) { + global $cfg; + + if ($cfg['help'] == true) { + $hc = "parent.parent.parent.frames[0].document.getElementById('help').setAttribute('data', '$area');"; + } else { + $hc = ""; + } + + return $hc; +} + +function define_if($constant, $value) { + if (!defined($constant)) { + define($constant, $value); + } +} + +/** + * Specify platform specific newline character; PHP_EOL has been introduced in PHP 5.0.2 + * Note, that Mac seems to use \r, sorry guys + */ +if (!defined('PHP_EOL')) { + if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { + define('PHP_EOL', "\r\n"); // Windows + } else { + define('PHP_EOL', "\n"); // *nix + } +} + +function locale_arsort($locale, $array) { + $oldlocale = setlocale(LC_COLLATE, 0); + setlocale(LC_COLLATE, $locale); + + uasort($array, "strcoll"); + + setlocale(LC_COLLATE, $oldlocale); + + return ($array); +} + +/* TODO: Ask timo to document this. */ +/* Note: If subarrays exists, this function currently returns the key of the array + given by $array, and not from the subarrays (todo: add flag to allow this) */ + +function array_search_recursive($search, $array, $partial = false, $strict = false) { + foreach ($array as $key => $value) { + if (is_array($value)) { + $val = array_search_recursive($search, $value, $partial, $strict); + if ($val !== false) { + return ($key); + } + } else { + if ($partial == false) { + if ($strict == true) { + if ($value === $search) { + return $key; + } + } else { + if ($value == $search) { + return $key; + } + } + } else { + if (strpos($value, $search) !== FALSE) { + return $key; + } + } + } + } + + return false; +} + +/** + * cDie: Contenido die-alternative + * + * @author unknown + * + * @param string $file File name (use __FILE__) + * @param string $line Line number (use __LINE__) + * @param string $message Message to display + * @return void + */ +function cDie($file, $line, $message) { + cError($file, $line, $message); + die("$file $line: $message"); +} + +/** + * cWarning: Contenido warning + * + * @param $file File name (use __FILE__) + * @param $line Line number (use __LINE__) + * @param $message Message to display + */ +function cWarning($file, $line, $message) { + trigger_error("$file $line: $message", E_USER_WARNING); +} + +/** + * cError: Contenido error + * + * @param $file File name (use __FILE__) + * @param $line Line number (use __LINE__) + * @param $message Message to display + */ +function cError($file, $line, $message) { + trigger_error("$file $line: $message", E_USER_ERROR); +} + +/** + * cDeprecated: Trigger deprecated stuff + * + * @author Ortwin Pinke + * @param string $file File name (use __FILE__) + * @param string $line Line number (use __LINE__) + * @param string $message Message to display + */ +function cDeprecated($file, $line, $message) { + if (version_compare(PHP_VERSION, '5.3.0') >= 0) { + trigger_error($file . " " . $line . ": " . $message, E_USER_DEPRECATED); + } else { + trigger_error("$file $line: $message", E_USER_WARNING); + } +} + +/** + * getNamedFrame: Returns the name of the numeric frame given + * + * @param $frame Frame number + * @return string Canonical name of the frame + */ +function getNamedFrame($frame) { + switch ($frame) { + case 1 : + return ("left_top"); + break; + case 2 : + return ("left_bottom"); + break; + case 3 : + return ("right_top"); + break; + case 4 : + return ("right_bottom"); + break; + default : + return (""); + break; + } +} + +/** + * startTiming: Starts the timing for a specific function + * + * @param function string Name of the function + * @param parameters array All parameters for the function to measure + * + * @return int uuid for this measure process + */ +function startTiming($function, $parameters = array()) { + global $_timings, $cfg; + + if ($cfg["debug"]["functiontiming"] == false) { + return; + } + + /* Create (almost) unique ID */ + $uuid = md5(uniqid(rand(), true)); + + if (!is_array($parameters)) { + cWarning(__FILE__, __LINE__, "Warning: startTiming's parameters parameter expects an array"); + $parameters = array(); + } + + $_timings[$uuid]["parameters"] = $parameters; + $_timings[$uuid]["function"] = $function; + + $_timings[$uuid]["start"] = getmicrotime(); + + return $uuid; +} + +/** + * endAndLogTiming: Ends the timing process and logs it to the timings file + * + * @param uuid int UUID which has been used for timing + */ +function endAndLogTiming($uuid) { + global $_timings, $cfg; + + if ($cfg["debug"]["functiontiming"] == false) { + return; + } + + $_timings[$uuid]["end"] = getmicrotime(); + + $timeSpent = $_timings[$uuid]["end"] - $_timings[$uuid]["start"]; + + $myparams = array(); + + /* Build nice representation of the function */ + foreach ($_timings[$uuid]["parameters"] as $parameter) { + + switch (gettype($parameter)) { + case "string" : + $myparams[] = '"' . $parameter . '"'; + break; + + case "boolean" : + if ($parameter == true) { + $myparams[] = "true"; + } else { + $myparams[] = "false"; + } + break; + + default : + if ($parameter == "") { + $myparams[] = '"' . $parameter . '"'; + } else { + $myparams[] = $parameter; + } + } + } + + $parameterString = implode(", ", $myparams); + + trigger_error("calling function " . $_timings[$uuid]["function"] . "(" . $parameterString . ") took " . $timeSpent . " seconds", E_USER_NOTICE); +} + +// @TODO: it's better to create a instance of DB_ConLite class, the class constructor connects also to the database. +function checkMySQLConnectivity() { + global $contenido_host, $contenido_database, $contenido_user, $contenido_password, $cfg; + + if ($cfg["database_extension"] == "mysqli") { + if (function_exists("mysqli_connect")) { + if (($iPos = strpos($contenido_host, ":")) !== false) { + list($sHost, $sPort) = explode(":", $contenido_host); + + $res = mysqli_connect($sHost, $contenido_user, $contenido_password, "", $sPort); + } else { + + $res = mysqli_connect($contenido_host, $contenido_user, $contenido_password); + } + } else { + $res = NULL; + } + } else { + if (function_exists("mysql_connect")) { + $res = mysql_connect($contenido_host, $contenido_user, $contenido_password); + } else { + $res = NULL; + } + } + + $selectDb = false; + if ($res) { + if ($cfg["database_extension"] == "mysqli") { + $selectDb = mysqli_select_db($res, $contenido_database); + } else { + $selectDb = mysql_select_db($contenido_database, $res); + } + } + + if (!$res || !$selectDb) { + $errortitle = i18n("MySQL Database not reachable for installation %s"); + $errortitle = sprintf($errortitle, $cfg["path"]["contenido_fullhtml"]); + + $errormessage = i18n("The MySQL Database for the installation %s is not reachable. Please check if this is a temporary problem or if it is a real fault."); + $errormessage = sprintf($errormessage, $cfg["path"]["contenido_fullhtml"]); + + notifyOnError($errortitle, $errormessage); + + if ($cfg["contenido"]["errorpage"] != "") { + header("Location: " . $cfg["contenido"]["errorpage"]); + } else { + die("Could not connect to the database server with this configuration!"); + } + + exit; + } else { + if ($cfg["database_extension"] == "mysqli") { + mysqli_close($res); + } else { + mysql_close($res); + } + } +} + +function notifyOnError($errortitle, $errormessage) { + global $cfg; + $sFileNotify = $cfg['path']['conlite_logs'] . "notify.txt"; + + if (file_exists($sFileNotify)) { + $notifytimestamp = file_get_contents($sFileNotify); + } else { + $notifytimestamp = 0; + } + + if ((time() - $notifytimestamp) > $cfg["contenido"]["notifyinterval"] * 60) { + if ($cfg['contenido']['notifyonerror'] != "") { + $sMailhost = getSystemProperty('system', 'mail_host'); + if ($sMailhost == '') { + $sMailhost = 'localhost'; + } + + $oMail = new PHPMailer(); + $oMail->Host = $sMailhost; + $oMail->IsHTML(0); + $oMail->WordWrap = 1000; + $oMail->IsMail(); + + $oMail->AddAddress($cfg["contenido"]["notifyonerror"], ""); + $oMail->Subject = $errortitle; + $oMail->Body = $errormessage; + + /* Notify configured email */ + $oMail->Send(); + } + /* Write last notify log file */ + file_put_contents($sFileNotify, time()); + } +} + +function cIDNAEncode($sourceEncoding, $string) { + if (extension_loaded("iconv")) { + cInclude('pear', 'Net/IDNA.php'); + + $idn = Net_IDNA :: getInstance(); + + $string = iconv("UTF-8", $sourceEncoding, $string); + $string = $idn->encode($string); + + return ($string); + } + + if (extension_loaded("recode")) { + cInclude('pear', 'Net/IDNA.php'); + + $idn = Net_IDNA :: getInstance(); + + $string = $idn->decode($string); + $string = recode_string("UTF-8.." . $sourceEncoding, $string); + return $string; + } + + return $string; +} + +function cIDNADecode($targetEncoding, $string) { + if (extension_loaded("iconv")) { + cInclude('pear', 'Net/IDNA.php'); + + $idn = Net_IDNA :: getInstance(); + + $string = $idn->decode($string); + $string = iconv($targetEncoding, "UTF-8", $string); + + return ($string); + } + + if (extension_loaded("recode")) { + cInclude('pear', 'Net/IDNA.php'); + + $idn = Net_IDNA :: getInstance(); + + $string = recode_string($targetEncoding . "..UTF-8", $string); + $string = $idn->decode($string); + + return $string; + } + + return $string; +} + +/** + * Checks for a named key of an array, pushes it if not set with a default value + * + * @param array $aArray reference of array + * @param string $sKey key to check for and to set + * @param multi $mDefault default value + * @return boolean false if no array is given, void otherwise + */ +function cInitializeArrayKey(&$aArray, $sKey, $mDefault = "") { + if (!is_array($aArray)) { + if (isset($aArray)) { + return false; + } + $aArray = array(); + } + + if (!array_key_exists($sKey, $aArray)) { + $aArray[$sKey] = $mDefault; + } +} + +/** + * Function checks current language + * and client settings by HTTP-Params + * and DB settings. Based on this + * informations it will send an HTTP + * header for right encoding. + * + * @param DB_ConLite $db + * @param array $cfg global cfg-array + * @param int $lang global language id + * + * @since 4.6.18 + * + * @version 1.0.0 + * @author Holger Librenz + */ +function sendEncodingHeader($db, $cfg, $lang) { + if (array_key_exists("use_encoding", $_GET)) { + $use_encoding = trim(strip_tags($_GET["use_encoding"])); + } + + if (array_key_exists("use_encoding", $_POST)) { + $use_encoding = trim(strip_tags($_POST["use_encoding"])); + } + + if (!isset($use_encoding)) { + $use_encoding = true; + } + + if (is_string($use_encoding)) { + if ($use_encoding == "false") { + $use_encoding = false; + } else { + $use_encoding = true; + } + } + + if ($use_encoding != false) { + $sql = "SELECT idlang, encoding FROM " . $cfg["tab"]["lang"]; + $db->query($sql); + + $aLanguageEncodings = array(); + + while ($db->next_record()) { + $aLanguageEncodings[$db->f("idlang")] = $db->f("encoding"); + } + + if (array_key_exists($lang, $aLanguageEncodings)) { + if (!in_array($aLanguageEncodings[$lang], $cfg['AvailableCharsets'])) { + header("Content-Type: text/html; charset=ISO-8859-1"); + } else { + header("Content-Type: text/html; charset={$aLanguageEncodings[$lang]}"); + } + } else { + header("Content-Type: text/html; charset=ISO-8859-1"); + } + } +} + +/** + * IP_match + * + * @param string $network + * @param string $mask + * @param string $ip + * @return boolean + */ +function IP_match($network, $mask, $ip) { + bcscale(3); + $ip_long = ip2long($ip); + $mask_long = ip2long($network); + + # + # Convert mask to divider + # + if (preg_match('/^[0-9]+$/', $mask)) { + /// 212.50.13.0/27 style mask (Cisco style) + $divider = bcpow(2, (32 - $mask)); + } else { + /// 212.50.13.0/255.255.255.0 style mask + $xmask = ip2long($mask); + if ($xmask < 0) + $xmask = bcadd(bcpow(2, 32), $xmask); + $divider = bcsub(bcpow(2, 32), $xmask); + } + # + # Test is IP within specified mask + # + if (floor(bcdiv($ip_long, $divider)) == floor(bcdiv($mask_long, $divider))) { + # match - this IP is within specified mask + return true; + } else { + # fail - this IP is NOT within specified mask + return false; + } +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.i18n.php b/branches/conlite20/conlite/includes/functions.i18n.php new file mode 100644 index 0000000..4e9c0c6 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.i18n.php @@ -0,0 +1,227 @@ + + * @copyright four for business AG + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * $Id: functions.i18n.php 340 2015-08-20 13:31:29Z oldperl $ + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * trans($string) + * + * gettext wrapper (for future extensions). Usage: + * trans("Your text which has to be translated"); + * + * @param $string string The string to translate + * @return string Returns the translation + * + * @deprecated since 4.8.16 CL, use i18n instead, function will be deleted in one of next versions + */ +function trans($string) { + return cI18n::__i18n($string); +} +/** + * i18n($string) + * + * gettext wrapper (for future extensions). Usage: + * i18n("Your text which has to be translated"); + * + * @param $string string The string to translate + * @param $domain string The domain to look up + * @return string Returns the translation + */ +function i18n($string, $domain = "conlite") { + return cI18n::__($string, $domain); +} + +/** + * i18nEmulateGettext() + * + * Emulates GNU gettext + * + * @param $string string The string to translate + * @param $domain string The domain to look up + * @return string Returns the translation + */ +function i18nEmulateGettext($string, $domain = "conlite") { + return cI18n::emulateGettext($string, $domain); +} + +/** + * i18nInit() + * + * Initializes the i18n stuff. + * + * @global string $i18nLanguage + * @global array $i18nDomains + * @param string $localePath + * @param string $langCode + */ +function i18nInit($localePath, $langCode, $domain = 'conlite') { + cI18n::init($localePath, $langCode, $domain); +} + +/** + * Registers a new i18n domain. + * + * @global array $i18nDomains + * @param string $domain + * @param string $localePath + */ +function i18nRegisterDomain($domain, $localePath) { + cI18n::registerDomain($domain, $localePath); +} + +/** + * i18nStripAcceptLanguages($accept) + * + * Strips all unnecessary information from the $accept string. + * Example: de,nl;q=0.7,en-us;q=0.3 would become an array with de,nl,en-us + * + * @return array Array with the short form of the accept languages + */ +function i18nStripAcceptLanguages($accept) { + $languages = explode(',', $accept); + foreach($languages as $value) { + $components = explode(';', $value); + $shortLanguages[] = $components[0]; + } + return ($shortLanguages); +} + +/** + * i18nMatchBrowserAccept($accept) + * + * Tries to match the language given by $accept to + * one of the languages in the system. + * + * @return string The locale key for the given accept string + */ +function i18nMatchBrowserAccept ($accept) +{ + $available_languages = i18nGetAvailableLanguages(); + + /* Try to match the whole accept string */ + foreach ($available_languages as $key => $value) + { + list($country, $lang, $encoding, $shortaccept) = $value; + + if ($accept == $shortaccept) + { + return $key; + } + } + + /* Whoops, we are still here. Let's match the stripped-down string. + Example: de-ch isn't in the list. Cut it down after the "-" to "de" + which should be in the list. */ + + $accept = substr($accept,0,2); + foreach ($available_languages as $key => $value) + { + list($country, $lang, $encoding, $shortaccept) = $value; + + if ($accept == $shortaccept) + { + return $key; + } + } + + /* Whoops, still here? Seems that we didn't find any language. Return + the default (german, yikes) */ + return (false); +} + +/** + * i18nGetAvailableLanguages() + * + * Returns the available_languages array to prevent globals. + * + * @return array All available languages + */ +function i18nGetAvailableLanguages () +{ + /* Array notes: + First field: Language + Second field: Country + Third field: ISO-Encoding + Fourth field: Browser accept mapping + Fifth field: SPAW language + */ + $aLanguages = array( + 'ar_AA' => array('Arabic','Arabic Countries', 'ISO8859-6', 'ar','en'), + 'be_BY' => array('Byelorussian', 'Belarus', 'ISO8859-5', 'be', 'en'), + 'bg_BG' => array('Bulgarian','Bulgaria', 'ISO8859-5', 'bg', 'en'), + 'cs_CZ' => array('Czech', 'Czech Republic', 'ISO8859-2', 'cs', 'cz'), + 'da_DK' => array('Danish', 'Denmark', 'ISO8859-1', 'da', 'dk'), + 'de_CH' => array('German', 'Switzerland', 'ISO8859-1', 'de-ch', 'de'), + 'de_DE' => array('German', 'Germany', 'ISO8859-1', 'de', 'de'), + 'el_GR' => array('Greek', 'Greece', 'ISO8859-7', 'el', 'en'), + 'en_GB' => array('English', 'Great Britain', 'ISO8859-1', 'en-gb', 'en'), + 'en_US' => array('English', 'United States', 'ISO8859-1', 'en', 'en'), + 'es_ES' => array('Spanish', 'Spain', 'ISO8859-1', 'es', 'es'), + 'fi_FI' => array('Finnish', 'Finland', 'ISO8859-1', 'fi', 'en'), + 'fr_BE' => array('French', 'Belgium', 'ISO8859-1', 'fr-be', 'fr'), + 'fr_CA' => array('French', 'Canada', 'ISO8859-1', 'fr-ca', 'fr'), + 'fr_FR' => array('French', 'France', 'ISO8859-1', 'fr', 'fr'), + 'fr_CH' => array('French', 'Switzerland', 'ISO8859-1', 'fr-ch', 'fr'), + 'hr_HR' => array('Croatian', 'Croatia', 'ISO8859-2', 'hr', 'en'), + 'hu_HU' => array('Hungarian', 'Hungary', 'ISO8859-2', 'hu', 'hu'), + 'is_IS' => array('Icelandic', 'Iceland', 'ISO8859-1', 'is', 'en'), + 'it_IT' => array('Italian', 'Italy', 'ISO8859-1', 'it', 'it'), + 'iw_IL' => array('Hebrew', 'Israel', 'ISO8859-8', 'he', 'he'), + 'nl_BE' => array('Dutch', 'Belgium', 'ISO8859-1', 'nl-be', 'nl'), + 'nl_NL' => array('Dutch', 'Netherlands', 'ISO8859-1', 'nl', 'nl'), + 'no_NO' => array('Norwegian', 'Norway', 'ISO8859-1', 'no', 'en'), + 'pl_PL' => array('Polish', 'Poland', 'ISO8859-2', 'pl', 'en'), + 'pt_BR' => array('Brazillian', 'Brazil', 'ISO8859-1', 'pt-br', 'br'), + 'pt_PT' => array('Portuguese', 'Portugal', 'ISO8859-1', 'pt', 'en'), + 'ro_RO' => array('Romanian', 'Romania', 'ISO8859-2', 'ro', 'en'), + 'ru_RU' => array('Russian', 'Russia', 'ISO8859-5', 'ru', 'ru'), + 'sh_SP' => array('Serbian Latin', 'Yugoslavia', 'ISO8859-2', 'sr', 'en'), + 'sl_SI' => array('Slovene', 'Slovenia', 'ISO8859-2', 'sl', 'en'), + 'sk_SK' => array('Slovak', 'Slovakia', 'ISO8859-2', 'sk', 'en'), + 'sq_AL' => array('Albanian', 'Albania', 'ISO8859-1', 'sq', 'en'), + 'sr_SP' => array('Serbian Cyrillic', 'Yugoslavia', 'ISO8859-5', 'sr-cy', 'en'), + 'sv_SE' => array('Swedish', 'Sweden', 'ISO8859-1', 'sv', 'se'), + 'tr_TR' => array('Turkisch', 'Turkey', 'ISO8859-9', 'tr', 'tr') + ); + + return ($aLanguages); +} + +/** + * translate strings in modules + * + * @global int $cCurrentModule + * @global string $lang + * @global cApiModuleTranslationCollection $mi18nTranslator + * @param string $string string to translate + * @return string translated string + */ +function mi18n($string) { + global $cCurrentModule, $lang, $mi18nTranslator; + + if(!is_object($mi18nTranslator)) { + $mi18nTranslator = new cApiModuleTranslationCollection; + } + return $mi18nTranslator->fetchTranslation($cCurrentModule, $lang, $string); +} +?> diff --git a/branches/conlite20/conlite/includes/functions.includePluginConf.php b/branches/conlite20/conlite/includes/functions.includePluginConf.php new file mode 100644 index 0000000..2cae4f6 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.includePluginConf.php @@ -0,0 +1,171 @@ + + * @copyright (c) 2015, conlite.org + * @license http://www.gnu.de/documents/gpl.en.html GPL v3 (english version) + * @license http://www.gnu.de/documents/gpl.de.html GPL v3 (deutsche Version) + * @link http://www.conlite.org ConLite.org + * + * $Id: functions.includePluginConf.php 345 2015-09-14 11:16:10Z oldperl $: + */ +defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.'); + +$bDebug = FALSE; + +// first check all plugins managed by pim and init them if active +$aPlugins = array(); +$sPluginsPath = cRegistry::getPluginsPath(); + +if (file_exists($sPluginsPath."pluginmanager") && cRegistry::getConfigValue('debug', 'disable_plugins') === FALSE) { + i18nRegisterDomain('pluginmanager', $sPluginsPath . 'pluginmanager/locale/'); + cAutoload::addClassmapConfigFile($sPluginsPath . 'pluginmanager/includes/config.autoloader.php'); + include_once($sPluginsPath . 'pluginmanager/includes/config.plugin.php'); + $oPluginColl = new pimPluginCollection(); + $oPluginColl->setWhere('active', 1); + $oPluginColl->setOrder('executionorder ASC'); + $oPluginColl->query(); + + while (($oPlugin = $oPluginColl->next()) !== false) { + $sPluginName = $oPlugin->get('folder'); + $sPluginFolder = $sPluginsPath . $sPluginName . DIRECTORY_SEPARATOR; + if (is_dir($sPluginFolder) && file_exists($sPluginFolder . "cl_plugin.xml")) { + $aPlugins[] = $sPluginName; + } + } +} + +if ($bDebug && $frame == 4) { + echo $sPluginName . "\n"; + print_r($aPlugins); +} + +// Include all active plugins +foreach ($aPlugins as $sPluginName) { + $sPluginLocaleDir = $sPluginsPath . $sPluginName . DIRECTORY_SEPARATOR . 'locale' . DIRECTORY_SEPARATOR; + $sPluginConfigFile = $sPluginsPath . $sPluginName . DIRECTORY_SEPARATOR . 'includes/config.plugin.php'; + $sPluginAutoloaderFile = $sPluginsPath . $sPluginName . DIRECTORY_SEPARATOR . 'includes/config.autoloader.php'; + // language support + if (file_exists($sPluginLocaleDir)) { + i18nRegisterDomain($sPluginName, $sPluginLocaleDir); + }// autoloader config + if (file_exists($sPluginAutoloaderFile)) { + cAutoload::addClassmapConfigFile($sPluginAutoloaderFile); + } + // config file + if (file_exists($sPluginConfigFile)) { + include_once($sPluginConfigFile); + } +} + +$pluginorder = getSystemProperty("system", "plugin-order"); + +$plugins = explode(",", $pluginorder); + +$ipc_conpluginpath = cRegistry::getPluginsPath(); + +/** + * Scan and save only by the BE + * will be removed if all core plugins using pluginmanager + * + * @deprecated since version 2.0 + */ +if ($contenido) { + $lastscantime = getSystemProperty("system", "plugin-lastscantime"); + + /* Clean up: Fetch and trim the plugin order */ + $plugins = array(); + + if ($pluginorder != "") { + $plugins = explode(",", $pluginorder); + + foreach ($plugins as $key => $plugin) { + $plugins[$key] = trim($plugin); + } + } + + /* Don't scan all the time, but each 60 seconds */ + if ($lastscantime + 60 < time()) { + + // Directories which are to exclude from scanning process + $dirsToExclude = trim(getSystemProperty('system', 'plugin-dirstoexclude')); + if ($dirsToExclude === '') { + $dirsToExclude = '.,..,.svn,.cvs,includes'; + setSystemProperty('system', 'plugin-dirstoexclude', $dirsToExclude); + } + $dirsToExclude = explode(',', $dirsToExclude); + foreach ($dirsToExclude as $pos => $item) { + $dirsToExclude[$pos] = trim($item); + } + + /* scan for new Plugins */ + $dh = opendir($ipc_conpluginpath); + while (($file = readdir($dh)) !== false) { + if (is_dir($ipc_conpluginpath . $file) && + !in_array(strtolower($file), $dirsToExclude) && + !in_array($file, $plugins)) { + $plugins[] = $file; + } + } + closedir($dh); + setSystemProperty("system", "plugin-lastscantime", time()); + + + /* Remove plugins do not exist */ + foreach ($plugins as $key => $ipc_plugin) { + if (!is_dir($ipc_conpluginpath . $ipc_plugin . "/") + || in_array($ipc_plugin, $dirsToExclude) + || file_exists($ipc_conpluginpath . $ipc_plugin . "/cl_plugin.xml")) { + unset($plugins[$key]); + } + } + + /* Save Scanresult */ + $pluginorder = implode(",", $plugins); + setSystemProperty("system", "plugin-order", $pluginorder); + } +} + + + +/** + * load plugin configuration and localization + * add classes to contenido autoloader + * + * @deprecated since version 2.0 will be removed if all core plugins use pluginmanager + */ +foreach ($plugins as $key => $ipc_plugin) { + if (!is_dir($ipc_conpluginpath . $ipc_plugin . "/") + || file_exists($ipc_conpluginpath . $ipc_plugin . "/cl_plugin.xml")) { + unset($plugins[$key]); + } else { + $ipc_localedir = $ipc_conpluginpath . $ipc_plugin . "/locale/"; + $ipc_langfile = $ipc_conpluginpath . $ipc_plugin . "/includes/language.plugin.php"; + $ipc_configfile = $ipc_conpluginpath . $ipc_plugin . "/includes/config.plugin.php"; + $ipc_autoloaderfile = $ipc_conpluginpath . $ipc_plugin . "/includes/config.autoloader.php"; + + if (file_exists($ipc_localedir)) { + i18nRegisterDomain($ipc_plugin, $ipc_localedir); + } + + if (file_exists($ipc_langfile)) { + include_once($ipc_langfile); + } + + if (file_exists($ipc_configfile)) { + include_once($ipc_configfile); + } + + if (file_exists($ipc_autoloaderfile)) { + cAutoload::addClassmapConfigFile($ipc_autoloaderfile); + } + } +} +unset($plugins); +unset($bDebug); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.lang.php b/branches/conlite20/conlite/includes/functions.lang.php new file mode 100644 index 0000000..2e34854 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.lang.php @@ -0,0 +1,637 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-26, Frederic Schneider, add security fix + * modified 2008-07-23, Timo Trautmann optional db param added for langGetTextDirection (performance tuning) + * modified 2009-10-23, Murat Purc, removed deprecated function (PHP 5.3 ready) and some formatting + * + * $Id: functions.lang.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes", "functions.con.php"); +cInclude("includes", "functions.str.php"); + +/** + * Edit a language + * + * @param string $name Name of the language + * + * @author Jan Lengowski + * @author Olaf Niemann + * @copyright four for business AG + */ +function langEditLanguage($idlang, $langname, $encoding, $active, $direction = "ltr") { + global $db, $sess, $client, $cfg; + + $modified = date("Y-m-d H:i:s"); + + $sql = "UPDATE + ".$cfg["tab"]["lang"]." + SET + name = '".Contenido_Security::escapeDB($langname, $db)."', + encoding = '".Contenido_Security::escapeDB($encoding, $db)."', + active = '".Contenido_Security::toInteger($active)."', + lastmodified = '".Contenido_Security::escapeDB($modified, $db)."', + direction = '".Contenido_Security::escapeDB($direction, $db)."' + WHERE + idlang = '".Contenido_Security::toInteger($idlang)."'"; + + $db->query($sql); + + return true; +} + + +/** + * Create a new language + * + * @param string $name Name of the language + * + * @author Jan Lengowski + * @author Olaf Niemann + * @copyright four for business AG + */ +function langNewLanguage($name, $client) { + global $db, $sess, $cfg, $cfgClient, $notification, $auth; + $new_idlang = $db->nextid($cfg["tab"]["lang"]); + $author = $auth->auth["uid"]; + $created = date("Y-m-d H:i:s"); + $modified = $created; + + // Add new language to database + $sql = "INSERT INTO ".$cfg["tab"]["lang"]." (idlang, name, active, encoding, author, created, lastmodified) VALUES ('".Contenido_Security::toInteger($new_idlang)."', '".Contenido_Security::escapeDB($name, $db)."', '0', + 'iso-8859-1', '".Contenido_Security::escapeDB($author, $db)."', '".Contenido_Security::escapeDB($created, $db)."', '".Contenido_Security::escapeDB($modified, $db)."')"; + $db->query($sql); + $sql = "INSERT INTO ".$cfg["tab"]["clients_lang"]." (idclientslang, idclient, idlang) VALUES ('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["clients_lang"]))."', '".Contenido_Security::toInteger($client)."', + '".Contenido_Security::toInteger($new_idlang)."')"; + $db->query($sql); + + // Ab hyr seynd Drachen + $destPath = $cfgClient[$client]["path"]["frontend"]; + + if (file_exists($destPath) && file_exists($destPath."config.php")) { + $res = fopen($destPath."config.php","rb+"); + $res2 = fopen($destPath."config.php.new", "ab+"); + + if ($res && $res2) { + while (!feof($res)) { + $buffer = fgets($res, 4096); + $outbuf = str_replace("!LANG!", $new_idlang, $buffer); + fwrite($res2, $outbuf); + } + + fclose($res); + fclose($res2); + + if (file_exists($destPath."config.php")) { + unlink($destPath."config.php"); + } + + rename($destPath."config.php.new", $destPath."config.php"); + } + } else { + $notification->displayNotification("error", i18n("Could not set the language-ID in the file 'config.php'. Please set the language manually.")); + } +} + + +/** + * Rename a language + * + * @author Jan Lengowski + * @author Olaf Niemann + * @copyright four for business AG + */ +function langRenameLanguage($idlang, $name) { + global $db; + global $cfg; + + $sql = "UPDATE ".$cfg["tab"]["lang"]." SET name='".Contenido_Security::escapeDB($name, $db)."' WHERE idlang='".Contenido_Security::toInteger($idlang)."'"; + $db->query($sql); +} + + +/** + * Duplicate a language + * + * @param string $name Name of the language + * + * @author Jan Lengowski + * @author Olaf Niemann + * @copyright four for business AG + */ +function langDuplicateFromFirstLanguage($client, $idlang) { + + global $db, $sess, $cfg; + + $db2 = new DB_ConLite(); + + $sql = "SELECT * FROM ".$cfg["tab"]["clients_lang"]." WHERE idclient='".Contenido_Security::toInteger($client)."' ORDER BY idlang ASC"; + + $db->query($sql); + if ($db->next_record()) { //***********if there is already a language copy from it + $firstlang = $db->f("idlang"); + + //***********duplicate entries in 'art_lang'-table************* + $sql = "SELECT * FROM ".$cfg["tab"]["art_lang"]." AS A, ".$cfg["tab"]["art"]." AS B WHERE A.idart=B.idart AND B.idclient='".Contenido_Security::toInteger($client)."' AND idlang!='0' + AND idlang='".Contenido_Security::toInteger($firstlang)."'"; + $db->query($sql); + + /* Array storing the article->templatecfg allocations for later reallocation */ + $cfg_art = array(); + + while ($db->next_record()) { + /* Store the idartlang->idplcfg allocation for later reallocation */ + $cfg_art[] = array('idartlang' => $db->f('idartlang'), + 'idtplcfg' => $db->f('idtplcfg')); + + $keystring = ""; + $valuestring = ""; + + while (list($key, $value) = each($db->Record)) { + if (is_string($key) && (strpos($key, 'idartlang') === false) && (strpos($key, 'idlang') !== 0) && (strpos($key, 'idclient') !== 0)) { + $keystring = $keystring.",".$key; + $valuestring = $valuestring.",'".addslashes($value)."'"; + } elseif (is_string($key) && (strpos($key, 'idartlang') !== false)) { + $tmp_idartlang_alt = $value; + } + } + + $tmp_idartlang_neu = $db2->nextid($cfg["tab"]["art_lang"]); + + $keystring = $keystring.",idartlang"; + $keystring = preg_replace('/,$/', '', $keystring); + $keystring = preg_replace('/^,/', '', $keystring); + $keystring = $keystring.",idlang"; + + $valuestring = $valuestring.",$tmp_idartlang_neu"; + $valuestring = preg_replace('/,$/', '', $valuestring); + $valuestring = preg_replace('/^,/', '', $valuestring); + $valuestring = $valuestring.",$idlang"; + + //********* duplicates entry in DB **************** + $sql = "INSERT INTO ".$cfg["tab"]["art_lang"]." (".Contenido_Security::escapeDB($keystring, $db2).") VALUES (".Contenido_Security::escapeDB($valuestring, $db2).")"; + $db2->query($sql); + + //***********duplicate entries in 'cat_lang'-table************* + $sql = "SELECT * FROM ".$cfg["tab"]["content"]." WHERE idartlang='".Contenido_Security::toInteger($tmp_idartlang_alt)."'"; + $db2->query($sql); + + while ($db2->next_record()) { + $keystring = ""; + $valuestring = ""; + while (list($key, $value) = each($db2->Record)) { + if (is_string($key) && (strpos($key, 'idcontent') === false) && (strpos($key, 'idartlang') !== 0)) { + $keystring = $keystring.",".$key; + $valuestring = $valuestring.",'".addslashes($value)."'"; + } + } + $keystring = preg_replace('/,$/', '', $keystring); + $keystring = preg_replace('/^,/', '', $keystring); + $keystring = $keystring.",idartlang"; + + $valuestring = preg_replace('/,$/', '', $valuestring); + $valuestring = preg_replace('/^,/', '', $valuestring); + $valuestring = $valuestring.",$tmp_idartlang_neu"; + + $db3 = new DB_ConLite(); + //********* duplicates entry in DB **************** + $sql = "INSERT INTO ".$cfg["tab"]["content"]." (idcontent, ".Contenido_Security::escapeDB($keystring, $db3).") VALUES ('".Contenido_Security::toInteger($db3->nextid($cfg["tab"]["content"]))."', + ".Contenido_Security::escapeDB($valuestring, $db3).")"; + $db3->query($sql); + } + + //********* make changes to new entry************* + $date = date("Y-m-d H:i:s"); + $sql = "SELECT * FROM ".$cfg["tab"]["art_lang"]." AS A, ".$cfg["tab"]["art"]." AS B WHERE A.idart=B.idart AND B.idclient='".Contenido_Security::toInteger($client)."' AND idlang='".Contenido_Security::toInteger($idlang)."'"; + $db2->query($sql); + while ($db2->next_record()) { + $a_artlang[] = $db2->f("idartlang"); + } + foreach ($a_artlang as $val_artlang) { + $sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET created='".Contenido_Security::escapeDB($date, $db2)."', lastmodified='0', online='0', author='' WHERE idartlang='".Contenido_Security::toInteger($val_artlang)."'"; + $db2->query($sql); + } + } + + fakeheader(time()); + + /* Duplicate all entries in the 'cat_lang' table */ + $sql = "SELECT + * + FROM + ".$cfg["tab"]["cat_lang"]." AS A, + ".$cfg["tab"]["cat"]." AS B + WHERE + A.idcat=B.idcat AND + B.idclient='".Contenido_Security::toInteger($client)."' AND + idlang='".Contenido_Security::toInteger($firstlang)."'"; + + $db->query($sql); + + /* Array storing the category->template allocations fot later reallocation */ + $cfg_cat = array(); + + while ($db->next_record()) { + + $nextid = $db2->nextid($cfg["tab"]["cat_lang"]); + + $keystring = ""; + $valuestring = ""; + + /* Store the idartlang->idplcfg allocation for later reallocation */ + $cfg_cat[] = array('idcatlang' => $nextid, + 'idtplcfg' => $db->f('idtplcfg')); + + while (list($key, $value) = each($db->Record)) { + if (is_string($key) && (strpos($key, 'idcatlang') === false) && (strpos($key, 'idlang') !== 0) && + (strpos($key, 'idclient') !== 0) && (strpos($key, 'parentid') !== 0) && (strpos($key, 'preid') !== 0) && + (strpos($key, 'postid') !== 0)) { + $keystring = $keystring.",".$key; + $valuestring = $valuestring.",'".addslashes($value)."'"; + } + } + + $keystring = preg_replace('/,$/', '', $keystring); + $keystring = preg_replace('/^,/', '', $keystring); + $keystring = $keystring.",idlang"; + + $valuestring = preg_replace('/,$/', '', $valuestring); + $valuestring = preg_replace('/^,/', '', $valuestring); + $valuestring = $valuestring.",$idlang"; + + //********* duplicates entry in DB **************** + $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, ".Contenido_Security::escapeDB($keystring, $db2).") VALUES ('".Contenido_Security::toInteger($nextid)."', ".Contenido_Security::escapeDB($valuestring, $db2).")"; + $db2->query($sql); + + //********* make changes to new entry************* + $sql = "SELECT * FROM ".$cfg["tab"]["cat_lang"]." AS A, ".$cfg["tab"]["cat"]." AS B WHERE A.idcat=B.idcat AND B.idclient='".Contenido_Security::toInteger($client)."' AND idlang='".Contenido_Security::toInteger($idlang)."'"; + $db2->query($sql); + + while ($db2->next_record()) { + $a_catlang[] = $db2->f("idcatlang"); + } + foreach ($a_catlang as $val_catlang) { + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET visible='0' WHERE idcatlang='".Contenido_Security::toInteger($val_catlang)."'"; + $db2->query($sql); + } + + } + + //***********duplicate entries in 'stat'-table************* + $sql = "SELECT * FROM ".$cfg["tab"]["stat"]." WHERE idclient='".Contenido_Security::toInteger($client)."' AND idlang='".Contenido_Security::toInteger($firstlang)."'"; + $db->query($sql); + while ($db->next_record()) { + $keystring = ""; + $valuestring = ""; + while (list($key, $value) = each($db->Record)) { + if (is_string($key) && (strpos($key, 'idstat') === false) && (strpos($key, 'idlang') !== 0)) { + $keystring = $keystring.",".$key; + $valuestring = $valuestring.",'".addslashes($value)."'"; + } + } + $keystring = preg_replace('/,$/', '', $keystring); + $keystring = preg_replace('/^,/', '', $keystring); + $keystring = $keystring.",idlang"; + + $valuestring = preg_replace('/,$/', '', $valuestring); + $valuestring = preg_replace('/^,/', '', $valuestring); + $valuestring = $valuestring.",$idlang"; + + $db2 = new DB_ConLite(); + //********* duplicates entry in DB **************** + $sql = "INSERT INTO ".$cfg["tab"]["stat"]." (idstat, ".Contenido_Security::escapeDB($keystring, $db2).") VALUES ('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["stat"]))."', ".Contenido_Security::escapeDB($valuestring, $db2).")"; + $db2->query($sql); + + //********* make changes to new entry************* + $sql = "UPDATE ".$cfg["tab"]["stat"]." SET visited='0' WHERE idclient='".Contenido_Security::toInteger($client)."' AND idlang='".Contenido_Security::toInteger($idlang)."'"; + $db2->query($sql); + } + + fakeheader(time()); + + //***********duplicate entries in 'tpl_conf'-table************* + $sql = "SELECT * FROM ".$cfg["tab"]["tpl_conf"]; + $db->query($sql); + + /* Array storing the category->template allocations fot later reallocation */ + $cfg_old_new = array(); + + while ($db->next_record()) { + $nextid = $db2->nextid($cfg["tab"]["tpl_conf"]); + + /* Array storing the category->template allocations fot later reallocation */ + $cfg_old_new[] = array('oldidtplcfg' => $db->f('idtplcfg'), + 'newidtplcfg' => $nextid); + + $keystring = ""; + $valuestring = ""; + + while (list($key, $value) = each($db->Record)) { + if (is_string($key) && (strpos($key, 'idtplcfg') === false) && (strpos($key, 'idlang') !== 0)) { + $keystring = $keystring.",".$key; + $valuestring = $valuestring.",'".addslashes($value)."'"; + } + } + + $keystring = preg_replace('/,$/', '', $keystring); + $keystring = preg_replace('/^,/', '', $keystring); + + $valuestring = preg_replace('/,$/', '', $valuestring); + $valuestring = preg_replace('/^,/', '', $valuestring); + + //********* duplicates entry in DB **************** + $sql = "INSERT INTO ".$cfg["tab"]["tpl_conf"]." (idtplcfg, ".Contenido_Security::escapeDB($keystring, $db2).") VALUES ('".Contenido_Security::toInteger($nextid)."', ".Contenido_Security::escapeDB($valuestring, $db2).")"; + $db2->query($sql); + + } + + /* + - REMARK - JL - 15.07.03 + + Available tpl-cfg allocation arrays are: + + $cfg_cat = array('idcatlang' => n, + 'idtplcfg' => n); + + $cfg_art = array('idartlang' => n, + 'idtplcfg' => n); + + $cfg_old_new = array('oldidtplcfg' => n, + 'newidtplcfg' => n); + */ + + /* Copy the template configuration data */ + if (is_array($cfg_old_new)) { + foreach ($cfg_old_new as $data) { + $oldidtplcfg = $data['oldidtplcfg']; + $newidtplcfg = $data['newidtplcfg']; + + $sql = "SELECT number, container FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($oldidtplcfg)."' ORDER BY number ASC"; + $db->query($sql); + + $container_data = array(); + + while ($db->next_record()) { + $container_data[$db->f('number')] = $db->f('container'); + } + + if (is_array($container_data)) { + foreach ($container_data as $number => $data) { + $nextid = $db->nextid($cfg["tab"]["container_conf"]); + $sql = "INSERT INTO ".$cfg["tab"]["container_conf"]. " + (idcontainerc, idtplcfg, number, container) VALUES ('".Contenido_Security::toInteger($nextid)."', '".Contenido_Security::toInteger($newidtplcfg)."', + '".Contenido_Security::toInteger($number)."', '".Contenido_Security::escapeDB($data, $db)."')"; + $db->query($sql); + } + } + } + } + + /* Reallocate the category -> templatecfg allocations */ + if (is_array($cfg_cat)) { + foreach($cfg_cat as $data) { + if ($data['idtplcfg'] != 0) { + // Category has a configuration + foreach ($cfg_old_new as $arr) { + if ($data['idtplcfg'] == $arr['oldidtplcfg']) { + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET idtplcfg = '".Contenido_Security::toInteger($arr['newidtplcfg'])."' WHERE idcatlang = '".Contenido_Security::toInteger($data['idcatlang'])."'"; + $db->query($sql); + } + } + } + } + } + + /* Reallocate the article -> templatecfg allocations */ + if (is_array($cfg_art)) { + foreach($cfg_art as $data) { + if ($data['idtplcfg'] != 0) { + // Category has a configuration + foreach ($cfg_old_new as $arr) { + if ($data['idtplcfg'] == $arr['oldidtplcfg']) { + // We have a match :) + $sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET idtplcfg = '".Contenido_Security::toInteger($arr['newidtplcfg'])."' WHERE idartlang = '".Contenido_Security::toInteger($data['idartlang'])."'"; + $db->query($sql); + } + } + } + } + } + } + + /* Update code */ + conGenerateCodeForAllarts(); +} + + +/** + * Delete a language + * + * @author Jan Lengowski + * @author Olaf Niemann + * @copyright four for business AG + */ +function langDeleteLanguage($idlang, $idclient = "") { + global $db, $sess, $client, $cfg, $notification; + + $deleteok = 1; + + // Bugfix: New idclient parameter introduced, as Administration -> Languages + // is used for different clients to delete the language + + // Use global client id, if idclient not specified (former behaviour) + // Note, that this check also have been added for the action in the database + // - just to be equal to langNewLanguage + if (!is_numeric($idclient)) { + $idclient = $client; + } + + //************ check if there are still arts online + $sql = "SELECT * FROM ".$cfg["tab"]["art_lang"]." AS A, ".$cfg["tab"]["art"]." AS B WHERE A.idart=B.idart AND B.idclient='".Contenido_Security::toInteger($idclient)."' + AND A.idlang='".Contenido_Security::toInteger($idlang)."' AND A.online='1'"; + $db->query($sql); + if ($db->next_record()) { + conDeleteArt($db->f("idart")); + } + + //************ check if there are visible categories + $sql = "SELECT * FROM ".$cfg["tab"]["cat_lang"]." AS A, ".$cfg["tab"]["cat"]." AS B WHERE A.idcat=B.idcat AND B.idclient='".Contenido_Security::toInteger($idclient)."' + AND A.idlang='".Contenido_Security::toInteger($idlang)."' AND A.visible='1'"; + $db->query($sql); + if ($db->next_record()) { + strDeleteCategory($db->f("idcat")); + } + + if ($deleteok == 1) { + //********* check if this is the clients last language to be deleted, if yes delete from art, cat, and cat_art as well ******* + $lastlanguage = 0; + $sql = "SELECT COUNT(*) FROM ".$cfg["tab"]["clients_lang"]." WHERE idclient='".Contenido_Security::toInteger($idclient)."'"; + $db->query($sql); + $db->next_record(); + if ($db->f(0) == 1) { + $lastlanguage = 1; + } + + //********** delete from 'art_lang'-table ************* + $sql = "SELECT A.idtplcfg AS idtplcfg, idartlang, A.idart FROM ".$cfg["tab"]["art_lang"]." AS A, ".$cfg["tab"]["art"]." AS B WHERE A.idart=B.idart AND B.idclient='".Contenido_Security::toInteger($idclient)."' + AND idlang!='0' AND idlang='".Contenido_Security::toInteger($idlang)."'"; + $db->query($sql); + while ($db->next_record()) { + $a_idartlang[] = $db->f("idartlang"); + $a_idart[] = $db->f("idart"); + $a_idtplcfg[] = $db->f("idtplcfg"); + } + if (is_array($a_idartlang)) { + foreach ($a_idartlang as $value) { + $sql = "DELETE FROM ".$cfg["tab"]["art_lang"]." WHERE idartlang='".Contenido_Security::escapeDB($value, $db)."'"; + $db->query($sql); + + $sql = "DELETE FROM ".$cfg["tab"]["content"]." WHERE idartlang='".Contenido_Security::escapeDB($value, $db)."'"; + $db->query($sql); + + $sql = "DELETE FROM ".$cfg["tab"]["link"]." WHERE idartlang='".Contenido_Security::escapeDB($value, $db)."'"; + $db->query($sql); + } + } + + if ($lastlanguage == 1) { + if (is_array($a_idart)) { + foreach ($a_idart as $value) { + $sql = "DELETE FROM ".$cfg["tab"]["art"]." WHERE idart='".Contenido_Security::escapeDB($value, $db)."'"; + $db->query($sql); + $sql = "DELETE FROM ".$cfg["tab"]["cat_art"]." WHERE idart='".Contenido_Security::escapeDB($value, $db)."'"; + $db->query($sql); + } + } + } + + //********** delete from 'cat_lang'-table ************* + $sql = "SELECT A.idtplcfg AS idtplcfg, idcatlang, A.idcat FROM ".$cfg["tab"]["cat_lang"]." AS A, ".$cfg["tab"]["cat"]." AS B WHERE A.idcat=B.idcat AND B.idclient='".Contenido_Security::toInteger($idclient)."' + AND idlang!='0' AND idlang='".Contenido_Security::toInteger($idlang)."'"; + $db->query($sql); + while ($db->next_record()) { + $a_idcatlang[] = $db->f("idcatlang"); + $a_idcat[] = $db->f("idcat"); + $a_idtplcfg[] = $db->f("idtplcfg"); // added + } + if (is_array($a_idcatlang)) { + foreach ($a_idcatlang as $value) { + $sql = "DELETE FROM ".$cfg["tab"]["cat_lang"]." WHERE idcatlang='".Contenido_Security::escapeDB($value, $db)."'"; + $db->query($sql); + } + } + if ($lastlanguage == 1) { + if (is_array($a_idcat)) { + foreach ($a_idcat as $value) { + $sql = "DELETE FROM ".$cfg["tab"]["cat"]." WHERE idcat='".Contenido_Security::escapeDB($value, $db)."'"; + $db->query($sql); + $sql = "DELETE FROM ".$cfg["tab"]["cat_tree"]." WHERE idcat='".Contenido_Security::escapeDB($value, $db)."'"; + $db->query($sql); + } + } + } + + //********** delete from 'stat'-table ************* + $sql = "DELETE FROM ".$cfg["tab"]["stat"]." WHERE idlang='".Contenido_Security::toInteger($idlang)."' AND idclient='".Contenido_Security::toInteger($idclient)."'"; + $db->query($sql); + + //********** delete from 'code'-table ************* + $sql = "DELETE FROM ".$cfg["tab"]["code"]." WHERE idlang='".Contenido_Security::toInteger($idlang)."' AND idclient='".Contenido_Security::toInteger($idclient)."'"; + $db->query($sql); + + if (is_array($a_idtplcfg)) { + foreach ($a_idtplcfg as $tplcfg) { + if ($tplcfg != 0) { + //********** delete from 'tpl_conf'-table ************* + $sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg='".Contenido_Security::toInteger($tplcfg)."'"; + $db->query($sql); + + //********** delete from 'container_conf'-table ************* + $sql = "DELETE FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg='".Contenido_Security::toInteger($tplcfg)."'"; + $db->query($sql); + } + } + } + + //*********** delete from 'clients_lang'-table************* + $sql = "DELETE FROM ".$cfg["tab"]["clients_lang"]." WHERE idclient='".Contenido_Security::toInteger($idclient)."' AND idlang='".Contenido_Security::toInteger($idlang)."'"; + $db->query($sql); + + //*********** delete from 'lang'-table************* + $sql = "DELETE FROM ".$cfg["tab"]["lang"]." WHERE idlang='".Contenido_Security::toInteger($idlang)."'"; + $db->query($sql); + } else { + return $notification->messageBox("error", i18n("Could not delete language"),0); + } +} + + +/** + * Deactivate a language + * + * @author Jan Lengowski + * @author Olaf Niemann + * @copyright four for business AG + */ +function langActivateDeactivateLanguage($idlang, $active) { + global $db; + global $sess; + global $client; + global $cfg; + + $sql = "UPDATE ".$cfg["tab"]["lang"]." SET active='".Contenido_Security::toInteger($active)."' WHERE idlang='".Contenido_Security::toInteger($idlang)."'"; + $db->query($sql); +} + + +function langGetTextDirection ($idlang, $db = null) { + global $cfg; + + if ($db == null || !is_object($db)) { + $db = new DB_ConLite; + } + + $sql = "SELECT direction FROM ".$cfg["tab"]["lang"] ." WHERE idlang='".Contenido_Security::toInteger($idlang)."'"; + $db->query($sql); + + if ($db->next_record()) { + $direction = $db->f("direction"); + + if ($direction != "ltr" && $direction != "rtl") { + return "ltr"; + } else { + return $direction; + } + } else { + return "ltr"; + } +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.lay.php b/branches/conlite20/conlite/includes/functions.lay.php new file mode 100644 index 0000000..2ea265d --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.lay.php @@ -0,0 +1,133 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003 + * modified 2008-06-26, Frederic Schneider, add security fix + * + * $Id: functions.lay.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude ("includes", "functions.tpl.php"); +cInclude ("includes", "functions.con.php"); + +/** + * Edit or Create a new layout + * + * @param int $idlay Id of the Layout + * @param string $name Name of the Layout + * @param string $description Description of the Layout + * @param string $code Layout HTML Code + * @return int $idlay Id of the new or edited Layout + * + * @author Olaf Niemann + * @copryright four for business AG + */ +function layEditLayout($idlay, $name, $description, $code) { + + global $client, $auth, $cfg, $sess, $area_tree, $perm, $cfgClient; + + $db2= new DB_ConLite; + $db = new DB_ConLite; + + $date = date("Y-m-d H:i:s"); + $author = "".$auth->auth["uname"].""; + $description = (string) stripslashes($description); + + set_magic_quotes_gpc($name); + set_magic_quotes_gpc($description); + set_magic_quotes_gpc($code); + + if (strlen(trim($name)) == 0) { + $name = i18n('-- Unnamed Layout --'); + } + + /** + * START TRACK VERSION + **/ + $oVersion = new VersionLayout($idlay, $cfg, $cfgClient, $db, $client, $area, $frame); + + // Create new Layout Version in cms/version/layout/ + $oVersion->createNewVersion(); + + /** + * END TRACK VERSION + **/ + + + if (!$idlay) { + + $tmp_newid = $db->nextid($cfg["tab"]["lay"]); + $idlay = $tmp_newid; + + $sql = "INSERT INTO ".$cfg["tab"]["lay"]." (idlay,name, description, deletable, code, idclient, author, created, lastmodified) VALUES ('".Contenido_Security::toInteger($tmp_newid)."', '".Contenido_Security::escapeDB($name, $db)."', + '".Contenido_Security::escapeDB($description, $db)."', '1', '".$code."', '".Contenido_Security::toInteger($client)."', '".Contenido_Security::escapeDB($author, $db)."', + '".Contenido_Security::escapeDB($date, $db)."', '".Contenido_Security::escapeDB($date, $db)."')"; + $db->query($sql); + + // set correct rights for element + cInclude ("includes", "functions.rights.php"); + createRightsForElement("lay", $idlay); + + return $idlay; + + } else { + + $sql = "UPDATE ".$cfg["tab"]["lay"]." SET name='".Contenido_Security::escapeDB($name, $db)."', description='".Contenido_Security::escapeDB($description, $db)."', code='".$code."', + author='".Contenido_Security::escapeDB($author, $db)."', lastmodified='".Contenido_Security::escapeDB($date, $db)."' WHERE idlay='".Contenido_Security::toInteger($idlay)."'"; + $db->query($sql); + + /* Update CODE table*/ + conGenerateCodeForAllartsUsingLayout($idlay); + + return $idlay; + } + +} + +function layDeleteLayout($idlay) { + global $db; + global $client; + global $cfg; + global $area_tree; + global $perm; + + $sql = "SELECT * FROM ".$cfg["tab"]["tpl"]." WHERE idlay='".Contenido_Security::toInteger($idlay)."'"; + $db->query($sql); + if ($db->next_record()) { + return "0301"; // layout is still in use, you cannot delete it + } else { + $sql = "DELETE FROM ".$cfg["tab"]["lay"]." WHERE idlay='".Contenido_Security::toInteger($idlay)."'"; + $db->query($sql); + } + + // delete rights for element + cInclude ("includes", "functions.rights.php"); + deleteRightsForElement("lay", $idlay); + +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.mod.php b/branches/conlite20/conlite/includes/functions.mod.php new file mode 100644 index 0000000..febd09f --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.mod.php @@ -0,0 +1,214 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003 + * modified 2008-06-26, Frederic Schneider, add security fix + * modified 2010-08-13, Dominik Ziegler, fixed CON-337 - added update of lastmodified + * + * $Id: functions.mod.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude ("includes", "functions.tpl.php"); +cInclude ("includes", "functions.con.php"); + +function modEditModule($idmod, $name, $description, $input, $output, $template, $type = "") { + global $db, $client, $cfgClient, $auth, $cfg, $sess, $area_tree, $perm, $frame; + + $date = date("Y-m-d H:i:s"); + $author = $auth->auth["uname"]; + + /** + * START TRACK VERSION + **/ + $oVersion = new VersionModule($idmod, $cfg, $cfgClient, $db, $client, $area, $frame); + + // Create new Module Version in cms/version/module/ + $oVersion->createNewVersion(); + + /** + * END TRACK VERSION + **/ + + if (!$idmod) { + $cApiModuleCollection = new cApiModuleCollection; + $cApiModule = $cApiModuleCollection->create($name); + + $idmod = $cApiModule->get("idmod"); + + cInclude ("includes", "functions.rights.php"); + createRightsForElement("mod", $idmod); + } else { + $cApiModule = new cApiModule; + $cApiModule->loadByPrimaryKey($idmod); + } + + /* dceModFileEdit (c)2009-2011 www.dceonline.de */ + if ($cfg['dceModEdit']['use'] + || $cApiModule->get("name") != stripslashes($name) + || $cApiModule->get("output") != stripslashes($output) + || $cApiModule->get("template") != stripslashes($template) + || $cApiModule->get("description") != stripslashes($description) + || $cApiModule->get("input") != stripslashes($input) + || $cApiModule->get("type") != stripslashes($type)) { + + $cApiModule->set("name", $name); + $cApiModule->set("output", $output); + $cApiModule->set("template", $template); + $cApiModule->set("description", $description); + $cApiModule->set("input", $input); + $cApiModule->set("type", $type); + $cApiModule->set("lastmodified", $date); + + $cApiModule->store(); + } + return $idmod; +} + +function modDeleteModule($idmod) +{ + # Global vars + global $db, $sess, $client, $cfg, $area_tree, $perm; + + $sql = "DELETE FROM ".$cfg["tab"]["mod"]." WHERE idmod = '".Contenido_Security::toInteger($idmod)."' AND idclient = '".Contenido_Security::toInteger($client)."'"; + $db->query($sql); + + + // delete rights for element + cInclude ("includes", "functions.rights.php"); + deleteRightsForElement("mod", $idmod); +} + +// $code: Code to evaluate +// $id: Unique ID for the test function +// $mode: true if start in php mode, otherwise false +// Returns true or false + +function modTestModule ($code, $id, $output = false) +{ + global $cfg, $modErrorMessage; + + $magicvalue = 0; + + $db = new DB_ConLite; + + /* Put a $ in front of all CMS variables + to prevent PHP error messages */ + $sql = "SELECT type FROM ".$cfg["tab"]["type"]; + $db->query($sql); + + while ($db->next_record()) + { + $code = str_replace($db->f("type").'[','$'.$db->f("type").'[', $code); + } + + $code = preg_replace(',\[(\d+)?CMS_VALUE\[(\d+)\](\d+)?\],i', '[\1\2\3]', $code); + + $code = str_replace('CMS_VALUE','$CMS_VALUE', $code); + $code = str_replace('CMS_VAR','$CMS_VAR', $code); + + /* If the module is an output module, escape PHP since + all output modules enter php mode */ + if ($output == true) + { + $code = "?>\n" . $code . "\n"); + @ini_set("error_append_string",""); + + /* Turn off output buffering and error reporting, eval the code */ + ob_start(); + $display_errors = ini_get("display_errors"); + @ini_set("display_errors", true); + $output = eval($code); + @ini_set("display_errors", $display_errors); + + /* Get the buffer contents and turn it on again */ + $output = ob_get_contents(); + ob_end_clean(); + + /* Remove the prepend and append settings */ + /* 19.09.2006: Following lines have been disabled, as ini_restore has been disabled + by some hosters as there is a security leak in PHP (PHP <= 5.1.6 & <= 4.4.4) */ + //ini_restore("error_prepend_string"); + //ini_restore("error_append_string"); + @ini_set("error_prepend_string", $sErs); // Restoring settings (see above) + @ini_set("error_append_string", $sEas); // Restoring settings (see above) + + /* Strip out the error message */ + $start = strpos($output, ""); + $end = strpos($output, ""); + + /* More stripping: Users shouldnt see where the file + is located, but they should see the error line */ + if ($start !== false) + { + $start = strpos($output, "eval()"); + + $modErrorMessage = substr($output, $start, $end - $start); + + /* Kill that HTML formatting */ + $modErrorMessage = str_replace("","",$modErrorMessage); + $modErrorMessage = str_replace("","",$modErrorMessage); + $modErrorMessage = str_replace("
","",$modErrorMessage); + $modErrorMessage = str_replace("
","",$modErrorMessage); + } + + /* check if there are any php short tags in code, and display error*/ + $bHasShortTags = false; + if (preg_match('/<\?\s+/', $code) && $magicvalue == 941) { + $bHasShortTags = true; + $modErrorMessage = i18n('Please do not use short open Tags. (Use \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.pathresolver.php b/branches/conlite20/conlite/includes/functions.pathresolver.php new file mode 100644 index 0000000..7c44554 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.pathresolver.php @@ -0,0 +1,405 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2006-12-14, init array $results in fct prResolvePathViaURLNames, prResolvePathViaCategoryNames, return type is now integer + * modified 2008-06-26, Frederic Schneider, add security fix + * modified 2008-08-11, Bilal Arslan, Change prResolvePathViaCategoryNames function for take current path language id! + * modified 2008-11-11, Andreas Lindner, Change prResolvePathViaCategoryNames, suppress change of current language if an url path + * is found in current and at least one more language + * modified 2009-10-23, Murat Purc, removed deprecated function (PHP 5.3 ready) and formatting + * + * $Id: functions.pathresolver.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * prResolvePathViaURLNames: Resolves a path using some fuzzy logic. + * + * Warning: If you use this function, try to pass a "good" path. This + * function doesn't guarantee that the matches are logically + * best-matches. + * + * This function operates on the category aliases. It compares the given path with the urlpaths generated by function + * prCreateURLNameLocationString() based on category aliases. + * + * @param $path string Path to resolve + * @return integer Closest matching category ID (idcat) + */ +function prResolvePathViaURLNames($path) { + $handle = startTiming("prResolvePathViaURLNames", array ($path)); + + global $cfg, $lang, $client; + + /* Initialize variables */ + $db = new DB_ConLite; + $categories = array(); + $results = array(); + + /* Pre-process path */ + $path = strtolower(str_replace(" ", "", $path)); + + if ($cfg["pathresolve_heapcache"] == true) { + $pathresolve_tablename = $cfg["sql"]["sqlprefix"]."_pathresolve_cache"; + + $sql = "SHOW TABLES LIKE '".Contenido_Security::escapeDB($pathresolve_tablename, $db)."'"; + $db->query($sql); + + if (!$db->next_record()) { + /** + * @TODO: Externalize table creation + * + * Important: This is really a hack! Don't use pathresolve_heapcache if you are + * not sure what it does. + */ + $sql = 'CREATE TABLE `'.Contenido_Security::escapeDB($pathresolve_tablename, $db).'` ( + `idpathresolvecache` INT( 10 ) NOT NULL PRIMARY KEY , + `path` VARCHAR( 255 ) NOT NULL , + `idcat` INT( 10 ) NOT NULL , + `idlang` INT( 10 ) NOT NULL , + `lastcached` INT(10) NOT NULL + ) TYPE = HEAP;'; + + $db->query($sql); + } + + $sql = "SELECT idpathresolvecache, idcat, lastcached FROM %s WHERE path LIKE '%s' AND idlang='%s' ORDER BY lastcached DESC LIMIT 1"; + $db->query(sprintf($sql, Contenido_Security::escapeDB($pathresolve_tablename, $db), Contenido_Security::escapeDB($path, $db), Contenido_Security::toInteger($lang))); + + if ($db->next_record()) { + if (isset ($cfg["pathresolve_heapcache_time"])) { + $iCacheTime = $cfg["pathresolve_heapcache_time"]; + } else { + $iCacheTime = 60 * 60 * 24; + } + + $tmp_idcat = $db->f("idcat"); + + if ($db->f("lastcached") + $iCacheTime < time()) { + $sql = "DELETE FROM %s WHERE idpathresolvecache = '%s'"; + $db->query(sprintf($sql, Contenido_Security::escapeDB($pathresolve_tablename, $db), Contenido_Security::toInteger($db->f("idpathresolvecache")))); + } else { + return $db->f("idcat"); + } + } + } + + /* Fetch all category names, build path strings */ +// change the where statement for get all languages + $sql = "SELECT * FROM ".$cfg["tab"]["cat_tree"]." AS A, ".$cfg["tab"]["cat"]." AS B, ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND C.idlang='".Contenido_Security::toInteger($lang)."' + AND C.visible = 1 AND B.idclient='".Contenido_Security::toInteger($client)."' ORDER BY A.idtree"; + $db->query($sql); + + $catpath = array (); + while ($db->next_record()) { + $cat_str = ""; + prCreateURLNameLocationString($db->f("idcat"), "/", $cat_str, false, "", 0, 0, true, true); + + /* Store path */ + $catpath[$db->f("idcat")] = $cat_str; + $catnames[$db->f("idcat")] = $db->f("name"); + $catlevels[$db->f("idcat")] = $db->f("level"); + } + + /* Compare strings using the similar_text algorythm */ + $percent = 0; + foreach ($catpath as $key => $value) { + $value = strtolower(str_replace(" ", "", $value)); + + similar_text($value, $path, $percent); + + $firstpath = strpos($value, "/"); + + if ($firstpath !== 0) { + $xpath = substr($value, $firstpath); + $ypath = substr($path, 0, strlen($path) - 1); + if ($xpath == $ypath) { + $results[$key] = 100; + } else { + $results[$key] = $percent; + } + } else { + $results[$key] = $percent; + } + + } + + arsort($results, SORT_NUMERIC); + reset($results); + + endAndLogTiming($handle); + + if ($cfg["pathresolve_heapcache"] == true) { + $nid = $db->nextid($pathresolve_tablename); + + $sql = "INSERT INTO %s SET idpathresolvecache='%s', path='%s', idcat='%s', idlang='%s', lastcached=%s"; + $db->query(sprintf($sql, Contenido_Security::toInteger($pathresolve_tablename), Contenido_Security::toInteger($nid), Contenido_Security::escapeDB($path, $db), Contenido_Security::toInteger(key($results)), Contenido_Security::toInteger($lang), time())); + } + + return (int) key($results); +} + +/** + * prResolvePathViaCategoryNames: Resolves a path using some fuzzy logic. + * + * Warning: If you use this function, try to pass a "good" path. This + * function doesn't guarantee that the matches are logically + * best-matches. + * + * This function operates on the actual category names. + * + * @param $path string Path to resolve + * @return integer Closest matching category ID (idcat) + */ +function prResolvePathViaCategoryNames($path, &$iLangCheck) { + $handle = startTiming("prResolvePathViaCategoryNames", array ($path)); + + global $cfg, $lang, $client; + + /* Initialize variables */ + $db = new DB_ConLite; + $categories = array (); + $results = array(); + $iLangCheckOrg = $iLangCheck; + + /* Added since 2008-08 from Bilal Arslan */ +// To take only path body + if (preg_match('/^\/(.*)\/$/', $path, $aResults)) { + $aResult = explode("/", $aResults[1]); + } elseif (preg_match('/^\/(.*)$/', $path, $aResults)) { + $aResult = explode("/", $aResults[1]); + } else { + $aResults[1] = $path; + } + + $aResults[1] = strtolower(preg_replace('/-/', ' ', $aResults[1])); + +// Init to Compare, save path in array + $aPathsToCompare = explode("/", $aResults[1]); + $iCountPath = count($aPathsToCompare); + +// init lang id + $iLangCheck=0; + + /* Pre-process path */ + $path = strtolower(str_replace(" ", "", $path)); + + /* Fetch all category names, build path strings */ +// change the where statement for get all languages + $sql = "SELECT * FROM ".$cfg["tab"]["cat_tree"]." AS A, ".$cfg["tab"]["cat"]." AS B, ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat + AND C.visible = 1 AND B.idclient='".Contenido_Security::toInteger($client)."' ORDER BY A.idtree"; + $db->query($sql); + + $catpath = array (); + $arrLangMatches = array(); + + while ($db->next_record()) { + $cat_str = ""; + $aTemp = ""; + $iFor = 0; + $bLang = false; + +// $level is changeless 0!!! + conCreateLocationString($db->f("idcat"), "/", $cat_str, false, '', 0, $db->f("idlang")); + /* Store path */ + $catpath[$db->f("idcat")] = $cat_str; + $catnames[$db->f("idcat")] = $db->f("name"); + $catlevels[$db->f("idcat")] = $db->f("level"); + +// Init variables for take a language id + $aTemp = strtolower($cat_str); + $aDBToCompare = explode("/", $aTemp); + $iCountDB = count($aDBToCompare); + $iCountDBFor = $iCountDB - 1; +// take min. count of two arrays + ($iCountDB > $iCountPath) ? $iFor = $iCountPath : $iFor = $iCountDB; + $iCountM = $iFor-1; + + for ($i=0; $i<$iFor; $i++) { + if ($aPathsToCompare[$iCountM] == $aDBToCompare[$iCountDBFor]) { + $bLang = true; + } else { + $bLang = false; + } + $iCountM--; + $iCountDBFor--; +// compare, only if current element is lastone and we are in true path + if($i == $iFor-1 && $bLang) { + $iLangCheck = $db->f("idlang"); + $arrLangMatches[] = $iLangCheck; + } + } + + } + + #Suppress wrongly language change if url name can be found in current language + if ($iLangCheckOrg == 0) { + if (in_array($lang, $arrLangMatches)) { + $iLangCheck = $lang; + } + } + + /* Compare strings using the similar_text algorythm */ + $percent = 0; + foreach ($catpath as $key => $value) { + $value = strtolower(str_replace(" ", "", $value)); + + similar_text($value, $path, $percent); + + $results[$key] = $percent; + } + + foreach ($catnames as $key => $value) { + $value = strtolower(str_replace(" ", "", $value)); + similar_text($value, $path, $percent); + + /* Apply weight */ + $percent = $percent * $catlevels[$key]; + + if ($results[$key] > $percent) { + $results[$key] = $percent; + } + } + + arsort($results, SORT_NUMERIC); + reset($results); + + endAndLogTiming($handle); + return (int) key($results); +} + +/** + * Recursive function to create an URL name location string + * + * @param int $idcat ID of the starting category + * @param string $seperator Seperation string + * @param string $cat_str Category location string (by reference) + * @param boolean $makeLink create location string with links + * @param string $linkClass stylesheet class for the links + * @param integer first navigation level location string should be printed out (first level = 0!!) + * + * @return string location string + * + * @author Jan Lengowski + * @author Marco Jahn + * + * @copyright four for business AG + */ +function prCreateURLNameLocationString($idcat, $seperator, & $cat_str, $makeLink = false, $linkClass = "", + $firstTreeElementToUse = 0, $uselang = 0, $final = true, $usecache = false) { + global $cfg, $client, $cfgClient, $lang, $sess, $_URLlocationStringCache; + + if ($final == true) { + $cat_str = ""; + } + + if ($idcat == 0) { + $cat_str = "Lost and Found"; + return; + } + + if ($uselang == 0) { + $uselang = $lang; + } + + if ($final == true && $usecache == true) { + if (!is_array($_URLlocationStringCache)) { + if (file_exists($cfgClient[$client]["path"]["frontend"]."cache/locationstring-url-cache-$uselang.txt")) { + $_URLlocationStringCache = unserialize(file_get_contents($cfgClient[$client]["path"]["frontend"]."cache/locationstring-url-cache-$uselang.txt")); + } else { + $_URLlocationStringCache = array (); + } + } + + if (array_key_exists($idcat, $_URLlocationStringCache)) { + if ($_URLlocationStringCache[$idcat]["expires"] > time()) { + $cat_str = $_URLlocationStringCache[$idcat]["name"]; + return; + } + } + } + + $db = new DB_ConLite; + + $sql = "SELECT + a.urlname AS urlname, + a.name AS name, + a.idcat AS idcat, + b.parentid AS parentid, + c.level as level + FROM + ".$cfg["tab"]["cat_lang"]." AS a, + ".$cfg["tab"]["cat"]." AS b, + ".$cfg["tab"]["cat_tree"]." AS c + WHERE + a.idlang = '".Contenido_Security::toInteger($uselang)."' AND + b.idclient = '".Contenido_Security::toInteger($client)."' AND + b.idcat = '".Contenido_Security::toInteger($idcat)."' AND + a.idcat = b.idcat AND + c.idcat = b.idcat"; + + $db->query($sql); + $db->next_record(); + + if ($db->f("level") >= $firstTreeElementToUse) { + $name = $db->f("urlname"); + + if (trim($name) == "") { + $name = $db->f("name"); + } + + $parentid = $db->f("parentid"); + + //create link + if ($makeLink == true) { + $linkUrl = $sess->url("front_content.php?idcat=$idcat"); + $name = ''.$name.''; + } + + $tmp_cat_str = $name.$seperator.$cat_str; + $cat_str = $tmp_cat_str; + } + + if ($parentid != 0) { + prCreateURLNameLocationString($parentid, $seperator, $cat_str, $makeLink, $linkClass, $firstTreeElementToUse, $uselang, false, $usecache); + } else { + $sep_length = strlen($seperator); + $str_length = strlen($cat_str); + $tmp_length = $str_length - $sep_length; + $cat_str = substr($cat_str, 0, $tmp_length); + } + + if ($final == true && $usecache == true) { + $_URLlocationStringCache[$idcat]["name"] = $cat_str; + $_URLlocationStringCache[$idcat]["expires"] = time() + 3600; + + if (is_writable($cfgClient[$client]["path"]["frontend"]."cache/") || (strtolower(substr(PHP_OS, 0, 3)) == "win")) { + file_put_contents($cfgClient[$client]["path"]["frontend"]."cache/locationstring-url-cache-$uselang.txt", serialize($_URLlocationStringCache)); + } + } +} +?> diff --git a/branches/conlite20/conlite/includes/functions.php54.php b/branches/conlite20/conlite/includes/functions.php54.php new file mode 100644 index 0000000..a39a4d6 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.php54.php @@ -0,0 +1,149 @@ + + * @copyright (c) 2014, www.conlite.org + * @version $Rev: 362 $ + * + * $Id: functions.php54.php 362 2015-10-05 16:31:26Z oldperl $ + */ + +// security +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * + * @return string + */ +function clCheckForPhp54() { + if(!defined("CL_PHP54")) { + /** + * PHP-version equal or greater PHP 5.4 + * @constant CL_PHP54 phpversion >= 5.4 + */ + define('CL_PHP54', version_compare(PHP_VERSION, '5.4.0', '>=') ? 1:0); + } + return CL_PHP54; +} + +function clPhp54FixedFunc($funcname, $value, $flags = '', $encoding = '') { + if(clCheckForPhp54()) { + if($funcname == "get_html_translation_table") { + $value = ($value == '') ? HTML_SPECIALCHARS : $value; + } + $flags = (empty($flags))?ENT_COMPAT|ENT_HTML401:$flags; + $encoding = (empty($encoding))?'ISO-8859-1':$encoding; + } else { + $flags = (empty($flags))?ENT_COMPAT:$flags; + } + + if($funcname == "get_html_translation_table") { + return $funcname($value, $flags); + } else { + return $funcname($value, $flags, $encoding); + } +} + +/** + * + * @uses clPhp54FixedFunc multi fix func for PHP5.4 + * @author Ortwin Pinke + * + * @param string $value + * @param mixed $flags + * @param string $encoding + * @return string + */ +function clHtmlSpecialChars($value, $flags = '', $encoding = '') { + return clPhp54FixedFunc("htmlspecialchars", $value, $flags, $encoding); +} + +/** + * + * @uses clPhp54FixedFunc multi fix func for PHP5.4 + * @author Ortwin Pinke + * + * @param string $value + * @param mixed $flags + * @param string $encoding + * @return string + */ +function clHtmlEntityDecode($value, $flags = '', $encoding = '') { + return clPhp54FixedFunc("html_entity_decode", $value, $flags, $encoding); +} + +/** + * + * @uses clPhp54FixedFunc multi fix func for PHP5.4 + * @author Ortwin Pinke + * + * @param string $value + * @param mixed $flags + * @param string $encoding + * @return string + */ +function clHtmlEntities($value, $flags = '', $encoding = '') { + return clPhp54FixedFunc("htmlentities", $value, $flags, $encoding); +} + +/** + * + * @uses clPhp54FixedFunc multi fix func for PHP5.4 + * @author Ortwin Pinke + * + * @param string $table + * @param mixed $flags + * @return string + */ +function clGetHtmlTranslationTable($table = '', $flags = '') { + return clPhp54FixedFunc("get_html_translation_table", $table, $flags); +} + + +// hold old functions from con 4.8 but use new ConLite functions, mark them as deprecated + +/** + * Use compatible clHtmlSpecialChars instead + * @deprecated since version 2.0 + */ +if (function_exists('conHtmlSpecialChars') == false) { + function conHtmlSpecialChars($value, $flags = '', $encoding = '') { + return clHtmlSpecialChars($value, $flags, $encoding); + } +} + +/** + * Use compatible clHtmlEntityDecode instead + * @deprecated since version 2.0 + */ +if (function_exists('conHtmlEntityDecode') == false) { + function conHtmlEntityDecode($value, $flags = '', $encoding = '') { + return clHtmlEntityDecode($value, $flags, $encoding); + } +} + +/** + * Use compatible clHtmlEntities instead + * @deprecated since version 2.0 + */ +if (function_exists('conHtmlentities') == false) { + function conHtmlentities($value, $flags = '', $encoding = '') { + return clHtmlEntities($value, $flags, $encoding); + } +} + +/** + * Use compatible clGetHtmlTranslationTable instead + * @deprecated since version 2.0 + */ +if (function_exists('conGetHtmlTranslationTable') == false) { + function conGetHtmlTranslationTable($table = '', $flags = '') { + return clGetHtmlTranslationTable($table, $flags); + } +} \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.php73.php b/branches/conlite20/conlite/includes/functions.php73.php new file mode 100644 index 0000000..672d016 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.php73.php @@ -0,0 +1,6 @@ + $iValue) { + $aClients[$iKey] = Contenido_Security::toInteger($aClients[$iKey]); + } + + //Query to check, if langid is in list of clients associated + $sSql = "SELECT * FROM ".$aCfg['tab']['clients_lang']. " WHERE idlang=".$iLang." AND idclient IN ('".implode("','",$aClients)."');"; + + $oDb->query($sSql); + if ($oDb->next_record()) { + return true; + } else { + return false; + } +} + +/** + * Duplicate rights for any element + * + * @param string $area main area name + * @param int $iditem ID of element to copy + * @param int $newiditem ID of the new element + * @param int $idlang ID of lang parameter + * + * @author Martin Horwath + * @copyright dayside.net + */ +function copyRightsForElement($area, $iditem, $newiditem, $idlang = false) +{ + global $cfg, $perm, $auth, $area_tree; + + $db = new DB_ConLite(); + $db2 = new DB_ConLite(); + + // get all user_id values for con_rights + + $userIDContainer = $perm->getGroupsForUser($auth->auth['uid']); // add groups if available + $userIDContainer[] = $auth->auth['uid']; // add user_id of current user + + foreach ($userIDContainer as $key) { + $statement_where2[] = "user_id = '".Contenido_Security::escapeDB($key, $db)."' "; + } + + $where_users = '('.implode(' OR ', $statement_where2 ) .')'; // only duplicate on user and where user is member of + + // get all idarea values for $area + // short way + $AreaContainer = $area_tree[$perm->showareas($area)]; + + // long version start + // get all actions for corresponding area + $AreaActionContainer = array(); + $sql = "SELECT idarea, idaction FROM ".$cfg["tab"]["actions"]." WHERE idarea IN (".implode (',', $AreaContainer).")"; + $db->query($sql); + + while ($db->next_record()) { + $AreaActionContainer[] = array('idarea'=>$db->f('idarea'), 'idaction'=>$db->f('idaction')); + } + + // build sql statement for con_rights + foreach ($AreaActionContainer as $key) { + $statement_where[] = "( idarea = ".Contenido_Security::toInteger($key["idarea"])." AND idaction = ".Contenido_Security::toInteger($key["idaction"])." )"; + } + + $where_area_actions = '('.implode(' OR ', $statement_where ) .')'; // only correct area action pairs possible + + // final sql statement to get all effected elements in con_right + $sql = "SELECT + * + FROM + ".$cfg["tab"]["rights"]." + WHERE + {$where_area_actions} AND + {$where_users} AND + idcat = {$iditem}"; + + // long version end + if ($idlang) { + $sql.= " AND idlang='$idlang'"; + } + + $db->query($sql); + + while ($db->next_record()) { + $sql = "INSERT INTO ".$cfg["tab"]["rights"]." (idright,user_id,idarea,idaction,idcat,idclient,idlang,`type`) VALUES ('".Contenido_Security::toInteger($db2->nextid($cfg["tab"]["rights"]))."', + '".Contenido_Security::escapeDB($db->f("user_id"), $db)."', '".Contenido_Security::toInteger($db->f("idarea"))."', '".Contenido_Security::toInteger($db->f("idaction"))."', + '".Contenido_Security::toInteger($newiditem)."','".Contenido_Security::toInteger($db->f("idclient"))."', '".Contenido_Security::toInteger($db->f("idlang"))."', + '".Contenido_Security::toInteger($db->f("type"))."');"; + $db2->query($sql); + } + + // permissions reloaded... + $perm->load_permissions(true); +} + + +/** + * Create rights for any element + * + * @param string $area main area name + * @param int $iditem ID of new element + * @param int $idlang ID of lang parameter + * + * @author Martin Horwath + * @copyright dayside.net + */ +function createRightsForElement($area, $iditem, $idlang = false) +{ + global $cfg, $perm, $auth, $area_tree, $client; + + if (!is_object($perm)) { + return false; + } + + if (!is_object($auth)) { + return false; + } + + $db = new DB_ConLite(); + $db2 = new DB_ConLite(); + + // get all user_id values for con_rights + + $userIDContainer = $perm->getGroupsForUser($auth->auth['uid']); // add groups if available + $userIDContainer[] = $auth->auth['uid']; // add user_id of current user + + foreach ($userIDContainer as $key) { + $statement_where2[] = "user_id = '".Contenido_Security::toInteger($key)."' "; + } + + $where_users = '('.implode(' OR ', $statement_where2 ) .')'; // only duplicate on user and where user is member of + + // get all idarea values for $area + // short way + $AreaContainer = $area_tree[$perm->showareas($area)]; + + $sql = "SELECT + * + FROM + ".$cfg["tab"]["rights"]." + WHERE + idclient='".Contenido_Security::toInteger($client)."' AND + idarea IN (".implode (',', $AreaContainer).") AND + idcat != 0 AND + idaction!='0' AND + {$where_users}"; + + if ($idlang) { + $sql.= " AND idlang='".Contenido_Security::toInteger($idlang)."'"; + } + + $db->query($sql); + + $RightsContainer = array(); + + while($db->next_record()){ + $RightsContainer[$db->f('user_id')][$db->f('idlang')][$db->f('type')][$db->f('idaction')] = $db->f('idarea'); + } + + // i found no better way to set the rights + // double entries should not be possible anymore... + + foreach ($RightsContainer as $userid=>$LangContainer) { + foreach ($LangContainer as $idlang=>$TypeContainer) { + foreach ($TypeContainer as $type=>$ActionContainer) { + foreach ($ActionContainer as $idaction=>$idarea) { + $sql = "INSERT INTO ".$cfg["tab"]["rights"]." + (idright, user_id,idarea,idaction,idcat,idclient,idlang,`type`) + VALUES ('".Contenido_Security::toInteger($db2->nextid($cfg["tab"]["rights"]))."', '".Contenido_Security::toInteger($userid)."', '".Contenido_Security::toInteger($idarea)."', + '".Contenido_Security::toInteger($idaction)."', '".Contenido_Security::toInteger($iditem)."', '".Contenido_Security::toInteger($client)."', + '".Contenido_Security::toInteger($idlang)."', '".Contenido_Security::toInteger($type)."')"; + $db2->query($sql); + } + } + } + } + + // permissions reloaded... + $perm->load_permissions(true); +} + + +/** + * Delete rights for any element + * + * @param string $area main area name + * @param int $iditem ID of new element + * @param int $idlang ID of lang parameter + * + * @author Martin Horwath + * @copyright dayside.net + */ +function deleteRightsForElement($area, $iditem, $idlang = false) +{ + global $cfg, $perm, $area_tree, $client; + + $db = new DB_ConLite(); + + // get all idarea values for $area + $AreaContainer = $area_tree[$perm->showareas(Contenido_Security::escapeDB($area, $db))]; + + $sql = "DELETE FROM ".$cfg["tab"]["rights"]." WHERE idcat='".Contenido_Security::toInteger($iditem)."' AND idclient='".Contenido_Security::toInteger($client)."' AND idarea IN (".implode (',', $AreaContainer).")"; + if ($idlang) { + $sql.= " AND idlang='".Contenido_Security::toInteger($idlang)."'"; + } + $db->query($sql); + + // permissions reloaded... + $perm->load_permissions(true); +} + + +/** + * Builds user/group permissions (sysadmin, admin, client and language) by + * processing request variables ($msysadmin, $madmin, $mclient, $mlang) and + * returns the build permissions array. + * + * @todo Do we really need to add other perms, if the user/group gets the + * 'sysadmin' permission? + * @param bool $bAddUserToClient Flag to add current user to current client, + * if no client is specified. + * @return array + */ +function buildUserOrGroupPermsFromRequest($bAddUserToClient = false) +{ + global $cfg, $msysadmin, $madmin, $mclient, $mlang, $auth, $client; + + $aPerms = array(); + + // check and prevalidation + + $bSysadmin = (isset($msysadmin) && $msysadmin); + + $aAdmin = (isset($madmin) && is_array($madmin)) ? $madmin : array(); + foreach ($aAdmin as $p => $value) { + if (!is_numeric($value)) { + unset($aAdmin[$p]); + } + } + + $aClient = (isset($mclient) && is_array($mclient)) ? $mclient : array(); + foreach ($aClient as $p => $value) { + if (!is_numeric($value)) { + unset($aClient[$p]); + } + } + + $aLang = (isset($mlang) && is_array($mlang)) ? $mlang : array(); + foreach ($aLang as $p => $value) { + if (!is_numeric($value)) { + unset($aLang[$p]); + } + } + + // build permissions array + + if ($bSysadmin) { + $aPerms[] = 'sysadmin'; + } + + foreach ($aAdmin as $value) { + $aPerms[] = sprintf('admin[%s]', $value); + } + + foreach ($aClient as $value) { + $aPerms[] = sprintf('client[%s]', $value); + } + + if (count($aClient) == 0 && $bAddUserToClient) { + // Add user to the current client, if the current user isn't sysadmin and + // no client has been specified. This avoids new accounts which are not + // accessible by the current user (client admin) anymore. + $aUserPerm = explode(',', $auth->auth['perm']); + if (!in_array('sysadmin', $aUserPerm)) { + $aPerms[] = sprintf('client[%s]', $client); + } + } + + if (count($aLang) > 0 && count($aClient) > 0) { + // adding language perms makes sense if we have also at least one selected client + $db = new DB_ConLite(); + foreach ($aLang as $value) { + if (checkLangInClients($aClient, $value, $cfg, $db)) { + $aPerms[] = sprintf('lang[%s]', $value); + } + } + } + + return $aPerms; +} + + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.stat.php b/branches/conlite20/conlite/includes/functions.stat.php new file mode 100644 index 0000000..24e3e27 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.stat.php @@ -0,0 +1,1137 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * $Id: functions.stat.php 306 2014-03-13 23:03:26Z oldperl $: + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes", "functions.database.php"); + +/** + * Displays statistic information layer (a div Tag) + * + * @param int $id Either article or directory id + * @param string $type The type + * @param int $x Style top position + * @param int $y Style left position + * @param int $w Style width + * @param int $h Style height + * @return string Composed info layer + */ +function statsDisplayInfo($id, $type, $x, $y, $w, $h) { + if (strcmp($type,"article" == 0)) { + $text = i18n("Info about article")." ". $id; + } else { + $text = i18n("Info about directory") ." ". $id; + } + + $div = '
'.$text.'
'; + + return $div; +} + +/** + * Archives the current statistics + * + * @param $yearmonth String with the desired archive date (YYYYMM) + * + * @return none + * + */ +function statsArchive($yearmonth) { + global $cfg; + + $yearmonth = preg_replace('/\s/', '0', $yearmonth); + + $db = new DB_ConLite; + $db2 = new DB_ConLite; + + $sql = "SELECT + idcatart, idlang, idclient, visited, visitdate + FROM + ".$cfg["tab"]["stat"]; + + $db->query($sql); + + while ($db->next_record()) { + $insertSQL = "INSERT INTO + ".$cfg["tab"]["stat_archive"]." + ( idstatarch, archived, idcatart, idlang, idclient, visited, visitdate) + VALUES + (".Contenido_Security::toInteger($db2->nextid($cfg["tab"]["stat_archive"])).", + ".$yearmonth.", + ".Contenido_Security::toInteger($db->f(0)).", + ".Contenido_Security::toInteger($db->f(1)).", + ".Contenido_Security::toInteger($db->f(2)).", + ".Contenido_Security::toInteger($db->f(3)).", + '".Contenido_Security::escapeDB($db->f(4), $db2)."')"; + + $db2->query($insertSQL); + } + + $sql = "DELETE FROM ".$cfg["tab"]["stat"]; + $db->query($sql); + + // Recreate empty stats + $sql = "SELECT + A.idcatart, + B.idclient, + C.idlang + FROM + ".$cfg["tab"]["cat_art"]." AS A INNER JOIN + ".$cfg["tab"]["cat"]." AS B ON A.idcat = B.idcat INNER JOIN + ".$cfg["tab"]["cat_lang"]." AS C ON A.idcat = C.idcat "; + + $db->query($sql); + + while ($db->next_record()) { + $insertSQL = "INSERT INTO + ".$cfg["tab"]["stat"]." + ( idstat, idcatart, idlang, idclient, visited ) + VALUES ( + ".Contenido_Security::toInteger($db2->nextid($cfg["tab"]["stat"])).", + ".Contenido_Security::toInteger($db->f(0)).", + ".Contenido_Security::toInteger($db->f(2)).", + ".Contenido_Security::toInteger($db->f(1)).", + '1000-01-01 00:00:00')"; + + $db2->query($insertSQL); + } +} + + +/** + * Generates a statistics page + * + * @param $yearmonth Specifies the year and month from which to retrieve the + * statistics, specify "current" to retrieve the current + * entries + * @author Jan Lengowski + * @modified Timo A. Hummel + * @copyright four for business AG + * + * @return none + * + */ +function statsOverviewAll($yearmonth) { + global $cfg, $db, $tpl, $client, $lang; + + $sDisplay = 'table-row'; + + $bUseHeapTable = $cfg["statistics_heap_table"]; + + $sHeapTable = $cfg['tab']['stat_heap_table']; + + if ($bUseHeapTable) { + if (!dbTableExists ($db, $sHeapTable)) { + buildHeapTable ($sHeapTable, $db); + } + } + + if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) { + $sDisplay = 'block'; + } + + $sql = "SELECT + idtree, A.idcat, level, preid, C.name, visible + FROM + ".$cfg["tab"]["cat_tree"]." AS A, + ".$cfg["tab"]["cat"]." AS B, + ".$cfg["tab"]["cat_lang"]." AS C + WHERE + A.idcat=B.idcat + AND + B.idcat=C.idcat + AND + C.idlang='".Contenido_Security::toInteger($lang)."' + AND + B.idclient='".Contenido_Security::toInteger($client)."' + ORDER BY + idtree"; + + $db->query($sql); + + $currentRow = 2; + + $aRowname = array(); + $iLevel = 0; + + $tpl->set('s', 'IMG_EXPAND', $cfg["path"]["contenido_fullhtml"].$cfg['path']['images'].'open_all.gif'); + $tpl->set('s', 'IMG_COLLAPSE', $cfg["path"]["contenido_fullhtml"].$cfg['path']['images'].'close_all.gif'); + + while ($db->next_record()) { + if ($db->f("level") == 0 && $db->f("preid") != 0) { + $bgcolor = '#FFFFFF'; + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'PADDING_LEFT', '10'); + $tpl->set('d', 'TEXT', ' '); + $tpl->set('d', 'NUMBEROFARTICLES', ''); + $tpl->set('d', 'TOTAL', ''); + $tpl->set('d', 'ICON',''); + $tpl->set('d', 'STATUS', ''); + $tpl->set('d', 'ONCLICK', ''); + $tpl->set('d', 'ROWNAME', ''); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'INTHISLANGUAGE', ''); + $tpl->set('d', 'EXPAND', ''); + $tpl->set('d', 'DISPLAY_ROW', $sDisplay); + + $tpl->next(); + $currentRow++; + } + + $padding_left = 10 + ( 15 * $db->f("level") ); + $text = $db->f(4); + $idcat = $db->f("idcat"); + $bCatVisible = $db->f("visible"); + + if ($db->f("level") < $iLevel) { + $iDistance = $iLevel-$db->f("level"); + + for ($i = 0; $i < $iDistance; $i++) { + array_pop($aRowname); + } + $iLevel = $db->f("level"); + } + + if ($db->f("level") >= $iLevel) { + if ($db->f("level") == $iLevel) { + array_pop($aRowname); + } else { + $iLevel = $db->f("level"); + } + array_push($aRowname, $idcat); + } + + $db2 = new DB_ConLite; + //************** number of arts ************** + $sql = "SELECT COUNT(*) FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'"; + $db2->query($sql); + $db2->next_record(); + + $numberOfArticles = $db2->f(0); + $sumNumberOfArticles += $numberOfArticles; + //************** hits of category total************** + if (strcmp($yearmonth,"current") == 0) { + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."' AND B.idclient='".Contenido_Security::toInteger($client)."'"; + } else { + if(!$bUseHeapTable) { + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."' + AND B.idclient='".Contenido_Security::toInteger($client)."' AND B.archived = '".Contenido_Security::escapeDB($yearmonth, $db2)."'"; + } else { + $sql = "SELECT SUM(visited) FROM ".Contenido_Security::escapeDB($sHeapTable, $db2)." WHERE idcat='".Contenido_Security::toInteger($idcat)."' + AND idclient='".Contenido_Security::toInteger($client)."' AND archived = '".Contenido_Security::escapeDB($yearmonth, $db2)."'"; + } + } + $db2->query($sql); + $db2->next_record(); + + $total = $db2->f(0); + + //************** hits of category in this language *************** + if (strcmp($yearmonth,"current") == 0) { + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."' + AND B.idlang='".Contenido_Security::toInteger($lang)."' AND B.idclient='".Contenido_Security::toInteger($client)."'"; + } else { + if(!$bUseHeapTable) { + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."' + AND B.idlang='".Contenido_Security::toInteger($lang)."' AND B.idclient='".Contenido_Security::toInteger($client)."' AND B.archived = '".Contenido_Security::escapeDB($yearmonth, $db2)."'"; + } else { + $sql = "SELECT SUM(visited) FROM ".Contenido_Security::escapeDB($sHeapTable, $db2)." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."' + AND idclient='".Contenido_Security::toInteger($client)."' AND archived = '".Contenido_Security::escapeDB($yearmonth, $db2)."'"; + } + } + + $db2->query($sql); + $db2->next_record(); + + $inThisLanguage = $db2->f(0); + + $icon = ''; + + //************ art ******************************** + $sql = "SELECT * FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["art"]." AS B, ".$cfg["tab"]["art_lang"]." AS C WHERE A.idcat='".Contenido_Security::toInteger($idcat)."' + AND A.idart=B.idart AND B.idart=C.idart AND C.idlang='".Contenido_Security::toInteger($lang)."' ORDER BY B.idart"; + $db2->query($sql); + + $numrows = $db2->num_rows(); + $onclick = ""; + + $online = $db->f("visible"); + if ($bCatVisible == 1) { + $offonline = ''.i18n('; + } else { + $offonline = ''.i18n('; + } + + //************check if there are subcategories ****************** + $iSumSubCategories = 0; + $sSql = "SELECT count(*) as cat_count from ".$cfg["tab"]["cat"]." WHERE parentid = '".Contenido_Security::toInteger($idcat)."';"; + $db3 = new DB_ConLite(); + $db3->query($sSql); + if ($db3->next_record()) { + $iSumSubCategories = $db3->f('cat_count'); + } + $db3->free(); + + $bgcolor = $cfg["color"]["table_dark"]; + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'PADDING_LEFT', $padding_left); + $tpl->set('d', 'TEXT', $text); + $tpl->set('d', 'ONCLICK', $onclick); + $tpl->set('d', 'ICON', $icon); + $tpl->set('d', 'STATUS', $offonline); + $tpl->set('d', 'NUMBEROFARTICLES', $numberOfArticles); + $tpl->set('d', 'TOTAL', $total); + $tpl->set('d', 'ROWNAME', implode('_', $aRowname)); + if ($numrows > 0 || $iSumSubCategories > 0) { + $tpl->set('d', 'EXPAND', ' + '.i18n( + '); + } else { + $tpl->set('d', 'EXPAND', ''); + } + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'INTHISLANGUAGE', $inThisLanguage); + if ($db->f("level") != 0) { + $tpl->set('d', 'DISPLAY_ROW', 'none'); + } else { + $tpl->set('d', 'DISPLAY_ROW', $sDisplay); + } + + $tpl->next(); + $currentRow++; + + $onclick = ""; + + $text = ""; + $numberOfArticles = ""; + $total = ""; + $inThisLanguage = ""; + + while ($db2->next_record()) { + $idart = $db2->f("idart"); + + array_push($aRowname, $idart); + + $text = ""; + $numberOfArticles = ""; + $total = ""; + $inThisLanguage = ""; + + $padding_left = 10 + ( 15 * ($db->f("level")+1) ); + + $text = $db2->f("title"); + $online = $db2->f("online"); + + //************** number of arts ************** + $db3 = new DB_ConLite(); + + //************** hits of art total ************** + if (strcmp($yearmonth,"current") == 0) { + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."' + AND A.idart='".Contenido_Security::toInteger($idart)."' AND B.idclient='".Contenido_Security::toInteger($client)."'"; + } else { + if(!$bUseHeapTable) { + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."' + AND A.idart='".Contenido_Security::toInteger($idart)."' AND B.idclient='".Contenido_Security::toInteger($client)."' and B.archived = '".Contenido_Security::escapeDB($yearmonth, $db3)."'"; + } else { + $sql = "SELECT SUM(visited) FROM ".Contenido_Security::escapeDB($sHeapTable, $db3)." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idart='".Contenido_Security::toInteger($idart)."' + AND idclient='".Contenido_Security::toInteger($client)."' AND archived = '".Contenido_Security::escapeDB($yearmonth, $db3)."'"; + } + } + + $db3->query($sql); + $db3->next_record(); + + $total = $db3->f(0); + + //************** hits of art in this language *************** + if (strcmp($yearmonth,"current") == 0) { + $sql = "SELECT visited FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."' + AND A.idart='".Contenido_Security::toInteger($idart)."' AND B.idlang='".Contenido_Security::toInteger($lang)."' AND B.idclient='".Contenido_Security::toInteger($client)."'"; + } else { + if (!$bUseHeapTable) { + $sql = "SELECT visited FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."' + AND A.idart='".Contenido_Security::toInteger($idart)."' AND B.idlang='".Contenido_Security::toInteger($lang)."' AND B.idclient='".Contenido_Security::toInteger($client)."' + AND B.archived = '".Contenido_Security::escapeDB($yearmonth, $db3)."'"; + } else { + $sql = "SELECT visited FROM ".Contenido_Security::escapeDB($sHeapTable, $db3)." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idart='".Contenido_Security::toInteger($idart)."' + AND idlang='".Contenido_Security::toInteger($lang)."' AND idclient='".Contenido_Security::toInteger($client)."' AND archived = '".Contenido_Security::escapeDB($yearmonth, $db3)."'"; + } + } + + $db3->query($sql); + $db3->next_record(); + + $inThisLanguage = $db3->f(0); + + if ($online == 0) { + $offonline = 'Artikel ist offline'; + } else { + $offonline = 'Artikel ist online'; + } + + $icon = ''; + $bgcolor = $cfg["color"]["table_light"]; + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'PADDING_LEFT', $padding_left); + $tpl->set('d', 'TEXT', $text); + $tpl->set('d', 'ONCLICK', ""); + $tpl->set('d', 'ICON', $icon); + $tpl->set('d', 'STATUS', $offonline); + $tpl->set('d', 'ROWNAME', implode('_', $aRowname)); + //$tpl->set('d', 'ROWNAME', "HIDE".($db->f("level")+1)); + $tpl->set('d', 'NUMBEROFARTICLES', $numberOfArticles); + $tpl->set('d', 'TOTAL', $total); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'INTHISLANGUAGE', $inThisLanguage); + $tpl->set('d', 'EXPAND', ''); + $tpl->set('d', 'DISPLAY_ROW', 'none'); + $tpl->next(); + $currentRow++; + + array_pop($aRowname); + } + } + + //************** hits total************** + if (strcmp($yearmonth,"current") == 0) { + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat"]." AS B WHERE A.idcatart=B.idcatart AND B.idclient='".Contenido_Security::toInteger($client)."'"; + } else { + if (!$bUseHeapTable) { + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND B.idclient='".Contenido_Security::toInteger($client)."' + AND B.archived = '".Contenido_Security::escapeDB($yearmonth, $db)."'"; + } else { + $sql = "SELECT SUM(visited) FROM ".Contenido_Security::escapeDB($sHeapTable, $db)." WHERE idclient='".Contenido_Security::toInteger($client)."' AND archived = '".Contenido_Security::escapeDB($yearmonth, $db)."'"; + } + } + + $db->query($sql); + $db->next_record(); + + $total = $db->f(0); + + //************** hits total on this language *************** + if (strcmp($yearmonth,"current") == 0) { + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat"]." AS B WHERE A.idcatart=B.idcatart AND B.idlang='".Contenido_Security::toInteger($lang)."' + AND B.idclient='".Contenido_Security::toInteger($client)."'"; + } else { + if(!$bUseHeapTable) { + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND B.idlang='".Contenido_Security::toInteger($lang)."' + AND B.idclient='".Contenido_Security::toInteger($client)."' AND B.archived = '".Contenido_Security::escapeDB($yearmonth, $db)."'"; + } else { + $sql = "SELECT SUM(visited) FROM ".Contenido_Security::escapeDB($sHeapTable, $db)." WHERE idlang='".Contenido_Security::toInteger($lang)."' AND idclient='".Contenido_Security::toInteger($client)."' + AND archived = '".Contenido_Security::escapeDB($yearmonth, $db)."'"; + } + } + + $db->query($sql); + $db->next_record(); + + $inThisLanguage = $db->f(0); + + $bgcolor = '#FFFFFF'; + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'TEXT', ' '); + $tpl->set('d', 'ICON', ''); + $tpl->set('d', 'STATUS', ''); + $tpl->set('d', 'PADDING_LEFT', '10'); + $tpl->set('d', 'NUMBEROFARTICLES', ''); + $tpl->set('d', 'TOTAL', ''); + $tpl->set('d', 'INTHISLANGUAGE', ''); + $tpl->set('d', 'EXPAND', ''); + $tpl->set('d', 'ROWNAME', ''); + $tpl->set('d', 'ONCLICK', ''); + $tpl->set('d', 'DISPLAY_ROW', $sDisplay); + + $bgcolor = $cfg["color"]["table_dark"]; + $tpl->set('s', 'SUMBGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('s', 'SUMTEXT', i18n("Sum")); + $tpl->set('s', 'SUMNUMBEROFARTICLES', $sumNumberOfArticles); + $tpl->set('s', 'SUMTOTAL', $total); + $tpl->set('s', 'SUMINTHISLANGUAGE', $inThisLanguage); + $tpl->next(); +} + +/** + * Generates a statistics page for a given year + * + * @param $year Specifies the year to retrieve the + * statistics for + * @author Jan Lengowski + * @modified Timo A. Hummel + * @copyright four for business AG + * + * @return none + * + */ +function statsOverviewYear($year) { + global $cfg, $db, $tpl, $client, $lang; + + $sDisplay = 'table-row'; + + if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) { + $sDisplay = 'block'; + } + + $sql = "SELECT + idtree, A.idcat, level, preid, C.name, visible + FROM + ".$cfg["tab"]["cat_tree"]." AS A, + ".$cfg["tab"]["cat"]." AS B, + ".$cfg["tab"]["cat_lang"]." AS C + WHERE + A.idcat=B.idcat + AND + B.idcat=C.idcat + AND + C.idlang='".Contenido_Security::toInteger($lang)."' + AND + B.idclient='".Contenido_Security::toInteger($client)."' + ORDER BY + idtree"; + + $db->query($sql); + + $currentRow = 2; + + $aRowname = array(); + $iLevel = 0; + + $tpl->set('s', 'IMG_EXPAND', $cfg["path"]["contenido_fullhtml"].$cfg['path']['images'].'open_all.gif'); + $tpl->set('s', 'IMG_COLLAPSE', $cfg["path"]["contenido_fullhtml"].$cfg['path']['images'].'close_all.gif'); + + while ($db->next_record()) { + if ($db->f("level") == 0 && $db->f("preid") != 0) { + $bgcolor = '#FFFFFF'; + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'PADDING_LEFT', '10'); + $tpl->set('d', 'TEXT', ' '); + $tpl->set('d', 'NUMBEROFARTICLES', ''); + $tpl->set('d', 'TOTAL', ''); + $tpl->set('d', 'STATUS', ''); + $tpl->set('d', 'ONCLICK', ''); + $tpl->set('d', 'ICON',''); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'INTHISLANGUAGE', ''); + $tpl->set('d', 'EXPAND', ''); + $tpl->set('d', 'DISPLAY_ROW', $sDisplay); + $tpl->set('d', 'ROWNAME', ''); + $tpl->next(); + $currentRow++; + } + + $padding_left = 10 + ( 15 * $db->f("level") ); + $text = $db->f(4); + $idcat = $db->f("idcat"); + $bCatVisible = $db->f("visible"); + + if ($db->f("level") < $iLevel) { + $iDistance = $iLevel-$db->f("level"); + + for ($i = 0; $i < $iDistance; $i++) { + array_pop($aRowname); + } + $iLevel = $db->f("level"); + } + + if ($db->f("level") >= $iLevel) { + if ($db->f("level") == $iLevel) { + array_pop($aRowname); + } else { + $iLevel = $db->f("level"); + } + array_push($aRowname, $idcat); + } + + $db2 = new DB_ConLite; + //************** number of arts ************** + $sql = "SELECT COUNT(*) FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'"; + $db2->query($sql); + $db2->next_record(); + + $numberOfArticles = $db2->f(0); + $sumNumberOfArticles += $numberOfArticles; + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."' + AND B.idclient='".Contenido_Security::toInteger($client)."' AND SUBSTRING(B.archived,1,4) = ".Contenido_Security::toInteger($year, $db2)." GROUP BY SUBSTRING(B.archived,1,4)"; + + $db2->query($sql); + $db2->next_record(); + + $total = $db2->f(0); + + //************** hits of category in this language *************** + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."' + AND B.idlang='".Contenido_Security::toInteger($lang)."' AND B.idclient='".Contenido_Security::toInteger($client)."' AND SUBSTRING(B.archived,1,4) = ".Contenido_Security::escapeDB($year, $db2)." + GROUP BY SUBSTRING(B.archived,1,4)"; + + $db2->query($sql); + $db2->next_record(); + + $inThisLanguage = $db2->f(0); + + $icon = ''; + + //************ art ******************************** + $sql = "SELECT * FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["art"]." AS B, ".$cfg["tab"]["art_lang"]." AS C WHERE A.idcat='".Contenido_Security::toInteger($idcat)."' AND A.idart=B.idart AND B.idart=C.idart + AND C.idlang='".Contenido_Security::toInteger($lang)."' ORDER BY B.idart"; + $db2->query($sql); + + $numrows = $db2->num_rows(); + $onclick = ""; + + if ($bCatVisible == 0) { + $offonline = 'Kategorie ist offline'; + } else { + $offonline = 'Kategorie ist online'; + } + + //************check if there are subcategories ****************** + $iSumSubCategories = 0; + $sSql = "SELECT count(*) as cat_count from ".$cfg["tab"]["cat"]." WHERE parentid = '".Contenido_Security::toInteger($idcat)."';"; + $db3 = new DB_ConLite(); + $db3->query($sSql); + if ($db3->next_record()) { + $iSumSubCategories = $db3->f('cat_count'); + } + $db3->free(); + + $bgcolor = $cfg["color"]["table_dark"]; + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'PADDING_LEFT', $padding_left); + $tpl->set('d', 'TEXT', $text); + $tpl->set('d', 'ONCLICK', $onclick); + $tpl->set('d', 'ICON', $icon); + $tpl->set('d', 'STATUS', $offonline); + $tpl->set('d', 'NUMBEROFARTICLES', $numberOfArticles); + $tpl->set('d', 'TOTAL', $total); + $tpl->set('d', 'ROWNAME', implode('_', $aRowname)); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'INTHISLANGUAGE', $inThisLanguage); + + if ($numrows > 0 || $iSumSubCategories > 0) { + $tpl->set('d', 'EXPAND', ' + '.i18n( + '); + } else { + $tpl->set('d', 'EXPAND', ''); + } + + if ($db->f("level") != 0) { + $tpl->set('d', 'DISPLAY_ROW', 'none'); + } else { + $tpl->set('d', 'DISPLAY_ROW', $sDisplay); + } + + $tpl->next(); + $currentRow++; + + $onclick = ""; + + $text = ""; + $numberOfArticles = ""; + $total = ""; + $inThisLanguage = ""; + + while ($db2->next_record()) { + $idart = $db2->f("idart"); + + array_push($aRowname, $idart); + + $text = ""; + $numberOfArticles = ""; + $total = ""; + $inThisLanguage = ""; + + $padding_left = 10 + ( 15 * ($db->f("level")+1) ); + + $text = $db2->f("title"); + $online = $db2->f("online"); + + //************** number of arts ************** + $db3 = new DB_ConLite(); + + //************** hits of art total ************** + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."' + AND A.idart='".Contenido_Security::toInteger($idart)."' AND B.idclient='".Contenido_Security::toInteger($client)."' AND SUBSTRING(B.archived,1,4) = ".Contenido_Security::escapeDB($year, $db3)." + GROUP BY SUBSTRING(B.archived,1,4)"; + + $db3->query($sql); + $db3->next_record(); + + $total = $db3->f(0); + + //************** hits of art in this language *************** + $sql = "SELECT visited FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."' + AND A.idart='".Contenido_Security::toInteger($idart)."' AND B.idlang='".Contenido_Security::toInteger($lang)."' AND B.idclient='".Contenido_Security::toInteger($client)."' + AND SUBSTRING(B.archived,1,4) = ".Contenido_Security::escapeDB($year, $db3)." GROUP BY SUBSTRING(B.archived,1,4)"; + + $db3->query($sql); + $db3->next_record(); + + $inThisLanguage = $db3->f(0); + + if ($online == 0) { + $offonline = 'Artikel ist offline'; + } else { + $offonline = 'Artikel ist online'; + } + + $icon = ''; + $bgcolor = $cfg["color"]["table_light"]; + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'PADDING_LEFT', $padding_left); + $tpl->set('d', 'TEXT', $text); + $tpl->set('d', 'ONCLICK', ""); + $tpl->set('d', 'ICON', $icon); + $tpl->set('d', 'STATUS', $offonline); + $tpl->set('d', 'ROWNAME', implode('_', $aRowname)); + $tpl->set('d', 'NUMBEROFARTICLES', $numberOfArticles); + $tpl->set('d', 'TOTAL', $total); + $tpl->set('d', 'ROWNAME', implode('_', $aRowname)); + $tpl->set('d', 'EXPAND', ''); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'INTHISLANGUAGE', $inThisLanguage); + $tpl->set('d', 'DISPLAY_ROW', 'none'); + $tpl->next(); + $currentRow++; + + array_pop($aRowname); + } + } + + //************** hits total************** + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND B.idclient='".Contenido_Security::toInteger($client)."' + AND SUBSTRING(B.archived,1,4) = '".Contenido_Security::escapeDB($year, $db)."' GROUP BY SUBSTRING(B.archived,1,4)"; + + $db->query($sql); + $db->next_record(); + + $total = $db->f(0); + + //************** hits total on this language *************** + $sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND B.idlang='".Contenido_Security::toInteger($lang)."' + AND B.idclient='".Contenido_Security::toInteger($client)."' AND SUBSTRING(B.archived,1,4) = '".Contenido_Security::escapeDB($year, $db)."' GROUP BY SUBSTRING(B.archived,1,4)"; + + $db->query($sql); + $db->next_record(); + + $inThisLanguage = $db->f(0); + + $bgcolor = '#FFFFFF'; + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'TEXT', ' '); + $tpl->set('d', 'ICON', ''); + $tpl->set('d', 'STATUS', ''); + $tpl->set('d', 'PADDING_LEFT', '10'); + $tpl->set('d', 'NUMBEROFARTICLES', ''); + $tpl->set('d', 'TOTAL', ''); + $tpl->set('d', 'ONCLICK', ''); + $tpl->set('d', 'EXPAND', ''); + $tpl->set('d', 'ROWNAME', ''); + $tpl->set('d', 'INTHISLANGUAGE', ''); + $tpl->set('d', 'DISPLAY_ROW', $sDisplay); + $bgcolor = $cfg["color"]["table_dark"]; + $tpl->set('s', 'SUMBGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('s', 'SUMTEXT', "Summe"); + $tpl->set('s', 'SUMNUMBEROFARTICLES', $sumNumberOfArticles); + $tpl->set('s', 'SUMTOTAL', $total); + $tpl->set('s', 'SUMINTHISLANGUAGE', $inThisLanguage); + $tpl->next(); +} + +/** + * Generates a top statistics page + * + * @param $yearmonth Specifies the year and month from which to retrieve the + * statistics, specify "current" to retrieve the current + * entries + * @param $top Specifies the amount of pages to display + * + * @author Timo A. Hummel + * @copyright four for business AG + * + * @return none + * + */ +function statsOverviewTop($yearmonth, $top) { + global $cfg, $db, $tpl, $client, $lang; + + if (strcmp($yearmonth,"current") == 0) { + $sql = "SELECT + C.title, A.visited, B.idcat as idcat + FROM ".$cfg["tab"]["stat"]." AS A, + ".$cfg["tab"]["cat_art"]." AS B, + ".$cfg["tab"]["art_lang"]." AS C + WHERE + C.idart = B.idart + AND + C.idlang = A.idlang + AND + B.idcatart = A.idcatart + AND + A.idclient = '".Contenido_Security::toInteger($client)."' + AND + A.idlang = '".Contenido_Security::toInteger($lang)."' + ORDER BY + A.visited DESC + + LIMIT + ".Contenido_Security::escapeDB($top, $db); + } else { + $sql = "SELECT + C.title, A.visited, B.idcat as idcat + FROM ".$cfg["tab"]["stat_archive"]." AS A, + ".$cfg["tab"]["cat_art"]." AS B, + ".$cfg["tab"]["art_lang"]." AS C + WHERE + C.idart = B.idart + AND + C.idlang = A.idlang + AND + B.idcatart = A.idcatart + AND + A.idclient = '".Contenido_Security::toInteger($client)."' + AND + A.archived = '".Contenido_Security::escapeDB($yearmonth, $db)."' + AND + A.idlang = '".Contenido_Security::toInteger($lang)."' + ORDER BY + A.visited DESC + LIMIT + ".Contenido_Security::escapeDB($top, $db); + } + + $db->query($sql); + + while ($db->next_record()) { + $cat_name = ""; + statCreateLocationString($db->f('idcat')," / ", $cat_name); + $bgcolor = $cfg["color"]["table_light"]; + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'PADDING_LEFT', '5'); + $tpl->set('d', 'PATH', "Pfad: / ".$cat_name); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'TEXT', $db->f(0)); + $tpl->set('d', 'TOTAL', $db->f(1)); + $tpl->next(); + } +} + +/** + * Returns the canonical month. + * + * Wrapper for function getCanonicalMonth() + * + * @param int $month The digit representation of a month + * @return string Textual representation of a month + */ +function statReturnCanonicalMonth($month) { + return getCanonicalMonth($month); +} + + +/** + * Generates the location string for passed category id. + * + * Performs a recursive call, if parent category doesn't matches to 0 + * + * @param int $idcat The category id + * @param string $seperator Separator for location string + * @param string $cat_str The location string variable (reference) + * @return void + */ +function statCreateLocationString($idcat, $seperator, &$cat_str) { + + global $cfg, $db, $client, $lang; + + $sql = "SELECT + a.name AS name, + a.idcat AS idcat, + b.parentid AS parentid + FROM + ".$cfg["tab"]["cat_lang"]." AS a, + ".$cfg["tab"]["cat"]." AS b + WHERE + a.idlang = '".Contenido_Security::toInteger($lang)."' AND + b.idclient = '".Contenido_Security::toInteger($client)."' AND + b.idcat = '".Contenido_Security::toInteger($idcat)."' AND + a.idcat = b.idcat"; + + $db4 = new DB_ConLite; + $db4->query($sql); + $db4->next_record(); + + $name = $db4->f("name"); + $parentid = $db4->f("parentid"); + + $tmp_cat_str = $name . $seperator . $cat_str; + $cat_str = $tmp_cat_str; + + if ($parentid != 0) { + statCreateLocationString($parentid, $seperator, $cat_str); + } else { + $sep_length = strlen($seperator); + $str_length = strlen($cat_str); + $tmp_length = $str_length - $sep_length; + $cat_str = substr($cat_str, 0, $tmp_length); + } +} + +/** + * Generates a top statistics page + * + * @param $year Specifies the year from which to retrieve the + * statistics + * @param $top Specifies the amount of pages to display + * + * @author Timo A. Hummel + * @copyright four for business AG + * + * @return none + * + */ +function statsOverviewTopYear($year, $top) { + global $cfg, $db, $tpl, $client, $lang; + + $sql = "SELECT + C.title, SUM(A.visited) as visited, B.idcat as idcat + FROM ".$cfg["tab"]["stat_archive"]." AS A, + ".$cfg["tab"]["cat_art"]." AS B, + ".$cfg["tab"]["art_lang"]." AS C + WHERE + C.idart = B.idart + AND + C.idlang = A.idlang + AND + B.idcatart = A.idcatart + AND + A.idclient = '".Contenido_Security::toInteger($client)."' + AND + A.archived LIKE '".Contenido_Security::escapeDB($year, $db)."%' + AND + A.idlang = '".Contenido_Security::toInteger($lang)."' + GROUP BY A.idcatart + ORDER BY + visited DESC + + LIMIT + ".Contenido_Security::escapeDB($top, $db); + + $db->query($sql); + + while ($db->next_record()) { + $cat_name = ""; + statCreateLocationString($db->f('idcat')," / ", $cat_name); + $tpl->set('d', 'PATH', "Pfad: / ".$cat_name); + $bgcolor = $cfg["color"]["table_light"]; + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'PADDING_LEFT', '0'); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'TEXT', $db->f(0)); + $tpl->set('d', 'TOTAL', $db->f(1)); + $tpl->next(); + } +} + +/** + * Returns a drop down to choose the stats to display + * + * @param none + * @author Timo A. Hummel + * @copyright four for business AG + * + * @return string Returns a drop down string + * + */ +function statDisplayTopChooser($default) { + if ($default == "top10") { $defaultTop10 = "selected";} + if ($default == "top20") { $defaultTop20 = "selected";} + if ($default == "top30") { $defaultTop30 = "selected";} + if ($default == "all") { $defaultAll = "selected";} + + return ("
" . + " ". + "
"); +} + +/** + * Returns a drop down to choose the stats to display for yearly summary pages + * + * @param none + * @author Timo A. Hummel + * @copyright four for business AG + * + * @return string Returns a drop down string + * + */ +function statDisplayYearlyTopChooser($default) { + if ($default == "top10") { $defaultTop10 = "selected";} + if ($default == "top20") { $defaultTop20 = "selected";} + if ($default == "top30") { $defaultTop30 = "selected";} + if ($default == "all") { $defaultAll = "selected";} + + return ("
" . + " ". + "
"); +} + +/** + * Return an array with all years which are available as stat files + * + * @param mixed many + * @author Timo A. Hummel + * @copyright four for business AG + * + * @return array Array of strings with years. + */ +function statGetAvailableYears($client, $lang) { + global $cfg, $db; + + $availableYears = array(); + + $sql = "SELECT SUBSTRING(`archived`,1,4) + FROM + ".$cfg["tab"]["stat_archive"]." + WHERE + idlang = '".Contenido_Security::toInteger($lang)."' AND + idclient = '".Contenido_Security::toInteger($client)."' + GROUP BY + SUBSTRING(`archived`,1,4) + ORDER BY + SUBSTRING(`archived`,1,4) DESC"; + + $db->query($sql); + while ($db->next_record()) { + array_push($availableYears, $db->f(0)); + } + + return($availableYears); +} + +/** + * Return an array with all months for a specific year which are available + * as stat files + * + * @param mixed many + * @author Timo A. Hummel + * @copyright four for business AG + * + * @return array Array of strings with months. + */ +function statGetAvailableMonths($year, $client, $lang) { + global $cfg, $db; + + $availableYears = array(); + + $sql = "SELECT SUBSTRING(`archived`,5,2) + FROM + ".$cfg["tab"]["stat_archive"]." + WHERE + idlang = '".Contenido_Security::toInteger($lang)."' AND + idclient = '".Contenido_Security::toInteger($client)."' AND + SUBSTRING(`archived`,1,4) = '".Contenido_Security::escapeDB($year, $db)."' + GROUP BY + SUBSTRING(`archived`,5,2) + ORDER BY SUBSTRING(`archived`,5,2) DESC"; + + $db->query($sql); + while ($db->next_record()) { + array_push($availableYears, $db->f(0)); + } + + return($availableYears); +} + + +/** + * Resets the statistic for passed client + * + * @param int $client Id of client + * @return void + */ +function statResetStatistic($client) { + global $db; + global $cfg; + $sql = "UPDATE ".$cfg["tab"]["stat"]." SET visited=0 WHERE idclient='".Contenido_Security::toInteger($client)."'"; + $db->query($sql); +} + + +/** + * Deletes existing heap table (table in memory) and creates it. + * + * @param string $sHeapTable Table name + * @param DB_ConLite $db Database object + * @return void + */ +function buildHeapTable($sHeapTable, $db) { + global $cfg; + + $sql = "DROP TABLE IF EXISTS ".Contenido_Security::escapeDB($sHeapTable, $db).";"; + $db->query($sql); + + $sql = "CREATE TABLE ".Contenido_Security::escapeDB($sHeapTable, $db)." TYPE=HEAP + SELECT + A.idcatart, + A.idcat, + A.idart, + B.idstatarch, + B.archived, + B.idlang, + B.idclient, + B.visited + FROM + ".$cfg['tab']['cat_art']." AS A, ".$cfg['tab']['stat_archive']." AS B + WHERE + A.idcatart = B.idcatart;"; + $db->query($sql); + + $sql = "ALTER TABLE `".Contenido_Security::escapeDB($sHeapTable, $db)."` ADD PRIMARY KEY (`idcatart`,`idcat` ,`idart`,`idstatarch` ,`archived`,`idlang`,`idclient` ,`visited`);"; + $db->query($sql); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.str.php b/branches/conlite20/conlite/includes/functions.str.php new file mode 100644 index 0000000..b4cb1f7 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.str.php @@ -0,0 +1,1465 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2002-03-02 + * modified 2008-06-26, Frederic Schneider, add security fix + * modified 2008-08-29, Murat Purc, add new chain execution + * modified 2008-09-03, Hotfix recursive call more than 200 times exit script on hosteurope Timo.Trautmann (strRemakeTreeTableFindNext) + * modified 2008-10-29, delete from cat_tree only for one Cliente OliverL (strRemakeTreeTable) + * modified 2008-11-03, Add cat_tree only for one Cliente OliverL (strRemakeTreeTable) + * modified 2009-05-05, Timo Trautmann - optional use for copy label on copy proccess + * modified 2009-10-14, Dominik Ziegler - changed functionality of strMoveSubtree and strMoveCatTargetallowed to prevent crashing tree on moving + * modified 2009-10-23, Murat Purc, removed deprecated function (PHP 5.3 ready), commenting code and some formatting + * modified 2009-10-27, Murat Purc, fixed/modified CEC_Hook, see [#CON-256] + * modified 2010-01-30, Ingo van Peeren, modified strRemakeTreeTable() to pass only one INSERT statement to the database, see [#CON-299] + * modified 2010-03-12, Ingo van Peeren, fixed a bug with last change if more than one client exist [#CON-299] + * modified 2010-06-18, Ingo van Peeren, fixed some issues with next id and order of con_cat_tree entries + * modified 2010-09-17, Ingo van Peeren, fixed some issues wrong level information causing garbled tree [#CON-348] + * modified 2010-10-13, Dominik Ziegler, No copy label per default when copying articles or categories (CON-352) + * + * $Id: functions.str.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/********************************************************************************* +Functions +strNewTree($catname) +strNewCategory($tmp_parentid, $catname) +strOrderedPostTreeList ($idcat, $poststring) +strRemakeTreeTable() +strNextDeeper($tmp_idcat) +strNextPost($tmp_idcat) +strNextBackwards($tmp_idcat) +strRemakeTreeTableFindNext($tmp_idcat,$tmp_level) +strShowTreeTable() +strRenameCategory ($idcat, $lang, $newcategoryname) +strMakeVisible ($idcat, $lang, $visible) +strMakePublic ($idcat, $lang, $public) +strDeleteCategory ($idcat) +strMoveUpCategory ($idcat) +strMoveDownCategory ($idcat) +strMoveSubtree ($idcat, $parentid_new) +strMoveCatTargetallowed($idcat, $source) +********************************************************************************/ + +cInclude("includes", "functions.con.php"); +cInclude("includes", "functions.database.php"); + +global $db_str; +global $db_str2; + +if (class_exists("DB_ConLite")) { + $db_str = new DB_ConLite(); + $db_str2 = new DB_ConLite(); +} + + +/** + * Creates a new category tree (root category item). + * + * @param string $catname The category name + * @param string $catalias Alias of category + * @param bool $bVisible Flag about visible status + * @param bool $bPublic Flag about public status + * @param int $iIdtplcfg Id of template configuration + * @return (int|void) Id of new generated category or nothing on failure + */ +function strNewTree($catname, $catalias = '', $bVisible = 0, $bPublic = 1, $iIdtplcfg = 0) { + global $db; + global $client; + global $lang; + global $cfg; + global $area_tree; + global $sess; + global $perm; + global $area_rights; + global $item_rights; + global $_SESSION; + // Flag to rebuild the category table + global $remakeCatTable; + global $remakeStrTable; + global $auth; + + $remakeCatTable = true; + $remakeStrTable = true; + + $db2= new DB_ConLite; + + if (trim($catname) == "") { + return; + } + + $catalias = trim($catalias); + if ($catalias == "") { + $catalias = trim($catname); + } + + $tmp_newid = $db->nextid($cfg["tab"]["cat"]); + if ($tmp_newid == 0) { + return; + } + + if ($perm->have_perm_area_action("str_tplcfg", "str_tplcfg")) { + $iIdtplcfg = (int) $iIdtplcfg; + } else { + $iIdtplcfg = 0; + } + + $bVisible = (int) $bVisible; + if (! (($bVisible == 0 || $bVisible == 1) && $perm->have_perm_area_action('str', "str_makevisible")) ) { + $bVisible = 0; + } + + $bPublic = (int) $bPublic; + if (! (($bPublic == 0 || $bPublic == 1) && $perm->have_perm_area_action('str', "str_makepublic")) ) { + $bPublic = 1; + } + + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid='0' AND postid='0' AND idclient='".Contenido_Security::toInteger($client)."'"; + $db->query($sql); + $db->next_record(); + $tmp_id = $db->f("idcat"); + + $a_languages[] = $lang; + + if (is_array($a_languages)) { + + if (!$tmp_id) { + //********** Entry in 'cat'-table ************ + $sql = "INSERT INTO ".$cfg["tab"]["cat"]." (idcat, preid, postid, idclient, author, created, lastmodified) VALUES('".Contenido_Security::toInteger($tmp_newid)."', '0', '0', + '".Contenido_Security::toInteger($client)."', '".Contenido_Security::escapeDB($auth->auth['uname'], $db)."', '".date("Y-m-d H:i:s")."', '".date("Y-m-d H:i:s")."')"; + $db->query($sql); + + //********* enter name of cat in 'cat_lang'-table ****** + foreach ($a_languages as $tmp_lang) { + if ($tmp_lang == $lang) { + $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) + VALUES('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["cat_lang"]))."', '".Contenido_Security::toInteger($tmp_newid)."', '".Contenido_Security::toInteger($tmp_lang)."', + '".clHtmlSpecialChars($catname, ENT_QUOTES)."', '".Contenido_Security::toInteger($bVisible)."', '".Contenido_Security::toInteger($bPublic)."', '0', + '".clHtmlSpecialChars(capiStrCleanURLCharacters($catalias), ENT_QUOTES)."', '".Contenido_Security::escapeDB($auth->auth['uname'], $db)."', '".date("Y-m-d H:i:s")."', '".date("Y-m-d H:i:s")."')"; + $db->query($sql); + } else { + $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) + VALUES('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["cat_lang"]))."', '".Contenido_Security::toInteger($tmp_newid)."', '".Contenido_Security::toInteger($tmp_lang)."', + '".clHtmlSpecialChars($catname, ENT_QUOTES)."', '".Contenido_Security::toInteger($bVisible)."', '".Contenido_Security::toInteger($bPublic)."', '0', + '".clHtmlSpecialChars(capiStrCleanURLCharacters($catalias), ENT_QUOTES)."', '".Contenido_Security::escapeDB($auth->auth['uname'], $db)."', '".date("Y-m-d H:i:s")."', '".date("Y-m-d H:i:s")."')"; + $db->query($sql); + } + } + } else { + //********** Entry in 'cat'-table ************ + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='$tmp_newid' WHERE idcat='".Contenido_Security::toInteger($tmp_id)."'"; + $db->query($sql); + + //********** Entry in 'cat'-table ************ + $sql = "INSERT INTO ".$cfg["tab"]["cat"]." (idcat, preid, postid, idclient, author, created, lastmodified) VALUES('".Contenido_Security::toInteger($tmp_newid)."', '".Contenido_Security::toInteger($tmp_id)."', + '0', '".Contenido_Security::toInteger($client)."', '".Contenido_Security::escapeDB($auth->auth['uname'], $db)."', '".date("Y-m-d H:i:s")."', '".date("Y-m-d H:i:s")."')"; + $db->query($sql); + + //********* enter name of cat in 'cat_lang'-table ****** + foreach ($a_languages as $tmp_lang) { + if ($tmp_lang == $lang) { + $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) + VALUES('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["cat_lang"]))."', '".Contenido_Security::toInteger($tmp_newid)."', '".Contenido_Security::toInteger($tmp_lang)."', + '".clHtmlSpecialChars($catname, ENT_QUOTES)."', '".Contenido_Security::toInteger($bVisible)."', '".Contenido_Security::toInteger($bPublic)."', '0', + '".clHtmlSpecialChars(capiStrCleanURLCharacters($catalias), ENT_QUOTES)."', '".Contenido_Security::escapeDB($auth->auth['uname'], $db)."', '".date("Y-m-d H:i:s")."', '".date("Y-m-d H:i:s")."')"; + $db->query($sql); + } else { + $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) + VALUES('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["cat_lang"]))."', '".Contenido_Security::toInteger($tmp_newid)."', '".Contenido_Security::toInteger($tmp_lang)."', + '".clHtmlSpecialChars($catname, ENT_QUOTES)."', '".Contenido_Security::toInteger($bVisible)."', '".Contenido_Security::toInteger($bPublic)."', '0', + '".clHtmlSpecialChars(capiStrCleanURLCharacters($catalias), ENT_QUOTES)."', '".Contenido_Security::escapeDB($auth->auth['uname'], $db)."', '".date("Y-m-d H:i:s")."', '".date("Y-m-d H:i:s")."')"; + $db->query($sql); + } + } + } + + // set correct rights for element + cInclude ("includes", "functions.rights.php"); + foreach ($a_languages as $tmp_lang) { + createRightsForElement("str", $tmp_newid, $tmp_lang); + createRightsForElement("con", $tmp_newid, $tmp_lang); + } + + } + + /* Search for default template */ + $templateCollection = new cApiTemplateCollection("defaulttemplate = '1' AND idclient = '".Contenido_Security::toInteger($client)."'"); + + if ($template = $templateCollection->next()) { + $idtpl = $template->get("idtpl"); + if ($iIdtplcfg > 0) { + $idtpl = $iIdtplcfg; + } + + /* Assign template, if default template exists */ + $catCollection = new cApiCategoryLanguageCollection("idcat = '".Contenido_Security::toInteger($tmp_newid)."'"); + + while ($cat = $catCollection->next()) { + $cat->assignTemplate($idtpl); + } + + } else { + //2008-06-25 timo.trautmann also set default template if it is selcted by user and there is no default template + if ($iIdtplcfg > 0) { + $idtpl = $iIdtplcfg; + + $catCollection = new cApiCategoryLanguageCollection("idcat = '$tmp_newid'"); + + while ($cat = $catCollection->next()) { + $cat->assignTemplate($idtpl); + } + } + } + + return ($tmp_newid); +} + + +/** + * Creates a new category. + * + * @param int $tmp_parentid Id of parent category + * @param string $catname The category name + * @param bool $remakeTree Flag to rebuild category tree structure + * @param string $catalias Alias of category + * @param bool $bVisible Flag about visible status + * @param bool $bPublic Flag about public status + * @param int $iIdtplcfg Id of template configuration + * @return (int|void) Id of new generated category or nothing on failure + */ +function strNewCategory($tmp_parentid, $catname, $remakeTree = true, $catalias = '', $bVisible = 0, $bPublic = 1, $iIdtplcfg = 0) { + global $db; + global $client; + global $lang; + global $cfg; + global $area_tree; + global $perm; + // Flag to rebuild the category table + global $remakeCatTable; + global $remakeStrTable; + global $auth; + global $tmp_area; + + $db2= new DB_ConLite; + + if (trim($catname) == "") { + return; + } + + $catalias = trim($catalias); + if ($catalias == "") { + $catalias = trim($catname); + } + + if ($perm->have_perm_area_action("str_tplcfg", "str_tplcfg")) { + $iIdtplcfg = (int) $iIdtplcfg; + } else { + $iIdtplcfg = 0; + } + + $bVisible = (int) $bVisible; + if (! (($bVisible == 0 || $bVisible == 1) && $perm->have_perm_area_action('str', "str_makevisible")) ) { + $bVisible = 0; + } + + $bPublic = (int) $bPublic; + if (! (($bPublic == 0 || $bPublic == 1) && $perm->have_perm_area_action('str', "str_makepublic")) ) { + $bPublic = 1; + } + + $tmp_newid = $db->nextid($cfg["tab"]["cat"]); + if ($tmp_newid == 0) { + return; + } + + $remakeCatTable = true; + $remakeStrTable = true; + + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid='".Contenido_Security::toInteger($tmp_parentid)."' AND postid=0"; + $db->query($sql); + $db->next_record(); + $tmp_id = $db->f("idcat"); + + if (!$tmp_id) { + //********** Entry in 'cat'-table ************ + $sql = "INSERT INTO ".$cfg["tab"]["cat"]." (idcat, parentid, preid, postid, idclient, author, created, lastmodified) VALUES('".Contenido_Security::toInteger($tmp_newid)."', + '".Contenido_Security::toInteger($tmp_parentid)."', '0', '0', '".Contenido_Security::toInteger($client)."', '".Contenido_Security::escapeDB($auth->auth['uname'], $db)."', + '".date("Y-m-d H:i:s")."', '".date("Y-m-d H:i:s")."')"; + $db->query($sql); + + //********* enter name of cat in 'cat_lang'-table ****** + $a_languages[] = $lang; + + foreach ($a_languages as $tmp_lang) { + if ($tmp_lang == $lang) { + $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) + VALUES('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["cat_lang"]))."', '".Contenido_Security::toInteger($tmp_newid)."', '".Contenido_Security::toInteger($tmp_lang)."', + '".clHtmlSpecialChars($catname, ENT_QUOTES)."', '".Contenido_Security::toInteger($bVisible)."', '".Contenido_Security::toInteger($bPublic)."', '0', + '".clHtmlSpecialChars(capiStrCleanURLCharacters($catalias), ENT_QUOTES)."', '".Contenido_Security::escapeDB($auth->auth['uname'], $db)."', '".date("Y-m-d H:i:s")."', '".date("Y-m-d H:i:s")."')"; + $db->query($sql); + } else { + $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) + VALUES('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["cat_lang"]))."', '".Contenido_Security::toInteger($tmp_newid)."', '".Contenido_Security::toInteger($tmp_lang)."', + '".clHtmlSpecialChars($catname, ENT_QUOTES)."', '".Contenido_Security::toInteger($bVisible)."', '".Contenido_Security::toInteger($bPublic)."', '0', + '".clHtmlSpecialChars(capiStrCleanURLCharacters($catalias), ENT_QUOTES)."', '".Contenido_Security::escapeDB($auth->auth['uname'], $db)."', '".date("Y-m-d H:i:s")."', '".date("Y-m-d H:i:s")."')"; + $db->query($sql); + } + } + } else { + //********** Entry in 'cat'-table ************ + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='$tmp_newid', lastmodified = '".date("Y-m-d H:i:s")."' WHERE idcat='".Contenido_Security::toInteger($tmp_id)."'"; + $db->query($sql); + + //********** Entry in 'cat'-table ************ + $sql = "INSERT INTO ".$cfg["tab"]["cat"]." (idcat, parentid, preid, postid, idclient, author, created, lastmodified) VALUES('".Contenido_Security::toInteger($tmp_newid)."', + '".Contenido_Security::toInteger($tmp_parentid)."', '".Contenido_Security::toInteger($tmp_id)."', '0', '".Contenido_Security::toInteger($client)."', + '".Contenido_Security::escapeDB($auth->auth['uname'], $db)."', '".date("Y-m-d H:i:s")."', '".date("Y-m-d H:i:s")."')"; + $db->query($sql); + + //********* enter name of cat in 'cat_lang'-table ****** + $a_languages[] = $lang; + foreach ($a_languages as $tmp_lang) { + if ($tmp_lang == $lang) { + $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) + VALUES('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["cat_lang"]))."', '".Contenido_Security::toInteger($tmp_newid)."', '".Contenido_Security::toInteger($tmp_lang)."', + '".clHtmlSpecialChars($catname, ENT_QUOTES)."', '".Contenido_Security::toInteger($bVisible)."', '".Contenido_Security::toInteger($bPublic)."', '0', + '".clHtmlSpecialChars(capiStrCleanURLCharacters($catalias), ENT_QUOTES)."', '".Contenido_Security::escapeDB($auth->auth['uname'], $db)."', '".date("Y-m-d H:i:s")."', '".date("Y-m-d H:i:s")."')"; + $db->query($sql); + } else { + $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." (idcatlang, idcat, idlang, name, visible, public, idtplcfg, urlname, author, created, lastmodified) + VALUES('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["cat_lang"]))."', '".Contenido_Security::toInteger($tmp_newid)."', '".Contenido_Security::toInteger($tmp_lang)."', + '".clHtmlSpecialChars($catname, ENT_QUOTES)."', '".Contenido_Security::toInteger($bVisible)."', '".Contenido_Security::toInteger($bPublic)."', '0', + '".clHtmlSpecialChars(capiStrCleanURLCharacters($catalias), ENT_QUOTES)."', '".Contenido_Security::escapeDB($auth->auth['uname'], $db)."', '".date("Y-m-d H:i:s")."', '".date("Y-m-d H:i:s")."')"; + $db->query($sql); + } + } + + } + + // set correct rights for element + cInclude ("includes", "functions.rights.php"); + foreach ($a_languages as $tmp_lang) { + copyRightsForElement("str", $tmp_parentid, $tmp_newid, $tmp_lang); + copyRightsForElement("con", $tmp_parentid, $tmp_newid, $tmp_lang); + } + + if ($remakeTree == true) { + strRemakeTreeTable(); + } + + /* Search for default template */ + $templateCollection = new cApiTemplateCollection("defaulttemplate = '1' AND idclient = '$client'"); + + if ($template = $templateCollection->next()) { + $idtpl = $template->get("idtpl"); + if ($iIdtplcfg > 0) { + $idtpl = $iIdtplcfg; + } + + /* Assign template, if default template exists */ + $catCollection = new cApiCategoryLanguageCollection("idcat = '".Contenido_Security::toInteger($tmp_newid)."'"); + + while ($cat = $catCollection->next()) { + $cat->assignTemplate($idtpl); + } + } else { + //2008-06-25 timo.trautmann also set default template if it is selcted by user and there is no default template + if ($iIdtplcfg > 0) { + $idtpl = $iIdtplcfg; + + $catCollection = new cApiCategoryLanguageCollection("idcat = '".Contenido_Security::toInteger($tmp_newid)."'"); + + while ($cat = $catCollection->next()) { + $cat->assignTemplate($idtpl); + } + } + } + + return($tmp_newid); +} + + +function strOrderedPostTreeList($idcat, $poststring) { + global $db; + global $client; + global $lang; + global $cfg; + + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid=0 AND preid='".Contenido_Security::toInteger($idcat)."' AND idcat!=0"; + + $db->query($sql); + if ($db->next_record()) { + $tmp_idcat = $db->f("idcat"); + $poststring = $poststring.",".$tmp_idcat; + $poststring = strOrderedPostTreeList($tmp_idcat, $poststring); + } + + return $poststring; +} + + +/** + * Remakes the category tree structure in category tree table. + * + * @return void + */ +function strRemakeTreeTable() { + global $db; + global $client; + global $lang; + global $cfg; + // Flag to rebuild the category table + global $remakeCatTable; + global $remakeStrTable; + $remakeCatTable = true; + $remakeStrTable = true; + + $poststring = ""; + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE idclient = '".$client."'"; + $db->query($sql); + $idcats = array(); + while ($db->next_record()) { + $idcats[] = $db->f("idcat"); + } + + $sql = "DELETE FROM ".$cfg["tab"]["cat_tree"]." WHERE idcat IN ('".implode("', '",$idcats)."')"; // empty 'cat_tree'-table + $db->query($sql); + + $sql = "DELETE FROM ".$cfg["tab"]["cat"]." WHERE idcat='0'"; + $db->query($sql); + + $sql = "DELETE FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='0'"; + $db->query($sql); + + $sql = "SELECT idcat, parentid, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idclient = '".$client."' ORDER BY parentid ASC, preid ASC, postid ASC"; + + $db->query($sql); + + // build cat_tree + $aCategories = array(); + while($db->next_record()) { + + if ($db->f('parentid') == 0) { + $aCategories[0][$db->f('idcat')] = array( + 'idcat' => $db->f('idcat'), + 'parentid' => $db->f('parentid'), + 'preid' => $db->f('preid'), + 'postid' => $db->f('postid') + ); + } else { + $aCategories[$db->f('parentid')][$db->f('idcat')] = array( + 'idcat' => $db->f('idcat'), + 'parentid' => $db->f('parentid'), + 'preid' => $db->f('preid'), + 'postid' => $db->f('postid') + ); + } + + } + + $iNextTreeId = $db->nextid($cfg["tab"]["cat_tree"]); + + // build INSERT statement + $sInsertQuery = "INSERT INTO ".$cfg["tab"]["cat_tree"]." (idtree, idcat, level) VALUES "; + $sInsertQuery = recCats($aCategories[0], $sInsertQuery, $iNextTreeId, $aCategories); + $sInsertQuery = rtrim($sInsertQuery, " ,"); + + // lock db table and execute INSERT query + $db->lock($cfg["tab"]["cat_tree"]); + $db->query($sInsertQuery); + $db->nextid('cat_tree'); + dbUpdateSequence($cfg["tab"]["sequence"], $cfg["tab"]["cat_tree"], $db); + $db->unlock($cfg["tab"]["cat_tree"]); + +} + +function sort_pre_post($arr) { + $firstElement = null; + foreach ($arr as $row) { + if ($row['preid'] == 0) $firstElement = $row['idcat']; + } + + $curId = $firstElement; + $array = array(); + while ($curId != 0) { + $array[] = $arr[$curId]; + $curId = $arr[$curId]['postid']; + } + + return $array; +} + + +function recCats ($aCats, $sInsertQuery, &$iNextTreeId, &$aAllCats, $iLevel = 0) { + if (is_array($aCats)) { + $aCats = sort_pre_post($aCats); + foreach ($aCats as $aCat) { + $sInsertQuery .= "(" . (int) $iNextTreeId . ", ".(int) $aCat['idcat'].", ". (int) $iLevel ."), "; + $iNextTreeId++; + if (is_array($aAllCats[$aCat['idcat']])) { + $iSubLevel = $iLevel + 1; + $sInsertQuery = recCats($aAllCats[$aCat['idcat']], $sInsertQuery, $iNextTreeId, $aAllCats, $iSubLevel); + } + } + } + return $sInsertQuery; +} + + +function strNextDeeper($tmp_idcat, $ignore_lang = false) { + global $cfg, $db_str, $lang; + + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid='".Contenido_Security::toInteger($tmp_idcat)."' AND preid='0'"; + $db_str->query($sql); + if ($db_str->next_record()) { + $midcat = $db_str->f("idcat"); + if ($ignore_lang == true) { + return $midcat; + } + + //******deeper element exists + /* Check for language dependent part */ + + $sql = "SELECT idcatlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($midcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db_str->query($sql); + if ($db_str->next_record()) { + return $midcat; + } else { + return 0; + } + } else { + //******deeper element does not exist + return 0; + } +} + + +/** + * Checks, if passed category cotains any articles + * + * @param int $tmp_idcat ID of category + * @return bool + */ +function strHasArticles($tmp_idcat) { + global $cfg, $db_str; + global $lang; + + $sql = "SELECT b.idartlang AS idartlang FROM + ".$cfg["tab"]["cat_art"]." AS a, + ".$cfg["tab"]["art_lang"]." AS b + WHERE a.idcat='".Contenido_Security::toInteger($tmp_idcat)."' AND + a.idart = b.idart AND b.idlang = '".Contenido_Security::toInteger($lang)."'"; + + $db_str->query($sql); + + if ($db_str->next_record()) { //******post element exists + return true; + } else { //******post element does not exist + return false; + } +} + + +function strNextPost($tmp_idcat) { + global $db; + global $cfg; + + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE preid='".Contenido_Security::toInteger($tmp_idcat)."'"; + $db->query($sql); + if ($db->next_record()) { //******post element exists + $tmp_idcat = $db->f("idcat"); + $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat='".Contenido_Security::toInteger($tmp_idcat)."'"; + $db->query($sql); + if ($db->next_record()) { //******parent from post must not be 0 + $tmp_parentid = $db->f("parentid"); + if ($tmp_parentid != 0) { + return $tmp_idcat; + } else { + return 0; + } + } else { + return 99; + } + } else { //******post element does not exist + return 0; + } +} + +function strNextBackwards($tmp_idcat) { + global $db; + global $cfg; + + $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat='".Contenido_Security::toInteger($tmp_idcat)."'"; + $db->query($sql); + if ($db->next_record()) { //******parent exists + $tmp_idcat = $db->f("parentid"); + if ($tmp_idcat != 0) { + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE preid='".Contenido_Security::toInteger($tmp_idcat)."'"; + $db->query($sql); + if ($db->next_record()) { //******parent has post + $tmp_idcat = $db->f("idcat"); + $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat='".Contenido_Security::toInteger($tmp_idcat)."'"; + $db->query($sql); + if ($db->next_record()) { //******parent from post must not be 0 + $tmp_parentid = $db->f("parentid"); + if ($tmp_parentid != 0) { + return $tmp_idcat; + } else { + return 0; + } + } else { + return 99; + } + } else { //******parent has no post + return strNextBackwards($tmp_idcat); + } + } else { + return 0; + } + } else { //******no parent + return 0; + } +} + +/** + * Hotfix recursive call more than 200 times exit script on hosteurope Timo.Trautmann (strRemakeTreeTableFindNext) + * @deprecated + **/ +function strRemakeTreeTableFindNext($tmp_idcat,$tmp_level) { + global $db; + global $cfg; + + //************* Insert Element in 'cat_tree'-table ************** + $sql = "INSERT INTO ".$cfg["tab"]["cat_tree"]." (idtree, idcat, level) VALUES ('".$db->nextid($cfg["tab"]["cat_tree"])."', '".Contenido_Security::toInteger($tmp_idcat)."', '".Contenido_Security::toInteger($tmp_level)."')"; + $db->query($sql); + + //************* dig deeper, if possible ****** + $tmp = strNextDeeperAll($tmp_idcat, true); + + foreach ($tmp as $iCurIdCat) { + if (count(strNextDeeperAll($iCurIdCat, true)) > 0 ) { + strRemakeTreeTableFindNext($iCurIdCat, ($tmp_level+1)); + } else { + $sql = "INSERT INTO ".$cfg["tab"]["cat_tree"]." (idtree, idcat, level) VALUES ('".$db->nextid($cfg["tab"]["cat_tree"])."', '".Contenido_Security::toInteger($iCurIdCat)."', '".Contenido_Security::toInteger($tmp_level+1)."')"; + $db->query($sql); + } + } +} + + + +/** + Hotfix recursive call more than 200 times exit script on hosteurope Timo.Trautmann +**/ +function strNextDeeperAll($tmp_idcat, $ignore_lang = false) { + global $cfg, $db_str, $db_str2, $lang; + $aCats = array(); + $bLoop = true; + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid='".Contenido_Security::toInteger($tmp_idcat)."' and preid = 0"; + + #echo $sql.'
'; + $db_str->query($sql); + if ($db_str->next_record()) { + while ($bLoop) { + $midcat = $db_str->f("idcat"); + + if ($ignore_lang == true) { + array_push($aCats, $midcat); + } else { + //******deeper element exists + /* Check for language dependent part */ + $sql = "SELECT idcatlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($midcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db_str2->query($sql); + + if ($db_str2->next_record()) { + array_push($aCats, $midcat); + } + } + + $sql = "SELECT preid, postid, idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid='".Contenido_Security::toInteger($tmp_idcat)."' and preid = ".Contenido_Security::toInteger($midcat).""; + $db_str->query($sql); + if (!$db_str->next_record()) { + $bLoop = false; + } + } + } + return $aCats; +} + + +/** + * Renders the category tree a HTML table + * + * @return void + */ +function strShowTreeTable() { + global $db; + global $sess; + global $client; + global $lang; + global $idcat; + global $cfg; + global $lngStr; + + echo "
"; + $sql = "SELECT * FROM ".$cfg["tab"]["cat_tree"]." AS A, ".$cfg["tab"]["cat"]." AS B, ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND C.idlang='".Contenido_Security::toInteger($lang)."' + AND B.idclient='".Contenido_Security::toInteger($client)."' ORDER BY A.idtree"; + $db->query($sql); + while ($db->next_record()) { + $tmp_id = $db->f("idcat"); + $tmp_name = $db->f("name"); + $tmp_level = $db->f("level"); + + echo ""; + echo ""; + echo ""; + echo ""; + } + echo "
".$tmp_id." | ".$tmp_name." | ".$tmp_level."url("main.php?action=20&idcat=$tmp_id")."\">".$lngStr["actions"]["20"]."url("main.php?action=30&idcat=$tmp_id")."\">".$lngStr["actions"]["30"]."
"; +} + + +/** + * Renames a category + * + * @param int $idcat Category id + * @param int $lang Language id + * @param string $newcategoryname New category name + * @param string $newcategoryalias New category alias + * @return void + */ +function strRenameCategory($idcat, $lang, $newcategoryname, $newcategoryalias) { + global $db; + global $cfg; + global $cfgClient; + global $client; + + // Flag to rebuild the category table + global $remakeCatTable; + global $remakeStrTable; + $remakeCatTable = true; + $remakeStrTable = true; + + if (trim($newcategoryname) != "") { + $sUrlname = clHtmlSpecialChars(capiStrCleanURLCharacters($newcategoryname), ENT_QUOTES); + $sName = clHtmlSpecialChars($newcategoryname, ENT_QUOTES); + + if (trim($newcategoryalias) != "") { + $sql = "SELECT urlname, name FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + $sUrlnameNew = clHtmlSpecialChars(capiStrCleanURLCharacters($newcategoryalias), ENT_QUOTES); + if ($db->next_record()) { + $sOldAlias = $db->f('urlname'); + $sOldName = $db->f('name'); + } + if ($sOldAlias != $sUrlnameNew) { + $sUrlname = $sUrlnameNew; + } + + @unlink($cfgClient[$client]["path"]["frontend"]."cache/locationstring-url-cache-$lang.txt"); + } + + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET urlname='".Contenido_Security::escapeDB($sUrlname, $db)."', name='".Contenido_Security::escapeDB($sName, $db)."', lastmodified = '".date("Y-m-d H:i:s")."' + WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + } +} + + +/** + * Sets the visible status of the category and its childs + * + * @param int $idcat Category id + * @param int $lang Language id + * @param int $visible Visible status + * @return void + */ +function strMakeVisible ($idcat, $lang, $visible) { + global $db; + global $cfg; + // Flag to rebuild the category table + global $remakeCatTable; + global $remakeStrTable; + $remakeCatTable = true; + $remakeStrTable = true; + + $a_catstring = strDeeperCategoriesArray($idcat); + foreach ($a_catstring as $value) { + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET visible='".Contenido_Security::toInteger($visible)."', lastmodified ='".date("Y-m-d H:i:s")."' + WHERE idcat='".Contenido_Security::toInteger($value)."' AND idlang='".Contenido_Security::toInteger($lang)."' "; + $db->query($sql); + } + + if ($cfg["pathresolve_heapcache"] == true && $visible = 0) { + $pathresolve_tablename = $cfg["sql"]["sqlprefix"]."_pathresolve_cache"; + $sql = "DELETE FROM %s WHERE idlang = '%s' AND idcat = '%s'"; + $db->query(sprintf($sql, Contenido_Security::escapeDB($pathresolve_tablename, $db), Contenido_Security::toInteger($lang), $idcat)); + } +} + + +/** + * Sets the public status of the category and its childs + * + * @param int $idcat Category id + * @param int $lang Language id + * @param int $public Public status + * @return void + */ +function strMakePublic($idcat, $lang, $public) { + global $db; + global $cfg; + // Flag to rebuild the category table + global $remakeCatTable; + global $remakeStrTable; + $remakeCatTable = true; + $remakeStrTable = true; + + $a_catstring = strDeeperCategoriesArray($idcat); + foreach ($a_catstring as $value) { + $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET public='$public', lastmodified = '".date("Y-m-d H:i:s")."' + WHERE idcat='".Contenido_Security::toInteger($value)."' AND idlang='".Contenido_Security::toInteger($lang)."' "; + $db->query($sql); + } +} + + +function strDeeperCategoriesArray($idcat_start) { + global $db; + global $client; + global $cfg; + + $sql = "SELECT * FROM ".$cfg["tab"]["cat_tree"]." AS A, ".$cfg["tab"]["cat"]." AS B WHERE A.idcat=B.idcat AND idclient='".Contenido_Security::toInteger($client)."' ORDER BY idtree"; + $db->query($sql); + $i = 0; + while ($db->next_record()) { + if ($db->f("parentid") < $idcat_start) { // ending part of tree + $i = 0; + } + if ($db->f("idcat") == $idcat_start) { // starting part of tree + $i = 1; + } + if ($i == 1) { + $catstring[] = $db->f("idcat"); + } + } + + return $catstring; +} + + +/** + * Deletes the category and its template configurations. + * + * Only categories having no child categories and having no articles will be deleted! + * + * @param int $idcat Id of category to delete + * @return void + */ +function strDeleteCategory($idcat) { + global $db; + global $lang; + global $client; + global $lang; + global $cfg; + + // Flag to rebuild the category table + global $remakeCatTable; + global $remakeStrTable; + $remakeCatTable = true; + $remakeStrTable = true; + + $db2 = new DB_ConLite; + + if (strNextDeeper($idcat)) { + return "0201"; // category has subcategories + } else { + + if (strHasArticles($idcat)) { + return "0202"; // category has arts + } else { + $sql = "SELECT idtplcfg FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + + while ($db->next_record()) { + ////// delete entry in 'tpl_conf'-table + $sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg='".Contenido_Security::toInteger($db->f("idtplcfg"))."'"; + $db2->query($sql); + + $sql = "DELETE FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($db->f("idtplcfg"))."'"; + $db2->query($sql); + } + + /* Delete language dependend part */ + $sql = "DELETE FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + + /* Are there any additional languages? */ + $sql = "SELECT idcatlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'"; + $db->query($sql); + + if ($db->num_rows() > 0) { + // more languages found... + // delete rights for element + cInclude ("includes", "functions.rights.php"); + deleteRightsForElement("str", $idcat, $lang); + deleteRightsForElement("con", $idcat, $lang); + + return; + } + + $sql = "SELECT * FROM ".$cfg["tab"]["cat"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'"; + $db->query($sql); + $db->next_record(); + $tmp_preid = $db->f("preid"); + $tmp_postid = $db->f("postid"); + + ////// update pre cat set new postid + if ($tmp_preid != 0) { + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='".Contenido_Security::toInteger($tmp_postid)."' WHERE idcat='".Contenido_Security::toInteger($tmp_preid)."'"; + $db->query($sql); + } + + ////// update post cat set new preid + if ($tmp_postid != 0) { + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET preid='".Contenido_Security::toInteger($tmp_preid)."' WHERE idcat='".Contenido_Security::toInteger($tmp_postid)."'"; + $db->query($sql); + } + + ////// delete entry in 'cat'-table + $sql = "DELETE FROM ".$cfg["tab"]["cat"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'"; + $db->query($sql); + + $sql = "SELECT idtplcfg FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'"; + $db->query($sql); + while ($db->next_record()) { + ////// delete entry in 'tpl_conf'-table + $sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg='".Contenido_Security::toInteger($db->f("idtplcfg"))."'"; + $db2->query($sql); + + $sql = "DELETE FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($db->f("idtplcfg"))."'"; + echo $sql; + $db2->query($sql); + } + + ////// delete entry in 'cat_lang'-table + $sql = "DELETE FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'"; + $db->query($sql); + + ////// delete entry in 'cat_tree'-table + $sql = "DELETE FROM ".$cfg["tab"]["cat_tree"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'"; + $db->query($sql); + } + + // delete rights for element + cInclude ("includes", "functions.rights.php"); + deleteRightsForElement("str", $idcat); + deleteRightsForElement("con", $idcat); + } +} + + +/** + * Moves a category upwards. + * + * @param int $idcat Id of category to move upwards + * @return void + */ +function strMoveUpCategory($idcat) { + global $db; + global $sess; + global $cfg; + + // Flag to rebuild the category table + global $remakeCatTable; + global $remakeStrTable; + $remakeCatTable = true; + $remakeStrTable = true; + + $sql = "SELECT idcat, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'"; + $db->query($sql); + $db->next_record(); + $tmp_idcat = $db->f("idcat"); + $tmp_preid = $db->f("preid"); + $tmp_postid = $db->f("postid"); + + if ($tmp_preid != 0) { + $sql = "SELECT idcat, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idcat='".Contenido_Security::toInteger($tmp_preid)."'"; + $db->query($sql); + $db->next_record(); + $tmp_idcat_pre = $db->f("idcat"); + $tmp_preid_pre = $db->f("preid"); + $tmp_postid_pre = $db->f("postid"); + + $sql = "SELECT idcat, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idcat='".Contenido_Security::toInteger($tmp_preid_pre)."'"; + $db->query($sql); + $db->next_record(); + $tmp_idcat_pre_pre = $db->f("idcat"); + $tmp_preid_pre_pre = $db->f("preid"); + $tmp_postid_pre_pre = $db->f("postid"); + + $sql = "SELECT idcat, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idcat='".Contenido_Security::toInteger($tmp_postid)."'"; + $db->query($sql); + $db->next_record(); + $tmp_idcat_post = $db->f("idcat"); + $tmp_preid_post = $db->f("preid"); + $tmp_postid_post = $db->f("postid"); + + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='".Contenido_Security::toInteger($tmp_idcat)."' WHERE idcat='".Contenido_Security::toInteger($tmp_preid_pre)."'"; + $db->query($sql); + + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET preid='".Contenido_Security::toInteger($tmp_idcat)."', postid='".Contenido_Security::toInteger($tmp_postid)."' WHERE idcat='".Contenido_Security::toInteger($tmp_preid)."'"; + $db->query($sql); + + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET preid='".Contenido_Security::toInteger($tmp_preid_pre)."', postid='".Contenido_Security::toInteger($tmp_preid)."' WHERE idcat='$tmp_idcat'"; + $db->query($sql); + + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET preid='".Contenido_Security::toInteger($tmp_idcat_pre)."' WHERE idcat='$tmp_postid'"; + $db->query($sql); + } +} + + +/** + * Moves a category downwards. + * + * @param int $idcat Id of category to move downwards + * @return void + */ +function strMoveDownCategory($idcat) { + global $db; + global $sess; + global $cfg; + + // Flag to rebuild the category table + global $remakeCatTable; + global $remakeStrTable; + $remakeCatTable = true; + $remakeStrTable = true; + + $arrLinks = array(); + + $sql = "SELECT idcat, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'"; + $db->query($sql); + $db->next_record(); + $arrLinks['cur']['idcat'] = $db->f("idcat"); + $arrLinks['cur']['pre'] = $db->f("preid"); + $arrLinks['cur']['post'] = $db->f("postid"); + + $sql = "SELECT idcat, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idcat='".Contenido_Security::toInteger($arrLinks['cur']['pre'])."'"; + $db->query($sql); + if ($db->next_record()) { + $arrLinks['pre']['idcat'] = $db->f("idcat"); + $arrLinks['pre']['pre'] = $db->f("preid"); + $arrLinks['pre']['post'] = $db->f("postid"); + } else { + $arrLinks['pre']['idcat'] = 0; + $arrLinks['pre']['pre'] = 0; + $arrLinks['pre']['post'] = 0; + } + + $sql = "SELECT idcat, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idcat='".Contenido_Security::toInteger($arrLinks['cur']['post'])."'"; + $db->query($sql); + if ($db->next_record()) { + $arrLinks['post']['idcat'] = $db->f("idcat"); + $arrLinks['post']['pre'] = $db->f("preid"); + $arrLinks['post']['post'] = $db->f("postid"); + } else { + $arrLinks['post']['idcat'] = 0; + $arrLinks['post']['pre'] = 0; + $arrLinks['post']['post'] = 0; + } + + if ($arrLinks['cur']['post'] != 0) { + if ($arrLinks['pre']['idcat'] != 0) { + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='".Contenido_Security::toInteger($arrLinks['post']['idcat'])."' WHERE idcat='".Contenido_Security::toInteger($arrLinks['pre']['idcat'])."'"; + $db->query($sql); + } else { + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET preid='".Contenido_Security::toInteger($arrLinks['pre']['idcat'])."' WHERE idcat='".Contenido_Security::toInteger($arrLinks['post']['idcat'])."'"; + $db->query($sql); + } + + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET preid='".Contenido_Security::toInteger($arrLinks['cur']['post'])."', postid='".Contenido_Security::toInteger($arrLinks['post']['post'])."' + WHERE idcat='".Contenido_Security::toInteger($arrLinks['cur']['idcat'])."'"; + $db->query($sql); + + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET preid='".Contenido_Security::toInteger($arrLinks['pre']['idcat'])."', postid='".Contenido_Security::toInteger($arrLinks['cur']['idcat'])."' + WHERE idcat='".Contenido_Security::toInteger($arrLinks['post']['idcat'])."'"; + $db->query($sql); + } + + if ($arrLinks['post']['post'] != 0) { + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET preid='".Contenido_Security::toInteger($arrLinks['cur']['idcat'])."' WHERE idcat='".Contenido_Security::toInteger($arrLinks['post']['post'])."'"; + $db->query($sql); + } +} + + +/** + * Moves a subtree to another destination. + * + * @param int $idcat Id of category + * @param int $parentid_new Id of destination parent category + * @return void + */ +function strMoveSubtree($idcat, $parentid_new) { + global $db, $cfg, $remakeCatTable, $remakeStrTable, $movesubtreeidcat, $sess; + $remakeCatTable = true; + $remakeStrTable = true; + + $idcat = Contenido_Security::toInteger( $idcat ); + $iNewParentId = Contenido_Security::toInteger( $parentid_new ); + + // Check if iNewParentId is 0 and the unescaped value is not null + if ( $iNewParentId == 0 && !is_null( $parentid_new ) ) { + $movesubtreeidcat = 0; + } else if ( $iNewParentId != 0 ) { + $sql = "SELECT idcat, preid, postid FROM ".$cfg["tab"]["cat"]." WHERE idcat='" . $idcat . "'"; + $db->query($sql); + $db->next_record(); + $tmp_idcat = $db->f("idcat"); + $tmp_preid = $db->f("preid"); + $tmp_postid = $db->f("postid"); + + //****************** update predecessor (pre)********************** + if ($tmp_preid != 0) { + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='" . $tmp_postid . "' WHERE idcat='" . $tmp_preid . "'"; + $db->query($sql); + } + + //****************** update follower (post)********************** + if ($tmp_postid != 0) { + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET preid='" . $tmp_preid . "' WHERE idcat='" . $tmp_postid . "'"; + $db->query($sql); + } + + //****************** find new pre ******************** + $sql = "SELECT idcat, preid FROM ".$cfg["tab"]["cat"]." WHERE parentid='" . $iNewParentId . "' AND postid='0'"; + $db->query($sql); + if ($db->next_record()) { + $tmp_new_preid = $db->f("idcat"); + $tmp_preid_2 = $db->f("preid"); + if ($tmp_new_preid != $idcat) { + //******************** update new pre: set post ********************** + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='" . $idcat . "' WHERE idcat='" . $tmp_new_preid . "'"; + $db->query($sql); + } else { + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE idcat='" . $tmp_preid_2 . "'"; + $db->query($sql); + if ($db->next_record()) { + $tmp_new_preid = $db->f("idcat"); + //******************** update new pre: set post ********************** + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='" . $idcat . "' WHERE idcat='" . $tmp_new_preid . "'"; + $db->query($sql); + } else { + $tmp_new_preid = 0; + } + } + } else { + $tmp_new_preid = 0; + } + + //*************** update idcat ******************** + $sql = "UPDATE ".$cfg["tab"]["cat"]." SET parentid='" . $iNewParentId . "', preid='" . $tmp_new_preid . "', postid='0' WHERE idcat='" . $idcat . "'"; + $db->query($sql); + + $movesubtreeidcat = 0; + } else { + // We recoded this function to prevent crashing the cat tree + // when a user copies a tree and forget to set the target category + + // Copy transaction now is only performed by setting the target + $movesubtreeidcat = $idcat; + } + + $sess->register('movesubtreeidcat'); + $sess->freeze(); +} + + +/** + * Checks if category is movable. + * + * @param int $idcat Id of category to move + * @param int $source Id of source category + * @return bool + */ +function strMoveCatTargetallowed($idcat, $source) { + if ($idcat == $source) { + return 0; + } else { + return 1; + } +} + + +/** + * Synchronizes a category from one language to another language. + * + * @param int $idcatParam Id of category to synchronize + * @param int $sourcelang Id of source language + * @param int $targetlang Id of target language + * @param bool $bMultiple Flag to synchronize child languages + * @return void + */ +function strSyncCategory($idcatParam, $sourcelang, $targetlang, $bMultiple = false) { + global $cfg; + + $tmpdb = new DB_ConLite; + $bMultiple = (bool) $bMultiple; + + $aCatArray = array(); + if ($bMultiple == true) { + $aCatArray = strDeeperCategoriesArray($idcatParam); + } else { + array_push($aCatArray, $idcatParam); + } + + foreach ($aCatArray as $idcat) { + /* Check if category already exists */ + $sql = "SELECT idcat, idlang, idtplcfg, name, + visible, public, status, author, + created, lastmodified + FROM + ".$cfg["tab"]["cat_lang"]." + WHERE + idcat = '".Contenido_Security::toInteger($idcat)."' AND idlang = '".Contenido_Security::toInteger($targetlang)."'"; + + $tmpdb->query($sql); + + if ($tmpdb->next_record()) { + return false; + } + + $sql = "SELECT idcat, idlang, idtplcfg, name, + visible, public, status, author, + created, lastmodified, urlname + FROM + ".$cfg["tab"]["cat_lang"]." + WHERE + idcat = '".Contenido_Security::toInteger($idcat)."' AND idlang = '".Contenido_Security::toInteger($sourcelang)."'"; + + $tmpdb->query($sql); + + if ($tmpdb->next_record()) { + if ($tmpdb->f("idtplcfg") != 0) { + /* Copy the template configuration */ + $newidtplcfg = tplcfgDuplicate($tmpdb->f("idtplcfg")); + } else { + $newidtplcfg = 0; + } + $newidcatlang = $tmpdb->nextid($cfg["tab"]["cat_lang"]); + + $idcat = $tmpdb->f("idcat"); + $idlang = $targetlang; + $idtplcfg = $newidtplcfg; + $name = $tmpdb->f("name"); + $visible = 0; + $public = $tmpdb->f("public"); + $urlname = $tmpdb->f("urlname"); + $status = $tmpdb->f("status"); + $author = $tmpdb->f("author"); + $created = $tmpdb->f("created"); + $lastmodified = $tmpdb->f("lastmodified"); + + $sql = "INSERT INTO + ".$cfg["tab"]["cat_lang"]." + (idcatlang, idcat, idlang, idtplcfg, name, + visible, public, status, author, created, + lastmodified, urlname) + VALUES + ('".Contenido_Security::toInteger($newidcatlang)."', + '".Contenido_Security::toInteger($idcat)."', + '".Contenido_Security::toInteger($idlang)."', + '".Contenido_Security::toInteger($idtplcfg)."', + '".Contenido_Security::escapeDB($name, $tmpdb)."', + '".Contenido_Security::toInteger($visible)."', + '".Contenido_Security::toInteger($public)."', + '".Contenido_Security::toInteger($status)."', + '".Contenido_Security::escapeDB($author, $tmpdb)."', + '".Contenido_Security::escapeDB($created, $tmpdb)."', + '".Contenido_Security::escapeDB($lastmodified, $tmpdb)."', + '".Contenido_Security::escapeDB($urlname, $tmpdb)."')"; + $tmpdb->query($sql); + + // execute CEC hook + $param = $tmpdb->Record; + $param['idlang'] = $idlang; + $param['idtplcfg'] = $idtplcfg; + $param['visible'] = $visible; + CEC_Hook::execute('Contenido.Category.strSyncCategory_Loop', $param); + + // set correct rights for element + cInclude ("includes", "functions.rights.php"); + createRightsForElement("str", $idcat, $targetlang); + createRightsForElement("con", $idcat, $targetlang); + } + } +} + + +/** + * Checks if category has a start article + * + * @param int $idcat Id of category + * @param int $idlang The language id + * @return bool + */ +function strHasStartArticle($idcat, $idlang) { + global $cfg, $db_str; + + if ($cfg["is_start_compatible"] == false) { + $sql = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat = '".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($idlang)."' AND startidartlang != 0"; + } else { + $sql = "SELECT is_start FROM ".$cfg["tab"]["cat_art"]." WHERE idcat = '".Contenido_Security::toInteger($idcat)."' AND is_start = 1"; + } + $db_str->query($sql); + if ($db_str->next_record()) { + return true; + } + return false; +} + + +/** + * Copies the category and it's existing articles into another category. + * + * @param int $idcat Id of category to copy + * @param int $destidcat Id of destination category + * @param bool $remakeTree Flag to rebuild category tree + * @param bool $bUseCopyLabel Flag to add copy label to the new categories + * @return void + */ +function strCopyCategory($idcat, $destidcat, $remakeTree = true, $bUseCopyLabel = true) { + global $cfg, $client, $lang; + + $newidcat = strNewCategory($destidcat, "a", $remakeTree); + + /* Selectors */ + $_oldcatlang = new cApiCategoryLanguageCollection; + $_newcatlang = new cApiCategoryLanguageCollection; + + $_oldcatlang->select("idcat = '$idcat' AND idlang = '$lang'"); + $oldcatlang = $_oldcatlang->next(); + + if (!is_object($oldcatlang)) { + return; + } + + $_newcatlang->select("idcat = '$newidcat' AND idlang = '$lang'"); + $newcatlang = $_newcatlang->next(); + + if (!is_object($newcatlang)) { + return; + } + + /* Worker objects */ + $newcat = new cApiCategory($newidcat); + $oldcat = new cApiCategory($idcat); + + /* Copy properties */ + if ($bUseCopyLabel == true) { + $newcatlang->set("name", sprintf(i18n("%s (Copy)"), $oldcatlang->get("name"))); + } else { + $newcatlang->set("name", $oldcatlang->get("name")); + } + + $newcatlang->set("public", $oldcatlang->get("public")); + $newcatlang->set("visible", 0); + $newcatlang->store(); + + // execute cec hook + CEC_Hook::execute('Contenido.Category.strCopyCategory', array( + 'oldcat' => $oldcat, + 'newcat' => $newcat, + 'newcatlang' => $newcatlang + )); + + /* Copy template configuration */ + if ($oldcatlang->get("idtplcfg") != 0) { + /* Create new template configuration */ + $newcatlang->assignTemplate($oldcatlang->getTemplate()); + + /* Copy the container configuration */ + $c_cconf = new cApiContainerConfigurationCollection; + $m_cconf = new cApiContainerConfigurationCollection; + $c_cconf->select("idtplcfg = '".$oldcatlang->get("idtplcfg")."'"); + + while ($i_cconf = $c_cconf->next()) { + $m_cconf->create($newcatlang->get("idtplcfg"), $i_cconf->get("number"), $i_cconf->get("container")); + } + } + + $db = new DB_ConLite; + $db2 = new DB_ConLite; + + /* Copy all articles */ + $sql = "SELECT A.idart, B.idartlang FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["art_lang"]." AS B WHERE A.idcat = '".Contenido_Security::toInteger($idcat)."' AND B.idart = A.idart AND B.idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + + while ($db->next_record()) { + $newidart = conCopyArticle($db->f("idart"), $newidcat, "", $bUseCopyLabel); + if ($db->f("idartlang") == $oldcatlang->get("startidartlang")) { + $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat = '".Contenido_Security::toInteger($newidcat)."' AND idart = '".Contenido_Security::toInteger($newidart)."'"; + $db2->query($sql); + if ($db2->next_record()) { + conMakeStart($db2->f("idcatart"), 1); + } + } + } + + return ($newidcat); +} + + +/** + * Copies the categorytree (category and its childs) to an another category. + * + * @param int $idcat Id of category to copy + * @param int $destcat Id of destination category + * @param bool $remakeTree Flag to rebuild category tree + * @param bool $bUseCopyLabel Flag to add copy label to the new categories + * @return void + */ +function strCopyTree($idcat, $destcat, $remakeTree = true, $bUseCopyLabel = true) { + global $cfg; + + $newidcat = strCopyCategory($idcat, $destcat, false, $bUseCopyLabel); + + $db = new DB_ConLite; + $db->query("SELECT idcat FROM ".$cfg["tab"]["cat"]." WHERE parentid = '".Contenido_Security::toInteger($idcat)."'"); + while ($db->next_record()) { + strCopyTree($db->f("idcat"), $newidcat, false, $bUseCopyLabel); + } + + if ($remakeTree == true) { + strRemakeTreeTable(); + } +} + +?> diff --git a/branches/conlite20/conlite/includes/functions.system.php b/branches/conlite20/conlite/includes/functions.system.php new file mode 100644 index 0000000..dd61b89 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.system.php @@ -0,0 +1,661 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * emptyLogFile - clears logfiles + * + * @author Ortwin Pinke + * @author Marco Jahn first version in Contenido + * + * @global array $cfg + * @global Contenido_Notification $notification + * @return string + */ +function emptyLogFile() { + global $cfg, $notification; + $tmp_notification = ''; + + if($_GET['log'] == 1) { + $sNewLogPath = $cfg['path']['conlite_logs']."errorlog.txt"; + $sOldLogPath = $cfg['path']['contenido']."logs/errorlog.txt"; + } else if($_GET['log'] == 2) { + $sNewLogPath = $cfg['path']['conlite_logs']."errorlog.txt"; + $sOldLogPath = $cfg['path']['contenido']."logs/errorlog.txt"; + } + + if(file_exists($sNewLogPath) && is_writable($sNewLogPath)) { + $sDelFile = $sNewLogPath; + } else if(file_exists($sOldLogPath) && is_writable($sOldLogPath)) { + $sDelFile = $sOldLogPath; + } else if(file_exists($sNewLogPath) || file_exists($sOldLogPath)) { + return $notification->returnNotification("error", i18n("Can't clear install error log : Access is denied!")); + } + + $errorLogHandle = fopen($sDelFile, "wb+"); + fclose($errorLogHandle); + return $notification->returnNotification("info", i18n("error log successfully cleared")); +} + +/** + * phpInfoToHtml - grabs phpinfo() output + * + * grabs phpinfo() HTML output + * + * @return string returns phpinfo() HTML output + * @author Marco Jahn + */ +function phpInfoToHtml() +{ + /* get output */ + ob_start(); + phpinfo(); + $phpInfoToHtml = ob_get_contents(); + ob_end_clean(); + + return $phpInfoToHtml; +} + +/** + * check users right for a client + * + * check if the user has a right for a defined client + * + * @param integer client id + * + * @return boolean wether user has access or not + * @author Marco Jahn + */ +function system_have_perm($client) +{ + global $auth; + + if (!isset ($auth->perm['perm'])) + { + $auth->perm['perm'] = ''; + } + + $userPerm = explode(',', $auth->auth['perm']); + + if (in_array('sysadmin', $userPerm)) + { // is user sysadmin ? + return true; + } + elseif (in_array('admin['.$client.']', $userPerm)) + { // is user admin for this client ? + return true; + } + elseif (in_array('client['.$client.']', $userPerm)) + { // has user access to this client ? + return true; + } + return false; +} + +/** +* check for valid ip adress +* +* @param string ip adress +* +* @return boolean if string is a valid ip or not +*/ +function isIPv4($strHostAdress) +{ + // ip pattern needed for validation + $ipPattern = "([0-9]|1?\d\d|2[0-4]\d|25[0-5])"; + if (preg_match("/^$ipPattern\.$ipPattern\.$ipPattern\.$ipPattern?$/", $strHostAdress)) + { // ip is valid + return true; + } + return false; +} + +/** + * + * @param string $strConUrl contenido fullhtmlPath + * @param string $strBrowserUrl current browser string + * @return boolean|string status of path comparement or false + */ +function checkPathInformation($strConUrl, $strBrowserUrl) +{ + // parse url + $arrConUrl = parse_url($strConUrl); + $arrBrowserUrl = parse_url($strBrowserUrl); + + if($arrConUrl === FALSE || $arrBrowserUrl === FALSE) { + return false; + } + + if (isIPv4($arrConUrl['host'])) + { // is + if (isIPv4($arrBrowserUrl['host'])) + { // is + if (compareUrlStrings($arrConUrl, $arrBrowserUrl)) + { + return '1'; + } + + return '2'; + } else + { // isn't + $arrBrowserUrl['host'] = gethostbyname($arrBrowserUrl['host']); + if (!isIPv4($arrBrowserUrl['host'])) + { + return '3'; + } + + if (compareUrlStrings($arrConUrl, $arrBrowserUrl)) + { + return '1'; + } + + return '2'; + } + } else + { // isn't + if (isIPv4($arrBrowserUrl['host'])) + { //is + $tmpAddr = gethostbyaddr($arrBrowserUrl['host']); + $arrBrowserUrl['host'] = str_replace('-', '.', substr($tmpAddr, 0, strpos($tmpAddr, "."))); + + if (isIPv4($arrBrowserUrl['host'])) + { + return '3'; + } + + if (compareUrlStrings($arrConUrl, $arrBrowserUrl, true)) + { + return '1'; + } + + return '2'; + + } else + { // isn't + if (compareUrlStrings($arrConUrl, $arrBrowserUrl)) + { + return '1'; + } + + return '2'; + } + } +} + +/** + * checks two path informations against each other to get potential nonconformities + * + * @param array $arrConUrl + * @param array $arrBrowserUrl + * @param boolean $isIP not used, don' t know if needed + * @return boolean + */ +function compareUrlStrings($arrConUrl, $arrBrowserUrl, $isIP = false) +{ + // && $isIP == false + + // remove 'www.' if needed + if (strpos($arrConUrl['host'], 'www.') == 0 || strpos($arrBrowserUrl['host'], 'www.') == 0) + { + $arrConUrl['host'] = str_replace('www.', '', $arrConUrl); + $arrBrowserUrl['host'] = str_replace('www.', '', $arrBrowserUrl); + } + + $strConUrl = $arrConUrl['scheme'].'://'.$arrConUrl['host'].$arrConUrl['path']; + $strBrowserUrl = $arrBrowserUrl['scheme'].'://'.$arrBrowserUrl['host'].$arrBrowserUrl['path']; + + if (strcmp($strConUrl, $strBrowserUrl) != 0) + { + return false; + } + return true; +} + +/** + * writeSystemValuesOutput - get several server and Contenido settings + * + * parse system and Contenido output into a string + * + * @return string returns a string containing several server and Contenido settings + * @author Marco Jahn + */ +function writeSystemValuesOutput($usage) +{ + + global $db, $_SERVER, $cfg, $i18n, $tpl; + + /* variables to proof against each other*/ + + $contenidoFullHtml = $cfg['path']['contenido_fullhtml']; + $browserPath = $_SERVER['SERVER_PORT'] == '443' ? 'https' : 'http'; + $browserPath .= "://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; + $browserPath = substr($browserPath, 0, strrpos($browserPath, "/") + 1); + + $status = checkPathInformation($contenidoFullHtml, $browserPath); + + if ($status == 1) + { // green + $contenidoFullHtml = "".$contenidoFullHtml."
"; + $browserPath = "".$browserPath.""; + + } + elseif ($status == 2) + { // red + $contenidoFullHtml = "".$contenidoFullHtml."
"; + $browserPath = "".$browserPath.""; + + } + elseif ($status == 3) + { //orange + $contenidoFullHtml = "".$contenidoFullHtml."
"; + $browserPath = "".$browserPath.""; + + } + + /* generate sysvalue output */ + $i = 0; // array start value + // current Contenido version + $sysvalues[$i]['variable'] = i18n('Contenido version'); + $sysvalues[$i ++]['value'] = $cfg['version']; + // paths from config.php + $sysvalues[$i]['variable'] = i18n('Contenido path'); + $sysvalues[$i ++]['value'] = $cfg['path']['contenido']; + $sysvalues[$i]['variable'] = i18n('Contenido HTML path'); + $sysvalues[$i ++]['value'] = $cfg['path']['contenido_html']; + $sysvalues[$i]['variable'] = i18n('Contenido full HTML path'); + $sysvalues[$i ++]['value'] = $contenidoFullHtml; + $sysvalues[$i]['variable'] = i18n('Contenido frontend path'); + $sysvalues[$i ++]['value'] = $cfg['path']['frontend']; + $sysvalues[$i]['variable'] = i18n('Contenido PHPLIB path'); + $sysvalues[$i ++]['value'] = $cfg['path']['phplib']; + $sysvalues[$i]['variable'] = i18n('Contenido wysiwyg path'); + $sysvalues[$i ++]['value'] = $cfg['path']['wysiwyg']; + $sysvalues[$i]['variable'] = i18n('Contenido wysiwyg HTML path'); + $sysvalues[$i ++]['value'] = $cfg['path']['wysiwyg_html']; + // host name + $sysvalues[$i]['variable'] = i18n('Host name'); + $sysvalues[$i ++]['value'] = $_SERVER['HTTP_HOST']; + // Contenido browser path + $sysvalues[$i]['variable'] = i18n('Browser path'); + /* cut of file information */ + $sysvalues[$i ++]['value'] = $browserPath; + // get number of clients + $sql = "SELECT count(name) clientcount FROM ".$cfg["tab"]["clients"]; + $db->query($sql); + $db->next_record(); + $clientcount = $db->f("clientcount"); + + // get all clients and their language + $sql = "SELECT count(a.name) clientcount, + a.name clientname, + a.idclient + FROM + ".$cfg["tab"]["clients"]." a + GROUP BY a.name, + a.idclient"; + $db->query($sql); + + // create 'value' output + $db2 = new DB_ConLite; + $clientInformation = " + + + + "; + + $clientPermCount = 0; + while ($db->next_record()) + { + if (system_have_perm($db->f("idclient"))) + { + $clientlang = ""; + + // get client name + $clientName = urldecode($db->f("clientname")); + $clientInformation .= " + + "; + $clientlang = ""; + // select languages belong to a client + $sql = "SELECT c.name clientlang + FROM ".$cfg["tab"]["clients"]." a + LEFT JOIN ".$cfg["tab"]["clients_lang"]." b ON a.idclient = b.idclient + LEFT JOIN ".$cfg["tab"]["lang"]." c ON b.idlang = c.idlang + WHERE a.idclient=".Contenido_Security::toInteger($db->f("idclient"))." AND c.name IS NOT NULL"; + $db2->query($sql); + while ($db2->next_record()) + { + $clientlang .= $db2->f("clientlang").", "; + } + // cut off last "," + $clientlang = substr($clientlang, 0, strlen($clientlang) - 2); + + $clientInformation .= " + + + "; + + $sql = "SELECT frontendpath, htmlpath FROM ".$cfg["tab"]["clients"]." WHERE idclient='".Contenido_Security::toInteger($db->f("idclient"))."'"; + $db2->query($sql); + while ($db2->next_record()) + { + $clientInformation .= " + + + "; + $clientInformation .= " + + + "; + } + $clientPermCount ++; + } + + } + + if ($clientPermCount == 0) + { + $clientInformation .= " + + "; + } + + $clientInformation .= '
".i18n("client settings")."".i18n("values")."
$clientName
".i18n("language(s)")."$clientlang 
".i18n("htmlpath")."".$db2->f("htmlpath")." 
".i18n("frontendpath")."".$db2->f("frontendpath")." 
".i18n("No permissions!")."
'; + + $clientdata = i18n('Number of installed clients: ').$clientcount."
".$clientInformation; + + // client quantity and their assigned language and are they online + $sysvalues[$i]['variable'] = i18n('Client informations'); + $sysvalues[$i ++]['value'] = "$clientdata"; + // get number of users installed + $sql = "SELECT count(user_id) usercount FROM ".$cfg["tab"]["phplib_auth_user_md5"]; + $db->query($sql); + $db->next_record(); + // number of users + $sysvalues[$i]['variable'] = i18n('Number of users'); + $sysvalues[$i ++]['value'] = $db->f("usercount"); + //get number of articles + $sql = "SELECT count(idart) articlecount FROM ".$cfg["tab"]["art"]; + $db->query($sql); + $db->next_record(); + // number of articles + $sysvalues[$i]['variable'] = i18n('Number of articles'); + $sysvalues[$i ++]['value'] = $db->f("articlecount"); + // server operating system + $sysvalues[$i]['variable'] = i18n('Server operating system'); + $sysvalues[$i ++]['value'] = $_SERVER['SERVER_SOFTWARE']; + // SQL version + $sql_server_info = $db->server_info(); + $sysvalues[$i]['variable'] = i18n('PHP database extension'); + $sysvalues[$i ++]['value'] = $cfg["database_extension"]; + $sysvalues[$i]['variable'] = i18n('Database server version'); + $sysvalues[$i ++]['value'] = $sql_server_info['description']; + // php version + $sysvalues[$i]['variable'] = i18n('Installed PHP version'); + $sysvalues[$i ++]['value'] = phpversion(); + // php config values + // config values + // php safe_mode + (ini_get('safe_mode') == 1) ? $safe_mode = "".i18n('activated')."" : $safe_mode = "".i18n('deactivated').""; + $sysvalues[$i]['variable'] = "safe_mode"; + $sysvalues[$i ++]['value'] = $safe_mode; + // magig quotes GPC + (ini_get('magic_quotes_gpc') == 1) ? $magic_quotes_gpc = i18n('activated') : $magic_quotes_gpc = i18n('deactivated'); + $sysvalues[$i]['variable'] = "magic_quotes_gpc"; + $sysvalues[$i ++]['value'] = $magic_quotes_gpc; + // magic quotes runtime + (ini_get('magic_quotes_runtime') == 1) ? $magic_quotes_runtime = i18n('activated') : $magic_quotes_runtime = i18n('deactivated'); + $sysvalues[$i]['variable'] = "magic_quotes_runtime"; + $sysvalues[$i ++]['value'] = $magic_quotes_runtime; + // GPC order + $sysvalues[$i]['variable'] = "gpc_order"; + $sysvalues[$i ++]['value'] = ini_get('gpc_order'); + // memory limit + $sysvalues[$i]['variable'] = "memory_limit"; + $sysvalues[$i ++]['value'] = ini_get('memory_limit'); + // max execution time + $sysvalues[$i]['variable'] = "max_execution_time"; + $sysvalues[$i ++]['value'] = ini_get('max_execution_time'); + // disabled functions + (strlen(ini_get('disable_functions')) > 0) ? $disable_functions = "". str_replace(",", ", ", ini_get('disable_functions'))."" : $disable_functions = "".i18n('nothing disabled').""; + $sysvalues[$i]['variable'] = i18n('Disabled functions'); + $sysvalues[$i ++]['value'] = $disable_functions; + // gettext loaded + (extension_loaded('gettext') == true) ? $gettext = "".i18n('loaded')."" : $gettext = "".i18n('not loaded').""; + $sysvalues[$i]['variable'] = i18n('Gettext extension'); + $sysvalues[$i ++]['value'] = $gettext; + // sql.safe_mode + (ini_get('sql.safe_mode') == 1) ? $sql_safe_mode = "".i18n('activated')."" : $sql_safe_mode = "".i18n('deactivated').""; + $sysvalues[$i]['variable'] = "sql.safe_mode"; + $sysvalues[$i ++]['value'] = $sql_safe_mode; + // gdlib with installed features + $gdLib = array(); + $gdLib = getPhpModuleInfo($moduleName = 'gd'); + $gdLibFeatures = " + + + + "; + + foreach ($sysvalues as $key => $value) { + if (trim ($value['value']) == '') { + $sysvalues[$key]['value'] = ' '; + } + } + + foreach ($gdLib as $setting => $value) + { + $gdLibFeatures .= " + + + "; + } + $gdLibFeatures .= '
".i18n("Settings")."".i18n("Values")."
".$setting."".$value[0]."
'; + $sysvalues[$i]['variable'] = i18n('GD library'); + $sysvalues[$i ++]['value'] = $gdLibFeatures; + + // include path settings + $sysvalues[$i]['variable'] = "include_path"; + $sysvalues[$i ++]['value'] = ini_get('include_path'); + +$iRowId = 1; +$sRowBgColor2 = $sRowBgColor1 = "#fff"; +//loop array for every parameter + foreach ($sysvalues AS $sysvalue) + { + $tpl->set('d', 'VARIABLE', $sysvalue['variable']); + $tpl->set('d', 'LOCALVALUE', $sysvalue['value']); + $tpl->set('d', 'ROWID', 'sysrow_'.$iRowId); + if($iRowId % 2) { + $tpl->set('d', 'BGCOLOR', $sRowBgColor1); + } else { + $tpl->set('d', 'BGCOLOR', $sRowBgColor2); + } + $tpl->next(); + $iRowId++; + } + + /* irgendwas sinnvolles :) */ + if ($usage == 'mail') + { + return $tpl->generate($cfg['path']['templates'].$cfg['templates']['systam_variables_mailattach'], true); + } + elseif ($usage == 'output') + { + // do nothing + } + +} + +/** + * sendBugReport - send users bugreport + * + * send users bugreport + * contains 4 attachements + * (1) errorlog.txt + * (2) install.log.txt + * (3) systemvariablen.html (generaten of writeSystemValuesOutput()) + * (4) phpinfo.html (generated of phpInfoToHtml()) + * + * to avoid errors when filesize attachement (1) or (2) + * is 0kb temporarily attachements with a specified message + * will be created + * + * return value: + * - error code (0-3) + * 0) mail send successfull (no errors or missing data) + * 1) not all fields are filled out + * 2) email adress is not valid + * 3) user hasn't agreed to the declaration of consent + * + * + * @return string returns several server and Contenido settings + * @author Marco Jahn + */ +function sendBugReport() +{ + global $_POST, $notification, $cfg; + + /* will be set to another value than 0 if an error attempts */ + $mailSendError = 0; + + /* check if email is filled out */ + if (strlen($_POST['sender']) == 0) + { + $mailSendError = 1; + } + + /* check if forename is filled out */ + if (strlen($_POST['forename']) == 0) + { + $mailSendError = 1; + } + + /* check if surname is filled out */ + if (strlen($_POST['surname']) == 0) + { + $mailSendError = 1; + } + + /* check if bugreport is filled out */ + if (strlen($_POST['bugreport']) == 0) + { + $mailSendError = 1; + } + + /* check if email adress is valid */ + if (isValidMail($_POST['sender']) == false) + { + $mailSendError = 2; + } + + /* user has not agreed */ + if ($_POST['agreement'] != 'on') + { + $mailSendError = 3; + } + + if ($mailSendError == 0) + { + /* send mail */ + + /* initialize mail class */ + $mail = new PHPMailer(); + + /* set sender information */ + $mail->From = strip_tags($_POST['sender']); + $mail->FromName = strip_tags($_POST['forename']." ".$_POST['surname']); + + /* set recipient */ + $mail->AddAddress($cfg['bugreport']['targetemail'], "Bugreport recipient"); + + /* set mail function to use */ + $mail->Mailer = "mail"; //use php mail function + + /* generate subject & body */ + $mail->Subject = "Bugreport"; + $mail->Body = "Fehlerbereich: ".$_POST['selectarea']."

".nl2br(strip_tags($_POST['bugreport'])); + $mail->AltBody = "Fehlerbereich: ".$_POST['selectarea']."\n\n".strip_tags($_POST['bugreport']); + + /* add attachements */ + if ($_POST['errorlog'] == 'on') + { + if (filesize($cfg['path']['contenido']."logs/errorlog.txt") > 0) + { //filesize > 0 send alternative attachement + $mail->AddAttachment($cfg['path']['contenido']."logs/errorlog.txt", "errorlog.txt"); + } else + { + $mail->AddStringAttachment("No error log entries found\n", "errorlog.txt"); + } + } + + if ($_POST['upgradeerrorlog'] == 'on') + { + if (filesize($cfg['path']['contenido']."logs/install.log.txt") > 0) + { //filesize > 0 send alternative attachement + $mail->AddAttachment($cfg['path']['contenido']."logs/install.log.txt", "install.log.txt"); + } else + { + $mail->AddStringAttachment("No install error log entries found\n", "install.log.txt"); + } + } + + if ($_POST['sysvalues'] == 'on') + { + //send sysvalue output + $mail->AddStringAttachment(writeSystemValuesOutput($usage = 'mail'), "systemvariables.html"); + } + + if ($_POST['phpinfo'] == 'on') + { + //send phpinfo output + $mail->AddStringAttachment(phpInfoToHtml(), "phpinfo.html"); + } + + if (!$mail->Send()) + { + $tmp_notification = $notification->returnNotification("error", i18n("an error occured while sending your bug report! Please try again")); + } else + { + $tmp_notification = $notification->returnNotification("info", i18n("bug report forwarded")); + } + } + elseif ($mailSendError == 1) + { + /* user should fill all fields */ + $tmp_notification = $notification->returnNotification("warning", i18n("please fill out all mandatory fields")); + } + elseif ($mailSendError == 2) + { /* email adress is not valid */ + $tmp_notification = $notification->returnNotification("warning", i18n("please enter a valid E-Mail adress")); + } + elseif ($mailSendError == 3) + { /* user hasn't agreed to the declaration of consent */ + $tmp_notification = $notification->returnNotification("warning", i18n("you must agree the declaration of consent")); + } + return $mailSendError."||".$tmp_notification; +} +?> diff --git a/branches/conlite20/conlite/includes/functions.tpl.php b/branches/conlite20/conlite/includes/functions.tpl.php new file mode 100644 index 0000000..bd45df7 --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.tpl.php @@ -0,0 +1,830 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-21 + * modified 2008-06-26, Frederic Schneider, add security fix + * modified 2008-06-30 timo.trautmann added fix module settings were also copied in function tplDuplicateTemplate + * modified 2009-01-08, Timo Trautmann fixed bug: Changes in Head Containers in visualedit were not stored + * + * $Id: functions.tpl.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude ("includes", "functions.con.php"); + +/** + * Edit or create a new Template + * + * @author Olaf Niemann + * @author Jan Lengowski + * @copyright four for business AG + */ +function tplEditTemplate($changelayout, $idtpl, $name, $description, $idlay, $c, $default) +{ + + global $db; + global $sess; + global $auth; + global $client; + global $cfg; + global $area_tree; + global $perm; + + $db2= new DB_ConLite; + + $date = date("YmdHis"); + $author = "".$auth->auth["uname"].""; + + //******** entry in 'tpl'-table *************** + set_magic_quotes_gpc($name); + set_magic_quotes_gpc($description); + + if (!$idtpl) { + + $idtpl = $db->nextid($cfg["tab"]["tpl"]); + $idtplcfg = $db->nextid($cfg["tab"]["tpl_conf"]); + + /* Insert new entry in the + Template Conf table */ + $sql = "INSERT INTO ".$cfg["tab"]["tpl_conf"]." + (idtplcfg, idtpl, author) VALUES + ('".Contenido_Security::toInteger($idtplcfg)."', '".Contenido_Security::toInteger($idtpl)."', '".Contenido_Security::escapeDB($auth->auth["uname"], $db)."')"; + + $db->query($sql); + + /* Insert new entry in the + Template table */ + $sql = "INSERT INTO ".$cfg["tab"]["tpl"]." + (idtpl, idtplcfg, name, description, deletable, idlay, idclient, author, created, lastmodified) VALUES + ('".Contenido_Security::toInteger($idtpl)."', '".Contenido_Security::toInteger($idtplcfg)."', '".Contenido_Security::escapeDB($name, $db)."', '".Contenido_Security::escapeDB($description, $db)."', + '1', '".Contenido_Security::toInteger($idlay)."', '".Contenido_Security::toInteger($client)."', '".Contenido_Security::escapeDB($author, $db)."', '".Contenido_Security::escapeDB($date, $db)."', + '".Contenido_Security::escapeDB($date, $db)."')"; + + $db->query($sql); + + // set correct rights for element + cInclude ("includes", "functions.rights.php"); + createRightsForElement("tpl", $idtpl); + + } else { + + /* Update */ + $sql = "UPDATE ".$cfg["tab"]["tpl"]." SET name='".Contenido_Security::escapeDB($name, $db)."', description='".Contenido_Security::escapeDB($description, $db)."', idlay='".Contenido_Security::toInteger($idlay)."', + author='".Contenido_Security::escapeDB($author, $db)."', lastmodified='".Contenido_Security::escapeDB($date, $db)."' WHERE idtpl='".Contenido_Security::toInteger($idtpl)."'"; + $db->query($sql); + + if (is_array($c)) { + + /* Delete all container assigned to this template */ + $sql = "DELETE FROM ".$cfg["tab"]["container"]." WHERE idtpl='".Contenido_Security::toInteger($idtpl, $db)."'"; + $db->query($sql); + + foreach($c as $idcontainer => $dummyval) { + + $sql = "INSERT INTO ".$cfg["tab"]["container"]." (idcontainer, idtpl, number, idmod) VALUES "; + $sql .= "("; + $sql .= "'".Contenido_Security::toInteger($db->nextid($cfg["tab"]["container"]))."', "; + $sql .= "'".Contenido_Security::toInteger($idtpl)."', "; + $sql .= "'".Contenido_Security::toInteger($idcontainer)."', "; + $sql .= "'".Contenido_Security::toInteger($c[$idcontainer])."'"; + $sql .= ") "; + $db->query($sql); + + } + } + + /* Generate code */ + conGenerateCodeForAllartsUsingTemplate($idtpl); + + } + + if ($default == 1) + { + $sql = "UPDATE ".$cfg["tab"]["tpl"]." SET defaulttemplate = '0' WHERE idclient = '".Contenido_Security::toInteger($client)."'"; + $db->query($sql); + + $sql = "UPDATE ".$cfg["tab"]["tpl"]." SET defaulttemplate = '1' WHERE idtpl = '".Contenido_Security::toInteger($idtpl)."' AND idclient = '".Contenido_Security::toInteger($client)."'"; + $db->query($sql); + } else { + $sql = "UPDATE ".$cfg["tab"]["tpl"]." SET defaulttemplate = '0' WHERE idtpl = '".Contenido_Security::toInteger($idtpl)."' AND idclient = '".Contenido_Security::toInteger($client)."'"; + $db->query($sql); + } + + + //******** if layout is changed stay at 'tpl_edit' otherwise go to 'tpl' + if ($changelayout != 1) { + $url = $sess->url("main.php?area=tpl_edit&idtpl=$idtpl&frame=4"); + header("location: $url"); + } + + return $idtpl; + +} + +/** + * Delete a template + * + * @param int $idtpl ID of the template to duplicate + * + * @return $new_idtpl ID of the duplicated template + * @author Olaf Niemann + * @author Jan Lengowski + * @copyright four for business AG + */ +function tplDeleteTemplate($idtpl) { + + global $db, $client, $lang, $cfg, $area_tree, $perm; + + $sql = "DELETE FROM ".$cfg["tab"]["tpl"]." WHERE idtpl='".Contenido_Security::toInteger($idtpl)."'"; + $db->query($sql); + + /* JL 160603 : Delete all unnecessary entries */ + + $sql = "DELETE FROM ".$cfg["tab"]["container"]." WHERE idtpl = '".Contenido_Security::toInteger($idtpl)."'"; + $db->query($sql); + + $idsToDelete = array(); + $sql = "SELECT idtplcfg FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtpl = '".Contenido_Security::toInteger($idtpl)."'"; + $db->query($sql); + while ( $db->next_record() ) { + $idsToDelete[] = $db->f("idtplcfg"); + } + + foreach ( $idsToDelete as $id ) { + + $sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($id)."'"; + $db->query($sql); + + $sql = "DELETE FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg = '".Contenido_Security::toInteger($id)."'"; + $db->query($sql); + + } + + cInclude ("includes", "functions.rights.php"); + deleteRightsForElement("tpl", $idtpl); + +} + + +/** + * Browse a specific layout for containers + * + * @param int $idtpl Layout number to browse + * + * @return string &-seperated String of all containers + * + * @author Jan Lengowski + * @copyright four for business AG + */ +function tplBrowseLayoutForContainers($idlay, $raw_code = NULL) { + global $db; + global $cfg; + global $containerinf; + + if(is_null($raw_code) || empty($raw_code)) { + $sql = "SELECT code FROM ".$cfg["tab"]["lay"]." WHERE idlay='".Contenido_Security::toInteger($idlay)."'"; + $db->query($sql); + $db->next_record(); + $code = $db->f("code"); + } else { + $code = $raw_code; + } + + preg_match_all ("/CMS_CONTAINER\[([0-9]*)\]/", $code, $a_container); + $iPosBody = stripos($code, ''); + $sCodeBeforeHeader = substr($code, 0, $iPosBody); + + foreach ($a_container[1] as $value) { + if (preg_match("/CMS_CONTAINER\[$value\]/", $sCodeBeforeHeader)) { + $containerinf[$idlay][$value]["is_body"] = false; + } else { + $containerinf[$idlay][$value]["is_body"] = true; + } + } + + if (is_array($containerinf[$idlay])) { + foreach ($containerinf[$idlay] as $key => $value) { + $a_container[1][] = $key; + } + } + + $container = Array(); + + foreach ($a_container[1] as $value) { + if (!in_array($value, $container)) { + $container[] = $value; + } + } + + asort($container); + + if (is_array($container)) { + $tmp_returnstring = implode("&",$container); + } + return $tmp_returnstring; +} + +/** + * Retrieve the container name + * + * @param int $idtpl Layout number to browse + * @param int $container Container number + * + * @return string Container name + */ +function tplGetContainerName($idlay, $container) +{ + global $db; + global $cfg; + global $containerinf; + + if (is_array($containerinf[$idlay])) + { + if (array_key_exists($container, $containerinf[$idlay])) + { + return $containerinf[$idlay][$container]["name"]; + } + } +} + +/** + * Retrieve the container mode + * + * @param int $idtpl Layout number to browse + * @param int $container Container number + * + * @return string Container name + */ +function tplGetContainerMode($idlay, $container) +{ + global $db; + global $cfg; + global $containerinf; + + if (is_array($containerinf[$idlay])) + { + if (array_key_exists($container, $containerinf[$idlay])) + { + return $containerinf[$idlay][$container]["mode"]; + } + } +} + +/** + * Retrieve the allowed container types + * + * @param int $idtpl Layout number to browse + * @param int $container Container number + * + * @return array Allowed container types + */ +function tplGetContainerTypes($idlay, $container) +{ + global $db; + global $cfg; + global $containerinf; + + if (is_array($containerinf[$idlay])) + { + if (array_key_exists($container, $containerinf[$idlay])) + { + if ($containerinf[$idlay][$container]["types"] != "") + { + $list = explode(",",$containerinf[$idlay][$container]["types"]); + + foreach ($list as $key => $value) + { + $list[$key] = trim($value); + } + return $list; + } + } + } +} + +/** + * Retrieve the default module + * + * @param int $idtpl Layout number to browse + * @param int $container Container number + * + * @return array Allowed container types + */ +function tplGetContainerDefault($idlay, $container) +{ + global $db; + global $cfg; + global $containerinf; + + if (is_array($containerinf[$idlay])) + { + if (array_key_exists($container, $containerinf[$idlay])) + { + return $containerinf[$idlay][$container]["default"]; + } + } +} + +/** + * Preparse the layout for caching purposes + * + * @param int $idtpl Layout number to browse + * + * @return none + */ +function tplPreparseLayout ($idlay, $raw_code = NULL) { + global $containerinf; + global $db; + global $cfg; + + if(is_null($raw_code) || empty($raw_code)) { + $sql = "SELECT code FROM ".$cfg["tab"]["lay"]." WHERE idlay='".Contenido_Security::toInteger($idlay)."'"; + $db->query($sql); + $db->next_record(); + $code = $db->f("code"); + } else { + $code = $raw_code; + } + + $parser = new HtmlParser($code); + $bIsBody = false; + while ($parser->parse()) + { + if (strtolower($parser->iNodeName) == 'body') { + $bIsBody = true; + } + + if ($parser->iNodeName == "container" && $parser->iNodeType == NODE_TYPE_ELEMENT) + { + $idcontainer = $parser->iNodeAttributes["id"]; + + $mode = $parser->iNodeAttributes["mode"]; + + if ($mode == "") + { + $mode = "optional"; + } + + $containerinf[$idlay][$idcontainer]["name"] = $parser->iNodeAttributes["name"]; + $containerinf[$idlay][$idcontainer]["mode"] = $mode; + $containerinf[$idlay][$idcontainer]["default"] = $parser->iNodeAttributes["default"]; + $containerinf[$idlay][$idcontainer]["types"] = $parser->iNodeAttributes["types"]; + $containerinf[$idlay][$idcontainer]["is_body"] = $bIsBody; + } + } +} + +/** + * Duplicate a template + * + * @param int $idtpl ID of the template to duplicate + * + * @return $new_idtpl ID of the duplicated template + * + * @author Jan Lengowski + * @copyright four for business AG + */ +function tplDuplicateTemplate($idtpl) { + + global $db, $client, $lang, $cfg, $sess, $auth; + + $db2 = new DB_ConLite; + + $sql = "SELECT + * + FROM + ".$cfg["tab"]["tpl"]." + WHERE + idtpl = '".Contenido_Security::toInteger($idtpl)."'"; + + $db->query($sql); + $db->next_record(); + + $idclient = $db->f("idclient"); + $idlay = $db->f("idlay"); + $new_idtpl = $db->nextid($cfg["tab"]["tpl"]); + //modified (added) 2008-06-30 timo.trautmann added fix module settings were also copied + $idtpl_conf = $db->f("idtplcfg"); + if($idtpl_conf) { + $new_idtpl_conf = $db->nextid($cfg["tab"]["tpl_conf"]); + } + //modified (added) 2008-06-30 end + $name = sprintf(i18n("%s (Copy)"), $db->f("name")); + $descr = $db->f("description"); + $author = $auth->auth["uname"]; + $created = time(); + $lastmod = time(); + + //modified (added) 2008-06-30 : idtplcfg -> $new_idtpl + $sql = "INSERT INTO + ".$cfg["tab"]["tpl"]." + (idclient, idlay, idtpl, ".($idtpl_conf?'idtplcfg,':'')." name, description, deletable,author, created, lastmodified) + VALUES + ('".Contenido_Security::toInteger($idclient)."', '".Contenido_Security::toInteger($idlay)."', '".Contenido_Security::toInteger($new_idtpl)."', ".($idtpl_conf?"'".Contenido_Security::toInteger($new_idtpl_conf)."', ":'')." '".Contenido_Security::escapeDB($name, $db)."', + '".Contenido_Security::escapeDB($descr, $db)."', '1', '".Contenido_Security::escapeDB($author, $db)."', '".Contenido_Security::escapeDB($created, $db)."', '".Contenido_Security::escapeDB($lastmod, $db)."')"; + $db->query($sql); + + $a_containers = array(); + + $sql = "SELECT + * + FROM + ".$cfg["tab"]["container"]." + WHERE + idtpl = '".Contenido_Security::toInteger($idtpl)."' + ORDER BY + number"; + + $db->query($sql); + + while ($db->next_record()) { + $a_containers[$db->f("number")] = $db->f("idmod"); + } + + foreach ($a_containers as $key => $value) { + + $nextid = $db->nextid($cfg["tab"]["container"]); + + $sql = "INSERT INTO ".$cfg["tab"]["container"]." + (idcontainer, idtpl, number, idmod) VALUES ('".Contenido_Security::toInteger($nextid)."', '".Contenido_Security::toInteger($new_idtpl)."', '".Contenido_Security::toInteger($key)."', '".Contenido_Security::toInteger($value)."')"; + + $db->query($sql); + + } + + //modified (added) 2008-06-30 timo.trautmann added fix module settings were also copied + if($idtpl_conf) { + $a_container_cfg = array(); + $sql = "SELECT + * + FROM + ".$cfg["tab"]["container_conf"]." + WHERE + idtplcfg = '".Contenido_Security::toInteger($idtpl_conf)."' + ORDER BY + number"; + + $db->query($sql); + + while ($db->next_record()) { + $a_container_cfg[$db->f("number")] = $db->f("container"); + } + + foreach ($a_container_cfg as $key => $value) { + + $nextid = $db->nextid($cfg["tab"]["container_conf"]); + + $sql = "INSERT INTO ".$cfg["tab"]["container_conf"]." + (idcontainerc, idtplcfg, number, container) VALUES ('".Contenido_Security::toInteger($nextid)."', '".Contenido_Security::toInteger($new_idtpl_conf)."', '".Contenido_Security::escapeDB($key, $db)."', '".Contenido_Security::escapeDB($value, $db)."')"; + + $db->query($sql); + + } + } + //modified (added) 2008-06-30 end + + cInclude ("includes", "functions.rights.php"); + copyRightsForElement("tpl", $idtpl, $new_idtpl); + + return $new_idtpl; + +} + +/** + * Checks if a template is in use + * + * @param int $idtpl Template ID + * + * @return bool is template in use + * + * @author Jan Lengowski + * @copyright four for business AG + * + * modified Munkh-Ulzii Balidar, improved the sql query without while loop + */ +function tplIsTemplateInUse($idtpl) { + + global $cfg, $client, $lang; + + $db = new DB_ConLite; + // Check categorys + $sql = "SELECT + b.idcatlang, b.name, b.idlang, b.idcat + FROM + ".$cfg["tab"]["cat"]." AS a, + ".$cfg["tab"]["cat_lang"]." AS b + WHERE + a.idclient = '".Contenido_Security::toInteger($client)."' AND + a.idcat = b.idcat AND + b.idtplcfg IN (SELECT idtplcfg FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtpl = '".$idtpl."') + ORDER BY b.idlang ASC, b.name ASC "; + $db->query($sql); + if ($db->Errno == '' && $db->num_rows() > 0) { + return true; + } + + // Check articles + $sql = "SELECT + b.idartlang, b.title, b.idlang, b.idart + FROM + ".$cfg["tab"]["art"]." AS a, + ".$cfg["tab"]["art_lang"]." AS b + WHERE + a.idclient = '".Contenido_Security::toInteger($client)."' AND + a.idart = b.idart AND + b.idtplcfg IN (SELECT idtplcfg FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtpl = '".$idtpl."') + ORDER BY b.idlang ASC, b.title ASC "; + + $db->query($sql); + + if ($db->Errno == '' && $db->num_rows() > 0) { + return true; + } + + return false; + +} + +/** + * Get used datas if a template is in use + * + * @param int $idtpl Template ID + * + * @return array - category name, article name + * + * @author Munkh-Ulzii Balidar + * @copyright four for business AG + */ +function tplGetInUsedData($idtpl) { + + global $cfg, $client, $lang; + + $db = new DB_ConLite; + + $aUsedData = array(); + + // Check categorys + $sql = "SELECT + b.idcatlang, b.name, b.idlang, b.idcat + FROM + ".$cfg["tab"]["cat"]." AS a, + ".$cfg["tab"]["cat_lang"]." AS b + WHERE + a.idclient = '".Contenido_Security::toInteger($client)."' AND + a.idcat = b.idcat AND + b.idtplcfg IN (SELECT idtplcfg FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtpl = '".$idtpl."') + ORDER BY b.idlang ASC, b.name ASC "; + $db->query($sql); + if ($db->Errno == 0 && $db->num_rows() > 0) { + while ($db->next_record()) { + $aUsedData['cat'][] = array( + 'name' => $db->f('name'), + 'lang' => $db->f('idlang'), + 'idcat' => $db->f('idcat'), + ); + } + } + + // Check articles + $sql = "SELECT + b.idartlang, b.title, b.idlang, b.idart + FROM + ".$cfg["tab"]["art"]." AS a, + ".$cfg["tab"]["art_lang"]." AS b + WHERE + a.idclient = '".Contenido_Security::toInteger($client)."' AND + a.idart = b.idart AND + b.idtplcfg IN (SELECT idtplcfg FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtpl = '".$idtpl."') + ORDER BY b.idlang ASC, b.title ASC "; + + $db->query($sql); + + if ($db->Errno == '' && $db->num_rows() > 0) { + while ($db->next_record()) { + $aUsedData['art'][] = array( + 'title' => $db->f('title'), + 'lang' => $db->f('idlang'), + 'idart' => $db->f('idart'), + ); + } + } + + return $aUsedData; + +} + +/** + * Copies a complete template configuration + * + * @param int $idtplcfg Template Configuration ID + * + * @return int new template configuration ID + * + */ +function tplcfgDuplicate ($idtplcfg) +{ + global $cfg; + + $db = new DB_ConLite; + $db2 = new DB_ConLite; + + $sql = "SELECT + idtpl, status, author, created, lastmodified + FROM + ".$cfg["tab"]["tpl_conf"]." + WHERE + idtplcfg = '".Contenido_Security::toInteger($idtplcfg)."'"; + + $db->query($sql); + + if ($db->next_record()) + { + $newidtplcfg = $db2->nextid($cfg["tab"]["tpl_conf"]); + $idtpl = $db->f("idtpl"); + $status = $db->f("status"); + $author = $db->f("author"); + $created = $db->f("created"); + $lastmodified = $db->f("lastmodified"); + + $sql = "INSERT INTO + ".$cfg["tab"]["tpl_conf"]." + (idtplcfg, idtpl, status, author, created, lastmodified) + VALUES + ('".Contenido_Security::toInteger($newidtplcfg)."', '".Contenido_Security::toInteger($idtpl)."', '".Contenido_Security::toInteger($status)."', '".Contenido_Security::escapeDB($author, $db2)."', + '".Contenido_Security::escapeDB($created, $db2)."', '".Contenido_Security::escapeDB($lastmodified, $db2)."')"; + + $db2->query($sql); + + /* Copy container configuration */ + $sql = "SELECT + number, container + FROM + ".$cfg["tab"]["container_conf"]." + WHERE idtplcfg = '".Contenido_Security::toInteger($idtplcfg)."'"; + + $db->query($sql); + + while ($db->next_record()) + { + $newidcontainerc = $db2->nextid($cfg["tab"]["container_conf"]); + $number = $db->f("number"); + $container = $db->f("container"); + + $sql = "INSERT INTO + ".$cfg["tab"]["container_conf"]." + (idcontainerc, idtplcfg, number, container) + VALUES + ('".Contenido_Security::toInteger($newidcontainerc)."', '".Contenido_Security::toInteger($newidtplcfg)."', '".Contenido_Security::toInteger($number)."', '".Contenido_Security::escapeDB($container, $db2)."')"; + $db2->query($sql); + } + } + + return ($newidtplcfg); + +} + +/* + * tplAutoFillModules + * + * This function fills in modules automatically using this logic: + * + * - If the container mode is fixed, insert the named module (if exists) + * - If the container mode is mandatory, insert the "default" module (if exists) + * + * TODO: The default module is only inserted in mandatory mode if the container + * is empty. We need a better logic for handling "changes". + */ + +function tplAutoFillModules ($idtpl) +{ + global $cfg; + global $db_autofill; + global $containerinf; + global $_autoFillcontainerCache; + + if (!is_object($db_autofill)) + { + $db_autofill = new DB_ConLite; + } + + $sql = "SELECT idlay FROM ".$cfg["tab"]["tpl"]." WHERE idtpl = '".Contenido_Security::toInteger($idtpl)."'"; + $db_autofill->query($sql); + + if (!$db_autofill->next_record()) + { + return false; + } + + $idlay = $db_autofill->f("idlay"); + + if (!(is_array($containerinf) && array_key_exists($idlay, $containerinf) && array_key_exists($idlay, $_autoFillcontainerCache))) + { + tplPreparseLayout($idlay); + $_autoFillcontainerCache[$idlay] = tplBrowseLayoutForContainers($idlay); + } + + $a_container = explode("&",$_autoFillcontainerCache[$idlay]); + + foreach ($a_container as $container) + { + switch ($containerinf[$idlay][$container]["mode"]) + { + /* Fixed mode */ + case "fixed": + if ($containerinf[$idlay][$container]["default"] != "") + { + $sql = "SELECT idmod FROM ".$cfg["tab"]["mod"] + ." WHERE name = '". + Contenido_Security::escapeDB($containerinf[$idlay][$container]["default"], $db_autofill)."'"; + + $db_autofill->query($sql); + + if ($db_autofill->next_record()) + { + $idmod = $db_autofill->f("idmod"); + + + $sql = "SELECT idcontainer FROM ".$cfg["tab"]["container"]." WHERE idtpl = '".Contenido_Security::toInteger($idtpl)."' AND number = '".Contenido_Security::toInteger($container)."'"; + + $db_autofill->query($sql); + + if ($db_autofill->next_record()) + { + $sql = "UPDATE ".$cfg["tab"]["container"]. + " SET idmod = '".Contenido_Security::toInteger($idmod)."' WHERE idtpl = '".Contenido_Security::toInteger($idtpl)."'". + " AND number = '".Contenido_Security::toInteger($container)."' AND ". + " idcontainer = '".Contenido_Security::toInteger($db_autofill->f("idcontainer"))."'"; + $db_autofill->query($sql); + } else { + $sql = "INSERT INTO ".$cfg["tab"]["container"]. + " (idcontainer, idtpl, number, idmod) ". + " VALUES ('".$db_autofill->nextid($cfg["tab"]["container"])."', ". + " '$idtpl', '$container', '$idmod')"; + $db_autofill->query($sql); + } + } + } + + + case "mandatory": + + if ($containerinf[$idlay][$container]["default"] != "") + { + $sql = "SELECT idmod FROM ".$cfg["tab"]["mod"] + ." WHERE name = '". + Contenido_Security::escapeDB($containerinf[$idlay][$container]["default"], $db)."'"; + + $db_autofill->query($sql); + + if ($db_autofill->next_record()) + { + $idmod = $db_autofill->f("idmod"); + + + $sql = "SELECT idcontainer, idmod FROM ".$cfg["tab"]["container"] + ." WHERE idtpl = '".Contenido_Security::toInteger($idtpl)."' AND number = '".Contenido_Security::toInteger($container)."'"; + + $db_autofill->query($sql); + + if ($db_autofill->next_record()) + { + + } else { + $sql = "INSERT INTO ".$cfg["tab"]["container"]. + " (idcontainer, idtpl, number, idmod) ". + " VALUES ('".Contenido_Security::toInteger($db_autofill->nextid($cfg["tab"]["container"]))."', ". + " '".Contenido_Security::toInteger($idtpl)."', '".Contenido_Security::toInteger($container)."', '".Contenido_Security::toInteger($idmod)."')"; + $db_autofill->query($sql); + } + } + } + } + } + +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/functions.upl.php b/branches/conlite20/conlite/includes/functions.upl.php new file mode 100644 index 0000000..bee813e --- /dev/null +++ b/branches/conlite20/conlite/includes/functions.upl.php @@ -0,0 +1,894 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-12-28 + * modified 2008-06-26, Frederic Schneider, add security fix + * modified 2008-11-27, Andreas Lindner, add possibility to define additional chars as allowed in file / dir names + * modified 2009-03-16, Ingo van Peeren, fixed some sql-statements and a missing parameter in uplRenameDirectory() + * modified 2009-10-22, OliverL, fixed uplHasFiles is only one file in directory you can delete Directory + * modified 2009-10-29, Murat Purc, replaced deprecated functions (PHP 5.3 ready) and usage of is_dbfs() + * + * $Id: functions.upl.php 350 2015-09-24 11:52:45Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * Function reduces long path names and creates a dynamic tooltipp which shows + * the full path name on mouseover + * + * @author Timo Trautmann (4fb) + * @param string $sDisplayPath - original filepath + * @param int $iLimit - limit of chars which were displayed directly. If the path + * string is shorter there will be no tooltipp + * @return string - string, which contains short path name and tooltipp if neccessary + */ +function generateDisplayFilePath($sDisplayPath, $iLimit) { + $sDisplayPath = (string) trim($sDisplayPath); + $iLimit = (int) $iLimit; + if (strlen($sDisplayPath) > $iLimit) { + $sDisplayPathShort = capiStrTrimHard($sDisplayPath, $iLimit); + + $sTooltippString = ''; + $iCharcount = 0; + + $aPathFragments = explode('/', $sDisplayPath); + + foreach ($aPathFragments as $sFragment) { + if ($sFragment != '') { + if (strlen($sFragment) > ($iLimit - 5)) { + $sFragment = capiStrTrimHard($sFragment, $iLimit); + } + + if ($iCharcount + strlen($sFragment) + 1 > $iLimit) { + $sTooltippString .= '
' . $sFragment . '/'; + $iCharcount = strlen($sFragment); + } else { + $iCharcount = $iCharcount + 1 + strlen($sFragment); + $sTooltippString .= $sFragment . '/'; + } + } + } + + $sDisplayPath = '' . $sDisplayPathShort . ''; + } + return $sDisplayPath; +} + +function uplDirectoryListRecursive($currentdir, $startdir = NULL, $files = array(), $depth = -1, $pathstring = "") { + $depth++; + + $unsorted_files = array(); + + if (chdir($currentdir) == false) { + return; + } + + // remember where we started from + if (!$startdir) { + $startdir = $currentdir; + } + $d = opendir("."); + + //list the files in the dir + while ($file = readdir($d)) { + if ($file != ".." && $file != ".") { + if (is_dir($file)) { + $unsorted_files[] = $file; + } else { + + } + } + } + if (is_array($unsorted_files)) + sort($unsorted_files); + $sorted_files = $unsorted_files; + + if (is_array($sorted_files)) { + foreach ($sorted_files as $file) { + if ($file != ".." && $file != ".") { + + if ((filetype(getcwd() . "/" . $file) == "dir") && + (opendir(getcwd() . "/" . $file) !== false)) { + $a_file['name'] = $file; + $a_file['depth'] = $depth; + $a_file['pathstring'] = $pathstring . $file . '/'; + ; + + $files[] = $a_file; + // If $file is a directory take a look inside + $files = uplDirectoryListRecursive(getcwd() . '/' . $file, getcwd(), $files, $depth, $a_file['pathstring']); + } else { + // If $ file is not a directory then do nothing + } + } + } + } + + closedir($d); + chdir($startdir); + return $files; +} + +function upldelete($path, $files) { + global $cfgClient, $client, $con_cfg, $db, $cfg; + + $path = $cfgClient[$client]['upl']['path'] . $path; + + if (!is_array($files)) { + $tmp[] = $files; + unset($files); + $files = $tmp; + } + + $ArrayCount = count($files); + for ($i = 0; $i < $ArrayCount; $i++) { + if (is_dir($path . urldecode($files[$i]))) { + uplRecursiveRmDirIfEmpty($path . urldecode($files[$i])); + + $sql = "DELETE FROM " . $cfg["tab"]["upl"] . " WHERE dirname='" . Contenido_Security::escapeDB($files[$i], $db) . "/'"; + $db->query($sql); + } else { + if (file_exists($cfgClient[$client]["path"]["frontend"] . $con_cfg['PathFrontendTmp'] . urldecode($files[$i]))) { + unlink($cfgClient[$client]["path"]["frontend"] . $con_cfg['PathFrontendTmp'] . urldecode($files[$i])); + } + + $file_name = urldecode($files[$i]); + $sql_dirname = str_replace($cfgClient[$client]['upl']['path'], '', $path); + + unlink($path . $file_name); + + $sql = "SELECT idupl + FROM " . $cfg["tab"]["upl"] . " + WHERE + idclient='" . Contenido_Security::toInteger($client) . "' + AND + filename='" . Contenido_Security::toInteger($file_name) . "' + AND + dirname='" . Contenido_Security::escapeDB($sql_dirname) . "'"; + $db->query($sql); + if ($db->next_record()) { + $sql = "DELETE FROM " . $cfg["tab"]["upl"] . " WHERE idupl='" . Contenido_Security::toInteger($db->f("idupl")) . "'"; + $db->query($sql); + } + } + } +} + +function uplRecursiveRmDirIfEmpty($dir) { + + global $notification; + + if (!is_dir($dir)) { + return 0; + } + $directory = @opendir($dir); + + if (!$directory) { + return false; + } + readdir($directory); + + while (false !== ($dir_entry = readdir($directory))) { + if ($dir_entry != "." && $dir_entry != "..") { + if (is_dir($dir . "/" . $dir_entry)) { + uplrecursivermdir($dir . "/" . $dir_entry); + } else { + $notification->displayNotification("warning", "Im Verzeichnis $dir sind noch Dateien vorhanden. Löschen nicht möglich."); + } + } + } + closedir($directory); + unset($directory); + if (@rmdir($dir)) { + return 1; + } else { + return 0; + } +} + +function uplHasFiles($dir) { + global $client, $cfgClient; + + $directory = @opendir($cfgClient[$client]["upl"]["path"] . $dir); + + if (!$directory) { + return true; + } + + while (false !== ($dir_entry = readdir($directory))) { + if ($dir_entry != "." && $dir_entry != "..") { + closedir($directory); + return (true); + } + } + closedir($directory); + unset($directory); + + return false; +} + +function uplHasSubdirs($dir) { + global $client, $cfgClient; + + $directory = @opendir($cfgClient[$client]["upl"]["path"] . $dir); + + if (!$directory) { + return true; + } + + readdir($directory); + + $ret = false; + + while (false !== ($dir_entry = readdir($directory))) { + if ($dir_entry != "." && $dir_entry != "..") { + if (is_dir($cfgClient[$client]["upl"]["path"] . $dir . $dir_entry)) { + closedir($directory); + return true; + } + } + } + + return ($ret); +} + +/** + * uplSyncDirectory ($path) + * Sync database contents with directory + * + * @param string $path Specifies the path to scan + */ +function uplSyncDirectory($path) { + global $cfgClient, $client, $cfg, $db; + + if (is_dbfs($path)) { + return uplSyncDirectoryDBFS($path); + } + + $uploads = new UploadCollection; + $properties = new PropertyCollection; + + /* Read all files in a specific directory */ + $dir = $cfgClient[$client]['upl']['path'] . $path; + + $olddir = getcwd(); + + @chdir($dir); + $dirhandle = @opendir($dir); + + /* Whoops, probably failed to open. Return to the caller, but clean up stuff first. */ + if (!$dirhandle) { + $uploads->select("dirname = '$path' AND idclient = '$client'"); + + while ($upload = $uploads->next()) { + if (!file_exists($cfgClient[$client]["upl"]["path"] . $upload->get("dirname") . $upload->get("filename"))) { + $uploads->delete($upload->get("idupl")); + } + } + + // A click on "Upload" (root) would result in path = "" and this will result in LIKE '%' = everything + // So, we have to exclude dbfs-files, as they "don't exist" (-> file_exists) + $properties->select("idclient = '$client' AND itemtype='upload' AND type='file' AND itemid LIKE '" . $path . "%' AND itemid NOT LIKE 'dbfs%'"); + + while ($property = $properties->next()) { + if (!file_exists($cfgClient[$client]["upl"]["path"] . $property->get("itemid"))) { + $properties->delete($property->get("idproperty")); + } + } + + chdir($olddir); + return; + } + + /* Put all the files into the $files array */ + while ($file = readdir($dirhandle)) { + if ($file != "." && $file != "..") { + if (is_file($file)) { + $uploads->sync($path, $file); + } + } + } + + $uploads->select("dirname = '$path' AND idclient = '$client'"); + + while ($upload = $uploads->next()) { + if (!file_exists($cfgClient[$client]["upl"]["path"] . $upload->get("dirname") . $upload->get("filename"))) { + $uploads->delete($upload->get("idupl")); + } + } + + // A click on "Upload" (root) would result in path = "" and this will result in LIKE '%' = everything + // So, we have to exclude dbfs-files, as they "don't exist" (-> file_exists) + $properties->select("idclient = '$client' AND itemtype='upload' AND type='file' AND itemid LIKE '" . $path . "%' AND itemid NOT LIKE 'dbfs%'"); + + while ($property = $properties->next()) { + if (!file_exists($cfgClient[$client]["upl"]["path"] . $property->get("itemid"))) { + $properties->delete($property->get("idproperty")); + } + } + + chdir($olddir); +} + +/** + * uplSyncDirectoryDBFS ($path) + * Sync database contents with DBFS + * + * @param string $path Specifies the path to scan + */ +function uplSyncDirectoryDBFS($path) { + global $cfgClient, $client, $cfg, $db; + + $uploads = new UploadCollection; + $properties = new PropertyCollection; + $dbfs = new DBFSCollection; + + if ($dbfs->dir_exists($path)) { + $strippath = $dbfs->strip_path($path); + + $dbfs->select("dirname = '$strippath'"); + + while ($file = $dbfs->next()) { + if ($file->get("filename") != ".") { + $uploads->sync($path . "/", $file->get("filename")); + } + } + } + + $uploads->select("dirname = '$path/' AND idclient = '$client'"); + + while ($upload = $uploads->next()) { + if (!$dbfs->file_exists($upload->get("dirname") . $upload->get("filename"))) { + $uploads->delete($upload->get("idupl")); + } + } + + $properties->select("idclient = '$client' AND itemtype='upload' AND type='file' AND itemid LIKE '" . $path . "%'"); + + while ($property = $properties->next()) { + if (!$dbfs->file_exists($property->get("itemid"))) { + $properties->delete($property->get("idproperty")); + } + } + + return; +} + +function uplmkdir($path, $name) { + + global $cfgClient, $client, $action; + + if (is_dbfs($path)) { + $path = str_replace("dbfs:", "", $path); + + $fullpath = $path . "/" . $name . "/."; + + $dbfs = new DBFSCollection; + $dbfs->create($fullpath); + return; + } + + $name = uplCreateFriendlyName($name); + $name = strtr($name, "'", "."); + if (file_exists($cfgClient[$client]['upl']['path'] . $path . $name)) { + $action = "upl_mkdir"; + return "0702"; + } else { + $oldumask = umask(0); + @mkdir($cfgClient[$client]['upl']['path'] . $path . $name, 0775); + umask($oldumask); + } +} + +function uplRenameDirectory($oldpath, $newpath, $parent) { + global $cfgClient, $client, $cfg, $db; + + $db2 = new DB_ConLite; + + rename($cfgClient[$client]['upl']['path'] . $parent . $oldpath, $cfgClient[$client]['upl']['path'] . $parent . $newpath . "/"); + + /* Fetch all directory strings starting with the old path, and replace them + with the new path */ + $sql = "SELECT dirname, idupl FROM " . $cfg["tab"]["upl"] . " WHERE idclient='" . Contenido_Security::toInteger($client) . "' AND dirname LIKE '" . Contenido_Security::escapeDB($parent, $db) . Contenido_Security::escapeDB($oldpath, $db) . "%'"; + $db->query($sql); + + while ($db->next_record()) { + $moldpath = $db->f("dirname"); + $junk = substr($moldpath, strlen($parent) + strlen($oldpath)); + + $newpath2 = $parent . $newpath . $junk; + + $idupl = $db->f("idupl"); + $sql = "UPDATE " . $cfg["tab"]["upl"] . " SET dirname='" . Contenido_Security::escapeDB($newpath2, $db) . "' WHERE idupl = '" . Contenido_Security::toInteger($idupl) . "'"; + $db2->query($sql); + } + + $sql = "SELECT itemid, idproperty FROM " . $cfg["tab"]["properties"] . " WHERE itemid LIKE '" . Contenido_Security::escapeDB($parent, $db) . Contenido_Security::escapeDB($oldpath, $db) . "%'"; + $db->query($sql); + + while ($db->next_record()) { + $moldpath = $db->f("itemid"); + $junk = substr($moldpath, strlen($parent) + strlen($oldpath)); + + $newpath2 = $parent . $newpath . $junk; + $idproperty = $db->f("idproperty"); + $sql = "UPDATE " . $cfg["tab"]["properties"] . " SET itemid = '$newpath2' WHERE idproperty='$idproperty'"; + $db2->query($sql); + } +} + +function uplRecursiveDirectoryList($directory, &$rootitem, $level, $sParent = '', $iRenameLevel = null) { + $dirhandle = @opendir($directory); + + if (!$dirhandle) { + + } else { + $aInvalidDirectories = array(); + + unset($files); + + //list the files in the dir + while ($file = readdir($dirhandle)) { + if ($file != "." && $file != "..") { + if (@chdir($directory . $file . "/")) { + if (uplCreateFriendlyName($file) == $file) { + $files[] = $file; + } else { + if ($_GET['force_rename'] == 'true') { + if ($iRenameLevel == 0 || $iRenameLevel == $level) { + uplRenameDirectory($file, uplCreateFriendlyName($file), $sParent); + $iRenameLevel = $level; + $files[] = uplCreateFriendlyName($file); + } else { + array_push($aInvalidDirectories, $file); + } + } else { + array_push($aInvalidDirectories, $file); + } + } + } + } + } + + if (is_array($files)) { + sort($files); + foreach ($files as $key => $file) { + /* We aren't using is_dir anymore as that function is buggy */ + $olddir = getcwd(); + if ($file != "." && $file != "..") { + if (@chdir($directory . $file . "/")) { + unset($item); + $item = new TreeItem($file, $directory . $file . "/", true); + $item->custom["level"] = $level; + + if ($key == count($files) - 1) { + $item->custom["lastitem"] = true; + } else { + $item->custom["lastitem"] = false; + } + + $item->custom["parent"] = $directory; + + $rootitem->addItem($item); + $old = $rootitem; + $aArrayTemp = uplRecursiveDirectoryList($directory . $file . "/", $item, $level + 1, $sParent . $file . '/', $iRenameLevel); + $aInvalidDirectories = array_merge($aInvalidDirectories, $aArrayTemp); + $rootitem = $old; + chdir($olddir); + } + } + } + } + } + + @closedir($dirhandle); + return $aInvalidDirectories; +} + +function uplRecursiveDBDirectoryList($directory, &$rootitem, $level) { + $dbfs = new DBFSCollection; + $dbfs->select("filename = '.'", "dirname", "dirname ASC"); + $count = 0; + $lastlevel = 0; + $item["."] = &$rootitem; + + while ($dbitem = $dbfs->next()) { + $dirname = $dbitem->get("dirname"); + $level = substr_count($dirname, "/") + 2; + $file = basename($dbitem->get("dirname")); + $parent = dirname($dbitem->get("dirname")); + + if ($dirname != "." && $file != ".") { + $item[$dirname] = new TreeItem($file, "dbfs:/" . $dirname, true); + $item[$dirname]->custom["level"] = $level; + $item[$dirname]->custom["parent"] = $parent; + $item[$dirname]->custom["lastitem"] = true; + + if ($prevobj[$level]->custom["level"] == $level) { + if (is_object($prevobj[$level])) { + $prevobj[$level]->custom["lastitem"] = false; + } + } + + if ($lastlevel > $level) { + unset($prevobj[$lastlevel]); + $lprevobj->custom["lastitem"] = true; + } + + $prevobj[$level] = &$item[$dirname]; + $lprevobj = &$item[$dirname]; + + $lastlevel = $level; + + if (is_object($item[$parent])) { + $item[$parent]->addItem($item[$dirname]); + } + + $count++; + } + } +} + +function uplGetThumbnail($file, $maxsize) { + global $client, $cfgClient, $cfg; + + if ($maxsize == -1) { + return uplGetFileIcon($file); + } + + switch (getFileExtension($file)) { + case "png": + case "gif": + case "tiff": + case "tif": + case "bmp": + case "jpeg": + case "jpg": + case "bmp": + case "iff": + case "xbm": + case "wbmp": + $img = capiImgScale($cfgClient[$client]["upl"]["path"] . $file, $maxsize, $maxsize, false, false, 50); + + if ($img !== false) { + return $img; + } else { + $value = capiImgScale($cfg["path"]["contenido"] . "images/unknown.jpg", $maxsize, $maxsize, false, false, 50); + if ($value !== false) { + return $value; + } else { + return uplGetFileIcon($file); + } + } + break; + default: + return uplGetFileIcon($file); + } +} + +/** + * Returns the icon for a file type + * + * @param $file Filename to retrieve the extension for + * + * @return Icon for the file type + * + */ +function uplGetFileIcon($file) { + global $cfg; + + switch (getFileExtension($file)) { + case "sxi": + case "sti": + case "pps": + case "pot": + case "kpr": + case "pptx": + case "potx": + case "pptm": + case "potm": + case "ppt": $icon = "ppt.gif"; + break; + case "doc": + case "dot": + case "sxw": + case "stw": + case "sdw": + case "docx": + case "dotx": + case "docm": + case "dotm": + case "kwd": $icon = "word.gif"; + break; + case "xls": + case "sxc": + case "stc": + case "xlw": + case "xlt": + case "csv": + case "ksp": + case "xlsx": + case "xltx": + case "xlsm": + case "xlsb": + case "xltm": + case "sdc": $icon = "excel.gif"; + break; + case "txt": + case "rtf": $icon = "txt.gif"; + break; + case "gif": $icon = "gif.gif"; + break; + case "png": $icon = "png.gif"; + break; + case "jpeg": + case "jpg": $icon = "jpg.gif"; + break; + case "html": + case "htm": $icon = "html.gif"; + break; + case "lha": + case "rar": + case "arj": + case "bz2": + case "bz": + case "gz": + case "tar": + case "tbz2": + case "tbz": + case "tgz": + case "zip": $icon = "zip.gif"; + break; + case "pdf": $icon = "pdf.gif"; + break; + case "mov": + case "avi": + case "mpg": + case "mpeg": + case "wmv": $icon = "movie.gif"; + break; + case "swf": $icon = "swf.gif"; + break; + case "js": $icon = "js.gif"; + break; + case "vcf": $icon = "vcf.gif"; + break; + case "odf": $icon = "odf.gif"; + break; + case "php": $icon = "php.gif"; + break; + case "mp3": + case "wma": + case "ogg": + case "mp4": $icon = "sound.gif"; + break; + case "psd": + case "ai": + case "eps": + case "cdr": + case "qxp": + case "ps": $icon = "design.gif"; + break; + case "css": $icon = "css.gif"; + + default: + if (file_exists($cfg['path']['contenido_fullhtml'] . $cfg["path"]["images"] . "filetypes/" . getFileExtension($file) . ".gif")) { + $icon = getFileExtension($file) . ".gif"; + } else { + $icon = "unknown.gif"; + } + break; + } + + return $cfg['path']['contenido_fullhtml'] . $cfg["path"]["images"] . "filetypes/" . $icon; +} + +/** + * Returns the description for a file type + * + * @param $extension Extension to use + * + * @return Text for the file type + * + */ +function uplGetFileTypeDescription($extension) { + global $cfg; + + switch ($extension) { + /* Presentation files */ + case "sxi": return (i18n("OpenOffice.org Presentation")); + case "sti": return (i18n("OpenOffice.org Presentation Template")); + case "pps": return (i18n("Microsoft PowerPoint Screen Presentation")); + case "pot": return (i18n("Microsoft PowerPoint Presentation Template")); + case "kpr": return (i18n("KDE KPresenter Document")); + case "ppt": return (i18n("Microsoft PowerPoint Presentation Template")); + + /* Document files */ + case "doc": return (i18n("Microsoft Word Document or regular text file")); + case "dot": return (i18n("Microsoft Word Template")); + case "sxw": return (i18n("OpenOffice.org Text Document")); + case "stw": return (i18n("OpenOffice.org Text Document Template")); + case "sdw": return (i18n("StarOffice 5.0 Text Document")); + case "kwd": return (i18n("KDE KWord Document")); + + /* Spreadsheet files */ + case "xls": return (i18n("Microsoft Excel Worksheet")); + case "sxc": return (i18n("OpenOffice.org Table")); + case "stc": return (i18n("OpenOffice.org Table Template")); + case "xlw": return (i18n("Microsoft Excel File")); + case "xlt": return (i18n("Microsoft Excel Template")); + case "csv": return (i18n("Comma Seperated Value File")); + case "ksp": return (i18n("KDE KSpread Document")); + case "sdc": return (i18n("StarOffice 5.0 Table")); + + /* Text types */ + case "txt": return (i18n("Plain Text")); + case "rtf": return (i18n("Rich Text Format")); + + /* Images */ + case "gif": return (i18n("GIF Image")); + case "png": return (i18n("PNG Image")); + case "jpeg": return (i18n("JPEG Image")); + case "jpg": return (i18n("JPEG Image")); + case "tif": return (i18n("TIFF Image")); + case "psd": return (i18n("Adobe Photoshop Image")); + + /* HTML */ + case "html": return (i18n("Hypertext Markup Language Document")); + case "htm": return (i18n("Hypertext Markup Language Document")); + case "css": return (i18n("Cascading Style Sheets")); + + /* Archives */ + case "lha": return (i18n("LHA Archive")); + case "rar": return (i18n("RAR Archive")); + case "arj": return (i18n("ARJ Archive")); + case "bz2": return (i18n("bz2-compressed File")); + case "bz": return (i18n("bzip-compressed File")); + case "zip": return (i18n("ZIP Archive")); + case "tar": return (i18n("TAR Archive")); + case "gz": return (i18n("GZ Compressed File")); + + /* Source files */ + case "c": return (i18n("C Program Code")); + case "c++": + case "cc": + case "cpp": return (i18n("C++ Program Code")); + case "hpp": + case "h": return (i18n("C or C++ Program Header")); + case "php": + case "php3": + case "php4": return (i18n("PHP Program Code")); + case "phps": return (i18n("PHP Source File")); + + case "pdf": return (i18n("Adobe Acrobat Portable Document")); + + /* Movies */ + case "mov": return (i18n("QuickTime Movie")); + case "avi": return (i18n("avi Movie")); + case "mpg": + case "mpeg": return (i18n("MPEG Movie")); + case "wmv": return (i18n("Windows Media Video")); + + default: return (i18n($extension . "-File")); + } +} + +function uplCreateFriendlyName($filename, $spacer = "_") { + global $cfg; + + $newfilename = ""; + + if (!is_array($cfg['upl']['allow_additional_chars'])) { + $filename = str_replace(" ", $spacer, $filename); + } elseif (in_array(' ', $cfg['upl']['allow_additional_chars']) === FALSE) { + $filename = str_replace(" ", $spacer, $filename); + } + + for ($i = 0; $i < strlen($filename); $i++) { + $atom = substr($filename, $i, 1); + $bFound = false; + + if (preg_match("/[0-9a-zA-Z]/i", $atom)) { + $newfilename .= $atom; + $bFound = true; + } + + if (($atom == "-" || $atom == "_" || $atom == ".") && !$bFound) { + $newfilename .= $atom; + $bFound = true; + } + + #Check for additionally allowed charcaters in $cfg['upl']['allow_additional_chars'] (must be array of chars allowed) + if (is_array($cfg['upl']['allow_additional_chars']) && !$bFound) { + if (in_array($atom, $cfg['upl']['allow_additional_chars'])) { + $newfilename .= $atom; + } + } + } + + return $newfilename; +} + +function uplSearch($searchfor) { + global $client; + + $properties = new PropertyCollection; + $uploads = new UploadCollection; + + $mysearch = urlencode($searchfor); + + /* Search for keywords first, ranking +5 */ + $properties->select("idclient='" . Contenido_Security::toInteger($client) . "' AND itemtype = 'upload' AND type='file' AND name='keywords' AND value LIKE '%" . Contenido_Security::escapeDB($mysearch, $db) . "%'", "itemid"); + + while ($item = $properties->next()) { + $items[$item->get("itemid")] += (substr_count(strtolower($item->get("value")), strtolower($searchfor)) * 5); + } + + /* Search for medianame , ranking +4 */ + $properties->select("idclient='" . Contenido_Security::toInteger($client) . "' AND itemtype = 'upload' AND type='file' AND name='medianame' AND value LIKE '%" . Contenido_Security::escapeDB($mysearch, $db) . "%'", "itemid"); + + while ($item = $properties->next()) { + $items[$item->get("itemid")] += (substr_count(strtolower($item->get("value")), strtolower($searchfor)) * 4); + } + + /* Search for media notes, ranking +3 */ + $properties->select("idclient='" . Contenido_Security::toInteger($client) . "' AND itemtype = 'upload' AND type='file' AND name='medianotes' AND value LIKE '%" . Contenido_Security::escapeDB($mysearch, $db) . "%'", "itemid"); + + while ($item = $properties->next()) { + $items[$item->get("itemid")] += (substr_count(strtolower($item->get("value")), strtolower($searchfor)) * 3); + } + + /* Search for description, ranking +2 */ + $uploads->select("idclient='" . Contenido_Security::toInteger($client) . "' AND description LIKE '%" . Contenido_Security::escapeDB($mysearch, $db) . "%'", "idupl"); + + while ($item = $uploads->next()) { + $items[$item->get("dirname") . $item->get("filename")] += (substr_count(strtolower($item->get("description")), strtolower($searchfor)) * 2); + } + + /* Search for file name, ranking +1 */ + $uploads->select("idclient='" . Contenido_Security::toInteger($client) . "' AND filename LIKE '%" . Contenido_Security::escapeDB($mysearch, $db) . "%'", "idupl"); + + while ($item = $uploads->next()) { + $items[$item->get("dirname") . $item->get("filename")] += 1; + } + + return ($items); +} + +function uplGetFileExtension($sFile) { + /* Fetch the dot position */ + $iDotPosition = strrpos($sFile, "."); + + $sExtension = substr($sFile, $iDotPosition + 1); + if (strpos($sExtension, "/") !== false) { + return false; + } else { + return $sExtension; + } +} + +?> diff --git a/branches/conlite20/conlite/includes/globals_off.inc.php b/branches/conlite20/conlite/includes/globals_off.inc.php new file mode 100644 index 0000000..e1c8907 --- /dev/null +++ b/branches/conlite20/conlite/includes/globals_off.inc.php @@ -0,0 +1,120 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unkown + * modified 2008-06-25, Frederic Schneider, add stripslashes_deep and contenido_stripslashes constant + * modified 2008-06-26 Removed $_SERVER and $_ENV because this global vars are read only + * modified 2009-11-06, Murat Purc, replaced deprecated functions (PHP 5.3 ready) and removed code for PHP older than 4.1.0 + * modified 2011-02-04, Murat Purc, fixed potential attac by manipulated request variables (see http://forum.contenido.org/viewtopic.php?f=11&t=30812) + * $Id: globals_off.inc.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + + +// set constant value depending on get_magic_quotes_gpc status +define('CONTENIDO_STRIPSLASHES', (get_magic_quotes_gpc() == 0)); + + +// PHP5 with register_long_arrays off? +if (!isset($HTTP_POST_VARS) && isset($_POST)) { + $HTTP_POST_VARS = & $_POST; + $HTTP_GET_VARS = & $_GET; + $HTTP_COOKIE_VARS = & $_COOKIE; + $HTTP_POST_FILES = & $_FILES; + + // _SESSION is the only superglobal which is conditionally set + if (isset($_SESSION)) { + $HTTP_SESSION_VARS = & $_SESSION; + } +} + +// simulate get_magic_quotes_gpc on if turned off +if (CONTENIDO_STRIPSLASHES) { + + /** + * Adds slashes to passed variable + * + * @param mixed $value Either a string or a multi-dimensional array of values + * @return array + */ + function addslashes_deep($value) + { + $value = is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value); + + return $value; + } + + /** + * Removes slashes from passed variable. + * + * @param mixed $value Either a string or a multi-dimensional array of values + * @return array + */ + function stripslashes_deep($value) + { + $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); + + return $value; + } + + $_POST = array_map('addslashes_deep', $_POST); + $_GET = array_map('addslashes_deep', $_GET); + $_COOKIE = array_map('addslashes_deep', $_COOKIE); + + $cfg['simulate_magic_quotes'] = true; +} else { + $cfg['simulate_magic_quotes'] = false; +} + +if (!isset($_REQUEST) || $cfg['simulate_magic_quotes']) { + /* Register post,get and cookie variables into $_REQUEST */ + $_REQUEST = array_merge($_GET, $_POST, $_COOKIE); +} + +// this should be the default setting, but only for PHP older than 5.3.0 +if (!CONTENIDO_STRIPSLASHES && (version_compare(PHP_VERSION, '5.3.0', '<'))) { + @set_magic_quotes_runtime(0); +} + +// register globals +$types_to_register = array ('GET', 'POST', 'COOKIE', 'SESSION', 'SERVER'); +foreach ($types_to_register as $global_type) { + $arr = @ ${'_' . $global_type}; + if (is_array($arr) && count($arr) > 0) { + // second loop to prevent overwriting of globals by other globals' values + foreach ($types_to_register as $global_type) { + $key = '_' . $global_type; + if (isset($arr[$key])) { + unset($arr[$key]); + } + } + // echo "
\$_$global_type:"; print_r ($arr); echo "
"; + extract($arr, EXTR_OVERWRITE); + } +} +// save memory +unset ($types_to_register, $global_type, $arr); + +$FORM = $_REQUEST; + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/grouprights.inc.php b/branches/conlite20/conlite/includes/grouprights.inc.php new file mode 100644 index 0000000..6e7a1b5 --- /dev/null +++ b/branches/conlite20/conlite/includes/grouprights.inc.php @@ -0,0 +1,337 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-26, Dominik Ziegler, add security fix + * modified 2008-07-28, Bilal Arslan, moved inline html to template + * + * $Id: grouprights.inc.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +if(!is_object($db2)) +$db2 = new DB_ConLite; + +if(!is_object($oTpl)) +$oTpl = new Template(); +$oTpl->reset(); + +//set new right_list (=all possible rights) +if(!is_array($right_list)){ + //register these list fore following sites + # same shit like every rights area ;) + # commented out by H. Librenz, 2007-08-31 + //$sess->register("right_list"); + + $plugxml=new XML_Doc(); + + //select all rights , actions an theeir locations without area login + $sql="SELECT A.idarea, A.parent_id, B.location,A.name FROM ".$cfg["tab"]["area"]." as A LEFT JOIN ".$cfg["tab"]["nav_sub"]." as B ON A.idarea = B.idarea WHERE A.name!='login' AND A.relevant='1' AND A.online='1' GROUP BY A.name ORDER BY A.idarea"; + $db->query($sql); + + while($db->next_record()) + { + if($db->f("parent_id")=="0"){ + $right_list[$db->f("name")][$db->f("name")]["perm"]=$db->f("name"); + $right_list[$db->f("name")][$db->f("name")]["location"]=$db->f('location'); + }else{ + $right_list[$db->f("parent_id")][$db->f("name")]["perm"]=$db->f("name"); + $right_list[$db->f("parent_id")][$db->f("name")]["location"] = $db->f('location'); + } + + $sql="SELECT * FROM ".$cfg["tab"]["actions"]." WHERE idarea='".Contenido_Security::toInteger($db->f("idarea"))."' AND relevant='1'"; + $db2->query($sql); + while($db2->next_record()) + { + if($db->f("parent_id")=="0"){ + $right_list[$db->f("name")][$db->f("name")]["action"][]=$db2->f("name"); + }else{ + $right_list[$db->f("parent_id")][$db->f("name")]["action"][]=$db2->f("name"); + } + } + } +} + +##Header Area Begin +// Set the session id +$oTpl->set("s", "SESS_ID", $sess->id); + +##End of Header Area + +if(!isset($actionarea)){ + $actionarea="area"; +} +##Body Area Begin +$oTpl->set("s", "ACTION_URL", $sess->url("main.php")); +$oTpl->set("s", "TYPE_ID", "groupid"); +$oTpl->set("s", "USER_ID", $groupid); +$oTpl->set("s", "AREA", $area); + +$mgroup = new Group; +$mgroup->loadGroupByGroupID($groupid); + +$userperms = $mgroup->getField("perms"); + +$oTpl->set("s", "TABLE_BORDER",$cfg["color"]["table_border"]); +$oTpl->set("s", "TABLE_BGCOLOR", $cfg["color"]["table_dark"]); +$oTpl->set("s", "RIGHTS_PERMS", $rights_perms); + +//selectbox for clients +$oHtmlSelect = new cHTMLSelectElement ('rights_clientslang', "", "rights_clientslang"); + + $clientclass = new Client; + $clientList = $clientclass->getAccessibleClients(); + $firstsel = false; + $i = 0; + + foreach ($clientList as $key=>$value) { + $sql="SELECT * FROM ".$cfg["tab"]["lang"]." as A, ".$cfg["tab"]["clients_lang"]." as B WHERE B.idclient='".Contenido_Security::toInteger($key)."' AND A.idlang=B.idlang"; + $db->query($sql); + + while($db->next_record()) + { + if((strpos($userperms, "client[$key]") !== false) && + (strpos($userperms, "lang[".$db->f("idlang")."]") !== false) + && ($perm->have_perm("lang[".$db->f("idlang")."]"))){ + + if ($firstsel == false) + { + $firstsel = true; + $firstclientslang = $db->f("idclientslang"); + } + + if ($rights_clientslang == $db->f("idclientslang")) { + # printf("",$db->f("idclientslang"),$value["name"] . " -> ".$db->f("name")); + $oHtmlSelectOption = new cHTMLOptionElement($value["name"] . " -> ".$db->f("name"), $db->f("idclientslang"), true); + $oHtmlSelect->addOptionElement($i, $oHtmlSelectOption); + $i++; + + + if(!isset($rights_client)) + { + $firstclientslang = $db->f("idclientslang"); + } + } else { + #printf("",$db->f("idclientslang"),$value["name"] . " -> ".$db->f("name")); + $oHtmlSelectOption = new cHTMLOptionElement($value["name"] . " -> ".$db->f("name"), $db->f("idclientslang"), false); + $oHtmlSelect->addOptionElement($i, $oHtmlSelectOption); + $i++; + } + } + } + } +// Render Select Box +$oTpl->set('s', 'INPUT_SELECT_CLIENT', $oHtmlSelect->render()); + + if ($area != 'groups_content') { + $oTpl->set('s', 'INPUT_SELECT_RIGHTS', ''); + $oTpl->set('s', 'DISPLAY_RIGHTS', 'none'); + } else { + + #filter for displaying rights + $oHtmlSelect = new cHTMLSelectElement ('filter_rights', '', "filter_rights"); + $oHtmlSelectOption = new cHTMLOptionElement('--- '.i18n("All").' ---', '', false); + $oHtmlSelect->addOptionElement(0, $oHtmlSelectOption); + $oHtmlSelectOption = new cHTMLOptionElement(i18n("Article rights"), 'article', false); + $oHtmlSelect->addOptionElement(1, $oHtmlSelectOption); + $oHtmlSelectOption = new cHTMLOptionElement(i18n("Category rights"), 'category', false); + $oHtmlSelect->addOptionElement(2, $oHtmlSelectOption); + $oHtmlSelectOption = new cHTMLOptionElement(i18n("Template rights"), 'template', false); + $oHtmlSelect->addOptionElement(3, $oHtmlSelectOption); + $oHtmlSelectOption = new cHTMLOptionElement(i18n("Plugin/Other rights"), 'other', false); + $oHtmlSelect->addOptionElement(4, $oHtmlSelectOption); + $oHtmlSelect->setEvent('change', "document.rightsform.submit();"); + $oHtmlSelect->setDefault($_POST['filter_rights']); + + #set global array which defines rights to display + $aArticleRights = array('con_syncarticle', 'con_lock', 'con_deleteart', 'con_makeonline', 'con_makestart', 'con_duplicate', 'con_editart', 'con_newart', 'con_edit'); + $aCategoryRights = array('con_synccat', 'con_makecatonline', 'con_makepublic'); + $aTempalteRights = array('con_changetemplate', 'con_tplcfg_edit'); + + $aViewRights = array(); + $bExclusive = false; + if (isset($_POST['filter_rights'])) { + switch($_POST['filter_rights']) { + case 'article': + $aViewRights = $aArticleRights; + break; + case 'category': + $aViewRights = $aCategoryRights; + break; + case 'template': + $aViewRights = $aTempalteRights; + break; + case 'other': + $aViewRights = array_merge($aArticleRights, $aCategoryRights, $aTempalteRights); + $bExclusive = true; + break; + default: + break; + } + } + $oTpl->set('s', 'INPUT_SELECT_RIGHTS', $oHtmlSelect->render()); + $oTpl->set('s', 'DISPLAY_RIGHTS', 'block'); + + } + + +if(!isset($rights_clientslang)) +{ + $rights_clientslang = $firstclientslang; +} + +$sql = "SELECT idclient, idlang FROM ".$cfg["tab"]["clients_lang"]." WHERE idclientslang = '$rights_clientslang'"; +$db->query($sql); + +if ($db->next_record()) +{ + $rights_client = $db->f("idclient"); + $rights_lang = $db->f("idlang"); +} else { + $notification->displayNotification("error", i18n("Current group doesn't have any rights to any client/language.")); + die; +} + + // current set it on null + $oTpl->set('s', 'NOTIFICATION', ''); + + $oTpl->set('s', 'OB_CONTENT', ''); + +function saverightsarea() +{ + global $db, $cfg,$groupid,$rights_client,$rights_lang,$rights_admin,$rights_sysadmin,$rights_perms,$rights_list; + + if(!isset($rights_perms)){ + //search for the permissions of this user + $sql="SELECT perms FROM ".$cfg["tab"]["groups"]." WHERE group_id='".Contenido_Security::escapeDB($groupid, $db)."'"; + $db->query($sql); + $db->next_record(); + $rights_perms=$db->f("perms"); + } + + + //if there are no permissions, delete permissions for lan and client + if(!is_array($rights_list)){ + $rights_perms=preg_replace("/,+client\[$rights_client\]/","",$rights_perms); + $rights_perms=preg_replace("/,+lang\[$rights_lang\]/","",$rights_perms); + }else{ + if(!strstr($rights_perms,"client[$rights_client]")) + $rights_perms.=",client[$rights_client]"; + if(!strstr($rights_perms,"lang[$rights_lang]")) + $rights_perms.=",lang[$rights_lang]"; + } + + //if admin is checked + if($rights_admin==1){ + //if admin is mot set + if(!strstr($rights_perms,"admin[$rights_client]")) + $rights_perms.=",admin[$rights_client]"; + }else{ + //cut admin from the string + $rights_perms=preg_replace("/,*admin\[$rights_client\]/","",$rights_perms); + } + + //if sysadmin is checked + if($rights_sysadmin==1){ + //if sysadmin is not set + if(!strstr($rights_perms,"sysadmin")) + $rights_perms.=",sysadmin"; + }else{ + //cat sysadmin from string + $rights_perms=preg_replace("/,*sysadmin/","",$rights_perms); + } + + + //cut ',' in front of the string + $rights_perms=preg_replace("/^,/","",$rights_perms); + + //update table + $sql="UPDATE ".$cfg["tab"]["groups"]." SET perms='".Contenido_Security::escapeDB($rights_perms, $db)."' WHERE group_id='".Contenido_Security::escapeDB($groupid, $db)."'"; + + $db->query($sql); + + //save the other rights + saverights(); +} + +function saverights() { + + global $rights_list, $rights_list_old, $db; + global $cfg, $groupid, $rights_client, $rights_lang; + global $perm, $sess, $notification; + + //if no checkbox is checked + if (!is_array($rights_list)) { + $rights_list = array (); + } + + //search all checks which are not in the new Rights_list for deleting + $arraydel = array_diff(array_keys($rights_list_old), array_keys($rights_list)); + //search all checks which are not in the Rights_list_old for saving + $arraysave = array_diff(array_keys($rights_list), array_keys($rights_list_old)); + + if (is_array($arraydel)) { + foreach ($arraydel as $value) { + $data = explode("|", $value); + $data[0] = $perm->getIDForArea($data[0]); + $data[1] = $perm->getIDForAction($data[1]); + + $sql = "DELETE FROM ".$cfg["tab"]["rights"]." WHERE user_id='".Contenido_Security::escapeDB($groupid, $db)."' AND idclient='".Contenido_Security::toInteger($rights_client)."' AND idlang='".Contenido_Security::toInteger($rights_lang)."' AND idarea='".Contenido_Security::toInteger($data[0])."' AND idcat='".Contenido_Security::toInteger($data[2])."' AND idaction='".Contenido_Security::toInteger($data[1])."' AND type=1"; + $db->query($sql); + } + } + + unset($data); + + //search for all mentioned checkboxes + if (is_array($arraysave)) { + foreach ($arraysave as $value) { + //explodes the key it consits areait+actionid+itemid + $data = explode("|", $value); + + // Since areas are stored in a numeric form in the rights table, we have + // to convert them from strings into numbers + + $data[0] = $perm->getIDForArea($data[0]); + $data[1] = $perm->getIDForAction($data[1]); + + if (!isset ($data[1])) { + $data[1] = 0; + } + // Insert new right + $sql = "INSERT INTO ".$cfg["tab"]["rights"]." + (idright, user_id,idarea,idaction,idcat,idclient,idlang, type) + VALUES ('".Contenido_Security::toInteger($db->nextid($cfg["tab"]["rights"]))."', '".Contenido_Security::escapeDB($groupid, $db)."', '".Contenido_Security::toInteger($data[0])."','".Contenido_Security::toInteger($data[1])."', '".Contenido_Security::toInteger($data[2])."', '".Contenido_Security::toInteger($rights_client)."', '".Contenido_Security::toInteger($rights_lang)."', 1)"; + $db->query($sql); + } + + } + $rights_list_old = $rights_list; + + $notification->displayNotification("info", i18n("Changes saved")); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/grouprights_area.inc.php b/branches/conlite20/conlite/includes/grouprights_area.inc.php new file mode 100644 index 0000000..9a9d312 --- /dev/null +++ b/branches/conlite20/conlite/includes/grouprights_area.inc.php @@ -0,0 +1,202 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-26, Dominik Ziegler, add security fix + * modified 2008-07-28, Bilal Arslan, moved inline html to template + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: grouprights_area.inc.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +//notice $oTpl is filled and generated in file rights.inc.php this file renders $oTpl to browser +include_once($cfg['path']['contenido'].'includes/grouprights.inc.php'); +$debug = 0; +// declare new Template variables +$sJsBefore = ''; +$sJsAfter = ''; +$sJsExternal = ''; +$sTable = ''; + +// declare new javascript variables; +$sJsBefore .= "var areatree=new Array();\n"; + +//set the areas which are in use fore selecting these + +$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='".Contenido_Security::escapeDB($groupid, $db)."' AND idclient='".Contenido_Security::toInteger($rights_client)."' AND idlang='".Contenido_Security::toInteger($rights_lang)."' AND idcat='0' AND A.idaction = C.idaction AND A.idarea = B.idarea"; +$db->query($sql); +$rights_list_old = array (); +while ($db->next_record()) { //set a new rights list fore this user + $rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x"; +} + +if (($perm->have_perm_area_action($area, $action)) && ($action == "group_edit")) +{ + saverights(); +} else { + if (!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } +} + +if(!isset($rights_perms)||$action==""||!isset($action)) +{ + //search for the permissions of this user + $sql="SELECT perms FROM ".$cfg["tab"]["groups"]." WHERE group_id='".Contenido_Security::escapeDB($groupid, $db)."'"; + + $db->query($sql); + $db->next_record(); + $rights_perms=$db->f("perms"); +} + +$oTable = new Table($cfg["color"]["table_border"], "solid", 0, 2, $cfg["color"]["table_header"], $cfg["color"]["table_light"], $cfg["color"]["table_dark"], 0, 0); + +$sTable .= $oTable->start_table(); + +$sTable .= $oTable->header_row(); +$sTable .= $oTable->header_cell(" ","left"); +$sTable .= $oTable->header_cell(" ","left"); +$sTable .= $oTable->header_cell(i18n("Check all"),"left"); +$sTable .= $oTable->end_row(); + +//checkbox for all rights +$sTable .= $oTable->header_row(); +$sTable .= $oTable->header_cell(' ',"center", '', '', 0); +$sTable .= $oTable->header_cell(' ',"center", '', '', 0); +$sTable .= $oTable->header_cell("", "center", '', '', 0); +$sTable .= $oTable->end_row(); + +//Select the itemid�s +if ($xml->load($cfg['path']['xml'] . $cfg['lang'][$belang]) == false) +{ + if ($xml->load($cfg['path']['xml'] . 'lang_en_US.xml') == false) + { + die("Unable to load any XML language file"); + } +} + +$nav = new Contenido_Navigation; + +foreach($right_list as $key => $value){ + + + + // look for possible actions in mainarea + foreach($value as $key2 =>$value2) + { + if($key==$key2){ + //does the user have the right + if(in_array($value2["perm"]."|fake_permission_action|0",array_keys($rights_list_old))) + $checked="checked=\"checked\""; + else + $checked=""; + + /* Extract names from the XML document. */ + $main = $nav->getName(str_replace('/overview', '/main', $value2['location'])); + + if ($debug) + { + $locationString = $value2["location"] . " " . $value2["perm"]. "-->".$main; + } else { + $locationString = $main; + } + + $sTable .= $oTable->row(); + $sTable .= $oTable->cell($locationString,"", "", " class=\"td_rights1\"", false); + $sTable .= $oTable->cell("" ,"", "", " class=\"td_rights2\"", false); + $sTable .= $oTable->cell("","", "", " class=\"td_rights2\"", false); + $sTable .= $oTable->end_row(); + + //set javscript array for areatree + $sJsBefore .= " + areatree[\"$key\"]=new Array(); + areatree[\"$key\"][\"".$value2["perm"]."0\"]=\"rights_list[".$value2["perm"]."|fake_permission_action|0]\";\n"; + + } + + //if there area some + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { + $idaction = $value3; + //does the user have the right + if(in_array($value2["perm"]."|$idaction|0",array_keys($rights_list_old))) + $checked="checked=\"checked\""; + else + $checked=""; + + $darkRow = !$darkRow; + if ($darkRow) { + $bgColor = $cfg["color"]["table_dark"]; + } else { + $bgColor = $cfg["color"]["table_light"]; + } + + //set the checkbox the name consits of areait+actionid+itemid + $sCellContent = ''; + if ($debug) + { + $sCellContent = "     " . $value2["perm"] . " | ". $value3 . "-->".$lngAct[$value2["perm"]][$value3]."    "; + } else { + if ($lngAct[$value2["perm"]][$value3] == "") + { + $sCellContent = "     " . $value2["perm"] . "|" .$value3 ."    "; + + } else { + $sCellContent = "     " . $lngAct[$value2["perm"]][$value3]."    "; + } + } + $sTable .= $oTable->row(); + $sTable .= $oTable->cell($sCellContent,"left", "", " class=\"td_rights1\"", false); + $sTable .= $oTable->cell("", false); + $sTable .= $oTable->cell(" ", false); + $sTable .= $oTable->end_row(); + + //set javscript array for areatree + $sJsBefore .= "areatree[\"$key\"][\"".$value2["perm"]."$value3\"]=\"rights_list[".$value2["perm"]."|$value3|0]\";"; + + } + } + +} + +//checkbox for checking all actions fore this itemid +$sTable .= $oTable->row(); +$sTable .= $oTable->sumcell("","right"); +$sTable .= $oTable->end_row(); +$sTable .= $oTable->end_table(); + +$oTpl->set('s', 'JS_SCRIPT_BEFORE', $sJsBefore); +$oTpl->set('s', 'JS_SCRIPT_AFTER', $sJsAfter); +$oTpl->set('s', 'RIGHTS_CONTENT', $sTable); +$oTpl->set('s', 'EXTERNAL_SCRIPTS', $sJsExternal); +$oTpl->generate('templates/standard/'.$cfg['templates']['rights_inc']); + +?> diff --git a/branches/conlite20/conlite/includes/grouprights_con.inc.php b/branches/conlite20/conlite/includes/grouprights_con.inc.php new file mode 100644 index 0000000..27d0b20 --- /dev/null +++ b/branches/conlite20/conlite/includes/grouprights_con.inc.php @@ -0,0 +1,249 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-26, Dominik Ziegler, add security fix + * modified 2008-07-28, Bilal Arslan, moved inline html to template + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: grouprights_con.inc.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +//notice $oTpl is filled and generated in file rights.inc.php this file renders $oTpl to browser +include_once($cfg['path']['contenido'].'includes/grouprights.inc.php'); + +//set the areas which are in use fore selecting these +$possible_area = "'".implode("','", $area_tree[$perm->showareas("con")])."'"; +$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='".Contenido_Security::escapeDB($groupid, $db)."' AND idclient='".Contenido_Security::toInteger($rights_client)."' AND A.type = 1 AND idlang='".Contenido_Security::toInteger($rights_lang)."' AND B.idarea IN ($possible_area) AND idcat!='0' AND A.idaction = C.idaction AND A.idarea = C.idarea AND A.idarea = B.idarea"; +$db->query($sql); +$rights_list_old = array (); +while ($db->next_record()) { //set a new rights list fore this user + $rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x"; +} + +if (($perm->have_perm_area_action($area, $action)) && ($action == "group_edit")) +{ + saverights(); +} else { + if (!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } +} + +$sJsBefore = ''; +$sJsAfter = ''; +$sJsExternal = ''; +$sTable = ''; + + +$sJsExternal .= ''; +$sJsExternal .= ''; + +// declare new javascript variables; +$sJsBefore .= " var itemids=new Array(); + var actareaids=new Array();"; +$colspan=0; + +$oTable = new Table($cfg["color"]["table_border"], "solid", 0, 2, $cfg["color"]["table_header"], $cfg["color"]["table_light"], $cfg["color"]["table_dark"], 0, 0); + + $sTable .= $oTable->start_table(); + $sTable .= $oTable->header_row(); + $sTable .= $oTable->header_cell(i18n("Category"),"left"); + $sTable .= $oTable->header_cell(" ","left"); + + + $possible_areas=array(); + $aSecondHeaderRow=array(); + // look for possible actions in mainarea [] in str and con + foreach($right_list["con"] as $value2) + { + //if there are some actions + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { + if ((in_array($value3, $aViewRights) && !$bExclusive) || + (!in_array($value3, $aViewRights) && $bExclusive) || + (count($aViewRights) == 0)) { + //set the areas that are in use + $possible_areas[$value2["perm"]]=""; + + + $colspan++; + //set the possible areas and actions for this areas + + //checkbox for the whole action + $sTable .= $oTable->header_cell($lngAct[$value2["perm"]][$value3]); + $sJsBefore .= "actareaids[\"$value3|".$value2["perm"]."\"]=\"x\";\n"; + array_push($aSecondHeaderRow, ""); + + } + } + } + + //checkbox for all rights + $sTable .= $oTable->header_cell(i18n('Check all')); + array_push($aSecondHeaderRow, ""); + $colspan++; + + $sTable .= $oTable->header_row(); + $sTable .= $oTable->header_cell(' ',"center", '', '', 0); + $sTable .= $oTable->header_cell(' ',"center", '', '', 0); + + foreach ($aSecondHeaderRow as $value) { + $sTable .= $oTable->header_cell($value, "center", '', '', 0); + } + $sTable .= $oTable->end_row(); + + + $colspan++; + + $sql = "SELECT A.idcat, level, name,parentid FROM ".$cfg["tab"]["cat_tree"]." AS A, ".$cfg["tab"]["cat"]." AS B, ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND C.idlang='".Contenido_Security::toInteger($rights_lang)."' AND B.idclient='".Contenido_Security::toInteger($rights_client)."' ORDER BY idtree"; + + $db->query($sql); + $counter=array(); + $parentid="leer"; + $sScript = ''; + + $aRowname = array(); + $iLevel = 0; + + while ($db->next_record()) { + $iCurrentIdCat = $db->f('idcat'); + + if ($db->f("level") == 0 && $db->f("preid") != 0) { + $sTable .= $oTable->row(); + $sTable .= $oTable->sumcell(" ","right"); + $sTable .= $oTable->end_row(); + + + }else { + if ($db->f("level") < $iLevel) { + $iDistance = $iLevel-$db->f("level"); + + for ($i = 0; $i < $iDistance; $i++) { + array_pop($aRowname); + } + $iLevel = $db->f("level"); + } + + if ($db->f("level") >= $iLevel) { + if ($db->f("level") == $iLevel) { + array_pop($aRowname); + } else { + $iLevel = $db->f("level"); + } + array_push($aRowname, $db->f("idcat")); + } + + //find out parentid for inheritance + //if parentid is the same increase the counter + if($parentid==$db->f("parentid")){ + + $counter[$parentid]++; + }else{ + $parentid=$db->f("parentid"); + // if these parentid is in use increase the counter + if(isset($counter[$parentid])){ + $counter[$parentid]++; + }else{ + $counter[$parentid]=0; + } + + + } + + $spaces=''; + + + $darkRow = !$darkRow; + if ($darkRow) { + $bgColor = $cfg["color"]["table_dark"]; + } else { + $bgColor = $cfg["color"]["table_light"]; + } + + + $sTable .= $oTable->row("id=\"".implode('_', $aRowname)."\""); + $sTable .= $oTable->cell($spaces.$db->f("name"),"", "", " class=\"td_rights0\"", false); + $sTable .= $oTable->cell("f("idcat")."')\" class=\"action\">","", "", " class=\"td_rights1\"", false); + + $sJsAfter.="itemids[\"".$db->f("idcat")."\"]=\"x\";\n"; + + // look for possible actions in mainarea[] + foreach($right_list["con"] as $value2){ + //if there area some + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { + if ((in_array($value3, $aViewRights) && !$bExclusive) || + (!in_array($value3, $aViewRights) && $bExclusive) || + (count($aViewRights) == 0)) { + //does the user have the right + if(isset($rights_list_old[$value2["perm"]."|$value3|".$iCurrentIdCat])) + $checked="checked=\"checked\""; + else + $checked=""; + + //set the checkbox the name consits of areaid+actionid+itemid the id = parebntid+couter for these parentid+areaid+actionid + $sTable .= $oTable->cell("f("idcat")."]\" value=\"x\" $checked>","", "", " class=\"td_rights2\"", false); + } + } + } + //checkbox for checking all actions fore this itemid + + $sTable .= $oTable->cell("f("idcat")."\" value=\"\" onClick=\"setRightsFor('".$value2["perm"]."','$value3','".$db->f("idcat")."')\">","", "", " class=\"td_rights3\"", false); + $sTable .= $oTable->end_row(); + + } + +} + + +$colspan = $colspan+2; +$sTable .= $oTable->end_row(); +$sTable .= $oTable->row(); +$sTable .= $oTable->sumcell(" "); +$sTable .= $oTable->end_row(); +$sTable .= $oTable->end_table(); + +$sJsAfter .= "aTranslations = new Object(); + aTranslations['pfeil_links.gif'] = '".i18n("Apply rights for this category to all categories on the same level or above")."'; + aTranslations['pfeil_runter.gif'] = '".i18n("Apply rights for this category to all categories below the current category")."'; + setImageTags(aTranslations); + + init('".i18n("Open category")."', '".i18n("Close category")."'); \n"; + +$oTpl->set('s', 'JS_SCRIPT_BEFORE', $sJsBefore); +$oTpl->set('s', 'JS_SCRIPT_AFTER', $sJsAfter); +$oTpl->set('s', 'RIGHTS_CONTENT', $sTable); +$oTpl->set('s', 'EXTERNAL_SCRIPTS', $sJsExternal); +$oTpl->generate('templates/standard/'.$cfg['templates']['rights_inc']); + +?> diff --git a/branches/conlite20/conlite/includes/grouprights_lay.inc.php b/branches/conlite20/conlite/includes/grouprights_lay.inc.php new file mode 100644 index 0000000..f8c490e --- /dev/null +++ b/branches/conlite20/conlite/includes/grouprights_lay.inc.php @@ -0,0 +1,191 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-26, Dominik Ziegler, add security fix + * modified 2008-07-29, Bilal Arslan, moved inline html to template + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: grouprights_lay.inc.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +//notice $oTpl is filled and generated in file rights.inc.php this file renders $oTpl to browser +include_once($cfg['path']['contenido'].'includes/grouprights.inc.php'); + +//set the areas which are in use fore selecting these +$possible_area = "'".implode("','", $area_tree[$perm->showareas("lay")])."'"; +$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='".Contenido_Security::escapeDB($groupid, $db)."' AND idclient='".Contenido_Security::toInteger($rights_client)."' AND A.type = 1 AND idlang='".Contenido_Security::toInteger($rights_lang)."' AND B.idarea IN ($possible_area) AND idcat!='0' AND A.idaction = C.idaction AND A.idarea = C.idarea AND A.idarea = B.idarea"; +$db->query($sql); +$rights_list_old = array (); +while ($db->next_record()) { //set a new rights list fore this user + $rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x"; +} +if (($perm->have_perm_area_action($area, $action)) && ($action == "user_edit")) +{ + saverights(); +}else { + if (!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } +} + +// declare temp variables +$sJsBefore = ''; +$sJsAfter = ''; +$sJsExternal = ''; +$sTable = ''; + +$sJsBefore .= "var itemids=new Array(); + var actareaids=new Array(); \n"; + +if (($perm->have_perm_area_action($area, $action)) && ($action == "group_edit")) +{ + saverights(); +}else { + if (!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } +} + + +$colspan=0; + +$oTable = new Table($cfg["color"]["table_border"], "solid", 0, 2, $cfg["color"]["table_header"], $cfg["color"]["table_light"], $cfg["color"]["table_dark"], 0, 0); + +$sTable .= $oTable->start_table(); +$sTable .= $oTable->header_row(); +$sTable .= $oTable->header_cell(i18n("Layout name")); +$sTable .= $oTable->header_cell(i18n("Description")); + +$possible_areas=array(); +$sCheckboxesRow = ''; +$aSecondHeaderRow = array(); + +// look for possible actions in mainarea [] +foreach($right_list["lay"] as $value2) +{ + //if there are some actions + if(is_array($value2["action"])) + //set the areas that are in use + foreach($value2["action"] as $key3 => $value3) + { + $possible_areas[$value2["perm"]]=""; + $colspan++; + //set the possible areas and actions for this areas + $sJsBefore .= "actareaids[\"$value3|".$value2["perm"]."\"]=\"x\";\n"; + + //checkbox for the whole action + $sTable .= $oTable->header_cell($lngAct[$value2["perm"]][$value3]); + array_push($aSecondHeaderRow, ""); + + } +} + + //checkbox for all rights +$sTable .= $oTable->header_cell(i18n("Check all")); +array_push($aSecondHeaderRow, ""); +$sTable .= $oTable->end_row(); + +$colspan++; + +$sTable .= $oTable->header_row(); +$sTable .= $oTable->header_cell(' ', 'center', '', '', 0); +$sTable .= $oTable->header_cell(' ', 'center', '', '', 0); + +// Put the checkbox in the table +foreach($aSecondHeaderRow as $value){ + $sTable .= $oTable->header_cell($value, "center", "", "", 0); +} +$sTable .= $oTable->end_row(); + +//Select the itemid�s +$sql = "SELECT * FROM ".$cfg["tab"]["lay"]." WHERE idclient='".Contenido_Security::toInteger($rights_client)."' ORDER BY name"; +$db->query($sql); + + +while ($db->next_record()) { + + $sTplName = clHtmlEntities($db->f("name")); + $sDescription = clHtmlEntities($db->f("description")); + + + $sTable .= $oTable->row(); + $sTable .= $oTable->cell($sTplName, "", "", " class=\"td_rights0\"", false); + $sTable .= $oTable->cell($sDescription, "", "", " class=\"td_rights1\" style=\"white-space:normal; \"", false); + + + //set javscript array for itemids + $sJsBefore .= "itemids[\"".$db->f("idlay")."\"]=\"x\";\n"; + + // look for possible actions in mainarea[] + foreach($right_list["lay"] as $value2) + { + + //if there area some + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { + //does the user have the right + if(in_array($value2["perm"]."|$value3|".$db->f("idlay"),array_keys($rights_list_old))) + $checked="checked=\"checked\""; + else + $checked=""; + + + //set the checkbox the name consits of areait+actionid+itemid + //"f("idlay")."]\" value=\"x\" $checked> + $sTable .= $oTable->cell("f("idlay")."]\" value=\"x\" $checked>", "", "", " class=\"td_rights3\"", false ); + + } + + + } +//checkbox for checking all actions fore this itemid + $sTable .= $oTable->cell("f("idlay")."\" value=\"\" onClick=\"setRightsFor('".$value2["perm"]."','$value3','".$db->f("idlay")."')\">","", "", " class=\"td_rights3\"", false); + $sTable .= $oTable->end_row(); + +} + +$sTable .= $oTable->end_row(); +$sTable .= $oTable->row(); +$sTable .= $oTable->sumcell(" ","right"); +$sTable .= $oTable->end_row(); +$sTable .= $oTable->end_table(); + + +// generate Template +$oTpl->set('s', 'JS_SCRIPT_BEFORE', $sJsBefore); +$oTpl->set('s', 'JS_SCRIPT_AFTER', $sJsAfter); +$oTpl->set('s', 'RIGHTS_CONTENT', $sTable); +$oTpl->set('s', 'EXTERNAL_SCRIPTS', $sJsExternal); +$oTpl->generate('templates/standard/'.$cfg['templates']['rights_inc']); + +?> diff --git a/branches/conlite20/conlite/includes/grouprights_members.inc.php b/branches/conlite20/conlite/includes/grouprights_members.inc.php new file mode 100644 index 0000000..60f9f9f --- /dev/null +++ b/branches/conlite20/conlite/includes/grouprights_members.inc.php @@ -0,0 +1,232 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-06-03 + * modified 2008-06-26, Dominik Ziegler, add security fix + * modified 2009-11-06, Murat Purc, replaced deprecated functions (PHP 5.3 ready) + * + * $Id: grouprights_members.inc.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$db2 = new DB_ConLite; +$tpl3 = new Template; + +if(!$perm->have_perm_area_action($area,$action)) +{ + $notification->displayNotification("error", i18n("Permission denied")); +} else { + if ( !isset($groupid) ) + { + + } else { + if (($action == "group_deletemember") &&( $perm->have_perm_area_action($area, $action))) + { + $aDeleteMembers = array(); + if (!is_array($_POST['user_in_group'])) { + if ($_POST['user_in_group'] > 0) { + array_push($aDeleteMembers, $_POST['user_in_group']); + } + } else { + $aDeleteMembers = $_POST['user_in_group']; + } + + foreach ($aDeleteMembers as $idgroupuser) { + $idgroupuser = Contenido_Security::toInteger($idgroupuser); + + $sql = "DELETE FROM " + .$cfg["tab"]["groupmembers"]." + WHERE idgroupuser = '". $idgroupuser ."'"; + $db->query($sql); + } + } + + if (($action == "group_addmember") && ($perm->have_perm_area_action($area, $action))) + { + if (is_array($newmember)) + { + foreach ($newmember as $key => $value) + { + $myUser = new User(); + + if (!$myUser->loadUserByUserID($value)) + { + $myUser->loadUserByUserName($value); + } + + if ($myUser->getField("user_id") == "") + { + + } else { + + $sql = "SELECT * FROM + ".$cfg["tab"]["groupmembers"]." WHERE + group_id = '".Contenido_Security::escapeDB($groupid, $db)."' AND + user_id = '".Contenido_Security::escapeDB($myUser->getField("user_id"), $db)."'"; + $db->query($sql); + if (!$db->next_record()) + { + $nextid = $db->nextid($cfg["tab"]["groupmembers"]); + $sql = "INSERT INTO + ".$cfg["tab"]["groupmembers"]." + SET idgroupuser = '".Contenido_Security::toInteger($nextid)."', + group_id = '".Contenido_Security::escapeDB($groupid, $db)."', + user_id = '".Contenido_Security::escapeDB($myUser->getField("user_id"), $db)."'"; + + $db->query($sql); + + if ($notiAdded == "") + { + $notiAdded .= $myUser->getField("realname"); + } else { + $notiAdded .= ", ".$myUser->getField("realname"); + } + } else { + if ($notiAlreadyExisting == "") + { + $notiAlreadyExisting .= $myUser->getField("realname"); + } else { + $notiAlreadyExisting .= ", ".$myUser->getField("realname"); + } + + } + } + } + } + } + $tab1 = $cfg["tab"]["groupmembers"]; + $tab2 = $cfg["tab"]["phplib_auth_user_md5"]; + + $sortby = getEffectiveSetting ("backend","sort_backend_users_by",""); + + if ($sortby!='') { + $sql = "select ".$tab1.".idgroupuser, ".$tab1.".user_id FROM ".$tab1." + INNER JOIN ".$tab2." ON ".$tab1.".user_id = ".$tab2.".user_id WHERE + group_id = '".Contenido_Security::escapeDB($groupid, $db)."' order by ".$tab2.".".$sortby; + } else { + #Show previous behaviour by default + $sql = "select ".$tab1.".idgroupuser, ".$tab1.".user_id FROM ".$tab1." + INNER JOIN ".$tab2." ON ".$tab1.".user_id = ".$tab2.".user_id WHERE + group_id = '".Contenido_Security::escapeDB($groupid, $db)."' order by ".$tab2.".realname, ".$tab2.".username"; + } + + $db->query($sql); + + $sInGroupOptions = ''; + $aAddedUsers = array(); + $myUser = new User(); + + while ($db->next_record()) + { + $bgColor = !$bgColor; + + if ($bgColor) { + $color = $cfg["color"]["table_light"]; + } else { + $color = $cfg["color"]["table_dark"]; + } + + $myUser->loadUserByUserID($db->f("user_id")); + $aAddedUsers[] = $myUser->getField("username"); + + $sOptionLabel = $myUser->getField("realname").' ('.$myUser->getField("username").')'; + $sOptionValue = $db->f("idgroupuser"); + if ($sOptionValue != '' && $sOptionLabel != '') { + $sInGroupOptions .= ''."\n"; + } + } + + $tpl3->set('s', 'IN_GROUP_OPTIONS', $sInGroupOptions); + + $bgColor = !$bgColor; + + if ($bgColor) { + $color = $cfg["color"]["table_light"]; + } else { + $color = $cfg["color"]["table_dark"]; + } + + $userlist = new Users; + $users = $userlist->getAccessibleUsers(explode(',',$auth->auth["perm"])); + + $sortby = getEffectiveSetting ("backend","sort_backend_users_by",""); + if ($sortby!='') { + //Sort user list by given criteria + unset($users2); + $sql = "SELECT * FROM ".$cfg["tab"]["phplib_auth_user_md5"]." ORDER BY ".$sortby; + $db->query($sql); + while ($db->next_record()) { + $users2[$db->f("user_id")] = $users[$db->f("user_id")]; + } + $users = $users2; + } + + $bAddedUser = false; + $sNonGroupOptions = ''; + if ( is_array($users) ) { + + foreach ($users as $key => $value) { + if (!in_array($value["username"], $aAddedUsers)) + { + $bAddedUser = true; + + $sOptionLabel = $value["realname"] . " (".$value["username"].")"; + $sOptionValue = $key; + if ($sOptionValue != '' && $sOptionLabel != '') { + $sNonGroupOptions .= ''."\n"; + } + } + } + + } + $tpl3->set('s', 'NON_GROUP_OPTIONS', $sNonGroupOptions); + + $tpl3->set('s', 'CATNAME', i18n("Manage group members")); + $tpl3->set('s', 'BGCOLOR', $cfg["color"]["table_header"]); + $tpl3->set('s', 'BGCOLOR_CONTENT', $cfg["color"]["table_dark"]); + $tpl3->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl3->set('s', 'CATFIELD', " "); + $tpl3->set('s', 'FORM_ACTION', $sess->url('main.php')); + $tpl3->set('s', 'AREA', $area); + $tpl3->set('s', 'GROUPID', $groupid); + $tpl3->set('s', 'FRAME', $frame); + $tpl3->set('s', 'IDLANG', $lang); + $tpl3->set('s', 'RECORD_ID_NAME', 'groupid'); + $tpl3->set('s', 'ADD_ACTION', 'group_addmember'); + $tpl3->set('s', 'DELETE_ACTION', 'group_deletemember'); + $tpl3->set('s', 'STANDARD_ACTION', 'group_addmember'); + $tpl3->set('s', 'IN_GROUP_VALUE', $_POST['filter_in']); + $tpl3->set('s', 'NON_GROUP_VALUE', $_POST['filter_non']); + $tpl3->set('s', 'DISPLAY_OK', 'none'); + $tpl3->set('s', 'RELOADSCRIPT', ''); + + # Generate template + $tpl3gen = $tpl3->generate($cfg['path']['templates'] . $cfg['templates']['grouprights_memberselect'],true); + echo $tpl3gen; + } +} +?> diff --git a/branches/conlite20/conlite/includes/grouprights_mod.inc.php b/branches/conlite20/conlite/includes/grouprights_mod.inc.php new file mode 100644 index 0000000..ad84eec --- /dev/null +++ b/branches/conlite20/conlite/includes/grouprights_mod.inc.php @@ -0,0 +1,169 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-26, Dominik Ziegler, add security fix + * modified 2008-07-29, Bilal Arslan, moved inline html to template + * + * $Id: grouprights_mod.inc.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +//notice $oTpl is filled and generated in file rights.inc.php this file renders $oTpl to browser +include_once($cfg['path']['contenido'].'includes/grouprights.inc.php'); + +//set the areas which are in use fore selecting these +$possible_area = "'".implode("','", $area_tree[$perm->showareas("mod")])."'"; +$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='".Contenido_Security::escapeDB($groupid, $db)."' AND idclient='".Contenido_Security::toInteger($rights_client)."' AND A.type = 1 AND idlang='".Contenido_Security::toInteger($rights_lang)."' AND B.idarea IN ($possible_area) AND idcat!='0' AND A.idaction = C.idaction AND A.idarea = C.idarea AND A.idarea = B.idarea"; +$db->query($sql); +$rights_list_old = array (); +while ($db->next_record()) { //set a new rights list fore this user + $rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x"; +} + +if (($perm->have_perm_area_action($area, $action)) && ($action == "group_edit")) +{ + saverights(); +}else { + if (!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } +} + +// Init the temp variables +$sJsBefore = ''; +$sJsAfter = ''; +$sJsExternal = ''; +$sTable = ''; + +// declare new javascript variables; +$sJsBefore .= "var itemids=new Array(); + var actareaids=new Array();"; +$colspan=0; + +$table = new Table($cfg["color"]["table_border"], "solid", 0, 2, $cfg["color"]["table_header"], $cfg["color"]["table_light"], $cfg["color"]["table_dark"], 0, 0); + +$sTable .= $table->start_table(); +$sTable .= $table->header_row(); +$sTable .= $table->header_cell(i18n("Module name")); +$sTable .= $table->header_cell(i18n("Description")); +$aSecondHeaderRow = array(); +$possible_areas=array(); +// look for possible actions in mainarea [] +foreach($right_list["mod"] as $value2) +{ + //if there are some actions + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { //set the areas that are in use + $possible_areas[$value2["perm"]]=""; + + $colspan++; + //set the possible areas and actions for this areas + $sJsBefore .= "actareaids[\"$value3|".$value2["perm"]."\"]=\"x\";\n"; + + //checkbox for the whole action + $sTable .= $table->header_cell($lngAct[$value2["perm"]][$value3]); + array_push($aSecondHeaderRow, ""); + + } +} + + +//checkbox for all rights +$sTable .= $table->header_cell(i18n('Check all')); +array_push($aSecondHeaderRow, ""); +$sTable .= $table->end_row(); +$colspan++; + +$sTable .= $table->header_row(); +$sTable .= $table->header_cell(' ',"center", '', '', 0); +$sTable .= $table->header_cell(' ',"center", '', '', 0); + +foreach ($aSecondHeaderRow as $value) { + $sTable .= $table->header_cell($value,"center", '', '', 0); +} +$sTable .= $table->end_row(); + +//Select the itemid�s +$sql = "SELECT * FROM ".$cfg["tab"]["mod"]." WHERE idclient='".Contenido_Security::toInteger($rights_client)."' ORDER BY name"; +$db->query($sql); + +while ($db->next_record()) { + + $tplname = clHtmlEntities($db->f("name")); + $description = clHtmlEntities($db->f("description")); + + $sTable .= $table->row(); + $sTable .= $table->cell($tplname,"", "", " class=\"td_rights0\"", false); + $sTable .= $table->cell($description,"", "", " class=\"td_rights1\" style=\"white-space:normal;\"", false); + + //set javscript array for itemids + $sJsAfter .= "itemids[\"".$db->f("idmod")."\"]=\"x\";\n"; + + // look for possible actions in mainarea[] + foreach($right_list["mod"] as $value2) + { + + //if there area some + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { + //does the user have the right + if(in_array($value2["perm"]."|$value3|".$db->f("idmod"),array_keys($rights_list_old))) + $checked="checked=\"checked\""; + else + $checked=""; + + //set the checkbox the name consits of areait+actionid+itemid + $sTable .= $table->cell("f("idmod")."]\" value=\"x\" $checked>","", "", " class=\"td_rights2\"", false); + + + } + } + //checkbox for checking all actions fore this itemid + $sTable .= $table->cell("f("idmod")."\" value=\"\" onClick=\"setRightsFor('".$value2["perm"]."','$value3','".$db->f("idmod")."')\">","", "", " class=\"td_rights3\"", false); + + +} + +$sTable .= $table->end_row(); +$sTable .= $table->row(); +$sTable .= $table->sumcell(" ","right"); +$sTable .= $table->end_row(); +$sTable .= $table->end_table(); + +// Set the temp variables +$oTpl->set('s', 'JS_SCRIPT_BEFORE', $sJsBefore); +$oTpl->set('s', 'JS_SCRIPT_AFTER', $sJsAfter); +$oTpl->set('s', 'RIGHTS_CONTENT', $sTable); +$oTpl->set('s', 'EXTERNAL_SCRIPTS', $sJsExternal); +$oTpl->generate('templates/standard/'.$cfg['templates']['rights_inc']); + + +?> diff --git a/branches/conlite20/conlite/includes/grouprights_str.inc.php b/branches/conlite20/conlite/includes/grouprights_str.inc.php new file mode 100644 index 0000000..7ce3f95 --- /dev/null +++ b/branches/conlite20/conlite/includes/grouprights_str.inc.php @@ -0,0 +1,227 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-26, Dominik Ziegler, add security fix + * modified 2008-07-29, Bilal Arslan, moved inline html to template + * + * $Id: grouprights_str.inc.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +//notice $oTpl is filled and generated in file rights.inc.php this file renders $oTpl to browser +include_once($cfg['path']['contenido'].'includes/grouprights.inc.php'); + +//set the areas which are in use fore selecting these +$possible_area = "'".implode("','", $area_tree[$perm->showareas("str")])."'"; +$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='".Contenido_Security::escapeDB($groupid, $db)."' AND idclient='".Contenido_Security::toInteger($rights_client)."' AND A.type = 1 AND idlang='".Contenido_Security::toInteger($rights_lang)."' AND B.idarea IN ($possible_area) AND idcat!='0' AND A.idaction = C.idaction AND A.idarea = C.idarea AND A.idarea = B.idarea"; +$db->query($sql); +$rights_list_old = array (); +while ($db->next_record()) { //set a new rights list fore this user + $rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x"; +} + +if (($perm->have_perm_area_action($area, $action)) && ($action == "group_edit")) +{ + saverights(); +}else { + if (!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } +} + +// Init the temp variables +$sJsBefore = ''; +$sJsAfter = ''; +$sJsExternal = ''; +$sTable = ''; + + $sJsExternal = ''; + $sJsExternal .= ''; + + // declare new javascript variables; + $sJsBefore = " var itemids=new Array(); + var actareaids=new Array();"; + $colspan=0; + + $table = new Table($cfg["color"]["table_border"], "solid", 0, 2, $cfg["color"]["table_header"], $cfg["color"]["table_light"], $cfg["color"]["table_dark"], 0, 0); + + $sTable .= $table->start_table(); + $sTable .= $table->header_row(); + $sTable .= $table->header_cell(i18n("Category"),"left"); + $sTable .= $table->header_cell(" ","left"); + + $possible_areas=array(); + $aSecondHeaderRow = array(); + // look for possible actions in mainarea [] in str and con + foreach($right_list["str"] as $value2) { + //if there are some actions + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { //set the areas that are in use + + # HACK! + if ($value3 != "str_newtree") + { + $possible_areas[$value2["perm"]]=""; + + + $colspan++; + //set the possible areas and actions for this areas + $sJsBefore .= "actareaids[\"$value3|".$value2["perm"]."\"]=\"x\";"; + + $sTable .= $table->header_cell($lngAct[$value2["perm"]][$value3]); + array_push($aSecondHeaderRow, ""); + } + } + } + + //checkbox for all rights + $sTable .= $table->header_cell(i18n("Check all")); + array_push($aSecondHeaderRow, ""); + $sTable .= $table->end_row(); + $colspan++; + + $sTable .= $table->header_row(); + $sTable .= $table->header_cell(' ',"center", '', '', 0); + $sTable .= $table->header_cell(' ',"center", '', '', 0); + + foreach ($aSecondHeaderRow as $value) { + $sTable .= $table->header_cell($value,"center", '', '', 0); + } + $sTable .= $table->end_row(); + + $sql = "SELECT A.idcat, level, name,parentid FROM ".$cfg["tab"]["cat_tree"]." AS A, ".$cfg["tab"]["cat"]." AS B, ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND C.idlang='".Contenido_Security::toInteger($rights_lang)."' AND B.idclient='".Contenido_Security::toInteger($rights_client)."' ORDER BY idtree"; + $db->query($sql); + $counter=array(); + $parentid="leer"; + + $aRowname = array(); + $iLevel = 0; + + while ($db->next_record()) { + + if ($db->f("level") == 0 && $db->f("preid") != 0) { + echo " "; + }else { + if ($db->f("level") < $iLevel) { + $iDistance = $iLevel-$db->f("level"); + + for ($i = 0; $i < $iDistance; $i++) { + array_pop($aRowname); + } + $iLevel = $db->f("level"); + } + + if ($db->f("level") >= $iLevel) { + if ($db->f("level") == $iLevel) { + array_pop($aRowname); + } else { + $iLevel = $db->f("level"); + } + array_push($aRowname, $db->f("idcat")); + } + + //find out parentid for inheritance + //if parentid is the same increase the counter + if($parentid==$db->f("parentid")){ + + $counter[$parentid]++; + }else{ + $parentid=$db->f("parentid"); + // if these parentid is in use increase the counter + if(isset($counter[$parentid])){ + $counter[$parentid]++; + }else{ + $counter[$parentid]=0; + } + + + } + //set javscript array for itemids + $sJsAfter .= "itemids[\"".$db->f("idcat")."\"]=\"x\";"; + + $spaces = ""; + + for ($i=0; $i<$db->f("level"); $i++) { + $spaces = $spaces . "    "; + } + + $sTable .= $table->row("id=\"".implode('_', $aRowname)."\""); + $sTable .= $table->cell(' '.$db->f("name"),"", "", " class=\"td_rights0\"", false); + $sTable .= $table->cell(" f("idcat")."')\" class=\"action\">","",""," class=\"td_rights0\"", false); + + // look for possible actions in mainarea[] + + foreach($right_list["str"] as $value2){ + //if there area some + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) { + # HACK! + if ($value3 != "str_newtree") { + //does the user have the right + if(in_array($value2["perm"]."|$value3|".$db->f("idcat"),array_keys($rights_list_old))) + $checked="checked=\"checked\""; + else + $checked=""; + + //set the checkbox the name consits of areaid+actionid+itemid the id = parebntid+couter for these parentid+areaid+actionid + $sTable .= $table->cell("f("idcat")."]\" value=\"x\" $checked>", "", "", " class=\"td_rights2\"", false); + } + } + } + + //checkbox for checking all actions fore this itemid + $sTable .= $table->cell("f("idcat")."\" value=\"\" onClick=\"setRightsFor('".$value2["perm"]."','$value3','".$db->f("idcat")."')\">", "", "", " class=\"td_rights2\"", false); + } +} + + +$sTable .= $table->end_row(); +$sTable .= $table->row(); +$sTable .= $table->sumcell(" ","right"); +$sTable .= $table->end_row(); +$sTable .= $table->end_table(); +$sJsAfter .=" + aTranslations = new Object(); + aTranslations['pfeil_links.gif'] = '".i18n("Apply rights for this category to all categories on the same level or above")."'; + aTranslations['pfeil_runter.gif'] = '".i18n("Apply rights for this category to all categories below the current category")."'; + setImageTags(aTranslations); + init('".i18n("Open category")."', '".i18n("Close category")."');"; + +$oTpl->set("s", "NOTIFICATION","" ); +$oTpl->set("s", "OB_CONTENT", ""); +$oTpl->set('s', 'RIGHTS_CONTENT', $sTable); +$oTpl->set("s", "JS_SCRIPT_BEFORE", $sJsBefore); +$oTpl->set("s", "JS_SCRIPT_AFTER", $sJsAfter); +$oTpl->set("s", "EXTERNAL_SCRIPTS", $sJsExternal); + +$oTpl->generate('templates/standard/'.$cfg['templates']['rights_inc']); + + +?> diff --git a/branches/conlite20/conlite/includes/grouprights_tpl.inc.php b/branches/conlite20/conlite/includes/grouprights_tpl.inc.php new file mode 100644 index 0000000..36eeac1 --- /dev/null +++ b/branches/conlite20/conlite/includes/grouprights_tpl.inc.php @@ -0,0 +1,170 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-26, Dominik Ziegler, add security fix + * + * $Id: grouprights_tpl.inc.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +//notice $oTpl is filled and generated in file rights.inc.php this file renders $oTpl to browser +include_once($cfg['path']['contenido'].'includes/grouprights.inc.php'); + +//set the areas which are in use fore selecting these +$possible_area = "'".implode("','", $area_tree[$perm->showareas("tpl")])."'"; +$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='".Contenido_Security::escapeDB($groupid, $db)."' AND idclient='".Contenido_Security::toInteger($rights_client)."' AND A.type = 1 AND idlang='".Contenido_Security::toInteger($rights_lang)."' AND B.idarea IN ($possible_area) AND idcat!='0' AND A.idaction = C.idaction AND A.idarea = C.idarea AND A.idarea = B.idarea"; +$db->query($sql); +$rights_list_old = array (); +while ($db->next_record()) { //set a new rights list fore this user + $rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x"; +} + +if (($perm->have_perm_area_action($area, $action)) && ($action == "group_edit")) +{ + saverights(); +}else { + if (!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } +} +// Temp variables +$sJsBefore = ''; +$sJsAfter = ''; +$sTable = ''; + +// declare new javascript variables; +$sJsBefore .= " var itemids = new Array(); + var actareaids = new Array(); +"; + +$colspan=0; + +$table = new Table($cfg["color"]["table_border"], "solid", 0, 2, $cfg["color"]["table_header"], $cfg["color"]["table_light"], $cfg["color"]["table_dark"], 0, 0); + +$sTable .= $table->start_table(); +$sTable .= $table->header_row(); +$sTable .= $table->header_cell(i18n("Template name")); +$sTable .= $table->header_cell(i18n("Description")); + + +$aSecondHeaderRow = array(); +$possible_areas=array(); +// look for possible actions in mainarea [] + +foreach($right_list["tpl"] as $value2) +{ + //if there are some actions + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { //set the areas that are in use + $possible_areas[$value2["perm"]]=""; + + $colspan++; + //set the possible areas and actions for this areas + $sJsBefore .= "actareaids[\"$value3|".$value2["perm"]."\"]=\"x\"; \n"; + + + //checkbox for the whole action + $sTable .= $table->header_cell($lngAct[$value2["perm"]][$value3]); + array_push($aSecondHeaderRow, ""); + } +} + + +//checkbox for all rights +$sTable .= $table->header_cell(i18n('Check all')); +array_push($aSecondHeaderRow, ""); +$sTable .= $table->end_row(); +$colspan++; + +$sTable .= $table->header_row(); +$sTable .= $table->header_cell(' ',"center", '', '', 0); +$sTable .= $table->header_cell(' ',"center", '', '', 0); + +foreach ($aSecondHeaderRow as $value) { + $sTable .= $table->header_cell($value,"center", '', '', 0); +} +$sTable .= $table->end_row(); + + + +//Select the itemid�s +$sql = "SELECT * FROM ".$cfg["tab"]["tpl"]." WHERE idclient='".Contenido_Security::toInteger($rights_client)."' ORDER BY name"; +$db->query($sql); + + +while ($db->next_record()) { + + $tplname = clHtmlEntities($db->f("name")); + $description = clHtmlEntities($db->f("description")); + + $sTable .= $table->row(); + $sTable .= $table->cell($tplname,"", "", " class=\"td_rights0\"", false); + $sTable .= $table->cell($description,"", "", " class=\"td_rights1\" style=\"white-space:normal;\"", false); + + //set javscript array for itemids + $sJsAfter .= "itemids[\"".$db->f("idtpl")."\"]=\"x\";\n"; + + // look for possible actions in mainarea[] + foreach($right_list["tpl"] as $value2) + { + + //if there area some + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { + //does the user have the right + if(in_array($value2["perm"]."|$value3|".$db->f("idtpl"),array_keys($rights_list_old))) + $checked="checked=\"checked\""; + else + $checked=""; + + //set the checkbox the name consits of areait+actionid+itemid + $sTable .= $table->cell("f("idtpl")."]\" value=\"x\" $checked>","", "", " class=\"td_rights2\"", false); + + + } + } + //checkbox for checking all actions fore this itemid + $sTable .= $table->cell("f("idtpl")."\" value=\"\" onClick=\"setRightsFor('".$value2["perm"]."','$value3','".$db->f("idtpl")."')\">","", "", " class=\"td_rights3\"", false); +} +$sTable .=$table->end_row(); +$sTable .=$table->row(); +$sTable .=$table->sumcell(" ","right"); +$sTable .=$table->end_row(); +$sTable .=$table->end_table(); + + +$oTpl->set('s', 'JS_SCRIPT_BEFORE', $sJsBefore); +$oTpl->set('s', 'JS_SCRIPT_AFTER', $sJsAfter); +$oTpl->set('s', 'RIGHTS_CONTENT', $sTable); +$oTpl->set('s', 'EXTERNAL_SCRIPTS', $sJsExternal); +$oTpl->generate('templates/standard/'.$cfg['templates']['rights_inc']); + +?> diff --git a/branches/conlite20/conlite/includes/include.CMS_EASYIMG.php b/branches/conlite20/conlite/includes/include.CMS_EASYIMG.php new file mode 100644 index 0000000..8186fec --- /dev/null +++ b/branches/conlite20/conlite/includes/include.CMS_EASYIMG.php @@ -0,0 +1,163 @@ + + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-12-10 + * modified 2008-06-26, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.CMS_EASYIMG.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if ($doedit == "1") { + cInclude("includes","functions.upl.php"); + $rootpath = $cfgClient[$client]["path"]["htmlpath"] . $cfgClient[$client]["upload"]; + + if ($action == "cancel") + { + header("location:".$sess->url($cfg['path']['contenido_fullhtml']."external/backendedit/front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&changeview=edit&client=$client")); + } else { + if (count($_FILES) == 1) + { + foreach ($_FILES['uplfile']['name'] as $key => $value) + { + if (file_exists($_FILES['uplfile']['tmp_name'][$key])) + { + $friendlyName = uplCreateFriendlyName($_FILES['uplfile']['name'][$key]); + move_uploaded_file($_FILES['uplfile']['tmp_name'][$key], $cfgClient[$client]['upl']['path'].$upldir.$friendlyName); + + uplSyncDirectory($upldir); + + if ($path == "") { $path = "/"; } + + $sql = "SELECT idupl FROM ".$cfg["tab"]["upl"]." WHERE dirname='$upldir' AND filename='$friendlyName'"; + $db->query($sql); + $db->next_record(); + + $CMS_LINK = $rootpath . $upldir. $friendlyName; + + conSaveContentEntry($idartlang, "CMS_IMG", $typenr, $db->f("idupl")); + // Note: Not conMakeArticleIndex as img not relevant for the index + conGenerateCodeForArtInAllCategories($idart); + } + + } + } + + header("location:".$sess->url($cfgClient[$client]["path"]["htmlpath"]."front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&changeview=edit")); + } +} + +?> + + +contenido +contenido.css"> + + + + + + + + + + +
spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">
+ +setVar("lang",$lang); + $form->setVar("typenr",$typenr); + $form->setVar("idart",$idart); + $form->setVar("idcat",$idcat); + $form->setVar("idartlang",$idartlang); + $form->setVar("contenido",$sess->id); + $form->setVar("action",10); + $form->setVar("doedit",1); + $form->setVar("type",$type); + $form->setVar("changeview","edit"); + $form->setVar("CMS_LINK", $a_content["CMS_LINK"][$typenr]); + + $header = sprintf(i18n("Edit image for container %s"),$typenr); + $form->addHeader($header); + + + $upload = new cHTMLUpload("uplfile[]"); + + + $form->add(i18n("Upload image"), $upload); + + $form->unsetActionButton("submit"); + + $form->setActionButton("cancel", $cfg["path"]["contenido_fullhtml"]."images/but_cancel.gif", i18n("Discard changes"), "c", "cancel"); + $form->setActionButton("submit", $cfg['path']['contenido_fullhtml']."images/but_ok.gif", i18n("Save changes"), "s"); + echo $form->render(); +?> +
+ + \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.CMS_HEAD.php b/branches/conlite20/conlite/includes/include.CMS_HEAD.php new file mode 100644 index 0000000..7647321 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.CMS_HEAD.php @@ -0,0 +1,99 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-07 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-01-05, Timo Trautmann, add clHtmlSpecialChars() instead of htmlentitydecode() because of UTF-8 Bug + * + * $Id: include.CMS_HEAD.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +if ( $doedit == "1" ) { + conSaveContentEntry ($idartlang, "CMS_HEAD", $typenr, $CMS_HEAD); + conMakeArticleIndex ($idartlang, $idart); + conGenerateCodeForArtInAllCategories($idart); + header("location:".$sess->url($cfg['path']['contenido_fullhtml']."external/backendedit/front_content.php?area=$tmp_area&action=con_editart&idart=$idart&idartlang=$idartlang&idcat=$idcat&changeview=edit&client=$client").""); + +} +header("Content-Type: text/html; charset={$encoding[$lang]}"); +?> + + + +contenido.css"> + + + + + + + + + + +
spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">
+ +"; + $sess->hidden_session(); + echo " "; +// echo " "; + echo " "; + echo " "; + echo " "; + echo " "; + echo " "; + echo " "; + echo " "; + echo ""; + + echo " "; + + if ($type == "CMS_HEAD") { + echo " "; + } + + $tmp_area = "con_editcontent"; + + echo " "; + + echo "
 ".$typenr.". ".$a_description[$type][$typenr].": "; + echo " "; + echo "

+ + +
+ "; + +?> +
+ + diff --git a/branches/conlite20/conlite/includes/include.CMS_HTML.php b/branches/conlite20/conlite/includes/include.CMS_HTML.php new file mode 100644 index 0000000..8955b27 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.CMS_HTML.php @@ -0,0 +1,109 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-07 + * modified 2008-06-16, H. Librenz, Hotfix: check for illegal calls added + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.CMS_HTML.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if ( $doedit == "1" || $doedit == "2" ) +{ + conSaveContentEntry($idartlang, "CMS_HTML", $typenr, $CMS_HTML); + conMakeArticleIndex ($idartlang, $idart); + conGenerateCodeForArtInAllCategories($idart); +} +if ( $doedit == "1" ) +{ + header( "location:".$sess->url($cfg['path']['contenido_fullhtml']."external/backendedit/front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&changeview=edit&client=$client").""); +} +header("Content-Type: text/html; charset={$encoding[$lang]}"); +?> + + + +contenido.css"> + + + + + + + + + + + + + +
spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">
+\n"; + echo " ".$sess->hidden_session(); + echo " \n"; + // echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + + $tmp_area = "con_editcontent"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
 ".$typenr.". ".$a_description[$type][$typenr].": 
"; + + include ($cfg["path"]["wysiwyg"] . 'editor.php'); + + echo "\n

\n"; + echo " url($cfgClient[$client]["path"]["htmlpath"]."front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&lang=$lang")."\">\n"; + echo " \n"; + echo " \n"; + echo "
\n"; + echo " \n"; +?> +
+ + \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.CMS_HTMLHEAD.php b/branches/conlite20/conlite/includes/include.CMS_HTMLHEAD.php new file mode 100644 index 0000000..a3e4067 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.CMS_HTMLHEAD.php @@ -0,0 +1,111 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2002-03-02 + * modified 2008-06-16, Holger Librenz, Hotfix: check for illegal calls added + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.CMS_HTMLHEAD.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if ( $doedit == "1" || $doedit == "2" ) +{ + conSaveContentEntry ($idartlang, "CMS_HTMLHEAD", $typenr, $CMS_HTML); + conMakeArticleIndex ($idartlang, $idart); + conGenerateCodeForArtInAllCategories($idart); +} + +if ( $doedit == "1" ) +{ + header("location:" . $sess->url($cfg['path']['contenido_fullhtml']."external/backendedit/front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&changeview=edit&client=$client")); +} +header("Content-Type: text/html; charset={$encoding[$lang]}"); +?> + + + + contenido.css" /> + + + + + + + + + + + + + +
spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">
+\n"; + echo " ".$sess->hidden_session(); + echo " \n"; +// echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + + $tmp_area = "con_editcontent"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
 ".$typenr.". ".$a_description[$type][$typenr].": 
\n"; + + include ($cfg["path"]["wysiwyg"] . 'editor.php'); + + echo "\n

\n"; + echo " url($cfgClient[$client]["path"]["htmlpath"]."front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&lang=$lang")."\">\n"; + echo " \n"; + echo " \n"; + echo "
\n"; + echo " \n"; +?> +
+ + \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.CMS_HTMLTEXT.php b/branches/conlite20/conlite/includes/include.CMS_HTMLTEXT.php new file mode 100644 index 0000000..b137565 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.CMS_HTMLTEXT.php @@ -0,0 +1,97 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-07 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.CMS_HTMLTEXT.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +if ($doedit == "1") { + conSaveContentEntry ($idartlang, "CMS_HTMLTEXT", $typenr, $CMS_HTMLTEXT); + conMakeArticleIndex ($idartlang, $idart); + conGenerateCodeForArtInAllCategories($idart); + header("Location:".$sess->url($cfg['path']['contenido_fullhtml']."external/backendedit/front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&lang=$lang&changeview=edit&client=$client").""); +} +header("Content-Type: text/html; charset={$encoding[$lang]}"); +?> + + + + contenido.css"> + + + + + + + + + + +
spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">
+ +"; + $sess->hidden_session(); + echo " "; +// echo " "; + echo " "; + echo " "; + echo " "; + echo " "; + echo ""; + echo " "; + echo " "; + echo ""; + echo " "; + + echo " "; + $tmp_area = "con_editcontent"; + echo " "; + + echo "
 ".$typenr.". ".$a_description[$type][$typenr].": "; + echo " "; + echo "

+ + +
+ "; + +?> + + + + + + +
+ + \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.CMS_IMG.php b/branches/conlite20/conlite/includes/include.CMS_IMG.php new file mode 100644 index 0000000..314fc48 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.CMS_IMG.php @@ -0,0 +1,289 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-12-10 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-07-07, Dominik Ziegler, fixed language bug + * modified 2009-11-06, Murat Purc, replaced deprecated functions (PHP 5.3 ready) + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.CMS_IMG.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if ($doedit == "1") { + conSaveContentEntry ($idartlang, "CMS_IMG", $typenr, $CMS_IMG); + conSaveContentEntry ($idartlang, "CMS_IMGDESCR", $typenr, $CMS_IMGDESCR); + conMakeArticleIndex ($idartlang, $idart); + conGenerateCodeForArtInAllCategories($idart); + header("location:".$sess->url($cfg['path']['contenido_fullhtml']."external/backendedit/front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&changeview=edit&client=$client")); +} + +?> + + +contenido +contenido.css"> + + + + + + + + + + +
spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">
+ +query($sql); + $db->next_record(); + $img_dir = $db->f("dirname"); + } + + $sql = "SELECT * FROM ".$cfg["tab"]["upl"]." WHERE idclient='".$client."' AND filetype IN ('jpeg', 'jpg', 'gif', 'png') ORDER BY dirname, filename ASC"; + $db->query($sql); + + $ds_name = Array(); + $ds_lvl = array(); + + while ( $db->next_record() ) + { + + $descr = $db->f("description"); + + if ( strlen($descr) > 24 ) + { + $descr = substr($descr, 0, 24); + $descr .= ".."; + } + + // collect data for dir selection + $dirname = $db->f("dirname"); + $tmp = explode('/', $dirname); + + $mypath = array(); + $mylvl = 0; + + foreach ($tmp as $value) + { + if ($value != "") + { + /* Make sure an entry exists for each path component */ + $mypath[]= $value; + + $thispath = implode("/", $mypath)."/"; + + if (!in_array($thispath, $ds_name)) + { + $mylvl++; + $ds_lvl[$thispath] = $mylvl; + $ds_name[$thispath] = $value; + $ds_fullpath[$thispath] = $thispath; + + } + } + } + if (!in_array($tmp[count($tmp)-2],$ds_name)) + { + $ds_lvl[$dirname] = count($tmp)-1; + $ds_name[$dirname] = $tmp[count($tmp)-2]; + $ds_fullpath[$dirname] = $db->f("dirname"); + } + + if (strcmp($img_dir,$db->f("dirname"))==0) + { + $img_list[] = $db->f("filename"); + $img_id[] = $db->f("idupl"); + $img_descr[] = $descr; + } + + } + + $form = new UI_Table_Form("editcontent", $cfg["path"]["contenido_fullhtml"].$cfg["path"]["includes"]."include.backendedit.php"); + $form->setVar("lang",$lang); + $form->setVar("typenr",$typenr); + $form->setVar("idart",$idart); + $form->setVar("idcat",$idcat); + $form->setVar("idartlang",$idartlang); + $form->setVar("contenido",$sess->id); + $form->setVar("action",10); + $form->setVar("doedit",1); + $form->setVar("type",$type); + $form->setVar("changeview","edit"); + $form->setVar("CMS_LINK", $a_content["CMS_LINK"][$typenr]); + + $header = sprintf(i18n("Edit image for container %s"),$typenr); + $form->addHeader($header); + + $dirselect = new cHTMLSelectElement("img_dir"); + $dirselect->setEvent("change", "doedit.value=0; submit();"); + $dirselect->setSize($dirheight); + $dirselect->setStyle("width: {$dirwidth}px;"); + + foreach ($ds_lvl as $key => $value) + { + $text = str_repeat("-",$value*2)."> ".$ds_name[$key]; + + $option = new cHTMLOptionElement($text, $ds_fullpath[$key]); + + switch ($value) + { + case 0: + case 1: $style="background-color:#C0C0C0;"; break; + case 2: $style="background-color:#D0D0D0;"; break; + case 3: $style="background-color:#E0E0E0;"; break; + default: $style="background-color:#F0F0F0;"; break; + } + + if (strcmp($img_dir,$ds_fullpath[$key])==0) + { + $option->setSelected("selected"); + } + + $dirselect->addOptionElement($key, $option); + + } + + $script = '"; + + $fileselect = new cHTMLSelectElement("CMS_IMG"); + $fileselect->setEvent("change", "disp_preview(this.value);"); + $fileselect->setSize($fileheight); + $fileselect->setStyle("width: {$filewidth}px;"); + + $option = new cHTMLOptionElement("-- ".i18n("None")." --", "0"); + + if ($a_content["CMS_IMG"][$typenr] == 0) + { + $option->setSelected("selected"); + } + + $fileselect->addOptionElement(-1,$option); + + if (is_array($img_list)) + { + foreach ($img_list as $key => $value) + { + $description = $img_descr[$key]; + + if ($description != "") + { + $text = $value . " (". $description .")"; + } else { + $text = $value; + } + + switch ($key % 2) + { + case 0: $style="background-color:#D0D0D0;"; break; + case 1: $style="background-color:#E0E0E0;"; break; + } + + $option = new cHTMLOptionElement($text, $img_id[$key]); + + if ($a_content["CMS_IMG"][$typenr]==$img_id[$key]) + { + $option->setSelected("selected"); + } + + $option->setStyle($style); + $fileselect->addOptionElement($key, $option); + } + } + + $form->add(i18n("Directory / File"), $dirselect->render().$script.$fileselect->render()); + + $textarea = new cHTMLTextarea("CMS_IMGDESCR", $a_content["CMS_IMGDESCR"][$typenr], $descrwidth, $descrheight); + $form->add(i18n("Description"), $textarea->render()); + + $preview = ''; + + $form->add(i18n("Preview"), $preview); + + $form->render(false); +?> +
+ + \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.CMS_LINK.php b/branches/conlite20/conlite/includes/include.CMS_LINK.php new file mode 100644 index 0000000..7a3b07e --- /dev/null +++ b/branches/conlite20/conlite/includes/include.CMS_LINK.php @@ -0,0 +1,393 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-07 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.CMS_LINK.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +if ($doedit == "1") { + global $cfgClient; + global $client; + global $_FILES; + global $upldir; + global $uplfile; + global $HTTP_POST_FILES; + + cInclude("includes","functions.upl.php"); + + $rootpath = $cfgClient[$client]["path"]["htmlpath"] . $cfgClient[$client]["upload"]; + + $CMS_LINK = $CMS_LINKextern; + + if ($CMS_LINKintern) + { + $CMS_LINK = $CMS_LINKintern; + } + + if($selectpdf){ + $CMS_LINK = $rootpath . $selectpdf; + } + if($selectimg){ + $CMS_LINK = $rootpath . $selectimg; + } + if($selectzip){ + $CMS_LINK = $rootpath . $selectzip; + } + if($selectaudio){ + $CMS_LINK = $rootpath . $selectaudio; + } + if($selectany){ + $CMS_LINK = $rootpath . $selectany; + } + + if (count($_FILES) == 1) + { + foreach ($_FILES['uplfile']['name'] as $key => $value) + { + if (file_exists($_FILES['uplfile']['tmp_name'][$key])) + { + $friendlyName = uplCreateFriendlyName($_FILES['uplfile']['name'][$key]); + move_uploaded_file($_FILES['uplfile']['tmp_name'][$key], $cfgClient[$client]['upl']['path'].$upldir.$friendlyName); + + uplSyncDirectory($upldir); + + if ($path == "") { $path = "/"; } + + $sql = "SELECT idupl FROM ".$cfg["tab"]["upl"]." WHERE dirname='".Contenido_Security::escapeDB($upldir, $db)."' AND filename='".Contenido_Security::escapeDB($friendlyName, $db)."'"; + $db->query($sql); + $db->next_record(); + + $CMS_LINK = $rootpath . $upldir. $friendlyName; + } + + } + } + + + conSaveContentEntry ($idartlang, "CMS_LINK", $typenr, $CMS_LINK); + conSaveContentEntry ($idartlang, "CMS_LINKDESCR", $typenr, $CMS_LINKDESCR); + conSaveContentEntry ($idartlang, "CMS_LINKTARGET", $typenr, $CMS_LINKTARGET); + conMakeArticleIndex ($idartlang, $idart); + conGenerateCodeForartInAllCategories($idart); + Header("Location:".$sess->url($cfg['path']['contenido_fullhtml']."external/backendedit/front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&changeview=edit&client=$client")); +} + +header("Content-Type: text/html; charset={$encoding[$lang]}"); +?> + + + + + +file selector +contenido.css"> + + + + + + + + + + "; + + + echo "
spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">
+ setVar("lang",$lang); + $form->setVar("typenr",$typenr); + $form->setVar("idart",$idart); + $form->setVar("idcat",$idcat); + $form->setVar("idartlang",$idartlang); + $form->setVar("contenido",$sess->id); + $form->setVar("action",10); + $form->setVar("doedit",1); + $form->setVar("type",$type); + $form->setVar("changeview","edit"); + $form->setVar("CMS_LINK", $a_content["CMS_LINK"][$typenr]); + + $header = sprintf(i18n("Edit link for container %s"),$typenr); + $form->addHeader($header); + + if (is_numeric($a_content["CMS_LINK"][$typenr])) { + $a_link_intern_value = $a_content["CMS_LINK"][$typenr]; + $a_link_extern_value = ""; + } else { + $a_link_intern_value = "0"; + $a_link_extern_value = $a_content["CMS_LINK"][$typenr]; + } + + $form->add(i18n("External link"),formGenerateField ("text", "CMS_LINKextern", $a_link_extern_value, 60, 255)); + + $sql = "SELECT + * + FROM + ".$cfg["tab"]["cat_tree"]." AS a, + ".$cfg["tab"]["cat_art"]." AS b, + ".$cfg["tab"]["cat"]." AS c, + ".$cfg["tab"]["cat_lang"]." AS d, + ".$cfg["tab"]["art_lang"]." AS e + WHERE + a.idcat = b.idcat AND + b.idcat = d.idcat AND + d.idlang = '".Contenido_Security::toInteger($lang)."' AND + b.idart = e.idart AND + c.idcat = a.idcat AND + c.idclient = '".Contenido_Security::toInteger($client)."' AND + e.idlang = '".Contenido_Security::toInteger($lang)."' + ORDER BY + a.idtree"; + + + $db->query($sql); + + $intlink .= ""; + + $form->add(i18n("Internal link"),$intlink); + + + + $pdflink.= ""; + + $form->add(i18n("Link to a document"),$pdflink); + + + $imglink .= ""; + + $form->add(i18n("Link to an image"),$imglink); + + $ziplink .= ""; + + $form->add(i18n("Link to an archive"),$ziplink); + + $audiolink .= ""; + + $form->add(i18n("Link to a media file"),$audiolink); + + + $anylink .= ""; + + $form->add(i18n("Link to any file"),$anylink); + + + cInclude("includes","functions.upl.php"); + + // Laden der Verzeichnisse und Dateien in separate Arrays + $olddir = getcwd(); + chdir($cfgClient[$client]['upl']['path'].rawurldecode($path)); + + $dirlist = uplDirectoryListRecursive($cfgClient[$client]['upl']['path'].rawurldecode($path)); + + + chdir($olddir); + + $upldirs = '"; + + $form->add(i18n("Upload file"),$upldirs.''); + $form->add(i18n("Description"),""); + + $linktarget = " "; + + $form->add(i18n("Target frame"),$linktarget); + + $newwindow = " "; + $newwindow .= " + + + "; + + $form->add(i18n("Open in new window"),$newwindow); + + $tmp_area = "con_editcontent"; + $form->addCancel($sess->url($cfgClient[$client]["path"]["htmlpath"]."front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat")); + echo $form->render(); + + echo "
+ "; + + + + +?> + + + \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.CMS_QRCODE.php b/branches/conlite20/conlite/includes/include.CMS_QRCODE.php new file mode 100644 index 0000000..0d7fc88 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.CMS_QRCODE.php @@ -0,0 +1,89 @@ + + * @license http://www.ConLite.org/license/LIZENZ.txt + * @link http://www.ConLite.org + * @since file available since ConLite release 2.0 + * + * {@internal + * created 2012-12-06 + * modified 2012-12-20, Rene Mansveld + * + * $Id: include.CMS_QRCODE.php 207 2013-01-23 09:23:45Z Mansveld $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +if ($doedit == "1") { + conSaveContentEntry ($idartlang, "CMS_QRCODE", $typenr, $CMS_QRCODE); + conMakeArticleIndex ($idartlang, $idart); + conGenerateCodeForArtInAllCategories($idart); + header("Location:".$sess->url($cfgClient[$client]["path"]["htmlpath"]."front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&lang=$lang&changeview=edit&client=$client").""); +} +header("Content-Type: text/html; charset={$encoding[$lang]}"); +?> + + + + contenido.css"> + + + + + + + + + + +
spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">
+ +"; + $sess->hidden_session(); + echo " "; + echo " "; + echo " "; + echo " "; + echo " "; + echo ""; + echo " "; + echo " "; + echo ""; + echo " "; + echo " "; + $tmp_area = "con_editcontent"; + echo " "; + + echo "
 ".$typenr.". ".$a_description[$type][$typenr].": "; + echo " "; + echo "

+ + +
+ "; + +?> + +
+ + \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.CMS_SIMPLELINK.php b/branches/conlite20/conlite/includes/include.CMS_SIMPLELINK.php new file mode 100644 index 0000000..0650012 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.CMS_SIMPLELINK.php @@ -0,0 +1,173 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-07 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.CMS_SIMPLELINK.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +if ($doedit == "1") { + global $cfgClient; + global $client; + global $_FILES; + global $upldir; + global $uplfile; + global $HTTP_POST_FILES; + + cInclude("includes","functions.upl.php"); + + $rootpath = $cfgClient[$client]["path"]["htmlpath"] . $cfgClient[$client]["upload"]; + + $CMS_LINK = $CMS_LINKextern; + + if ($CMS_LINKintern) + { + $CMS_LINK = $CMS_LINKintern; + } + + if($selectpdf){ + $CMS_LINK = $rootpath . $selectpdf; + } + if($selectimg){ + $CMS_LINK = $rootpath . $selectimg; + } + if($selectzip){ + $CMS_LINK = $rootpath . $selectzip; + } + if($selectaudio){ + $CMS_LINK = $rootpath . $selectaudio; + } + if($selectany){ + $CMS_LINK = $rootpath . $selectany; + } + + if (count($_FILES) == 1) + { + foreach ($_FILES['uplfile']['name'] as $key => $value) + { + if (file_exists($_FILES['uplfile']['tmp_name'][$key])) + { + $friendlyName = uplCreateFriendlyName($_FILES['uplfile']['name'][$key]); + move_uploaded_file($_FILES['uplfile']['tmp_name'][$key], $cfgClient[$client]['upl']['path'].$upldir.$friendlyName); + + uplSyncDirectory($upldir); + + if ($path == "") { $path = "/"; } + + $sql = "SELECT idupl FROM ".$cfg["tab"]["upl"]." WHERE dirname='".Contenido_Security::escapeDB($upldir, $db)."' AND filename='".Contenido_Security::escapeDB($friendlyName, $db)."'"; + $db->query($sql); + $db->next_record(); + + $CMS_LINK = $rootpath . $upldir. $friendlyName; + } + + } + } + + + conSaveContentEntry ($idartlang, "CMS_LINK", $typenr, $CMS_LINK); + conSaveContentEntry ($idartlang, "CMS_LINKDESCR", $typenr, $CMS_LINKDESCR); + conSaveContentEntry ($idartlang, "CMS_LINKTARGET", $typenr, $CMS_LINKTARGET); + conMakeArticleIndex ($idartlang, $idart); + conGenerateCodeForartInAllCategories($idart); + Header("Location:".$sess->url($cfg['path']['contenido_fullhtml']."external/backendedit/front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&changeview=edit&client=$client")); +} +?> + + + + +contenido +contenido.css"> + + + + + + + + + + "; + + + echo "
spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">
+ setVar("lang",$lang); + $form->setVar("typenr",$typenr); + $form->setVar("idart",$idart); + $form->setVar("idcat",$idcat); + $form->setVar("idartlang",$idartlang); + $form->setVar("contenido",$sess->id); + $form->setVar("action",10); + $form->setVar("doedit",1); + $form->setVar("type",$type); + $form->setVar("changeview","edit"); + $form->setVar("CMS_LINK", $a_content["CMS_LINK"][$typenr]); + + $header = sprintf(i18n("Edit link for container %s"),$typenr); + $form->addHeader($header); + + if (is_numeric($a_content["CMS_LINK"][$typenr])) { + $a_link_intern_value = $a_content["CMS_LINK"][$typenr]; + $a_link_extern_value = ""; + } else { + $a_link_intern_value = "0"; + $a_link_extern_value = $a_content["CMS_LINK"][$typenr]; + } + + $form->add(i18n("Link"),formGenerateField ("text", "CMS_LINKextern", $a_link_extern_value, 60, 255)); + + + $form->add(i18n("Description"),""); + + + + $tmp_area = "con_editcontent"; + $form->addCancel($sess->url($cfgClient[$client]["path"]["htmlpath"]."front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat")); + echo $form->render(); + + echo "
+ "; + + + + +?> + + + \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.CMS_SWF.php b/branches/conlite20/conlite/includes/include.CMS_SWF.php new file mode 100644 index 0000000..06139f6 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.CMS_SWF.php @@ -0,0 +1,115 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-07 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.CMS_SWF.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +if ($doedit == "1") { + conSaveContentEntry ($idartlang, "CMS_SWF", $typenr, $CMS_SWF); + conMakeArticleIndex ($idartlang, $idart); + conGenerateCodeForArtInAllCategories($idart); + header("location:".$sess->url($cfg['path']['contenido_fullhtml']."external/backendedit/front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&changeview=edit&client=$client")); +} + +?> + + +contenido +contenido.css"> + + + + + + + + + +
spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">
+ +"; + + $sess->hidden_session(); + + echo " "; + echo " "; + echo " "; + echo " "; + echo " "; + echo ""; + echo " "; + echo " "; + echo ""; + + echo " "; + + echo " "; + + $tmp_area = "con_editcontent"; + + echo " "; + + echo "
 ".$typenr.". ".$a_description["CMS_SWF"][$typenr].": "; + echo ""; + echo "

+ + +
+ "; + +?> +
+ + \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.CMS_TEXT.php b/branches/conlite20/conlite/includes/include.CMS_TEXT.php new file mode 100644 index 0000000..f751982 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.CMS_TEXT.php @@ -0,0 +1,90 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-07 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.CMS_TEXT.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +if ($doedit == "1") { + conSaveContentEntry ($idartlang, "CMS_TEXT", $typenr, $CMS_TEXT); + conMakeArticleIndex ($idartlang, $idart); + conGenerateCodeForArtInAllCategories($idart); + header("Location:".$sess->url($cfgClient[$client]["path"]["htmlpath"]."front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&lang=$lang&changeview=edit&client=$client").""); +} +header("Content-Type: text/html; charset={$encoding[$lang]}"); +?> + + + + contenido.css"> + + + + + + + + + + +
spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">spacer.gif" width="10" height="10">
+ +"; + $sess->hidden_session(); + echo " "; + echo " "; + echo " "; + echo " "; + echo " "; + echo ""; + echo " "; + echo " "; + echo ""; + echo " "; + echo " "; + $tmp_area = "con_editcontent"; + echo " "; + + echo "
 ".$typenr.". ".$a_description[$type][$typenr].": "; + echo " "; + echo "

+ + +
+ "; + +?> + +
+ + \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.backendedit.php b/branches/conlite20/conlite/includes/include.backendedit.php new file mode 100644 index 0000000..4d39eab --- /dev/null +++ b/branches/conlite20/conlite/includes/include.backendedit.php @@ -0,0 +1,136 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-07-02, Frederic Schneider, add security fix and include security_class + * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307] + * + * $Id: include.backendedit.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +// Contenido startup process +include_once ('../includes/startup.php'); + +$fullstart = getmicrotime(); + +cInclude ("includes", 'functions.api.php'); +cInclude ("includes", 'functions.forms.php'); +cInclude ("includes", 'functions.con.php'); + + +page_open(array('sess' => 'Contenido_Session', + 'auth' => 'Contenido_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); + +i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang); +cInclude ("includes", 'cfg_language_de.inc.php'); + + + +# Create Contenido classes +$db = new DB_ConLite; +$notification = new Contenido_Notification; +$classarea = new Area(); +$classlayout = new Layout(); +$classclient = new Client(); +$classuser = new User(); + +# change Client +if ( is_numeric($changeclient) ) { + $client = $changeclient; + unset($lang); +} + +# Sprache wechseln +if ( is_numeric($changelang) ) { + unset($area_rights); + unset($item_rights); + + $lang = $changelang; +} + +if (!is_numeric($client) || $client == "") { + $sess->register("client"); + $sql = "SELECT idclient FROM ".$cfg["tab"]["clients"]." ORDER BY idclient ASC"; + $db->query($sql); + $db->next_record(); + $client = $db->f("idclient"); +} else { + $sess->register("client"); +} + +if (!is_numeric($lang) || $lang == "") { + $sess->register("lang"); + # search for the first language of this client + $sql = "SELECT * FROM ".$cfg["tab"]["lang"]." AS A, ".$cfg["tab"]["clients_lang"]." AS B WHERE A.idlang=B.idlang AND idclient='$client' ORDER BY A.idlang ASC"; + $db->query($sql); + $db->next_record(); + $lang = $db->f("idlang"); +} else { + $sess->register("lang"); +} + +$perm->load_permissions(); + +# Create Contenido classes +$xml = new XML_doc; +$tpl = new Template; +$backend = new Contenido_Backend; + +# Register session variables +$sess->register("sess_area"); + +if (isset($area)) { + $sess_area = $area; +} else { + $area = ( isset($sess_area) && $sess_area != "" ) ? $sess_area : 'login'; +} + +$sess->register("cfgClient"); +$sess->register("errsite_idcat"); +$sess->register("errsite_idart"); + +if ($cfgClient["set"] != "set") +{ + rereadClients(); +} + +$start = getmicrotime(); + +include ($cfg["path"]["contenido"].$cfg["path"]["includes"].'include.'.$type.'.php'); + +$end = getmicrotime(); + +if ($cfg["debug"]["rendering"] == true) +{ + echo "Rendering this page took: " . ($end - $start)." seconds
"; + echo "Building the complete page took: " . ($end - $fullstart)." seconds
"; +} +page_close(); + +?> diff --git a/branches/conlite20/conlite/includes/include.blank.php b/branches/conlite20/conlite/includes/include.blank.php new file mode 100644 index 0000000..bf1f162 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.blank.php @@ -0,0 +1,37 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-26, Dominik Ziegler, add security fix + * + * $Id: include.blank.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->set('s', 'CONTENTS', ''); +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['blank']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.client_artspec.php b/branches/conlite20/conlite/includes/include.client_artspec.php new file mode 100644 index 0000000..bc8e622 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.client_artspec.php @@ -0,0 +1,180 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-26, Dominik Ziegler, add security fix + * + * $Id: include.client_artspec.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if ($action == "client_artspec_save") +{ + if(!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } else { + addArtspec($_POST['artspectext'], $online); + } +} + +if ($action == "client_artspec_delete") +{ + if(!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } else { + deleteArtspec($_GET['idartspec']); + } +} + +if ($action == "client_artspec_online") +{ + if(!$perm->have_perm_area_action($area, "client_artspec_save")) + { + $notification->displayNotification("error", i18n("Permission denied")); + } else { + setArtspecOnline($_GET['idartspec'], $online); + } +} + +if ($action == "client_artspec_default") +{ + if(!$perm->have_perm_area_action($area, "client_artspec_save")) + { + $notification->displayNotification("error", i18n("Permission denied")); + } else { + setArtspecDefault($_GET['idartspec'], $online); + } +} + +$page = new UI_Page; +$list = new UI_List; + +$list->setCell(1,1, i18n("Article specification")); +$list->setCell(1,2, i18n("Options")); + +$list->setBgColor(1,$cfg['color']['table_header']); +$list->setBorder(1); +$list->setWidth ("250px"); + +$count = 2; + +$link = new Link; +$link->setCLink($area, $frame, "client_artspec_edit"); +$link->setContent(''.i18n('Edit').''); + +$dlink = new Link; +$dlink->setCLink($area, $frame, "client_artspec_delete"); +$dlink->setContent(''.i18n('Delete').''); + +$olink = new Link; +$olink->setCLink($area, $frame, "client_artspec_online"); + +$defLink = new Link; +$defLink->setCLink($area, $frame, "client_artspec_default"); + +$artspec = getArtspec(); + +if (is_array($artspec)) +{ + foreach ($artspec as $id => $tmp_artspec) + { + $link->setCustom("idartspec", $id); + $link->updateAttributes(array ('style' => 'padding:3')); + + $dlink->setCustom("idartspec", $id); + $dlink->updateAttributes(array ('style' => 'padding:3')); + + $olink->setCustom("idartspec", $id); + $olink->updateAttributes(array ('style' => 'padding:3')); + + $defLink->setCustom("idartspec", $id); + $defLink->updateAttributes(array ('style' => 'padding:3')); + + if (($action == "client_artspec_edit") && ($idartspec == $id)) + { + $form = new UI_Form("artspec"); + $form->setVar("area",$area); + $form->setVar("frame", $frame); + $form->setVar("idartspec", $id); + $form->setVar("action", "client_artspec_save"); + $form->setVar("online", $artspec[$id]['online']); + $inputbox = new cHTMLTextbox ("artspectext", urldecode($artspec[$id]['artspec'])); + $inputbox->setStyle("border:1px;border-style:solid;border-color:black;"); + $form->add("name",$inputbox->render()); + $form->add("submit", ''); + + $list->setCell($count,1, $form->render(true)); + } else { + $list->setCell($count,1, urldecode($artspec[$id]['artspec'])); + } + + if ($artspec[$id]['online'] == 0) + { //it is offline (std!) + $olink->setContent(''.i18n('Make online').''); + $olink->setCustom("online", 1); + } else + { + $olink->setContent(''.i18n('Make offline').''); + $olink->setCustom("online", 0); + } + + if ($artspec[$id]['default'] == 0) + { + $defLink->setContent(''); + $list->setCell($count,2, $link->render().$dlink->render().$olink->render().$defLink->render()); + } else + { + $defLinkText = ''; + $list->setCell($count,2, $link->render().$dlink->render().$olink->render().$defLinkText); + } + + $count++; + } + +} else +{ + $list->setCell($count,1, i18n("No article specifications found!")); + $list->setCell($count,2, ''); +} + +unset($form); + +$form = new UI_Table_Form("artspec"); +$form->setVar("area",$area); +$form->setVar("frame", $frame); +$form->setVar("action", "client_artspec_save"); +$form->addHeader(i18n("Create new article specification")); +$inputbox = new cHTMLTextbox ("artspectext"); +$inputbox->setStyle("border:1px;border-style:solid;border-color:black;"); +$form->add(i18n("Specification name"),$inputbox->render()); + +$page->setContent($list->render()."
".$form->render()); +$page->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.client_edit.php b/branches/conlite20/conlite/includes/include.client_edit.php new file mode 100644 index 0000000..4f7a309 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.client_edit.php @@ -0,0 +1,338 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-30 + * modified 2008-06-26, Dominik Ziegler, add security fix + * + * $Id: include.client_edit.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$properties = new PropertyCollection; + +$db2 = new DB_ConLite; + +if ($action == "client_new") { + $nextid = $db->nextid($cfg["tab"]["clients"]); + $idclient = $nextid; + $new = true; +} +if (!$perm->have_perm_area_action($area)) { + $notification->displayNotification("error", i18n("Permission denied")); +} else { + if (!isset($idclient)) { + $notification->displayNotification("error", i18n("No client ID passed")); + } else { + if (($action == "client_edit") && ($perm->have_perm_area_action($area, $action))) { + $sNewNotification = ''; + if ($active != "1") { + $active = "0"; + } + + if ($new == true) { + + $sLangNotification = i18n('Notice: In order to use this client, you must create a new language for it.'); + $sTarget = $sess->url('frameset.php?area=lang'); + $sJsLink = "parent.parent.location.href='" . $sTarget . "'; + top.header.markActive(top.header.document.getElementById('sub_lang'));"; + $sLangNotificationLink = sprintf(i18n('Please click %shere%s to create a new language.'), '', ''); + $sNewNotification = '
' . $sLangNotification . '
' . $sLangNotificationLink; + if (substr($frontendpath, strlen($frontendpath) - 1) != "/") { + $frontendpath .= "/"; + } + + if (substr($htmlpath, strlen($htmlpath) - 1) != "/") { + $htmlpath .= "/"; + } + + $sql = "INSERT INTO + " . $cfg["tab"]["clients"] . " + SET + name = '" . Contenido_Security::escapeDB($clientname, $db) . "', + frontendpath = '" . Contenido_Security::escapeDB($frontendpath, $db) . "', + htmlpath = '" . Contenido_Security::escapeDB($htmlpath, $db) . "', + errsite_cat = '" . Contenido_Security::toInteger($errsite_cat) . "', + errsite_art = '" . Contenido_Security::toInteger($errsite_art) . "', + idclient = '" . Contenido_Security::toInteger($idclient) . "'"; + + $properties->setValue("idclient", $idclient, "backend", "clientimage", $clientlogo); + + // Copy the client template to the real location + $destPath = $frontendpath; + $sourcePath = $cfg['path']['contenido'] . $cfg['path']['frontendtemplate']; + + if ($copytemplate) { + if (!file_exists($destPath)) { + if (recursive_copy($sourcePath, $destPath)) { + $res = fopen($destPath . "config.php", "rb+"); + $res2 = fopen($destPath . "config.php.new", "ab+"); + if ($res && $res2) { + while (!feof($res)) { + $buffer = fgets($res, 4096); + $buffer = str_replace("!CLIENT!", $idclient, $buffer); + $buffer = str_replace("!PATH!", $cfg["path"]["contenido"], $buffer); + fwrite($res2, $buffer); + } + } else { + $notification->displayNotification("error", i18n("Couldn't write the file config.php.")); + } + + fclose($res); + fclose($res2); + + unlink($destPath . "config.php"); + rename($destPath . "config.php.new", $destPath . "config.php"); + $message = sprintf(i18n("Succesfully copied client-template to %s."), $destPath); + $notification->displayNotification("info", $message); + } else { + $message = sprintf(i18n("Cannot create directory %s . The client was created, but you have to copy the frontend-template yourself"), $destPath); + $notification->displayNotification("warning", $message); + } + } else { + $message = sprintf(i18n("The directory %s already exists. The client was created, but you have to copy the frontend-template yourself"), $destPath); + $notification->displayNotification("warning", $message); + } + } else { + $message = sprintf(i18n("Client '%s' created."), $clientname); + $notification->displayNotification("info", $message); + } + rereadClients(); + } else { + $pathwithoutslash = $frontendpath; + if (substr($frontendpath, strlen($frontendpath) - 1) != "/") { + $frontendpath .= "/"; + } + + if (substr($htmlpath, strlen($htmlpath) - 1) != "/") { + $htmlpath .= "/"; + } + + if (($oldpath != $frontendpath) && ($oldpath != $pathwithoutslash)) { + $notification->displayNotification("warning", i18n("You changed the client path. You might need to copy the frontend to the new location")); + } + $sql = "UPDATE + " . $cfg["tab"]["clients"] . " + SET + name = '" . Contenido_Security::escapeDB($clientname, $db) . "', + frontendpath = '" . Contenido_Security::escapeDB($frontendpath, $db) . "', + htmlpath = '" . Contenido_Security::escapeDB($htmlpath, $db) . "', + errsite_cat = '" . Contenido_Security::toInteger($errsite_cat) . "', + errsite_art = '" . Contenido_Security::toInteger($errsite_art) . "' + WHERE + idclient = '" . Contenido_Security::toInteger($idclient) . "'"; + } + + $db->query($sql); + $new = false; + rereadClients(); + + $properties->setValue("idclient", $idclient, "backend", "clientimage", $clientlogo); + + /* Clear the con_code table */ + $sql = "DELETE FROM " . $cfg["tab"]["code"] . " WHERE idclient = '" . Contenido_Security::toInteger($idclient) . "'"; + $db->query($sql); + + $notification->displayNotification("info", i18n("Changes saved") . $sNewNotification); + + $cApiClient = new cApiClient; + $cApiClient->loadByPrimaryKey($idclient); + + if (isset($_REQUEST["generate_xhtml"])) { + switch ($_REQUEST["generate_xhtml"]) { + case "html": + $cApiClient->setProperty("generator", "xhtml", "false"); + $cApiClient->setProperty("generator", "html5", "false"); + break; + + case "xhtml": + $cApiClient->setProperty("generator", "xhtml", "true"); + $cApiClient->setProperty("generator", "html5", "false"); + break; + + case "html5": + $cApiClient->setProperty("generator", "xhtml", "false"); + $cApiClient->setProperty("generator", "html5", "true"); + break; + + default: // do nothing + break; + } + } + } + + + $tpl->reset(); + + $sql = "SELECT + idclient, name, frontendpath, htmlpath, errsite_cat, errsite_art + FROM + " . $cfg["tab"]["clients"] . " + WHERE + idclient = '" . Contenido_Security::toInteger($idclient) . "'"; + + $db->query($sql); + + $db->next_record(); + + $form = '
+ ' . $sess->hidden_session() . ' + + + + + + '; + + $tpl->set('s', 'JAVASCRIPT', $javascript); + $tpl->set('s', 'FORM', $form); + $tpl->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('s', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('s', 'SUBMITTEXT', i18n("Save changes")); + $tpl->set('s', 'CANCELTEXT', i18n("Discard changes")); + $tpl->set('s', 'CANCELLINK', $sess->url("main.php?area=$area&frame=4&idclient=$idclient")); + + if ($error) { + echo $error; + } + + $tpl->set('d', 'CATNAME', i18n("Property")); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_header"]); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'CATFIELD', i18n("Value")); + $tpl->set('d', 'BRDRT', 1); + $tpl->set('d', 'BRDRB', 0); + $tpl->set('d', 'FONT', 'textg_medium'); + $tpl->next(); + + $tpl->set('d', 'CATNAME', i18n("Client name")); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]); + $tpl->set('d', 'CATFIELD', formGenerateField("text", "clientname", clHtmlSpecialChars($db->f("name")), 50, 255)); + $tpl->set('d', 'BRDRT', 0); + $tpl->set('d', 'BRDRB', 1); + $tpl->set('d', 'FONT', 'text_medium'); + $tpl->next(); + + $serverpath = $db->f("frontendpath"); + + if ($serverpath == "") { + $serverpath = $cfg['path']['frontend']; + } + + $tpl->set('d', 'CATNAME', i18n("Server path")); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]); + $tpl->set('d', 'CATFIELD', formGenerateField("text", "frontendpath", clHtmlSpecialChars($serverpath), 50, 255)); + $tpl->set('d', 'BRDRT', 0); + $tpl->set('d', 'BRDRB', 1); + $tpl->set('d', 'FONT', 'text_medium'); + $tpl->next(); + + $htmlpath = $db->f("htmlpath"); + + if ($htmlpath == "") { + $htmlpath = "http://"; + } + + $tpl->set('d', 'CATNAME', i18n("Web address")); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]); + $tpl->set('d', 'CATFIELD', formGenerateField("text", "htmlpath", clHtmlSpecialChars($htmlpath), 50, 255)); + $tpl->set('d', 'BRDRT', 0); + $tpl->set('d', 'BRDRB', 1); + $tpl->set('d', 'FONT', 'text_medium'); + $tpl->next(); + + $tpl->set('d', 'CATNAME', i18n("Error page category")); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]); + $tpl->set('d', 'CATFIELD', formGenerateField("text", "errsite_cat", $db->f("errsite_cat"), 10, 10)); + $tpl->set('d', 'BRDRT', 0); + $tpl->set('d', 'BRDRB', 1); + $tpl->set('d', 'FONT', 'text_medium'); + $tpl->next(); + + $tpl->set('d', 'CATNAME', i18n("Error page article")); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]); + $tpl->set('d', 'CATFIELD', formGenerateField("text", "errsite_art", $db->f("errsite_art"), 10, 10)); + $tpl->set('d', 'BRDRT', 0); + $tpl->set('d', 'BRDRB', 1); + $tpl->set('d', 'FONT', 'text_medium'); + $tpl->next(); + + $clientLogo = $properties->getValue("idclient", $idclient, "backend", "clientimage"); + + $tpl->set('d', 'CATNAME', i18n("Client logo")); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]); + $tpl->set('d', 'CATFIELD', formGenerateField("text", "clientlogo", $clientLogo, 50, 255)); + $tpl->set('d', 'BRDRT', 0); + $tpl->set('d', 'BRDRB', 1); + $tpl->set('d', 'FONT', 'text_medium'); + $tpl->next(); + + $aChoices = array("html" => i18n("HTML"), "xhtml" => i18n("XHTML"), "html5" => i18n("HTML5")); + + $oXHTMLSelect = new cHTMLSelectElement("generate_xhtml"); + $oXHTMLSelect->autoFill($aChoices); + + $cApiClient = new cApiClient; + $cApiClient->loadByPrimaryKey($idclient); + if ($cApiClient->getProperty("generator", "xhtml") == 'true') { + $oXHTMLSelect->setDefault("xhtml"); + } else if ($cApiClient->getProperty("generator", "html5") == 'true') { + $oXHTMLSelect->setDefault("html5"); + } else { + $oXHTMLSelect->setDefault("html"); + } + + $tpl->set('d', 'CATNAME', i18n("Generate")); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'CATFIELD', $oXHTMLSelect->render()); + $tpl->set('d', 'BRDRT', 0); + $tpl->set('d', 'BRDRB', 1); + $tpl->set('d', 'FONT', 'text_medium'); + $tpl->next(); + + if ($new == true) { + $tpl->set('d', 'CATNAME', i18n("Copy frontend template")); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]); + $tpl->set('d', 'CATFIELD', formGenerateCheckbox("copytemplate", "checked", 1)); + $tpl->next(); + } + + $tpl->set('s', 'IDCLIENT', $idclient); + + # Generate template + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['client_edit']); + } +} +?> diff --git a/branches/conlite20/conlite/includes/include.client_left_top.php b/branches/conlite20/conlite/includes/include.client_left_top.php new file mode 100644 index 0000000..a82d02d --- /dev/null +++ b/branches/conlite20/conlite/includes/include.client_left_top.php @@ -0,0 +1,59 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-29 + * modified 2008-06-26, Dominik Ziegler, add security fix + * + * $Id: include.client_left_top.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->set('s', 'ID', 'oTplSel'); +$tpl->set('s', 'CLASS', 'text_medium'); +$tpl->set('s', 'OPTIONS', ''); +$tpl->set('s', 'CAPTION', ''); +$tpl->set('s', 'SESSID', $sess->id); + + +$tpl->set('s', 'ACTION', $select); + +$tmp_mstr = '%s'; +$area = "client"; +$mstr = sprintf($tmp_mstr, 'right_top', + $sess->url("main.php?area=client&frame=3"), + 'right_bottom', + $sess->url("main.php?area=client_edit&action=client_new&frame=4"), + i18n("Create client")); +if (strpos($auth->auth["perm"],"sysadmin") !== false) +{ + $tpl->set('s', 'NEWCLIENT', $mstr); +} else { + $tpl->set('s', 'NEWCLIENT', ' '); +} + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['client_left_top']); +?> diff --git a/branches/conlite20/conlite/includes/include.client_menu.php b/branches/conlite20/conlite/includes/include.client_menu.php new file mode 100644 index 0000000..04644ff --- /dev/null +++ b/branches/conlite20/conlite/includes/include.client_menu.php @@ -0,0 +1,104 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-08 + * modified 2008-06-26, Dominik Ziegler, add security fix + * + * $Id: include.client_menu.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->set('s', 'SID', $sess->id); + +if (!isset($action)) $action = ""; + +if ($action == "client_delete") +{ + if ($perm->have_perm_area_action("client", "client_delete")) { + + $sql = "DELETE FROM " + .$cfg["tab"]["clients"]. + " WHERE + idclient = '".Contenido_Security::toInteger($idclient)."'"; + $db->query($sql); + } + +} + +$sql = "SELECT + * + FROM + ".$cfg["tab"]["clients"]; + +$db->query($sql); + +while ($db->next_record()) { + $idclient = $db->f("idclient"); + if ((strpos($auth->auth["perm"],"admin[$idclient]") !== false) || + (strpos($auth->auth["perm"],"sysadmin") !== false)) + { + $dark = !$dark; + if ($dark) { + $bgColor = $cfg["color"]["table_dark"]; + } else { + $bgColor = $cfg["color"]["table_light"]; + } + + $tmp_mstr = '%s'; + $idclient = $db->f("idclient"); + $mstr = sprintf($tmp_mstr, 'right_top', + $sess->url("main.php?area=$area&frame=3&idclient=$idclient"), + 'right_bottom', + $sess->url("main.php?area=client_edit&frame=4&idclient=$idclient"), + $db->f("name") ); + + if (!$classclient->hasLanguageAssigned($idclient) && $perm->have_perm_area_action('client',"client_delete") ) { + $delTitle = i18n("Delete client"); + $delDescr = sprintf(i18n("Do you really want to delete the following client:

%s
"),clHtmlSpecialChars($db->f("name"))); + + $tpl->set('d', 'DELETE', ''.$delTitle.''); + + } else { + $tpl->set('d', 'DELETE', ' '); + } + + $tpl->set('d', 'ICON', ''); + $tpl->set('d', 'BGCOLOR', $bgColor); + $tpl->set('d', 'TEXT', $mstr); + + if ($_GET['idclient'] == $idclient) { + $tpl->set('d', 'ID', 'id="marked"'); + } else { + $tpl->set('d', 'ID', ''); + } + + $tpl->next(); + } +} +# Generate template +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['client_menu']); +?> diff --git a/branches/conlite20/conlite/includes/include.clientsettings.php b/branches/conlite20/conlite/includes/include.clientsettings.php new file mode 100644 index 0000000..07af3c6 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.clientsettings.php @@ -0,0 +1,213 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-26, Dominik Ziegler, add security fix + * modified 2008-11-13, Timo Trautmann - Fixed wron escaping of chars + * + * $Id: include.clientsettings.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$oPage = new cPage(); +$oList = new cScrollList; + +$idclient = $_GET['idclient']; +if (strlen($idclient) == 0) { + $idclient = $_POST['idclient']; +} + +$oFrmRange = new UI_Table_Form('range'); +$oFrmRange->setVar('area', $area); +$oFrmRange->setVar('frame', $frame); +$oFrmRange->setVar('idclient', $idclient); +$oFrmRange->addHeader(i18n('Select range')); + +$oSelRange = new cHTMLSelectElement('idclientslang'); +$oOption = new cHTMLOptionElement(i18n("Language independent"), 0); +$oSelRange->addOptionElement(0, $oOption); + +$sSQL = "SELECT A.name AS name, A.idlang AS idlang, B.idclientslang AS idclientslang + FROM + " . $cfg["tab"]["lang"] . " AS A, + " . $cfg["tab"]["clients_lang"] . " AS B + WHERE + A.idlang=B.idlang AND + B.idclient='" . Contenido_Security::toInteger($idclient) . "' + ORDER BY A.idlang"; + +$db->query($sSQL); + +while ($db->next_record()) { + $iID = $db->f("idclientslang"); + $oOption = new cHTMLOptionElement($db->f("name") . " (" . $db->f("idlang") . ")", $iID); + $oSelRange->addOptionElement($iID, $oOption); +} + +if (is_numeric($_REQUEST["idclientslang"])) { + $oSelRange->setDefault($_REQUEST["idclientslang"]); +} + +$oSelRange->setStyle('border:1px;border-style:solid;border-color:black;'); +$oSelRange->setEvent("onchange", "document.forms.range.submit();"); +$oFrmRange->add(i18n('Range'), $oSelRange->render()); + +if (!is_numeric($_REQUEST["idclientslang"]) || $_REQUEST["idclientslang"] == 0) { + $oClient = new cApiClient($idclient); +} else { + $oClient = new cApiClientLanguage(); + $oClient->loadByPrimaryKey($_REQUEST["idclientslang"]); +} + +if ($_POST['action'] == 'clientsettings_save_item') { + $oClient->setProperty(trim($_POST['cstype']), trim($_POST['csname']), trim($_POST['csvalue']), trim($_POST['csidproperty'])); +} + +if ($_GET['action'] == 'clientsettings_delete_item') { + $oClient->deletePropertyById($_GET['idprop']); +} + +$oList->setHeader(i18n('Type'), i18n('Name'), i18n('Value'), ' '); +$oList->objHeaderItem->updateAttributes(array('width' => 52)); +$oList->objRow->updateAttributes(array('valign' => 'top')); + +$aItems = $oClient->getProperties(); + +if ($aItems !== false) { + $oLnkDelete = new Link; + $oLnkDelete->setCLink($area, $frame, "clientsettings_delete_item"); + $oLnkDelete->setContent('' . i18n('); + $oLnkDelete->setCustom("idclient", $idclient); + $oLnkDelete->setCustom("idclientslang", $_REQUEST["idclientslang"]); + + $oLnkEdit = new Link; + $oLnkEdit->setCLink($area, $frame, "clientsettings_edit_item"); + $oLnkEdit->setContent('' . i18n('); + $oLnkEdit->setCustom("idclient", $idclient); + $oLnkEdit->setCustom("idclientslang", $_REQUEST["idclientslang"]); + + $iCounter = 0; + foreach ($aItems as $iKey => $aValue) { + $oLnkDelete->setCustom("idprop", $iKey); + $oLnkEdit->setCustom("idprop", $iKey); + + if (($_GET['action'] == "clientsettings_edit_item") && ($_GET['idprop'] == $iKey)) { + $oForm = new UI_Form("clientsettings"); + $oForm->setVar("area", $area); + $oForm->setVar("frame", $frame); + $oForm->setVar("action", "clientsettings_save_item"); + $oForm->setVar("idclient", $idclient); + $oForm->setVar("idclientslang", $_REQUEST["idclientslang"]); + + $oInputboxValue = new cHTMLTextbox("csvalue", cSecurity::escapeString(clHtmlSpecialChars($aValue['value']))); + $oInputboxValue->setStyle("border:1px;border-style:solid;border-color:black;width:200px;"); + + $oInputboxName = new cHTMLTextbox("csname", cSecurity::escapeString(clHtmlSpecialChars($aValue['name']))); + $oInputboxName->setStyle("border:1px;border-style:solid;border-color:black;width:200px;"); + + $oInputboxType = new cHTMLTextbox("cstype", cSecurity::escapeString(clHtmlSpecialChars($aValue['type']))); + $oInputboxType->setStyle("border:1px;border-style:solid;border-color:black;width:200px;"); + + $hidden = ''; + $sSubmit = ' '; + + $oList->setData($iCounter, $oInputboxType->render(), $oInputboxName->render(), $oInputboxValue->render() . $hidden . $sSubmit, $oLnkEdit->render() . '   ' . $oLnkDelete->render()); + } else { + $sMouseoverTemplate = '%s'; + + if (strlen($aValue['type']) > 35) { + $sShort = clHtmlSpecialChars(capiStrTrimHard($aValue['type'], 35)); + $aValue['type'] = sprintf($sMouseoverTemplate, cSecurity::escapeString(clHtmlSpecialChars($aValue['type'])), cSecurity::escapeString($sShort)); + } else { + $aValue['type'] = clHtmlEntities($aValue['type']); + } + + if (strlen($aValue['name']) > 35) { + $sShort = clHtmlSpecialChars(capiStrTrimHard($aValue['name'], 35)); + $aValue['name'] = sprintf($sMouseoverTemplate, cSecurity::escapeString(clHtmlSpecialChars($aValue['name'])), cSecurity::escapeString($sShort)); + } else { + $aValue['name'] = clHtmlEntities($aValue['name']); + } + + if (strlen($aValue['value']) > 35) { + $sShort = clHtmlSpecialChars(capiStrTrimHard($aValue['value'], 35)); + $aValue['value'] = sprintf($sMouseoverTemplate, cSecurity::escapeString(clHtmlSpecialChars($aValue['value'])), cSecurity::escapeString($sShort)); + } else { + $aValue['value'] = clHtmlEntities($aValue['value']); + } + + $oList->setData($iCounter, $aValue['type'], $aValue['name'], $aValue['value'], $oLnkEdit->render() . '   ' . $oLnkDelete->render()); + } + $iCounter++; + } +} else { + $oList->objItem->updateAttributes(array('colspan' => 4)); + $oList->setData(0, i18n("No defined properties")); +} + +$oForm = new UI_Table_Form('clientsettings'); +$oForm->setVar('area', $area); +$oForm->setVar('frame', $frame); +$oForm->setVar('action', 'clientsettings_save_item'); +$oForm->setVar('idclient', $idclient); +$oForm->setVar('idclientslang', $_REQUEST["idclientslang"]); +$oForm->addHeader(i18n('Add new variable')); + +$oInputbox = new cHTMLTextbox('cstype'); +$oInputbox->setStyle('border:1px;border-style:solid;border-color:black;'); +$oForm->add(i18n('Type'), $oInputbox->render()); + +$oInputbox = new cHTMLTextbox('csname'); +$oInputbox->setStyle('border:1px;border-style:solid;border-color:black;'); +$oForm->add(i18n('Name'), $oInputbox->render()); + +$oInputbox = new cHTMLTextbox('csvalue'); +$oInputbox->setStyle('border:1px;border-style:solid;border-color:black;'); +$oForm->add(i18n('Value'), $oInputbox->render()); + +if (($_GET['action'] == "clientsettings_edit_item")) { + $oForm2 = new UI_Form("clientsettings"); + $oForm2->setVar("area", $area); + $oForm2->setVar("frame", $frame); + $oForm2->setVar("action", "clientsettings_save_item"); + $oForm2->setVar("idclient", $idclient); + $oForm2->setVar("idclientslang", $_REQUEST["idclientslang"]); + + $oForm2->add('list', $oList->render()); + $sSettingsList = $oForm2->render(); +} else { + $sSettingsList = $oList->render(); +} + +$sTooltippScript = ' + '; + +$oPage->addScript('tooltippstyle', ''); +$oPage->setContent($sTooltippScript . "\n" . $oFrmRange->render() . '
' . $sSettingsList . '
' . $oForm->render()); +$oPage->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.con_art_overview.php b/branches/conlite20/conlite/includes/include.con_art_overview.php new file mode 100644 index 0000000..5458756 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.con_art_overview.php @@ -0,0 +1,1021 @@ + + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-26 + * modified 2005-06-23, Andreas Lindner + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.con_art_overview.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes","functions.tpl.php"); +cInclude("includes","functions.str.php"); +cInclude("includes", "functions.pathresolver.php"); +$firstMark = false; +$db2 = new DB_ConLite; + +$idcat = ( isset($_GET['idcat']) && is_numeric($_GET['idcat'])) ? $_GET['idcat'] : -1; +$next = ( isset($_GET['next']) && is_numeric($_GET['next']) && $_GET['next'] > 0) ? $_GET['next'] : 0; + +$dateformat = getEffectiveSetting("backend", "timeformat_date", "Y-m-d"); +$debug = false; +$templateDescription = ''; + +if (!isset($syncfrom)) +{ + $syncfrom = -1; +} + +$syncoptions = $syncfrom; + +if ($action == "con_duplicate") +{ + $newidartlang = conCopyArticle($duplicate, $idcat); +} + +if ($action == "con_syncarticle") +{ + /* Verify that the category is available in this language */ + $sql = "SELECT idcatlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + if ($db->next_record()) + { + conSyncArticle($syncarticle, $sourcelanguage, $lang); + } else { + strSyncCategory($idcat, $sourcelanguage, $lang); + conSyncArticle($syncarticle, $sourcelanguage, $lang); + } +} + +/* Which columns to display? */ +$listColumns = array( "start" => i18n("Article"), + "title" => i18n("Title"), + "changeddate" => i18n("Changed"), + "publisheddate" => i18n("Published"), + "sortorder" => i18n("Sort order"), + "template" => i18n("Template"), + "actions" => i18n("Actions")); + +/* Which actions to display? */ +$actionList = array( "online", + "duplicate", + "locked", + "todo", + "delete", + "usetime"); + + +/* Call chains to process the columns and the action list */ +$_cecIterator = $_cecRegistry->getIterator("Contenido.ArticleList.Columns"); + +if ($_cecIterator->count() > 0) +{ + while ($chainEntry = $_cecIterator->next()) + { + $newColumnList = $chainEntry->execute($listColumns); + + if (is_array($newColumnList)) + { + $listColumns = $newColumnList; + } + } +} + +$_cecIterator = $_cecRegistry->getIterator("Contenido.ArticleList.Actions"); + +if ($_cecIterator->count() > 0) +{ + while ($chainEntry = $_cecIterator->next()) + { + $newActionList = $chainEntry->execute($actionList); + + if (is_array($newActionList)) + { + $actionList = $newActionList; + } + } +} + +$cat_idtpl = 0; + +if ( is_numeric($idcat) && ($idcat >= 0)) { + // Saving sort and elements per page user settings (if specified) + // Should be changed to User->setProperty... someday + if (isset($sort)) + { + $currentuser->setUserProperty("system","sortorder-idlang-$lang-idcat-$idcat",$sort); + } + + if (isset($elemperpage) && is_numeric($elemperpage)) + { + $currentuser->setUserProperty("system","elemperpage-idlang-$lang-idcat-$idcat", $elemperpage); + + } else { + $elemperpage = $currentuser->getUserProperty("system","elemperpage-idlang-$lang-idcat-$idcat"); + + if (!is_numeric($elemperpage)) + { + $elemperpage = 25; + } + } + + $col = new InUseCollection(); + + if ((( $idcat == 0 || + $perm->have_perm_area_action("con")) && $perm->have_perm_item("str", $idcat)) || + $perm->have_perm_area_action("con", "con_makestart") || + $perm->have_perm_area_action("con", "con_makeonline") || + $perm->have_perm_area_action("con", "con_deleteart") || + $perm->have_perm_area_action("con", "con_tplcfg_edit") || + $perm->have_perm_area_action("con", "con_lock") || + $perm->have_perm_area_action("con", "con_makecatonline") || + $perm->have_perm_area_action("con", "con_changetemplate") || + $perm->have_perm_area_action("con_editcontent", "con_editart") || + $perm->have_perm_area_action("con_editart", "con_edit") || + $perm->have_perm_area_action("con_editart", "con_newart") || + $perm->have_perm_area_action("con_editart", "con_saveart") || + $perm->have_perm_area_action("con_tplcfg", "con_tplcfg_edit") || + $perm->have_perm_area_action_item("con", "con_makestart", $idcat) || + $perm->have_perm_area_action_item("con", "con_makeonline", $idcat) || + $perm->have_perm_area_action_item("con", "con_deleteart", $idcat) || + $perm->have_perm_area_action_item("con", "con_tplcfg_edit", $idcat) || + $perm->have_perm_area_action_item("con", "con_lock", $idcat) || + $perm->have_perm_area_action_item("con", "con_makecatonline", $idcat) || + $perm->have_perm_area_action_item("con", "con_changetemplate", $idcat) || + $perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat) || + $perm->have_perm_area_action_item("con_editart", "con_edit", $idcat) || + $perm->have_perm_area_action_item("con_editart", "con_newart", $idcat) || + $perm->have_perm_area_action_item("con_tplcfg", "con_tplcfg_edit",$idcat) || + $perm->have_perm_area_action_item("con_editart", "con_saveart", $idcat)) { + + $sort = $currentuser->getUserProperty("system","sortorder-idlang-$lang-idcat-$idcat"); + + $sql = "SELECT + a.idart AS idart, + a.idlang AS idlang, + a.idartlang AS idartlang, + a.title AS title, + c.idcat AS idcat, + {ISSTART} + c.idcatart AS idcatart, + a.idtplcfg AS idtplcfg, + a.published AS published, + a.online AS online, + a.created AS created, + a.lastmodified AS lastmodified, + a.timemgmt AS timemgmt, + a.datestart AS datestart, + a.dateend AS dateend, + a.artsort AS artsort, + a.redirect AS redirect, + a.locked AS locked + FROM + ".$cfg["tab"]["art_lang"]." AS a, + ".$cfg["tab"]["art"]." AS b, + ".$cfg["tab"]["cat_art"]." AS c + WHERE + (a.idlang = '".$lang."' {SYNCOPTIONS}) AND + a.idart = b.idart AND + b.idclient = '".$client."' AND + b.idart = c.idart AND + c.idcat = '".$idcat."'"; + + // Simple SQL statement to get the number of articles + $sql_count = + "SELECT + COUNT(*) AS article_count + FROM + ".$cfg["tab"]["art_lang"]." AS a, + ".$cfg["tab"]["art"]." AS b, + ".$cfg["tab"]["cat_art"]." AS c + WHERE + (a.idlang = '".Contenido_Security::toInteger($lang)."' {SYNCOPTIONS}) AND + a.idart = b.idart AND + b.idclient = '".Contenido_Security::toInteger($client)."' AND + b.idart = c.idart AND + c.idcat = '".Contenido_Security::toInteger($idcat)."'"; + + if ($cfg["is_start_compatible"] == true) + { + $sql = str_replace("{ISSTART}", "c.is_start AS is_start,", $sql); + } else { + $sql = str_replace("{ISSTART}", "", $sql); + } + + if ($syncoptions == -1) + { + $sql = str_replace("{SYNCOPTIONS}", "", $sql); + $sql_count = str_replace("{SYNCOPTIONS}", "", $sql_count); + } else { + $sql = str_replace("{SYNCOPTIONS}", "OR a.idlang = '".$syncoptions."'", $sql); + $sql_count = str_replace("{SYNCOPTIONS}", "OR a.idlang = '".$syncoptions."'", $sql_count); + } + + # Article sort + switch ($sort) + { + case 2: + $sql .= " ORDER BY a.lastmodified DESC"; + break; + case 3: + $sql .= " ORDER BY a.published DESC, a.lastmodified DESC"; + break; + case 4: + $sql .= " ORDER BY a.artsort ASC"; + break; + default: + // Default sort order + $sql .= " ORDER BY a.title ASC"; + $sort = 1; + } + + + # Getting article count, if necessary + if ($elemperpage > 0) + { + $db->query($sql_count); + $db->next_record(); + $iArticleCount = $db->f("article_count"); + + # If not beyond scope, limit + if ($iArticleCount == 0) + { + $next = 0; + } else if ($next >= $iArticleCount) { + $next = (ceil($iArticleCount / $elemperpage) - 1) * $elemperpage; + } + $sql .= " LIMIT $next, $elemperpage"; + } else { + $iArticleCount = 0; // Will be used to "hide" the browsing area + } + + # Debug info + if ( $debug ) { + echo "
";
+			echo $sql;
+			echo "
"; + } + + # Getting data + $db->query($sql); + + # Reset Template + $tpl->reset(); + + # No article + $no_article = true; + + $aArticles = Array(); + + while ($db->next_record() ) { + $sItem = "k" . $db->f("idart"); + + if ($db->f("idlang") == $lang || !array_key_exists($sItem, $aArticles)) { + $aArticles[$sItem]["idart"] = $db->f("idart"); + $aArticles[$sItem]["idlang"] = $db->f("idlang"); + $aArticles[$sItem]["idartlang"] = $db->f("idartlang"); + $aArticles[$sItem]["title"] = $db->f("title"); + if ($cfg["is_start_compatible"] == true) { + $aArticles[$sItem]["is_start"] = $db->f("is_start"); + } else { + $aArticles[$sItem]["is_start"] = isStartArticle($db->f("idartlang"), $idcat, $lang); + } + + $aArticles[$sItem]["idcatart"] = $db->f("idcatart"); + $aArticles[$sItem]["idtplcfg"] = $db->f("idtplcfg"); + $aArticles[$sItem]["published"] = $db->f("published"); + $aArticles[$sItem]["online"] = $db->f("online"); + $aArticles[$sItem]["created"] = $db->f("created"); + $aArticles[$sItem]["idcat"] = $db->f("idcat"); + $aArticles[$sItem]["lastmodified"] = $db->f("lastmodified"); + $aArticles[$sItem]["timemgmt"] = $db->f("timemgmt"); + $aArticles[$sItem]["datestart"] = $db->f("datestart"); + $aArticles[$sItem]["dateend"] = $db->f("dateend"); + $aArticles[$sItem]["artsort"] = $db->f("artsort"); + $aArticles[$sItem]["locked"] = $db->f("locked"); + $aArticles[$sItem]["redirect"] = $db->f("redirect"); + } + } + + $artlist = array(); + $dyn_cnt = 0; + foreach ($aArticles as $sart) { + $dyn_cnt++; + $idart = $sart["idart"]; + $idlang = $sart["idlang"]; + + $idtplcfg = $sart["idtplcfg"]; + $idartlang = $sart["idartlang"]; + $lidcat = $sart["idcat"]; + $idcatlang = 0; + $idart = $sart["idart"]; + $published = $sart["published"]; + $online = $sart["online"]; + + $is_start = $sart["is_start"]; + + $idcatart = $sart["idcatart"]; + $created = $sart["created"]; + $modified = $sart["lastmodified"]; + $title = clHtmlSpecialChars($sart["title"]); + $timemgmt = $sart["timemgmt"]; + $datestart = $sart["datestart"]; + $dateend = $sart["dateend"]; + $sortkey = $sart["artsort"]; + $locked = $sart["locked"]; + $redirect = $sart["redirect"]; + + $published = ($published != '1000-01-01 00:00:00') ? date($dateformat,strtotime($published)) : i18n("not yet published"); + $created = date($dateformat,strtotime($created)); + $modified = date($dateformat,strtotime($modified)); + $alttitle = "idart".': '.$idart.' '."idcatart".': '.$idcatart.' '."idartlang".': '.$idartlang; + + if (($obj = $col->checkMark("article", $idartlang)) === false) + { + $inUse = false; + } else { + $vuser = new User; + $vuser->loadUserByUserID($obj->get("userid")); + $inUseUser = $vuser->getField("username"); + $inUseUserRealName = $vuser->getField("realname"); + + $inUse = true; + $title = $title . " (" . i18n("Article is in use").")"; + $alttitle = sprintf(i18n("Article in use by %s (%s)"), $inUseUser, $inUseUserRealName). " ". $alttitle; + } + + $bgcolor = $cfg["color"]["table_light"]; + if ($idlang != $lang) + { + $bgcolor = ( is_int($dyn_cnt / 2) ) ? $cfg["color"]["table_light_sync"] : $cfg["color"]["table_dark_sync"]; + } + + /* Id of the row, + stores informations about + the article and category */ + $tmp_rowid = $idart."-".$idartlang."-".$lidcat."-".$idcatlang."-".$idcatart."-".$idlang; + $tpl->set('d', 'ROWID', $tmp_rowid); + + $colitem[$tmp_rowid] = $bgcolor; + # Backgroundcolor of the table row + $tpl->set('d', 'BGCOLOR', $bgcolor); + + # Article Title + if ($perm->have_perm_area_action( "con_editcontent", "con_editart" ) || + $perm->have_perm_area_action_item( "con_editcontent", "con_editart" ,$idcat) ) + { + if ($idlang != $lang) + { + $tmp_alink = $sess->url("main.php?area=con_editcontent&action=con_editart&changeview=prev&idartlang=$idartlang&idart=$idart&idcat=$idcat&frame=$frame&tmpchangelang=$idlang"); + $titlelink = ''.$title.''; + } else { + $tmp_alink = $sess->url("main.php?area=con_editcontent&action=con_editart&changeview=edit&idartlang=$idartlang&idart=$idart&idcat=$idcat&frame=$frame"); + $titlelink = ''.$title.''; + } + } else { + $tmp_alink = ""; + $titlelink = $title; + } + + if ($timemgmt == "1") + { + $sql = "SELECT NOW() AS TIME"; + + $db3 = new DB_ConLite; + + $db3->query($sql); + $db3->next_record(); + + $starttimestamp = strtotime($datestart); + $endtimestamp = strtotime($dateend); + $nowtimestamp = strtotime($db3->f("TIME")); + + if (($nowtimestamp < $endtimestamp) && ($nowtimestamp > $starttimestamp)) + { + $usetime = 'Artikel mit Zeitsteuerung online'; + } else { + $usetime = 'Artikel mit Zeitsteuerung offline'; + } + } else { + $usetime = ""; + } + + # Article Title + if (($perm->have_perm_area_action( "con", "con_lock" ) || + $perm->have_perm_area_action_item( "con", "con_lock" ,$idcat)) && $inUse == false ) + { + if ($locked == 1) + { + $lockimg = 'images/article_locked.gif'; + $lockalt = i18n("Unfreeze article"); + } else { + $lockimg = 'images/article_unlocked.gif'; + $lockalt = i18n("Freeze article"); + } + $tmp_lock = ''.$lockalt.''; + } else { + if ($locked == 1) + { + $lockimg = 'images/article_locked.gif'; + $lockalt = i18n("Article is frozen"); + } else { + $lockimg = 'images/article_unlocked.gif'; + $lockalt = i18n("Article is not frozen"); + } + $tmp_lock = ''.$lockalt.''; + } + + if ($idlang != $lang) + { + $lockedlink = ""; + } else { + $lockedlink = $tmp_lock; + } + + if ($sortkey == "") + { + $sortkey = " "; + } + + $tmp_articletitle = $titlelink; + + # Article conf button + if ($perm->have_perm_area_action("con_editart","con_edit") || + $perm->have_perm_area_action_item("con_editart","con_edit",$idcat)) + { + $tmp_artconf = ''.i18n('; + } else { + $tmp_artconf=""; + } + + $tmp_sync = ''; + if ($idlang != $lang) + { + + $sql = "SELECT idcatlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'"; + + $db->query($sql); + if ($db->next_record()) + { + $tmp_sync = ''.i18n('; + + } else { + $tmp_sync = ""; + } + } + + # Article Template + if ( !is_object($db2) ) + { + $db2 = new DB_ConLite; + } + + $sql2 = + "SELECT + b.name AS tplname, + b.idtpl AS idtpl, + b.description AS description + FROM + ".$cfg["tab"]["tpl_conf"]." AS a, + ".$cfg["tab"]["tpl"]." AS b + WHERE + a.idtplcfg = '".Contenido_Security::toInteger($idtplcfg)."' AND + a.idtpl = b.idtpl"; + + $db2->query($sql2); + $db2->next_record(); + + $a_tplname = $db2->f("tplname"); + $a_idtpl = $db2->f("idtpl"); + + $templateDescription = $db2->f("description"); + + + # Uses Category Template + if ( 0 == $idtplcfg ) + { + $a_tplname = "--- ".i18n("None")." ---"; + } + + # Make Startarticle button + $imgsrc = "isstart"; + + if ($is_start == false) { + $imgsrc.='0'; + } else { + $imgsrc.='1'; + } + + if (isArtInMultipleUse($idart)) { + $imgsrc.='m'; + } + + if ((int)$redirect == 1) { + $imgsrc.='r'; + } + + $imgsrc.='.gif'; + + if ( ($perm->have_perm_area_action("con","con_makestart") || $perm->have_perm_area_action_item("con","con_makestart",$idcat)) && $idcat != 0) { + if ( $is_start == false) { + $tmp_link = ''.i18n('; + } else { + $tmp_link = ''.i18n('; + } + } else { + if ($is_start == true) { + $sTitle = i18n("Start article"); + } else { + $sTitle = i18n("Normal article"); + } + + $tmp_img = ''.$sTitle.''; + + $tmp_link = $tmp_img; + } + + $tmp_start = $tmp_link; + + # Make copy button + if ( ($perm->have_perm_area_action("con","con_duplicate") || $perm->have_perm_area_action_item("con","con_duplicate",$idcat)) && $idcat != 0) { + + $imgsrc = "but_copy.gif"; + $tmp_link = ''.i18n('; + } else { + $tmp_link = ""; + } + + if ($idlang != $lang) + { + $duplicatelink = ""; + } else { + $duplicatelink = $tmp_link; + } + + $subject = urlencode(sprintf(i18n("Reminder for Article '%s'"),$title)); + $mycatname = ""; + conCreateLocationString($idcat, " / ", $mycatname); + $message = urlencode(sprintf(i18n("Reminder for Article '%s'\nCategory: %s"),$title,$mycatname)); + + $todolink = new TODOLink("idart", $idart, $subject, $message); + + # Make On-/Offline button + if ( $online ) { + if (($perm->have_perm_area_action("con","con_makeonline") || + $perm->have_perm_area_action_item("con","con_makeonline",$idcat)) && ($idcat != 0)) + { + $tmp_online = ''.i18n('; + } else { + $tmp_online = ''.i18n('; + } + } else { + if (($perm->have_perm_area_action("con","con_makeonline") || + $perm->have_perm_area_action_item("con","con_makeonline",$idcat)) && ($idcat != 0)) + { + $tmp_online = ''.i18n('; + } else { + $tmp_online = ''.i18n('; + } + } + + if ($idlang != $lang) + { + $onlinelink = ""; + } else { + $onlinelink = $tmp_online; + } + + # Delete button + if (($perm->have_perm_area_action("con","con_deleteart") || + $perm->have_perm_area_action_item("con","con_deleteart",$idcat)) && $inUse == false) + { + $tmp_title = $title; + + if (strlen($tmp_title) > 30) + { + $tmp_title = substr($tmp_title, 0, 27) . "..."; + } + + $confirmString = sprintf(i18n("Are you sure to delete the following article:

%s"),clHtmlSpecialChars($tmp_title)); + $tmp_del = ''.i18n('; + + } else { + $tmp_del = ""; + } + + if ($idlang != $lang) + { + $deletelink = ""; + } else { + $deletelink = $tmp_del; + } + + // DIRECTION + cInclude('includes', 'functions.lang.php'); + $tpl->set('d', 'DIRECTION', 'dir="' . langGetTextDirection($lang) . '"'); + + # Next iteration + + # Articles found + $no_article = false; + foreach ($listColumns as $listColumn => $ctitle) + { + switch ($listColumn) + { + case "start": + $value = $tmp_start; + break; + case "title": + $value = $tmp_articletitle; + break; + case "changeddate": + $value = $modified; + break; + case "publisheddate": + $value = $published; + break; + case "sortorder": + $value = $sortkey; + break; + case "template": + $value = $a_tplname; + break; + case "actions": + $actions = array(); + foreach ($actionList as $actionItem) + { + switch ($actionItem) + { + case "todo": + $actionValue = $todolink->render(); + break; + case "artconf": + $actionValue = $tmp_artconf; + break; + case "online": + $actionValue = $onlinelink; + break; + case "locked": + $actionValue = $lockedlink; + break; + case "duplicate": + $actionValue = $duplicatelink; + break; + case "delete": + $actionValue = $deletelink; + break; + case "usetime": + $actionValue = $usetime; + break; + default: + /* Ask chain about the entry */ + $_cecIterator = $_cecRegistry->getIterator("Contenido.ArticleList.RenderAction"); + $contents = array(); + if ($_cecIterator->count() > 0) + { + while ($chainEntry = $_cecIterator->next()) + { + $contents[] = $chainEntry->execute($idcat, $idart, $idartlang, $actionItem); + } + } + $actionValue = implode("", $contents); + break; + } + + $actions[] = $actionValue; + } + + if ($tmp_sync != '') { + $actions[] = $tmp_sync; + } + + $value = implode("\n", $actions); + break; + default: + $contents = array(); + /* Call chain to retrieve value */ + $_cecIterator = $_cecRegistry->getIterator("Contenido.ArticleList.RenderColumn"); + + if ($_cecIterator->count() > 0) + { + $contents = array(); + while ($chainEntry = $_cecIterator->next()) + { + $contents[] = $chainEntry->execute($idcat, $idart, $idartlang, $listColumn); + } + } + $value = implode("", $contents); + } + $artlist[$tmp_rowid][$listColumn] = $value; + $artlist[$tmp_rowid]['templateDescription'] = $templateDescription; + } + } + + + $headers = array(); + + foreach ($listColumns as $key => $listColumn) + { + /* Dirty hack to force column widths */ + if ($key == "title" || $listColumn == i18n("Title")) + { + $headers[] = ''.$listColumn.''; + } else { + $headers[] = ''.$listColumn.''; + } + } + + $tpl->set('s', 'HEADERS', implode("\n", $headers)); + + if($elemperpage > 0 && $iArticleCount > 0) { + $sBrowseLinks = ""; + for ($i = 1; $i <= ceil($iArticleCount / $elemperpage); $i++) { + $iNext = ($i - 1) * $elemperpage; + if ($sBrowseLinks !== "") { + $sBrowseLinks .= " "; + } + if ($next == $iNext) { + $sBrowseLinks .= $i."\n"; // I'm on the current page, no link + } else { + $tmp_alink = $sess->url("main.php?area=con&frame=$frame&idcat=$idcat&next=$iNext"); + $sBrowseLinks .= ''.$i.''."\n"; + } + } + $tpl->set('s', 'NEXT', $next); + $tpl->set('s', 'BROWSE', sprintf(i18n("Go to page: %s"), $sBrowseLinks)); + } else { + $tpl->set('s', 'NEXT', "0"); + $tpl->set('s', 'BROWSE', sprintf(i18n("Go to page: %s"), "1")); + } + + $tpl->set('s', 'CLICK_ROW_NOTIFICATION', i18n("with click select line for further treatment")); + + + if (count($artlist) > 0) + { + foreach ($artlist as $key2 => $artitem) + { + if ($firstMark == false) { + $script = 'function initTheOne() { + var theOne = document.getElementById("'.$key2.'"); + artRow.reset(); + artRow.over( theOne ); + artRow.click( theOne ) + } + initTheOne()'; + $firstMark = true; + $tpl->set('s', 'ROWMARKSCRIPT', $script); + } + + $cells = array(); + + foreach ($listColumns as $key => $listColumn) + { + // Description for hover effect + if($key == 'template') + { + $templateDescription = $artitem['templateDescription']; + $descString = ''.$artitem[$key].''; + + $sTemplatename = capiStrTrimHard($artitem[$key], 20); + if (strlen($artitem[$key]) > 20) { + $cells[] = ''.$sTemplatename.''; + } else { + $cells[] = ''.$artitem[$key].''; + } + } + else + { + $cells[] = ''.$artitem[$key].''; + } + } + $tpl->set('d', 'CELLS', implode("\n", $cells)); + $tpl->set('d', 'BGCOLOR', $colitem[$key2]); + + if ($colitem[$key2] == $cfg["color"]["table_dark_sync"] || $colitem[$key2] == $cfg["color"]["table_light_sync"]) { + $tpl->set('d', 'CSS_CLASS', 'class="con_sync"'); + } else { + $tpl->set('d', 'CSS_CLASS', ''); + } + + $tpl->set('d', 'ROWID', $key2); + $tpl->next(); + } + }else + { + $emptyCell = ''.i18n("No articles found").''; + $tpl->set('d', 'CELLS', $emptyCell); + $tpl->set('s', 'ROWMARKSCRIPT', ''); + } + + # Sortierungs select + $s_types = array(1 => i18n("Alphabetical"), + 2 => i18n("Last change"), + 3 => i18n("Published date"), + 4 => i18n("Sort key")); + + $tpl2 = new Template; + $tpl2->set('s', 'NAME', 'sort'); + $tpl2->set('s', 'CLASS', 'text_medium'); + $tpl2->set('s', 'OPTIONS', 'onchange="artSort(this)"'); + + foreach ($s_types as $key => $value) { + + $selected = ( $sort == $key ) ? 'selected="selected"' : ''; + + $tpl2->set('d', 'VALUE', $key); + $tpl2->set('d', 'CAPTION', $value); + $tpl2->set('d', 'SELECTED', $selected); + $tpl2->next(); + + } + + $select = ( !$no_article ) ? $tpl2->generate($cfg["path"]["templates"] . $cfg['templates']['generic_select'], true) : ' '; + $caption = ( !$no_article ) ? i18n("Sort articles:") : ' '; + + $tpl->set('s', 'ARTSORTCAPTION', $caption); + $tpl->set('s', 'ARTSORT', $select); + + # Elements per Page select + $aElemPerPage = array(0 => i18n("All"), + 25 => "25", + 50 => "50", + 75 => "75", + 100 => "100"); + + $tpl2 = new Template; + $tpl2->set('s', 'NAME', 'sort'); + $tpl2->set('s', 'CLASS', 'text_medium'); + $tpl2->set('s', 'OPTIONS', 'onchange="changeElemPerPage(this)"'); + + foreach ($aElemPerPage as $key => $value) { + $selected = ( $elemperpage == $key ) ? 'selected="selected"' : ''; + + $tpl2->set('d', 'VALUE', $key); + $tpl2->set('d', 'CAPTION', $value); + $tpl2->set('d', 'SELECTED', $selected); + $tpl2->next(); + } + + $select = ( !$no_article ) ? $tpl2->generate($cfg["path"]["templates"] . $cfg['templates']['generic_select'], true) : ' '; + $caption = ( !$no_article ) ? i18n("Items per page:") : ' '; + + $tpl->set('s', 'ELEMPERPAGECAPTION', $caption); + $tpl->set('s', 'ELEMPERPAGE', $select); + + + # Extract Category and Catcfg + $sql = "SELECT + b.name AS name, + d.idtpl AS idtpl + FROM + (".$cfg["tab"]["cat"]." AS a, + ".$cfg["tab"]["cat_lang"]." AS b, + ".$cfg["tab"]["tpl_conf"]." AS c) + LEFT JOIN + ".$cfg["tab"]["tpl"]." AS d + ON + d.idtpl = c.idtpl + WHERE + a.idclient = '".Contenido_Security::toInteger($client)."' AND + a.idcat = '".Contenido_Security::toInteger($idcat)."' AND + b.idlang = '".Contenido_Security::toInteger($lang)."' AND + b.idcat = a.idcat AND + c.idtplcfg = b.idtplcfg"; + + $db->query($sql); + + if ($db->next_record()) + { + //$foreignlang = false; + //conCreateLocationString($idcat, " / ", $cat_name); + } + + // Show path of selected category to user + prCreateURLNameLocationString($idcat, '/', $cat_name_tmp); + + if ($cat_name_tmp != '') { + $cat_name = '
'; + $cat_name .= $cat_name_tmp.'/'; + $cat_name .= (isset($sFistArticleName))?clHtmlSpecialChars($sFistArticleName):''; + $cat_name .= "
"; + } else { + $cat_name = ''; + } + + $cat_idtpl = $db->f("idtpl"); + + # Hinweis wenn kein Artikel gefunden wurde + if ( $no_article ) { + + $tpl->set("d", "START", " "); + $tpl->set("d", "ARTICLE", i18n("No articles found")); + $tpl->set("d", "PUBLISHED", " "); + $tpl->set("d", "LASTMODIFIED", " "); + $tpl->set("d", "ARTCONF", " "); + $tpl->set("d", "TPLNAME", " "); + $tpl->set("d", "LOCKED", " "); + $tpl->set("d", "DUPLICATE", " "); + $tpl->set("d", "TPLCONF", " "); + $tpl->set("d", "ONLINE", " "); + $tpl->set("d", "DELETE", " "); + $tpl->set("d", "USETIME", " "); + $tpl->set("d", "TODO", " "); + $tpl->set("d", "SORTKEY", " "); + + $tpl->next(); + } + + # Kategorie anzeigen und Konfigurieren button + /* JL 23.06.03 Check right from "Content" instead of "Category" + if ($perm->have_perm_area_action("str_tplcfg","str_tplcfg") || + $perm->have_perm_area_action_item("str_tplcfg","str_tplcfg",$lidcat)) */ + + if (($perm->have_perm_area_action_item( "con", "con_tplcfg_edit", $idcat ) || + $perm->have_perm_area_action( "con", "con_tplcfg_edit" ))) { + + if ( 0 != $idcat ) { + + $tpl->set('s', 'CATEGORY', $cat_name); + $tpl->set('s', 'CATEGORY_CONF', $tmp_img); + $tpl->set('s', 'CATEGORY_LINK', $tmp_link); + } else { + $tpl->set('s', 'CATEGORY', $cat_name); + $tpl->set('s', 'CATEGORY_CONF', ' '); + $tpl->set('s', 'CATEGORY_LINK', ' '); + } + } else { + $tpl->set('s', 'CATEGORY', $cat_name); + $tpl->set('s', 'CATEGORY_CONF', ' '); + $tpl->set('s', 'CATEGORY_LINK', ' '); + } + + # SELF_URL (Variable f�r das javascript); + $tpl->set('s', 'SELF_URL', $sess->url("main.php?area=con&frame=4&idcat=$idcat")); + + # New Article link + if (($perm->have_perm_area_action("con_editart", "con_newart") || + $perm->have_perm_area_action_item("con_editart", "con_newart", $idcat))) + { + if ( $idcat != 0 && $cat_idtpl != 0) + { + $tpl->set('s', 'NEWARTICLE_TEXT', ''.i18n("Create new article").''); + $tpl->set('s', 'NEWARTICLE_IMG', ''.i18n('); + } + else + { + $tpl->set('s', 'NEWARTICLE_TEXT', ' '); + $tpl->set('s', 'NEWARTICLE_IMG', ' '); + } + } + else + { + $tpl->set('s', 'NEWARTICLE_TEXT', ' '); + $tpl->set('s', 'NEWARTICLE_IMG', ' '); + } + + $str = ""; + + /* Session ID */ + $tpl->set('s', 'SID', $sess->id); + + $tpl->set('s', 'NOTIFICATION', $str); + + # Generate template + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['con_art_overview']); + } else { + $notification->displayNotification("error", i18n("Permission denied")); + } +} else { + $tpl->reset(); + $tpl->set('s', 'CONTENTS', ''); + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['blank']); +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.con_edit_form.php b/branches/conlite20/conlite/includes/include.con_edit_form.php new file mode 100644 index 0000000..5d63b86 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.con_edit_form.php @@ -0,0 +1,768 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-21 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-08-29, Murat Purc, add handling of urlname + * modified 2008-09-11, Andreas Lindner, added decoding of text and cat names + * with unFilter function + * + * $Id: include.con_edit_form.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes", "functions.str.php"); +cInclude("includes", "functions.pathresolver.php"); + +$tpl->reset(); + +if ($action == "remove_assignments") +{ + $sql = "DELETE FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idcat != '".Contenido_Security::toInteger($idcat)."'"; + $db->query($sql); +} +if ($action == "con_newart" && $newart != true) +{ + // nothing to be done here ?! +} +else { + $disabled = ""; + + if ($perm->have_perm_area_action($area, "con_edit") || + $perm->have_perm_area_action_item($area,"con_edit", $idcat)) { + + $sql = "SELECT * FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idcat = '".Contenido_Security::toInteger($idcat)."'"; + $db->query($sql); + $db->next_record(); + + if ($cfg["is_start_compatible"] == true) + { + $tmp_is_start = $db->f("is_start"); + } + + $tmp_cat_art = $db->f("idcatart"); + + $sql = "SELECT * FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + + $db->query($sql); + $db->next_record(); + + if ($cfg["is_start_compatible"] == false) + { + $tmp_is_start = isStartArticle($db->f("idartlang"), $idcat, $lang); + } + + if ( $db->f("created") ) { + + //****************** this art was edited before ******************** + $tmp_firstedit = 0; + $tmp_idartlang = $db->f("idartlang"); + $tmp_page_title = Contenido_Security::unFilter(stripslashes($db->f("pagetitle"))); + $tmp_idlang = $db->f("idlang"); + $tmp_title = Contenido_Security::unFilter($db->f("title")); + $tmp_urlname = Contenido_Security::unFilter($db->f("urlname")); // plugin Advanced Mod Rewrite - edit by stese + $tmp_artspec = $db->f("artspec"); + $tmp_summary = Contenido_Security::unFilter($db->f("summary")); + $tmp_created = $db->f("created"); + $tmp_lastmodified = $db->f("lastmodified"); + $tmp_author = $db->f("author"); + $tmp_modifiedby = $db->f("modifiedby"); + $tmp_online = $db->f("online"); + $tmp_published = $db->f("published"); + $tmp_publishedby = $db->f("publishedby"); + $tmp_datestart = $db->f("datestart"); + $tmp_dateend = $db->f("dateend"); + $tmp_sort = $db->f("artsort"); + $tmp_movetocat = $db->f("time_move_cat"); + $tmp_targetcat = $db->f("time_target_cat"); + $tmp_onlineaftermove = $db->f("time_online_move"); + $tmp_usetimemgmt = $db->f("timemgmt"); + $tmp_locked = $db->f("locked"); + + $tmp_redirect_checked = ($db->f("redirect") == '1') ? 'checked' : ''; + $tmp_redirect_url = ($db->f("redirect_url") != '0') ? $db->f("redirect_url") : "http://"; + $tmp_external_redirect_checked = ($db->f("external_redirect") == '1') ? 'checked' : ''; + + $idtplinput = $db->f("idtplinput"); + + if ($tmp_modifiedby == "") + { + $tmp_modifiedby = $tmp_author; + } + + $col = new InUseCollection; + + /* Remove all own marks */ + $col->removeSessionMarks($sess->id); + + if (($obj = $col->checkMark("article", $tmp_idartlang)) === false) + { + $col->markInUse("article", $tmp_idartlang, $sess->id, $auth->auth["uid"]); + $inUse = false; + $disabled = ""; + } else { + + $vuser = new User; + $vuser->loadUserByUserID($obj->get("userid")); + $inUseUser = $vuser->getField("username"); + $inUseUserRealName = $vuser->getField("realname"); + + $message = sprintf(i18n("Article is in use by %s (%s)"), $inUseUser, $inUseUserRealName); + $notification->displayNotification("warning", $message); + $inUse = true; + $disabled = 'disabled="disabled"'; + } + + if ($tmp_locked == 1) + { + $inUse = true; + $disabled = 'disabled="disabled"'; + } + + } else { + + //***************** this art is edited the first time ************* + + if (!$idart) $tmp_firstedit = 1; //**** is needed when input is written to db (update or insert) + + $tmp_idartlang = 0; + $tmp_idlang = $lang; + $tmp_page_title = stripslashes($db->f("pagetitle")); + $tmp_title = ""; + $tmp_urlname = ""; // plugin Advanced Mod Rewrite - edit by stese + $tmp_artspec = ""; + $tmp_summary = ""; + $tmp_created = date("Y-m-d H:i:s"); + $tmp_lastmodified = date("Y-m-d H:i:s"); + $tmp_published = date("Y-m-d H:i:s"); + $tmp_publishedby = ""; + $tmp_author = ""; + $tmp_online = "0"; + $tmp_datestart = "0000-00-00 00:00:00"; + $tmp_dateend = "0000-00-00 00:00:00"; + $tmp_keyart = ""; + $tmp_keyautoart = ""; + $tmp_sort = ""; + + if (!strHasStartArticle($idcat, $lang)) + { + $tmp_is_start = 1; + } + + $tmp_redirect_checked = ''; + $tmp_redirect_url = "http://"; + $tmp_external_redirect = ''; + + } + + $dateformat = getEffectiveSetting("backend", "timeformat", "Y-m-d H:i:s"); + + $tmp2_created = date($dateformat,strtotime($tmp_created)); + $tmp2_lastmodified = date($dateformat,strtotime($tmp_lastmodified)); + $tmp2_published = date($dateformat,strtotime($tmp_published)); + + $tpl->set('s', 'ACTION', $sess->url("main.php?area=$area&frame=$frame&action=con_saveart") ); + $tpl->set('s', 'HIDDENSESSION', $sess->hidden_session(true)); + $tpl->set('s', 'TMP_FIRSTEDIT', $tmp_firstedit); + $tpl->set('s', 'IDART', $idart); + $tpl->set('s', 'SID', $sess->id); + $tpl->set('s', 'IDCAT', $idcat); + $tpl->set('s', 'IDARTLANG', $tmp_idartlang ); + + $hiddenfields = ' + + '; + + $tpl->set('s', 'HIDDENFIELDS', $hiddenfields); + + // Show path of selected category to user + $catString = ''; + prCreateURLNameLocationString($idcat, '/', $catString); + $tpl->set('s', 'CATEGORY', $catString.'/'.clHtmlSpecialChars($tmp_title)); + + /* Title */ + $tpl->set('s', 'TITEL', i18n("Title")); + + // plugin Advanced Mod Rewrite - edit by stese + $tpl->set('s', 'URLNAME', i18n("Alias")); + // end plugin Advanced Mod Rewrite + + $arrArtSpecs = getArtSpec(); + + $tmp_inputArtSort = ""; + + if ($iAvariableSpec == 0) + { + $tmp_inputArtSort = i18n("No article specifications found!"); + } + + $tpl->set('s', 'ARTIKELART', i18n("Article specification")); + $tpl->set('s', 'ARTIKELARTSELECT', $tmp_inputArtSort); + + $tpl->set('s', 'TITEL-FIELD', ''); + + // plugin Advanced Mod Rewrite - edit by stese + $tpl->set('s', 'URLNAME-FIELD', ''); + // end plugin Advanced Mod Rewrite + + $tpl->set('s', 'ARTIKELID', "idart"); + $tpl->set('s', 'ARTID', $idart); + + $tpl->set('s', 'DIRECTLINKTEXT', i18n("Articlelink")); + + $select = new cHTMLSelectElement("directlink"); + $select->setEvent("change", "document.getElementById('linkhint').value = this.form.directlink.options[this.form.directlink.options.selectedIndex].value;"); + + $baselink = $cfgClient[$client]["path"]["htmlpath"]."front_content.php?idart=$idart"; + + $option[0] = new cHTMLOptionElement( i18n("Select an entry to display link"), ""); + $option[1] = new cHTMLOptionElement( i18n("Article only"), $baselink); + $option[2] = new cHTMLOptionElement( i18n("Article with Category"), $baselink."&idcat=$idcat"); + $option[3] = new cHTMLOptionElement( i18n("Article with Category and Language"), $baselink."&idcat=$idcat&lang=$lang"); + $option[4] = new cHTMLOptionElement( i18n("Article with Language"), $baselink."&lang=$lang"); + + $select->addOptionElement(0, $option[0]); + $select->addOptionElement(1, $option[1]); + $select->addOptionElement(2, $option[2]); + $select->addOptionElement(3, $option[3]); + $select->addOptionElement(4, $option[4]); + + $tpl->set('s', 'DIRECTLINK', $select->render().'

'); + + $tpl->set('s', 'ZUORDNUNGSID', "idcatart"); + $tpl->set('s', 'ALLOCID', $tmp_cat_art); + + /* Author */ + $tpl->set('s', 'AUTHOR_CREATOR', i18n("Author (Creator)")); + $tpl->set('s', 'AUTOR-ERSTELLUNGS-NAME', $classuser->getRealnameByUserName($tmp_author).''.' '); + $tpl->set('s', 'AUTOR-AENDERUNG-NAME', $classuser->getRealnameByUserName($tmp_modifiedby).' '); + + /* Created */ + $tmp_erstellt = ($tmp_firstedit == 1) ? '' : ''; + $tpl->set('s', 'ERSTELLT', i18n("Created")); + $tpl->set('s', 'ERSTELLUNGS-DATUM', $tmp2_created.$tmp_erstellt); + + /* Last modified */ + $tpl->set('s', 'AUTHOR_MODIFIER', i18n("Author (Modifier)")); + $tpl->set('s', 'LETZTE-AENDERUNG', i18n("Last modified")); + $tpl->set('s', 'AENDERUNGS-DATUM', $tmp2_lastmodified.''); + + /* Published */ + $tpl->set('s', 'PUBLISHING_DATE_LABEL', i18n("Publishing date")); + if($tmp_online){ + $tpl->set('s', 'PUBLISHING_DATE', $tmp2_published); + }else{ + $tpl->set('s', 'PUBLISHING_DATE', i18n("not yet published")); + } + + $tpl->set('s', 'PUBLISHER', i18n("Publisher")); + if($classuser->getRealnameByUserName($tmp_publishedby)!=''){ + $tpl->set('s', 'PUBLISHER_NAME', ''.$classuser->getRealnameByUserName($tmp_publishedby)); + }else{ + $tpl->set('s', 'PUBLISHER_NAME', ''.' '); + } + + /* Redirect */ + $tpl->set('s', 'WEITERLEITUNG', i18n("Redirect")); + $tpl->set('s', 'CHECKBOX', ''); + + /* Redirect - URL */ + if ($tmp_redirect_checked != '') + { + $forceDisable = ""; + } else { + $forceDisable = "disabled"; + } + + $tpl->set('s', 'URL', ''); + + /* Redirect - New window */ + if (getEffectiveSetting("articles", "show-new-window-checkbox", "false") == "true") + { + $tpl->set('s', 'CHECKBOX-NEWWINDOW', ''); + } else { + $tpl->set('s', 'CHECKBOX-NEWWINDOW', ' '); + } + + /* Online */ + if ($perm->have_perm_area_action("con", "con_makeonline") || + $perm->have_perm_area_action_item("con","con_makeonline", $idcat)) + { + $tmp_ocheck = ($tmp_online != 1) ? '' : ''; + } else { + $tmp_ocheck = ($tmp_online != 1) ? '' : ''; + } + + $tpl->set('s', 'ONLINE', 'Online'); + $tpl->set('s', 'ONLINE-CHECKBOX', $tmp_ocheck); + + + /* Startartikel */ + if ($perm->have_perm_area_action("con", "con_makestart") || + $perm->have_perm_area_action_item("con","con_makestart", $idcat)) + { + $tmp_start = ($tmp_is_start == 0) ? '' : ''; + } else { + $tmp_start = ($tmp_is_start == 0) ? '' : ''; + } + $tpl->set('s', 'STARTARTIKEL', i18n("Start article")); + $tpl->set('s', 'STARTARTIKEL-CHECKBOX', $tmp_start); + + /* Sortierung */ + $tpl->set('s', 'SORTIERUNG', i18n("Sort key")); + $tpl->set('s', 'SORTIERUNG-FIELD', ''); + + /* Category select */ + + /* Fetch setting */ + $oClient = new cApiClient($client); + $cValue = $oClient->getProperty("system", "multiassign", true); + $sValue = getSystemProperty("system", "multiassign", true); + + $tpl2 = new Template; + $button = ""; + $moveOK = true; + + if ($cValue == false || $sValue == false) + { + $sql = "SELECT idartlang, online FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND online='1' AND idlang != '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + + if ($db->num_rows() > 0) + { + $moveOK = false; + } else { + $moveOK = true; + } + + if ($moveOK == true) + { + if (count(conGetCategoryAssignments($idart)) > 1) + { + /* Old behaviour */ + $tpl2 = new Template; + $tpl2->set('s', 'ID', 'catsel'); + $tpl2->set('s', 'NAME', 'fake[]'); + $tpl2->set('s', 'CLASS', 'text_medium'); + $tpl2->set('s', 'OPTIONS', 'multiple="multiple" disabled="disabled" size="14" style="width: 400px;scrollbar-face-color:#C6C6D5;scrollbar-highlight-color:#FFFFFF;scrollbar-3dlight-color:#747488;scrollbar-darkshadow-color:#000000;scrollbar-shadow-color:#334F77;scrollbar-arrow-color:#334F77;scrollbar-track-color:#C7C7D6;background:lightgrey;"'); + + $rbutton = new cHTMLButton("removeassignment", i18n("Remove assignments")); + + $boxTitle = i18n("Remove multiple category assignments"); + $boxDescr = i18n("Do you really want to remove the assignments to all categories except the current one?"); + + $rbutton->setEvent("click", 'box.confirm(\''.$boxTitle.'\', \''.$boxDescr.'\', \'removeAssignments('.$idart.', '.$idcat.')\'); return false;'); + $button = "
".$rbutton->render(); + + $moveOK = false; + + } else { + $tpl2 = new Template; + $tpl2->set('s', 'ID', 'catsel'); + $tpl2->set('s', 'NAME', 'idcatnew[]'); + $tpl2->set('s', 'CLASS', 'text_medium'); + $tpl2->set('s', 'OPTIONS', 'size="14" style="width: 400px;scrollbar-face-color:#C6C6D5;scrollbar-highlight-color:#FFFFFF;scrollbar-3dlight-color:#747488;scrollbar-darkshadow-color:#000000;scrollbar-shadow-color:#334F77;scrollbar-arrow-color:#334F77;scrollbar-track-color:#C7C7D6;"'); + } + } else { + + $note = i18n("Language parts of the articles are existing in other languages and are online. To change the category assignment, please set the other articles offline first."); + $tpl2->set('s', 'ID', 'catsel'); + $tpl2->set('s', 'NAME', 'fake[]'); + $tpl2->set('s', 'CLASS', 'text_medium'); + $tpl2->set('s', 'OPTIONS', 'multiple="multiple" disabled="disabled" size="14" style="width: 400px;scrollbar-face-color:#C6C6D5;scrollbar-highlight-color:#FFFFFF;scrollbar-3dlight-color:#747488;scrollbar-darkshadow-color:#000000;scrollbar-shadow-color:#334F77;scrollbar-arrow-color:#334F77;scrollbar-track-color:#C7C7D6;background:lightgrey;"'); + } + + + } else { + /* Old behaviour */ + $tpl2->set('s', 'ID', 'catsel'); + $tpl2->set('s', 'NAME', 'idcatnew[]'); + $tpl2->set('s', 'CLASS', 'text_medium'); + $tpl2->set('s', 'OPTIONS', 'multiple="multiple" '.$disabled.' size="14" style="width: 400px;scrollbar-face-color:#C6C6D5;scrollbar-highlight-color:#FFFFFF;scrollbar-3dlight-color:#747488;scrollbar-darkshadow-color:#000000;scrollbar-shadow-color:#334F77;scrollbar-arrow-color:#334F77;scrollbar-track-color:#C7C7D6;"'); + } + + + if ( isset($tplinputchanged) && $tplinputchanged == 1 ) { + $tmp_idcat_in_art = $idcatnew; + + } else { + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart='".$idart."'"; // get all idcats that contain art + $db->query($sql); + + while ( $db->next_record() ) { + $tmp_idcat_in_art[] = $db->f("idcat"); + } + + if (!is_array($tmp_idcat_in_art)) { + $tmp_idcat_in_art[0] = $idcat; + } + } + + /* Start date */ + if ($tmp_datestart == "0000-00-00 00:00:00") + { + $tpl->set('s', 'STARTDATE', ''); + } else { + $tpl->set('s', 'STARTDATE', $tmp_datestart); + } + + + /* End date */ + if ($tmp_dateend == "0000-00-00 00:00:00") + { + $tpl->set('s', 'ENDDATE',''); + } else { + $tpl->set('s', 'ENDDATE', $tmp_dateend); + } + + $sql = "SELECT + A.idcat, + A.level, + C.name + FROM + ".$cfg["tab"]["cat_tree"]." AS A, + ".$cfg["tab"]["cat"]." AS B, + ".$cfg["tab"]["cat_lang"]." AS C + WHERE + A.idcat=B.idcat AND + B.idcat=C.idcat AND + C.idlang='".Contenido_Security::toInteger($lang)."' AND + B.idclient='".Contenido_Security::toInteger($client)."' + ORDER BY + A.idtree"; + + $db->query($sql); + + while ( $db->next_record() ) { + + $spaces = ""; + + for ($i = 0; $i < $db->f("level"); $i ++) { + $spaces .= "    "; + } + + if ( !in_array($db->f("idcat"), $tmp_idcat_in_art) ) { + $tpl2->set('d', 'VALUE', $db->f("idcat")); + $tpl2->set('d', 'SELECTED', ''); + $tpl2->set('d', 'CAPTION', $spaces.Contenido_Security::unFilter($db->f("name"))); + + $tpl2->next(); + + } else { + $tpl2->set('d', 'VALUE', $db->f("idcat")); + $tpl2->set('d', 'SELECTED', 'selected="selected"'); + $tpl2->set('d', 'CAPTION', $spaces.Contenido_Security::unFilter($db->f("name"))); + $tpl2->next(); + + if ($moveOK == false) + { + $button .= ''; + } + + } + } + + $select = $tpl2->generate($cfg["path"]["templates"] . $cfg["templates"]["generic_select"], true); + + /* Struktur */ + $tpl->set('s', 'STRUKTUR', i18n("Category")); + $tpl->set('s', 'STRUKTUR-FIELD', $select . $button); + + if (isset($tmp_notification)) { + $tpl->set('s', 'NOTIFICATION', ''.$tmp_notification.'
'); + } else { + $tpl->set('s', 'NOTIFICATION', ''); + } + + if (($perm->have_perm_area_action("con", "con_makeonline") || + $perm->have_perm_area_action_item("con","con_makeonline", $idcat)) && $inUse == false) + { + $allow_usetimemgmt = ''; + $sCalStartInit = ''; + + $sCalEndInit = ''; + + $tpl->set('s', 'CHOOSEEND', ''.i18n('.$sCalEndInit); + $tpl->set('s', 'CHOOSESTART', ''.i18n('.$sCalStartInit); + } else { + $allow_usetimemgmt = ' disabled="disabled"'; + $tpl->set('s', 'CHOOSEEND', ''); + $tpl->set('s', 'CHOOSESTART', ''); + } + + $tpl->set('s', 'SDOPTS', $allow_usetimemgmt); + $tpl->set('s', 'EDOPTS', $allow_usetimemgmt); + + if ($tmp_usetimemgmt == '1') + { + $tpl->set('s','TIMEMGMTCHECKED', 'checked'.$allow_usetimemgmt); + } else { + $tpl->set('s', 'TIMEMGMTCHECKED', $allow_usetimemgmt); + } + + unset ($tpl2); + /* Nach Kategorie Verschieben */ + $tpl2 = new Template; + $tpl2->set('s', 'ID', 'catsel'); + $tpl2->set('s', 'NAME', 'time_target_cat'); + $tpl2->set('s', 'CLASS', 'text_medium'); + $tpl2->set('s', 'OPTIONS', 'size="1" style="width: 160px;scrollbar-face-color:#C6C6D5;scrollbar-highlight-color:#FFFFFF;scrollbar-3dlight-color:#B3B3B3;scrollbar-darkshadow-color:#000000;scrollbar-shadow-color:#334F77;scrollbar-arrow-color:#334F77;scrollbar-track-color:#C7C7D6;"'.$allow_usetimemgmt); + + $sql = "SELECT + A.idcat, + A.level, + C.name + FROM + ".$cfg["tab"]["cat_tree"]." AS A, + ".$cfg["tab"]["cat"]." AS B, + ".$cfg["tab"]["cat_lang"]." AS C + WHERE + A.idcat=B.idcat AND + B.idcat=C.idcat AND + C.idlang='".Contenido_Security::toInteger($lang)."' AND + B.idclient='".Contenido_Security::toInteger($client)."' + ORDER BY + A.idtree"; + + $db->query($sql); + + while ( $db->next_record() ) { + + $spaces = ""; + + for ($i = 0; $i < $db->f("level"); $i ++) { + $spaces .= "  "; + } + + if ( $db->f("idcat") != $tmp_targetcat) { + $tpl2->set('d', 'VALUE', $db->f("idcat")); + $tpl2->set('d', 'SELECTED', ''); + $tpl2->set('d', 'CAPTION', $spaces.Contenido_Security::unFilter($db->f("name"))); + + $tpl2->next(); + + } else { + $tpl2->set('d', 'VALUE', $db->f("idcat")); + $tpl2->set('d', 'SELECTED', 'selected="selected"'); + $tpl2->set('d', 'CAPTION', $spaces.Contenido_Security::unFilter($db->f("name"))); + $tpl2->next(); + + } + } + + $select = $tpl2->generate($cfg["path"]["templates"] . $cfg["templates"]["generic_select"], true); + + /* Seitentitel */ + $title_input = ''; + $tpl->set("s", "TITLE-INPUT", $title_input); + + /* Meta-Tags */ + $availableTags = conGetAvailableMetaTagTypes(); + + $sMetaDate = ''; + + foreach ($availableTags as $key => $value) + { + $tpl->set('d', 'METAINPUT', 'META'.$value); + + switch ($value["fieldtype"]) + { + case "text": + if ($value["name"] == 'date') { + $element = ' + '.i18n('.$sMetaDate; + } else { + $element = ''; + } + break; + case "textarea": + $element = ''; + break; + } + + + + $tpl->set('d', 'METAFIELDTYPE', $element); + //$tpl->set('d', 'METAVALUE', conGetMetaValue($tmp_idartlang,$key)); + $tpl->set('d', 'METATITLE', $value["name"].':'); + $tpl->next(); + } + + /* Struktur */ + $tpl->set('s', 'MOVETOCATEGORYSELECT', $select); + + + if ($tmp_movetocat == "1") + { + $tpl->set('s','MOVETOCATCHECKED', 'checked'.$allow_usetimemgmt); + } else { + $tpl->set('s','MOVETOCATCHECKED', ''.$allow_usetimemgmt); + } + + if ($tmp_onlineaftermove == "1") + { + $tpl->set('s', 'ONLINEAFTERMOVECHECKED', 'checked'.$allow_usetimemgmt); + } else { + $tpl->set('s', 'ONLINEAFTERMOVECHECKED', ''.$allow_usetimemgmt); + } + + /* Summary */ + $tpl->set('s', 'SUMMARY', i18n("Summary")); + $tpl->set('s', 'SUMMARY-INPUT', ''); + + $sql = "SELECT + b.idcat + FROM + ".$cfg["tab"]["cat"]." AS a, + ".$cfg["tab"]["cat_lang"]." AS b, + ".$cfg["tab"]["cat_art"]." AS c + WHERE + a.idclient = '".Contenido_Security::toInteger($client)."' AND + a.idcat = b.idcat AND + c.idcat = b.idcat AND + c.idart = '".Contenido_Security::toInteger($idart)."'"; + + $db->query($sql); + $db->next_record(); + + $midcat = $db->f("idcat"); + + if ( isset($idart) ) { + + if ( !isset($idartlang) || 0 == $idartlang ) { + $sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + $db->next_record(); + $idartlang = $db->f("idartlang"); + } + + } + + if ( isset($midcat) ) { + + if ( !isset($idcatlang) || 0 == $idcatlang ) { + $sql = "SELECT idcatlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat = '".Contenido_Security::toInteger($midcat)."' AND idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + $db->next_record(); + $idcatlang = $db->f("idcatlang"); + } + + } + + if ( isset($midcat) && isset($idart) ) { + + if ( !isset($idcatart) || 0 == $idcatart ) { + $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idcat = '".Contenido_Security::toInteger($midcat)."'"; + $db->query($sql); + $db->next_record(); + $idcatart = $db->f("idcatart"); + } + + } + + if ( 0 != $idart && 0 != $midcat ) { + $script = 'artObj.setProperties("'.$idart.'", "'.$idartlang.'", "'.$midcat.'", "'.$idcatlang.'", "'.$idcatart.'", "'.$lang.'");'; + } else { + $script = 'artObj.reset();'; + } + + $tpl->set('s', 'DATAPUSH', $script); + + $tpl->set('s', 'BUTTONDISABLE', $disabled); + + if ($inUse == true) + { + $tpl->set('s', 'BUTTONIMAGE', 'but_ok_off.gif'); + } else { + $tpl->set('s', 'BUTTONIMAGE', 'but_ok.gif'); + } + + $tpl->set('s', 'CAL_LANG', substr(strtolower($belang), 0, 2)); + + /* Genereate the Template */ + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['con_edit_form']); + + } else { + + /* User hat no permission + to see this form */ + $notification->displayNotification("error", i18n("Permission denied")); + + } +} +?> diff --git a/branches/conlite20/conlite/includes/include.con_editcontent.php b/branches/conlite20/conlite/includes/include.con_editcontent.php new file mode 100644 index 0000000..1a09ab7 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.con_editcontent.php @@ -0,0 +1,624 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003 + * modified 2008-06-16, Holger Librenz, Hotfix: check for illegal calls added + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2009-10-29, Murat Purc, replaced deprecated functions (PHP 5.3 ready) and some formatting + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.con_editcontent.php 404 2015-12-15 09:41:16Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$edit = "true"; + +$db2 = new DB_ConLite; +$scripts = ""; + +if (isset($idcat)) { + if ($action == 20 || $action == 10) { + if ($data != "") { + $data = explode("||", substr($data, 0, -2)); + + foreach ($data as $value) { + $value = explode("|", $value); + + if ($value[3] == "%$%EMPTY%$%") { + $value[3] = ""; + } else { + $value[3] = str_replace("%$%SEPERATOR%$%", "|", $value[3]); + } + + conSaveContentEntry($value[0], "CMS_" . $value[1], $value[2], $value[3]); + } + + conMakeArticleIndex($idartlang, $idart); + + // restore orginal values + $data = $_REQUEST['data']; + $value = $_REQUEST['value']; + } + + conGenerateCodeForArtInAllCategories($idart); + } + + if ($action == 10) { + header("Location: " . $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["includes"] . "include.backendedit.php?type=$type&typenr=$typenr&client=$client&lang=$lang&idcat=$idcat&idart=$idart&idartlang=$idartlang&contenido=$contenido&lang=$lang"); + } else { + + $markSubItem = markSubMenuItem(3, true); + + //Include tiny class + include ($cfg["path"]["contenido"] . 'external/wysiwyg/tinymce3/editorclass.php'); + $oEditor = new cTinyMCEEditor('', ''); + $oEditor->setToolbar('inline_edit'); + + //Get configuration for popup und inline tiny + $sConfigInlineEdit = $oEditor->getConfigInlineEdit(); + $sConfigFullscreen = $oEditor->getConfigFullscreen(); + + //Include tiny mce and con_tiny script for insight_editing + $scripts .= "\n" . ''; + $scripts .= "\n" . ''; + $scripts .= "\n" . ''; + $scripts .= "\n" . ''; + $scripts .= "\n" . ''; + $scripts .= "\n" . ''; + $scripts .= "\n\n" . ''; + + //Script template for insight editing + $scripts .= << + .defaultSkin table.mceLayout {position: absolute; z-index: 10000;} + .defaultSkin #mce_fullscreen_tbl {z-index: 20000;} + .defaultSkin .mcePlaceHolder {position: absolute; z-index: 10000;} + + + + + +EOD; + + //Replace vars in Script + $oScriptTpl = new Template(); + + //Set urls to file browsers + $oScriptTpl->set('s', 'IMAGE', $cfg["path"]["contenido_fullhtml"] . 'frameset.php?area=upl&contenido=' . $sess->id . '&appendparameters=imagebrowser'); + $oScriptTpl->set('s', 'FILE', $cfg["path"]["contenido_fullhtml"] . 'frameset.php?area=upl&contenido=' . $sess->id . '&appendparameters=filebrowser'); + $oScriptTpl->set('s', 'FLASH', $cfg["path"]["contenido_fullhtml"] . 'frameset.php?area=upl&contenido=' . $sess->id . '&appendparameters=imagebrowser'); + $oScriptTpl->set('s', 'MEDIA', $cfg["path"]["contenido_fullhtml"] . 'frameset.php?area=upl&contenido=' . $sess->id . '&appendparameters=imagebrowser'); + $oScriptTpl->set('s', 'FRONTEND', $cfgClient[$client]["path"]["htmlpath"]); + + //Add tiny options and fill function leave_check() + $oScriptTpl->set('s', 'TINY_OPTIONS', $sConfigInlineEdit); + $oScriptTpl->set('s', 'TINY_FULLSCREEN', $sConfigFullscreen); + $oScriptTpl->set('s', 'IDARTLANG', $idartlang); + $oScriptTpl->set('s', 'CON_PATH', $cfg["path"]["contenido_fullhtml"]); + $oScriptTpl->set('s', 'CLOSE', utf8_decode(i18n('Close editor'))); + $oScriptTpl->set('s', 'SAVE', utf8_decode(i18n('Close editor and save changes'))); + $oScriptTpl->set('s', 'QUESTION', utf8_decode(i18n('Do you want to save changes?'))); + + if (getEffectiveSetting('system', 'insight_editing_activated', 'true') == 'false') { + $oScriptTpl->set('s', 'USE_TINY', ''); + } else { + $oScriptTpl->set('s', 'USE_TINY', 'swapTiny(this);'); + } + + $scripts = $oScriptTpl->generate($scripts, 1); + + $contentform = "url($cfg['path']['contenido_fullhtml'] . "external/backendedit/front_content.php?area=con_editcontent&idart=$idart&idcat=$idcat&lang=$lang&action=20&client=$client") . "\">\n"; + $contentform .= "\n"; + $contentform .= "\n"; + $contentform .= ""; + + # + # extract IDCATART + # + $sql = "SELECT + idcatart + FROM + " . $cfg["tab"]["cat_art"] . " + WHERE + idcat = '" . $idcat . "' AND + idart = '" . $idart . "'"; + + $db->query($sql); + $db->next_record(); + + $idcatart = $db->f("idcatart"); + + # + # Article is not configured, + # if not check if the category + # is configured. It neither the + # article or the category is + # configured, no code will be + # created and an error occurs. + # + + $sql = "SELECT + a.idtplcfg AS idtplcfg + FROM + " . $cfg["tab"]["art_lang"] . " AS a, + " . $cfg["tab"]["art"] . " AS b + WHERE + a.idart = '" . Contenido_Security::toInteger($idart) . "' AND + a.idlang = '" . Contenido_Security::toInteger($lang) . "' AND + b.idart = a.idart AND + b.idclient = '" . Contenido_Security::toInteger($client) . "'"; + + $db->query($sql); + $db->next_record(); + + if ($db->f("idtplcfg") != 0) { + + # + # Article is configured + # + $idtplcfg = $db->f("idtplcfg"); + + $a_c = array(); + + $sql2 = "SELECT + * + FROM + " . $cfg["tab"]["container_conf"] . " + WHERE + idtplcfg = '" . Contenido_Security::toInteger($idtplcfg) . "' + ORDER BY + number ASC"; + + $db2->query($sql2); + + while ($db2->next_record()) { + $a_c[$db2->f("number")] = $db2->f("container"); + } + } else { + + # + # Check whether category is + # configured. + # + $sql = "SELECT + a.idtplcfg AS idtplcfg + FROM + " . $cfg["tab"]["cat_lang"] . " AS a, + " . $cfg["tab"]["cat"] . " AS b + WHERE + a.idcat = '" . Contenido_Security::toInteger($idcat) . "' AND + a.idlang = '" . Contenido_Security::toInteger($lang) . "' AND + b.idcat = a.idcat AND + b.idclient = '" . Contenido_Security::toInteger($client) . "'"; + + $db->query($sql); + $db->next_record(); + + if ($db->f("idtplcfg") != 0) { + + # + # Category is configured, + # extract varstring + # + $idtplcfg = $db->f("idtplcfg"); + + $a_c = array(); + + $sql2 = "SELECT + * + FROM + " . $cfg["tab"]["container_conf"] . " + WHERE + idtplcfg = '" . Contenido_Security::toInteger($idtplcfg) . "' + ORDER BY + number ASC"; + + $db2->query($sql2); + + while ($db2->next_record()) { + $a_c[$db2->f("number")] = $db2->f("container"); + } + } else { + + # + # Article nor Category + # is configured. Creation of + # Code is not possible. Write + # Errormsg to DB. + # + include_once ($cfg["path"]["contenido"] . $cfg["path"]["classes"] . "class.notification.php"); + include_once ($cfg["path"]["contenido"] . $cfg["path"]["classes"] . "class.table.php"); + + if (!is_object($notification)) { + $notification = new Contenido_Notification; + } + + $sql = "SELECT title FROM " . $cfg["tab"]["art_lang"] . " WHERE idartlang = '" . Contenido_Security::toInteger($idartlang) . "'"; + $db->query($sql); + $db->next_record(); + $art_name = $db->f("title"); + + $cat_name = ""; + conCreateLocationString($idcat, " / ", $cat_name); + + $sql = "SELECT name FROM " . $cfg["tab"]["lang"] . " WHERE idlang = '" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + $db->next_record(); + $lang_name = $db->f("name"); + + $sql = "SELECT name FROM " . $cfg["tab"]["clients"] . " WHERE idclient = '" . Contenido_Security::toInteger($client) . "'"; + $db->query($sql); + $db->next_record(); + $client_name = $db->f("name"); + + $noti_html = ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ' . i18n("No template assigned to the category
and/or the article") . '


+ ' . i18n("The code for the following article
couldnt be generated:") . ' +

+
' . i18n("Article") . ':' . $art_name . '
' . i18n("Category") . ':' . $cat_name . '
' . i18n("Language") . ':' . $lang_name . '
' . i18n("Client") . ':' . $client_name . '
 
'; + + $code = ' + + + Error + + + ' . $notification->returnNotification("error", $noti_html) . ' + '; + + $sql = "SELECT * FROM " . $cfg["tab"]["code"] . " WHERE idcatart='" . Contenido_Security::toInteger($idcatart) . "' AND idlang='" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + + if ($db->next_record()) { + $sql = "UPDATE " . $cfg["tab"]["code"] . " SET code='" . Contenido_Security::escapeDB($code, $db) . "', idlang='" . Contenido_Security::toInteger($lang) . "', idclient='" . Contenido_Security::toInteger($client) . "' + WHERE idcatart='" . Contenido_Security::toInteger($idcatart) . "' AND idlang='" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + } else { + $sql = "INSERT INTO " . $cfg["tab"]["code"] . " (idcode, idcatart, code, idlang, idclient) VALUES ('" . Contenido_Security::toInteger($db->nextid($cfg["tab"]["code"])) . "', '" . Contenido_Security::toInteger($idcatart) . "', + '" . Contenido_Security::escapeDB($code, $db) . "', '" . Contenido_Security::toInteger($lang) . "', '" . Contenido_Security::toInteger($client) . "')"; + $db->query($sql); + } + + echo $code; + } + } + + # + # Get IDLAY and IDMOD array + # + $sql = "SELECT + a.idlay AS idlay, + a.idtpl AS idtpl + FROM + " . $cfg["tab"]["tpl"] . " AS a, + " . $cfg["tab"]["tpl_conf"] . " AS b + WHERE + b.idtplcfg = '" . Contenido_Security::toInteger($idtplcfg) . "' AND + b.idtpl = a.idtpl"; + + $db->query($sql); + $db->next_record(); + + $idlay = $db->f("idlay"); + $idtpl = $db->f("idtpl"); + + # + # List of used modules + # + $sql = "SELECT + number, + idmod + FROM + " . $cfg["tab"]["container"] . " + WHERE + idtpl = '" . Contenido_Security::toInteger($idtpl) . "' + ORDER BY + number ASC"; + + $db->query($sql); + + while ($db->next_record()) { + $a_d[$db->f("number")] = $db->f("idmod"); + } + + # + # Get code from Layout + # + $sql = "SELECT * FROM " . $cfg["tab"]["lay"] . " WHERE idlay = '" . Contenido_Security::toInteger($idlay) . "'"; + + $db->query($sql); + $db->next_record(); + + $code = $db->f("code"); + $code = AddSlashes($code); + + # + # Create code for all containers + # + if ($idlay) { + tplPreparseLayout($idlay); + $tmp_returnstring = tplBrowseLayoutForContainers($idlay); + + $a_container = explode("&", $tmp_returnstring); + + foreach ($a_container as $key => $value) { + + $CiCMS_VALUE = ""; + + if (is_numeric($a_d[$value])) { + $thisModule = ''; + $thisContainer = ''; + } + + $oModule = new cApiModule($a_d[$value]); + + $output = $thisModule . $thisContainer . $oModule->get("output"); + $output = AddSlashes($output); + + $template = $oModule->get("template"); + + if (array_key_exists($value, $a_c)) { + $a_c[$value] = preg_replace("/(&\$)/", "", $a_c[$value]); + $tmp1 = preg_split("/&/", $a_c[$value]); + } else { + $tmp1 = array(); + } + + $varstring = array(); + + foreach ($tmp1 as $key1 => $value1) { + $tmp2 = explode("=", $value1); + foreach ($tmp2 as $key2 => $value2) { + $varstring["$tmp2[0]"] = $tmp2[1]; + } + } + + $CiCMS_Var = '$C' . $value . 'CMS_VALUE'; + $CiCMS_VALUE = ''; + + foreach ($varstring as $key3 => $value3) { + $tmp = urldecode($value3); + $tmp = str_replace("\'", "'", $tmp); + $CiCMS_VALUE .= $CiCMS_Var . '[' . $key3 . ']="' . $tmp . '"; '; + $output = str_replace("\$CMS_VALUE[$key3]", $tmp, $output); + $output = str_replace("CMS_VALUE[$key3]", $tmp, $output); + } + + $output = str_replace("CMS_VALUE", $CiCMS_Var, $output); + $output = str_replace("\$" . $CiCMS_Var, $CiCMS_Var, $output); + + $output = preg_replace('/(CMS_VALUE\[)([0-9]*)(\])/i', '', $output); + + /* Long syntax with closing tag */ + $code = preg_replace("/(.*)<\/container>/Uis", "CMS_CONTAINER[$value]", $code); + + /* Short syntax */ + $code = preg_replace("//i", "CMS_CONTAINER[$value]", $code); + + $code = str_ireplace("CMS_CONTAINER[$value]", "\r\n" . $output, $code); + } + } + + # + # Find out what kind of CMS_... Vars are in use + # + $sql = "SELECT + * + FROM + " . $cfg["tab"]["content"] . " AS A, + " . $cfg["tab"]["art_lang"] . " AS B, + " . $cfg["tab"]["type"] . " AS C + WHERE + A.idtype = C.idtype AND + A.idartlang = B.idartlang AND + B.idart = '" . Contenido_Security::toInteger($idart) . "' AND + B.idlang = '" . Contenido_Security::toInteger($lang) . "'"; + + $db->query($sql); + + while ($db->next_record()) { + $a_content[$db->f("type")][$db->f("typeid")] = $db->f("value"); + } + + $sql = "SELECT idartlang FROM " . $cfg["tab"]["art_lang"] . " WHERE idart='" . Contenido_Security::toInteger($idart) . "' AND idlang='" . Contenido_Security::toInteger($lang) . "'"; + + $db->query($sql); + $db->next_record(); + + $idartlang = $db->f("idartlang"); + + # + # Replace all CMS_TAGS[] + # + $sql = "SELECT idtype, type, code FROM " . $cfg["tab"]["type"]; + + $db->query($sql); + + while ($db->next_record()) { + + $tmp = preg_match_all("/(" . $db->f("type") . "\[+\d+\])/i", $code, $match); + $a_[strtolower($db->f("type"))] = $match[0]; + $success = array_walk($a_[strtolower($db->f("type"))], 'extractNumber'); + + $search = array(); + $replacements = array(); + + + foreach ($a_[strtolower($db->f("type"))] as $val) { + eval($db->f("code")); + + $search[$val] = $db->f("type") . "[$val]"; + $replacements[$val] = $tmp; + } + + $code = str_ireplace($search, $replacements, $code); + } + + unset($tmp); + + /* output the code */ + $code = stripslashes($code); + $code = str_ireplace_once("", "$markSubItem $scripts\n", $code); + $code = str_ireplace_once_reverse("", "$contentform", $code); + + if ($cfg["debug"]["codeoutput"]) { + echo ""; + } + + $code = str_ireplace_once("", "\n" . '', $code); + + chdir($cfgClient[$client]["path"]["frontend"]); + ob_start(); + eval("?>\n" . $code . "\n \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.con_left_top.php b/branches/conlite20/conlite/includes/include.con_left_top.php new file mode 100644 index 0000000..002a271 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.con_left_top.php @@ -0,0 +1,512 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * @created 2003-03-26 + * @modified 2008-06-27, Frederic Schneider, add security fix + * @modified 2008-09-08, Ingo van Peeren, improved navigation tree in left bottom frame, expanding/ + * collapsing of navigation tree without reloading (AJAX/ + * javascript solution based on jquery) + * @modified 2008-09-18, Ingo van Peeren, moved template-changing to jquery + * @modified 2010-06-16, Timo Trautmann, Fixed a bug wit the Syncselection (there was no right userright check) + * + * $Id: include.con_left_top.php 130 2012-09-13 10:34:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes","functions.str.php"); +cInclude("includes","functions.tpl.php"); +cInclude('includes', 'functions.lang.php'); + +if(!isset($oTpl) || !is_object($oTpl)) { + $oTpl = new Template(); +} +$oTpl->reset(); + +global $sess, $frame, $area; +$idcat = ( isset($_GET['idcat']) && is_numeric($_GET['idcat'])) ? $_GET['idcat'] : -1; + +//Get sync options +if (isset($syncoptions)) +{ + $syncfrom = (int) $syncoptions; + $remakeCatTable = true; +} + +if (!isset($syncfrom)) +{ + $syncfrom = -1; +} + +$syncoptions = $syncfrom; + +$oTpl->set('s', 'SYNC_LANG', $syncfrom); + + +########################################## +# Delete a saved search +########################################## +$bShowArticleSearch = false; +if( isset($_GET['delsavedsearch']) ) +{ + if( isset($_GET['itemtype']) && sizeof($_GET['itemtype'])>0 && isset($_GET['itemid']) && sizeof($_GET['itemid'])>0 ) + { + $propertyCollection = new PropertyCollection; + $propertyCollection->deleteProperties($_GET['itemtype'], $_GET['itemid']); + $bShowArticleSearch = true; + } +} + +if( isset($_GET['save_search']) && $_GET['save_search'] == 'true') { + $bShowArticleSearch = true; +} + + +########################################## +# ARTICLE SEARCH +########################################## +# modified 20/04/2007 by H. Librenz for backend search +$arrDays = array(); + +for ($i = 0; $i < 32; $i ++) { + if ($i == 0) { + $arrDays[$i] = '--'; + } else { + $arrDays[$i] = $i; + } +} + +$arrMonths = array(); + +for ($i = 0; $i < 13; $i++) { + if ($i == 0) { + $arrMonths[$i] = '--'; + } else { + $arrMonths[$i] = $i; + } +} + +$arrYears = array(); + +$arrYears[0] = '-----'; +$sActualYear = (int) date("Y"); + +for ($i = $sActualYear-10; $i < $sActualYear+30; $i++) { + $arrYears[$i] = $i; +} + +$arrUsers = array(); + +$query = "SELECT * FROM ".$cfg['tab']['phplib_auth_user_md5']." ORDER BY realname"; + +$arrUsers['n/a'] = '-'; + +$db->query($query); + +while ($db->next_record()) { + $arrUsers[$db->f('username')] = $db->f('realname'); +} + +$arrDateTypes = array(); + +$arrDateTypes['n/a'] = i18n('Ignore'); +$arrDateTypes['created'] = i18n('Date created'); +$arrDateTypes['lastmodified'] = i18n('Date modified'); +$arrDateTypes['published'] = i18n('Date published'); + +$articleLink="editarticle"; +$oListOptionRow = new cFoldingRow("3498dbba-ed4a-4618-8e49-3a3635396e22", i18n("Article Search"), $articleLink, $bShowArticleSearch); +$oTpl->set('s', 'ARTICLELINK', $articleLink); + +#Textfeld +$oTextboxArtTitle = new cHTMLTextbox("bs_search_text", (isset($_REQUEST["bs_search_text"])?$_REQUEST["bs_search_text"]:''), 10); +$oTextboxArtTitle->setStyle('width:135px;'); + +#Artikel_ID-Feld +$oTextboxArtID = new cHTMLTextbox("bs_search_id", (isset($_REQUEST["bs_search_id"])?$_REQUEST["bs_search_id"]:''), 10); +$oTextboxArtID->setStyle('width:135px;'); + +#Date type +$oSelectArtDateType = new cHTMLSelectElement("bs_search_date_type", "bs_search_date_type"); +$oSelectArtDateType->autoFill($arrDateTypes); +$oSelectArtDateType->setStyle('width:135px;'); +$oSelectArtDateType->setEvent("Change", "toggle_tr_visibility('tr_date_from');toggle_tr_visibility('tr_date_to');"); + +if (isset($_REQUEST["bs_search_date_type"]) && $_REQUEST["bs_search_date_type"] !='') { + $oSelectArtDateType->setDefault($_REQUEST["bs_search_date_type"]); +} else { + $oSelectArtDateType->setDefault('n/a'); +} + +#DateFrom +$oSelectArtDateFromDay = new cHTMLSelectElement("bs_search_date_from_day"); +$oSelectArtDateFromDay->setStyle('width:40px;'); +$oSelectArtDateFromDay->autoFill($arrDays); + +$oSelectArtDateFromMonth = new cHTMLSelectElement("bs_search_date_from_month"); +$oSelectArtDateFromMonth->setStyle('width:40px;'); +$oSelectArtDateFromMonth->autoFill($arrMonths); + +$oSelectArtDateFromYear = new cHTMLSelectElement("bs_search_date_from_year"); +$oSelectArtDateFromYear->setStyle('width:55px;'); +$oSelectArtDateFromYear->autoFill($arrYears); + +if (isset($_REQUEST["bs_search_date_from_day"]) && $_REQUEST["bs_search_date_from_day"] > 0) { + $oSelectArtDateFromDay->setDefault($_REQUEST["bs_search_date_from_day"]); +} else { + $oSelectArtDateFromDay->setDefault(0); +} + +if (isset($_REQUEST["bs_search_date_from_month"]) && $_REQUEST["bs_search_date_from_month"] > 0) { + $oSelectArtDateFromMonth->setDefault($_REQUEST["bs_search_date_from_month"]); +} else { + $oSelectArtDateFromMonth->setDefault(0); +} + +if (isset($_REQUEST["bs_search_date_from_year"]) && $_REQUEST["bs_search_date_from_year"] > 0) { + $oSelectArtDateFromYear->setDefault($_REQUEST["bs_search_date_from_year"]); +} else { + $oSelectArtDateFromYear->setDefault(0); +} + +#DateTo +$oSelectArtDateToDay = new cHTMLSelectElement("bs_search_date_to_day"); +$oSelectArtDateToDay->setStyle('width:40px;'); +$oSelectArtDateToDay->autoFill($arrDays); + +$oSelectArtDateToMonth = new cHTMLSelectElement("bs_search_date_to_month"); +$oSelectArtDateToMonth->setStyle('width:40px;'); +$oSelectArtDateToMonth->autoFill($arrMonths); + +$oSelectArtDateToYear = new cHTMLSelectElement("bs_search_date_to_year"); +$oSelectArtDateToYear->setStyle('width:55px;'); +$oSelectArtDateToYear->autoFill($arrYears); + +if (isset($_REQUEST["bs_search_date_to_day"]) && $_REQUEST["bs_search_date_to_day"] > 0) { + $oSelectArtDateToDay->setDefault($_REQUEST["bs_search_date_to_day"]); +} else { + $oSelectArtDateToDay->setDefault(0); +} + +if (isset($_REQUEST["bs_search_date_to_month"]) && $_REQUEST["bs_search_date_to_month"] > 0) { + $oSelectArtDateToMonth->setDefault($_REQUEST["bs_search_date_to_month"]); +} else { + $oSelectArtDateToMonth->setDefault(0); +} + +if (isset($_REQUEST["bs_search_date_to_year"]) && $_REQUEST["bs_search_date_to_year"] > 0) { + $oSelectArtDateToYear->setDefault($_REQUEST["bs_search_date_to_year"]); +} else { + $oSelectArtDateToYear->setDefault(0); +} + +#Author +$oSelectArtAuthor = new cHTMLSelectElement("bs_search_author"); +$oSelectArtAuthor->setStyle('width:135px;'); +$oSelectArtAuthor->autoFill($arrUsers); + +if (isset($_REQUEST["bs_search_author"]) && $_REQUEST["bs_search_author"] !='') { + $oSelectArtAuthor->setDefault($_REQUEST["bs_search_author"]); +} else { + $oSelectArtAuthor->setDefault('n/a'); +} + +$oSubmit = new cHTMLButton("submit", i18n("Search")); + +$content = '
'; +$content .= ''; + +/** + * Saved searches + */ +$content .= ''; +$content .= '
'; + +$oListOptionRow->setContentData($content); + +$sSelfLink = 'main.php?area=' . $area . '&frame=2&' . $sess->name . "=" . $sess->id; +$oTpl->set('s', 'SELFLINK', $sSelfLink); + +$oTpl->set('s', 'SEARCH', $oListOptionRow->render()); + +########################################## +# Category +########################################## +$sql = "SELECT + idtpl, + name + FROM + ".$cfg['tab']['tpl']." + WHERE + idclient = '".Contenido_Security::toInteger($client)."' + ORDER BY + name"; + +$db->query($sql); + +$oTpl->set('s', 'ID', 'oTplSel'); +$oTpl->set('s', 'CLASS', 'text_medium'); +$oTpl->set('s', 'OPTIONS', ''); +$oTpl->set('s', 'SESSID', $sess->id); +$oTpl->set('s', 'BELANG', $belang); + +$oTpl->set('d', 'VALUE', '0'); +$oTpl->set('d', 'CAPTION', i18n("Choose template")); +$oTpl->set('d', 'SELECTED', ''); +$oTpl->next(); + +$oTpl->set('d', 'VALUE', '0'); +$oTpl->set('d', 'CAPTION', '--- '. i18n("none"). ' ---'); +$oTpl->set('d', 'SELECTED', ''); +$oTpl->next(); + +$categoryLink="editcat"; +$editCategory = new cFoldingRow("3498dbbb-ed4a-4618-8e49-3a3635396e22", i18n("Edit Category"), $categoryLink); + +while ($db->next_record()) { + $oTplname = $db->f('name'); + + if (strlen($oTplname) > 18) + { + $oTplname = substr($oTplname, 0, 15) . "..."; + } + $oTpl->set('d', 'VALUE', $db->f('idtpl')); + $oTpl->set('d', 'CAPTION', $oTplname); + $oTpl->set('d', 'SELECTED', ''); + $oTpl->next(); +} +// Template Dropdown +$editCat = '
'; +$editCat .= i18n("Template:") . "
"; +$editCat .= '
'; +$editCat .= $oTpl->generate($cfg['path']['templates'] . $cfg['templates']['generic_select'], true); +$editCat .='
'; +$editCat .= '
'; +// Category +$editCat .= '
'; +$oTpl->set('s', 'CAT_HREF', $sess->url("main.php?area=con_tplcfg&action=tplcfg_edit&frame=4&mode=art").'&idcat='); +$oTpl->set('s', 'IDCAT', $idcat); +$editCat .= ''; +// Online / Offline +$editCat .= ''; +// Lock / Unlock +$editCat .= '
'.i18n('; +$editCat .= ''.i18n("Lock / Unlock").'
'; +$editCat .= '
'; +$editCat .= '
'; +$editCat .= '
'; + +$editCategory->setContentData($editCat); + +$oTpl->set('s', 'EDIT', $editCategory->render()); +$oTpl->set('s', 'CATEGORYLINK', $categoryLink); + + +##################################### +# Collapse / Expand / Config Category +##################################### +$selflink = "main.php"; +$expandlink = $sess->url($selflink . "?area=$area&frame=2&expand=all"); +$collapselink = $sess->url($selflink . "?area=$area&frame=2&collapse=all"); +$collapseimg = ' '.i18n("close all").''; +$expandimg = ' '.i18n("open all").''; +$oTpl->set('s', 'MINUS', $collapseimg); +$oTpl->set('s', 'PLUS', $expandimg); + +/**************/ +/* SYNCSTUFF */ +/**************/ +$languages = getLanguageNamesByClient($client); +if (count($languages) > 1 && $perm->have_perm_area_action($area, "con_synccat")) { + $sListId = 'sync'; + $oListOptionRow = new cFoldingRow("4808dbba-ed4a-4618-8e49-3a3635396e22", i18n("Synchronize from"), $sListId); + + if (($syncoptions > 0) && ($syncoptions != $lang)) { + $oListOptionRow->setExpanded (true); + } + + #'dir="' . langGetTextDirection($lang) . '"'); + + $selectbox = new cHTMLSelectElement("syncoptions"); + + $option = new cHTMLOptionElement("--- ".i18n("None")." ---", -1); + $selectbox->addOptionElement(-1, $option); + + foreach ($languages as $languageid => $languagename) + { + if ($lang != $languageid && $perm->have_perm_client_lang($client, $languageid)) + { + $option = new cHTMLOptionElement($languagename . " (".$languageid.")",$languageid); + $selectbox->addOptionElement($languageid, $option); + } + } + + $selectbox->setDefault($syncoptions); + $form = new UI_Form("syncfrom"); + $form->setVar("area",$area); + $form->setVar("frame", $frame); + $form->add("sel", $selectbox->render()); + $link = $sess->url("main.php?area=".$area."&frame=2").'&syncoptions='; + $sJsLink = 'conMultiLink(\'left_bottom\', \''.$link.'\'+document.getElementsByName(\'syncoptions\')[0].value+\'&refresh_syncoptions=true\');'; + $oTpl->set('s', 'UPDATE_SYNC_REFRESH_FRAMES', $sJsLink); + + $form->add("submit", ''); + + $sSyncButton = ''; + $sSyncButtonMultiple = ''; + + $content = ' + + + + + + +
'.$form->render().'
'.$sSyncButton.$sSyncButtonMultiple.'
'; + + $oListOptionRow->setContentData($content); + + $oTpl->set('s', 'SYNCRONIZATION',$oListOptionRow->render()); + $oTpl->set('s', 'SYNCLINK', $sListId); + $sSyncLink = $sess->url($selflink . "?area=$area&frame=2&action=con_synccat"); + $oTpl->set('s', 'SYNC_HREF', $sSyncLink); + +} else { + $oTpl->set('s', 'SYNCRONIZATION',''); + $oTpl->set('s', 'SYNCLINK',$sListId); + $oTpl->set('s', 'SYNC_HREF', ''); +} + +/* + * necessary for expanding/collapsing of navigation tree per javascript/AJAX (I. van Peeren) + */ +$oTpl->set('s', 'AREA', $area); +$oTpl->set('s', 'SESSION', $contenido); +$oTpl->set('s', 'AJAXURL', $cfg['path']['contenido_fullhtml'].'ajaxmain.php'); + +########################################## +# Help +########################################## +$oTpl->set('s', 'HELPSCRIPT', setHelpContext("con")); +$oTpl->generate($cfg['path']['templates'] . $cfg['templates']['con_left_top']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.con_str_overview.php b/branches/conlite20/conlite/includes/include.con_str_overview.php new file mode 100644 index 0000000..98c2f92 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.con_str_overview.php @@ -0,0 +1,773 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2002-03-02 + * modified 2007-04-24, Holger Librenz + * modified 2008-02-13, Andreas Lindner + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-09-08, Ingo van Peeren, optimized HTML, added AJAX an javascript to prevent + * reloading of navigation tree, small sql performance + * improvement + * modified 2009-12-18, Murat Purc, fixed usage of wrong db instance, see [#CON-282] + * modified 2010-01-30, Ingo van Peeren, optimized amount of db queries, removed unused variables + * + * $Id: include.con_str_overview.php 327 2015-06-11 14:07:00Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes", "functions.str.php"); +cInclude("includes", "functions.tpl.php"); +cInclude('includes', 'functions.lang.php'); + +function showTree($iIdcat, &$aWholelist) { + global $check_global_rights, $sess, $cfg, $perm, $db, $db2, $db3, $area, $client, $lang, $navigationTree; + + $tpl = new Template; + $tpl->reset(); + + $iIdcat = (int) $iIdcat; + + foreach ($navigationTree[$iIdcat] as $sKey => $aValue) { + + $cfgdata = ''; + $aCssClasses = array(); + + #Check rights per cat + if (!$check_global_rights) { + $check_rights = false; + } else { + $check_rights = true; + } + + if (!$check_rights) { + $check_rights = ($aValue['forcedisplay'] == 1) ? true : false; + } + + $idcat = (int) $aValue['idcat']; + $level = $aValue['level'] - 1; + $name = $aValue['name']; + + if ($check_rights) { + + $idtpl = ( $aValue['idtpl'] != '' ) ? $aValue['idtpl'] : 0; + + if (($aValue["idlang"] != $lang) || ($aValue['articles'] == true)) { + #$aCssClasses[] = 'con_sync'; + } + + $check_rights = $perm->have_perm_area_action_item("con", "con_changetemplate", $aValue['idcat']); + if (!$check_rights) { + $check_rights = $perm->have_perm_area_action("con", "con_changetemplate"); + } + + if ($check_rights) { + $changetemplate = 1; + } else { + $changetemplate = 0; + } + + $check_rights = $perm->have_perm_area_action_item("con", "con_makecatonline", $aValue['idcat']); + if (!$check_rights) { + $check_rights = $perm->have_perm_area_action("con", "con_makecatonline"); + } + + if ($check_rights) { + $onoffline = 1; + } else { + $onoffline = 0; + } + + + $check_rights = $perm->have_perm_area_action_item("con", "con_makepublic", $aValue['idcat']); + if (!$check_rights) { + $check_rights = $perm->have_perm_area_action("con", "con_makepublic"); + } + + if ($check_rights) { + $makepublic = 1; + } else { + $makepublic = 0; + } + + $check_rights = $perm->have_perm_area_action_item("con", "con_tplcfg_edit", $aValue['idcat']); + if (!$check_rights) { + $check_rights = $perm->have_perm_area_action("con", "con_tplcfg_edit"); + } + + if ($check_rights) { + $templateconfig = 1; + } else { + $templateconfig = 0; + } + + if ($aValue["idlang"] == $lang) { + # Build cfgdata string + $cfgdata = $idcat . "-" . $idtpl . "-" . $aValue['online'] . "-" . $aValue['public'] . "-" . + $changetemplate . "-" . + $onoffline . "-" . + $makepublic . "-" . $templateconfig; + } else { + $cfgdata = ""; + } + + # Select the appropriate folder- + # image depending on the structure + # properties + + if ($aValue['online'] == 1) { + # Category is online + + if ($aValue['public'] == 0) { + # Category is locked + if ($aValue['no_start'] || $aValue['no_online']) { + # Error found + $aAnchorClass = 'on_error_locked'; + } else { + # No error found + $aAnchorClass = 'on_locked'; + } + } else { + # Category is public + if ($aValue['no_start'] || $aValue['no_online']) { + # Error found + $aAnchorClass = 'on_error'; + } else { + # No error found + $aAnchorClass = 'on'; + } + } + } else { + # Category is offline + + if ($aValue['public'] == 0) { + # Category is locked + if ($aValue['no_start'] || $aValue['no_online']) { + # Error found + $aAnchorClass = 'off_error_locked'; + } else { + # No error found + $aAnchorClass = 'off_locked'; + } + } else { + # Category is public + if ($aValue['no_start'] || $aValue['no_online']) { + # Error found + $aAnchorClass = 'off_error'; + } else { + # No error found + $aAnchorClass = 'off'; + } + } + } + + if ($aValue['islast'] == 1) { + $aCssClasses[] = 'last'; + } + + if ($aValue['collapsed'] == 1 && isset($navigationTree[$idcat]) && is_array($navigationTree[$idcat])) { + $aCssClasses[] = 'collapsed'; + } + + if ($aValue['active']) { + $aCssClasses[] = 'active'; + } + + $bIsSyncable = false; + if ($aValue["idlang"] != $lang) { + # Fetch parent id and check if it is syncronized + $sql = "SELECT parentid FROM %s WHERE idcat = '%s'"; + $db->query(sprintf($sql, $cfg["tab"]["cat"], $idcat)); + if ($db->next_record()) { + if ($db->f("parentid") != 0) { + $parentid = $db->f("parentid"); + $sql = "SELECT idcatlang FROM %s WHERE idcat = '%s' AND idlang = '%s'"; + $db->query(sprintf($sql, $cfg["tab"]["cat_lang"], Contenido_Security::toInteger($parentid), Contenido_Security::toInteger($lang))); + + if ($db->next_record()) { + $aCssClasses[] = 'con_sync'; + $bIsSyncable = true; + } + } else { + $aCssClasses[] = 'con_sync'; + $bIsSyncable = true; + } + } + } + + //Last param defines if cat is syncable or not, all other rights are disabled at this point + if ($bIsSyncable) { + if ($cfgdata != '') { + $cfgdata .= '-1'; + } else { + $cfgdata = $idcat . "-" . $idtpl . "-" . $aValue['online'] . "-" . $aValue['public'] . + "-0-0-0-0-1"; + } + } else { + if ($cfgdata != '') { + $cfgdata .= '-0'; + } else { + $cfgdata = $idcat . "-" . $idtpl . "-" . $aValue['online'] . "-" . $aValue['public'] . + "-0-0-0-0-0"; + } + } + + if(isset($aValue['lang_fallback_name']) && !empty($aValue['lang_fallback_name'])) { + $titel = $aValue['lang_fallback_name']."\nidcat".': '. $idcat; + } else { + $title = "idcat".': '. $idcat; + } + + $mstr = '' . $name . ''; + + # Build Tree + $tpl->set('d', 'CFGDATA', $cfgdata); + if (isset($navigationTree[$idcat]) && is_array($navigationTree[$idcat])) { + $tpl->set('d', 'SUBCATS', showTree($idcat, $aWholelist)); + $tpl->set('d', 'COLLAPSE', ' '); + $aWholelist[] = $idcat; + } else { + $tpl->set('d', 'SUBCATS', ''); + $tpl->set('d', 'COLLAPSE', ' '); + } + $tpl->set('d', 'CAT', $mstr); + $tpl->set('d', 'CSS_CLASS', ' class="' . implode(' ', $aCssClasses) . '"'); + + $tpl->next(); + } // end if have_perm + else { + if (is_array($navigationTree[(int) $aValue['idcat']])) { + $sTpl = showTree((int) $aValue['idcat'], $aWholelist); + if (!preg_match('/^
    \s*<\/ul>$/', $sTpl)) { + $tpl->set('d', 'CFGDATA', '0-0-0-0-0-0-0-0-0'); + $tpl->set('d', 'SUBCATS', $sTpl); + $tpl->set('d', 'COLLAPSE', ''); + $tpl->set('d', 'CAT', '' . $name . ''); + $tpl->set('d', 'CSS_CLASS', ' class="active"'); + $tpl->next(); + } + $aWholelist[] = $aValue['idcat']; + } + } + } + return $tpl->generate($cfg['path']['templates'] . 'template.con_str_overview.list.html', 1); +} + +$db2 = new DB_ConLite; +$db3 = new DB_ConLite; + +//Refresh or reset right frames, when a synclang is changed or a category is synchronized +$tpl->reset(); + +if ($action == "con_synccat" || isset($_GET['refresh_syncoptions']) && $_GET['refresh_syncoptions'] == 'true') { + $tpl->set('s', 'RELOAD_RIGHT', 'reloadRightFrame();'); +} else { + $tpl->set('s', 'RELOAD_RIGHT', ''); +} + +if ($action == "con_synccat") { + strSyncCategory($syncidcat, $syncfromlang, $lang, $multiple); + $remakeStrTable = true; +} + +if (!is_object($db2)) + $db2 = new DB_ConLite; + +if (!isset($remakeStrTable)) { + $remakeStrTable = false; +} + +if (!isset($remakeCatTable)) { + $remakeCatTable = false; +} + +$sess->register("remakeCatTable"); +$sess->register("CatTableClient"); +$sess->register("CatTableLang"); +$sess->register("remakeStrTable"); + +if (isset($syncoptions)) { + $syncfrom = $syncoptions; + $remakeCatTable = true; +} + +if (!isset($syncfrom)) { + $syncfrom = 0; +} + +$sess->register("syncfrom"); + +$syncoptions = $syncfrom; + +if (!isset($CatTableClient)) { + $CatTableClient = 0; +} + +if ($CatTableClient != $client) { + $remakeCatTable = true; +} + +if (!isset($CatTableLang)) { + $CatTableLang = 0; +} + +if ($CatTableLang != $lang) { + $remakeCatTable = true; +} + +$CatTableClient = $client; +$CatTableLang = $lang; + +if ($syncoptions == -1) { + $sql = "SELECT + a.preid AS preid, + a.postid AS postid, + a.parentid AS parentid, + c.idcat AS idcat, + c.level AS level, + b.name AS name, + b.public AS public, + b.visible AS online, + d.idtpl AS idtpl, + b.idlang AS idlang + FROM + (" . $cfg["tab"]["cat"] . " AS a, + " . $cfg["tab"]["cat_lang"] . " AS b, + " . $cfg["tab"]["cat_tree"] . " AS c) + LEFT JOIN + " . $cfg["tab"]["tpl_conf"] . " AS d + ON d.idtplcfg = b.idtplcfg + WHERE + a.idclient = '" . Contenido_Security::toInteger($client) . "' AND + b.idlang = '" . Contenido_Security::toInteger($lang) . "' AND + c.idcat = b.idcat AND + b.idcat = a.idcat + ORDER BY + c.idtree ASC"; +} else { + $sql = "SELECT + a.preid AS preid, + a.postid AS postid, + a.parentid AS parentid, + c.idcat AS idcat, + c.level AS level, + b.name AS name, + b.public AS public, + b.visible AS online, + d.idtpl AS idtpl, + b.idlang AS idlang + FROM + (" . $cfg["tab"]["cat"] . " AS a, + " . $cfg["tab"]["cat_lang"] . " AS b, + " . $cfg["tab"]["cat_tree"] . " AS c) + LEFT JOIN + " . $cfg["tab"]["tpl_conf"] . " AS d + ON d.idtplcfg = b.idtplcfg + WHERE + a.idclient = '" . Contenido_Security::toInteger($client) . "' AND + (b.idlang = '" . Contenido_Security::toInteger($lang) . "' OR + b.idlang = '" . Contenido_Security::toInteger($syncoptions) . "') AND + c.idcat = b.idcat AND + b.idcat = a.idcat + ORDER BY + c.idtree ASC"; +} + +$db->query($sql); + +if (isset($syncoptions)) { + $remakeCatTable = true; +} + +if (isset($online)) { + $remakeCatTable = true; +} + +if (isset($public)) { + $remakeCatTable = true; +} + +if (isset($idtpl)) { + $remakeCatTable = true; +} + +if (isset($force)) { + $remakeCatTable = true; +} + +$arrIn = array(); +while ($db->next_record()) { + $arrIn[] = $db->f('idcat'); +} + +$arrArtCache = array(); + +if (count($arrIn) > 0) { + $sIn = implode(',', $arrIn); + + $sql2 = "SELECT b.idcat, a.idart, idlang FROM " . $cfg["tab"]["art_lang"] . " AS a, + " . $cfg["tab"]["cat_art"] . " AS b + WHERE b.idcat IN (" . Contenido_Security::escapeDB($sIn, $db) . ") AND (a.idlang = '" . Contenido_Security::toInteger($syncoptions) . "' OR a.idlang = '" . Contenido_Security::toInteger($lang) . "') + AND b.idart = a.idart"; + $db->query($sql2); + + while ($db->next_record()) { + $arrArtCache[$db->f('idcat')][$db->f('idart')][$db->f('idlang')] = 'x'; + } +} + +$db->query($sql); + +while ($db->next_record()) { + $entry = array(); + + $entry['articles'] = false; + + if ($db->f("idlang") == $lang) { + + $arts = Array(); + + if (isset($arrArtCache[$db->f("idcat")])) { + foreach ($arrArtCache[$db->f("idcat")] as $key => $value) { + foreach ($value as $key2 => $value2) { + $arts[$key][$key2] = 1; + } + } + } + + foreach ($arts as $idart => $entry) { + if (is_array($entry)) { + if (!array_key_exists($lang, $entry)) { + //$entry['articles'] = true; + $aIsArticles[$db->f("idcat")] = true; + break; + } + } + } + } +} + +if ($syncoptions == -1) { + if ($cfg["is_start_compatible"] == true) { + $sql2 = "SELECT + c.idcat AS idcat, + SUM(c.is_start) AS is_start, + SUM(a.online) AS online + FROM + " . $cfg["tab"]["art_lang"] . " AS a, + " . $cfg["tab"]["art"] . " AS b, + " . $cfg["tab"]["cat_art"] . " AS c + WHERE + a.idlang = " . Contenido_Security::toInteger($lang) . " AND + a.idart = b.idart AND + b.idclient = '" . Contenido_Security::toInteger($client) . "' AND + b.idart = c.idart + GROUP BY c.idcat + "; + } else { + $sql2 = "SELECT + c.idcat AS idcat, + SUM(a.online) AS online, + d.startidartlang + FROM + " . $cfg["tab"]["art_lang"] . " AS a, + " . $cfg["tab"]["art"] . " AS b, + " . $cfg["tab"]["cat_art"] . " AS c, + " . $cfg["tab"]["cat_lang"] . " AS d + WHERE + a.idlang = " . Contenido_Security::toInteger($lang) . " AND + a.idart = b.idart AND + b.idclient = '" . Contenido_Security::toInteger($client) . "' AND + b.idart = c.idart AND + c.idcat = d.idcat + GROUP BY c.idcat, + d.startidartlang + "; + } +} else { + if ($cfg["is_start_compatible"] == true) { + $sql2 = "SELECT + c.idcat AS idcat, + SUM(c.is_start) AS is_start, + SUM(a.online) AS online + FROM + " . $cfg["tab"]["art_lang"] . " AS a, + " . $cfg["tab"]["art"] . " AS b, + " . $cfg["tab"]["cat_art"] . " AS c + WHERE + a.idart = b.idart AND + b.idclient = '" . Contenido_Security::toInteger($client) . "' AND + b.idart = c.idart + GROUP BY c.idcat"; + } else { + $sql2 = "SELECT + c.idcat AS idcat, + SUM(a.online) AS online, + d.startidartlang + FROM + " . $cfg["tab"]["art_lang"] . " AS a, + " . $cfg["tab"]["art"] . " AS b, + " . $cfg["tab"]["cat_art"] . " AS c, + " . $cfg["tab"]["cat_lang"] . " AS d + WHERE + a.idart = b.idart AND + b.idclient = '" . Contenido_Security::toInteger($client) . "' AND + b.idart = c.idart AND + c.idcat = d.idcat + GROUP BY c.idcat, + d.startidartlang"; + } +} + +$db->query($sql2); +$aStartOnlineArticles = array(); +while ($db->next_record()) { + if ($cfg["is_start_compatible"] == true) { + if ($db->f('is_start') > 0) { + $aStartOnlineArticles[$db->f('idcat')]['is_start'] = true; + } else { + $aStartOnlineArticles[$db->f('idcat')]['is_start'] = false; + } + } else { + if ($db->f('startidartlang') > 0) { + $aStartOnlineArticles[$db->f('idcat')]['is_start'] = true; + } else { + $aStartOnlineArticles[$db->f('idcat')]['is_start'] = false; + } + } + if ($db->f('online') > 0) { + $aStartOnlineArticles[$db->f('idcat')]['is_online'] = true; + } else { + $aStartOnlineArticles[$db->f('idcat')]['is_online'] = false; + } +} + +$_cecIterator = $_cecRegistry->getIterator("Contenido.ArticleCategoryList.ListItems"); + +if ($_cecIterator->count() > 0) { + while ($chainEntry = $_cecIterator->next()) { + $listItem = $chainEntry->execute(); + + if (is_array($listItem)) { + if (!array_key_exists("expandcollapseimage", $listItem) || $listItem["expandcollapseimage"] == "") { + $collapseImage = ''; + } else { + $collapseImage = $listItem["expandcollapseimage"]; + } + + if (!array_key_exists("image", $listItem) || $listItem["image"] == "") { + $image = ''; + } else { + $image = $listItem["image"]; + } + + if (!array_key_exists("id", $listItem) || $listItem["id"] == "") { + $id = rand(); + } else { + $id = $listItem["id"]; + } + + if (array_key_exists("markable", $listItem)) { + if ($listItem["markable"] == true) { + $mmark = $markscript; + } else { + $mmark = ""; + } + } else { + $mmark = ""; + } + } + } +} + +$languages = getLanguageNamesByClient($client); + +/* * *************************** */ +/* Expand all / Collapse all */ +/* * *************************** */ +$selflink = "main.php"; +$expandlink = $sess->url($selflink . "?area=$area&frame=$frame&expand=all&syncoptions=$syncoptions"); +$collapselink = $sess->url($selflink . "?area=$area&frame=$frame&collapse=all&syncoptions=$syncoptions"); +$collapseimg = ''; +$expandimg = ''; +$allLinks = $expandimg . '' . $collapseimg; +$text_direction = langGetTextDirection($lang); + +#Check global rights +$check_global_rights = $perm->have_perm_area_action("con", "con_makestart"); +if (!$check_global_rights) { + $check_global_rights = $perm->have_perm_area_action("con_editart", "con_edit"); +} +if (!$check_global_rights) { + $check_global_rights = $perm->have_perm_area_action("con_editart", "con_saveart"); +} +if (!$check_global_rights) { + $check_global_rights = $perm->have_perm_area_action("con_editcontent", "con_editart"); +} +if (!$check_global_rights) { + $check_global_rights = $perm->have_perm_area_action("con_editart", "con_newart"); +} +if (!$check_global_rights) { + $check_global_rights = $perm->have_perm_area_action("con", "con_deleteart"); +} +if (!$check_global_rights) { + $check_global_rights = $perm->have_perm_area_action("con", "con_makeonline"); +} +if (!$check_global_rights) { + $check_global_rights = $perm->have_perm_area_action("con", "con_tplcfg_edit"); +} +if (!$check_global_rights) { + $check_global_rights = $perm->have_perm_area_action("con", "con_makecatonline"); +} +if (!$check_global_rights) { + $check_global_rights = $perm->have_perm_area_action("con", "con_changetemplate"); +} + +if ($lang > $syncoptions) { + $sOrder = 'DESC'; +} else { + $sOrder = 'ASC'; +} + +// alternate lang fallback, shows translation for cat with defined fallback lang +// wish by rethus for con49, see con forum http://forum.contenido.org/viewtopic.php?f=92&t=35247 +$fallbackLang = getEffectiveSetting('system', 'cat_fallback_language', 0); +$bUseLangFallback = FALSE; +if($fallbackLang > 0) { + $bUseLangFallback = TRUE; + $sql_fallback_lang_field = "b1.name as lang_fallback_name, "; + $sql_fallback_lang_join = "LEFT JOIN {$cfg['tab']['cat_lang']} AS b1 ON( b1.idcat=a.idcat AND b1.idlang=$fallbackLang ) "; +} else { + $sql_fallback_lang_field = ""; + $sql_fallback_lang_join = ""; +} + +$client = (int) $client; +$sql = "SELECT DISTINCT " . + "a.idcat, " . + "a.parentid, " . + "a.preid, " . + "a.postid, " . + "a.parentid, " . + "b.name, " . + "b.idlang, " . + "b.visible, " . + "b.public, " . + "c.level, " . + "c.idtree, " . + "d.idtpl " . + $sql_fallback_lang_field. + "FROM {$cfg['tab']['cat']} AS a " . + "LEFT JOIN {$cfg['tab']['cat_lang']} AS b ON a.idcat = b.idcat " . + $sql_fallback_lang_join. + "LEFT JOIN {$cfg['tab']['cat_tree']} AS c ON (a.idcat = c.idcat AND b.idcat = c.idcat) " . + "LEFT JOIN {$cfg["tab"]["tpl_conf"]} AS d ON b.idtplcfg = d.idtplcfg " . + "WHERE " . + " a.idclient = {$client} " . + "ORDER BY b.idlang {$sOrder}, c.idtree ASC "; +$db->query($sql); +if ($client == 0) { + $client = ''; +} + +$navigationTree = array(); +$aWholelist = array(); +$conexpandedList = array(); +$sExpandList = $currentuser->getUserProperty("system", "con_cat_expandstate"); +if ($sExpandList != '') { + $conexpandedList = unserialize($currentuser->getUserProperty("system", "con_cat_expandstate")); +} + +while ($db->next_record()) { + if (!isset($navigationTree[$db->f('parentid')][$db->f('idcat')]) && ($db->f('idlang') == $lang || $db->f('idlang') == $syncoptions)) { + if (in_array($db->f('idcat'), $conexpandedList)) { + $collapsed = false; + } else { + $collapsed = true; + } + if ($perm->have_perm_item("con", $db->f('idcat'))) { + $forcedisplay = 1; + } else { + $forcedisplay = 0; + } + if ($idcat == $db->f('idcat')) { + $active = true; + } else { + $active = false; + } + $navigationTree[$db->f('parentid')][$db->f('idcat')] = array( + 'idcat' => $db->f('idcat'), + 'preid' => $db->f('preid'), + 'postid' => $db->f('postid'), + 'visible' => $db->f('visible'), + 'online' => $db->f('visible'), + 'public' => $db->f('public'), + 'name' => $db->f('name'), + 'lang_fallback_name' => (($bUseLangFallback)?$db->f('lang_fallback_name'):''), + 'idlang' => $db->f('idlang'), + 'idtpl' => $db->f('idtpl'), + 'collapsed' => $collapsed, + 'forcedisplay' => $forcedisplay, + 'active' => $active, + 'islast' => false, + 'articles' => ((isset($aIsArticles)) ? $aIsArticles[$db->f("idcat")] : ''), + 'level' => $db->f('level') + ); + if (isset($aStartOnlineArticles[$db->f('idcat')]['is_start']) && $aStartOnlineArticles[$db->f('idcat')]['is_start'] == true) { + $navigationTree[$db->f('parentid')][$db->f('idcat')]['no_start'] = false; + } else { + $navigationTree[$db->f('parentid')][$db->f('idcat')]['no_start'] = true; + } + if (isset($aStartOnlineArticles[$db->f('idcat')]['is_online']) && $aStartOnlineArticles[$db->f('idcat')]['is_online'] == true) { + $navigationTree[$db->f('parentid')][$db->f('idcat')]['no_online'] = false; + } else { + $navigationTree[$db->f('parentid')][$db->f('idcat')]['no_online'] = true; + } + } +} + +if (isset($bDebug) && $bDebug === true) { + echo '
    ';
    +    var_dump($navigationTree);
    +    echo '
    '; +} +if (count($navigationTree[0])) { + $sCategories = showTree(0, $aWholelist); +} + +$tpl->set('s', 'SID', $sess->id); +$tpl->set('s', 'CATS', $sCategories); +$tpl->set('s', 'AREA', $area); +$tpl->set('s', 'SESSION', $contenido); +$tpl->set('s', 'DIRECTION', 'dir="' . langGetTextDirection($lang) . '"'); +$tpl->set('s', 'SYNCOPTIONS', $syncoptions); + +$tpl->set('s', 'AJAXURL', $cfg['path']['contenido_fullhtml'] . 'ajaxmain.php'); +$tpl->set('s', 'WHOLELIST', implode(', ', $aWholelist)); +$tpl->set('s', 'EXPANDEDLIST', implode(', ', $conexpandedList)); + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['con_str_overview']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.con_subnav.php b/branches/conlite20/conlite/includes/include.con_subnav.php new file mode 100644 index 0000000..2b9852b --- /dev/null +++ b/branches/conlite20/conlite/includes/include.con_subnav.php @@ -0,0 +1,128 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-25 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.con_subnav.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +//Get sync options +if (isset($syncoptions)) +{ + $syncfrom = $syncoptions; + $remakeCatTable = true; +} + +if (!isset($syncfrom)) +{ + $syncfrom = 0; +} + +if ( isset($_GET['idcat']) && $_GET['idcat'] != 0 ) { + $nav = new Contenido_Navigation; + + $sql = "SELECT + idarea + FROM + ".$cfg["tab"]["area"]." AS a + WHERE + a.name = '".Contenido_Security::escapeDB($area, $db)."' OR + a.parent_id = '".Contenido_Security::escapeDB($area, $db)."' + ORDER BY + idarea"; + + $db->query($sql); + + + $in_str = ""; + + while ( $db->next_record() ) { + $in_str .= $db->f('idarea') . ','; + } + + $len = strlen($in_str)-1; + $in_str = substr($in_str, 0, $len); + $in_str = '('.$in_str.')'; + + $sql = "SELECT + b.location AS location, + a.name AS name + FROM + ".$cfg["tab"]["area"]." AS a, + ".$cfg["tab"]["nav_sub"]." AS b + WHERE + b.idarea IN ".Contenido_Security::escapeDB($in_str, $db)." AND + b.idarea = a.idarea AND + b.level = 1 AND + b.online = 1 + ORDER BY + b.idnavs"; + + $db->query($sql); + + while ( $db->next_record() ) { + + /* Extract names from the XML document. */ + $caption = $nav->getName($db->f("location")); + + $tmp_area = $db->f("name"); + + # Set template data + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + if ($cfg['help'] == true) + { + $tpl->set("d", "CAPTION", ''.$caption.''); + } else { + $tpl->set("d", "CAPTION", ''.$caption.''); + } + + $tpl->next(); + + } + + $tpl->set('s', 'COLSPAN', ($tpl->dyn_cnt * 2) + 2); + + $tpl->set('s', 'IDCAT', $idcat); + $tpl->set('s', 'SESSID', $sess->id); + $tpl->set('s', 'CLIENT', $client); + $tpl->set('s', 'LANG', $lang); + + # Generate the third + # navigation layer + $tpl->generate($cfg["path"]["templates"] . $cfg["templates"]["con_subnav"]); + +} else { + include ($cfg["path"]["contenido"].$cfg["path"]["templates"] . $cfg["templates"]["right_top_blank"]); +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.debug.php b/branches/conlite20/conlite/includes/include.debug.php new file mode 100644 index 0000000..3af86f4 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.debug.php @@ -0,0 +1,122 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-06-04 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.debug.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$areaList = new Area(); +$areas = $areaList = $areaList->getAvailableAreas(); + +$areaSelectTemplate= new Template; +$areaSelectTemplate->set('s', 'NAME', 'areaselect'); + +foreach ($areas as $key => $value) +{ + $areaSelectTemplate->set('d', 'VALUE', $key); + $areaSelectTemplate->set('d', 'CAPTION', $value['name']); + $areaSelectTemplate->set('d', 'SELECTED',''); + $areaSelectTemplate->next(); +} + +$areaSelector = $areaSelectTemplate->generate($cfg['path']['templates'].$cfg['templates']['generic_select'], true); + +$actionList = new Action(); +$actions = $actionList = $actionList->getAvailableActions(); + +$actionSelectTemplate= new Template; +$actionSelectTemplate->set('s', 'NAME', 'actionselect'); + +foreach ($actions as $key => $value) +{ + $actionSelectTemplate->set('d', 'VALUE', $key); + $actionSelectTemplate->set('d', 'CAPTION', $value['name']); + $actionSelectTemplate->set('d', 'SELECTED',''); + $actionSelectTemplate->next(); +} + +$actionSelector = $actionSelectTemplate->generate($cfg['path']['templates'].$cfg['templates']['generic_select'], true); + +if ($querytype == "areaactionitem") +{ + $res = $perm->have_perm_area_action_item($areaselect, $actionselect, $itemid); + + if ($res) + { + $result = "has right for have_perm_area_action_item($areaselect, $actionselect, $itemid)"; + } else { + $result = "has no right for have_perm_area_action_item($areaselect, $actionselect, $itemid)"; + } +} + +if ($querytype == "areaaction") +{ + $res = $perm->have_perm_area_action($areaselect, $actionselect); + + if ($res) + { + $result = "has right for have_perm_area_action($areaselect, $actionselect)"; + } else { + $result = "has no right for have_perm_area_action($areaselect, $actionselect)"; + } +} +if ($querytype == "area") +{ + $res = $perm->have_perm_area_action($areaselect, 0); + + if ($res) + { + $result = "has right for have_perm_area_action($areaselect, 0)"; + } else { + $result = "has no right for have_perm_area_action($areaselect, 0)"; + } +} + + +echo "

    Debug

    "; +echo "

    Check for right:

    "; +$form = '
    + '.$sess->hidden_session().' + + + + + '; +echo $form; +echo "Area:".$areaSelector."
    "; +echo "Action:".$actionSelector."
    "; +echo 'Item:'; +echo "
    Type:
    "; +echo "have_perm_area_action_item
    "; +echo "have_perm_area_action
    "; +echo "have_perm_area_action without action (i.e. area access right)
    "; +echo "

    Result:
    "; +echo "
    "; +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.default_subnav.php b/branches/conlite20/conlite/includes/include.default_subnav.php new file mode 100644 index 0000000..4ec8342 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.default_subnav.php @@ -0,0 +1,199 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release 4.8.14 + * + * {@internal + * created 2010-08-23 + * + * $Id: include.default_subnav.php 75 2012-05-25 10:51:00Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) + die('Illegal call'); + + +$aExectime = array(); +$aExectime["fullstart"] = getmicrotime(); + +/* + * Debug-Modus: on / off + * and Message as String + */ +$bDebug = false; +$sDebugMsg = ''; + +/* + * Ben�tigt alle m�glichen vom Frame �bergenene GET-Parameter-Names + */ +$aBasicParams = array('area', 'frame', 'contenido', 'appendparameters'); + +/* + * Flag to check is file is loading from Main-Frame + */ +$bVirgin = false; + + +$area = Contenido_Security::escapeDB($area, $db); + + +/* + * Basic-Url-Params with + * Key: like 'id%' or '%id' + * and + * Value: are integer or strlen=32 (for md5) + */ +$sUrlParams = ''; # URL-Parameter as string "&..." + "&..." +$iCountBasicVal = 0; # Count of basic Parameter in URL + +foreach ($_GET as $sTempKey => $sTempValue) { + if (in_array($sTempKey, $aBasicParams)) { + /* Basic parameters attached */ + $iCountBasicVal++; + } else if (( substr($sTempKey, 0, 2) == 'id' || substr($sTempKey, -2, 2) == 'id' ) + && ( (int) $sTempValue == $sTempValue // check integer + || preg_match("/^[0-9a-f]{32}$/", $sTempValue) ) // check md5 + ) { + /* complement the selected data */ + $sUrlParams .= '&' . $sTempKey . '=' . $sTempValue; + } +} + +/* + * is loading from main.php + * dann ist die Anzahl aller g�ltigen Variablen mit den in GET identisch + */ +if ($iCountBasicVal == count($_GET)) { + $bVirgin = true; +} + +/* + * Area-Url-Params + * + * for special params + * + switch( $area ) { + case 'style': case 'js': case 'htmltpl': + if(array_key_exists('file', $_GET)) { + $sUrlParams.= '&file='.$_GET['file']; + } + break; + default: echo ""; + } + */ + +/* Debug */ +$sDebugMsg .= 'Url-Params: ' . $sUrlParams . "\n"; + + +/* + * Select NavSubItems from DB + */ +$nav = new Contenido_Navigation; + +$sql = "SELECT + navsub.location AS location, + area.name AS name, + area.menuless AS menuless + FROM + " . $cfg["tab"]["area"] . " AS area, + " . $cfg["tab"]["nav_sub"] . " AS navsub + WHERE + area.idarea = navsub.idarea + AND + navsub.level = 1 + AND + navsub.online = 1 + AND + area.online = 1 + AND ( + area.parent_id = '" . $area . "' + OR + area.name = '" . $area . "' + ) + ORDER BY + area.parent_id ASC, + navsub.idnavs ASC"; + +/* Debug */ +$sDebugMsg .= '' . "\n"; + + +$db->query($sql); + +while ($db->next_record()) { + /* Name */ + $sArea = $db->f("name"); + + /* Set translation path */ + $sCaption = $nav->getName($db->f("location")); + + /* for Main-Area */ + if ($sArea == $area) { + /* Menueless */ + $bMenuless = $db->f("menuless") ? true : false; + + if ($bVirgin && !$bMenuless && $db->f("name") == $area) { + // ist loading fron Main, Main-Area and Menuless -> stop this "while" + break; + } + } + + /* Link */ + $sLink = $sess->url("main.php?area=" . $sArea . "&frame=4" . (isset($appendparameters) ? '&appendparameters=' . $appendparameters : '') . "&contenido=" . $sess->id . $sUrlParams); + + /* Class */ + if ($sArea == $area) + $sClass = ' current'; + else + $sClass = ''; + + /* fill template */ + $tpl->set("d", "ID", 'c_' . $tpl->dyn_cnt); + $tpl->set("d", "CLASS", 'item ' . $sArea); + $tpl->set("d", "CAPTION", '' . $sCaption . ''); + $tpl->next(); +} + +if (!$bVirgin || (isset($bMenuless) && $bMenuless)) { + $tpl->set('s', 'CLASS', (isset($bMenuless) && $bMenuless) ? 'menuless' : ''); + $tpl->set('s', 'SESSID', $sess->id); + + $sTpl = $tpl->generate($cfg["path"]["templates"] . $cfg['templates']['default_subnav'], true); + + if ($bDebug === true) { + + $aExectime["fullend"] = getmicrotime(); + $sExectime = ($aExectime["fullend"] - $aExectime["fullstart"]); + $sDebugMsg .= 'sExectime: ' . substr($sExectime, 0, 7) . " sec" . "\n"; + + $sTpl = str_replace('', '
    ' . nl2br($sDebugMsg) . '
    ' . '', $sTpl); + } + + echo $sTpl; +} else { + /* + * Is loading from main.php + */ + $tpl->reset(); + $tpl->generate($cfg["path"]["templates"] . $cfg['templates']['right_top_blank']); +} +?> diff --git a/branches/conlite20/conlite/includes/include.files_subnav.php b/branches/conlite20/conlite/includes/include.files_subnav.php new file mode 100644 index 0000000..d09d439 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.files_subnav.php @@ -0,0 +1,124 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-25 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.files_subnav.php 22 2011-08-25 09:58:43Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if ( isset($_GET['file']) ) { + + $area = $_GET['area']; + + $nav = new Contenido_Navigation; + + $sql = "SELECT + idarea + FROM + ".$cfg["tab"]["area"]." AS a + WHERE + a.name = '".Contenido_Security::escapeDB($area, $db)."' OR + a.parent_id = '".Contenido_Security::escapeDB($area, $db)."' + ORDER BY + idarea"; + + $db->query($sql); + + $in_str = ""; + + while ( $db->next_record() ) { + $in_str .= $db->f('idarea') . ','; + } + + $len = strlen($in_str)-1; + $in_str = substr($in_str, 0, $len); + $in_str = '('.$in_str.')'; + + $sql = "SELECT + b.location AS location, + a.name AS name + FROM + ".$cfg["tab"]["area"]." AS a, + ".$cfg["tab"]["nav_sub"]." AS b + WHERE + b.idarea IN ".$in_str." AND + b.idarea = a.idarea AND + b.level = 1 AND + b.online = 1 + ORDER BY + b.idnavs"; + + $db->query($sql); + + while ( $db->next_record() ) { + + /* Extract names from the XML document. */ + $caption = $nav->getName($db->f("location")); + + $tmp_area = $db->f("name"); + if ($tmp_area == 'style') { + $sAction = '&action=style_edit'; + } else if ($tmp_area == 'js') { + $sAction = '&action=js_edit'; + } else if ($tmp_area == 'htmltpl') { + $sAction = '&action=htmltpl_edit'; + } else { + $sAction = ''; + } + if ($perm->have_perm_area_action($tmp_area)) + { + # Set template data + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", ''.$caption.''); + $tpl->next(); + + } + } + + $tpl->set('s', 'COLSPAN', ($tpl->dyn_cnt * 2) + 2); + + if ($_GET['history'] == 'true') { + $tpl->set('s', 'ACTIVATE_HISTORY', 'setHistory();'); + } else { + $tpl->set('s', 'ACTIVATE_HISTORY', ''); + } + + # Generate the third + # navigation layer + $tpl->generate($cfg["path"]["templates"] . $cfg['templates']['file_subnav']); + +} else { + include ($cfg["path"]["contenido"].$cfg["path"]["templates"] . $cfg["templates"]["right_top_blank"]); +} + +?> diff --git a/branches/conlite20/conlite/includes/include.frontend.group.subnav.php b/branches/conlite20/conlite/includes/include.frontend.group.subnav.php new file mode 100644 index 0000000..f47843b --- /dev/null +++ b/branches/conlite20/conlite/includes/include.frontend.group.subnav.php @@ -0,0 +1,87 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.frontend.group.subnav.php 22 2011-08-25 09:58:43Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if ( isset($_GET['idfrontendgroup']) ) +{ + + $caption = i18n("Overview"); + $tmp_area = "foo2"; + + # Set template data + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", ''.$caption.''); + $tpl->next(); + + if (is_array($cfg['plugins']['frontendlogic'])) + { + foreach ($cfg['plugins']['frontendlogic'] as $plugin) + { + cInclude("plugins", "frontendlogic/$plugin/".$plugin.".php"); + + $className = "frontendlogic_".$plugin; + + if (class_exists($className)) + { + $class = new $className; + + $caption = $class->getFriendlyName(); + + $tmp_area = "foo2"; + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", ''.$caption.''); + $tpl->next(); + } + } + } + + + + $tpl->set('s', 'COLSPAN', ($tpl->dyn_cnt * 2) + 2); + + # Generate the third + # navigation layer + $tpl->generate($cfg["path"]["templates"] . $cfg["templates"]["subnav"]); + +} else { + include ($cfg["path"]["contenido"].$cfg["path"]["templates"] . $cfg["templates"]["right_top_blank"]); + +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.frontend.group_edit.php b/branches/conlite20/conlite/includes/include.frontend.group_edit.php new file mode 100644 index 0000000..5d6f27a --- /dev/null +++ b/branches/conlite20/conlite/includes/include.frontend.group_edit.php @@ -0,0 +1,301 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2007-06-16, Holger Librenz, Hotfix: check for illegal calls added + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.frontend.group_edit.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$page = new cPage; +$fegroups = new FrontendGroupCollection; + +if (is_array($cfg['plugins']['frontendgroups'])) +{ + foreach ($cfg['plugins']['frontendgroups'] as $plugin) + { + plugin_include("frontendgroups", $plugin."/".$plugin.".php"); + } +} + +$fegroup = new FrontendGroup; +$groupmembers = new FrontendGroupMemberCollection; +$fegroup->loadByPrimaryKey($idfrontendgroup); +$sRefreshRightTopLinkJs = ""; + +if ($action == "frontendgroup_create" && $perm->have_perm_area_action($area, $action)) +{ + $fegroup = $fegroups->create(" ".i18n("-- new group --")); + $idfrontendgroup = $fegroup->get("idfrontendgroup"); + $sRefreshRightTopLink = $sess->url('main.php?frame=3&area='.$area.'&idfrontendgroup='.$idfrontendgroup); + $sRefreshRightTopLink = "conMultiLink('right_top', '".$sRefreshRightTopLink."')"; + $sRefreshRightTopLinkJs = ""; + +} else if ($action == "frontendgroups_user_delete" && $perm->have_perm_area_action($area, $action)) { + $aDeleteMembers = array(); + if (!is_array($_POST['user_in_group'])) { + if ($_POST['user_in_group'] > 0) { + array_push($aDeleteMembers, $_POST['user_in_group']); + } + } else { + $aDeleteMembers = $_POST['user_in_group']; + } + foreach ($aDeleteMembers as $idfrontenduser) { + $groupmembers->remove($idfrontendgroup, $idfrontenduser); + } + + # also save other variables + $action = "frontendgroup_save_group"; +} else if ($action == "frontendgroup_user_add" && $perm->have_perm_area_action($area, $action)) { + if (count($newmember) > 0) + { + foreach ($newmember as $add) + { + $groupmembers->create($idfrontendgroup, $add); + } + } + + # also save other variables + $action = "frontendgroup_save_group"; +} else if ($action == "frontendgroup_delete" && $perm->have_perm_area_action($area, $action)) +{ + $fegroups->delete($idfrontendgroup); + $idfrontendgroup= 0; + $fegroup = new FrontendGroup; +} + +if ($action != '') { + $sReloadScript = ""; +} else { + $sReloadScript = ''; +} + +if ($fegroup->virgin == false && $fegroup->get("idclient") == $client) +{ + if ($action == "frontendgroup_save_group" && $perm->have_perm_area_action($area, $action)) + { + $messages = array(); + + if ($fegroup->get("groupname") != stripslashes($groupname)) + { + $fegroups->select("groupname = '$groupname' and idclient='$client'"); + if ($fegroups->next()) + { + $messages[] = i18n("Could not set new group name: Group already exists"); + } else { + $fegroup->set("groupname", stripslashes($groupname)); + } + } + + //Reset all default groups + if ($defaultgroup == 1) { + $sSql = 'UPDATE '.$cfg["tab"]["frontendgroups"].' SET defaultgroup = 0 WHERE idclient='.$client.';'; + $db->query($sSql); + } + $fegroup->set("defaultgroup", $defaultgroup); + + /* Check out if there are any plugins */ + if (is_array($cfg['plugins']['frontendgroups'])) + { + foreach ($cfg['plugins']['frontendgroups'] as $plugin) + { + if (function_exists("frontendgroups_".$plugin."_wantedVariables") && + function_exists("frontendgroups_".$plugin."_store")) + { + $wantVariables = call_user_func("frontendgroups_".$plugin."_wantedVariables"); + + if (is_array($wantVariables)) + { + $varArray = array(); + + foreach ($wantVariables as $value) + { + $varArray[$value] = stripslashes($GLOBALS[$value]); + } + } + $store = call_user_func("frontendgroups_".$plugin."_store", $varArray); + } + } + } + + $fegroup->store(); + } + + if (count($messages) > 0) + { + $notis = $notification->returnNotification("warning", implode("
    ", $messages)) . "
    "; + } + + $tpl->reset(); + + $feusers = new FrontendUserCollection; + $feusers->select("idclient='$client'"); + + $addedusers = $groupmembers->getUsersInGroup($idfrontendgroup,false); + $addeduserobjects = $groupmembers->getUsersInGroup($idfrontendgroup,true); + + $cells = array(); + foreach ($addeduserobjects as $addeduserobject) + { + if ((int)$addeduserobject->get("idfrontenduser") != 0 && $addeduserobject->get("username") != '') { + $cells[$addeduserobject->get("idfrontenduser")] = $addeduserobject->get("username"); + } + } + + asort($cells); + + $sInGroupOptions = ''; + foreach ($cells as $idfrontenduser => $name) + { + $sInGroupOptions .= ''."\n"; + } + $tpl->set('s', 'IN_GROUP_OPTIONS', $sInGroupOptions); + + $items = array(); + while ($feuser = $feusers->next()) + { + $idfrontenduser = $feuser->get("idfrontenduser"); + $sUsername = $feuser->get("username"); + + if (!in_array($idfrontenduser,$addedusers)) + { + if ((int) $idfrontenduser != 0 && $sUsername != '') { + $items[$idfrontenduser] = $sUsername; + } + } + } + + asort($items); + + $sNonGroupOptions = ''; + foreach ($items as $idfrontenduser => $name) + { + $sNonGroupOptions .= ''."\n"; + } + $tpl->set('s', 'NON_GROUP_OPTIONS', $sNonGroupOptions); + + $groupname = new cHTMLTextbox("groupname", $fegroup->get("groupname"),40); + + $defaultgroup = new cHTMLCheckbox("defaultgroup", "1"); + $defaultgroup->setChecked($fegroup->get("defaultgroup")); + + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_header"]); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'LABEL', i18n("Group name")); + $tpl->set('d', 'INPUT', $groupname->render()); + $tpl->next(); + + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_header"]); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'LABEL', i18n("Default group")); + $tpl->set('d', 'INPUT', $defaultgroup->toHTML(false)); + $tpl->next(); + + $pluginOrder = trim_array(explode(",",getSystemProperty("plugin", "frontendgroups-pluginorder"))); + + /* Check out if there are any plugins */ + if (is_array($pluginOrder)) + { + foreach ($pluginOrder as $plugin) + { + if (function_exists("frontendgroups_".$plugin."_getTitle") && + function_exists("frontendgroups_".$plugin."_display")) + { + + $plugTitle = call_user_func("frontendgroups_".$plugin."_getTitle"); + $display = call_user_func("frontendgroups_".$plugin."_display", $fegroup); + + if (is_array($plugTitle) && is_array($display)) + { + foreach ($plugTitle as $key => $value) + { + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_header"]); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'LABEL', $value); + $tpl->set('d', 'INPUT', $display[$key]); + $tpl->next(); + } + } else { + if (is_array($plugTitle) || is_array($display)) + { + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_header"]); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'LABEL', "WARNING"); + $tpl->set('d', 'INPUT', "The plugin $plugin delivered an array for the displayed titles, but did not return an array for the contents."); + $tpl->next(); + } else { + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_header"]); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'LABEL', $plugTitle); + $tpl->set('d', 'INPUT', $display); + $tpl->next(); + } + } + } + } + } + + $tpl->set('s', 'CATNAME', i18n("Edit group")); + $tpl->set('s', 'BGCOLOR', $cfg["color"]["table_header"]); + $tpl->set('s', 'BGCOLOR_CONTENT', $cfg["color"]["table_dark"]); + $tpl->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('s', 'CATFIELD', " "); + $tpl->set('s', 'FORM_ACTION', $sess->url('main.php')); + $tpl->set('s', 'AREA', $area); + $tpl->set('s', 'GROUPID', $idfrontendgroup); + $tpl->set('s', 'FRAME', $frame); + $tpl->set('s', 'IDLANG', $lang); + $tpl->set('s', 'STANDARD_ACTION', 'frontendgroup_save_group'); + $tpl->set('s', 'ADD_ACTION', 'frontendgroup_user_add'); + $tpl->set('s', 'DELETE_ACTION', 'frontendgroups_user_delete'); + $tpl->set('s', 'DISPLAY_OK', 'block'); + $tpl->set('s', 'IN_GROUP_VALUE', $_POST['filter_in']); + $tpl->set('s', 'NON_GROUP_VALUE', $_POST['filter_non']); + $tpl->set('s', 'RECORD_ID_NAME', 'idfrontendgroup'); + $tpl->set('s', 'RELOADSCRIPT', $sReloadScript.$sRefreshRightTopLinkJs); + + $tpl = $tpl->generate($cfg['path']['templates'] . $cfg['templates']['grouprights_memberselect']); +} else { + $page = new UI_Page; + $page->setContent(""); + $page->addScript('reload', $sReloadScript); + $page->render(); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.frontend.group_menu.php b/branches/conlite20/conlite/includes/include.frontend.group_menu.php new file mode 100644 index 0000000..3b384ba --- /dev/null +++ b/branches/conlite20/conlite/includes/include.frontend.group_menu.php @@ -0,0 +1,105 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.frontend.group_menu.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$page = new cPage; +$menu = new UI_Menu; + +$fegroups = new FrontendGroupCollection; +$fegroups->select("idclient = '$client'","", "groupname ASC"); + +while ($fegroup = $fegroups->next()) +{ + $groupname = $fegroup->get("groupname"); + $idfegroup = $fegroup->get("idfrontendgroup"); + + $link = new Link; + $link->setMultiLink("frontendgroups","","frontendgroups",""); + $link->setCustom("idfrontendgroup",$idfegroup); + + $delTitle = i18n("Delete frontend group"); + $delDescr = sprintf(i18n("Do you really want to delete the following frontend group:
    %s"),clHtmlSpecialChars($groupname)); + $delete = ''.$delTitle.''; + + $menu->setTitle($idfegroup, $groupname); + $menu->setLink($idfegroup, $link); + $menu->setImage($idfegroup, "", 0); + $menu->setActions($idfegroup, 'delete', $delete); + + if ($_GET['idfrontendgroup'] == $idfegroup) { + $menu->setExtra($idfegroup, 'id="marked" '); + } +} + +$sInitRowMark = ""; + +$delScript = ' + '; + +$msgboxInclude = ''; + +$page->addScript('include', $msgboxInclude); +$page->addScript('del',$delScript); +$page->setMargin(0); +$page->setMargin(0); +$page->setContent($menu->render(false).$sInitRowMark); +$page->render(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.frontend.group_rights.php b/branches/conlite20/conlite/includes/include.frontend.group_rights.php new file mode 100644 index 0000000..7089203 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.frontend.group_rights.php @@ -0,0 +1,139 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2002-03-02 + * modified 2008-06-16, Holger Librenz, Hotfic: checking for illegal calls + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.frontend.group_rights.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +// @TODO: check the code beneath is necessary +if ($_REQUEST['useplugin'] != "category") { + die ('Illegal call!'); +} + + +$page = new cPage; + +if (!in_array($useplugin, $cfg['plugins']['frontendlogic'])) +{ + $page->setContent(i18n("Invalid plugin")); + +} else { + + cInclude("plugins", "frontendlogic/$useplugin/".$useplugin.".php"); + + $className = "frontendlogic_".$useplugin; + $class = new $className; + $perms = new FrontendPermissionCollection; + + + $rights = new UI_Table_Form("rights"); + $rights->setVar("area", $area); + $rights->setVar("frame", $frame); + $rights->setVar("useplugin", $useplugin); + $rights->setVar("idfrontendgroup", $idfrontendgroup); + $rights->setVar("action", "fegroups_save_perm"); + + $actions = $class->listActions(); + $items = $class->listItems(); + + if ($action == "fegroups_save_perm") + { + $myitems = $items; + $myitems["__GLOBAL__"] = "__GLOBAL__"; + + foreach ($actions as $action => $text) + { + foreach ($myitems as $item => $text) + { + + if ($item === "__GLOBAL__") + { + $varname = "action_$action"; + } else { + $varname = "item_".$item."_$action"; + } + + if ($_POST[$varname] == 1) + { + $perms->setPerm($idfrontendgroup, $useplugin, $action, $item); + } else { + $perms->removePerm($idfrontendgroup, $useplugin, $action, $item); + } + } + } + + } + + $rights->addHeader(sprintf(i18n("Permissions for plugin '%s'"), $class->getFriendlyName())); + + foreach ($actions as $key => $action) + { + $check[$key] = new cHTMLCheckbox("action_$key", 1); + $check[$key]->setLabelText($action." ".i18n("(All)")); + + if ($perms->checkPerm($idfrontendgroup, $useplugin, $key, "__GLOBAL__")) + { + $check[$key]->setChecked(true); + } + } + + $rights->add(i18n("Global rights"), $check); + + foreach ($actions as $key => $action) + { + unset($check); + + if (count($items) > 0) + { + foreach ($items as $item => $value) + { + $check[$item] = new cHTMLCheckbox("item_".$item."_".$key, 1); + $check[$item]->setLabelText($value); + + if ($perms->checkPerm($idfrontendgroup, $useplugin, $key, $item)) + { + $check[$item]->setChecked(true); + } + + } + + $rights->add($action, $check); + } else { + $rights->add($action, i18n("No items found")); + } + } + + $page->setContent($rights->render()); +} + +$page->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.frontend.left_top.php b/branches/conlite20/conlite/includes/include.frontend.left_top.php new file mode 100644 index 0000000..fabffcc --- /dev/null +++ b/branches/conlite20/conlite/includes/include.frontend.left_top.php @@ -0,0 +1,482 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.frontend.left_top.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->reset(); + +$oPage = new cPage; + +$user = new cApiUser($auth->auth["uid"]); + +$tpl->set('s', '{SESSID}', $sess->id); + +/* Set default values */ +$oUser = new cApiUser($auth->auth["uid"]); +if (!isset($_REQUEST["elemperpage"]) || !is_numeric($_REQUEST['elemperpage']) || $_REQUEST['elemperpage'] <= 0) { + $_REQUEST["elemperpage"] = $oUser->getProperty("itemsperpage", $area); +} +if (!is_numeric($_REQUEST['elemperpage'])) { + $_REQUEST['elemperpage'] = 25; +} +$oUser->setProperty("itemsperpage", $area, $_REQUEST["elemperpage"]); +unset ($oUser); + +if (!isset($_REQUEST["page"]) || !is_numeric($_REQUEST['page']) || $_REQUEST['page'] <= 0 || $_REQUEST["elemperpage"] == 0) { + $_REQUEST["page"] = 1; +} + +$aFieldsToSearch = array("--all--" => i18n("-- All fields --"), "username" => i18n("Username")); +$aFieldsToSort = array("username" => i18n("Username")); + +$aFieldSources = array(); +$aFieldSources["username"] = "base"; + +$bUsePlugins = getEffectiveSetting("frontendusers", "pluginsearch", "true"); + +if ($bUsePlugins == "false") +{ + $bUsePlugins = false; +} else { + $bUsePlugins = true; +} + + +if (is_array($cfg['plugins']['frontendusers'])) +{ + foreach ($cfg['plugins']['frontendusers'] as $plugin) + { + plugin_include("frontendusers", $plugin."/".$plugin.".php"); + } +} + +if ($bUsePlugins == true) +{ + if (is_array($cfg['plugins']['frontendusers'])) + { + $_sValidPlugins = getEffectiveSetting("frontendusers", "pluginsearch_valid_plugins", ''); + $_aValidPlugins = array(); + if (strlen($_sValidPlugins)>0) { + $_aValidPlugins = explode(',', $_sValidPlugins); + } + $_iCountValidPlugins = sizeof($_aValidPlugins); + foreach ($cfg['plugins']['frontendusers'] as $plugin) + { + if ($_iCountValidPlugins == 0 || in_array($plugin, $_aValidPlugins)) { + if (function_exists("frontendusers_".$plugin."_wantedVariables") && function_exists("frontendusers_".$plugin."_canonicalVariables")) + { + $aVariableNames = call_user_func("frontendusers_".$plugin."_canonicalVariables"); + + if (is_array($aVariableNames)) + { + $aTmp = array_merge($aFieldsToSearch, $aVariableNames); + $aFieldsToSearch = $aTmp; + + $aTmp2 = array_merge($aFieldsToSort, $aVariableNames); + $aFieldsToSort = $aTmp2; + + foreach ($aVariableNames as $sVariableName => $name) + { + $aFieldSources[$sVariableName] = $plugin; + } + } + } + } + } + } +} + +$aSortOrderOptions = array ("asc" => i18n("Ascending"), "desc" => i18n("Descending")); + +########### +# Buttons +########### +/** + * @todo change behavior for links to use cHTML elements + */ +$userlink = new cHTMLLink; +$userlink->setCLink("frontend", 2, ""); +$userlink->attachEventDefinition('Help', "onclick", setHelpContext("frontenduser")); + +$grouplink = new cHTMLLink; +$grouplink->setCLink("frontendgroups", 2, ""); + +$userlink="javascript:execFilter(2);"; +$grouplink="javascript:conMultiLink('left_bottom','main.php?area=frontendgroups&frame=2&action=&contenido=".$sess->id."')"; + +// Init view by javascript (decide which tab is activated) +$imgUserId='img_user'; +$tpl->set('s', 'IUSER', $imgUserId); + +$buttonRow .= ''; +$buttonRow .= ''.i18n('; +$buttonRow .= ''; + +// Frontend Groups +$imgGroupId='img_group'; +$tpl->set('s', 'IGROUP', $imgGroupId); +$buttonRow .= ''; +$buttonRow .= ''.i18n('; +$buttonRow .= ''; + +$tpl->set('s', 'BUTTONROW', $buttonRow); + +if(isset($_GET['view']) && $_GET['view'] == $imgGroupId) { + $tpl->set('s', 'IINIT', $imgGroupId); +} else { + $tpl->set('s', 'IINIT', $imgUserId); +} + +################ +# Users Actions +################ +$actionLink="actionlink"; +$sActionUuid = '28cf9b31-e6d7-4657-a9a7-db31478e7a5c'; + +$oActionRow = new cFoldingRow($sActionUuid ,i18n("Actions"), $actionLink); +if(isset($_GET['actionrow']) && $_GET['actionrow'] == 'collapsed') { + $oActionRow->setExpanded(false); + $user->setProperty("expandstate", $sActionUuid, 'false'); +} else if (isset($_GET['actionrow']) && $_GET['actionrow'] == 'expanded') { + $oActionRow->setExpanded(true); + $user->setProperty("expandstate", $sActionUuid, 'true'); +} + +$tpl->set('s', 'ACTIONLINK', $actionLink); +$oLink = new cHTMLLink; +if ((int) $client > 0) { + $oLink->setMultiLink("frontend","","frontend","frontend_create"); + $oLink->setContent(i18n("Create user")); +} else { + $oLink->setLink(''); + $oLink->setContent(i18n("No Client selected")); +} +$oLink->setClass("addfunction"); +$oLink->setStyle('margin-left: 17px;margin-top:5px'); +$oActionRow->setContentData($oLink->render()); + +###################### +# Users List Options +###################### + +$sListOptionId = 'f081b6ab-370d-4fd8-984f-6b38590fe48b'; +$listOptionLink="listoptionlink"; +$oListOptionRow = new cFoldingRow($sListOptionId, i18n("List options"), $listOptionLink); +$oListOptionRow->setExpanded(true); + +if(isset($_GET['filterrow']) && $_GET['filterrow'] == 'collapsed') { + $oActionRow->setExpanded(false); + $user->setProperty("expandstate", $sListOptionId, 'false'); +} else if (isset($_GET['filterrow']) && $_GET['filterrow'] == 'expanded') { + $oActionRow->setExpanded(true); + $user->setProperty("expandstate", $sListOptionId, 'true'); +} + +$tpl->set('s', 'LISTOPTIONLINK', $listOptionLink); +$oSelectItemsPerPage = new cHTMLSelectElement("elemperpage"); +$oSelectItemsPerPage->autoFill(array(25 => 25, 50 => 50, 75 => 75, 100 => 100)); +$oSelectItemsPerPage->setDefault($_REQUEST["elemperpage"]); + +asort($aFieldsToSort); +asort($aFieldsToSearch); + +$oSelectSortBy = new cHTMLSelectElement("sortby"); +$oSelectSortBy->autoFill($aFieldsToSort); +$oSelectSortBy->setDefault($_REQUEST["sortby"]); + +$oSelectSortOrder = new cHTMLSelectElement("sortorder"); +$oSelectSortOrder->autoFill($aSortOrderOptions); +$oSelectSortOrder->setDefault($_REQUEST["sortorder"]); + +$oSelectSearchIn = new cHTMLSelectElement("searchin"); +$oSelectSearchIn->autoFill($aFieldsToSearch); +$oSelectSearchIn->setDefault($_REQUEST["searchin"]); + +$fegroups = new FrontendGroupCollection; +$fegroups->setWhere("idclient", $client); +$fegroups->query(); + +$aFEGroups = array("--all--" => i18n("-- All Groups --")); + +while ($fegroup = $fegroups->next()) +{ + $aFEGroups[$fegroup->get("idfrontendgroup")] = $fegroup->get("groupname"); +} + +$oSelectRestrictGroup = new cHTMLSelectElement("restrictgroup"); +$oSelectRestrictGroup->autoFill($aFEGroups); +$oSelectRestrictGroup->setDefault($_REQUEST["restrictgroup"]); +$oTextboxFilter = new cHTMLTextbox("filter", $_REQUEST["filter"], 20); + + +$content = '
    '; +// Ye stuff will be done in javascript on apply button +$content .= '
    '; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= '
    '. i18n("Items / page").''.$oSelectItemsPerPage->render().'
    '. i18n("Sort by").''.$oSelectSortBy->render().'
    '. i18n("Sort order").''.$oSelectSortOrder->render().'
    '. i18n("Show group").''.$oSelectRestrictGroup->render().'
    '. i18n("Search for").''.$oTextboxFilter->render().'
    '. i18n("Search in").''.$oSelectSearchIn->render().'
     
    '; +$content .= '
    '; +$content .= '
    '; +$oListOptionRow->setContentData($content); +$oFEUsers = new FrontendUserCollection; +$oFEUsers->setWhere("FrontendUserCollection.idclient", $client); + +############################## +# Process request parameters +############################## +if (strlen($_REQUEST["filter"]) > 0 && $bUsePlugins == false) +{ + $oFEUsers->setWhere("FrontendUsercollection.username", $_REQUEST["filter"], "diacritics"); +} + +if ($_REQUEST["restrictgroup"] != "" && $_REQUEST["restrictgroup"] != "--all--") +{ + $oFEUsers->link("FrontendGroupMemberCollection"); + $oFEUsers->setWhere("FrontendGroupMemberCollection.idfrontendgroup", $_REQUEST["restrictgroup"]); +} + +$mPage = $_REQUEST["page"]; +$elemperpage = $_REQUEST["elemperpage"]; + +if ($bUsePlugins == false) +{ + $oFEUsers->query(); + + $iFullTableCount = $oFEUsers->count(); + + $oFEUsers->setOrder(implode(" ", array($oSelectSortBy->getDefault(), $oSelectSortOrder->getDefault()))); + $oFEUsers->setLimit($elemperpage * ($mPage - 1), $elemperpage); +} + +$oFEUsers->query(); + +$aUserTable = array(); + +while ($feuser = $oFEUsers->next()) +{ + foreach ($aFieldSources as $key => $field) + { + $idfrontenduser = $feuser->get("idfrontenduser"); + + $aUserTable[$idfrontenduser]["idfrontenduser"] = $idfrontenduser; + + switch ($field) + { + case "base": + $aUserTable[$idfrontenduser][$key] = $feuser->get("username"); + break; + default: + if ($_REQUEST["filter"] != "") + { + $aUserTable[$idfrontenduser][$key] = call_user_func("frontendusers_".$field."_getvalue", $key); + } + break; + } + } + + if ($_REQUEST["filter"] != "") + { + if ($_REQUEST["searchin"] == "--all--" || $_REQUEST["searchin"] == "") + { + $found = false; + + foreach ($aUserTable[$idfrontenduser] as $key => $value) + { + if (stripos($value, $_REQUEST["filter"]) !== false) + { + $found = true; + } + } + + if ($found == false) + { + unset($aUserTable[$idfrontenduser]); + } + + } else { + if (stripos($aUserTable[$idfrontenduser][$_REQUEST["searchin"]], $_REQUEST["filter"]) === false) + { + unset($aUserTable[$idfrontenduser]); + } + } + } +} + +if ($_REQUEST["sortorder"] == "desc") +{ + $sortorder = SORT_DESC; +} else { + $sortorder = SORT_ASC; +} + +if ($_REQUEST["sortby"]) +{ + $aUserTable = array_csort($aUserTable, $_REQUEST["sortby"], $sortorder); +} else { + $aUserTable = array_csort($aUserTable, "username", $sortorder); +} + +$mlist = new UI_Menu; +$iMenu = 0; +$iItemCount = 0; + +foreach ($aUserTable as $mkey => $params) +{ + $idfrontenduser = $params["idfrontenduser"]; + $link = new cHTMLLink; + $link->setMultiLink($area, "", $area, ""); + $link->setCustom("idfrontenduser", $idfrontenduser); + + $iItemCount++; + + if (($iItemCount > ($elemperpage * ($mPage - 1)) && $iItemCount < (($elemperpage * $mPage) + 1)) || $bUsePlugins == false) + { + $iMenu++; + + $message = sprintf(i18n("Do you really want to delete the user %s?"), clHtmlSpecialChars($params["username"])); + + $delTitle = i18n("Delete user"); + $deletebutton = ''.$delTitle.''; + + $mlist->setTitle($iMenu, $params["username"]); + $mlist->setLink($iMenu, $link); + $mlist->setActions($iMenu, "delete", $deletebutton); + $mlist->setImage($iMenu, "images/users.gif"); + } +} + +if ($bUsePlugins == false) +{ + $iItemCount = $iFullTableCount; +} + +############### +# Users Paging +############### +$pagingLink="paginglink"; +$tpl->set('s', 'PAGINGLINK', $pagingLink); + +$oPagerLink = new cHTMLLink; +$oPagerLink->setTargetFrame('left_bottom'); +$oPagerLink->setLink("main.php"); +$oPagerLink->setCustom("elemperpage", $elemperpage); +$oPagerLink->setCustom("filter", $_REQUEST["filter"]); +$oPagerLink->setCustom("sortby", $_REQUEST["sortby"]); +$oPagerLink->setCustom("sortorder", $_REQUEST["sortorder"]); +$oPagerLink->setCustom("searchin", $_REQUEST["searchin"]); +$oPagerLink->setCustom("restrictgroup", $_REQUEST["restrictgroup"]); +$oPagerLink->setCustom("frame", 2); +$oPagerLink->setCustom("area", $area); +$oPagerLink->enableAutomaticParameterAppend(); +$oPagerLink->setCustom("contenido", $sess->id); + +$oPager = new cObjectPager("25c6a67d-a3f1-4ea4-8391-446c131952c9", $iItemCount, $_REQUEST['elemperpage'], $mPage, $oPagerLink, "page", $pagingLink); +$oPager->setExpanded(true); + +###################### +# Groups create Groups +###################### +$link = new Link; +$menu = new UI_Menu; +if ((int) $client > 0) { + $link->setLink('javascript:conMultiLink(\'right_bottom\', \''.$sess->url("main.php?area=frontendgroups&frame=4&action=frontendgroup_create").'\');'); + $menu->setTitle("-2", i18n("Create group")); +} else { + $link->setLink(''); + $menu->setTitle("-2", i18n("No Client selected")); +} +$menu->setImage("-2", $cfg["path"]["images"] . "folder_new.gif"); +$menu->setLink("-2", $link); +$menu->setLink("10", $link); +$menu->setTitle("10", ""); +$menu->setImage("10", ""); +$menu->setRowmark(false); + +####################### +# Container Users +####################### +$containerUsersId='cont_users'; +$containerUsers = '
    '; +$containerUsers .= ''; +$containerUsers .= $oActionRow->render(); +$containerUsers .= $oListOptionRow->render(); +$containerUsers .= $oPager->render(); +$containerUsers .= '
    '; +$containerUsers .= '
    '; +$tpl->set('s', 'CUSERS', $containerUsers); +$tpl->set('s', 'ID_USERS', $containerUsersId); + +####################### +# Container Groups +####################### +$containerGroupsId='cont_groups'; +$containerGroups = '
    '; +$containerGroups .= ''.$menu->render(false).''; +$containerGroups .= '
    '; +$tpl->set('s', 'CGROUPS', $containerGroups); +$tpl->set('s', 'ID_GROUPS', $containerGroupsId); + +$tpl->set('s', 'PAGE', $_REQUEST["page"]); + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['admin_frontend']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.frontend.user_edit.php b/branches/conlite20/conlite/includes/include.frontend.user_edit.php new file mode 100644 index 0000000..2da7723 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.frontend.user_edit.php @@ -0,0 +1,252 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * $Id: include.frontend.user_edit.php 292 2014-01-20 09:49:37Z oldperl $: + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$oPage = new cPage(); +$oPage->setHtml5(); + +$oFeUsers = new FrontendUserCollection(); +if (is_array($cfg['plugins']['frontendusers'])) { + foreach ($cfg['plugins']['frontendusers'] as $plugin) { + plugin_include("frontendusers", $plugin."/".$plugin.".php"); + } +} + +$oFeUser = $feuser = new FrontendUser($idfrontenduser); +$oFEGroupMemberCollection = new FrontendGroupMemberCollection; +$oFEGroupMemberCollection->setWhere('idfrontenduser', $idfrontenduser); +$oFEGroupMemberCollection->addResultField('idfrontendgroup'); +$oFEGroupMemberCollection->query(); + +# Fetch all groups the user belongs to (no goup, one group, more than one group). +# The array $aFEGroup can be used in frontenduser plugins to display selfdefined user properties group dependent. +$aFEGroup = array(); + +while($oFEGroup = $oFEGroupMemberCollection->next()) { + $aFEGroup[] = $oFEGroup->get("idfrontendgroup"); +} + +if ($action == "frontend_create" && $perm->have_perm_area_action("frontend", "frontend_create")) { + $oFeUser = $oFeUsers->create(" ".i18n("-- new user --")); + $idfrontenduser = $oFeUser->get("idfrontenduser"); +} + +if ($idfrontenduser && $action != '') { + $sReloadScript = ""; +} else { + $sReloadScript = ""; +} + +$sFormCheck = ' + +'; + +$oPage->addScript("formcheck", $sFormCheck); + +// Delete FE-User +if ($action == "frontend_delete" && $perm->have_perm_area_action("frontend", "frontend_delete")) { + $oFeUsers->delete($idfrontenduser); + $iterator = $_cecRegistry->getIterator("Contenido.Permissions.FrontendUser.AfterDeletion"); + while ($chainEntry = $iterator->next()) { + $chainEntry->execute($idfrontenduser); + } + + $idfrontenduser = 0; + $oFeUser = new FrontendUser(); + $oPage->addScript('reload', $sReloadScript); +} + +if ($oFeUser->virgin == false && $oFeUser->get("idclient") == $client) { + // check and save changes + if ($action == "frontend_save_user") { + $oPage->addScript('reload', $sReloadScript); + $messages = array(); + $bStore = true; + $initname = i18n("-- new user --"); + $bNewUser = (strstr($username, $initname) === false)?false:true; + if(empty($username) || $bNewUser) { + $messages[] = i18n("Username empty or not set! Please choose one."); + $bStore = false; + } + // check for empty password + if($bStore && empty($newpd) && $oFeUser->get("password") == "d41d8cd98f00b204e9800998ecf8427e") { + $messages[] = i18n("Password not set right now!"); + $bStore = false; + } + if ($bStore && $oFeUser->get("username") != stripslashes($username)) { + $oFeUsers->select("username = '".urlencode($username)."' and idclient='$client'"); + if ($oFeUsers->next()) { + $messages[] = i18n("Could not set new username: Username already exists"); + } else { + $oFeUser->set("username", stripslashes($username)); + } + } + + if ($newpd != $newpd2) { + $messages[] = i18n("Could not set new password: Passwords don't match"); + } else { + if ($newpd != "") { + $oFeUser->set("password", $newpd); + } + } + + $oFeUser->set("active", $active); + + /* Check out if there are any plugins */ + if (is_array($cfg['plugins']['frontendusers'])) { + foreach ($cfg['plugins']['frontendusers'] as $plugin) { + if (function_exists("frontendusers_".$plugin."_wantedVariables") && + function_exists("frontendusers_".$plugin."_store")) { + # check if user belongs to a specific group + # if true store values defined in frontenduser plugin + if (function_exists("frontendusers_".$plugin."_checkUserGroup")) { + $bCheckUserGroup = call_user_func("frontendusers_".$plugin."_checkUserGroup"); + } else { + $bCheckUserGroup = true; + } + if ($bCheckUserGroup) { + $wantVariables = call_user_func("frontendusers_".$plugin."_wantedVariables"); + if (is_array($wantVariables)) { + $varArray = array(); + foreach ($wantVariables as $value) { + $varArray[$value] = stripslashes($GLOBALS[$value]); + } + } + $store = call_user_func("frontendusers_".$plugin."_store", $varArray); + } + } + } + } + if($bStore) $oFeUser->store(); + } + + if (count($messages) > 0) { + $notis = $notification->returnNotification("warning", implode("
    ", $messages)) . "
    "; + } + + + $form = new UI_Table_Form("properties"); + $form->setSubmitJS("return checkUserForm();"); + $form->setVar("frame", $frame); + $form->setVar("area", $area); + $form->setVar("action", "frontend_save_user"); + $form->setVar("idfrontenduser", $idfrontenduser); + + $form->addHeader(i18n("Edit user")); + + $username = new cHTMLTextbox("username", ((isset($_POST['username']) && $bStore === false)?$_POST['username']:$oFeUser->get("username")),40); + $newpw = new cHTMLPasswordBox("newpd","",40); + $newpw2 = new cHTMLPasswordBox("newpd2","",40); + $active = new cHTMLCheckbox("active","1"); + $active->setChecked($oFeUser->get("active")); + + $form->add(i18n("User name"), $username->render()); + $form->add(i18n("New password"), $newpw->render()); + $form->add(i18n("New password (again)"), $newpw2->render()); + $form->add(i18n("Active"), $active->toHTML(false)); + + $pluginOrder = trim_array(explode(",",getSystemProperty("plugin", "frontendusers-pluginorder"))); + + /* Check out if there are any plugins */ + if (is_array($pluginOrder)) { + foreach ($pluginOrder as $plugin) { + if (function_exists("frontendusers_".$plugin."_getTitle") && + function_exists("frontendusers_".$plugin."_display")) { + # check if user belongs to a specific group + # if true display frontenduser plugin + if (function_exists("frontendusers_".$plugin."_checkUserGroup")) { + $bCheckUserGroup = call_user_func("frontendusers_".$plugin."_checkUserGroup"); + } else { + $bCheckUserGroup = true; + } + + if ($bCheckUserGroup) { + $plugTitle = call_user_func("frontendusers_".$plugin."_getTitle"); + $display = call_user_func("frontendusers_".$plugin."_display", $oFeUser); + + if (is_array($plugTitle) && is_array($display)) { + foreach ($plugTitle as $key => $value) { + $form->add($value, $display[$key]); + } + } else { + if (is_array($plugTitle) || is_array($display)) { + $form->add(i18n("WARNING"), sprintf(i18n("The plugin %s delivered an array for the displayed titles, but did not return an array for the contents."), $plugin)); + } else { + $form->add($plugTitle, $display); + } + } + } + } + } + + $arrGroups = $oFeUser->getGroupsForUser(); + + if(count($arrGroups) > 0) { + $aMemberGroups = array(); + + foreach($arrGroups as $iGroup) { + $oMemberGroup = new FrontendGroup($iGroup); + $aMemberGroups[] = $oMemberGroup->get("groupname"); + } + asort($aMemberGroups); + + $sTemp = implode('
    ', $aMemberGroups); + } else { + $sTemp = i18n("none"); + } + + $form->add(i18n("Group membership"), $sTemp ); + $form->add(i18n("Author"), $classuser->getUserName($oFeUser->get("author")) . " (". $oFeUser->get("created").")" ); + $form->add(i18n("Last modified by"), $classuser->getUserName($oFeUser->get("modifiedby")). " (". $oFeUser->get("modified").")" ); +} +//$sDialog = '
    I\'m in a dialog
    '; +$sDialog = ""; +$oPage->setContent( $notis . $form->render(true). $sDialog); +$oPage->addScript('reload', $sReloadScript); +} else { + $oPage->setContent(""); +} +$oPage->render(); +?> diff --git a/branches/conlite20/conlite/includes/include.frontend.user_menu.php b/branches/conlite20/conlite/includes/include.frontend.user_menu.php new file mode 100644 index 0000000..23568cb --- /dev/null +++ b/branches/conlite20/conlite/includes/include.frontend.user_menu.php @@ -0,0 +1,373 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.frontend.user_menu.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$oPage = new cPage; +// +///* Set default values */ +$oUser = new cApiUser($auth->auth["uid"]); +if (!isset($_REQUEST["elemperpage"]) || !is_numeric($_REQUEST['elemperpage']) || $_REQUEST['elemperpage'] <= 0) { + $_REQUEST["elemperpage"] = $oUser->getProperty("itemsperpage", $area); +} +if (!is_numeric($_REQUEST['elemperpage'])) { + $_REQUEST['elemperpage'] = 25; +} +$oUser->setProperty("itemsperpage", $area, $_REQUEST["elemperpage"]); +unset ($oUser); + +if (!isset($_REQUEST["page"]) || !is_numeric($_REQUEST['page']) || $_REQUEST['page'] <= 0 || $_REQUEST["elemperpage"] == 0) { + $_REQUEST["page"] = 1; +} + +$aFieldsToSearch = array("--all--" => i18n("-- All fields --"), "username" => i18n("Username")); +$aFieldsToSort = array("username" => i18n("Username")); + +$aFieldSources = array(); +$aFieldSources["username"] = "base"; + +$bUsePlugins = getEffectiveSetting("frontendusers", "pluginsearch", "true"); + +if ($bUsePlugins == "false") +{ + $bUsePlugins = false; +} else { + $bUsePlugins = true; +} + +if (is_array($cfg['plugins']['frontendusers'])) +{ + foreach ($cfg['plugins']['frontendusers'] as $plugin) + { + plugin_include("frontendusers", $plugin."/".$plugin.".php"); + } +} + +if ($bUsePlugins == true) +{ + if (is_array($cfg['plugins']['frontendusers'])) + { + $_sValidPlugins = getEffectiveSetting("frontendusers", "pluginsearch_valid_plugins", ''); + $_aValidPlugins = array(); + if (strlen($_sValidPlugins)>0) { + $_aValidPlugins = explode(',', $_sValidPlugins); + } + $_iCountValidPlugins = sizeof($_aValidPlugins); + foreach ($cfg['plugins']['frontendusers'] as $plugin) + { + if ($_iCountValidPlugins == 0 || in_array($plugin, $_aValidPlugins)) { + if (function_exists("frontendusers_".$plugin."_wantedVariables") && function_exists("frontendusers_".$plugin."_canonicalVariables")) + { + $aVariableNames = call_user_func("frontendusers_".$plugin."_canonicalVariables"); + + if (is_array($aVariableNames)) + { + $aTmp = array_merge($aFieldsToSearch, $aVariableNames); + $aFieldsToSearch = $aTmp; + + $aTmp2 = array_merge($aFieldsToSort, $aVariableNames); + $aFieldsToSort = $aTmp2; + + foreach ($aVariableNames as $sVariableName => $name) + { + $aFieldSources[$sVariableName] = $plugin; + } + } + } + } + } + } +} + +$aSortOrderOptions = array ("asc" => i18n("Ascending"), "desc" => i18n("Descending")); + +$oListOptionRow = new cFoldingRow("f081b6ab-370d-4fd8-984f-6b38590fe48b", i18n("List options")); + +$oSelectItemsPerPage = new cHTMLSelectElement("elemperpage"); +$oSelectItemsPerPage->autoFill(array(25 => 25, 50 => 50, 75 => 75, 100 => 100)); +$oSelectItemsPerPage->setDefault($_REQUEST["elemperpage"]); + +asort($aFieldsToSort); +asort($aFieldsToSearch); + +$oSelectSortBy = new cHTMLSelectElement("sortby"); +$oSelectSortBy->autoFill($aFieldsToSort); +$oSelectSortBy->setDefault($_REQUEST["sortby"]); + +$oSelectSortOrder = new cHTMLSelectElement("sortorder"); +$oSelectSortOrder->autoFill($aSortOrderOptions); +$oSelectSortOrder->setDefault($_REQUEST["sortorder"]); + +$oSelectSearchIn = new cHTMLSelectElement("searchin"); +$oSelectSearchIn->autoFill($aFieldsToSearch); +$oSelectSearchIn->setDefault($_REQUEST["searchin"]); + +$fegroups = new FrontendGroupCollection; +$fegroups->setWhere("idclient", $client); +$fegroups->query(); + +$aFEGroups = array("--all--" => i18n("-- All Groups --")); + +while ($fegroup = $fegroups->next()) +{ + $aFEGroups[$fegroup->get("idfrontendgroup")] = $fegroup->get("groupname"); +} + +$oSelectRestrictGroup = new cHTMLSelectElement("restrictgroup"); +$oSelectRestrictGroup->autoFill($aFEGroups); +$oSelectRestrictGroup->setDefault($_REQUEST["restrictgroup"]); + +$oTextboxFilter = new cHTMLTextbox("filter", $_REQUEST["filter"], 20); + +$oFEUsers = new FrontendUserCollection; +$oFEUsers->setWhere("FrontendUserCollection.idclient", $client); + +if (strlen($_REQUEST["filter"]) > 0 && $bUsePlugins == false) +{ + $oFEUsers->setWhere("FrontendUsercollection.username", $_REQUEST["filter"], "diacritics"); +} + +if ($_REQUEST["restrictgroup"] != "" && $_REQUEST["restrictgroup"] != "--all--") +{ + $oFEUsers->link("FrontendGroupMemberCollection"); + $oFEUsers->setWhere("FrontendGroupMemberCollection.idfrontendgroup", $_REQUEST["restrictgroup"]); +} + +$mPage = $_REQUEST["page"]; +$elemperpage = $_REQUEST["elemperpage"]; + +$iFullTableCount = 0; +if ($bUsePlugins == false) +{ + $oFEUsers->query(); + + $iFullTableCount = $oFEUsers->count(); + + $oFEUsers->setOrder(implode(" ", array($oSelectSortBy->getDefault(), $oSelectSortOrder->getDefault()))); + $oFEUsers->setLimit($elemperpage * ($mPage - 1), $elemperpage); +} else { + $oFEUsers->query(); + $iFullTableCount = $oFEUsers->count(); +} + +if ($_REQUEST["elemperpage"]*($_REQUEST["page"]) >= $iFullTableCount+$_REQUEST["elemperpage"] && $_REQUEST["page"] != 1) { + $_REQUEST["page"]--; + $mPage--; +} + +$oFEUsers->query(); + +$aUserTable = array(); + +while ($feuser = $oFEUsers->next()) +{ + foreach ($aFieldSources as $key => $field) + { + $idfrontenduser = $feuser->get("idfrontenduser"); + + $aUserTable[$idfrontenduser]["idfrontenduser"] = $idfrontenduser; + + switch ($field) + { + case "base": + $aUserTable[$idfrontenduser][$key] = $feuser->get("username"); + break; + default: + if ($_REQUEST["filter"] != "") + { + $aUserTable[$idfrontenduser][$key] = call_user_func("frontendusers_".$field."_getvalue", $key); + } + break; + } + } + + if ($_REQUEST["filter"] != "") + { + if ($_REQUEST["searchin"] == "--all--" || $_REQUEST["searchin"] == "") + { + $found = false; + + foreach ($aUserTable[$idfrontenduser] as $key => $value) + { + if (stripos($value, $_REQUEST["filter"]) !== false) + { + $found = true; + } + } + + if ($found == false) + { + unset($aUserTable[$idfrontenduser]); + } + + } else { + if (stripos($aUserTable[$idfrontenduser][$_REQUEST["searchin"]], $_REQUEST["filter"]) === false) + { + unset($aUserTable[$idfrontenduser]); + } + } + } +} + +if ($_REQUEST["sortorder"] == "desc") +{ + $sortorder = SORT_DESC; +} else { + $sortorder = SORT_ASC; +} + +if ($_REQUEST["sortby"]) +{ + $aUserTable = array_csort($aUserTable, $_REQUEST["sortby"], $sortorder); +} else { + $aUserTable = array_csort($aUserTable, "username", $sortorder); +} + +$mlist = new UI_Menu; +$iMenu = 0; +$iItemCount = 0; + +foreach ($aUserTable as $mkey => $params) +{ + $idfrontenduser = $params["idfrontenduser"]; + $link = new cHTMLLink; + $link->setMultiLink($area, "", $area, ""); + $link->setCustom("idfrontenduser", $idfrontenduser); + + $iItemCount++; + + if (($iItemCount > ($elemperpage * ($mPage - 1)) && $iItemCount < (($elemperpage * $mPage) + 1)) || $bUsePlugins == false) + { + $iMenu++; + + $message = sprintf(i18n("Do you really want to delete the user %s?"), clHtmlSpecialChars($params["username"])); + + $delTitle = i18n("Delete user"); + $deletebutton = ''.$delTitle.''; + + $mlist->setTitle($iMenu, $params["username"]); + $mlist->setLink($iMenu, $link); + $mlist->setActions($iMenu, "delete", $deletebutton); + $mlist->setImage($iMenu, ""); + + if ($_GET['frontenduser'] == $idfrontenduser) { + $mlist->setExtra($iMenu, 'id="marked" '); + } + } +} + +if ($bUsePlugins == false) +{ + $iItemCount = $iFullTableCount; +} + +$deleteScript = ''; + +$sInitRowMark = ""; + +$oPage->setMargin(0); +$oPage->addScript('messagebox', ''); +$oPage->addScript('delete', $deleteScript); +//$oPage->addScript('cfoldingrow.js', ''); +$oPage->addScript('parameterCollector.js', ''); + +//generate current content for Object Pager +$oPagerLink = new cHTMLLink; +$oPagerLink->setTargetFrame('left_bottom'); +$oPagerLink->setLink("main.php"); +$oPagerLink->setCustom("elemperpage", $elemperpage); +$oPagerLink->setCustom("filter", $_REQUEST["filter"]); +$oPagerLink->setCustom("sortby", $_REQUEST["sortby"]); +$oPagerLink->setCustom("sortorder", $_REQUEST["sortorder"]); +$oPagerLink->setCustom("searchin", $_REQUEST["searchin"]); +$oPagerLink->setCustom("restrictgroup", $_REQUEST["restrictgroup"]); +$oPagerLink->setCustom("frame", $frame); +$oPagerLink->setCustom("area", $area); +$oPagerLink->enableAutomaticParameterAppend(); +$oPagerLink->setCustom("contenido", $sess->id); + +$oPager = new cObjectPager("25c6a67d-a3f1-4ea4-8391-446c131952c9", $iItemCount, $_REQUEST['elemperpage'], $mPage, $oPagerLink, "page", $pagingLink); + +//add slashes, to insert in javascript +$sPagerContent = $oPager->render(1); +$sPagerContent = str_replace('\\', '\\\\', $sPagerContent); +$sPagerContent = str_replace('\'', '\\\'', $sPagerContent); + +//send new object pager to left_top +$sRefreshPager = ' + '; + +$oPage->addScript('refreshpager', $sRefreshPager); +$oPage->setContent($mlist->render(false).$sInitRowMark); +$oPage->render(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.grouprights_create.php b/branches/conlite20/conlite/includes/include.grouprights_create.php new file mode 100644 index 0000000..9312882 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.grouprights_create.php @@ -0,0 +1,181 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-30 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2009-11-06, Murat Purc, replaced deprecated functions (PHP 5.3 ready) + * modified 2011-02-07, Murat Purc, Cleanup, optimization and formatting + * + * $Id: include.grouprights_create.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude('includes', 'functions.rights.php'); + + +if (!$perm->have_perm_area_action($area, $action)) { + // access denied + $notification->displayNotification('error', i18n('Permission denied')); + return; +} + + +// create group instance +$oGroup = new Group(); +$bError = false; +$sNotification = ''; +$aPerms = array(); + +if ($action == 'group_create') { + $aPerms = buildUserOrGroupPermsFromRequest(); + + if ($groupname == '') { + $groupname = 'grp_' . i18n("New Group"); + } + + if (substr($groupname, 0, 4) != 'grp_') { + $groupname = 'grp_' . $groupname; + } + $newgroupid = md5($groupname); + + $oGroup->setField('groupname', Contenido_Security::escapeDB($groupname, $db)); + $oGroup->setField('perms', Contenido_Security::escapeDB(implode(',', $aPerms), $db)); + $oGroup->setField('description', Contenido_Security::escapeDB($description, $db)); + $oGroup->setField('group_id', Contenido_Security::escapeDB($newgroupid, $db)); + if ($oGroup->insert()) { + // clean "old" values... + $sNotification = $notification->returnNotification("info", i18n("group created")); + $groupname = ''; + $aPerms = array(); + $description = ''; + } else { + $sNotification = $notification->returnNotification("info", i18n("Group couldn't created")); + $bError = true; + } +} + +$tpl->reset(); +$tpl->set('s','NOTIFICATION', $sNotification); + +$form = '
    + '.$sess->hidden_session(true).' + + + + '; + +$tpl->set('s', 'FORM', $form); +$tpl->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('s', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('s', 'SUBMITTEXT', i18n("Save changes")); + +$tpl->set('d', 'CATNAME', i18n("Property")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_header"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', i18n("Value")); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Group name")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +if ($action == 'group_create' && !$bError) { + $tpl->set('d', 'CATFIELD', substr($groupname, 4)); +} else { + $tpl->set('d', 'CATFIELD', formGenerateField('text', 'groupname', stripslashes(substr($groupname, 4)), 40, 32)); +} +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Description")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'description', stripslashes($description), 40, 255)); +$tpl->next(); + +// permissions of current logged in user +$aAuthPerms = explode(',', $auth->auth['perm']); + +// sysadmin perm +if (in_array('sysadmin', $aAuthPerms)) { + $tpl->set('d', 'CATNAME', i18n("System administrator")); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', 'CATFIELD', formGenerateCheckbox('msysadmin', '1', in_array('sysadmin', $aPerms))); + $tpl->next(); +} + +// clients admin perms +$oClientsCollection = new cApiClientCollection(); +$aClients = $oClientsCollection->getAvailableClients(); +$sClientCheckboxes = ''; +foreach ($aClients as $idclient => $item) { + if (in_array("admin[".$idclient."]", $aAuthPerms) || in_array('sysadmin', $aAuthPerms)) { + $sClientCheckboxes .= formGenerateCheckbox("madmin[".$idclient."]", $idclient, in_array("admin[".$idclient."]", $aPerms), $item['name'] . " (".$idclient.")")."
    "; + } +} + +if ($sClientCheckboxes !== '') { + $tpl->set('d', 'CATNAME', i18n("Administrator")); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', 'CATFIELD', $sClientCheckboxes); + $tpl->next(); +} + +// clients perms +$sClientCheckboxes = ''; +foreach ($aClients as $idclient => $item) { + if (in_array("client[".$idclient."]", $aAuthPerms) || in_array('sysadmin', $aAuthPerms) || in_array("admin[".$idclient."]", $aAuthPerms)) { + $sClientCheckboxes .= formGenerateCheckbox("mclient[".$idclient."]", $idclient, in_array("client[".$idclient."]", $aPerms), $item['name'] . " (". $idclient . ")")."
    "; + } +} + +$tpl->set('d', 'CATNAME', i18n("Access clients")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'CATFIELD', $sClientCheckboxes); +$tpl->next(); + + +// languages perms +$aClientsLanguages = getAllClientsAndLanguages(); +$sClientCheckboxes = ''; +foreach ($aClientsLanguages as $item) { + if ($perm->have_perm_client("lang[".$item['idlang']."]") || $perm->have_perm_client("admin[".$item['idclient']."]")) { + $sClientCheckboxes .= formGenerateCheckbox("mlang[".$item['idlang']."]", $item['idlang'], in_array("lang[".$item['idlang']."]", $aPerms), $item['langname']." (". $item['clientname'] .")")."
    "; + } +} + +$tpl->set('d', 'CATNAME', i18n("Access languages")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'CATFIELD', $sClientCheckboxes); +$tpl->next(); + +# Generate template +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['grouprights_create']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.grouprights_details.php b/branches/conlite20/conlite/includes/include.grouprights_details.php new file mode 100644 index 0000000..d090391 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.grouprights_details.php @@ -0,0 +1,171 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-30 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.grouprights_details.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$idclient = 2; +$idlang = 2; +die; + +$sql = 'SELECT * FROM '.$cfg["tab"]["rights"].' WHERE idlang = 2 AND idclient = 2 AND user_id = \"'.Contenido_Security::escapeDB($userid, $db).'\"'; +echo $sql; + +$db->query($sql); + +while ($db->next_record()) +{ + echo $db->f(0)."
    "; +} + +if ( !isset($useridas) ) +{ + +} else { + + if ($action == "user_edit") + { + + if (strlen($password) > 0) + { + if (strcmp($password, $passwordagain) == 0) + { + $sql = 'UPDATE + '.$cfg["tab"]["phplib_auth_user_md5"].' + SET + password="'.md5($password).'" + WHERE + user_id = "'.Contenido_Security::escapeDB($userid, $db).'"'; + + $db->query($sql); + } else { + $error = "Passwords don't match"; + } + } + + $sql = 'UPDATE + '.$cfg["tab"]["phplib_auth_user_md5"].' + SET + realname="'.Contenido_Security::escapeDB($realname, $db).'", + email="'.Contenido_Security::escapeDB($email, $db).'", + telephone="'.Contenido_Security::escapeDB($telephone, $db).'", + address_street="'.Contenido_Security::escapeDB($address_street, $db).'", + address_city="'.Contenido_Security::escapeDB($address_city, $db).'", + address_country="'.Contenido_Security::escapeDB($address_country, $db).'", + wysi="'.Contenido_Security::toInteger($wysi).'" + WHERE + user_id = "'.Contenido_Security::escapeDB($userid, $db).'"'; + + $db->query($sql); + } + + $tpl->reset(); + + $sql = "SELECT + username, password, realname, email, telephone, + address_street, address_city, address_country, wysi + FROM + ".$cfg["tab"]["phplib_auth_user_md5"]." + WHERE + user_id = '".Contenido_Security::escapeDB($userid, $db)."'"; + + $db->query($sql); + + $form = ' + '.$sess->hidden_session().' + + + + + '; + + $db->next_record(); + + + $tpl->set('s', 'USERNAME', $db->f("username")); + $tpl->set('s', 'EDITSTRING', "Benutzer editieren:"); + $tpl->set('s', 'FORM', $form); + $tpl->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('s', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('s', 'SUBMITTEXT', "�nderungen übernehmen"); + if ($error) + { + echo $error; + } + $tpl->set('d', 'CATNAME', "Name"); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', 'CATFIELD', formGenerateField ("text", "realname", $db->f("realname"), 40, 255)); + $tpl->next(); + + $tpl->set('d', 'CATNAME', "Neues Passwort"); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', 'CATFIELD', formGenerateField ("password", "password", "", 40, 255)); + $tpl->next(); + + $tpl->set('d', 'CATNAME', "Neues Passwort (Best�tigung)"); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', 'CATFIELD', formGenerateField ("password", "passwordagain", "", 40, 255)); + $tpl->next(); + + $tpl->set('d', 'CATNAME', "E-Mail"); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', 'CATFIELD', formGenerateField ("text", "email", $db->f("email"), 40, 255)); + $tpl->next(); + + $tpl->set('d', 'CATNAME', "Telefon"); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', 'CATFIELD', formGenerateField ("text", "telephone", $db->f("telephone"), 40, 255)); + $tpl->next(); + + $tpl->set('d', 'CATNAME', "Strasse"); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', 'CATFIELD', formGenerateField ("text", "address_street", $db->f("address_street"), 40, 255)); + $tpl->next(); + + $tpl->set('d', 'CATNAME', "Stadt"); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', 'CATFIELD', formGenerateField ("text", "address_city", $db->f("address_city"), 40, 255)); + $tpl->next(); + + $tpl->set('d', 'CATNAME', "Land"); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', 'CATFIELD', formGenerateField ("text", "address_country", $db->f("address_country"), 40, 255)); + $tpl->next(); + + $tpl->set('d', 'CATNAME', "WYSIWYG-Editor"); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', 'CATFIELD', formGenerateCheckbox("wysi", "1", $db->f("wysi"))); + $tpl->next(); + + # Generate template + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['rights_details']); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.grouprights_external.php b/branches/conlite20/conlite/includes/include.grouprights_external.php new file mode 100644 index 0000000..f101dae --- /dev/null +++ b/branches/conlite20/conlite/includes/include.grouprights_external.php @@ -0,0 +1,59 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-16, Holger Librenz, Hotifc: added check for invalid calls + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.grouprights_external.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +// @TODO: check the code beneath is necessary +if (isset($_REQUEST['sAreaFilename'])) { + die ('Invalid call!'); +} + +$_cecIterator = $_cecRegistry->getIterator("Contenido.Permissions.Group.GetAreaEditFilename"); + +while ($chainEntry = $_cecIterator->next()) +{ + // @TODO: This has to be refactored because this could cause SQL-Injection, Remote-File-Inclusion .... + $aInfo = $chainEntry->execute($_REQUEST["external_area"]); + if ($aInfo !== false) + { + $sAreaFilename = $aInfo; + break; + } +} + +if ($sAreaFilename !== false) +{ + include($sAreaFilename); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.grouprights_left_top.php b/branches/conlite20/conlite/includes/include.grouprights_left_top.php new file mode 100644 index 0000000..6e076f5 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.grouprights_left_top.php @@ -0,0 +1,94 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-29 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.grouprights_left_top.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +// The following lines unset all right objects since +// I don't know (or I was unable to find out) if they +// are global and/or session variables - so if you are +// switching between groups and user management, we are +// safe. +unset($right_list); +unset($rights_list_old); +unset($rights_perms); +$right_list = ""; +$rights_list_old = ""; +$rights_perms = ""; + +$tpl->set('s', 'ID', 'oTplSel'); +$tpl->set('s', 'CLASS', 'text_medium'); +$tpl->set('s', 'OPTIONS', ''); +$tpl->set('s', 'SESSID', $sess->id); +$tpl->set('s', 'SID', $sess->id); + +$tpl2 = new Template; +$tpl2->set('s', 'NAME', 'restrict'); +$tpl2->set('s', 'CLASS', 'text_medium'); +$tpl2->set('s', 'OPTIONS', 'onchange="groupChangeRestriction()"'); + +$limit = array( + "2" => i18n("All"), + "1" => i18n("Frontend only"), + "3" => i18n("Backend only")); + +foreach ($limit as $key => $value) { + + if ($restrict == $key) + { + $selected = "selected"; + } else { + $selected = ""; + } + + $tpl2->set('d', 'VALUE', $key); + $tpl2->set('d', 'CAPTION', $value); + $tpl2->set('d', 'SELECTED', $selected); + $tpl2->next(); + +} + +$select = $tpl2->generate($cfg["path"]["templates"] . $cfg['templates']['generic_select'], true); + + +$tpl->set('s', 'CAPTION', ''); + +$tmp_mstr = '%s'; +$area = "group"; +$mstr = sprintf($tmp_mstr, 'right_top', + $sess->url("main.php?area=groups_create&frame=3"), + 'right_bottom', + $sess->url("main.php?area=groups_create&frame=4"), + i18n("Create group")); +$tpl->set('s', 'NEWGROUP', $mstr); + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['grouprights_left_top']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.grouprights_menu.php b/branches/conlite20/conlite/includes/include.grouprights_menu.php new file mode 100644 index 0000000..8c8e2d4 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.grouprights_menu.php @@ -0,0 +1,212 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-30 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2009-11-06, Murat Purc, replaced deprecated functions (PHP 5.3 ready) + * + * $Id: include.grouprights_menu.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->reset(); +$tpl->set('s', 'SID', $sess->id); + +if (($action == "group_delete") && ($perm->have_perm_area_action($area, $action))) { + + $sql = "DELETE FROM " + .$cfg["tab"]["groups"]. + " WHERE + group_id = \"" .Contenido_Security::escapeDB($groupid, $db)."\""; + $db->query($sql); + + $sql = "DELETE FROM ". + $cfg["tab"]["groupmembers"]. + " WHERE group_id = \"" .Contenido_Security::escapeDB($groupid, $db)."\""; + + $db->query($sql); + + + $sql = "DELETE FROM ". + $cfg["tab"]["rights"]. + " WHERE user_id = \"" .Contenido_Security::escapeDB($groupid, $db)."\""; + + $db->query($sql); +} + +$sql = "SELECT + groupname, group_id, perms + FROM + ".$cfg["tab"]["groups"]." + ORDER BY + groupname ASC"; + + +if ($restriction == 1) +{ + $sql = "SELECT + A.groupname AS groupname, A.group_id as group_id, A.perms as perms + FROM + ".$cfg["tab"]["groups"]." AS A, + ".$cfg["tab"]["rights"]." AS B, + ".$cfg["tab"]["actions"]." AS C + WHERE + C.name = 'front_allow' AND + B.user_id = A.group_id AND + C.idaction = B.idaction AND + A.perms LIKE '' + GROUP BY + group_id + ORDER BY + groupname ASC"; +} + +if ($restriction == 3) +{ + $sql = "SELECT + A.groupname AS groupname, A.group_id as group_id, A.perms as perms + FROM + ".$cfg["tab"]["groups"]." AS A, + ".$cfg["tab"]["rights"]." AS B, + ".$cfg["tab"]["actions"]." AS C + WHERE + C.name NOT LIKE 'front_allow' AND + B.user_id = A.group_id AND + C.idaction = B.idaction AND + A.perms NOT LIKE '' + GROUP BY + group_id + ORDER BY + groupname ASC"; +} +$db->query($sql); + +// Empty Row +$bgcolor = '#FFFFFF'; +$tpl->set('s', 'PADDING_LEFT', '10'); +$thisperm = explode(',', $auth->auth['perm']); + +$accessibleClients = $classclient->getAccessibleClients(); + +while ($db->next_record()) +{ + + $groupperm = explode(',', $db->f('perms')); + + $allow = false; + + // Sysadmin check + if (in_array("sysadmin", $thisperm)) + { + $allow = true; + } + + // Admin check + foreach ($accessibleClients as $key => $value) + { + if (in_array("client[".$key."]", $groupperm)) + { + $allow = true; + } + } + + // Group check + foreach ($groupperm as $localperm) + { + + if (in_array($localperm, $thisperm)) + { + $allow = true; + } + + } + + if ($allow == true) + { + + $dark = !$dark; + if ($dark) { + $bgColor = $cfg["color"]["table_dark"]; + } else { + $bgColor = $cfg["color"]["table_light"]; + } + + $groupid = $db->f("group_id"); + $groupname = $db->f("groupname"); + + $groupname = substr($groupname, 4); + + $tmp_mstr = '%s'; + $area = "groups"; + $mstr = sprintf($tmp_mstr, 'right_top', + $sess->url("main.php?area=$area&frame=3&groupid=$groupid"), + 'right_bottom', + $sess->url("main.php?area=groups_overview&frame=4&groupid=$groupid"), + $groupname); + + $mstr2 = sprintf($tmp_mstr, 'right_top', + $sess->url("main.php?area=$area&frame=3&groupid=$groupid"), + 'right_bottom', + $sess->url("main.php?area=groups_overview&frame=4&groupid=$groupid"), + ''); + + if ($perm->have_perm_area_action('groups',"groups_delete") ) { + $message = sprintf(i18n("Do you really want to delete the group %s?"),clHtmlSpecialChars($groupname)); + $deletebutton = "\"".$lngUpl["delfolder"]."\""; + } else { + $deletebutton = ""; + } + + if ($_GET['groupid'] == $groupid) { + $bgColor = $cfg['color']['table_light_active']; + $tpl->set('d', 'ID_MARKED', 'marked'); + } else { + $tpl->set('d', 'ID_MARKED', ''); + } + + $tpl->set('d', 'BGCOLOR', $bgColor); + $tpl->set('d', 'TEXT', $mstr); + $tpl->set('d', 'ICON', $mstr2); + + if ($perm->have_perm_area_action('groups',"groups_delete") ) { + $delTitle = i18n("Delete group"); + $delDescr = sprintf(i18n("Do you really want to delete the following group:

    %s
    "),clHtmlSpecialChars($groupname)); + + + $tpl->set('d', 'DELETE', ''.$delTitle.''); + } else { + $tpl->set('d', 'DELETE', ' '); + } + + $tpl->next(); + } +} + +# Generate template +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['grouprights_menu']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.grouprights_overview.php b/branches/conlite20/conlite/includes/include.grouprights_overview.php new file mode 100644 index 0000000..59d079d --- /dev/null +++ b/branches/conlite20/conlite/includes/include.grouprights_overview.php @@ -0,0 +1,231 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-30 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2009-11-06, Murat Purc, replaced deprecated functions (PHP 5.3 ready) + * modified 2011-02-07, Murat Purc, Cleanup, optimization and formatting + * + * $Id: include.grouprights_overview.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude('includes', 'functions.rights.php'); + + +if (!$perm->have_perm_area_action($area, $action)) { + // access denied + $notification->displayNotification('error', i18n('Permission denied')); + return; +} + +if (!isset($groupid)) { + // no group id, get out here + return; +} + +// create group instance +$oGroup = new Group(); +$oGroup->loadGroupByGroupID($groupid); +$bError = false; +$sNotification = ''; +$aPerms = array(); + +// edit group +if (($action == 'group_edit')) { + $aPerms = buildUserOrGroupPermsFromRequest(); + $oGroup->setField('description', Contenido_Security::escapeDB($description, $db)); + $oGroup->setField('perms', Contenido_Security::escapeDB(implode(',', $aPerms), $db)); + + if ($oGroup->store()) { + $sNotification = $notification->returnNotification("info", i18n("Changes saved")); + } else { + $sNotification = $notification->returnNotification("warn", i18n("Changes couldn't saved")); + $bError = true; + } +} + +// delete group property +if (is_string($del_groupprop_type) && is_string($del_groupprop_name)) { + $oGroup->deleteGroupProperty($del_groupprop_type, $del_groupprop_name); +} + +// add group property +if (is_string($groupprop_type) && is_string($groupprop_name) && is_string($groupprop_value) + && !empty($groupprop_type) && !empty($groupprop_name)) { + $oGroup->setGroupProperty($groupprop_type, $groupprop_name, $groupprop_value); +} + + +$aPerms = explode(',', $oGroup->getField('perms')); + +$tpl->reset(); +$tpl->set('s','NOTIFICATION', $sNotification); + +$form = ' + '.$sess->hidden_session(true).' + + + + + '; + +$tpl->set('s', 'FORM', $form); +$tpl->set('s', 'GET_GROUPID', $groupid); + +$tpl->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('s', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('s', 'SUBMITTEXT', i18n("Save changes")); +$tpl->set('s', 'CANCELTEXT', i18n("Discard changes")); +$tpl->set('s', 'CANCELLINK', $sess->url("main.php?area=$area&frame=4&groupid=$groupid")); + +$tpl->set('d', 'CATNAME', i18n("Property")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_header"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', i18n("Value")); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Groupname")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', substr(stripslashes($oGroup->getField('groupname')),4)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Description")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'description', stripslashes($oGroup->getField('description')), 40, 255)); +$tpl->next(); + +// permissions of current logged in user +$aAuthPerms = explode(',', $auth->auth['perm']); + +// sysadmin perm +if (in_array('sysadmin', $aAuthPerms)) { + $tpl->set('d', 'CATNAME', i18n("System administrator")); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', 'CATFIELD', formGenerateCheckbox('msysadmin', '1', in_array('sysadmin', $aPerms))); + $tpl->next(); +} + +// clients admin perms +$oClientsCollection = new cApiClientCollection(); +$aClients = $oClientsCollection->getAvailableClients(); +$sClientCheckboxes = ''; +foreach ($aClients as $idclient => $item) { + if (in_array("admin[".$idclient."]", $aAuthPerms) || in_array('sysadmin', $aAuthPerms)) { + $sClientCheckboxes .= formGenerateCheckbox("madmin[".$idclient."]", $idclient, in_array("admin[".$idclient."]", $aPerms), $item['name']." (".$idclient.")")."
    "; + } +} + +if ($sClientCheckboxes !== '' && !in_array('sysadmin', $aPerms)) { + $tpl->set('d', 'CATNAME', i18n("Administrator")); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', 'CATFIELD', $sClientCheckboxes); + $tpl->next(); +} + +// clients perms +$sClientCheckboxes = ''; +foreach ($aClients as $idclient => $item) { + if ((in_array("client[".$idclient."]", $aAuthPerms) || in_array('sysadmin', $aAuthPerms) || in_array("admin[".$idclient."]", $aAuthPerms)) && !in_array("admin[".$idclient."]", $aPerms)) { + $sClientCheckboxes .= formGenerateCheckbox("mclient[".$idclient."]", $idclient, in_array("client[".$idclient."]", $aPerms), $item['name']." (". $idclient . ")")."
    "; + } +} + +if ($sClientCheckboxes != '' && !in_array('sysadmin', $aPerms)) { + $tpl->set('d', 'CATNAME', i18n("Access clients")); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', 'CATFIELD', $sClientCheckboxes); + $tpl->next(); +} + +// languages perms +$aClientsLanguages = getAllClientsAndLanguages(); +$sClientCheckboxes = ''; +foreach ($aClientsLanguages as $item) { + if (($perm->have_perm_client("lang[".$item['idlang']."]") || $perm->have_perm_client("admin[".$item['idclient']."]")) && !in_array("admin[".$item['idclient']."]", $aPerms)) { + $sClientCheckboxes .= formGenerateCheckbox("mlang[".$item['idlang']."]", $item['idlang'], in_array("lang[".$item['idlang']."]", $aPerms), $item['langname']." (". $item['clientname'] .")")."
    "; + } +} + +if ($sClientCheckboxes != '' && !in_array('sysadmin', $aPerms)) { + $tpl->set('d', 'CATNAME', i18n("Access languages")); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', 'CATFIELD', $sClientCheckboxes); + $tpl->next(); +} + +// group properties +$aProperties = $oGroup->getGroupProperties(); +$sPropRows = ''; +foreach ($aProperties as $propertyId => $prop) { + $type = $prop['type']; + $name = $prop['name']; + $value = $prop['value']; + $sPropRows .= ' + + ' . $type . ' + ' . $name . ' + ' . $value . ' + + Eigenschaft l�schen + + '; +} + +$table = ' + + + + + + + + ' . $sPropRows . ' + + + + + + +
    '.i18n("Area/Type").''.i18n("Property").''.i18n("Value").' 
     
    '; + +$tpl->set('d', 'CATNAME', i18n("User-defined properties")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'CATFIELD', $table); +$tpl->next(); + +// Generate template +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['grouprights_overview']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.grouprights_subnav.php b/branches/conlite20/conlite/includes/include.grouprights_subnav.php new file mode 100644 index 0000000..bd53f19 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.grouprights_subnav.php @@ -0,0 +1,145 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-25 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.grouprights_subnav.php 22 2011-08-25 09:58:43Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if ( isset($_GET['groupid']) ) { + + $area = $_GET['area']; + + $nav = new Contenido_Navigation; + + + + $sql = "SELECT + idarea + FROM + ".$cfg["tab"]["area"]." AS a + WHERE + a.name = '".Contenido_Security::escapeDB($area, $db)."' OR + a.parent_id = '".Contenido_Security::escapeDB($area, $db)."' + ORDER BY + idarea"; + + $db->query($sql); + + $in_str = ""; + + while ( $db->next_record() ) { + $in_str .= $db->f('idarea') . ','; + } + + $len = strlen($in_str)-1; + $in_str = substr($in_str, 0, $len); + $in_str = '('.$in_str.')'; + + $sql = "SELECT + b.location AS location, + a.name AS name + FROM + ".$cfg["tab"]["area"]." AS a, + ".$cfg["tab"]["nav_sub"]." AS b + WHERE + b.idarea IN ".Contenido_Security::escapeDB($in_str, $db)." AND + b.idarea = a.idarea AND + b.level = 1 AND + b.online = 1 + ORDER BY + b.idnavs"; + + $db->query($sql); + + while ( $db->next_record() ) { + + /* Extract names from the XML document. */ + $caption = $nav->getName($db->f("location")); + $tmp_area = $db->f("name"); + + if ($perm->have_perm_area_action($tmp_area)) + { + # Set template data + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", ''.$caption.''); + $tpl->next(); + + } + } + + $_cecIterator = $_cecRegistry->getIterator("Contenido.Permissions.Group.Areas"); + + if ($_cecIterator->count() > 0) + { + while ($chainEntry = $_cecIterator->next()) + { + $aInfo = $chainEntry->execute(); + + foreach ($aInfo as $key => $sAreaID) + { + $sAreaName = false; + $_cecIterator2 = $_cecRegistry->getIterator("Contenido.Permissions.Group.GetAreaName"); + while ($chainEntry2 = $_cecIterator2->next()) + { + $aInfo2 = $chainEntry2->execute($sAreaID); + if ($aInfo2 !== false) + { + $sAreaName = $aInfo2; + break; + } + } + + if ($sAreaName !== false) + { + # Set template data + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", ''.$sAreaName.''); + $tpl->next(); + } + } + } + } + $tpl->set('s', 'COLSPAN', ($tpl->dyn_cnt * 2) + 2); + + # Generate the third + # navigation layer + $tpl->generate($cfg["path"]["templates"] . $cfg["templates"]["subnav"]); + +} else { + include ($cfg["path"]["contenido"].$cfg["path"]["templates"] . $cfg["templates"]["right_top_blank"]); +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.html_tpl_edit_form.php b/branches/conlite20/conlite/includes/include.html_tpl_edit_form.php new file mode 100644 index 0000000..8bf3782 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.html_tpl_edit_form.php @@ -0,0 +1,228 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2004-07-14 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-08-14, Timo Trautmann, Bilal Arslan - Functions for versionning and storing file meta data added + * + * $Id: include.html_tpl_edit_form.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("external", "edit_area/class.edit_area.php"); +cInclude("includes", "functions.file.php"); + +$sFileType = "html"; + +$sActionCreate = 'htmltpl_create'; +$sActionEdit = 'htmltpl_edit'; + +$page = new cPage; + +$tpl->reset(); + +if (!$perm->have_perm_area_action($area, $action)) +{ + $notification->displayNotification("error", i18n("Permission denied")); +} else if (!(int) $client > 0) { + #if there is no client selected, display empty page + $page->render(); +} else { + $path = $cfgClient[$client]["tpl"]["path"]; + $sTempFilename = stripslashes($_REQUEST['tmp_file']); + $sOrigFileName = $sTempFilename; + + if (getFileType($_REQUEST['file']) != $sFileType AND strlen(stripslashes(trim($_REQUEST['file']))) > 0) + { + $sFilename .= stripslashes($_REQUEST['file']).".$sFileType"; + } else + { + $sFilename .= stripslashes($_REQUEST['file']); + } + + if (stripslashes($_REQUEST['file'])) { + $sReloadScript = ""; + } else { + $sReloadScript = ""; + } + + // Content Type is template + $sTypeContent = "templates"; + $aFileInfo = getFileInformation ($client, $sTempFilename, $sTypeContent, $db); + + # create new file + if ( $_REQUEST['action'] == $sActionCreate AND $_REQUEST['status'] == 'send') + { + $sTempFilename = $sFilename; + createFile($sFilename, $path); + $bEdit = fileEdit($sFilename, $_REQUEST['code'], $path); + $sReloadScript .= ""; + updateFileInformation($client, $sFilename, 'templates', $auth->auth['uid'], $_REQUEST['description'], $db); + } + + # edit selected file + if ( $_REQUEST['action'] == $sActionEdit AND $_REQUEST['status'] == 'send') + { + if ($sFilename != $sTempFilename) + { + $sTempFilename = renameFile($sTempFilename, $sFilename, $path); + $sReloadScript .= ""; + } else + { + $sTempFilename = $sFilename; + } + + updateFileInformation($client, $sOrigFileName, 'templates', $auth->auth['uid'], $_REQUEST['description'], $db, $sFilename); + + /** + * START TRACK VERSION + **/ + $sTypeContent = "templates"; + + if((count($aFileInfo) == 0) || ((int)$aFileInfo["idsfi"] == 0)) { + $aFileInfo = getFileInformation ($client, $sTempFilename, $sTypeContent, $db); + $aFileInfo['description'] = ''; + } + + if((count($aFileInfo) > 0) && ($aFileInfo["idsfi"] !="")) { + $oVersion = new VersionFile($aFileInfo["idsfi"], $aFileInfo, $sFilename, $sTypeContent, $cfg, $cfgClient, $db, $client, $area, $frame, $sOrigFileName); + // Create new Layout Version in cms/version/css/ folder + $oVersion->createNewVersion(); + } + /** + * END TRACK VERSION + **/ + + $bEdit = fileEdit($sFilename, $_REQUEST['code'], $path); + + } + + # generate edit form + if (isset($_REQUEST['action'])) + { + $sAction = ($bEdit) ? $sActionEdit : $_REQUEST['action']; + + if ($_REQUEST['action'] == $sActionEdit) + { + $sCode = getFileContent($sFilename, $path); + } else + { + $sCode = stripslashes($_REQUEST['code']); # stripslashes is required here in case of creating a new file + } + + /* Try to validate html */ + if (getEffectiveSetting("layout", "htmlvalidator", "true") == "true" && $sCode !== "") + { + $v = new cHTMLValidator; + $v->validate($sCode); + $msg = ""; + + foreach ($v->missingNodes as $value) + { + $idqualifier = ""; + + $attr = array(); + + if ($value["name"] != "") + { + $attr["name"] = "name '".$value["name"]."'"; + } + + if ($value["id"] != "") + { + $attr["id"] = "id '".$value["id"]."'"; + } + + $idqualifier = implode(", ",$attr); + + if ($idqualifier != "") + { + $idqualifier = "($idqualifier)"; + } + $msg .= sprintf(i18n("Tag '%s' %s has no end tag (start tag is on line %s char %s)"), $value["tag"], $idqualifier, $value["line"],$value["char"]) . "
    "; + } + + if ($msg != "") + { + $notis = $notification->returnNotification("warning", $msg) . "
    "; + } + } + + $aFileInfo = getFileInformation($client, $sTempFilename, $sTypeContent, $db); + + $form = new UI_Table_Form("file_editor"); + $form->addHeader(i18n("Edit file")); + $form->setWidth("100%"); + $form->setVar("area", $area); + $form->setVar("action", $sAction); + $form->setVar("frame", $frame); + $form->setVar("status", 'send'); + $form->setVar("tmp_file", $sTempFilename); + + $tb_name = new cHTMLTextbox("file", $sFilename, 60); + $ta_code = new cHTMLTextarea("code", clHtmlSpecialChars($sCode), 100, 35, "code"); + $descr = new cHTMLTextarea("description", clHtmlSpecialChars($aFileInfo["description"]), 100, 5); + + $ta_code->setStyle("font-family: monospace;width: 100%;"); + $descr->setStyle("font-family: monospace;width: 100%;"); + $ta_code->updateAttributes(array("wrap" => getEffectiveSetting('html_editor', 'wrap', 'off'))); + + $form->add(i18n("Name"),$tb_name); + $form->add(i18n("Description"), $descr->render()); + $form->add(i18n("Code"),$ta_code); + + $page->setContent($notis . $form->render()); + + $oEditArea = new EditArea('code', 'html', substr(strtolower($belang), 0, 2), true, $cfg); + $page->addScript('editarea', $oEditArea->renderScript()); + + $page->addScript('reload', $sReloadScript); + $page->render(); + } + + +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.html_tpl_files_overview.php b/branches/conlite20/conlite/includes/include.html_tpl_files_overview.php new file mode 100644 index 0000000..a1ddca9 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.html_tpl_files_overview.php @@ -0,0 +1,162 @@ + + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2004-07-14 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.html_tpl_files_overview.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes", "functions.file.php"); + +$tpl->reset(); + +if (!(int) $client > 0) { + #if there is no client selected, display empty page + $oPage = new cPage; + $oPage->render(); + return; +} + +$path = $cfgClient[$client]["tpl"]["path"]; +$sFileType = "html"; + +$sSession = $sess->id; + +$sArea = 'htmltpl'; +$sActionDelete = 'htmltpl_delete'; +$sActionEdit = 'htmltpl_edit'; + +$sScriptTemplate = ' + + + +'; + +$tpl->set('s', 'JAVASCRIPT', $sScriptTemplate); + +# delete file +if ($action == $sActionDelete) +{ + if (!strrchr($_REQUEST['delfile'], "/")) + { + if (file_exists($path.$_REQUEST['delfile'])) + { + unlink($path.$_REQUEST['delfile']); + removeFileInformation($client, $_REQUEST['delfile'], 'templates', $db); + } + } + +} + +if ($handle = opendir($path)) +{ + + $aFiles = array(); + + while ($file = readdir($handle)) + { + if(substr($file, (strlen($file) - (strlen($sFileType) + 1)), (strlen($sFileType) + 1)) == ".$sFileType" AND is_readable($path.$file)) + { + $aFiles[] = $file; + }elseif (substr($file, (strlen($file) - (strlen($sFileType) + 1)), (strlen($sFileType) + 1)) == ".$sFileType" AND !is_readable($path.$file)) + { + $notification->displayNotification("error", $file." ".i18n("is not readable!")); + } + } + closedir($handle); + + // display files + if (is_array($aFiles)) + { + + sort($aFiles); + + foreach ($aFiles as $filename) + { + + $bgcolor = ( is_int($tpl->dyn_cnt / 2) ) ? $cfg["color"]["table_light"] : $cfg["color"]["table_dark"]; + $tpl->set('d', 'BGCOLOR', $bgcolor); + + $tmp_mstr = '%s'; + + $html_filename = sprintf($tmp_mstr, 'right_top', + $sess->url("main.php?area=$area&frame=3&file=$filename"), + 'right_bottom', + $sess->url("main.php?area=$area&frame=4&action=$sActionEdit&file=$filename&tmp_file=$filename"), + $filename, $filename, clHtmlSpecialChars($filename)); + + $tpl->set('d', 'FILENAME', $html_filename); + + $delTitle = i18n("Delete File"); + $delDescr = sprintf(i18n("Do you really want to delete the following file:

    %s
    "),$filename); + + if ($perm->have_perm_area_action('style', $sActionDelete)) + { + $tpl->set('d', 'DELETE', ''); + }else + { + $tpl->set('d', 'DELETE', ''); + } + + if (stripslashes($_REQUEST['file']) == $filename) { + $tpl->set('d', 'ID', 'id="marked"'); + } else { + $tpl->set('d', 'ID', ''); + } + + $tpl->next(); + + } + } +}else +{ + if ((int) $client > 0) { + $notification->displayNotification("error", i18n("Directory is not existing or readable!")."
    $path"); + } +} + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['files_overview']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.html_tpl_history.php b/branches/conlite20/conlite/includes/include.html_tpl_history.php new file mode 100644 index 0000000..52146bd --- /dev/null +++ b/branches/conlite20/conlite/includes/include.html_tpl_history.php @@ -0,0 +1,192 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release >= 5.0 + * + * {@internal + * created 2008-08-05 + * $Id: include.html_tpl_history.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +// For read Fileinformation an get the id of current File +cInclude("includes", "functions.file.php"); + +// For Editor syntax highlighting +cInclude("external", "edit_area/class.edit_area.php"); + +$sFileName = ""; +$sFileName = $_REQUEST['file']; +$bDeleteFile = false; + + +if($sFileName == ""){ + $sFileName = $_REQUEST['idhtml_tpl']; +} + +$sType = "templates"; +$sTypeContent = "templates"; + +$oPage = new cPage; +$oPage->addScript('messageBox', ''); +$oPage->addScript('messageBoxInit', ''); + + +if (!$perm->have_perm_area_action($area, 'htmltpl_history_manage')) +{ + $notification->displayNotification("error", i18n("Permission denied")); + $oPage->render(); +} else if (!(int) $client > 0) { + $oPage->render(); +} else if (getEffectiveSetting('versioning', 'activated', 'false') == 'false') { + $notification->displayNotification("warning", i18n("Versioning is not activated")); + $oPage->render(); +} else { + + + + $sTypeContent = "templates"; + + // Get File Informataion from DB + $aFileInfo = getFileInformation ($client, $sFileName , $sTypeContent, $db); + + // [action] => history_truncate delete all current history + if($_POST["action"] == "history_truncate") { + $oVersionHtmlTemp = new VersionFile($aFileInfo["idsfi"], $aFileInfo, $sFileName ,$sTypeContent, $cfg, $cfgClient, $db, $client, $area, $frame); + $bDeleteFile = $oVersionHtmlTemp->deleteFile(); + unset($oVersionHtmlTemp); + } + if ($_POST["html_tpl_send"] == true && $_POST["html_tpl_code"] !="" && $sFileName != "" && $aFileInfo["idsfi"]!="" ) { // save button + $oVersionHtmlTemp = new VersionFile($aFileInfo["idsfi"], $aFileInfo,$sFileName ,$sTypeContent, $cfg, $cfgClient, $db, $client, $area, $frame); + + // Get Post variables + $sHTMLCode = $_POST["html_tpl_code"]; + $sHTMLName = $_POST["html_tpl_name"]; + $sHTMLDesc = $_POST["html_tpl_desc"]; + + $sPath = $oVersionHtmlTemp->getPathFile(); + // Edit File + + // There is a need for renaming file + if($sFileName != $sHTMLName) { + if (getFileType($sHTMLName) != 'html' AND strlen(stripslashes(trim($sHTMLName))) > 0) { + $sHTMLName = stripslashes($sHTMLName).".html"; + } + + renameFile($sFileName, $sHTMLName, $oVersionHtmlTemp->getPathFile()); + $oPage->addScript("reload", $oVersionHtmlTemp->renderReloadScript('htmltpl', $sHTMLName, $sess)); + } + + if(fileEdit($sHTMLName, $sHTMLCode, $sPath)) { + // make new revision File + $oVersionHtmlTemp->createNewVersion(); + + // Update File Information + updateFileInformation($client, $sFileName, $sType, $aFileInfo, $sHTMLDesc, $db, $sHTMLName); + $sFileName = $sHTMLName; + } + + unset($oVersionHtmlTemp); + } + + if($sFileName != "" && $aFileInfo["idsfi"]!="" && $_POST["action"] != "history_truncate" ) { + $oVersionHtmlTemp= new VersionFile($aFileInfo["idsfi"],$aFileInfo["description"] ,$sFileName, $sTypeContent, $cfg, $cfgClient, $db, $client, $area, $frame); + + // Init Form variables of SelectBox + $sSelectBox = ""; + $oVersionHtmlTemp->setVarForm("area", $area); + $oVersionHtmlTemp->setVarForm("frame", $frame); + $oVersionHtmlTemp->setVarForm("idhtml_tpl", $sFileName); + $oVersionHtmlTemp->setVarForm("file", $sFileName); + + // create and output the select box, for params please look class.version.php + $sSelectBox = $oVersionHtmlTemp->buildSelectBox("html_tpl_history", "HTML Template History", "Show History Entry", "idhtml_tpl_history"); + + // Generate Form + $oForm = new UI_Table_Form("jscript_display"); + $oForm->addHeader(i18n("Edit JScript")); + $oForm ->setWidth("100%"); + $oForm->setVar("area", $area); + $oForm->setVar("frame", $frame); + $oForm->setVar("idhtml_tpl", $sFileName); + $oForm->setVar("html_tpl_send", 1); + + + // if send form refresh button + if ($_POST["idhtml_tpl_history"] != "") { + $sRevision = $_POST["idhtml_tpl_history"]; + } else { + $sRevision = $oVersionHtmlTemp->getLastRevision(); + } + + if ($sRevision != '') { + $sPath = $oVersionHtmlTemp->getFilePath() . $sRevision; + + // Read XML Nodes and get an array + $aNodes = array(); + $aNodes = $oVersionHtmlTemp->initXmlReader($sPath); + + // Create Textarea and fill it with xml nodes + if (count($aNodes) > 1) { + // if choose xml file read value an set it + $sName = $oVersionHtmlTemp->getTextBox("html_tpl_name", $aNodes["name"], 60); + $sDescription = $oVersionHtmlTemp->getTextarea("html_tpl_desc", $aNodes["desc"], 100, 10); + $sCode = $oVersionHtmlTemp->getTextarea("html_tpl_code", $aNodes["code"], 100, 30, "IdLaycode"); + + } + + } + + // Add new Elements of Form + $oForm->add(i18n("Name"), $sName); + $oForm->add(i18n("Description"), $sDescription); + $oForm->add(i18n("Code"), $sCode); + $oForm->setActionButton("apply", "images/but_ok.gif", i18n("Copy to current"), "c"/*, "mod_history_takeover"*/); //modified it + $oForm->unsetActionButton("submit"); + + // Render and handle History Area + $oPage->setEncoding("utf-8"); + + $oEditAreaOutput = new EditArea('IdLaycode', 'php', substr(strtolower($belang), 0, 2), true, $cfg, !$bInUse); + $oPage->addScript('IdLaycode', $oEditAreaOutput->renderScript()); + + if($sSelectBox !="") { + $oPage->setContent($sSelectBox . $oForm->render()); + + } else { + $notification->displayNotification("warning", i18n("No template history available")); + } + $oPage->render(); + + } else { + if($bDeleteFile){ + $notification->displayNotification("warning", i18n("Version history was cleared")); + } else { + $notification->displayNotification("warning", i18n("No template history available")); + } + + } +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.html_tpl_left_top.php b/branches/conlite20/conlite/includes/include.html_tpl_left_top.php new file mode 100644 index 0000000..26a7bb6 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.html_tpl_left_top.php @@ -0,0 +1,58 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-12-10 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.html_tpl_left_top.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->set('s', 'ID', 'oTplSel'); +$tpl->set('s', 'CLASS', 'text_medium'); +$tpl->set('s', 'OPTIONS', ''); +$tpl->set('s', 'CAPTION', ''); +$tpl->set('s', 'SESSID', $sess->id); + + +$tpl->set('s', 'ACTION', $select); + +$tmp_mstr = '%s'; +$area = "htmltpl"; +$mstr = sprintf($tmp_mstr, 'right_top', + $sess->url("main.php?area=htmltpl&frame=3"), + 'right_bottom', + $sess->url("main.php?area=htmltpl&frame=4&action=htmltpl_create"), + i18n("Create module template")); +if ((int) $client > 0) { + $tpl->set('s', 'NEWSTYLE', $mstr); +} else { + $tpl->set('s', 'NEWSTYLE', i18n('No Client selected')); +} + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['html_tpl_left_top']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.info.php b/branches/conlite20/conlite/includes/include.info.php new file mode 100644 index 0000000..80960fe --- /dev/null +++ b/branches/conlite20/conlite/includes/include.info.php @@ -0,0 +1,44 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-08 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.info.php 198 2012-12-19 14:46:01Z Mansveld $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +# Generate template +$tpl->reset(); + +$message = sprintf(i18n("You can find a lot of information and a community forum on the ConLite Portal")); + +$tpl->set('s', 'VERSION', $cfg['version']); +$tpl->set('s', 'PORTAL', $message); +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['info']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.js_edit_form.php b/branches/conlite20/conlite/includes/include.js_edit_form.php new file mode 100644 index 0000000..9572c6a --- /dev/null +++ b/branches/conlite20/conlite/includes/include.js_edit_form.php @@ -0,0 +1,190 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2004-07-14 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-08-14, Timo Trautmann, Bilal Arslan - Functions for versionning and storing file meta data added + * + * $Id: include.js_edit_form.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude("external", "edit_area/class.edit_area.php"); + +$sFileType = "js"; + +$sActionCreate = 'js_create'; +$sActionEdit = 'js_edit'; + +$page = new cPage; + +$tpl->reset(); + +if (!$perm->have_perm_area_action($area, $action)) +{ + $notification->displayNotification("error", i18n("Permission denied")); +} else if (!(int) $client > 0) { + #if there is no client selected, display empty page + $page->render(); +} else { + $path = $cfgClient[$client]["js"]["path"]; + $sTempFilename = stripslashes($_REQUEST['tmp_file']); + $sOrigFileName = $sTempFilename; + + if (getFileType($_REQUEST['file']) != $sFileType AND strlen(stripslashes(trim($_REQUEST['file']))) > 0) + { + $sFilename .= stripslashes($_REQUEST['file']).".$sFileType"; + }else + { + $sFilename .= stripslashes($_REQUEST['file']); + } + + if (stripslashes($_REQUEST['file'])) { + $sReloadScript = ""; + } else { + $sReloadScript = ""; + } + + // Content Type is template + $sTypeContent = "js"; + $aFileInfo = getFileInformation ($client, $sTempFilename, $sTypeContent, $db); + + # create new file + if ( $_REQUEST['action'] == $sActionCreate AND $_REQUEST['status'] == 'send') + { + $sTempFilename = $sFilename; + createFile($sFilename, $path); + $bEdit = fileEdit($sFilename, $_REQUEST['code'], $path); + updateFileInformation($client, $sFilename, 'js', $auth->auth['uid'], $_REQUEST['description'], $db); + $sReloadScript .= ""; + } + + # edit selected file + if ( $_REQUEST['action'] == $sActionEdit AND $_REQUEST['status'] == 'send') + { + if ($sFilename != $sTempFilename) + { + $sTempFilename = renameFile($sTempFilename, $sFilename, $path); + $sReloadScript .= ""; + }else + { + $sTempFilename = $sFilename; + } + + updateFileInformation($client, $sOrigFileName, 'js', $auth->auth['uid'], $_REQUEST['description'], $db, $sFilename); + + /** + * START TRACK VERSION + **/ + if((count($aFileInfo) == 0) || ((int)$aFileInfo["idsfi"] == 0)) { + $aFileInfo = getFileInformation ($client, $sTempFilename, $sTypeContent, $db); + $aFileInfo['description'] = ''; + } + + if(count($aFileInfo) > 0 && $aFileInfo["idsfi"] !="") { + $oVersion = new VersionFile($aFileInfo["idsfi"], $aFileInfo, $sFilename, $sTypeContent, $cfg, $cfgClient, $db, $client, $area, $frame, $sOrigFileName); + // Create new Jscript Version in cms/version/js/ folder + $oVersion->createNewVersion(); + } + + /** + * END TRACK VERSION + **/ + + $bEdit = fileEdit($sFilename, $_REQUEST['code'], $path); + + } + + # generate edit form + if (isset($_REQUEST['action'])) + { + $aFileInfo = getFileInformation($client, $sFilename, $sTypeContent, $db); + + $sAction = ($bEdit) ? $sActionEdit : $_REQUEST['action']; + + if ($_REQUEST['action'] == $sActionEdit) + { + $sCode = getFileContent($sFilename, $path); + }else + { + $sCode = stripslashes($_REQUEST['code']); # stripslashes is required here in case of creating a new file + } + + $form = new UI_Table_Form("file_editor"); + $form->addHeader(i18n("Edit file")); + $form->setWidth("100%"); + $form->setVar("area", $area); + $form->setVar("action", $sAction); + $form->setVar("frame", $frame); + $form->setVar("status", 'send'); + $form->setVar("tmp_file", $sTempFilename); + + $tb_name = new cHTMLTextbox("file", $sFilename, 60); + $ta_code = new cHTMLTextarea("code", clHtmlSpecialChars($sCode), 100, 35, "code"); + $descr = new cHTMLTextarea("description", clHtmlSpecialChars($aFileInfo["description"]), 100, 5); + + $ta_code->setStyle("font-family: monospace;width: 100%;"); + $descr->setStyle("font-family: monospace;width: 100%;"); + $ta_code->updateAttributes(array("wrap" => getEffectiveSetting('script_editor', 'wrap', 'off'))); + + $form->add(i18n("Name"),$tb_name); + $form->add(i18n("Description"), $descr->render()); + $form->add(i18n("Code"),$ta_code); + + $page->setContent($form->render()); + + $oEditArea = new EditArea('code', 'js', substr(strtolower($belang), 0, 2), true, $cfg); + $page->addScript('editarea', $oEditArea->renderScript()); + + $page->addScript('reload', $sReloadScript); + $page->render(); + + } +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.js_files_overview.php b/branches/conlite20/conlite/includes/include.js_files_overview.php new file mode 100644 index 0000000..48d7b37 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.js_files_overview.php @@ -0,0 +1,161 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-20 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.js_files_overview.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes", "functions.file.php"); + +$tpl->reset(); + +if (!(int) $client > 0) { + #if there is no client selected, display empty page + $oPage = new cPage; + $oPage->render(); + return; +} + +$path = $cfgClient[$client]["js"]["path"]; +$sFileType = "js"; + +$sSession = $sess->id; + +$sArea = 'js'; +$sActionDelete = 'js_delete'; +$sActionEdit = 'js_edit'; + +$sScriptTemplate = ' + + + +'; + +$tpl->set('s', 'JAVASCRIPT', $sScriptTemplate); + +# delete file +if ($action == $sActionDelete) +{ + if (!strrchr($_REQUEST['delfile'], "/")) + { + if (file_exists($path.$_REQUEST['delfile'])) + { + unlink($path.$_REQUEST['delfile']); + removeFileInformation($client, $_REQUEST['delfile'], 'js', $db); + } + } + +} + +if ($handle = opendir($path)) +{ + + $aFiles = array(); + + while ($file = readdir($handle)) + { + if(substr($file, (strlen($file) - (strlen($sFileType) + 1)), (strlen($sFileType) + 1)) == ".$sFileType" AND is_readable($path.$file)) + { + $aFiles[] = $file; + }elseif (substr($file, (strlen($file) - (strlen($sFileType) + 1)), (strlen($sFileType) + 1)) == ".$sFileType" AND !is_readable($path.$file)) + { + $notification->displayNotification("error", $file." ".i18n("is not readable!")); + } + } + closedir($handle); + + // display files + if (is_array($aFiles)) + { + + sort($aFiles); + + foreach ($aFiles as $filename) + { + + $bgcolor = ( is_int($tpl->dyn_cnt / 2) ) ? $cfg["color"]["table_light"] : $cfg["color"]["table_dark"]; + $tpl->set('d', 'BGCOLOR', $bgcolor); + + $tmp_mstr = '%s'; + + $html_filename = sprintf($tmp_mstr, 'right_top', + $sess->url("main.php?area=$area&frame=3&file=$filename"), + 'right_bottom', + $sess->url("main.php?area=$area&frame=4&action=$sActionEdit&file=$filename&tmp_file=$filename"), + $filename, $filename, clHtmlSpecialChars($filename)); + + $tpl->set('d', 'FILENAME', $html_filename); + + $delTitle = i18n("Delete File"); + $delDescr = sprintf(i18n("Do you really want to delete the following file:

    %s
    "),$filename); + + if ($perm->have_perm_area_action('style', $sActionDelete)) + { + $tpl->set('d', 'DELETE', ''); + }else + { + $tpl->set('d', 'DELETE', ''); + } + + if (stripslashes($_REQUEST['file']) == $filename) { + $tpl->set('d', 'ID', 'id="marked"'); + } else { + $tpl->set('d', 'ID', ''); + } + + $tpl->next(); + + } + } +}else +{ + if ((int) $client > 0) { + $notification->displayNotification("error", i18n("Directory is not existing or readable!")."
    $path"); + } +} + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['files_overview']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.js_history.php b/branches/conlite20/conlite/includes/include.js_history.php new file mode 100644 index 0000000..3789011 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.js_history.php @@ -0,0 +1,183 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release >= 5.0 + * + * {@internal + * created 2008-08-05 + * $Id: include.js_history.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +// For read Fileinformation an get the id of current File +cInclude("includes", "functions.file.php"); + +// For Editor syntax highlighting +cInclude("external", "edit_area/class.edit_area.php"); + +$sFileName = ""; +$sFileName = $_REQUEST['file']; + +$sType = "js"; + +if($sFileName == ""){ + $sFileName = $_REQUEST['idjscript']; +} + +$oPage = new cPage; +$oPage->addScript('messageBox', ''); +$oPage->addScript('messageBoxInit', ''); + +if (!$perm->have_perm_area_action($area, 'js_history_manage')) +{ + $notification->displayNotification("error", i18n("Permission denied")); + $oPage->render(); +} else if (!(int) $client > 0) { + $oPage->render(); +} else if (getEffectiveSetting('versioning', 'activated', 'false') == 'false') { + $notification->displayNotification("warning", i18n("Versioning is not activated")); + $oPage->render(); +} else { + + // Content Type is css + $sTypeContent = "js"; + + $aFileInfo = getFileInformation ($client, $sFileName , $sTypeContent, $db); + + // [action] => history_truncate delete all current history + if($_POST["action"] == "history_truncate") { + $oVersionJScript = new VersionFile($aFileInfo["idsfi"], $aFileInfo, $sFileName ,$sTypeContent, $cfg, $cfgClient, $db, $client, $area, $frame); + $bDeleteFile = $oVersionJScript->deleteFile(); + unset($oVersionJScript); + } + + if ($_POST["jscript_send"] == true && $_POST["jscriptcode"] !="" && $sFileName != "" && $aFileInfo["idsfi"]!="") { // save button + $oVersionJScript = new VersionFile($aFileInfo["idsfi"], $aFileInfo, $sFileName, $sTypeContent, $cfg, $cfgClient, $db, $client, $area, $frame); + + // Get Post variables + $sJScriptCode = $_POST["jscriptcode"]; + $sJScriptName = $_POST["jscriptname"]; + $sJScriptDesc = $_POST["jscriptdesc"]; + + // Edit File + $sPath = $oVersionJScript->getPathFile(); + + // There is a need for renaming file + if($sFileName != $sJScriptName){ + if (getFileType($sJScriptName) != 'js' AND strlen(stripslashes(trim($sJScriptName))) > 0) { + $sJScriptName = stripslashes($sJScriptName).".js"; + } + + renameFile($sFileName, $sJScriptName, $oVersionJScript->getPathFile()); + $oPage->addScript("reload", $oVersionJScript->renderReloadScript('js', $sJScriptName, $sess)); + } + + if(fileEdit($sJScriptName, $sJScriptCode, $sPath)) { + // make new revision File + $oVersionJScript->createNewVersion(); + + // Update File Information + updateFileInformation($client, $sFileName, $sType, $aFileInfo["author"], $sJScriptDesc, $db, $sJScriptName); + $sFileName = $sJScriptName; + } + + unset($oVersionJScript); + } + + if($sFileName != "" && $aFileInfo["idsfi"]!="" && $_POST["action"] != "history_truncate") { + $oVersionJScript = new VersionFile($aFileInfo["idsfi"], $aFileInfo,$sFileName, $sTypeContent, $cfg, $cfgClient, $db, $client, $area, $frame); + + + // Init Form variables of SelectBox + $sSelectBox = ""; + $oVersionJScript->setVarForm("area", $area); + $oVersionJScript->setVarForm("frame", $frame); + $oVersionJScript->setVarForm("idjscript", $sFileName); + $oVersionJScript->setVarForm("file", $sFileName); + + // create and output the select box, for params please look class.version.php + $sSelectBox = $oVersionJScript->buildSelectBox("jscript_history", "JScript History", "Show History Entry", "idjscripthistory"); + + // Generate Form + $oForm = new UI_Table_Form("jscript_display"); + $oForm->addHeader(i18n("Edit JScript")); + $oForm ->setWidth("100%"); + $oForm->setVar("area", $area); + $oForm->setVar("frame", $frame); + $oForm->setVar("idjscript", $sFileName); + $oForm->setVar("jscript_send", 1); + + + // if send form refresh button + if ($_POST["idjscripthistory"] != "") { + $sRevision = $_POST["idjscripthistory"]; + } else { + $sRevision = $oVersionJScript->getLastRevision(); + } + + if ($sRevision != '') { + $sPath = $oVersionJScript->getFilePath() . $sRevision; + + // Read XML Nodes and get an array + $aNodes = array(); + $aNodes = $oVersionJScript->initXmlReader($sPath); + + if (count($aNodes) > 1) { + $sName = $oVersionJScript->getTextBox("jscriptname", $aNodes["name"], 60); + $sDescription = $oVersionJScript->getTextarea("jscriptdesc", $aNodes["desc"], 100, 10); + $sCode = $oVersionJScript->getTextarea("jscriptcode", $aNodes["code"], 100, 30, "IdLaycode"); + } + } + + // Add new Elements of Form + $oForm->add(i18n("Name"), $sName); + $oForm->add(i18n("Description"), $sDescription); + $oForm->add(i18n("Code"), $sCode); + $oForm->setActionButton("apply", "images/but_ok.gif", i18n("Copy to current"), "c"/*, "mod_history_takeover"*/); //modified it + $oForm->unsetActionButton("submit"); + + // Render and handle History Area + $oPage->setEncoding("utf-8"); + + $oEditAreaOutput = new EditArea('IdLaycode', 'js', substr(strtolower($belang), 0, 2), true, $cfg, !$bInUse); + $oPage->addScript('IdLaycode', $oEditAreaOutput->renderScript()); + + if($sSelectBox !="") { + $oPage->setContent($sSelectBox . $oForm->render()); + + } else { + $notification->displayNotification("warning", i18n("No jscript history available")); + } + $oPage->render(); + + } else { + if($bDeleteFile) { + $notification->displayNotification("warning", i18n("Version history was cleared")); + } else { + $notification->displayNotification("warning", i18n("No style history available")); + } + } +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.js_left_top.php b/branches/conlite20/conlite/includes/include.js_left_top.php new file mode 100644 index 0000000..5fb5d57 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.js_left_top.php @@ -0,0 +1,57 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-09 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.js_left_top.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->set('s', 'ID', 'oTplSel'); +$tpl->set('s', 'CLASS', 'text_medium'); +$tpl->set('s', 'OPTIONS', ''); +$tpl->set('s', 'CAPTION', ''); +$tpl->set('s', 'SESSID', $sess->id); + + +$tpl->set('s', 'ACTION', $select); + +$tmp_mstr = '%s'; +$area = "style"; +$mstr = sprintf($tmp_mstr, 'right_top', + $sess->url("main.php?area=js&frame=3"), + 'right_bottom', + $sess->url("main.php?area=js&frame=4&action=js_create"), + i18n("Create script")); +if ((int) $client > 0) { + $tpl->set('s', 'NEWSCRIPT', $mstr); +} else { + $tpl->set('s', 'NEWSCRIPT', i18n('No Client selected')); +} +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['js_left_top']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.lang_edit.php b/branches/conlite20/conlite/includes/include.lang_edit.php new file mode 100644 index 0000000..e43000e --- /dev/null +++ b/branches/conlite20/conlite/includes/include.lang_edit.php @@ -0,0 +1,274 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-30 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2009-05-25, Oliver Lohkemper, add iso-639-2- & iso-3166-selecter + * + * $Id: include.lang_edit.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +includePlugins("languages"); + +$clang = new cApiLanguage($idlang); + +#Script for refreshing Language Box in Header +$newOption = ''; + +$db2 = new DB_ConLite; + +$sReload = ''; + +if ($action == "lang_newlanguage" || $action == "lang_deletelanguage") +{ + $page = new UI_Page; + + if ($action == "lang_deletelanguage") + { + // finally delete from dropdown in header + $newOption = ''; + } + + if ($action == "lang_newlanguage") { + // update language dropdown in header + $new_idlang = 0; + $db->query( 'SELECT max(idlang) as newlang FROM '.$cfg["tab"]["lang"].';' ); + if ($db->next_record()) { + $new_idlang = $db->f('newlang'); + } + + $newOption = ''; + $idlang = $new_idlang; + } + + if ($targetclient == $client) { + $page->addScript('refreshHeader', $newOption); + } + $page->addScript('reload', $sReload); + $page->render(); +} else +{ + if ($action == "lang_edit") + { + callPluginStore("languages"); + + $language = new cApiLanguage($idlang); + + $language->setProperty("dateformat", "full", stripslashes($datetimeformat)); + $language->setProperty("dateformat", "date", stripslashes($dateformat)); + $language->setProperty("dateformat", "time", stripslashes($timeformat)); + + $language->setProperty("language", "code", stripslashes($languagecode) ); + $language->setProperty("country", "code", stripslashes($countrycode) ); + + // update dropdown in header + $newOption = ''; + } + + if(!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + + } else { + + if ( !isset($idlang) && $action != "lang_new") + { + $notification->displayNotification("error", "no language id given. Usually, this shouldn't happen, except if you played around with your system. if you didn't play around, please report a bug."); + + } else { + + if (($action == "lang_edit") && ($perm->have_perm_area_action($area, $action))) + { + langEditLanguage($idlang, $langname, $sencoding, $active, $direction); + $noti = $notification->returnNotification("info", i18n("Changes saved"))."
    "; + } + + + $tpl->reset(); + + $sql = "SELECT + A.idlang AS idlang, A.name AS name, A.active as active, A.encoding as encoding, A.direction as direction, + B.idclient AS idclient + FROM + ".$cfg["tab"]["lang"]." AS A, + ".$cfg["tab"]["clients_lang"]." AS B + WHERE + A.idlang = '".Contenido_Security::toInteger($idlang)."' AND + B.idlang = '".Contenido_Security::toInteger($idlang)."'"; + + $db->query($sql); + $db->next_record(); + + $form = new UI_Table_Form("lang_properties"); + $form->setVar("idlang", $idlang); + $form->setVar("targetclient", $db->f("idclient")); + $form->setVar("action", "lang_edit"); + $form->setVar("area", $area); + $form->setVar("frame", $frame); + + + $charsets = array(); + foreach ($cfg['AvailableCharsets'] as $charset) + { + $charsets[$charset] = $charset; + } + + if ($error) { + echo $error; + } + + + $iso_639_2_tags = array('aa' => 'Afar', 'ab' => 'Abkhazian', 'af' => 'Afrikaans', 'am' => 'Amharic', 'ar' => 'Arabic', 'as' => 'Assamese', 'ay' => 'Aymara', 'az' => 'Azerbaijani', 'ba' => 'Bashkir', 'be' => 'Byelorussian', 'bg' => 'Bulgarian', 'bh' => 'Bihari', 'bi' => 'Bislama', 'bn' => 'Bengali', + 'bo' => 'Tibetan', 'br' => 'Breton', 'ca' => 'Catalan', 'co' => 'Corsican', 'cs' => 'Czech', 'cy' => 'Welsh', 'da' => 'Danish', 'de' => 'German', 'dz' => 'Bhutani', 'el' => 'Greek', 'en' => 'English', 'eo' => 'Esperanto', 'es' => 'Spanish', 'et' => 'Estonian', 'eu' => 'Basque', 'fa' => 'Persian', + 'fi' => 'Finnish', 'fj' => 'Fiji', 'fo' => 'Faeroese', 'fr' => 'French', 'fy' => 'Frisian', 'ga' => 'Irish', 'gd' => 'Gaelic', 'gl' => 'Galician', 'gn' => 'Guarani', 'gu' => 'Gujarati', 'ha' => 'Hausa', 'hi' => 'Hindi', 'hr' => 'Croatian', 'hu' => 'Hungarian', 'hy' => 'Armenian', + 'ia' => 'Interlingua', 'ie' => 'Interlingue', 'ik' => 'Inupiak', 'in' => 'Indonesian', 'is' => 'Icelandic', 'it' => 'Italian', 'iw' => 'Hebrew', 'ja' => 'Japanese', 'ji' => 'Yiddish', 'jw' => 'Javanese', 'ka' => 'Georgian', 'kk' => 'Kazakh', 'kl' => 'Greenlandic', 'km' => 'Cambodian', + 'kn' => 'Kannada', 'ko' => 'Korean', 'ks' => 'Kashmiri', 'ku' => 'Kurdish', 'ky' => 'Kirghiz', 'la' => 'Latin', 'ln' => 'Lingala', 'lo' => 'Laothian', 'lt' => 'Lithuanian', 'lv' => 'Latvian', 'mg' => 'Malagasy', 'mi' => 'Maori', 'mk' => 'Macedonian', 'ml' => 'Malayalam', 'mn' => 'Mongolian', + 'mo' => 'Moldavian', 'mr' => 'Marathi', 'ms' => 'Malay', 'mt' => 'Maltese', 'my' => 'Burmese', 'na' => 'Nauru', 'ne' => 'Nepali', 'nl' => 'Dutch', 'no' => 'Norwegian', 'oc' => 'Occitan', 'om' => 'Oromo', 'or' => 'Oriya', 'pa' => 'Punjabi', 'pl' => 'Polish', 'ps' => 'Pashto', 'pt' => 'Portuguese', + 'qu' => 'Quechua', 'rm' => 'Rhaeto-Romance', 'rn' => 'Kirundi', 'ro' => 'Romanian', 'ru' => 'Russian', 'rw' => 'Kinyarwanda', 'sa' => 'Sanskrit', 'sd' => 'Sindhi', 'sg' => 'Sangro', 'sh' => 'Serbo-Croatian', 'si' => 'Singhalese', 'sk' => 'Slovak', 'sl' => 'Slovenian', 'sm' => 'Samoan', + 'sn' => 'Shona', 'so' => 'Somali', 'sq' => 'Albanian', 'sr' => 'Serbian', 'ss' => 'Siswati', 'st' => 'Sesotho', 'su' => 'Sudanese', 'sv' => 'Swedish', 'sw' => 'Swahili', 'ta' => 'Tamil', 'te' => 'Tegulu', 'tg' => 'Tajik', 'th' => 'Thai', 'ti' => 'Tigtinya', 'tk' => 'Turkmen', 'tl' => 'Tagalog', + 'tn' => 'Setswana', 'to' => 'Tonga', 'tr' => 'Turkish', 'ts' => 'Tsonga', 'tt' => 'Tatar', 'tw' => 'Twi', 'uk' => 'Ukrainian', 'ur' => 'Urdu', 'uz' => 'Uzbek', 'vi' => 'Vietnamese', 'vo' => 'Volapuk', 'wo' => 'Wolof', 'xh' => 'Xhosa', 'yo' => 'Yoruba', 'zh' => 'Chinese', 'zu' => 'Zulu' ); + + $iso_3166_codes = array('af' => 'Afghanistan', 'al' => 'Albania', 'dz' => 'Algeria', 'as' => 'American Samoa', 'ad' => 'Andorra', 'ao' => 'Angola', 'ai' => 'Anguilla', 'aq' => 'Antarctica', 'ag' => 'Antigua/Barbuda', 'ar' => 'Argentina', 'am' => 'Armenia', 'aw' => 'Aruba', 'au' => 'Australia', 'at' => 'Austria', + 'az' => 'Azerbaijan', 'bs' => 'Bahamas', 'bh' => 'Bahrain', 'bd' => 'Bangladesh', 'bb' => 'Barbados', 'by' => 'Belarus', 'be' => 'Belgium', 'bz' => 'Belize', 'bj' => 'Benin', 'bm' => 'Bermuda', 'bt' => 'Bhutan', 'bo' => 'Bolivia', 'ba' => 'Bosnia/Herzegowina', 'bw' => 'Botswana', + 'bv' => 'Bouvet Island', 'br' => 'Brazil', 'io' => 'British Indian Ocean Territory', 'bn' => 'Brunei Darussalam', 'bg' => 'Bulgaria', 'bf' => 'Burkina Faso', 'bi' => 'Burundi', 'kh' => 'Cambodia', 'cm' => 'Cameroon', 'ca' => 'Canada', 'cv' => 'Cape verde', 'ky' => 'Cayman Islands', + 'cf' => 'Central African Republic', 'td' => 'Chad', 'cl' => 'Chile', 'cn' => 'China', 'cx' => 'Christmas Island', 'cc' => 'Cocos -Keeling- Islands', 'co' => 'Colombia', 'km' => 'Comoros', 'cd' => 'Congo, Democratic Republic of/Zaire', 'cg' => 'Congo, Peoples Republic of', + 'ck' => 'Cook Islands', 'cr' => 'Costa Rica', 'ci' => 'Cote D\'ivoire', 'hr' => 'Croatia/Hrvatska', 'cu' => 'Cuba', 'cy' => 'Cyprus', 'cz' => 'Czech Republic', 'dk' => 'Denmark', 'dj' => 'Djibouti', 'dm' => 'Dominica', 'do' => 'Dominica Republic', 'tl' => 'East Timor', 'ec' => 'Ecuador', + 'eg' => 'Egypt', 'sv' => 'El Salvador', 'gq' => 'Equatorial Guinea', 'er' => 'Eritrea', 'ee' => 'Estonia', 'et' => 'Ethiopia', 'fk' => 'Falkland Islands/Malvinas', 'fo' => 'Faroe Islands', 'fj' => 'Fiji', 'fi' => 'Finland', 'fr' => 'France', 'fx' => 'France, Metropolitan', + 'gf' => 'French Guinea', 'pf' => 'French Polynesia', 'tf' => 'French Southern Territories', 'ga' => 'Gabon', 'gm' => 'Gambia', 'ge' => 'Georgia', 'de' => 'Germany', 'gh' => 'Ghana', 'gi' => 'Gibraltar', 'gr' => 'Greece', 'gl' => 'Greenland', 'gd' => 'Grenada', 'gp' => 'Guadeloupe', + 'gu' => 'Guam', 'gt' => 'Guatemala', 'gn' => 'Guinea', 'gw' => 'Guinea-Bissau', 'gy' => 'Guyana', 'ht' => 'Haiti', 'hm' => 'Heard and Mc Donald Islands', 'hn' => 'Honduras', 'hk' => 'Hong Kong', 'hu' => 'Hungary', 'is' => 'Iceland', 'in' => 'India', 'id' => 'Indonesia', + 'ir' => 'Iran, Islamic Republic of', 'iq' => 'Iraq', 'ie' => 'Ireland', 'il' => 'Israel', 'it' => 'Italy', 'jm' => 'Jamaica', 'jp' => 'Japan', 'jo' => 'Jordan', 'kz' => 'Kazakhstan', 'ke' => 'Kenya', 'ki' => 'Kiribati', 'kp' => 'Korea, Democratic Peoples Republic of', + 'kr' => 'Korea, Republic of', 'kw' => 'Kuwait', 'kg' => 'Kyrgyzstan', 'la' => 'Lao Peples Democratic Republic', 'lv' => 'Latvia', 'lb' => 'Lebanon', 'ls' => 'Lesotho', 'lr' => 'Liberia', 'ly' => 'Libyan Arab Jamahiriya', 'li' => 'Liechtenstein', 'lt' => 'Lithuania', 'lu' => 'Luxembourg', + 'mo' => 'Macau', 'mk' => 'Macedonia, The Former Yugoslav Republic Of', 'mg' => 'Madagascar', 'mw' => 'Malawi', 'my' => 'Malaysia', 'mv' => 'Maldives', 'ml' => 'Mali', 'mt' => 'Malta', 'mh' => 'Marshall Islands', 'mq' => 'Martinique', 'mr' => 'Mauritania', 'mu' => 'Mauritius', + 'yt' => 'Mayotte', 'mx' => 'Mexico', 'fm' => 'Micronesia, Federated States Of', 'md' => 'Moldova, Republic Of', 'mc' => 'Monaco', 'mn' => 'Mongolita', 'ms' => 'Montserrat', 'ma' => 'Morocco', 'mz' => 'Mozambique', 'mm' => 'Myanmar', 'na' => 'Nambia', 'nr' => 'Nauru', 'np' => 'Nepal', + 'nl' => 'Netherlands', 'an' => 'Netherlands Antilles', 'nc' => 'New Caledonia', 'nz' => 'New Zealand', 'ni' => 'Nicaragua', 'ne' => 'Niger', 'ng' => 'Nigeria', 'nu' => 'Niue', 'nf' => 'Norfolk Islands', 'mp' => 'Northern Mariana Islands', 'no' => 'Norway', 'om' => 'Oman', + 'pk' => 'Pakistan', 'pw' => 'Palau', 'ps' => 'Palestinian Territory, Occupied', 'pa' => 'Panama', 'pg' => 'Papua New Guinea', 'py' => 'Paraguay', 'pe' => 'Peru', 'ph' => 'Philippines', 'pn' => 'Pitcairn', 'pl' => 'Poland', 'pt' => 'Portugal', 'pr' => 'Puerto Rico', 'qa' => 'Qatar', + 're' => 'Reunion', 'ro' => 'Romania', 'ru' => 'Russian Federation', 'rw' => 'Rwanda', 'kn' => 'Saint Kitts/Nevis', 'lc' => 'Saint Lucia', 'vc' => 'Saint Vincent/Grenadines', 'ws' => 'Samoa', 'sm' => 'San Marino', 'st' => 'Sao Tome/Principe', 'sa' => 'Saudi Arabia', 'sn' => 'Senegal', + 'sc' => 'Seychelles', 'sl' => 'Sierra Leone', 'sg' => 'Singapore', 'sk' => 'Slovakia/Slovak Republic', 'si' => 'Slovenia', 'sb' => 'Solomon Islands', 'so' => 'Somalia', 'za' => 'South Africa', 'gs' => 'South Georgia/South Sandwich Islands', 'es' => 'Spain', 'lk' => 'Sri Lanka', + 'sh' => 'Santa Helena', 'pm' => 'Santa Pierre/Miquelon', 'sd' => 'Sudan', 'sr' => 'Suriname', 'sj' => 'Svalbard/Jan Mayen Islands', 'sz' => 'Swaziland', 'se' => 'Sweden', 'ch' => 'Switzerland', 'sy' => 'Syrian Arab Republic', 'tw' => 'Taiwan', 'tj' => 'Tajikistan', + 'tz' => 'Tanzania, United Republic Of', 'th' => 'Thailand', 'tg' => 'Togo', 'tk' => 'Tokelau', 'to' => 'Tonga', 'tt' => 'Trinidad/Tobago', 'tn' => 'Tunisia', 'tr' => 'Turkey', 'tm' => 'Turkmenistan', 'tc' => 'Turks/Caicos Islands', 'tv' => 'Tuvalu', 'ug' => 'Uganda', 'ua' => 'Ukraine', + 'ae' => 'United Arab Emirates', 'gb' => 'United Kingdom', 'us' => 'United States', 'um' => 'United States Minor Outlying Islands', 'uy' => 'Uruguay', 'uz' => 'Uzbekistan', 'vu' => 'Vanuatu', 'va' => 'Vatican City State -Holy See-', 've' => 'Venezuela', 'vn' => 'Viet Nam', + 'vg' => 'Virgin Islands, British', 'vi' => 'Virgin Islands, U.S.', 'wf' => 'Wallis/Futuna Islands', 'eh' => 'Western Sahara', 'ye' => 'Yemen', 'yu' => 'Yougoslavia', 'zm' => 'Zambia', 'zw' => 'Zimbabwe' ); + + + + $eselect = new cHTMLSelectElement("sencoding"); + $eselect->setStyle('width:255px'); + $eselect->autoFill($charsets); + $eselect->setDefault($db->f("encoding")); + + $languagecode = new cHTMLSelectElement("languagecode"); + $languagecode->setStyle('width:255px'); + $languagecode->autoFill($iso_639_2_tags); + $languagecode->setDefault($clang->getProperty("language", "code")); + + $countrycode = new cHTMLSelectElement("countrycode"); + $countrycode->setStyle('width:255px'); + $countrycode->autoFill($iso_3166_codes); + $countrycode->setDefault($clang->getProperty("country", "code")); + + $directionSelect = new cHTMLSelectElement("direction"); + $directionSelect->setStyle('width:255px'); + $directionSelect->autoFill(array("ltr" => i18n("Left to right"), "rtl" => i18n("Right to left"))); + $directionSelect->setDefault($db->f("direction")); + + + $fulldateformat = new cHTMLTextbox("datetimeformat", $clang->getProperty("dateformat", "full"), 40); + + $dateformat = new cHTMLTextbox("dateformat", $clang->getProperty("dateformat", "date"), 40); + + $timeformat = new cHTMLTextbox("timeformat", $clang->getProperty("dateformat", "time"), 40); + + + displayPlugin("languages", $form); + + + $form->addHeader(i18n("Edit language")); + + $form->add(i18n("Language name"), formGenerateField ("text", "langname", clHtmlSpecialChars($db->f("name")), 40, 255)); + $form->add(i18n("Active"), formGenerateCheckbox ("active", "1",$db->f("active"))); + + $form->addSubHeader(i18n("Language")); + $form->add(i18n("Encoding"), $eselect); + $form->add(i18n("Language"), $languagecode->render()); + $form->add(i18n("Country"), $countrycode->render()); + $form->add(i18n("Text direction"), $directionSelect); + + $form->addSubHeader(i18n("Time format")); + $form->add(i18n("Date/Time format"), $fulldateformat->render()); + $form->add(i18n("Date format"), $dateformat->render()); + $form->add(i18n("Time format"), $timeformat->render()); + + + $page = new UI_Page; + $page->setContent($noti.$form->render()); + + if ($targetclient == $client) { + $page->addScript('refreshHeader', $newOption); + } + + if ($_REQUEST['action'] != '') { + $page->addScript('reload', $sReload); + } + + $page->render(); + } + } +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.lang_left_top.php b/branches/conlite20/conlite/includes/include.lang_left_top.php new file mode 100644 index 0000000..070d6f5 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.lang_left_top.php @@ -0,0 +1,89 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-08 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.lang_left_top.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->set('s', 'CLASS', 'text_medium'); +$tpl->set('s', 'OPTIONS', ''); +$tpl->set('s', 'CAPTION', ''); +$tpl->set('s', 'SESSID', $sess->id); + +$tpl->set('s', 'ACTION', ''); +$tpl->set('s', 'SID', $sess->id); + +$clients = $classclient->getAccessibleClients(); + + +$tpl2 = new Template; +$tpl2->set('s', 'ID', 'editclient'); +$tpl2->set('s', 'NAME', 'editclient'); +$tpl2->set('s', 'CLASS', 'text_medium'); +$tpl2->set('s', 'OPTIONS', 'onchange="langChangeClient()"'); + +$iClientcount = count($clients); + +foreach ($clients as $key => $value) { + + if ($client == $key) + { + $selected = "selected"; + } else { + $selected = ""; + } + + if (strlen($value['name']) > 15) + { + $value['name'] = substr($value['name'],0,12). "..."; + } + + $tpl2->set('d', 'VALUE', $key); + $tpl2->set('d', 'CAPTION', $value['name']); + $tpl2->set('d', 'SELECTED', $selected); + $tpl2->next(); + +} + +$select = $tpl2->generate($cfg["path"]["templates"] . $cfg['templates']['generic_select'], true); + +$tpl->set('s', 'CLIENTSELECT', $select); + +if ($perm->have_perm_area_action($area, "lang_newlanguage") && $iClientcount > 0) { + $tpl->set('s', 'NEWLANG', ''.i18n("Create language").''); +} else if ($iClientcount == 0) { + $tpl->set('s', 'NEWLANG', i18n('No Client selected')); +} else { + $tpl->set('s', 'NEWLANG', ''); +} + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['lang_left_top']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.lang_overview.php b/branches/conlite20/conlite/includes/include.lang_overview.php new file mode 100644 index 0000000..cfd76e9 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.lang_overview.php @@ -0,0 +1,130 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-02 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.lang_overview.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$area="lang"; + +if (!isset($action)) $action = ""; + +if (!is_numeric($targetclient)) +{ + $targetclient = $client; +} + +$iGetIdlang = $idlang; + +$sql = "SELECT + * + FROM + ".$cfg["tab"]["lang"]." AS A, + ".$cfg["tab"]["clients_lang"]." AS B + WHERE + A.idlang=B.idlang AND + B.idclient='".Contenido_Security::toInteger($targetclient)."' + ORDER BY A.idlang"; + +$db->query($sql); + +$tpl->set('s','TARGETCLIENT',$targetclient); + +$iLangCount = 0; +while ($db->next_record()) { + $iLangCount++; + + $idlang = $db->f("idlang"); + + if ($db->f("active") == 0) { + //activate + $message = i18n("Activate language"); + $active = "url("main.php?area=$area&action=lang_activatelanguage&frame=$frame&targetclient=$targetclient&idlang=".$db->f("idlang"))."#clickedhere\">\"$message\""; + } else { + //deactivate + $message = i18n("Deactivate language"); + $active = "url("main.php?area=$area&action=lang_deactivatelanguage&frame=$frame&targetclient=$targetclient&idlang=".$db->f("idlang"))."#clickedhere\">\"$message\""; + } + + // Delete Button + $deleteMsg = sprintf(i18n("Do you really want to delete the language %s?"),clHtmlSpecialChars($db->f("name"))); + $deleteAct = i18n("Delete language"); + $deletebutton = ''.$deleteAct.''; + + $bgcolor = ( is_int($tpl->dyn_cnt / 2) ) ? $cfg["color"]["table_light"] : $cfg["color"]["table_dark"]; + + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'LANGUAGE', ''.$db->f("name").' ('.$idlang.')'); + $tpl->set('d', 'ACTIVATEBUTTON', $active); + $tpl->set('d', 'DELETEBUTTON', $deletebutton); + //$tpl->set('d', 'ICON', ''); + $tpl->set('d', 'ICON', ''); + + if ($iGetIdlang == $idlang) { + $tpl->set('d', 'MARKED', ' id="marked" '); + } else { + $tpl->set('d', 'MARKED', ''); + } + + $tpl->next(); +} + +$newlanguageform = ' + '.$sess->hidden_session(true).' + + +
    '.i18n("New language").': +     + +
    '; + +$tpl->set('s', 'NEWLANGUAGEFORM', $newlanguageform); +$tpl->set('s', 'SID', $sess->id); + +if ( $tmp_notification ) { + + $noti_html = ''.$tmp_notification.''; + $tpl->set('s', 'NOTIFICATION', $noti_html); + +} else { + + $tmp_notification = $notification->returnNotification("info", i18n("Language deleted")); + + $noti_html = ''.$tmp_notification.''; + $tpl->set('s', 'NOTIFICATION', ''); + +} + +$tpl->set('s', 'LANG_COUNT', $iLangCount); + +# Generate template +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['lang_overview']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.lay_edit_form.php b/branches/conlite20/conlite/includes/include.lay_edit_form.php new file mode 100644 index 0000000..e42b91a --- /dev/null +++ b/branches/conlite20/conlite/includes/include.lay_edit_form.php @@ -0,0 +1,236 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * $Id: include.lay_edit_form.php 312 2014-06-18 11:01:08Z oldperl $: + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude("external", "edit_area/class.edit_area.php"); + +if (!isset($idlay)) + $idlay = 0; + +$page = new cPage; +$layout = new cApiLayout(); + +if ($idlay != 0) { + $layout->loadByPrimaryKey($idlay); +} + +if ($action == "lay_new") { + if (!$perm->have_perm_area_action_anyitem($area, $action)) { + $notification->displayNotification("error", i18n("Permission denied")); + } else { + $layouts = new cApiLayoutCollection; + $layout = $layouts->create(i18n("-- New Layout --")); + } +} elseif ($action == "lay_delete") { + if (!$perm->have_perm_area_action_anyitem($area, $action)) { + $notification->displayNotification("error", i18n("Permission denied")); + } else { + $errno = layDeleteLayout($idlay); + $layout->virgin = true; + $sMsg = $notification->returnNotification("info", i18n("Layout deleted")); + } +} + +if ($refreshtemplates != "") { + /* Update all templates for containers with mode fixed and mandatory */ + $sql = "SELECT idtpl FROM " . $cfg["tab"]["tpl"] . " WHERE idlay = '" . Contenido_Security::toInteger($idlay) . "'"; + $db->query($sql); + + $fillTemplates = array(); + + while ($db->next_record()) { + $fillTemplates[] = $db->f("idtpl"); + } + + foreach ($fillTemplates as $fillTemplate) { + tplAutoFillModules($fillTemplate); + } +} + +if (!$layout->virgin) { + $msg = ""; + + $tpl->reset(); + + $idlay = $layout->get("idlay"); + $code = $layout->getLayout(); + $name = $layout->get("name"); + $description = $layout->get("description"); + + /* Search for duplicate containers */ + tplPreparseLayout($idlay); + $ret = tplBrowseLayoutForContainers($idlay); + + if (strlen($ret) != 0) { + $containers = explode("&", $ret); + + $types = array(); + + foreach ($containers as $value) { + if ($value != "") { + $container[$value] = 0; + + /* Search for old-style CMS_CONTAINER[x] */ + $container[$value] += substr_count($code, "CMS_CONTAINER[$value]"); + + /* Search for the new-style containers */ + $count = preg_match_all("/(.*)<\/container>/i", addslashes($code), $matches); + + $container[$value] += $count; + + if (is_array(tplGetContainerTypes($idlay, $value))) { + $types = array_merge($types, tplGetContainerTypes($idlay, $value)); + } + } + } + + $types = array_unique($types); + $layout->setProperty("layout", "used-types", implode($types, ";")); + + $msg = ""; + + foreach ($container as $key => $value) { + if ($value > 1) { + $msg .= sprintf(i18n("Container %s was defined %s times"), $key, $value) . "
    "; + } + } + } + + /* Try to validate html */ + if (getEffectiveSetting("layout", "htmlvalidator", "true") == "true" && $code !== "") { + $v = new cHTMLValidator; + $v->validate($code); + + if (!$v->tagExists("body") && !$v->tagExists("BODY")) { + $msg .= sprintf(i18n("The body tag does not exist in the layout. This is a requirement for the in-site editing.")); + $msg .= "
    "; + } + + if (!$v->tagExists("head") && !$v->tagExists("HEAD")) { + $msg .= sprintf(i18n("The head tag does not exist in the layout. This is a requirement for the in-site editing.")); + $msg .= "
    "; + } + + foreach ($v->missingNodes as $value) { + $idqualifier = ""; + + $attr = array(); + + if ($value["name"] != "") { + $attr["name"] = "name '" . $value["name"] . "'"; + } + + if ($value["id"] != "") { + $attr["id"] = "id '" . $value["id"] . "'"; + } + + $idqualifier = implode(", ", $attr); + + if ($idqualifier != "") { + $idqualifier = "($idqualifier)"; + } + $msg .= sprintf(i18n("Tag '%s' %s has no end tag (start tag is on line %s char %s)"), $value["tag"], $idqualifier, $value["line"], $value["char"]); + $msg .= "
    "; + } + } + + if ($msg != "") { + $notification->displayNotification("warning", $msg); + } + + $form = new UI_Table_Form("module"); + $form->addHeader(i18n("Edit Layout")); + $form->setWidth("100%"); + $form->setVar("area", $area); + $form->setVar("action", "lay_edit"); + $form->setVar("frame", $frame); + $form->setVar("idlay", $idlay); + + $tb_name = new cHTMLTextbox("layname", $name, 60); + $ta_description = new cHTMLTextarea("description", $description, 100, 10); + $ta_description->setStyle("font-family: monospace;width: 100%;"); + $ta_description->updateAttributes(array("wrap" => "off")); + + $ta_code = new cHTMLTextarea("code", clHtmlSpecialChars($code), 100, 20, 'code'); + $ta_code->setStyle("font-family: monospace;width: 100%;"); + $ta_code->updateAttributes(array("wrap" => "off")); + + $cb_refresh = new cHTMLCheckbox("refreshtemplates", i18n("On save, apply default modules to new containers")); + + $form->add(i18n("Name"), $tb_name); + $form->add(i18n("Description"), $ta_description); + $form->add(i18n("Code"), $ta_code); + $form->add(i18n("Options"), $cb_refresh); + + # Set static pointers + $tpl->set('s', 'ACTION', $sess->url("main.php?area=$area&frame=$frame&action=lay_edit")); + $tpl->set('s', 'IDLAY', $idlay); + $tpl->set('s', 'DESCR', $description); + $tpl->set('s', 'CLASS', 'code_sfullwidth'); + $tpl->set('s', 'NAME', clHtmlSpecialChars($name)); + + # Set dynamic pointers + $tpl->set('d', 'CAPTION', i18n("Code") . ':'); + $tpl->set('d', 'VALUE', clHtmlSpecialChars($code)); + $tpl->set('d', 'CLASS', 'code_fullwidth'); + $tpl->set('d', 'NAME', 'code'); + $tpl->next(); + + $oEditArea = new EditArea('code', 'html', substr(strtolower($belang), 0, 2), true, $cfg); + $page->addScript('editarea', $oEditArea->renderScript()); + + $sScript = ''; + + $page->setContent($form->render() . $sScript); + $page->setSubnav("idlay=$idlay", "lay"); +} else { + unset($idlay); + $page->setContent($sMsg); + $page->setSubnav(" ", "lay"); +} + +if (stripslashes($_REQUEST['idlay'])) { + $sReloadScript = ""; +} else { + $sReloadScript = ""; +} +$page->addScript('reload', $sReloadScript); +$page->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.lay_history.php b/branches/conlite20/conlite/includes/include.lay_history.php new file mode 100644 index 0000000..08cffb3 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.lay_history.php @@ -0,0 +1,146 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release >= 5.0 + * + * {@internal + * created 2008-08-1 + * $Id: include.lay_history.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +// For update current layout with Revision +cInclude("includes", "functions.lay.php"); + +// For Editor syntax highlighting +cInclude("external", "edit_area/class.edit_area.php"); + +$oPage = new cPage; +$oPage->addScript('messageBox', ''); +$oPage->addScript('messageBoxInit', ''); + +$bDeleteFile = false; + +if (!$perm->have_perm_area_action($area, 'lay_history_manage')) { + $notification->displayNotification("error", i18n("Permission denied")); + $oPage->render(); +} else if (!(int) $client > 0) { + $oPage->render(); +} else if (getEffectiveSetting('versioning', 'activated', 'false') == 'false') { + $notification->displayNotification("warning", i18n("Versioning is not activated")); + $oPage->render(); +} else { + if ($_POST["lay_send"] == true && $_POST["layname"]!="" && $_POST["laycode"] !="" && (int) $idlay > 0) { // save button + $oVersion = new VersionLayout($idlay, $cfg, $cfgClient, $db, $client, $area, $frame); + $sLayoutName = $_POST["layname"]; + $sLayoutCode = $_POST["laycode"]; + $sLayoutDescription = $_POST["laydesc"]; + + // save and mak new revision + $oPage->addScript('refresh', $oVersion->renderReloadScript('lay', $idlay, $sess)); + layEditLayout($idlay, $sLayoutName, $sLayoutDescription, $sLayoutCode); + unset($oVersion); + } + + // [action] => history_truncate delete all current modul history + if($_POST["action"] == "history_truncate") { + $oVersion = new VersionLayout($idlay, $cfg, $cfgClient, $db, $client, $area, $frame); + $bDeleteFile = $oVersion->deleteFile(); + unset($oVersion); + } + + // Init construct with contenido variables, in class.VersionLayout + $oVersion = new VersionLayout($idlay, $cfg, $cfgClient, $db, $client, $area, $frame); + + // Init Form variables of SelectBox + $sSelectBox = ""; + $oVersion->setVarForm("area", $area); + $oVersion->setVarForm("frame", $frame); + $oVersion->setVarForm("idlay", $idlay); + + // create and output the select box, for params please look class.version.php + $sSelectBox = $oVersion->buildSelectBox("mod_history", "Layout History", "Show History Entry", "idlayhistory"); + + // Generate Form + $oForm = new UI_Table_Form("lay_display"); + $oForm->addHeader(i18n("Edit Layout")); + $oForm ->setWidth("100%"); + $oForm->setVar("area", "lay_history"); + $oForm->setVar("frame", $frame); + $oForm->setVar("idlay", $idlay); + $oForm->setVar("lay_send", 1); + + // if send form refresh + if ($_POST["idlayhistory"] != "") { + $sRevision = $_POST["idlayhistory"]; + } else { + $sRevision = $oVersion->getLastRevision(); + } + + if ($sRevision != '' && $_POST["action"] != "history_truncate") { + // File Path + $sPath = $oVersion->getFilePath() . $sRevision; + + // Read XML Nodes and get an array + $aNodes = array(); + $aNodes = $oVersion->initXmlReader($sPath); + + // Create Textarea and fill it with xml nodes + if (count($aNodes) > 1) { + // if choose xml file read value an set it + $sName = $oVersion->getTextBox("layname", $aNodes["name"], 60); + $sDescription = $oVersion->getTextarea("laydesc", $aNodes["desc"], 100, 10); + $sCode = $oVersion->getTextarea("laycode", $aNodes["code"], 100, 30, "IdLaycode"); + + } + } + + // Add new Elements of Form + $oForm->add(i18n("Name"), $sName); + $oForm->add(i18n("Description"), $sDescription); + $oForm->add(i18n("Code"), $sCode); + $oForm->setActionButton("apply", "images/but_ok.gif", i18n("Copy to current"), "c"/*, "mod_history_takeover"*/); //modified it + $oForm->unsetActionButton("submit"); + + // Render and handle History Area + $oEditAreaOutput = new EditArea('IdLaycode', 'php', substr(strtolower($belang), 0, 2), true, $cfg, !$bInUse); + $oPage->addScript('IdLaycode', $oEditAreaOutput->renderScript()); + + if($sSelectBox !="") { + $oPage->setContent($sSelectBox . $oForm->render()); + + } else { + if($bDeleteFile){ + $notification->displayNotification("warning", i18n("Version history was cleared")); + } else { + $notification->displayNotification("warning", i18n("No layout history available")); + } + + } + $oPage->render(); + + +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.lay_new.php b/branches/conlite20/conlite/includes/include.lay_new.php new file mode 100644 index 0000000..8e35232 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.lay_new.php @@ -0,0 +1,44 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-03-27 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.lay_new.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->reset(); + +if ((int) $client > 0) { + $tpl->set('s', 'ACTION', ''); +} else { + $tpl->set('s', 'ACTION', i18n('No Client selected')); +} + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['left_top']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.lay_overview.php b/branches/conlite20/conlite/includes/include.lay_overview.php new file mode 100644 index 0000000..5b726f3 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.lay_overview.php @@ -0,0 +1,121 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-03-27 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-08-18, Munkh-Ulzii Balidar, add a functionality to show the used info + * + * $Id: include.lay_overview.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$oLayouts = new cApiLayoutCollection(); +$oLayouts->select("idclient = '$client'", '', 'name ASC'); + +$tpl->reset(); + +$tpl->set('s', 'SID', $sess->id); + +$darkrow = false; +while ($layout = $oLayouts->next()) { + + if (!$perm->have_perm_area_action_item('lay_edit', 'lay_edit', $layout->get('idlay'))) { + continue; + } + + $name = $layout->get('name'); + $descr = $layout->get('description'); + $idlay = $layout->get('idlay'); + + if (strlen($descr) > 64) { + $descr = substr($descr, 0, 64); + $descr .= ' ..'; + } + + $tmp_mstr = '%s'; + $area = 'lay'; + $mstr = sprintf($tmp_mstr, 'right_top', + $sess->url("main.php?area=$area&frame=3&idlay=$idlay"), + 'right_bottom', + $sess->url("main.php?area=lay_edit&frame=4&idlay=$idlay"), + $descr, $descr, $name); + + $tpl->set('d', 'NAME', $mstr); + + $inUse = $classlayout->layoutInUse($idlay); + + $bgColor = ($darkrow) ? $cfg['color']['table_dark'] : $cfg['color']['table_light']; + $darkrow = !$darkrow; + $tpl->set('d', 'BGCOLOR', $bgColor); + + if ((!$perm->have_perm_area_action_item('lay', 'lay_delete', $idlay)) && + (!$perm->have_perm_area_action('lay', 'lay_delete'))) { + $delDescr = i18n("No permission"); + } + + if ($inUse) { + $delDescr = i18n("Layout is in use, cannot delete"); + $inUseDescr = i18n("Click for more information about usage"); + $inUseLink = '' + . ''.$inUseDescr.''; + $tpl->set('d', 'INUSE', $inUseLink); + } else { + $tpl->set('d', 'INUSE', ''); + } + + if ($perm->have_perm_area_action_item('lay', 'lay_delete', $idlay) && !$inUse) { + $delTitle = i18n("Delete layout"); + $delDescr = sprintf(i18n("Do you really want to delete the following layout:

    %s
    "), clHtmlSpecialChars($name)); + $delLink = '' + . ''.$delTitle.''; + $tpl->set('d', 'DELETE', $delLink); + } else { + $tpl->set('d', 'DELETE',''.$delDescr.''); + } + + $todo = new TODOLink('idlay', $idlay, i18n("Layout") . ': ' . $name, ''); + + $tpl->set('d', 'TODO', $todo->render()); + + if (stripslashes($_REQUEST['idlay']) == $idlay) { + $tpl->set('d', 'ID', 'marked'); + } else { + $tpl->set('d', 'ID', ''); + } + + $tpl->next(); +} + +//datas for show of used info per ajax +$tpl->set('s', 'AREA', $area); +$tpl->set('s', 'SESSION', $contenido); +$tpl->set('s', 'AJAXURL', $cfg['path']['contenido_fullhtml'].'ajaxmain.php'); +$tpl->set('s', 'BOX_TITLE', i18n("The layout '%s' is used for following templates") . ":"); + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['lay_overview']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.lay_preview.php b/branches/conlite20/conlite/includes/include.lay_preview.php new file mode 100644 index 0000000..a0a5d74 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.lay_preview.php @@ -0,0 +1,39 @@ + + * @version $Rev: 312 $ + * @since 2.0 + * @link www.conlite.org ConLite Portal + * + * $Id: include.lay_preview.php 312 2014-06-18 11:01:08Z oldperl $ + */ +/** + * @copyright four for business AG + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$oLayout = new cApiLayout(Contenido_Security::toInteger($_GET['idlay'])); +if($oLayout->virgin) { + echo i18n("No such layout"); +} else { + $code = $oLayout->getLayout(); + /* Insert base href */ + $base = ''; + + $code = str_replace("", "\n".$base, $code); + + eval("?>\n".Contenido_Security::unescapeDB($code)."\n \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.left_top_blank.php b/branches/conlite20/conlite/includes/include.left_top_blank.php new file mode 100644 index 0000000..558c1f2 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.left_top_blank.php @@ -0,0 +1,37 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2002-01-21 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.left_top_blank.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->reset(); +$tpl->generate($cfg["path"]["templates"] . $cfg['templates']['left_top_blank']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.logs.php b/branches/conlite20/conlite/includes/include.logs.php new file mode 100644 index 0000000..3f975c4 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.logs.php @@ -0,0 +1,324 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-09 + * modified 2008-06-16, Holger Librenz, Hotfix: added check for invalid calls + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2009-10-15, Dominik Ziegler, fetching areaname from actions array to save a lot of database queries + * modified 2009-11-06, Murat Purc, replaced deprecated functions (PHP 5.3 ready) + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.logs.php 315 2014-06-26 06:13:38Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$clientclass = new Client; + +$db2 = new DB_ConLite; + +if(!$perm->have_perm_area_action($area)) +{ + $notification->displayNotification("error", i18n("Permission denied")); +} else { + + $tpl->reset(); + + $form = ' + '.$sess->hidden_session(true).' + + + '; + + + $tpl->set('s', 'FORM', $form); + $tpl->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('s', 'SELECTBGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('s', 'SELECTBBGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('s', 'HEADERBGCOLOR', $cfg["color"]["table_header"]); + $tpl->set('s', 'RHEADERBGCOLOR', $cfg["color"]["table_header"]); + $tpl->set('s', 'SUBMITTEXT', i18n("Submit query")); + $tpl->set('s', 'CANCELLINK', $sess->url("main.php?area=$area&frame=4")); + + + $userclass = new Users(); + $structureclass = new Structure(); + $artclass = new Art(); + $actionclass = new Action(); + + $clients = $clientclass->getAccessibleClients(); + $users = $userclass->getAccessibleUsers(explode(',', $auth->auth['perm'])); + $userselect = ""; + $actions = $actionclass->getAvailableActions(); + $actionselect = ""; + $clientList = $clientclass->getAccessibleClients(); + + foreach ($clientList as $key=>$value) { + if (strcmp($idqclient,$key) == 0) { + $selected = "SELECTED"; + } else { + $selected = ""; + } + + $clientselect .= ""; + } + + foreach ($users as $key=>$value) { + if (strcmp($idquser,$key) == 0) { + $selected = "SELECTED"; + } else { + $selected = ""; + } + + $userselect .= ""; + } + + foreach ($actions as $key=>$value) { + if (strcmp($idqaction,$key) == 0) { + $selected = "SELECTED"; + } else { + $selected = ""; + } + + // $areaname = $classarea->getAreaName($actionclass->getAreaForAction($value["name"])); + $areaname = $value["areaname"]; + $actionDescription = $lngAct[$areaname][$value["name"]]; + + if ($actionDescription == "") + { + $actionDescription = $value["name"]; + } + + $actionselect .= ""; + } + + $days = array(); + + for ($i = 1; $i < 32; $i ++) + { + $days[$i] = $i; + } + + $months = array(); + + for ($i = 1; $i < 13; $i++) + { + $months[$i] = $i; + } + + $years = array(); + for ($i = 2000; $i < 2020; $i++) + { + $years[$i] = $i; + } + + $fromday = new cHTMLSelectElement("fromday"); + $fromday->autoFill($days); + + if ($_REQUEST["fromday"] > 0) + { + $fromday->setDefault($_REQUEST["fromday"]); + } else { + $fromday->setDefault(date("j")); + } + $today = new cHTMLSelectElement("today"); + $today->autoFill($days); + + if ($_REQUEST["today"] > 0) + { + $today->setDefault($_REQUEST["today"]); + } else { + $today->setDefault(date("j")); + } + + $frommonth = new cHTMLSelectElement("frommonth"); + $frommonth->autoFill($months); + + if ($_REQUEST["frommonth"] > 0) + { + $frommonth->setDefault($_REQUEST["frommonth"]); + } else { + $frommonth->setDefault(date("n")); + } + + $tomonth = new cHTMLSelectElement("tomonth"); + $tomonth->autoFill($months); + + if ($_REQUEST["tomonth"] > 0) + { + $tomonth->setDefault($_REQUEST["tomonth"]); + } else { + $tomonth->setDefault(date("n")); + } + + $fromyear = new cHTMLSelectElement("fromyear"); + $fromyear->autoFill($years); + + if ($_REQUEST["fromyear"] > 0) + { + $fromyear->setDefault($_REQUEST["fromyear"]); + } else { + $fromyear->setDefault(date("Y")); + } + + $toyear = new cHTMLSelectElement("toyear"); + $toyear->autoFill($years); + + if ($_REQUEST["toyear"] > 0) + { + $toyear->setDefault($_REQUEST["toyear"]); + } else { + $toyear->setDefault(date("Y")); + } + + $entries = array(); + $entries[0] = i18n("Unlimited"); + $entries[10] = "10 ". i18n("Entries"); + $entries[20] = "20 ". i18n("Entries"); + $entries[30] = "30 ". i18n("Entries"); + $entries[50] = "50 ". i18n("Entries"); + $entries[100] = "100 ". i18n("Entries"); + + $olimit = new cHTMLSelectElement("limit"); + $olimit->autoFill($entries); + + if (isset($_REQUEST["limit"])) + { + $olimit->setDefault($_REQUEST["limit"]); + } else { + $olimit->setDefault(10); + } + + $tpl->set('s', 'USERS', $userselect); + $tpl->set('s', 'CLIENTS', $clientselect); + $tpl->set('s', 'ACTION', $actionselect); + $tpl->set('s', 'FROMDAY', $fromday->render()); + $tpl->set('s', 'FROMMONTH', $frommonth->render()); + $tpl->set('s', 'FROMYEAR', $fromyear->render()); + $tpl->set('s', 'TODAY', $today->render()); + $tpl->set('s', 'TOMONTH', $tomonth->render()); + $tpl->set('s', 'TOYEAR', $toyear->render()); + $tpl->set('s', 'LIMIT', $olimit->render()); + + $fromdate = $fromyear->getDefault()."-".$frommonth->getDefault()."-".$fromday->getDefault()." 00:00:00"; + $todate = $toyear->getDefault()."-".$tomonth->getDefault()."-".$today->getDefault()." 23:59:59"; + + if ($limit == 0) + { + $limitsql = ""; + } else { + $limitsql = "LIMIT ".Contenido_Security::escapeDB($limit, $db); + } + + if ($idquser == "%") + { + $users = $userclass->getAccessibleUsers(explode(',', $auth->auth['perm'])); + + foreach ($users as $key=>$value) { + $userarray[] = $key; + } + + $uservalues = implode('", "',$userarray); + $userquery = 'IN ("'.$uservalues.'")'; + } else { + $userquery = "LIKE '".$idquser."'"; + } + + $sql = 'SELECT + idlog, + user_id, + idaction, + idlang, + idclient, + idcatart, + logtimestamp + FROM + '. $cfg["tab"]["actionlog"] . ' + WHERE + user_id '.$userquery.' AND + idaction LIKE "'.Contenido_Security::escapeDB($idqaction, $db).'" AND + logtimestamp > "'.Contenido_Security::escapeDB($fromdate, $db).'" AND + logtimestamp < "'.Contenido_Security::escapeDB($todate, $db).'" AND + idclient LIKE "'.Contenido_Security::escapeDB($idqclient, $db).'" + ORDER BY logtimestamp DESC ' + . $limitsql; + + $db->query($sql); + + if ($db->affected_rows() == 0) + { + $noresults = ''. + ''.i18n("No results").''; + + } else { + $noresults = ""; + } + + $tpl->set('s', 'NORESULTS', $noresults); + + while ($db->next_record()) + { + + $darkrow = !$darkrow; + + if ($darkrow) + { + $bgcolor = $cfg["color"]["table_dark"]; + } else { + $bgcolor = $cfg["color"]["table_light"]; + } + + $structureName = $structureclass->getStructureName($structureclass->getStructureIDForCatArt($db->f("idcatart")),$db->f("idlang")); + $artName = $artclass->getArtName($artclass->getArtIDForCatArt($db->f("idcatart")),$db->f("idlang")); + + if ($structureName == "") { $structureName = "-"; } + if ($artName == "") { $artName = "-"; } + + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'RBGCOLOR', $bgcolor); + $tpl->set('d', 'RCLIENT', $clientList[$db->f("idclient")]["name"]); + $tpl->set('d', 'RDATETIME', $db->f("logtimestamp")); + $tpl->set('d', 'RUSER' , $users[$db->f("user_id")]["username"]); + $areaname = $classarea->getAreaName($actionclass->getAreaForAction($db->f("idaction"))); + $actionDescription = $lngAct[$areaname][$actionclass->getActionName($db->f("idaction"))]; + if ($actionDescription == "") + { + $actionDescription = $actionclass->getActionName($db->f("idaction")); + } + $tpl->set('d', 'RACTION', $actionDescription ); + $tpl->set('d', 'RSTR', $structureName); + $tpl->set('d', 'RPAGE', $artName); + + $tpl->next(); + + } + + # Generate template + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['log_main']); + +} +?> diff --git a/branches/conlite20/conlite/includes/include.mod_edit_form.php b/branches/conlite20/conlite/includes/include.mod_edit_form.php new file mode 100644 index 0000000..0d46b23 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.mod_edit_form.php @@ -0,0 +1,491 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-21 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2011-02-07, Dominik Ziegler, removed integration of not supported java module editor + * + * $Id: include.mod_edit_form.php 438 2016-05-17 17:31:24Z oldperl $: + * }} + * + */ +// security +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes", "functions.upl.php"); +cInclude("external", "edit_area/class.edit_area.php"); + +$noti = ""; +$sOptionDebugRows = getEffectiveSetting("modules", "show-debug-rows", "never"); + +if (!isset($idmod)) + $idmod = 0; + +if ($action == "mod_delete") { + $modules = new cApiModuleCollection; + $modules->delete($idmod); + unset($modules); + $idmod = 0; +} + +if (($action == "mod_new") && (!$perm->have_perm_area_action_anyitem($area, $action))) { + $notification->displayNotification("error", i18n("No permission")); +} else { + if ($action == "mod_new") { + $modules = new cApiModuleCollection; + $module = $modules->create(i18n("- Unnamed Module -")); + $module->set("description", implode("\n", array(i18n(""), "", i18n("Author: "), i18n("Version:")))); + $module->store(); + } else { + $module = new cApiModule; + $module->loadByPrimaryKey($idmod); + } + + if ($action == "mod_importexport_module") { + if ($mode == "export") { + $name = uplCreateFriendlyName($module->get("name")); + + if ($name != "") { + $module->export($name . ".xml"); + } + } + if ($mode == "import") { + if (file_exists($_FILES["upload"]["tmp_name"])) { + if (!$module->import($_FILES["upload"]["tmp_name"])) { + $noti .= sprintf(i18n("Error while importing XML file: %s"), $module->_error) . "
    "; + } else { + // Load the item again (clearing slashes from import) + $module->loadByPrimaryKey($module->get($module->primaryKey)); + } + } + } + } + + if ($action == "mod_folder_create") { + if ($module->createModuleFolder()) { + $notification->displayNotification("info", i18n("Module folder created")); + $module->loadByPrimaryKey($module->get($module->primaryKey)); + } else { + $notification->displayNotification("error", i18n("Error while creating module folder")); + } + } + + $idmod = $module->get("idmod"); + //var_dump($module); + + if (!$perm->have_perm_area_action_item("mod_edit", "mod_edit", $idmod)) { + $link = new cHTMLLink; + $link->setCLink("mod_translate", 4, ""); + $link->setCustom("idmod", $idmod); + + header("Location: " . $link->getHREF()); + } else { + $oInUse = new InUseCollection; + list($bInUse, $message) = $oInUse->checkAndMark("idmod", $idmod, true, i18n("Module is in use by %s (%s)"), true, "main.php?area=$area&frame=$frame&idmod=$idmod"); + unset($oInUse); + + if ($bInUse == true) { + $message .= "
    "; + $disabled = 'disabled="disabled"'; + } else { + $disabled = ""; + } + + $page = new cPage; + $form = new UI_Table_Form("mod_edit"); + $form->setVar("area", "mod_edit"); + $form->setVar("frame", $frame); + $form->setVar("idmod", $idmod); + + if (!$bInUse) { + $form->setVar("action", "mod_edit"); + } + $form->setWidth("100%"); + + $form->addHeader(i18n("Edit module")); + $name = new cHTMLTextbox("name", $module->get("name"), 60); + $descr = new cHTMLTextarea("descr", clHtmlSpecialChars($module->get("description")), 100, 5); + + // Get input and output code; if specified, prepare row fields + $sInputData = clHtmlSpecialChars($module->get("input")); + $sOutputData = clHtmlSpecialChars($module->get("output")); + + if ($sOptionDebugRows !== "never") { + $iInputNewLines = substr_count($sInputData, "\n") + 2; // +2: Just sanity, to have at least two more lines than the code + $iOutputNewLines = substr_count($sOutputData, "\n") + 2; // +2: Just sanity, to have at least two more lines than the code + // Have at least 15 + 2 lines (15 = code textarea lines count) + if ($iInputNewLines < 21) { + $iInputNewLines = 21; + } + if ($iOutputNewLines < 21) { + $iOutputNewLines = 21; + } + + // Calculate how many characters are needed (e.g. 2 for lines ip to 99) + $iInputNewLineChars = strlen($iInputNewLines); + $iOutputNewLineChars = strlen($iOutputNewLines); + if ($iInputNewLineChars > $iOutputNewLineChars) { + $iChars = $iInputNewLineChars; + } else { + $iChars = $iOutputNewLineChars; + } + unset($iInputNewLineChars); + unset($iOutputNewLineChars); + + $sRows = ""; + for ($i = 1; $i <= $iInputNewLines; $i++) { + if ($sRows) { + $sRows .= "\r\n"; + } + $sRows .= sprintf("%0" . $iChars . "d", $i); + } + $oInputRows = new cHTMLTextarea("txtInputRows", $sRows, $iChars, 20); + + $sRows = ""; + for ($i = 1; $i <= $iOutputNewLines; $i++) { + if ($sRows) { + $sRows .= "\r\n"; + } + $sRows .= sprintf("%0" . $iChars . "d", $i); + } + $oOutputRows = new cHTMLTextarea("txtOutputRows", $sRows, $iChars, 20); + + $oInputRows->updateAttributes(array("wrap" => "off")); + $oOutputRows->updateAttributes(array("wrap" => "off")); + + $oInputRows->updateAttributes(array("readonly" => "true")); + $oOutputRows->updateAttributes(array("readonly" => "true")); + + $oInputRows->setStyle("font-family: monospace;"); + $oOutputRows->setStyle("font-family: monospace;"); + $oOutputRows->setStyle("font-family: monospace;"); + } + $input = new cHTMLTextarea("input", $sInputData, 100, 20, 'input'); + $output = new cHTMLTextarea("output", $sOutputData, 100, 20, 'output'); + + // Style the fields + $input->updateAttributes(array("wrap" => "off")); + $output->updateAttributes(array("wrap" => "off")); + + $name->setDisabled($disabled); + $descr->setDisabled($disabled); + if ($module->isLoadedFromFile("input")) { + $input->setDisabled('disabled="disabled"'); + } else { + $input->setDisabled($disabled); + } + if ($module->isLoadedFromFile("output")) { + $output->setDisabled('disabled="disabled"'); + } else { + $output->setDisabled($disabled); + } + + $descr->setStyle("width: 100%; font-family: monospace;"); + $input->setStyle("width: 100%; font-family: monospace;"); + $output->setStyle("width: 100%; font-family: monospace;"); + + // Check, if tabs may be inserted in text areas (instead jumping to next element) + if (getEffectiveSetting("modules", "edit-with-tabs", "false") == "true") { + $sTabScript = ''; + $page->addScript("tabScript", $sTabScript); + + $input->setEvent("onkeydown", "return insertTab(event,this);"); + $output->setEvent("onkeydown", "return insertTab(event,this);"); + } + + // Prepare type select box + $typeselect = new cHTMLSelectElement("type"); + + $db2 = new DB_ConLite; + $sql = "SELECT type FROM " . $cfg["tab"]["mod"] . " " . + "WHERE idclient = '" . $client . "' GROUP BY type"; // This query can't be designed using GenericDB... + $db2->query($sql); + + $aTypes = array(); + while ($db2->next_record()) { + if ($db2->f("type") != "") { + $aTypes[] = $db2->f("type"); + } + } + + // Read existing layouts + $oLayouts = new cApiLayoutCollection; + $oLayouts->setWhere("idclient", $client); + $oLayouts->query(); + + while ($oLayout = $oLayouts->next()) { + $aTypes = array_merge(explode(";", $oLayout->getProperty("layout", "used-types")), $aTypes); + } + $aTypes = array_unique($aTypes); + + foreach ($aTypes as $sType) { + $typearray[$sType] = $sType; + } + unset($aTypes); + + if (is_array($typearray)) { + asort($typearray); + $typeselect->autoFill(array_merge(array("" => "-- " . i18n("Custom") . " --"), $typearray)); + } else { + $typeselect->autoFill(array("" => "-- " . i18n("Custom") . " --")); + } + + $typeselect->setEvent("change", 'if (document.forms["mod_edit"].elements["type"].value == 0) { document.forms["mod_edit"].elements["customtype"].disabled=0;} else {document.forms["mod_edit"].elements["customtype"].disabled=1;}'); + $typeselect->setDisabled($disabled); + + $custom = new cHTMLTextbox("customtype", ""); + $custom->setDisabled($disabled); + + if ($module->get("type") == "" || $module->get("type") == "0") { + $typeselect->setDefault("0"); + } else { + $typeselect->setDefault($module->get("type")); + $custom->setDisabled("disabled"); + } + + $modulecheck = getSystemProperty("system", "modulecheck"); + + $inputok = true; + $outputok = true; + if ($modulecheck !== "false") { + $outputok = modTestModule($module->get("output"), $module->get("idmod") . "o", true); + if (!$outputok) { + $errorMessage = sprintf(i18n("Error in module. Error location: %s"), $modErrorMessage); + $outled = '' . $errorMessage . ''; + } else { + $okMessage = i18n("Module successfully compiled"); + $outled = '' . $okMessage . ''; + } + + $inputok = modTestModule($module->get("input"), $module->get("idmod") . "i"); + if (!$inputok) { + $errorMessage = sprintf(i18n("Error in module. Error location: %s"), $modErrorMessage); + $inled = '' . $errorMessage . ''; + } else { + $okMessage = i18n("Module successfully compiled"); + $inled = '' . $okMessage . ''; + } + + // Store error information in the database (to avoid re-eval for module overview/menu) + if ($inputok && $outputok) { + $sStatus = "none"; + } else if ($inputok) { + $sStatus = "input"; + } else if ($outputok) { + $sStatus = "output"; + } else { + $sStatus = "both"; + } + + // If status has been changed, store and show in overview + $sPrevStatus = $module->get("error"); + if ($sPrevStatus !== $sStatus) { + $module->set("error", $sStatus); + $module->store(); + + $page->setReload(); + } + } + /* dceModFileEdit (c)2009-2011 www.dceonline.de */ + if ($cfg['dceModEdit']['use']) { + // button for mod folder creation + if (!$module->hasModuleFolder() && $action != "mod_new") { + $aParam = array( + 'action' => 'mod_folder_create', + 'area' => $area, + 'idmod' => $idmod, + 'frame' => $frame + ); + $oCreateFolderButton = new cHTMLLink($sess->self_url($aParam)); + $oCreateFolderButton->setContent(i18n("Create Folder")); + $sCreateFolderButton = " " . $oCreateFolderButton->render(); + } else { + $sCreateFolderButton = ""; + } + + $form->add(i18n("Name"), $name->render() . " (id: " . $module->get("idmod") . + " | dir: " . strtolower(uplCreateFriendlyName($module->get("name"))) . ")" . + $sCreateFolderButton); + } else { + $form->add(i18n("Name"), $name->render()); + } + /* End dceModFileEdit (c)2009-2011 www.dceonline.de */ + $form->add(i18n("Type"), $typeselect->render() . $custom->render()); + $form->add(i18n("Description"), $descr->render()); + + if ($sOptionDebugRows == "always" || ($sOptionDebugRows == "onerror" && (!$inputok || !$outputok))) { + $sSyncScript = ' + '; + $page->addScript("syncScript", $sSyncScript); + + $form->add('
    ' . i18n("Input") . '' . $inled . '' . $oInputRows->render() . '
    ', $input->render()); + $form->add('
    ' . i18n("Output") . '' . $outled . '' . $oOutputRows->render() . '
    ', $output->render()); + } else { + $form->add('
    ' . i18n("Input") . '' . $inled . '
    ', $input->render()); + $form->add('
    ' . i18n("Output") . '' . $outled . '
    ', $output->render()); + } + + $noti = ""; + + if ($module->isOldModule()) { + $noti .= $notification->returnNotification("warning", i18n("This module uses variables and/or functions which are probably not available in this Contenido version. Please make sure that you use up-to-date modules.")); + $noti .= "
    "; + } + + if ($idmod != 0) { + $import = new cHTMLRadiobutton("mode", "import"); + $export = new cHTMLRadiobutton("mode", "export"); + + $import->setLabelText(i18n("Import from file")); + $export->setLabelText(i18n("Export to file")); + + $import->setEvent("click", "document.getElementById('vupload').style.display = '';"); + $export->setEvent("click", "document.getElementById('vupload').style.display = 'none';"); + + $upload = new cHTMLUpload("upload"); + + if ($module->get("input") != "" && $module->get("output") != "") { + $export->setChecked("checked"); + } else { + $import->setChecked("checked"); + } + $form2 = new UI_Table_Form("export"); + $form2->setVar("action", "mod_importexport_module"); + $form2->setVar("use_encoding", "false"); + $form2->addHeader("Import/Export"); + $form2->add(i18n("Mode"), array($export, "
    ", $import)); + if ($module->get("input") != "" && $module->get("output") != "") { + $form2->add(i18n("File"), $upload, "vupload", "display: none;"); + } else { + $form2->add(i18n("File"), $upload, "vupload"); + } + $form2->setVar("area", $area); + $form2->setVar("frame", $frame); + $form2->setVar("idmod", $idmod); + $form2->custom["submit"]["accesskey"] = ''; + + $sScript = ''; + + $page->setContent($noti . $message . $form->render() . "
    " . $form2->render() . $sScript); + } + + $page->setSubnav("idmod=$idmod", "mod"); + if ($action) { + if (stripslashes($idmod > 0)) { + $sReloadScript = ""; + } else { + $sReloadScript = ""; + } + + // Only reload overview/menu page, if something may have changed + $page->addScript('reload', $sReloadScript); + } + if (!($action == "mod_importexport_module" && $mode == "export")) { + $oEditAreaInput = new EditArea('input', 'php', substr(strtolower($belang), 0, 2), true, $cfg, (($module->isLoadedFromFile("input")) ? FALSE : !$bInUse)); + $oEditAreaOutput = new EditArea('output', 'php', substr(strtolower($belang), 0, 2), false, $cfg, (($module->isLoadedFromFile("output")) ? FALSE : !$bInUse)); + $page->addScript('editarea', $oEditAreaInput->renderScript() . $oEditAreaOutput->renderScript()); + + $page->render(); + } + } +} \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.mod_history.php b/branches/conlite20/conlite/includes/include.mod_history.php new file mode 100644 index 0000000..db229cd --- /dev/null +++ b/branches/conlite20/conlite/includes/include.mod_history.php @@ -0,0 +1,159 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release >= 5.0 + * + * {@internal + * created 2008-08-12 + * $Id: include.mod_history.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +// For Editor syntax highlighting +cInclude("external", "edit_area/class.edit_area.php"); + +// +cInclude("includes", "functions.mod.php"); + + +if($idmod =="") { + $idmod = $_REQUEST['idmod']; +} + +$bDeleteFile = false; +$oPage = new cPage; +$oPage->addScript('messageBox', ''); +$oPage->addScript('messageBoxInit', ''); + +if (!$perm->have_perm_area_action($area, 'mod_history_manage')) +{ + $notification->displayNotification("error", i18n("Permission denied")); + $oPage->render(); +} else if (!(int) $client > 0) { + $oPage->render(); +} else if (getEffectiveSetting('versioning', 'activated', 'false') == 'false') { + $notification->displayNotification("warning", i18n("Versioning is not activated")); + $oPage->render(); +} else { + + if ($_POST["mod_send"] == true && ($_POST["CodeOut"] !="" || $_POST["CodeIn"] !="") ) { // save button + $oVersion = new VersionModule($idmod, $cfg, $cfgClient, $db, $client, $area, $frame); + $sName = $_POST["modname"]; + $sCodeInput = $_POST["CodeIn"]; + $sCodeOutput = $_POST["CodeOut"]; + $sDescription = $_POST["moddesc"]; + + // save and mak new revision + $oPage->addScript('refresh', $oVersion->renderReloadScript('mod', $idmod, $sess)); + modEditModule($idmod, $sName, $sDescription, $sCodeInput, $sCodeOutput, $oVersion->sTemplate, $oVersion->sModType); + unset($oVersion); + } + + // [action] => history_truncate delete all current history + if($_POST["action"] == "history_truncate") { + $oVersion = new VersionModule($idmod, $cfg, $cfgClient, $db, $client, $area, $frame); + $bDeleteFile = $oVersion->deleteFile(); + unset($oVersion); + } + + $oVersion = new VersionModule($idmod, $cfg, $cfgClient, $db, $client, $area, $frame); + + // Init Form variables of SelectBox + $sSelectBox = ""; + $oVersion->setVarForm("area", $area); + $oVersion->setVarForm("frame", $frame); + $oVersion->setVarForm("idmod", $idmod); + + // create and output the select box, for params please look class.version.php + $sSelectBox = $oVersion->buildSelectBox("mod_history", "Mod History", "Show History Entry", "idmodhistory"); + + // Generate Form + $oForm = new UI_Table_Form("mod_display"); + $oForm->addHeader(i18n("Edit Module")); + $oForm ->setWidth("100%"); + $oForm->setVar("area", "mod_history"); + $oForm->setVar("frame", $frame); + $oForm->setVar("idmod", $idmod); + $oForm->setVar("mod_send", 1); + + + + // if send form refresh + if ($_POST["idmodhistory"] != "") { + $sRevision = $_POST["idmodhistory"]; + } else { + $sRevision = $oVersion->getLastRevision(); + } + + if ($sRevision != '' && $_POST["action"] != "history_truncate") { + // File Path + $sPath = $oVersion->getFilePath() . $sRevision; + + // Read XML Nodes and get an array + $aNodes = array(); + $aNodes = $oVersion->initXmlReader($sPath); + + if (count($aNodes) > 1) { + + // if choose xml file read value an set it + $sName = $oVersion->getTextBox("modname", $aNodes["name"], 60); + $sDescription = $oVersion->getTextarea("moddesc", $aNodes["desc"], 100, 10); + $sCodeInput = $oVersion->getTextarea("CodeIn", $aNodes["code_input"], 100, 30, "IdCodeIn"); + $sCodeOutput = $oVersion->getTextarea("CodeOut", $aNodes["code_output"], 100, 30, "IdCodeOut"); + + + } + } + + // Add new Elements of Form + $oForm->add(i18n("Name"), $sName); + $oForm->add(i18n("Description"), $sDescription); + $oForm->add(i18n("Code Input"), $sCodeInput); + $oForm->add(i18n("Code Output"), $sCodeOutput); + $oForm->setActionButton("apply", "images/but_ok.gif", i18n("Copy to current"), "c"/*, "mod_history_takeover"*/); //modified it + $oForm->unsetActionButton("submit"); + + // Render and handle History Area + + $oEditAreaIn = new EditArea('IdCodeIn', 'php', substr(strtolower($belang), 0, 2), true, $cfg, !$bInUse); + $oEditAreaOutput = new EditArea('IdCodeOut', 'php', substr(strtolower($belang), 0, 2), true, $cfg, !$bInUse); + $oPage->addScript('IdCodeIn', $oEditAreaIn->renderScript()); + $oPage->addScript('IdCodeOut', $oEditAreaOutput->renderScript()); + + if($sSelectBox !="") { + $oPage->setContent($sSelectBox . $oForm->render()); + + } else { + if($bDeleteFile){ + $notification->displayNotification("warning", i18n("Version history was cleared")); + } else { + $notification->displayNotification("warning", i18n("No module history available")); + } + + + } + $oPage->render(); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.mod_new.php b/branches/conlite20/conlite/includes/include.mod_new.php new file mode 100644 index 0000000..c0eb58d --- /dev/null +++ b/branches/conlite20/conlite/includes/include.mod_new.php @@ -0,0 +1,216 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +if (!isset($_REQUEST["elemperpage"]) || !is_numeric($_REQUEST['elemperpage']) || $_REQUEST['elemperpage'] < 0) { + $oUser = new cApiUser($auth->auth["uid"]); + $_REQUEST["elemperpage"] = $oUser->getProperty("itemsperpage", $area); + unset($oUser); +} + +$tpl->reset(); + +################# +# New Module Link +################# +$str = ''; +if ((int) $client > 0) { + ####### + # Sync Module + ####### + $oModuleCollection = new cApiModuleCollection; + $oModuleCollection->setWhere("idclient", $client); + + $oModuleCollection->query(); + $iItemCount = $oModuleCollection->count(); + + // sync all modules if wanted + if(isset($_GET['syncmod']) && (int) $_GET['syncmod'] == 1) { + + /* @var $oModule cApiModule */ + while ($oModule = $oModuleCollection->next()) { + if(!$oModule->isLoadedFromFile('output') && !$oModule->isLoadedFromFile('input')) continue; + if($oModule->isLoadedFromFile('output')) { + $oModule->set("output", addslashes(stripslashes($oModule->get('output')))); + } + if($oModule->isLoadedFromFile('input')) { + $oModule->set("input", addslashes(stripslashes($oModule->get('input')))); + } + $oModule->set("lastmodified", date("Y-m-d H:i:s")); + $oModule->store(); + unset($oModule); + } + } + unset($oModuleCollection); + + $str = '
    '; + $str .= ''.i18n("New module").''."\n"; + if($cfg['dceModEdit']['use'] == true && $iItemCount > 0) { + $str .= ''."\n"; + $str .= i18n("Sync module").''; + } + $str .= '
    '; +} else { + $str = '
    '.i18n('No Client selected').'
    '; +} + +#only show other options, if there is a active client +if ((int) $client > 0) { + + $_REQUEST['page'] = (isset($_REQUEST['page']))?(int)$_REQUEST['page']:1; + + ############### + # List Options + ############### + $aSortByOptions = array ("name" => i18n("Name"), "type" => i18n("Type")); + $aSortOrderOptions = array ("asc" => i18n("Ascending"), "desc" => i18n("Descending")); + $_REQUEST['sortby'] = (isset($_REQUEST['sortby']) && array_key_exists($_REQUEST['sortby'], $aSortByOptions))? + $_REQUEST['sortby']:''; + $_REQUEST['sortorder'] = (isset($_REQUEST['sortorder']) && array_key_exists($_REQUEST['sortorder'], $aSortOrderOptions))? + $_REQUEST['sortorder']:''; + $listoplink="listoptions"; + $oListOptionRow = new cFoldingRow("e9ddf415-4b2d-4a75-8060-c3cd88b6ff98", i18n("List options"), $listoplink); + $tpl->set('s', 'LISTOPLINK', $listoplink); + $oSelectItemsPerPage = new cHTMLSelectElement("elemperpage"); + $oSelectItemsPerPage->autoFill(array(0 => i18n("-- All --"), 25 => 25, 50 => 50, 75 => 75, 100 => 100)); + $oSelectItemsPerPage->setDefault($_REQUEST["elemperpage"]); + $oSelectSortBy = new cHTMLSelectElement("sortby"); + $oSelectSortBy->autoFill($aSortByOptions); + $oSelectSortBy->setDefault($_REQUEST["sortby"]); + $oSelectSortOrder = new cHTMLSelectElement("sortorder"); + $oSelectSortOrder->autoFill($aSortOrderOptions); + $oSelectSortOrder->setDefault($_REQUEST["sortorder"]); + + $oSelectSearchIn = new cHTMLSelectElement("searchin"); + $oSelectSearchIn->autoFill(array('' => i18n("-- All --"), + 'name' => i18n("Modulname"), + 'description' => i18n("Description"), + 'type' => i18n("Type"), + 'input' => i18n("Input"), + 'output' => i18n("Output"))); + + if(isset($_REQUEST["searchin"])) $oSelectSearchIn->setDefault($_REQUEST["searchin"]); + + // build list with filter types + $sql = "SELECT + type + FROM + ".$cfg["tab"]["mod"]." + WHERE + idclient = '".Contenido_Security::toInteger($client)."' + GROUP BY type"; + + $db->query($sql); + $aFilterType = array(); + $aFilterType["--all--"] = i18n("-- All --"); + $aFilterType["--wotype--"] = i18n("-- Without type --"); + + while ($db->next_record()) + { + if (trim($db->f("type")) != "") + { + $aFilterType[$db->f("type")] = $db->f("type"); + } + } + + $oSelectTypeFilter = new cHTMLSelectElement("filtertype"); + $oSelectTypeFilter->autoFill($aFilterType); + if(isset($_REQUEST["filtertype"])) $oSelectTypeFilter->setDefault($_REQUEST["filtertype"]); + $_REQUEST["filter"] = (isset($_REQUEST["filter"]))?$_REQUEST["filter"]:''; + $oTextboxFilter = new cHTMLTextbox("filter", stripslashes($_REQUEST["filter"]), 15); + $content = '
    '; + // Ye stuff will be done in javascript on apply button + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + //$content .= ''; + if(isset($_REQUEST["page"])) $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= '
    '.i18n("Items / page").''.$oSelectItemsPerPage->render().'
    '.i18n("Sort by").''.$oSelectSortBy->render().'
    '.i18n("Sort order").''.$oSelectSortOrder->render().'
    '.i18n("Type filter").''.$oSelectTypeFilter->render().'
    '.i18n("Search for").''.$oTextboxFilter->render().'
    '.i18n("Search in").''.$oSelectSearchIn->render().'
     
    '; + $content .= ''; + $content .= '
    '; + $oListOptionRow->setContentData($content); + + ####### + # Pager + ####### + $oPagerLink = new cHTMLLink; + $pagerl="pagerlink"; + $oPagerLink->setTargetFrame('left_bottom'); + $oPagerLink->setLink("main.php"); + $oPagerLink->setCustom("elemperpage", $_REQUEST["elemperpage"]); + $oPagerLink->setCustom("filter", stripslashes($_REQUEST["filter"])); + $oPagerLink->setCustom("sortby", $_REQUEST["sortby"]); + $oPagerLink->setCustom("sortorder", $_REQUEST["sortorder"]); + $oPagerLink->setCustom("frame", 2); + $oPagerLink->setCustom("area", $area); + $oPagerLink->enableAutomaticParameterAppend(); + $oPagerLink->setCustom("contenido", $sess->id); + $oPager = new cObjectPager("02420d6b-a77e-4a97-9395-7f6be480f497", $iItemCount, $_REQUEST["elemperpage"], $_REQUEST["page"], $oPagerLink, "page", $pagerl); + + $tpl->set('s', 'PAGINGLINK', $pagerl); + + + $tpl->set('s', 'ACTION', $str.''.$oListOptionRow->render().$oPager ->render().'
    '); +} else { + $tpl->set('s', 'PAGINGLINK', ''); + $tpl->set('s', 'ACTION', $str); + $tpl->set('s', 'LISTOPLINK', ''); +} + +############################ +# generate template +############################ +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['mod_left_top']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.mod_overview.php b/branches/conlite20/conlite/includes/include.mod_overview.php new file mode 100644 index 0000000..c2ebdba --- /dev/null +++ b/branches/conlite20/conlite/includes/include.mod_overview.php @@ -0,0 +1,338 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-03-21 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-08-18, Munkh-Ulzii Balidar, add a functionality to show the used info + * + * $Id: include.mod_overview.php 359 2015-10-01 10:55:49Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if (!(int) $client > 0) { + #if there is no client selected, display empty page + $oPage = new cPage; + $oPage->render(); + return; +} + +############################ +# Now build bottom with list +############################ +$cApiModuleCollection = new cApiModuleCollection; +$classmodule = new cApiModule; +$oPage = new cPage; + +// no value found in request for items per page -> get form db or set default +$oUser = new cApiUser($auth->auth["uid"]); +if (!isset($_REQUEST["elemperpage"]) || !is_numeric($_REQUEST['elemperpage']) || $_REQUEST['elemperpage'] < 0) { + $_REQUEST["elemperpage"] = $oUser->getProperty("itemsperpage", $area); +} +if (!is_numeric($_REQUEST["elemperpage"])) { + $_REQUEST["elemperpage"] = 0; +} +if ($_REQUEST["elemperpage"] > 0) { + // -- All -- will not be stored, as it may be impossible to change this back to something more useful + $oUser->setProperty("itemsperpage", $area, $_REQUEST["elemperpage"]); +} +unset($oUser); + +if (!isset($_REQUEST["page"]) || !is_numeric($_REQUEST['page']) || $_REQUEST['page'] <= 0 || $_REQUEST["elemperpage"] == 0) { + $_REQUEST["page"] = 1; +} + +// Sort by requested +if (isset($_REQUEST["sortby"]) && $_REQUEST["sortby"] != "") { + $cApiModuleCollection->setOrder($_REQUEST["sortby"] . " " . $_REQUEST["sortorder"]); +} else { + $cApiModuleCollection->setOrder("name asc"); +} + + +// Search filter requested +if (isset($_REQUEST["filter"]) && $_REQUEST["filter"] != "" && $_REQUEST["searchin"] == '') { + $cApiModuleCollection->setWhereGroup("default", "name", "%" . $_REQUEST["filter"] . "%", "LIKE"); + $cApiModuleCollection->setWhereGroup("default", "description", "%" . $_REQUEST["filter"] . "%", "LIKE"); + $cApiModuleCollection->setWhereGroup("default", "type", "%" . $_REQUEST["filter"] . "%", "LIKE"); + $cApiModuleCollection->setWhereGroup("default", "input", "%" . $_REQUEST["filter"] . "%", "LIKE"); + $cApiModuleCollection->setWhereGroup("default", "output", "%" . $_REQUEST["filter"] . "%", "LIKE"); + $cApiModuleCollection->setInnerGroupCondition("default", "OR"); +} else if (isset($_REQUEST["filter"]) && $_REQUEST["filter"] != "" && $_REQUEST["searchin"] == 'name') { + $cApiModuleCollection->setWhereGroup("default", "name", "%" . $_REQUEST["filter"] . "%", "LIKE"); + $cApiModuleCollection->setInnerGroupCondition("default", "OR"); +} else if (isset($_REQUEST["filter"]) && $_REQUEST["filter"] != "" && $_REQUEST["searchin"] == 'description') { + $cApiModuleCollection->setWhereGroup("default", "description", "%" . $_REQUEST["filter"] . "%", "LIKE"); + $cApiModuleCollection->setInnerGroupCondition("default", "OR"); +} else if (isset($_REQUEST["filter"]) && $_REQUEST["filter"] != "" && $_REQUEST["searchin"] == 'type') { + $cApiModuleCollection->setWhereGroup("default", "type", "%" . $_REQUEST["filter"] . "%", "LIKE"); + $cApiModuleCollection->setInnerGroupCondition("default", "OR"); +} else if (isset($_REQUEST["filter"]) && $_REQUEST["filter"] != "" && $_REQUEST["searchin"] == 'input') { + $cApiModuleCollection->setWhereGroup("default", "input", "%" . $_REQUEST["filter"] . "%", "LIKE"); + $cApiModuleCollection->setInnerGroupCondition("default", "OR"); +} else if (isset($_REQUEST["filter"]) && $_REQUEST["filter"] != "" && $_REQUEST["searchin"] == 'output') { + $cApiModuleCollection->setWhereGroup("default", "output", "%" . $_REQUEST["filter"] . "%", "LIKE"); + $cApiModuleCollection->setInnerGroupCondition("default", "OR"); +} + +// Type filter requested +if (isset($_REQUEST["filtertype"])) { + switch ($_REQUEST["filtertype"]) { + case "--all--": + break; + case "--wotype--": + $cApiModuleCollection->setWhere("type", ""); + break; + default: + $cApiModuleCollection->setWhere("type", $_REQUEST["filtertype"]); + break; + } +} + +// Items per page requested +$cApiModuleCollection->setWhere("idclient", $client); + + +if ($_REQUEST["elemperpage"] > 0) { + $cApiModuleCollection->query(); + $iItemCount = $cApiModuleCollection->count(); + + if ($iItemCount < (($_REQUEST["page"] - 1) * $_REQUEST["elemperpage"])) { + $_REQUEST["page"] = 1; + } + + if ($_REQUEST["elemperpage"] * ($_REQUEST["page"]) >= $iItemCount + $_REQUEST["elemperpage"] && $_REQUEST["page"] != 1) { + $_REQUEST["page"] --; + } + + $cApiModuleCollection->setLimit(($_REQUEST["elemperpage"] * ($_REQUEST["page"] - 1)), $_REQUEST["elemperpage"]); +} else { + $iItemCount = 0; +} + + +// Build list for left_bottom considering filter values +$mlist = new UI_Menu; +$sOptionModuleCheck = getSystemProperty("system", "modulecheck"); +$sOptionForceCheck = getEffectiveSetting("modules", "force-menu-check", "false"); +$iMenu = 0; + +$cApiModuleCollection->query(); +while ($cApiModule = $cApiModuleCollection->next()) { + if ($perm->have_perm_item($area, $db->f("idmod")) || $perm->have_perm_area_action("mod_translate", "mod_translation_save") || $perm->have_perm_area_action_item("mod_translate", "mod_translation_save", $cApiModule->get("idmod"))) { + $idmod = $cApiModule->get("idmod"); + + $link = new cHTMLLink; + $link->setMultiLink("mod", "", "mod_edit", ""); + $link->setCustom("idmod", $cApiModule->get("idmod")); + $link->updateAttributes(array("alt" => $cApiModule->get("description"))); + $link->updateAttributes(array("title" => $cApiModule->get("description"))); + $link->updateAttributes(array("style" => "margin-left:5px")); + + $sName = $cApiModule->get("name"); + + if ($sOptionModuleCheck !== "false" && $sOptionForceCheck !== "false") { + // Check module and force check has been enabled - check module (surprisingly...) + $inputok = modTestModule($cApiModule->get("input"), $cApiModule->get("idmod") . "i", false); + $outputok = modTestModule($cApiModule->get("output"), $cApiModule->get("idmod") . "o", true); + + if ($inputok && $outputok) { // Everything ok + $colName = $sName; // The set default color: none :) + } else if ($inputok || $outputok) { // Input or output has a problem + $colName = '' . $sName . ''; + } else { // Input >and< output has a problem + $colName = '' . $sName . ''; + } + } else { + // Do not check modules (or don't force it) - so, let's take a look into the database + $sModuleError = $cApiModule->get("error"); + + if ($sModuleError == "none") { + $colName = $sName; + } else if ($sModuleError == "input" || $sModuleError == "output") { + $colName = '' . $sName . ''; + } else { + $colName = '' . $sName . ''; + } + } + + $iMenu ++; + + $mlist->setTitle($iMenu, $colName); + if ($perm->have_perm_area_action_item("mod_edit", "mod_edit", $db->f("idmod")) || $perm->have_perm_area_action_item("mod_translate", "mod_translation_save", $cApiModule->get("idmod"))) { + $mlist->setLink($iMenu, $link); + } + + $inUse = $classmodule->moduleInUse($idmod); + $bFromFile = $cApiModule->isLoadedFromFile(); + + $deletebutton = ""; + + if ($inUse) { + $inUseString = i18n("Click for more information about usage"); + $mlist->setActions($iMenu, 'inuse', '' . $inUseString . ''); + $delDescription = i18n("Module in use, cannot delete"); + } else if($bFromFile) { + $delDescription = i18n("Module in filesystem, cannot delete"); + } else { + $mlist->setActions($iMenu, 'inuse', ''); + if ($perm->have_perm_area_action_item("mod", "mod_delete", $cApiModule->get("idmod"))) { + $delTitle = i18n("Delete module"); + $delDescr = sprintf(i18n("Do you really want to delete the following module:

    %s
    "), $sName); + + $deletebutton = '' . $delTitle . ''; + } else { + $delDescription = i18n("No permission"); + } + } + + if ($deletebutton == "") { + //$deletebutton = ''; + $deletebutton = '' . $delDescription . ''; + } + + $todo = new TODOLink("idmod", $db->f("idmod"), "Module: $sName", ""); + + $mlist->setActions($iMenu, "todo", $todo->render()); + $mlist->setActions($iMenu, "delete", $deletebutton); + + if (isset($_GET['idmod']) && $_GET['idmod'] == $idmod) { + $mlist->setExtra($iMenu, 'id="marked" '); + } + //$mlist->setImage($iMenu, "images/but_module.gif"); + //$mlist->setImage($iMenu, 'images/spacer.gif', 5); + } +} + +$deleteScript = ' '; + +$sShowUsedInfo = ' + + '; + +$sMarkRow = ''; + +$oPage->setMargin(0); +$oPage->addScript('messagebox', ''); +$oPage->addScript('jquery', ''); +$oPage->addScript('delete', $deleteScript); +$oPage->addScript('showUsedInfo', $sShowUsedInfo); +$oPage->addScript('cfoldingrow.js', ''); +$oPage->addScript('parameterCollector.js', ''); +$oPage->setContent($mlist->render(false) . $sMarkRow); + +//generate current content for Object Pager +$oPagerLink = new cHTMLLink; +$pagerl = "pagerlink"; +$oPagerLink->setTargetFrame('left_bottom'); +$oPagerLink->setLink("main.php"); +$oPagerLink->setCustom("elemperpage", $_REQUEST["elemperpage"]); +if (isset($_REQUEST["filter"])) + $oPagerLink->setCustom("filter", stripslashes($_REQUEST["filter"])); +if (isset($_REQUEST["sortby"])) + $oPagerLink->setCustom("sortby", $_REQUEST["sortby"]); +if (isset($_REQUEST["sortorder"])) + $oPagerLink->setCustom("sortorder", $_REQUEST["sortorder"]); +$oPagerLink->setCustom("frame", $frame); +$oPagerLink->setCustom("area", $area); +$oPagerLink->enableAutomaticParameterAppend(); +$oPagerLink->setCustom("contenido", $sess->id); +$oPager = new cObjectPager("02420d6b-a77e-4a97-9395-7f6be480f497", $iItemCount, $_REQUEST["elemperpage"], $_REQUEST["page"], $oPagerLink, "page", $pagerl); + +//add slashes, to insert in javascript +$sPagerContent = $oPager->render(1); +$sPagerContent = str_replace('\\', '\\\\', $sPagerContent); +$sPagerContent = str_replace('\'', '\\\'', $sPagerContent); + +//send new object pager to left_top +$sRefreshPager = ' + '; + +$oPage->addScript('refreshpager', $sRefreshPager); + +$oPage->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.mod_package.php b/branches/conlite20/conlite/includes/include.mod_package.php new file mode 100644 index 0000000..7fd7e51 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.mod_package.php @@ -0,0 +1,492 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-06-27, OliverL fix import module translation bug, checkin timo.trautmann (http://forum.contenido.org/viewtopic.php?t=19064) + * modified 2010-11-22, Dominik Ziegler, fixed check of directory existance [CON-354] + * + * $Id: include.mod_package.php 417 2016-01-20 11:08:39Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude("includes", "functions.upl.php"); + +$sNoti = ""; +$idmod = (int)$idmod; + +function getFiles ($sPath, $sFileType, &$sNoti) +{ + global $notification, $client; + + $bError = false; + $aFiles = array(); + switch ($sPath) + { + case "layouts": + $oLayouts = new cApiLayoutCollection; + $oLayouts->setWhere("idclient", $client); + $oLayouts->setOrder("name"); + $oLayouts->query(); + + if ($oLayouts->count() > 0) + { + while ($oLayout = $oLayouts->next()) + { + $aFiles[$oLayout->get($oLayout->primaryKey)] = $oLayout->get("name"); + } + } + + break; + case "languages": + $oClientLangs = new cApiClientLanguageCollection; + $oClientLangs->setWhere("idclient", $client); + $oClientLangs->query(); + + $aLangs = array(); + while ($oClientLang = $oClientLangs->next()) + { + $aLangs[] = $oClientLang->get("idlang"); + } + + $oLangs = new cApiLanguageCollection; + $oLangs->setOrder("name"); + $oLangs->query(); + + if ($oLangs->count() > 0) + { + while ($oLang = $oLangs->next()) + { + $iID = $oLang->get($oLang->primaryKey); + + if (in_array($iID, $aLangs)) + { + $aFiles[] = array($iID, strtolower($oLang->get("name")).' ('.$iID.')' ); // Edit: 2008-06-27 By: OliverL + } + } + } + + break; + default: + // Real file + if (is_dir($sPath)) + { + $iHandle = opendir($sPath); + $aFiles = array(); + + while ($sFile = readdir($iHandle)) + { + if ($sFile != "." && $sFile != ".." && substr($sFile, (strlen($sFile) - (strlen($sFileType) + 1)), (strlen($sFileType) + 1)) == ".$sFileType") + { + if (is_readable($sPath.$sFile)) + { + $aFiles[$sFile] = $sFile; + } else { + $bError = true; + $sNoti .= $notification->returnNotification("error", $sFile." ".i18n("is not readable!")) . "
    0) + { + asort($aFiles); + } + } else { + $bError = true; + $sNoti .= $notification->returnNotification("error", i18n("Directory is not existing or readable!")."
    $sPath") . "
    add($sCaption, i18n("No elements available")); + } else { + $oSelFiles = new cHTMLSelectElement($sField."[]"); // []: Make sure, we are getting an array... + $oSelFiles->setSize(15); + $oSelFiles->setStyle("width: 100%;"); + $oSelFiles->setMultiselect(); + + if (count($aSelected) == 0) + { + $oCkbNone = new cHTMLCheckbox($sField . "None", "none", "", true); + $oSelFiles->setDisabled("disabled"); + } else { + $oCkbNone = new cHTMLCheckbox($sField . "None", "none"); + $oSelFiles->setDisabled($sDisabled); + } + $oCkbNone->setDisabled($sDisabled); + $oCkbNone->setEvent("click", "if (this.checked) { document.frmPackage.elements['" . $sField . "[]'].disabled = true; } else { document.frmPackage.elements['" . $sField . "[]'].disabled = false; }"); + + $iCounter = 1; + foreach ($aFiles as $sID => $sFile) + { + if (is_array($sFile)) // Edit: 2008-06-27 By: OliverL + { + if (in_array($sFile[0], $aSelected)) + { + $oOption = new cHTMLOptionElement(clHtmlSpecialChars($sFile[1]), $sFile[0], true); + } else { + $oOption = new cHTMLOptionElement(clHtmlSpecialChars($sFile[1]), $sFile[0]); + } + } else { + if (in_array($sID, $aSelected)) + { + $oOption = new cHTMLOptionElement(clHtmlSpecialChars($sFile), $sID, true); + } else { + $oOption = new cHTMLOptionElement(clHtmlSpecialChars($sFile), $sID); + } + } // End-Edit + $oSelFiles->addOptionElement($iCounter, $oOption); + $iCounter++; + } + + $oForm->add($sCaption, $oCkbNone->toHTML(false) . " " . i18n("None") . "
    " . $oSelFiles->render()); + } +} + +if ($idmod > 0 && $perm->have_perm_area_action_item("mod_edit", "mod_edit", $idmod)) +{ + // Specify available detail areas. Note, that everything is treated as "file", including layouts and + // translation languages. + $aFileTypes = array("jsfiles" => array("suffix" => "js", "path" => $cfgClient[$client]["js"]["path"], "caption" => i18n("Javascript files"), "field" => "selJSFiles"), + "tplfiles" => array("suffix" => "html", "path" => $cfgClient[$client]["tpl"]["path"], "caption" => i18n("Module template files"), "field" => "selTplFiles"), + "cssfiles" => array("suffix" => "css", "path" => $cfgClient[$client]["css"]["path"], "caption" => i18n("Style files"), "field" => "selCSSFiles"), + "layouts" => array("suffix" => "", "path" => "layouts", "caption" => i18n("Layouts"), "field" => "selLayouts"), + "translations" => array("suffix" => "", "path" => "languages", "caption" => i18n("Translations"), "field" => "selLanguages")); + + $oModule = new cApiModule; + $oModule->loadByPrimaryKey($idmod); + + if ($action == "mod_importexport_package") + { + $sTmpPackageFile = $cfg['path']['conlite_temp'] . "package_" . md5($auth->auth["uid"]) . ".xml"; + + switch ($mode) + { + case "export": + $sFileName = uplCreateFriendlyName($oModule->get("name") . "_package"); + + if ($sFileName != "") + { + $oModule->exportPackage($sFileName . ".xml"); + } + break; + case "import1": + if ($_FILES["upload"]["tmp_name"] != "") // file_exists() doesn't work with safe_mode/basedir + { + move_uploaded_file($_FILES["upload"]["tmp_name"], $sTmpPackageFile); + + $oPage = new cPage; + if (!$aResult = $oModule->getPackageOverview($sTmpPackageFile)) + { + $sNoti .= sprintf(i18n("Error while importing XML file: %s"), $oModule->_error). "
    "; + + $oPage->setContent($sNoti); + $oPage->render(); + } else { + $oForm = new UI_Table_Form("frmImportExport"); + $oForm->setVar("area", "mod_package"); + $oForm->setVar("frame", $frame); + $oForm->setVar("idmod", $idmod); + $oForm->setVar("action", ""); + $oForm->setVar("mode", "import2"); + $oForm->setVar("use_encoding", "false"); + + $oForm->addHeader("Import/Export"); + $oForm->setWidth("100%"); + + $oForm->add(i18n("Name"), $aResult["name"]); + + $sMsg = array(); + $sMsg["Action"] = "%s " . i18n("Skip") . " %s " . i18n("Append") . " %s " . i18n("Overwrite"); + $sMsg["OK"] = i18n("OK"); + $sMsg["Assign"] = i18n("Assign"); + $sMsg["Conflict"] = i18n("Conflict"); + $sMsg["Ignored"] = i18n("Ignored"); + $sMsg["- Select -"] = i18n("- Select -"); + + // Files + foreach ($aFileTypes as $sFileType => $aFileType) + { + $oLstFiles = new UI_List; + $oLstFiles->setWidth("100%"); + $oLstFiles->setBorder(1); + + $oLstFiles->setCell(0, 1, "" . i18n("Status") . ""); + $oLstFiles->setCell(0, 2, "" . i18n("Name") . ""); + $oLstFiles->setCell(0, 3, "" . i18n("Action") . ""); + $oLstFiles->setCellAlignment(0, 3, "right"); + + $aDataFiles = getFiles($aFileType["path"], $aFileType["suffix"], $sNoti); + + $iCounter = 1; + if (is_array($aResult[$sFileType])) + { + foreach ($aResult[$sFileType] as $sFile) + { + $oLstFiles->setCell($iCounter, 1, clHtmlSpecialChars($sFile)); + + switch ($aFileType["path"]) + { + case "languages": + // Languages have to be assigned, they won't be added or something + if (is_array($aDataFiles)) + { + $oSelLang = new cHTMLSelectElement("selAssignTrans[".clHtmlSpecialChars($sFile)."]"); + // $oSelLang->autoFill(array_merge(array(0 => $sMsg["- Select -"]), $aDataFiles)); // Old Version + $oSelLang->autoFill(array_merge(array(array(0 , $sMsg["- Select -"])), $aDataFiles)); // Edit: 2008-06-27 By: OliverL + + // Try to assign existing language + if (in_array($sFile, $aDataFiles)) + { + $oSelLang->setDefault(array_search(strtolower($sFile), $aDataFiles)); + } + + $oLstFiles->setCell($iCounter, 2, $sMsg["Assign"]); + $oLstFiles->setCell($iCounter, 3, $oSelLang->render()); + } else { + $oLstFiles->setCell($iCounter, 2, $sMsg["Ignored"]); + $oLstFiles->setCell($iCounter, 3, "-"); + } + break; + default: + if (is_array($aDataFiles) && in_array($sFile, $aDataFiles)) + { + $oRadSkip = new cHTMLRadiobutton("radItem[".$sFileType."][".clHtmlSpecialChars($sFile)."]", "skip", "", true); + $oRadAppend = new cHTMLRadiobutton("radItem[".$sFileType."][".clHtmlSpecialChars($sFile)."]", "append"); + $oRadOverwrite = new cHTMLRadiobutton("radItem[".$sFileType."][".clHtmlSpecialChars($sFile)."]", "overwrite"); + + $oLstFiles->setCell($iCounter, 2, $sMsg["Conflict"]); + $oLstFiles->setCell($iCounter, 3, sprintf($sMsg["Action"], $oRadSkip->toHTML(false), $oRadAppend->toHTML(false), $oRadOverwrite->toHTML(false))); + } else { + $oLstFiles->setCell($iCounter, 2, $sMsg["OK"]); + $oLstFiles->setCell($iCounter, 3, "-"); + } + } + + $oLstFiles->setCellAlignment($iCounter, 3, "right"); + $iCounter++; + } + + $oForm->add($aFileType["caption"], $oLstFiles->render()); + } + + $oForm->setActionButton("cancel", $cfg['path']['contenido_fullhtml']."images/but_cancel.gif", i18n("Cancel"), "c"); + $oForm->setActionButton("submit", $cfg['path']['contenido_fullhtml']."images/but_ok.gif", i18n("Import"), "s", "mod_importexport_package"); + } + $oPage->setContent($sNoti.$oForm->render()); + $oPage->render(); + } + } + break; + case "import2": + if (file_exists($sTmpPackageFile)) + { + $aOptions = array(); + + if (is_array($_REQUEST["radItem"])) + { + $aOptions["items"] = $_REQUEST["radItem"]; + } else { + $aOptions["items"] = array(); + } + + if (is_array($_REQUEST["selAssignTrans"])) + { + foreach ($_REQUEST["selAssignTrans"] as $sPackageLang => $iAssignLang) + { + if ($iAssignLang > 0) + { + $aOptions["translations"][$sPackageLang] = $iAssignLang; + } + } + } else { + $aOptions["translations"] = array(); + } + + $oPage = new cPage; + + $oForm = new UI_Table_Form("frmImportExport"); + // See below for area + $oForm->setVar("frame", $frame); + $oForm->setVar("idmod", $idmod); + $oForm->setVar("action", ""); + + $oForm->addHeader("Import/Export"); + $oForm->setWidth("100%"); + + if (!$oModule->importPackage($sTmpPackageFile, $aOptions)) + { + $sNoti .= sprintf(i18n("Error while importing XML file: %s"), $oModule->_error). "
    "; + + $oForm->setVar("area", "mod_package"); + + $oForm->add(i18n("Status"), i18n("Import was not succesful, please check data and try again")); + $oForm->setActionButton("submit", $cfg['path']['contenido_fullhtml']."images/but_ok.gif", i18n("Retry"), "s"); + } else { + $oForm->setVar("area", "mod_edit"); + + $oForm->add(i18n("Status"), i18n("Import succesfully finished")); + $oForm->setActionButton("submit", $cfg['path']['contenido_fullhtml']."images/but_ok.gif", i18n("Finish"), "s"); + } + + unlink($sTmpPackageFile); + + $oPage->setContent($sNoti.$oForm->render()); + $oPage->setReload(); + $oPage->render(); + } + break; + } + } else { + if ($action == "mod_edit") + { + $oModule->set("package_guid", stripslashes($_REQUEST["txtGUID"])); + + $aData = array(); + foreach ($aFileTypes as $sFileType => $aFileType) + { + if (!isset($_REQUEST[$aFileType["field"]]) || isset($_REQUEST[$aFileType["field"] . "None"])) { + $aData[$sFileType] = array(); + } else { + $aData[$sFileType] = $_REQUEST[$aFileType["field"]]; + } + } + + $oModule->set("package_data", serialize($aData)); + $oModule->store(true); // Store changes - without history or updating mod code in articles + } + + $oInUse = new InUseCollection; + list($bInUse, $sMessage) = $oInUse->checkAndMark("idmod", $idmod, true, i18n("Module is in use by %s (%s)"), true, "main.php?area=$area&frame=$frame&idmod=$idmod"); + unset ($oInUse); + + if ($bInUse == true) + { + $sMessage .= "
    "; + $sDisabled = 'disabled="disabled"'; + } else { + $sDisabled = ""; + } + + $oPage = new cPage; + $oForm = new UI_Table_Form("frmPackage"); + $oForm->setVar("area", "mod_package"); + $oForm->setVar("frame", $frame); + $oForm->setVar("idmod", $idmod); + + if (!$bInUse) + { + $oForm->setVar("action", "mod_edit"); + } + $oForm->setWidth("100%"); + + $oForm->addHeader(i18n("Edit package")); + $oForm->add(i18n("Name"), $oModule->get("name")); + + // Get serialized data; ensure, that detail fields are arrays + $aData = unserialize($oModule->get("package_data")); + if (!is_array($aData)) + { + $aData = array(); + } + foreach ($aFileTypes as $sFileType => $aFileType) + { + if (!is_array($aData[$sFileType])) + { + $aData[$sFileType] = array(); + } + } + + // Module package GUID + $oTxtGUID = new cHTMLTextbox("txtGUID", $oModule->get("package_guid"), 64); + $oTxtGUID->setDisabled($sDisabled); + + $oForm->add(i18n("Package GUID"), $oTxtGUID->render()); + + // Files + foreach ($aFileTypes as $sFileType => $aFileType) + { + $aFiles = getFiles($aFileType["path"], $aFileType["suffix"], $sNoti); + displayFiles($aFiles, $aData[$sFileType], $oForm, $aFileType["caption"], $aFileType["field"], $sDisabled); + } + + $oRadImport = new cHTMLRadiobutton("mode", "import1"); + $oRadExport = new cHTMLRadiobutton("mode", "export"); + + $oRadImport->setLabelText(i18n("Import from file")); + $oRadExport->setLabelText(i18n("Export to file")); + + $oRadImport->setEvent("click", "document.getElementById('vupload').style.display = '';"); + $oRadExport->setEvent("click", "document.getElementById('vupload').style.display = 'none';"); + + $oUpl = new cHTMLUpload("upload"); + + if ($oModule->get("input") != "" && $oModule->get("output") != "") + { + $oRadExport->setChecked("checked"); + } else { + $oRadImport->setChecked("checked"); + } + $oForm2 = new UI_Table_Form("frmImportExport"); + $oForm2->setVar("action", "mod_importexport_package"); + $oForm2->setVar("use_encoding", "false"); + $oForm2->addHeader("Import/Export"); + $oForm2->add(i18n("Mode"), array($oRadExport, "
    ", $oRadImport)); + + if ($oModule->get("input") != "" && $oModule->get("output") != "") + { + $oForm2->add(i18n("File"), $oUpl, "vupload", "display: none;"); + } else { + $oForm2->add(i18n("File"), $oUpl, "vupload"); + } + $oForm2->setVar("area", $area); + $oForm2->setVar("frame", $frame); + $oForm2->setVar("idmod", $idmod); + $oForm2->custom["submit"]["accesskey"] = ''; + + $oPage->setContent($sNoti.$sMessage.$oForm->render()."
    ".$oForm2->render()); + + //$oPage->setSubnav("idmod=$idmod", "mod"); + $oPage->render(); + } +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.mod_sync.php b/branches/conlite20/conlite/includes/include.mod_sync.php new file mode 100644 index 0000000..518d33f --- /dev/null +++ b/branches/conlite20/conlite/includes/include.mod_sync.php @@ -0,0 +1,69 @@ + + * @copyright (c) 2012-2015, conlite.org + * + * $Id: include.mod_sync.php 330 2015-06-22 11:59:04Z oldperl $ + */ + +/* @var $sess Contenido_Session */ +/* @var $perm Contenido_Perm */ +/* @var $auth Contenido_Challenge_Crypt_Auth */ +/* @var $notification Contenido_Notification */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$oPage = new cPage(); +$oPage->setHtml5(); + +if ((int) $client > 0) { + $aContent = array(); + ####### + # Sync Module + ####### + $oModuleCollection = new cApiModuleCollection; + $oModuleCollection->setWhere("idclient", $client); + + $oModuleCollection->query(); + $iItemCount = $oModuleCollection->count(); + + // sync all modules if wanted + if(isset($_GET['syncmod']) && (int) $_GET['syncmod'] == 1) { + $iSyncMods = 0; + $aContent[] = "

    ".i18n("Syncing Modules!")."

    "; + $oTextDiv = new cHTMLDiv(); + /* @var $oModule cApiModule */ + while ($oModule = $oModuleCollection->next()) { + if(!$oModule->isLoadedFromFile('output') && !$oModule->isLoadedFromFile('input')) { + $oTextDiv->setContent(i18n("Module ").$oModule->get("name").": ".i18n("nothing to do")); + $aContent[] = $oTextDiv->render(); + continue; + } + if($oModule->isLoadedFromFile('output')) { + $oModule->set("output", addslashes($oModule->get('output'))); + } + if($oModule->isLoadedFromFile('input')) { + $oModule->set("input", addslashes($oModule->get('input'))); + } + $oModule->set("lastmodified", date("Y-m-d H:i:s")); + $oModule->store(); + $oTextDiv->setContent(i18n("Module ").$oModule->get("name").": ".i18n("synchronized")); + $aContent[] = $oTextDiv->render(); + unset($oModule); + } + } else { + $aContent[] = $notification->returnNotification(Contenido_Notification::LEVEL_WARNING, i18n("No modules to sync!")); + } + unset($oModuleCollection); + $oPage->setContent($aContent); +} else { + $oPage->setContent($notification->returnNotification(Contenido_Notification::LEVEL_WARNING, i18n("Nothing to do!"))); +} +$oPage->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.mod_translate.php b/branches/conlite20/conlite/includes/include.mod_translate.php new file mode 100644 index 0000000..fc7fa5a --- /dev/null +++ b/branches/conlite20/conlite/includes/include.mod_translate.php @@ -0,0 +1,203 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-09-22, Murat Purc, Fixed setting of wrong initial translation id [#CON-347] + * + * $Id: include.mod_translate.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$langobj = new cApiLanguage($lang); + +$langstring = $langobj->get("name") . ' ('.$lang.')'; + +$moduletranslations = new cApiModuleTranslationCollection; +$module = new cApiModule($idmod); + +if ($action == "mod_translation_save") +{ + $strans = new cApiModuleTranslation; + $strans->loadByPrimaryKey($idmodtranslation); + + if ($strans->get("idmod") == $idmod) + { + $module->setTranslatedName($translatedname); + + $strans->set("translation", stripslashes($t_trans)); + $strans->store(); + + /* Increase idmodtranslation */ + $moduletranslations->select("idmod = '$idmod' AND idlang = '$lang'"); + + while ($mitem = $moduletranslations->next()) + { + if ($mitem->get("idmodtranslation") == $idmodtranslation) + { + $mitem2 = $moduletranslations->next(); + + if (is_object($mitem2)) + { + $idmodtranslation = $mitem2->get("idmodtranslation"); + break; + } + } + } + } +} + +if ($action == "mod_importexport_translation") +{ + if ($mode == "export") + { + $sFileName = uplCreateFriendlyName(strtolower($module->get("name") . "_" . $langobj->get("name"))); + + if ($sFileName != "") + { + $moduletranslations->export($idmod, $lang, $sFileName . ".xml"); + } + } + if ($mode == "import") + { + if (file_exists($_FILES["upload"]["tmp_name"])) + { + $moduletranslations->import($idmod, $lang, $_FILES["upload"]["tmp_name"]); + } + } +} + + +if (!isset($idmodtranslation)) +{ + $idmodtranslation = 0; +} + +$mtrans = new cApiModuleTranslation; +$mtrans->loadByPrimaryKey($idmodtranslation); + +if ($mtrans->get("idmod") != $idmod) +{ + $moduletranslations->select("idmod = '$idmod' AND idlang = '$lang'", '', 'idmodtranslation DESC', '1'); + $mtrans = $moduletranslations->next(); + + if (is_object($mtrans)) + { + $idmodtranslation = $mtrans->get("idmodtranslation"); + } else { + $mtrans = new cApiModuleTranslation; + } +} + +$strings = $module->parseModuleForStrings(); + +/* Insert new strings */ +foreach ($strings as $string) +{ + $moduletranslations->create($idmod, $lang, $string); +} + +$moduletranslations->select("idmod = '$idmod' AND idlang = '$lang'"); + +while ($d_modtrans = $moduletranslations->next()) +{ + if (!in_array($d_modtrans->get("original"), $strings)) + { + $moduletranslations->delete($d_modtrans->get("idmodtranslation")); + } +} + +$page = new cPage; + +$form = new UI_Table_Form("translation"); +$form->addHeader(sprintf(i18n("Translate module '%s'"), $module->get("name"))); +$form->setVar("area", $area); +$form->setVar("frame", $frame); +$form->setVar("idmod", $idmod); +$form->setVar("idmodtranslation", $idmodtranslation); +$form->setVar("action", "mod_translation_save"); + +$transmodname = new cHTMLTextbox("translatedname", $module->getTranslatedName(),60); + +$form->add(i18n("Translated Name"), $transmodname); + +$ilink = new cHTMLLink; +$ilink->setCLink("mod_translate", 5, ""); +$ilink->setCustom("idmod", $idmod); +$ilink->setCustom("idmodtranslation", $mtrans->get("idmodtranslation")); +$ilink->setAnchor($mtrans->get("idmodtranslation")); + +$iframe = ''; + +$table = ''; + +$original = new cHTMLTextarea("t_orig",clHtmlSpecialChars($mtrans->get("original"))); +$original->setStyle("width: 300px;"); +$translated = new cHTMLTextarea("t_trans",clHtmlSpecialChars($mtrans->get("translation"))); +$translated->setStyle("width: 300px;"); + +$table .= '
    '.i18n("Original module string").''.sprintf(i18n("Translation for %s"), $langstring).' 
    '.$iframe.'
    '.$original->render().''.$translated->render().' 
    '; +$table .= i18n("Hint: Hit ALT+SHIFT+S to save the translated entry and advance to the next string."); +$form->add(i18n("String list"), $table); + +$mark = ''; + + +$import = new cHTMLRadiobutton("mode", "import"); +$export = new cHTMLRadiobutton("mode", "export"); +$export->setLabelText(i18n("Export to file")); +$import->setLabelText(i18n("Import from file")); + +$import->setEvent("click", "document.getElementById('vupload').style.display = '';"); +$export->setEvent("click", "document.getElementById('vupload').style.display = 'none';"); +$upload = new cHTMLUpload("upload"); + +$import->setChecked("checked"); +$form2 = new UI_Table_Form("export"); +$form2->setVar("action", "mod_importexport_translation"); +$form2->addHeader("Import/Export"); +$form2->add(i18n("Mode"), array($export, "
    ", $import)); +$form2->add(i18n("File"), $upload, "vupload"); +$form2->setVar("area", $area); +$form2->setVar("frame", $frame); +$form2->setVar("idmod", $idmod); +$form2->setVar("idmodtranslation", $idmodtranslation); +$form2->custom["submit"]["accesskey"] = ''; + +$page->setContent($form->render(). $mark ."
    ". $form2->render()); +$page->setMarkScript(2); + +$clang = new cApiLanguage($lang); + +$page->setEncoding($clang->get("encoding")); + +if (!($action == "mod_importexport_translation" && $mode == "export")) +{ + $page->render(); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.mod_translate_stringlist.php b/branches/conlite20/conlite/includes/include.mod_translate_stringlist.php new file mode 100644 index 0000000..e386398 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.mod_translate_stringlist.php @@ -0,0 +1,86 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.mod_translate_stringlist.php 123 2012-08-30 11:11:09Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$translations = new cApiModuleTranslationCollection; +$translations->select("idmod = '$idmod' AND idlang='$lang'"); + +$page = new cPage; +$page->setMargin(0); + +$v = ''; + +$link = new cHTMLLink; +$link->setCLink("mod_translate", 4, ""); + +$mylink = new cHTMLLink; + +while ($translation = $translations->next()) +{ + $string = $translation->get("original"); + $tstring = $translation->get("translation"); + + $link->setCustom("idmod", $idmod); + $link->setCustom("idmodtranslation", $translation->get("idmodtranslation")); + $href = $link->getHREF(); + + $mylink->setLink('javascript:parent.location="'.$href.'"'); + $mylink->setContent($string); + + $dark = !$dark; + + if ($dark) + { + $bgcol = $cfg["color"]["table_dark"]; + } else { + $bgcol = $cfg["color"]["table_light"]; + } + + if ($idmodtranslation == $translation->get("idmodtranslation")) + { + $bgcol = $cfg["color"]["table_active"]; + } + $v .= ''; +} + +$v .= '
    '.$mylink->render().''.$tstring.'
    '; + +$page->setContent($v); + +$clang = new cApiLanguage($lang); +$page->setEncoding($clang->get("encoding")); + +$page->render(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.mycontenido.tasks.edit.php b/branches/conlite20/conlite/includes/include.mycontenido.tasks.edit.php new file mode 100644 index 0000000..04ec4c6 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.mycontenido.tasks.edit.php @@ -0,0 +1,150 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2009-11-06, Murat Purc, replaced deprecated functions (PHP 5.3 ready) + * + * $Id: include.mycontenido.tasks.edit.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$cpage = new cPage; + +$todoitem = new TODOItem; +$todoitem->loadByPrimaryKey($idcommunication); + +$ui = new UI_Table_Form("reminder"); +$ui->addHeader(i18n("Edit Reminder item")); + +$ui->addCancel($sess->url("main.php?area=mycontenido_tasks&frame=$frame")); + +$ui->setVar("area","mycontenido_tasks"); +$ui->setVar("frame", $frame); +$ui->setVar("action", "todo_save_item"); +$ui->setVar("idcommunication", $idcommunication); + +$userselect = new cHTMLSelectElement("userassignment"); + +$userclass = new User; +foreach ($userclass->getAvailableUsers(explode(',', $auth->auth['perm'])) as $key => $value) +{ + $acusers[$key] = $value["username"]." (".$value["realname"].")"; +} + +asort($acusers); + +$userselect->autoFill($acusers); +$userselect->setDefault($auth->auth["uid"]); + +$ui->add(i18n("Assigned to"), $userselect->render()); + +$subject = new cHTMLTextbox("subject", $todoitem->get("subject"),60); +$ui->add(i18n("Subject"), $subject->render()); + +$message = new cHTMLTextarea("message", $todoitem->get("message")); +$ui->add(i18n("Description"), $message->render()); + +$reminderdue = new cHTMLTextbox("enddate", $todoitem->getProperty("todo", "enddate"), '', '', "enddate"); +$duepopup = 'Endzeitpunkt w�hlen'; +$ui->add(i18n("End date"),'
    '.$reminderdue->render().''.$duepopup.'
    '); + +$notiemail = new cHTMLCheckbox("notiemail", i18n("E-Mail notification")); +$notiemail->setChecked($todoitem->getProperty("todo", "emailnoti")); +$notiemail->setEvent("click","if(this.checked){ document.forms['reminder'].reminderdate.disabled=false; } else { document.forms['reminder'].reminderdate.disabled=true; }"); + +$ui->add(i18n("Reminder options"), $notiemail->toHTML()); + +$remindertimestamp = $todoitem->getProperty("todo", "reminderdate"); + +if ($remindertimestamp != 0) +{ + $mydate = date("Y-m-d H:i:s", $remindertimestamp); +} else { + $mydate = ""; +} + +$reminderdate = new cHTMLTextbox("reminderdate", $mydate, '', '', "reminderdate"); + +if (!$todoitem->getProperty("todo", "emailnoti")) +{ + $reminderdate->setDisabled(true); +} + +$datepopup = 'Endzeitpunkt w�hlen'; +$ui->add(i18n("Reminder date"),'
    '.$reminderdate->render().''.$datepopup.'
    '); + +$calscript = '"; + +$todos = new TODOCollection; + +$priorityselect = new cHTMLSelectElement("priority"); +$priorityselect->autoFill($todos->getPriorityTypes()); +$priorityselect->setDefault($todoitem->getProperty("todo", "priority")); +$ui->add(i18n("Priority"), $priorityselect->render()); + +$statusselect = new cHTMLSelectElement("status"); +$statusselect->autoFill($todos->getStatusTypes()); +$statusselect->setDefault($todoitem->getProperty("todo", "status")); +$ui->add(i18n("Status"), $statusselect->render()); + +$progress = new cHTMLTextbox("progress", (int)$todoitem->getProperty("todo", "progress"),5); +$ui->add(i18n("Progress"), $progress->render()."%"); + +$cpage->setcontent($ui->render().$calscript); + +$cpage->addScript("cal", ' + + + '); + +$cpage->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.mycontenido.tasks.php b/branches/conlite20/conlite/includes/include.mycontenido.tasks.php new file mode 100644 index 0000000..099a470 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.mycontenido.tasks.php @@ -0,0 +1,428 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.mycontenido.tasks.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if (!isset($sortmode)) +{ + $sortmode = $currentuser->getUserProperty("system","tasks_sortmode"); + $sortby = $currentuser->getUserProperty("system","tasks_sortby"); +} + +$dateformat = getEffectiveSetting("backend", "timeformat", "Y-m-d H:i:s"); + +if (isset($_REQUEST["listsubmit"])) +{ + if (isset($c_restrict)) + { + $c_restrict = true; + $currentuser->setUserProperty("mycontenido", "hidedonetasks", "true"); + } else { + $c_restrict = false; + $currentuser->setUserProperty("mycontenido", "hidedonetasks", "false"); + } +} else { + if ($currentuser->getUserProperty("mycontenido", "hidedonetasks") == "true") + { + $c_restrict = true; + } else { + $c_restrict = false; + } +} + +class TODOBackendList extends cScrollList +{ + var $statustypes; + function TODOBackendList () + { + global $todoitems; + + parent::cScrollList(); + + $this->statustypes = $todoitems->getStatusTypes(); + $this->prioritytypes = $todoitems->getPriorityTypes(); + } + + function onRenderColumn ($column) + { + if ($column == 6 || $column == 5) + { + $this->objItem->updateAttributes(array("align" => "center")); + } else { + $this->objItem->updateAttributes(array("align" => "left")); + } + } + + function convert ($key, $value, $hidden) + { + global $link, $dateformat, $cfg; + + if ($key == 2) + { + $link->setCustom("idcommunication", $hidden[1]); + $link->setContent($value); + return $link->render(); + } + + if ($key == 3) + { + return date($dateformat,strtotime($value)); + } + + if ($key == 5) + { + + switch ($value) + { + case "new": + $img = "status_new.gif"; + break; + case "progress": + $img = "status_inprogress.gif"; + break; + case "done": + $img = "status_done.gif"; + break; + case "deferred": + $img = "status_deferred.gif"; + break; + case "waiting": + $img = "status_waiting.gif"; + break; + + default: break; + } + + if (!array_key_exists($value, $this->statustypes)) + { + return i18n("No status type set"); + } + $image = new cHTMLImage($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."reminder/".$img); + $image->setAlt($this->statustypes[$value]); + + //Do not display statuicon, only show statustext + //return $image->render(); + return $this->statustypes[$value]; + } + + if ($key == 7) + { + $amount = $value / 20; + + if ($amount < 0) + { + $amount = 0; + } + + if ($amount > 5) + { + $amount = 5; + } + + $amount = round($amount); + + $image = new cHTMLImage($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."reminder/progress.gif"); + $image->setAlt(sprintf(i18n("%d %% complete"), $value)); + $ret = ""; + + for ($i=0;$i<$amount;$i++) + { + $ret .= $image->render(); + } + + return $ret; + } + + if ($key == 6) + { + switch ($value) + { + case 0: $img = "prio_low.gif"; + $p = "low"; + break; + case 1: $img = "prio_medium.gif"; + $p = "medium"; + break; + case 2: $img = "prio_high.gif"; + $p = "high"; + break; + case 3: $img = "prio_veryhigh.gif"; + $p = "immediately"; + break; + default: break; + } + + $image = new cHTMLImage($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."reminder/".$img); + $image->setAlt($this->prioritytypes[$p]); + return $image->render(); + } + if ($key == 8) + { + if ($value !== "") + { + + if (round($value,2) == 0) + { + return i18n("Today"); + } else { + + if ($value < 0) + { + return number_format(0-$value, 2, ',', '') . " ".i18n("Day(s)"); + } else { + return ''. number_format(0-$value, 2, ',', '') . " ".i18n("Day(s)").''; + } + } + } + } + return $value; + } +} + +if ($action == "todo_save_item") +{ + + $subject = stripslashes($subject); + $message = stripslashes($message); + + $todoitem = new TODOItem; + $todoitem->loadByPrimaryKey($idcommunication); + + $todoitem->set("subject", $subject); + $todoitem->set("message", $message); + $todoitem->set("recipient", $userassignment); + + if (isset($reminderdate)) + { + $todoitem->setProperty("todo", "reminderdate", strtotime($reminderdate)); + } + + if (isset($notibackend)) + { + $todoitem->setProperty("todo", "backendnoti", $notibackend); + } + + if (isset($notiemail)) + { + $todoitem->setProperty("todo", "emailnoti", $notiemail); + } + + $todoitem->setProperty("todo", "status", $status); + + if ($priority < 0) + { + $priority = 0; + } + + if ($priority > 100) + { + $priority = 100; + } + + $todoitem->setProperty("todo", "priority", $priority); + $todoitem->setProperty("todo", "progress", $progress); + + $todoitem->setProperty("todo", "enddate", $enddate); + + $todoitem->store(); + + +} +$cpage = new cPage; + +$todoitems = new TODOCollection; + +if ($action == "mycontenido_tasks_delete") +{ + $todoitems->delete($idcommunication); +} + +$recipient = $auth->auth["uid"]; + +$todoitems->select("recipient = '$recipient' AND idclient='$client'"); + +$list = new TODOBackendList; + +$list->setHeader("",i18n("Subject"),i18n("Created"),i18n("End Date"),i18n("Status"), i18n("Priority"), sprintf(i18n("%% complete")), i18n("Due in"), i18n("Actions")); + + +$lcount = 0; + + +$link = new cHTMLLink; +$link->setCLink("mycontenido_tasks_edit", 4, ""); +$link->setCustom("sortmode", $sortmode); +$link->setCustom("sortby", $sortby); + +while ($todo = $todoitems->next()) +{ + if ((($todo->getProperty("todo", "status") != "done") && ($c_restrict == true))||($c_restrict == '')){ + { + $subject = $todo->get("subject"); + $created = $todo->get("created"); + + + $reminder = $todo->getProperty("todo", "enddate"); + $status = $todo->getProperty("todo", "status"); + $priority = $todo->getProperty("todo", "priority"); + $complete = $todo->getProperty("todo", "progress"); + + if (trim($subject) == "") + { + $subject = i18n("Unnamed item"); + } + + if (trim($reminder) == "") + { + $reminder = i18n("No end date set"); + } else { + $reminder = date($dateformat,strtotime($reminder)); + } + + if (trim($status) == "") + { + $status = i18n("No status set"); + } + + $link->setCustom("idcommunication", $todo->get("idcommunication")); + + + $link->setContent(''); + + $mimg = $link->render(); + + $link->setContent($subject); + + $msubject = $link->render(); + + $idcommunication = $todo->get("idcommunication"); + + $delete = new cHTMLLink; + + $delete->setCLink("mycontenido_tasks", 4, "mycontenido_tasks_delete"); + $delete->setCustom("idcommunication", $idcommunication); + $delete->setCustom("sortby", $sortby); + $delete->setCustom("sortmode", $sortmode); + + $img = new cHTMLImage("images/delete.gif"); + $img->setAlt(i18n("Delete item")); + + $delete->setContent($img->render()); + + $properties = $link; + + $img = new cHTMLImage("images/but_art_conf2.gif"); + $img->setAlt(i18n("Edit item")); + $img->setStyle("padding-right: 4px;"); + $properties->setContent($img); + + $actions = $properties->render() . $delete->render(); + + if ($todo->getProperty("todo", "enddate") != "") + { + $duein = round((time() - strtotime($todo->getProperty("todo", "enddate"))) / 86400,2); + } else { + $duein = ""; + } + + switch ($priority) + { + case "low": $p = 0;break; + case "medium": $p = 1;break; + case "high": $p = 2;break; + case "immediately": $p = 3;break; + default: break; + } + + $list->setData($lcount, $mimg, $subject, $created, $reminder, $status, $p, $complete, $duein, $actions); + $list->setHiddenData($lcount, $idcommunication, $idcommunication); + + $lcount++; + } + } +} + +$form = new UI_Table_Form("restrict"); +$form->addHeader(i18n("Restrict display")); +$form->setVar("listsubmit", "true"); + +$form->unsetActionButton("submit"); +$form->setActionButton("submit", "images/but_refresh.gif", i18n("Refresh"), "s"); + +$form->setVar("area", $area); +$form->setVar("frame", $frame); + +$restrict = new cHTMLCheckbox("c_restrict", "true"); +$restrict->setLabelText(i18n("Hide done tasks")); + +if ($c_restrict == true) +{ + $restrict->setChecked(true); +} + +$submit = new cHTMLButton("submit"); +$submit->setMode("image"); +$submit->setImageSource("images/submit.gif"); + +$form->add(i18n("Options"), $restrict->render()); + +if ($lcount == 0) +{ + $cpage->setContent($form->render()."
    ".i18n("No tasks found")."
    ".markSubMenuItem(1, true)); +} else { + if (!isset($sortby)) + { + $sortby = 1; + } + + if (!isset($sortmode)) + { + $sortmode = "ASC"; + } + + $list->setSortable(1,true); + $list->setSortable(2,true); + $list->setSortable(3,true); + $list->setSortable(4,true); + $list->setSortable(5,true); + $list->setSortable(6,true); + $list->setSortable(7,true); + $list->sort($sortby, $sortmode); + + $cpage->setContent($form->render()."
    ".$list->render(). markSubMenuItem(1, true)); +} +$cpage->render(); + +$currentuser->setUserProperty("system","tasks_sortby", $sortby); +$currentuser->setUserProperty("system","tasks_sortmode", $sortmode); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.mycontenido_lastarticles.php b/branches/conlite20/conlite/includes/include.mycontenido_lastarticles.php new file mode 100644 index 0000000..0c091a1 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.mycontenido_lastarticles.php @@ -0,0 +1,320 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-08-05 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.mycontenido_lastarticles.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes", "functions.con.php"); + +$debug = false; + + $sql = "SELECT + logtimestamp + FROM + ".$cfg["tab"]["actionlog"]." + WHERE + user_id = '".Contenido_Security::escapeDB($auth->auth["uid"], $db). "' + ORDER BY + logtimestamp DESC + LIMIT 2"; + + $db->query($sql); + $db->next_record(); + + $lastlogin = $db->f("logtimestamp"); + + $idaction = $perm->getIDForAction("con_editart"); + + if ($cfg["is_start_compatible"] == true) + { + $sql = "SELECT + a.idart AS idart, + a.idartlang AS idartlang, + a.title AS title, + c.idcat AS idcat, + a.idlang AS idlang, + c.is_start AS is_start, + c.idcatart AS idcatart, + a.idtplcfg AS idtplcfg, + a.online AS online, + a.created AS created, + a.lastmodified AS lastmodified + FROM + ".$cfg["tab"]["art_lang"]." AS a, + ".$cfg["tab"]["art"]." AS b, + ".$cfg["tab"]["cat_art"]." AS c, + ".$cfg["tab"]["actionlog"]." AS d + WHERE + a.idlang = '".Contenido_Security::toInteger($lang)."' AND + a.idart = b.idart AND + b.idclient = '".Contenido_Security::toInteger($client)."' AND + b.idart = c.idart AND + d.idaction = '".Contenido_Security::toInteger($idaction)."' AND + d.user_id = '".Contenido_Security::escapeDB($auth->auth["uid"], $db)."' AND + d.idcatart = c.idcatart + GROUP BY + c.idcatart + ORDER BY + logtimestamp DESC + LIMIT 5"; + } else { + $sql = "SELECT + a.idart AS idart, + a.idartlang AS idartlang, + a.title AS title, + c.idcat AS idcat, + a.idlang AS idlang, + c.idcatart AS idcatart, + a.idtplcfg AS idtplcfg, + a.online AS online, + a.created AS created, + a.lastmodified AS lastmodified + FROM + ".$cfg["tab"]["art_lang"]." AS a, + ".$cfg["tab"]["art"]." AS b, + ".$cfg["tab"]["cat_art"]." AS c, + ".$cfg["tab"]["actionlog"]." AS d + WHERE + a.idlang = '".Contenido_Security::toInteger($lang)."' AND + a.idart = b.idart AND + b.idclient = '".Contenido_Security::toInteger($client)."' AND + b.idart = c.idart AND + d.idaction = '".Contenido_Security::toInteger($idaction)."' AND + d.user_id = '".Contenido_Security::escapeDB($auth->auth["uid"], $db)."' AND + d.idcatart = c.idcatart + GROUP BY + c.idcatart + ORDER BY + logtimestamp DESC + LIMIT 5"; + } + + # Debug info + if ( $debug ) { + + echo "
    ";
    +            echo $sql;
    +            echo "
    "; + + } + + $db->query($sql); + + # Reset Template + $tpl->reset(); + + # No article + $no_article = true; + + $tpl->set('s', 'LASTARTICLES', i18n("Recently edited articles").":".markSubMenuItem(1)); + + while ( $db->next_record() ) { + $idtplcfg = $db->f("idtplcfg"); + $idartlang = $db->f("idartlang"); + $idlang = $db->f("idlang"); + $idcat = $db->f("idcat"); + $idart = $db->f("idart"); + $online = $db->f("online"); + + if ($cfg["is_start_compatible"] == true) + { + $is_start = $db->f("is_start"); + } else { + $is_start = isStartArticle($idartlang, $idcat, $idlang); + } + + $idcatart = $db->f("idcatart"); + $created = $db->f("created"); + $modified = $db->f("lastmodified"); + $category = ""; + conCreateLocationString($idcat, " / ", $category); + if ($category == "") + { + $category = " "; + } + + $bgcolor = ( is_int($tpl->dyn_cnt / 2) ) ? $cfg["color"]["table_light"] : $cfg["color"]["table_dark"]; + + # Backgroundcolor of the table row + $tpl->set('d', 'BGCOLOR', $bgcolor); + + # Article Title + $tmp_alink = $sess->url("frameset.php?area=con&override_area4=con_editcontent&override_area3=con&action=con_editart&idartlang=$idartlang&idart=$idart&idcat=$idcat&idartlang=$idartlang"); + $tpl->set('d', 'ARTICLE', $db->f('title')); + + # Created + $tpl->set('d', 'CREATED', $created); + + # Lastmodified + $tpl->set('d', 'LASTMODIFIED', $modified); + + # Category + $tpl->set('d', 'CATEGORY', $category); + # Article Template + if ( 0 == $idtplcfg ) { # Uses Category Template + $a_tplname = "--- ".i18n("None")." ---"; + $a_idtpl = 0; + + } else { # Has own Template + + if ( !isset($db2) || !is_object($db2) ) { + $db2 = new DB_ConLite; + } + + $sql2 = "SELECT + b.name AS tplname, + b.idtpl AS idtpl + FROM + ".$cfg["tab"]["tpl_conf"]." AS a, + ".$cfg["tab"]["tpl"]." AS b + WHERE + a.idtplcfg = '".Contenido_Security::toInteger($idtplcfg)."' AND + a.idtpl = b.idtpl"; + + $db2->query($sql2); + $db2->next_record(); + + $a_tplname = $db2->f("tplname"); + $a_idtpl = $db2->f("idtpl"); + } + + if ($a_tplname == "") + { + $a_tplname = " "; + } + + $tpl->set('d', 'TPLNAME', $a_tplname); + + # Make Startarticle button + $tmp_img = (1 == $is_start) ? '' : ''; + $tpl->set('d', 'START', $tmp_img); + + if ( $online ) { + $tmp_online = ''.i18n('; + + } else { + $tmp_online = ''.i18n('; + } + + $tpl->set('d', 'ONLINE', $tmp_online); + + + # Next iteration + $tpl->next(); + + # Articles found + $no_article = false; + + } + + # Sortierungs select + $s_types = array(1 => "Alphabetisch", + 2 => "Letze �nderung", + 3 => "Erstellungsdatum"); + + $tpl2 = new Template; + $tpl2->set('s', 'NAME', 'sort'); + $tpl2->set('s', 'CLASS', 'text_medium'); + $tpl2->set('s', 'OPTIONS', 'onchange="artSort(this)"'); + + foreach ($s_types as $key => $value) { + + $selected = ( isset($_GET['sort']) && $_GET['sort'] == $key ) ? 'selected="selected"' : ''; + + $tpl2->set('d', 'VALUE', $key); + $tpl2->set('d', 'CAPTION', $value); + $tpl2->set('d', 'SELECTED', $selected); + $tpl2->next(); + + } + + $select = ( !$no_article ) ? $tpl2->generate($cfg["path"]["templates"] . $cfg['templates']['generic_select'], true) : ''; + $caption = ( !$no_article ) ? 'Artikel sortieren' : ''; + + $tpl->set('s', 'ARTSORTCAPTION', $caption); + $tpl->set('s', 'ARTSORT', $select); + + # Extract Category and Catcfg + $sql = "SELECT + b.name AS name, + d.idtpl AS idtpl + FROM + (".$cfg["tab"]["cat"]." AS a, + ".$cfg["tab"]["cat_lang"]." AS b, + ".$cfg["tab"]["tpl_conf"]." AS c) + LEFT JOIN + ".$cfg["tab"]["tpl"]." AS d + ON + d.idtpl = c.idtpl + WHERE + a.idclient = '".Contenido_Security::toInteger($client)."' AND + a.idcat = '".Contenido_Security::toInteger($idcat)."' AND + b.idlang = '".Contenido_Security::toInteger($lang)."' AND + b.idcat = a.idcat AND + c.idtplcfg = b.idtplcfg"; + + $db->query($sql); + $db->next_record(); + + $cat_idtpl = $db->f("idtpl"); + + # Hinweis wenn kein Artikel gefunden wurde + if ( $no_article ) { + + $tpl->set("d", "START", " "); + $tpl->set("d", "ARTICLE", i18n("No article found")); + $tpl->set("d", "CREATED", " "); + $tpl->set("d", "LASTMODIFIED", " "); + $tpl->set("d", "ARTCONF", " "); + $tpl->set("d", "TPLNAME", " "); + $tpl->set("d", "TPLCONF", " "); + $tpl->set("d", "ONLINE", " "); + $tpl->set('d', 'CATEGORY', ' '); + $tpl->set("d", "DELETE", " "); + + $tpl->next(); + + } + + $cat_name = ""; + + # SELF_URL (Variable f�r das javascript); + $tpl->set('s', 'SELF_URL', $sess->url("main.php?area=con&frame=4&idcat=$idcat")); + + # Neuer Artikel link + $tpl->set('s', 'NEWARTICLE', 'Neuen Artikel erstellen'); + + $tpl->set('s', 'HELP', ""); + + # Generate template + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['mycontenido_lastarticles']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.mycontenido_settings.php b/branches/conlite20/conlite/includes/include.mycontenido_settings.php new file mode 100644 index 0000000..2ff0ee2 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.mycontenido_settings.php @@ -0,0 +1,148 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-10-??, Bilal Arslan - moved password DB queries, added new ConUser object + * modified 2008-11-17, H. Librenz - method calls on new ConUser object modified, comments added + * modified 2011-02-07, Dominik Ziegler, removed integration of not supported java module editor + * + * $Id: include.mycontenido_settings.php 130 2012-09-13 10:34:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$user = new cApiUser($auth->auth["uid"]); + +$noti = ""; + +if ($action == "mycontenido_editself") +{ + + if (!isset($wysi)) + { + $wysi = false; + } + + $error = false; + + if ($newpassword != "") + { + if (md5($oldpassword) != $user->get("password")) + { + $error = i18n("Old password incorrect"); + } + + if (strcmp($newpassword, $newpassword2) != 0) + { + $error = i18n("Passwords don't match"); + } + + + if ($error !== false) + { + $noti = $notification->returnNotification("error", $error)."
    "; + } else { + // New Class User, update password + $oUser = new ConUser($cfg, $db, $auth->auth['uid']); + $iResult = $oUser->savePassword($newpassword); + + #$user->set("password", md5($newpassword)); + + if ( $iResult == iConUser::PASS_OK ) { + $noti = $notification->returnNotification("info", i18n("Password changed"))."
    "; + } else { + $noti = $notification->returnNotification("error", ConUser::getErrorString($iResult, $cfg)); + } + + } + } + + + + $user->set("email", $email); + $user->set("wysi", $wysi); + + $user->setUserProperty("backend", "timeformat", $format); + $user->setUserProperty("backend", "timeformat_date", $formatdate); + $user->setUserProperty("backend", "timeformat_time", $formattime); + $user->store(); +} + + +$settingsfor = sprintf(i18n("Settings for %s"), $user->get("username") . " (".$user->get("realname").")"); + +$form = new UI_Table_Form("settings"); +$form->setWidth('550'); + +$form->setVar("idlang", $lang); +$form->setVar("area", $area); +$form->setVar("action", "mycontenido_editself"); +$form->setVar("frame", $frame); + +$form->addHeader($settingsfor); + +// @since 2006-07-04 Display password fields if not authenticated via LDAP/AD, only +if ($user->get("password") != 'active_directory_auth') { + $oldpassword = new cHTMLPasswordbox("oldpassword"); + $newpassword = new cHTMLPasswordbox("newpassword"); + $newpassword2 = new cHTMLPasswordbox("newpassword2"); + + $form->add(i18n("Old password"), $oldpassword); + $form->add(i18n("New password"), $newpassword); + $form->add(i18n("Confirm new password"), $newpassword2); +} + +$email = new cHTMLTextbox("email", $user->get("email")); +$form->add(i18n("E-Mail"), $email); + +$wysiwyg = new cHTMLCheckbox("wysi", 1); +$wysiwyg->setChecked($user->get("wysi")); +$wysiwyg->setLabelText(i18n("Use WYSIWYG Editor")); + +$form->add(i18n("Options"), array($wysiwyg)); + +$formathint = "
    ".i18n("The format is equal to PHP's date() function."); +$formathint.= "
    "; +$formathint.= i18n("Common date formattings").":"; +$formathint.= "
    "; +$formathint.= "d M Y H:i => 01 Jan 2004 00:00"; +$formathint.= "
    "; +$formathint.= "d.m.Y H:i:s => 01.01.2004 00:00:00"; + +$format = new cHTMLTextbox("format", $user->getUserProperty("backend", "timeformat")); +$format2 = new cHTMLTextbox("formatdate", $user->getUserProperty("backend", "timeformat_date")); +$format3 = new cHTMLTextbox("formattime", $user->getUserProperty("backend", "timeformat_time")); + +$form->add(i18n("Date/Time format"), array($format, $formathint)); +$form->add(i18n("Date format"), array($format2)); +$form->add(i18n("Time format"), array($format3)); + +$page = new cPage(); +$page->setContent(array($noti, $form, markSubMenuItem(3, true))); +$page->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.note.display.php b/branches/conlite20/conlite/includes/include.note.display.php new file mode 100644 index 0000000..4e6a378 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.note.display.php @@ -0,0 +1,51 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.note.display.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if ($action == "note_delete") +{ + $oNoteCollection = new NoteCollection; + $oNoteCollection->delete($deleteitem); +} + +$page = new cPage; + +$oNoteList = new NoteList($itemtype, $itemid); +$oNoteList->setDeleteable(true); + +$page->setExtra('background: '.$cfg["color"]["table_light"]); +$page->setMargin(0); +$page->setContent($oNoteList); +$page->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.note.popup.php b/branches/conlite20/conlite/includes/include.note.popup.php new file mode 100644 index 0000000..88c9227 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.note.popup.php @@ -0,0 +1,100 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.note.popup.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$cpage = new cPage; + +if ($action == "note_save_item") +{ + $notes = new NoteCollection; + + $note = stripslashes(nl2br($note)); + + if ($category != "") + { + $categoryname = $category; + } + + if ($categoryentry != "") + { + $categoryname = $categoryentry; + } + + $item = $notes->create($itemtype, $itemid, $lang, $note, $categoryname); + $item->store(); + + $cpage->setContent(""); +} else { + $list = new NoteView($itemtype, $itemid); + $list->setWidth("100%"); + $list->setStyleDefinition("margin-bottom", "10px"); + $ui = new UI_Table_Form("note"); + $ui->addHeader(i18n("Add note")); + + $ui->setVar("area",$area); + $ui->setVar("frame", $frame); + $ui->setVar("action", "note_save_item"); + $ui->setVar("itemtype", $itemtype); + $ui->setVar("itemid", $itemid); + + /* Fetch all note categors */ + $dbprop = new DB_ConLite; + $dbprop->query("SELECT DISTINCT value FROM ".$cfg["tab"]["properties"] .' where type="note" AND name="category"'); + + $categories = array("" => i18n("No category")); + + $oNoteItem = new NoteItem; + + while ($dbprop->next_record()) + { + $sValue = $oNoteItem->_outFilter($dbprop->f("value")); + $categories[$sValue] = $sValue; + } + + $cselect = new cHTMLSelectElement("category"); + $cselect->autoFill($categories); + + $centry = new cHTMLTextbox("categoryentry", "", 30); + + $message = new cHTMLTextarea("note"); + $message->setStyle("width: 100%"); + $ui->add(i18n("Note"), $message->render()); + $ui->add(i18n("Category"), array($cselect, $centry)); + $ui->setWidth("100%"); + + $cpage->setcontent($list->render().$ui->render()); +} +$cpage->render(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.pretplcfg_edit.php b/branches/conlite20/conlite/includes/include.pretplcfg_edit.php new file mode 100644 index 0000000..60b9b0a --- /dev/null +++ b/branches/conlite20/conlite/includes/include.pretplcfg_edit.php @@ -0,0 +1,106 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2002 + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2009-10-23, Ortwin Pinke, deleted not needed idcat/idart part for better performance + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.pretplcfg_edit.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if ( !isset($idtplcfg) ) { + + $sql = "SELECT + idtplcfg + FROM + ".$cfg["tab"]["tpl"]." + WHERE + idtpl = '".Contenido_Security::toInteger($idtpl)."'"; + + $db->query($sql); + $db->next_record(); + + $idtplcfg = $db->f("idtplcfg"); + + if ( $idtplcfg == 0 ) { + + $nextid = $db->nextid($cfg["tab"]["tpl_conf"]); + $timestamp = time(); + + $sql = "UPDATE ".$cfg["tab"]["tpl"]." SET idtplcfg = '".Contenido_Security::toInteger($nextid)."' WHERE idtpl = '".Contenido_Security::toInteger($idtpl)."'"; + $db->query($sql); + + $sql = "INSERT INTO ".$cfg["tab"]["tpl_conf"]." + (idtplcfg, idtpl, status, author, created, lastmodified) + VALUES + ('".Contenido_Security::toInteger($nextid)."', '".Contenido_Security::toInteger($idtpl)."', '', '', '".$timestamp."', '".$timestamp."')"; + + $db->query($sql); + $idtplcfg = $nextid; + } + +} + +if (isset($idtplcfg)) { + $sql = "SELECT number FROM ".$cfg["tab"]["container"]." WHERE idtpl='".Contenido_Security::toInteger($idtpl)."'"; + $db->query($sql); + while ($db->next_record()) { + $i = $db->f("number"); + $CiCMS_VAR = "C".$i."CMS_VAR"; + if (isset($_POST[$CiCMS_VAR])) { + $tmp = $_POST[$CiCMS_VAR]; + } else { + unset($tmp); + } + if (isset($tmp)) { + foreach ($tmp as $key=>$value) { + $value = urlencode($value); + if (!isset($varstring[$i])) $varstring[$i]=""; + $varstring[$i] = $varstring[$i].$key."=".$value."&"; + } +# $varstring[$i] = preg_replace("/&$/", "", $varstring[$i]); + } + } + + // update/insert in container_conf + if (isset($varstring) && is_array($varstring)) { + // delete all containers + $sql = "DELETE FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg='".Contenido_Security::toInteger($idtplcfg)."'"; + $db->query($sql); + + foreach ($varstring as $col=>$val) { + // insert all containers + $sql = "INSERT INTO ".$cfg["tab"]["container_conf"]." (idcontainerc, idtplcfg, number, container) ". + "VALUES ('".$db->nextid($cfg["tab"]["container_conf"])."', '".Contenido_Security::toInteger($idtplcfg)."', '".Contenido_Security::toInteger($col)."', '".Contenido_Security::escapeDB($val, $db)."') "; + $db->query($sql); + } + } +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.pretplcfg_edit_form.php b/branches/conlite20/conlite/includes/include.pretplcfg_edit_form.php new file mode 100644 index 0000000..7514146 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.pretplcfg_edit_form.php @@ -0,0 +1,160 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2002 + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.pretplcfg_edit_form.php 74 2012-05-24 18:49:58Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$tpl->reset(); + +$sql = "SELECT * FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg='".Contenido_Security::toInteger($idtplcfg)."'"; +$db->query($sql); + +$a_c = array(); + +while ($db->next_record()) { + $a_c[$db->f("number")] = $db->f("container"); // 'varstring' is safed in $a_c +} + +//Form +$formaction = $sess->url("main.php"); +# +$hidden = ' + + + + + + + '; + +$tpl->set('s', 'FORMACTION', $formaction ); +$tpl->set('s', 'HIDDEN', $hidden ); + + +$sql = "SELECT + idtpl, + name + FROM + ".$cfg["tab"]["tpl"]." + WHERE + idclient = '".Contenido_Security::toInteger($client)."' AND + idtpl = '".Contenido_Security::toInteger($idtpl)."'"; + +$db->query($sql); +$db->next_record(); + +$tpl->set('s', 'TEMPLATECAPTION', i18n("Template"). ": "); +$tpl->set('s', 'TEMPLATESELECTBOX', $db->f("name")); + +//************** For all Containers list module input +$sql = "SELECT + * + FROM + ".$cfg["tab"]["container"]." + WHERE + idtpl='".Contenido_Security::toInteger($idtpl)."' ORDER BY idcontainer ASC"; + +$db->query($sql); +while ($db->next_record()) { + $a_d[$db->f("number")] = $db->f("idmod"); // 'list of used modules' is safed in $a_d +} + +if (isset($a_d) && is_array($a_d)) { + foreach ($a_d as $cnumber=>$value) { + // nur die Container anzeigen, in denen auch ein Modul enthalten ist + if ($value != 0) { + global $cCurrentModule; + + $oModule = new cApiModule((int) $a_d[$cnumber]); + $input = $oModule->get("input")."\n"; + $cCurrentModule = $oModule->get("idmod"); + $modulecaption = sprintf(i18n("Module in Container %s"), $cnumber); + $modulename = $oModule->get("name"); + unset($oModule); + + $varstring = array(); + if (isset($a_c[$cnumber])) { + $a_c[$cnumber] = preg_replace("/&$/", "", $a_c[$cnumber]); + $tmp1 = preg_split("/&/", $a_c[$cnumber]); + + foreach ($tmp1 as $key1=>$value1) { + $tmp2 = explode("=", $value1); + foreach ($tmp2 as $key2=>$value2) { + $varstring[$tmp2[0]]=$tmp2[1]; + } + } + } + $CiCMS_Var = '$C'.$cnumber.'CMS_VALUE'; + $CiCMS_VALUE = ''; + + foreach ($varstring as $key3=>$value3){ + $tmp = urldecode($value3); + $tmp = str_replace("\'", "'", $tmp); + $CiCMS_VALUE .= $CiCMS_Var.'['.$key3.']="'.$tmp.'"; '; + $input = str_replace("\$CMS_VALUE[$key3]", $tmp, $input); + $input = str_replace("CMS_VALUE[$key3]", $tmp, $input); + } + + $input = str_replace("CMS_VALUE", $CiCMS_Var, $input); + $input = str_replace("\$".$CiCMS_Var, $CiCMS_Var, $input); + $input = str_replace("CMS_VAR", "C".$cnumber."CMS_VAR" , $input); + + ob_start(); + eval($CiCMS_VALUE." \r\n ".$input); + $modulecode = ob_get_contents(); + ob_end_clean(); + + $tpl->set('d', 'MODULECAPTION', $modulecaption); + $tpl->set('d', 'MODULENAME', $modulename); + $tpl->set('d', 'MODULECODE', $modulecode); + $tpl->next(); + + } + } +} + +$tpl->set('s', 'SCRIPT', ''); +$tpl->set('s', 'MARKSUBMENU', ''); +$tpl->set('s', 'CATEGORY', ''); + +$tpl->set('s', 'HEADER', i18n('Template preconfiguration')); +$tpl->set('s', 'DISPLAY_HEADER', 'block'); + +$buttons = '     + '; + +$tpl->set('s', 'BUTTONS', $buttons); + +# Generate template +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['tplcfg_edit_form']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.rights_create.php b/branches/conlite20/conlite/includes/include.rights_create.php new file mode 100644 index 0000000..67e6a3e --- /dev/null +++ b/branches/conlite20/conlite/includes/include.rights_create.php @@ -0,0 +1,316 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-30 + * modified 2008-06-24, Timo Trautmann, storage for valid from valid to added + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-11-17, H. Librenz - new ConUser class are used for user creation now, comments fixed, code formatted + * modified 2008-11-18, H. Librenz - values given during a submittion try are now resubmitted + * modified 2010-05-31, Ortwin Pinke, PHP >= 5.3, replace deprecated split-function with explode() + * modified 2011-02-07, Murat Purc, Cleanup, optimization and formatting + * + * $Id: include.rights_create.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude('includes', 'functions.rights.php'); + +if (!$perm->have_perm_area_action($area, $action)) { + $notification->displayNotification("error", i18n("Permission denied")); + return; +} + +$aPerms = array(); +$sNotification = ''; +$bError = false; + +if ($action == 'user_createuser') { + if ($username == '') { + $sNotification = $notification->returnNotification("warning", i18n("Username can't be empty")); + $bError = true; + } else { + + $aPerms = buildUserOrGroupPermsFromRequest(true); + + $oUser = new ConUser($cfg, $db); + + if (strcmp($password, $passwordagain) == 0) { + + // ok, both passwords given are equal, but is the password valid? + $iPassCheck = $oUser->setPassword($password); + + if ($iPassCheck == iConUser::PASS_OK) { + // yes, it is.... + try { + $oUser->setUserName($username); + $oUser->setRealName($realname); + $oUser->setMail($email); + $oUser->setTelNumber($telephone); + $oUser->setStreet($address_street); + $oUser->setCity($address_city); + $oUser->setZip($address_zip); + $oUser->setCountry($address_country); + $oUser->setUseTiny($wysi); + $oUser->setValidDateFrom($valid_from); + $oUser->setValidDateTo($valid_to); + $oUser->setPerms($aPerms); + $oUser->setPassword($password); + + if ($oUser->save()) { + // save user id and clean "old" values... + $sNotification = $notification->returnNotification("info", i18n("User created")); + $userid = $oUser->getUserId(); + + $username = ''; + $realname = ''; + $email = ''; + $telephone = ''; + $address_city = ''; + $address_country = ''; + $address_street = ''; + $address_zip = ''; + $wysi = ''; + $valid_from = ''; + $valid_to = ''; + $aPerms = array(); + $password = ''; + } + + } catch (ConUserException $cue) { + switch ($cue->getCode()) { + case iConUser::EXCEPTION_USERNAME_EXISTS: + $sNotification = $notification->returnNotification("warning", i18n("Username already exists")); + $bError = true; + break; + default: + $sNotification = $notification->returnNotification("warning", i18n("Unknown error") . ": " . $cue->getMessage()); + $bError = true; + break; + } + } + } else { + // oh oh, password is NOT valid. check it... + $sNotification = $notification->returnNotification("warning", ConUser::getErrorString($iPassCheck, $cfg)); + $bError = true; + } + + } else { + $sNotification = $notification->returnNotification("warning", i18n("Passwords don't match")); + $bError = true; + } + } +} + + +$tpl->reset(); +$tpl->set('s','NOTIFICATION', $sNotification); + +$form = '
    + ' . $sess->hidden_session(true) . ' + + + + '; + +$tpl->set('s', 'FORM', $form); +$tpl->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('s', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('s', 'SUBMITTEXT', i18n("Save changes")); + +$tpl->set('d', 'CATNAME', i18n("Property")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_header"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', i18n("Value")); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Username")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'username', $username, 40, 32)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Name")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'realname', $realname, 40, 255)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("New password")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('password', 'password', '', 40, 255)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Confirm new password")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('password', 'passwordagain', '', 40, 255)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("E-Mail")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'email', $email, 40, 255)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Phone number")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'telephone', $telephone, 40, 255)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Street")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'address_street', $address_street, 40, 255)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("ZIP code")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'address_zip', $address_zip, 10, 10)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("City")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'address_city', $address_city, 40, 255)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Country")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'address_country', $address_country, 40, 255)); +$tpl->next(); + +// permissions of current logged in user +$aAuthPerms = explode(',', $auth->auth['perm']); + +// sysadmin perm +if (in_array('sysadmin', $aAuthPerms)) { + $tpl->set('d', 'CATNAME', i18n("System administrator")); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', 'CATFIELD', formGenerateCheckbox('msysadmin', '1', in_array('sysadmin', $aPerms))); + $tpl->next(); +} + +// clients admin perms +$oClientsCollection = new cApiClientCollection(); +$aClients = $oClientsCollection->getAvailableClients(); +$sClientCheckboxes = ''; +foreach ($aClients as $idclient => $item) { + if (in_array("admin[" . $idclient . "]", $aAuthPerms) || in_array('sysadmin', $aAuthPerms)) { + $sClientCheckboxes .= formGenerateCheckbox("madmin[" . $idclient . "]", $idclient, in_array("admin[" . $idclient . "]", $aPerms), $item['name'] . "(" . $idclient . ")") . "
    "; + } +} + +if ($sClientCheckboxes !== '') { + $tpl->set('d', 'CATNAME', i18n("Administrator")); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', 'CATFIELD', $sClientCheckboxes); + $tpl->next(); +} + +// clients perms +$sClientCheckboxes = ''; +foreach ($aClients as $idclient => $item) { + if (in_array("client[" . $idclient . "]", $aAuthPerms) || in_array('sysadmin', $aAuthPerms) || in_array("admin[" . $idclient . "]", $aAuthPerms)) { + $sClientCheckboxes .= formGenerateCheckbox("mclient[" . $idclient . "]", $idclient, in_array("client[" . $idclient . "]", $aPerms), $item['name'] . "(" . $idclient . ")") . "
    "; + } +} + +$tpl->set('d', 'CATNAME', i18n("Access clients")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'CATFIELD', $sClientCheckboxes); +$tpl->next(); + +// languages perms +$aClientsLanguages = getAllClientsAndLanguages(); +$sClientCheckboxes = ''; +foreach ($aClientsLanguages as $item) { + if ($perm->have_perm_client("lang[" . $item['idlang'] . "]") || $perm->have_perm_client("admin[" . $item['idclient'] . "]")) { + $sClientCheckboxes .= formGenerateCheckbox("mlang[" . $item['idlang'] . "]", $item['idlang'], in_array("lang[" . $item['idlang'] . "]", $aPerms), $item['langname'] . "(" . $item['clientname'] . ")") . "
    "; + } +} + +$tpl->set('d', 'CATNAME', i18n("Access languages")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'CATFIELD', $sClientCheckboxes); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Use WYSIWYG-Editor")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'CATFIELD', formGenerateCheckbox('wysi', '1', ((int) $wysi == 1))); +$tpl->next(); + +$sInputValidFrom = ' + + + '; +$sInputValidFrom .= ' '; +$sInputValidFrom .= ''; + +$tpl->set('d', 'CATNAME', i18n("Valid from")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'CATFIELD', $sInputValidFrom); +$tpl->next(); + +$sInputValidTo = ' '; +$sInputValidTo .= ''; + +$tpl->set('d', 'CATNAME', i18n("Valid to")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'CATFIELD', $sInputValidTo); +$tpl->next(); + +// Generate template +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['rights_create']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.rights_external.php b/branches/conlite20/conlite/includes/include.rights_external.php new file mode 100644 index 0000000..19b54d4 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.rights_external.php @@ -0,0 +1,58 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-16, Holger Librenz, Hotfix: added check for invalid calls + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.rights_external.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +// @TODO: check if the code beneath is necessary +if (isset($_REQUEST['sAreaFilename'])) { + die ('Illegal call!'); +} + +$_cecIterator = $_cecRegistry->getIterator("Contenido.Permissions.User.GetAreaEditFilename"); + +while ($chainEntry = $_cecIterator->next()) +{ + $aInfo = $chainEntry->execute($_REQUEST["external_area"]); + if ($aInfo !== false) + { + $sAreaFilename = $aInfo; + break; + } +} + +if ($sAreaFilename !== false) +{ + include($sAreaFilename); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.rights_left_top.php b/branches/conlite20/conlite/includes/include.rights_left_top.php new file mode 100644 index 0000000..77c9e46 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.rights_left_top.php @@ -0,0 +1,199 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-29 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.rights_left_top.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$oUser = new cApiUser($auth->auth["uid"]); +if (!isset($elemperpage) || !is_numeric($elemperpage) || $elemperpage < 0) +{ + $elemperpage = $oUser->getProperty("itemsperpage", $area); + $_REQUEST['elemperpage'] = $elemperpage; + if ((int) $elemperpage <= 0) { + $oUser->setProperty("itemsperpage", $area, 25); + $elemperpage = 25; + $_REQUEST['elemperpage'] = 25; + } +} else { + $oUser->setProperty("itemsperpage", $area, $elemperpage); + $_REQUEST['elemperpage'] = $elemperpage; +} + +// The following lines unset all right objects since +// I don't know (or I was unable to find out) if they +// are global and/or session variables - so if you are +// switching between groups and user management, we are +// safe. +unset($right_list); +unset($rights_list_old); +unset($rights_perms); +$right_list = ""; +$rights_list_old = ""; +$rights_perms = ""; + +$tpl->set('s', 'ID', 'restrict'); +$tpl->set('s', 'CLASS', 'text_medium'); +$tpl->set('s', 'OPTIONS', ''); +$tpl->set('s', 'SID', $sess->id); +$tpl->set('s', 'SESSID', $sess->id); + + +$tpl2 = new Template; +$tpl2->set('s', 'NAME', 'restrict'); +$tpl2->set('s', 'CLASS', 'text_medium'); +$tpl2->set('s', 'OPTIONS', 'onchange="userChangeRestriction()"'); + +$limit = array( + "2" => i18n("All"), + "1" => i18n("Frontend only"), + "3" => i18n("Backend only")); + +foreach ($limit as $key => $value) { + + if ($restrict == $key) + { + $selected = "selected"; + } else { + $selected = ""; + } + + $tpl2->set('d', 'VALUE', $key); + $tpl2->set('d', 'CAPTION', $value); + $tpl2->set('d', 'SELECTED', $selected); + $tpl2->next(); + +} + +$select = $tpl2->generate($cfg["path"]["templates"] . $cfg['templates']['generic_select'], true); + +$tpl->set('s', 'ACTION', ''); + +$tmp_mstr = '
    + %s
    '; +$area = "user"; +$mstr = sprintf($tmp_mstr, 'right_bottom',$sess->url("main.php?area=user_create&frame=4"),i18n("Create user")); + +if ($perm->have_perm_area_action('user_create', "user_createuser")) { + $tpl->set('s', 'NEWUSER', $mstr); +} else { + $tpl->set('s', 'NEWUSER', ''); +} +$tpl->set('s', 'CAPTION', ''); + +################# +# List Options +################# +$aSortByOptions = array( "username" => i18n("User name"), + "realname" => i18n("Name")); + +$aSortOrderOptions = array( "asc" => i18n("Ascending"), + "desc" => i18n("Descending")); + +$listOptionId="listoption"; +$tpl->set('s', 'LISTOPLINK', $listOptionId); +$oListOptionRow = new cFoldingRow( "5498dbba-ed4a-4618-8e49-3a3635396e22", i18n("List options"), $listOptionId); +$oListOptionRow->setExpanded('true'); +$oSelectItemsPerPage = new cHTMLSelectElement("elemperpage"); +$oSelectItemsPerPage->autoFill(array(25 => 25, 50 => 50, 75 => 75, 100 => 100)); +$oSelectItemsPerPage->setDefault($_REQUEST["elemperpage"]); + +$oSelectSortBy = new cHTMLSelectElement("sortby"); +$oSelectSortBy->autoFill($aSortByOptions); +$oSelectSortBy->setDefault($_REQUEST["sortby"]); + +$oSelectSortOrder = new cHTMLSelectElement("sortorder"); +$oSelectSortOrder->autoFill($aSortOrderOptions); +$oSelectSortOrder->setDefault($_REQUEST["sortorder"]); + +$oTextboxFilter = new cHTMLTextbox("filter", $_REQUEST["filter"], 20); +$oTextboxFilter->setStyle('width:114px;'); + +$content = '
    '; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= ''; +$content .= '
    '. i18n("Items / page").''.$oSelectItemsPerPage->render().'
    '. i18n("Sort by").''.$oSelectSortBy->render().'
    '. i18n("Sort order").''.$oSelectSortOrder->render().'
    '. i18n("Search for").''.$oTextboxFilter->render().'
     
    '; +$content .= ''; +$content .= '
    '; +$oListOptionRow->setContentData($content); +$tpl->set('s', 'LISTOPTIONS', $oListOptionRow->render()); + +######### +# Paging +######### +$cApiUserCollection = new cApiUserCollection; +$cApiUserCollection->query(); +$iItemCount = $cApiUserCollection->count(); + +$oPagerLink = new cHTMLLink; +$oPagerLink->setLink("main.php"); +$oPagerLink->setTargetFrame('left_bottom'); +$oPagerLink->setCustom("elemperpage", $elemperpage); +$oPagerLink->setCustom("filter", $_REQUEST["filter"]); +$oPagerLink->setCustom("sortby", $_REQUEST["sortby"]); +$oPagerLink->setCustom("sortorder", $_REQUEST["sortorder"]); +$oPagerLink->setCustom("frame", 2); +$oPagerLink->setCustom("area", $area); +$oPagerLink->enableAutomaticParameterAppend(); +$oPagerLink->setCustom("contenido", $sess->id); + +$pagerID="pager"; +$oPager = new cObjectPager("44b41691-0dd4-443c-a594-66a8164e25fd", $iItemCount, $elemperpage, $page, $oPagerLink, "page", $pagerID); +$oPager->setExpanded('true'); +$tpl->set('s', 'PAGINGLINK', $pagerID); +$tpl->set('s', 'PAGING', $oPager->render()); + + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['rights_left_top']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.rights_menu.php b/branches/conlite20/conlite/includes/include.rights_menu.php new file mode 100644 index 0000000..49288dc --- /dev/null +++ b/branches/conlite20/conlite/includes/include.rights_menu.php @@ -0,0 +1,256 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-23 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2009-11-06, Murat Purc, replaced deprecated functions (PHP 5.3 ready) + * + * $Id: include.rights_menu.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$oPage = new cPage; + +$cApiUserCollection = new cApiUserCollection; +$cApiUserCollection->query(); +$iSumUsers = $cApiUserCollection->count(); + +if (isset($_REQUEST["sortby"]) && $_REQUEST["sortby"] != "") +{ + $cApiUserCollection->setOrder($_REQUEST["sortby"]. " ". $_REQUEST["sortorder"]); +} else { + $cApiUserCollection->setOrder("username asc"); +} + +if (isset($_REQUEST["filter"]) && $_REQUEST["filter"] != "") +{ + $cApiUserCollection->setWhereGroup("default", "username", "%".$_REQUEST["filter"]."%", "LIKE"); + $cApiUserCollection->setWhereGroup("default", "realname", "%".$_REQUEST["filter"]."%", "LIKE"); + $cApiUserCollection->setWhereGroup("default", "email", "%".$_REQUEST["filter"]."%", "LIKE"); + $cApiUserCollection->setWhereGroup("default", "telephone", "%".$_REQUEST["filter"]."%", "LIKE"); + $cApiUserCollection->setWhereGroup("default", "address_street", "%".$_REQUEST["filter"]."%", "LIKE"); + $cApiUserCollection->setWhereGroup("default", "address_zip", "%".$_REQUEST["filter"]."%", "LIKE"); + $cApiUserCollection->setWhereGroup("default", "address_city", "%".$_REQUEST["filter"]."%", "LIKE"); + $cApiUserCollection->setWhereGroup("default", "address_country", "%".$_REQUEST["filter"]."%", "LIKE"); + + $cApiUserCollection->setInnerGroupCondition("default", "OR"); +} +$cApiUserCollection->query(); + +$aCurrentUserPermissions = explode(',', $auth->auth['perm']); +$aCurrentUserAccessibleClients = $classclient->getAccessibleClients(); + +$iMenu = 0; +$iItemCount = 0; +$mPage = $_REQUEST["page"]; + +if ($mPage == 0) +{ + $mPage = 1; +} + +$elemperpage = $_REQUEST["elemperpage"]; + +if ($elemperpage == 0) +{ + $elemperpage = 25; +} + +$mlist = new UI_Menu; +$sToday = date('Y-m-d'); + + +if (($elemperpage*$mPage) >= $iSumUsers+$elemperpage && $mPage != 1) { + $_REQUEST["page"]--; + $mPage--; +} + +while ($cApiUser = $cApiUserCollection->next()) +{ + $userid = $cApiUser->get("user_id"); + + $aUserPermissions = explode(',', $cApiUser->get('perms')); + + $bDisplayUser = false; + + if (in_array("sysadmin", $aCurrentUserPermissions)) + { + $bDisplayUser = true; + } + + foreach ($aCurrentUserAccessibleClients as $key => $value) + { + if (in_array("client[$key]", $aUserPermissions)) + { + $bDisplayUser = true; + } + } + + foreach ($aUserPermissions as $sLocalPermission) + { + if (in_array($sLocalPermission, $aCurrentUserPermissions)) + { + $bDisplayUser = true; + } + } + + $link = new cHTMLLink; + $link->setMultiLink("user", "", "user_overview", ""); + $link->setCustom("userid", $cApiUser->get("user_id")); + + if ($bDisplayUser == true) + { + $iItemCount++; + + if ($iItemCount > ($elemperpage * ($mPage - 1)) && $iItemCount < (($elemperpage * $mPage) + 1)) + { + if ($perm->have_perm_area_action('user',"user_delete") ) { + $message = sprintf(i18n("Do you really want to delete the user %s?"), $cApiUser->get("username")); + + $delTitle = i18n("Delete user"); + $deletebutton = ''.$delTitle.''; + + } else { + $deletebutton = ""; + } + + $iMenu++; + + if (($sToday < $cApiUser->get("valid_from") + && $cApiUser->get("valid_from") != '0000-00-00' + && $cApiUser->get("valid_from") != '1000-01-01' + && $cApiUser->get("valid_from") != '') + || ($sToday > $cApiUser->get("valid_to") + && $cApiUser->get("valid_to") != '0000-00-00' + && $cApiUser->get("valid_to") != '1000-01-01' + && $cApiUser->get("valid_from") != '')) { + $mlist->setTitle($iMenu, ''.$cApiUser->get("username")."
    ".$cApiUser->get("realname").'
    '); + } else { + $mlist->setTitle($iMenu, $cApiUser->get("username")."
    ".$cApiUser->get("realname")); + } + + $mlist->setLink($iMenu, $link); + $mlist->setActions($iMenu, "delete", $deletebutton); + + if ($_GET['userid'] == $cApiUser->get("user_id")) { + $mlist->setExtra($iMenu, 'id="marked" '); + } + } + } + +} + +$deleteScript = ''; + +$markActiveScript = ''; + // +$oPage->setMargin(0); +$oPage->addScript('rowMark.js', ''); +$oPage->addScript('parameterCollector.js', ''); +$oPage->addScript('messagebox', ''); +$oPage->addScript('delete', $deleteScript); +$oPage->setContent($mlist->render(false).$markActiveScript); + +//generate current content for Object Pager +$oPagerLink = new cHTMLLink; +$oPagerLink->setLink("main.php"); +$oPagerLink->setTargetFrame('left_bottom'); +$oPagerLink->setCustom("elemperpage", $elemperpage); +$oPagerLink->setCustom("filter", $_REQUEST["filter"]); +$oPagerLink->setCustom("sortby", $_REQUEST["sortby"]); +$oPagerLink->setCustom("sortorder", $_REQUEST["sortorder"]); +$oPagerLink->setCustom("frame", $frame); +$oPagerLink->setCustom("area", $area); +$oPagerLink->enableAutomaticParameterAppend(); +$oPagerLink->setCustom("contenido", $sess->id); + +$pagerID="pager"; +$oPager = new cObjectPager("44b41691-0dd4-443c-a594-66a8164e25fd", $iItemCount, $elemperpage, $page, $oPagerLink, "page", $pagerID); + + +//add slashes, to insert in javascript +$sPagerContent = $oPager->render(1); +$sPagerContent = str_replace('\\', '\\\\', $sPagerContent); +$sPagerContent = str_replace('\'', '\\\'', $sPagerContent); + +//send new object pager to left_top +$sRefreshPager = ' + '; +$oPage->addScript('refreshpager', $sRefreshPager); + +$oPage->render(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.rights_overview.php b/branches/conlite20/conlite/includes/include.rights_overview.php new file mode 100644 index 0000000..5bd1988 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.rights_overview.php @@ -0,0 +1,469 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-30 + * modified 2008-06-24, Timo Trautmann, storage for valid from valid to added + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-08-26, Timo Trautmann - fixed CON-200 - User can only get lang rights, if he has client access + * modified 2008-10-??, Bilal Arslan - direct DB user modifications are now encapsulated in new ConUser class + * modified 2008-11-17, Holger Librenz - method calls for new user object modified, comments updated + * modified 2009-11-06, Murat Purc, replaced deprecated functions (PHP 5.3 ready) + * modified 2011-02-07, Murat Purc, Cleanup, optimization and formatting + * + * $Id: include.rights_overview.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + * TODO error handling!!! + * TODO export functions to new ConUser object! + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude('includes', 'functions.rights.php'); + + +if (!($perm->have_perm_area_action($area, $action) || $perm->have_perm_area_action('user', $action))) { + // access denied + $notification->displayNotification("error", i18n("Permission denied")); + return; +} + +if (!isset($userid)) { + // no user id, get out here + return; +} + +$aPerms = array(); +$bError = false; +$sNotification = ''; + +// delete user +if ($action == 'user_delete') { + $oUsers = new Users(); + $oUsers->deleteUserByID($userid); + + $sql = "DELETE FROM " . $cfg["tab"]["groupmembers"] + . " WHERE user_id = '" . Contenido_Security::escapeDB($userid, $db) . "'"; + $db->query($sql); + + $sql = "DELETE FROM " . $cfg["tab"]["rights"] + ." WHERE user_id = '" . Contenido_Security::escapeDB($userid, $db) . "'"; + $db->query($sql); + + $sNotification = $notification->displayNotification("info", i18n("User deleted")); + $sTemplate = ' + + + + + + + +{NOTIFICATION} + + + '; + + $tpl->reset(); + $tpl->set('s', 'NOTIFICATION', $sNotification); + $tpl->generate($sTemplate); + return; +} + +// edit user +if ($action == 'user_edit') { + $aPerms = buildUserOrGroupPermsFromRequest(); + + // update user values + // New Class User, update password and other values + $oConUser = new ConUser($cfg, $db); + $oConUser->setUserId($userid); + $oConUser->setRealName($realname); + $oConUser->setMail($email); + $oConUser->setTelNumber($telephone); + $oConUser->setAddressData($address_street, $address_city, $address_zip, $address_country); + $oConUser->setUseTiny($wysi); + $oConUser->setValidDateFrom($valid_from); + $oConUser->setValidDateTo($valid_to); + $oConUser->setPerms($aPerms); + + // is a password set? + $bPassOk = false; + if (strlen($password) > 0) { + // yes --> check it... + if (strcmp($password, $passwordagain) == 0) { + // set password.... + $iPasswordSaveResult = $oConUser->setPassword($password); + + // fine, passwords are the same, but is the password valid? + if ($iPasswordSaveResult != iConUser::PASS_OK) { + // oh oh, password is NOT valid. check it... + $sPassError = ConUser::getErrorString($iPasswordSaveResult, $cfg); + $sNotification = $notification->returnNotification("error", $sPassError); + $bError = true; + } else { + $bPassOk = true; + } + } else { + $sNotification = $notification->returnNotification("error", i18n("Passwords don't match")); + $bError = true; + } + } + + if (strlen($password) == 0 || $bPassOk == true) { + try { + // save, if no error occured.. + if ($oConUser->save()) { + $sNotification = $notification->returnNotification("info", i18n("Changes saved")); + $bError = true; + } else { + $sNotification = $notification->returnNotification("error", i18n("An error occured while saving user info.")); + $bError = true; + } + } catch (ConUserException $cue) { + // TODO make check and info ouput better! + $sNotification = $notification->returnNotification("error", i18n("An error occured while saving user info.")); + $bError = true; + } + } +} + + +// TODO port this to new ConUser class! +$oUser = new User(); +$oUser->loadUserByUserID(Contenido_Security::escapeDB($userid, $db)); + +// delete user property +if (is_string($del_userprop_type) && is_string($del_userprop_name)) { + $oUser->deleteUserProperty($del_userprop_type, $del_userprop_name); +} + +// edit user property +if (is_string($userprop_type) && is_string($userprop_name) && is_string($userprop_value) + && !empty($userprop_type) && !empty($userprop_name)) { + $oUser->setUserProperty($userprop_type, $userprop_name, $userprop_value); +} + +if (count($aPerms) == 0 || $action == '' || !isset($action)) { + $aPerms = explode(',', $oUser->getField('perms')); +} + + +$tpl->reset(); +$tpl->set('s','SID', $sess->id); +$tpl->set('s','NOTIFICATION', $sNotification); + +$form = '
    + '.$sess->hidden_session(true).' + + + + + '; + +$tpl->set('s', 'FORM', $form); +$tpl->set('s', 'GET_USERID', $userid); +$tpl->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('s', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('s', 'SUBMITTEXT', i18n("Save changes")); +$tpl->set('s', 'CANCELTEXT', i18n("Discard changes")); +$tpl->set('s', 'CANCELLINK', $sess->url("main.php?area=$area&frame=4&userid=$userid")); + + +$tpl->set('d', 'CATNAME', i18n("Property")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_header"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', i18n("Value")); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Username")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', $oUser->getField('username').''); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Name")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField("text", "realname", $oUser->getField('realname'), 40, 255)); +$tpl->next(); + +// @since 2006-07-04 Display password fields only if not authenticated via LDAP/AD +if ($msysadmin || $oUser->getField('password') != 'active_directory_auth') { + $tpl->set('d', 'CATNAME', i18n("New password")); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'CATFIELD', formGenerateField('password', 'password', '', 40, 255)); + $tpl->next(); + + $tpl->set('d', 'CATNAME', i18n("Confirm new password")); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'CATFIELD', formGenerateField('password', 'passwordagain', '', 40, 255)); + $tpl->next(); +} + +$tpl->set('d', 'CATNAME', i18n("E-Mail")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'email', $oUser->getField('email'), 40, 255)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Phone number")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'telephone', $oUser->getField('telephone'), 40, 255)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Street")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'address_street', $oUser->getField('address_street'), 40, 255)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("ZIP code")); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'address_zip', $oUser->getField('address_zip'), 10, 10)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("City")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'address_city', $oUser->getField('address_city'), 40, 255)); +$tpl->next(); + +$tpl->set('d', 'CATNAME', i18n("Country")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'CATFIELD', formGenerateField('text', 'address_country', $oUser->getField('address_country'), 40, 255)); +$tpl->next(); + +// permissions of current logged in user +$aAuthPerms = explode(',', $auth->auth['perm']); + +// sysadmin perm +if (in_array('sysadmin', $aAuthPerms)) { + $tpl->set('d', 'CATNAME', i18n("System administrator")); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', 'CATFIELD', formGenerateCheckbox('msysadmin', '1', in_array('sysadmin', $aPerms))); + $tpl->next(); +} + +// clients admin perms +$oClientsCollection = new cApiClientCollection(); +$aClients = $oClientsCollection->getAvailableClients(); +$sClientCheckboxes = ''; +foreach ($aClients as $idclient => $item) { + if (in_array("admin[".$idclient."]", $aAuthPerms) || in_array('sysadmin', $aAuthPerms)){ + $sClientCheckboxes .= formGenerateCheckbox("madmin[".$idclient."]", $idclient, in_array("admin[".$idclient."]", $aPerms), $item['name']." (".$idclient.")")."
    "; + } +} + +if ($sClientCheckboxes !== '' && !in_array('sysadmin', $aPerms)) { + $tpl->set('d', 'CATNAME', i18n("Administrator")); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', 'CATFIELD', $sClientCheckboxes); + $tpl->next(); +} + +// clients perms +$sClientCheckboxes = ''; +foreach ($aClients as $idclient => $item) { + if ((in_array("client[".$idclient."]", $aAuthPerms) || in_array('sysadmin', $aAuthPerms) || in_array("admin[".$idclient."]", $aAuthPerms)) && !in_array("admin[".$idclient."]", $aPerms)) { + $sClientCheckboxes .= formGenerateCheckbox("mclient[".$idclient."]", $idclient, in_array("client[".$idclient."]", $aPerms), $item['name']." (". $idclient . ")")."
    "; + } +} + +if ($sClientCheckboxes !== '' && !in_array('sysadmin', $aPerms)) { + $tpl->set('d', 'CATNAME', i18n("Access clients")); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); + $tpl->set('d', 'CATFIELD', $sClientCheckboxes); + $tpl->next(); +} + +// languages perms +$aClientsLanguages = getAllClientsAndLanguages(); +$sClientCheckboxes = ''; +foreach ($aClientsLanguages as $item) { + if (($perm->have_perm_client("lang[".$item['idlang']."]") || $perm->have_perm_client("admin[".$item['idclient']."]")) && !in_array("admin[".$item['idclient']."]", $aPerms)) { + $sClientCheckboxes .= formGenerateCheckbox("mlang[".$item['idlang']."]", $item['idlang'], in_array("lang[".$item['idlang']."]", $aPerms), $item['langname']." (". $item['clientname'] .")") ."
    "; + } +} + +if ($sClientCheckboxes != '' && !in_array('sysadmin', $aPerms)) { + $tpl->set('d', 'CATNAME', i18n("Access languages")); + $tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); + $tpl->set('d', 'CATFIELD', $sClientCheckboxes); + $tpl->next(); +} + + +// user properties +$aProperties = $oUser->getUserProperties(); +$sPropRows = ''; +foreach ($aProperties as $entry) { + $type = $entry['type']; + if ($type != 'system') { + $name = $entry['name']; + $value = $entry['value']; + $sPropRows .= ' + + ' . $type . ' + ' . $name . ' + ' . $value . ' + + Eigenschaft l�schen + + '; + } +} +$table = ' + + + + + + + + ' . $sPropRows . ' + + + + + + +
    '.i18n("Area/Type").''.i18n("Property").''.i18n("Value").' 
     
    '; + +$tpl->set('d', 'CATNAME', i18n("User-defined properties")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'CATFIELD', $table); +$tpl->next(); + +// wysiwyg +$tpl->set('d', 'CATNAME', i18n("Use WYSIWYG-Editor")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'CATFIELD', formGenerateCheckbox('wysi', '1', $oUser->getField('wysi'))); +$tpl->next(); + +// account active data (from-to) +$sCurrentValueFrom = str_replace('00:00:00', '', $oUser->getField('valid_from')); +$sCurrentValueFrom = trim(str_replace('0000-00-00', '', $sCurrentValueFrom)); +$sCurrentValueFrom = trim(str_replace('1000-01-01', '', $sCurrentValueFrom)); + +$sInputValidFrom = ' + + + '; +$sInputValidFrom .= ' '; +$sInputValidFrom .= ''; + +$tpl->set('d', 'CATNAME', i18n("Valid from")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'CATFIELD', $sInputValidFrom); +$tpl->next(); + +$sCurrentValueTo = str_replace('00:00:00', '', $oUser->getField('valid_to')); +$sCurrentValueTo = trim(str_replace('0000-00-00', '', $sCurrentValueTo)); +$sCurrentValueTo = trim(str_replace('1000-01-01', '', $sCurrentValueTo)); + +$sInputValidTo = ' '; +$sInputValidTo .= ''; + +$tpl->set('d', 'CATNAME', i18n("Valid to")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]); +$tpl->set('d', 'CATFIELD', $sInputValidTo); +$tpl->next(); + +// account active or not +if ($sCurrentValueFrom == '') { + $sCurrentValueFrom = '0000-00-00'; +} + +if (($sCurrentValueTo == '') || ($sCurrentValueTo == '0000-00-00')) { + $sCurrentValueTo = '9999-99-99'; +} + +$sCurrentDate = date('Y-m-d'); + +if (($sCurrentValueFrom > $sCurrentDate) || ($sCurrentValueTo < $sCurrentDate)) { + $sAccountState = i18n("This account is currently inactive."); + $sAccountColor = 'red'; +} else { + $sAccountState = i18n("This account is currently active."); + $sAccountColor = 'green'; +} + +$tpl->set('d', 'CATNAME', ' '); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'CATFIELD', ''.$sAccountState.''); +$tpl->next(); + +// Show backend user's group memberships +$aGroups = $oUser->getGroupsByUserID($userid); +if (count($aGroups) > 0) { + asort($aGroups); + $sGroups = implode("
    ", $aGroups); +} else { + $sGroups = i18n("none"); +} + +$tpl->set('d', 'CATNAME', i18n("Group membership")); +$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]); +$tpl->set('d', 'CATFIELD', $sGroups); +$tpl->next(); + +// Generate template +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['rights_overview']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.stat_left_top.php b/branches/conlite20/conlite/includes/include.stat_left_top.php new file mode 100644 index 0000000..2d633a9 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.stat_left_top.php @@ -0,0 +1,36 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-29 + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.stat_left_top.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['stat_left_top']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.stat_menu.php b/branches/conlite20/conlite/includes/include.stat_menu.php new file mode 100644 index 0000000..2e6e4a7 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.stat_menu.php @@ -0,0 +1,98 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-23 + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.stat_menu.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->reset(); + +$currentLink = ''.i18n("Current Report").''; + +$availableYears = statGetAvailableYears($client,$lang); + +// Title +$bgcolor = "#FFFFFF"; +$tpl->set('s', 'OVERVIEWBGCOLOR', $cfg["color"]["table_header"]); +$tpl->set('s', 'PADDING_LEFT', '17'); +$tpl->set('s', 'OVERVIEWTEXT', "".i18n("Statistics Overview").""); + +// Current Statistic +$bgcolor = $cfg["color"]["table_light"]; +$tpl->set('s', 'CURRENTBGCOLOR', $bgcolor); +$tpl->set('s', 'CURRENTTEXT', $currentLink); +$tpl->set('s', 'PADDING_LEFT', '17'); + +// Empty Row +$bgcolor = '#FFFFFF'; +$tpl->set('s', 'ARCHIVEBGCOLOR', $cfg["color"]["table_header"]); +$tpl->set('s', 'ARCHIVETEXT', ''.i18n("Archived Statistics").''); +$tpl->set('s', 'PADDING_LEFT', '17'); + +foreach ($availableYears as $yearIterator) +{ + //$yearLink = function statsOverviewYear($year) + $dark = !$dark; + $yearLink = ''."$yearIterator".''; + if ($dark) { + $bgcolor = $cfg["color"]["table_dark"]; + } else { + $bgcolor = $cfg["color"]["table_light"]; + } + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'TEXT', $yearLink); + $tpl->set('d', 'PADDING_LEFT', '17'); + $tpl->next(); + + $availableMonths = statGetAvailableMonths($yearIterator,$client,$lang); + + foreach ($availableMonths as $monthIterator) + { + $monthCanonical = statReturnCanonicalMonth($monthIterator); + $monthLink = ''."$monthCanonical".''; + + $dark = !$dark; + + if ($dark) { + $bgcolor = $cfg["color"]["table_dark"]; + } else { + $bgcolor = $cfg["color"]["table_light"]; + } + + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'TEXT', $monthLink); + $tpl->set('d', 'PADDING_LEFT', '20'); + $tpl->next(); + } +} + +# Generate template +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['stat_menu']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.stat_overview.php b/branches/conlite20/conlite/includes/include.stat_overview.php new file mode 100644 index 0000000..3f1726f --- /dev/null +++ b/branches/conlite20/conlite/includes/include.stat_overview.php @@ -0,0 +1,147 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-29 + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.stat_overview.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->reset(); + +if ($action == "stat_show") +{ + if (strlen($yearmonth) < 4) + { + $yearmonth = "current"; + } + + switch ($displaytype) + { + case "all": + $stattype = i18n("Full statistics"); + break; + case "top10": + $stattype = i18n("Top 10"); + break; + case "top20": + $stattype = i18n("Top 20"); + break; + case "top30": + $stattype = i18n("Top 30"); + break; + default: + $displaytype = "all"; + $stattype = i18n("Full statistics"); + break; + } + + $tpl->set('s', 'SELF_URL', $sess->url("main.php?area=stat&frame=4&idcat=$idcat")); + if ($showYear == 1) + { + $tpl->set('s', 'DROPDOWN', statDisplayYearlyTopChooser($displaytype)); + $tpl->set('s', 'YEARMONTH', '
    '); + } else { + $tpl->set('s', 'DROPDOWN', statDisplayTopChooser($displaytype)); + $tpl->set('s', 'YEARMONTH', '
    '); + } + + if ($showYear == 1) + { + $tpl->set('s', 'STATTITLE', i18n("Yearly").' '.$stattype . " " .$year); + } else { + if (strcmp($yearmonth,"current")==0) + { + $tpl->set('s', 'STATTITLE', i18n("Current"). ' '.$stattype); + } else { + $tpl->set('s', 'STATTITLE', $stattype." ".statReturnCanonicalMonth(substr($yearmonth, 4,2)).' '.substr($yearmonth,0,4)); + } + } + + $tpl->set('s', 'BGCOLOR', '#FFFFFF'); + $tpl->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]); + $tpl->set('s', 'TITLEBGCOLOR', $cfg["color"]["table_header"]); + $tpl->set('s', 'TITLETEXT', i18n("Title")); + $tpl->set('s', 'TITLESTATUS', i18n("Status")); + $tpl->set('s', 'TITLENUMBEROFARTICLES', i18n("Number of articles")); + $tpl->set('s', 'TITLETOTAL',i18n("Hits")); + $tpl->set('s', 'TITLEPADDING_LEFT',"5"); + $tpl->set('s', 'TITLEINTHISLANGUAGE', i18n("Hits in this language")); + + switch ($displaytype) + { + case "all": + default: + if ($showYear == 1) + { + statsOverviewYear($year); + } else { + statsOverviewAll($yearmonth); + } + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['stat_overview']); + break; + + case "top10": + if ($showYear == 1) + { + statsOverviewTopYear($year,10); + }else { + statsOverviewTop($yearmonth,10); + } + + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['stat_top']); + break; + + case "top20": + if ($showYear == 1) + { + statsOverviewTopYear($year,20); + }else { + statsOverviewTop($yearmonth,20); + } + + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['stat_top']); + break; + + case "top30": + if ($showYear == 1) + { + statsOverviewTopYear($year,30); + }else { + statsOverviewTop($yearmonth,30); + } + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['stat_top']); + break; + } + +} else { + $tpl->reset(); + $tpl->set('s', 'CONTENTS', ''); + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['blank']); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.str_overview.php b/branches/conlite20/conlite/includes/include.str_overview.php new file mode 100644 index 0000000..9d475a7 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.str_overview.php @@ -0,0 +1,1002 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-03-28 + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2009-10-14, Dominik Ziegler - added some functionality for "cancel moving tree" + * modified 2009-10-15, Dominik Ziegler - removed unnecessary database query for selecting the level (level is already available) + * modified 2010-01-30, Ingo van Peeren, some optimization of the amount of db queries for template names and descriptions, see [CON-301] + * removed use of deprecated methods of class.template.php, see [CON-302] + * modified 2010-02-06, Ingo van Peeren, fixed small bug added by last modification + * + * $Id: include.str_overview.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$debug = FALSE; + +$tmp_area = "str"; + +if ($action == "str_duplicate" && + ($perm->have_perm_area_action("str", "str_duplicate") || + $perm->have_perm_area_action_item("str", "str_duplicate", $idcat))) { + strCopyTree($idcat, $parentid); +} + +//Everybody is allowed to update aliases, if there is no Permission to update category names, this block updates category alias only +if (isset($_POST['newcategoryalias']) && isset($_POST['action']) && $_POST['action'] == 'str_renamecat') { + $iIdCat = (int) $_POST['idcat']; + if (!($perm->have_perm_area_action($tmp_area, "str_renamecat") || $perm->have_perm_area_action_item($tmp_area, "str_renamecat", $iIdCat))) { + if (trim($_POST['newcategoryalias']) != '') { + $sUrlName = capiStrCleanURLCharacters($_POST['newcategoryalias']); + $sql = "UPDATE {$cfg['tab']['cat_lang']} SET urlname = '" . Contenido_Security::escapeDB($sUrlName, $db) . "' WHERE idcat = '" . Contenido_Security::toInteger($iIdCat) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + } else { + //Use categoryname as default -> get it escape it save it as urlname + $sql = "SELECT name from {$cfg['tab']['cat_lang']} WHERE idcat = '" . Contenido_Security::toInteger($iIdCat) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + if ($db->next_record()) { + $sUrlName = capiStrCleanURLCharacters($db->f('name')); + $sql = "UPDATE {$cfg['tab']['cat_lang']} SET urlname = '" . $sUrlName . "' WHERE idcat = '" . Contenido_Security::toInteger($iIdCat) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + $lang = Contenido_Security::escapeDB($lang, null); + @unlink($cfgClient[$client]["path"]["frontend"] . "cache/locationstring-url-cache-$lang.txt"); + } + } + } +} + + +$oDirectionDb = new DB_ConLite(); + +/** + * Build a Category select Box containg all categories which user is allowed to create new categories + * + * @return String HTML + */ +function buildCategorySelectRights() { + global $cfg, $client, $lang, $idcat, $perm, $tmp_area; + + $db = new DB_ConLite(); + + $oHtmlSelect = new cHTMLSelectElement('idcat', "", "new_idcat"); + + $oHtmlSelectOption = new cHTMLOptionElement(i18n("Please choose"), '', true); + $oHtmlSelect->addOptionElement(0, $oHtmlSelectOption); + + + $sql = "SELECT a.idcat AS idcat, b.name AS name, c.level FROM + " . $cfg["tab"]["cat"] . " AS a, " . $cfg["tab"]["cat_lang"] . " AS b, + " . $cfg["tab"]["cat_tree"] . " AS c WHERE a.idclient = '" . Contenido_Security::toInteger($client) . "' + AND b.idlang = '" . Contenido_Security::toInteger($lang) . "' AND b.idcat = a.idcat AND c.idcat = a.idcat + ORDER BY c.idtree"; + + $db->query($sql); + + $categories = array(); + + while ($db->next_record()) { + $categories[$db->f("idcat")]["name"] = $db->f("name"); + $categories[$db->f("idcat")]["idcat"] = $db->f("idcat"); + + if ($perm->have_perm_area_action($tmp_area, "str_newcat") || $perm->have_perm_area_action_item($tmp_area, "str_newcat", $db->f("idcat"))) { + $categories[$db->f("idcat")]["perm"] = 1; + } else { + $categories[$db->f("idcat")]["perm"] = 0; + } + + $categories[$db->f("idcat")]["level"] = $db->f("level"); + } + + $aCategoriesReversed = array_reverse($categories); + + $iLevel = 0; + foreach ($aCategoriesReversed as $iKeyIdCat => $aValues) { + if ($aValues['level'] > $iLevel && $aValues['perm']) { + $iLevel = $aValues['level']; + } else if ($aValues['level'] < $iLevel) { + $iLevel = $aValues['level']; + } else { + if (!$aValues['perm']) { + unset($categories[$aValues["idcat"]]); + } + } + } + + $j = 1; + foreach ($categories as $tmpidcat => $props) { + $spaces = "  "; + + for ($i = 0; $i < $props["level"]; $i ++) { + $spaces .= "     "; + } + + $sCategoryname = clHtmlSpecialChars($props["name"]); + $sCategoryname = capiStrTrimHard($sCategoryname, 30); + $oHtmlSelectOption = new cHTMLOptionElement($spaces . ">" . $sCategoryname, $tmpidcat, false, !$props["perm"]); + $oHtmlSelect->addOptionElement($j, $oHtmlSelectOption); + $j++; + } + + return $oHtmlSelect->toHtml(); +} + +function getExpandCollapseButton($item, $catName) { + global $sess, $PHP_SELF, $frame, $area; + $selflink = "main.php"; + + $img = new cHTMLImage; + $img->updateAttributes(array("style" => "padding:4px;")); + + + if (count($item->subitems) > 0) { + if ($item->collapsed == true) { + $expandlink = $sess->url($selflink . "?area=$area&frame=$frame&expand=" . $item->id); + + $img->setSrc($item->collapsed_icon); + $img->setAlt(i18n("Open category")); + return ('' . $img->render() . ' ' . '' . $catName . ''); + } else { + $collapselink = $sess->url($selflink . "?area=$area&frame=$frame&collapse=" . $item->id); + $img->setSrc($item->expanded_icon); + $img->setAlt(i18n("Close category")); + + return('' . $img->render() . ' ' . '' . $catName . ''); + } + } else { + return ' ' . $catName; + } +} + +function getTemplateSelect() { + global $client, $cfg, $db; + + $oHtmlSelect = new cHTMLSelectElement('cat_template_select', "", "cat_template_select"); + + $oHtmlSelectOption = new cHTMLOptionElement('--- ' . i18n("none") . ' ---', 0, false); + $oHtmlSelect->addOptionElement(0, $oHtmlSelectOption); + + $sql = "SELECT + idtpl, + name, defaulttemplate + FROM + " . $cfg['tab']['tpl'] . " + WHERE + idclient = '" . $client . "' + ORDER BY + name"; + + $i = 1; + if ($db->query($sql)) { + while ($db->next_record()) { + $bDefaultTemplate = $db->f('defaulttemplate'); + $oHtmlSelectOption = new cHTMLOptionElement($db->f('name'), $db->f('idtpl'), $bDefaultTemplate); + $oHtmlSelect->addOptionElement($i, $oHtmlSelectOption); + $i++; + } + } + + return $oHtmlSelect->toHtml(); +} + +getTemplateSelect(); + +$sess->register("remakeStrTable"); +$sess->register("StrTableClient"); +$sess->register("StrTableLang"); + +$cancel = $sess->url("main.php?area=$area&frame=$frame"); + +if (isset($force) && $force == 1) { + $remakeStrTable = true; +} + +if ($StrTableClient != $client) { + unset($expandedList); + $remakeStrTable = true; +} + +if ($StrTableLang != $lang) { + unset($expandedList); + $remakeStrTable = true; +} + +$StrTableClient = $client; +$StrTableLang = $lang; + +if (!isset($idcat)) + $idcat = 0; +if (!isset($action)) + $action = 0; + +function buildTree(&$rootItem, &$items) { + global $nextItem, $perm, $tmp_area; + + while ($item_list = each($items)) { + list($key, $item) = $item_list; + + unset($newItem); + + $bCheck = false; + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_newtree"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_newcat"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_makevisible"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_makepublic"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_deletecat"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_moveupcat"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_movedowncat"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_movesubtree"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_renamecat"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action("str_tplcfg", "str_tplcfg"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_item($tmp_area, $item['idcat']); + } + + if ($bCheck) { + $newItem = new TreeItem($item['name'], $item['idcat'], true); + } else { + $newItem = new TreeItem($item['name'], $item['idcat'], false); + } + + $newItem->collapsed_icon = 'images/open_all.gif'; + $newItem->expanded_icon = 'images/close_all.gif'; + $newItem->custom['idtree'] = $item['idtree']; + $newItem->custom['level'] = $item['level']; + $newItem->custom['idcat'] = $item['idcat']; + $newItem->custom['idtree'] = $item['idtree']; + $newItem->custom['parentid'] = $item['parentid']; + $newItem->custom['alias'] = $item['alias']; + $newItem->custom['preid'] = $item['preid']; + $newItem->custom['postid'] = $item['postid']; + $newItem->custom['visible'] = $item['visible']; + $newItem->custom['idtplcfg'] = $item['idtplcfg']; + $newItem->custom['public'] = $item['public']; + + if ($perm->have_perm_item("str", $item['idcat'])) { + $newItem->custom['forcedisplay'] = 1; + } + + if (array_key_exists($key + 1, $items)) { + $nextItem = $items[$key + 1]; + } else { + $nextItem = 0; + } + + if (array_key_exists($key - 1, $items)) { + $lastItem = $items[$key - 1]; + } else { + $lastItem = 0; + } + + $rootItem->addItem($newItem); + + if ($nextItem['level'] > $item['level']) { + $oldRoot = $rootItem; + buildTree($newItem, $items); + $rootItem = $oldRoot; + } + + if ($nextItem['level'] < $item['level']) { + return; + } + } +} + +if ($perm->have_perm_area_action($area)) { + + $sql = "SELECT + idtree, A.idcat, level, name, parentid, preid, postid, visible, public, idtplcfg, C.urlname as alias + FROM + " . $cfg["tab"]["cat_tree"] . " AS A, + " . $cfg["tab"]["cat"] . " AS B, + " . $cfg["tab"]["cat_lang"] . " AS C + WHERE + A.idcat = B.idcat AND + B.idcat = C.idcat AND + C.idlang = '" . Contenido_Security::toInteger($lang) . "' AND + B.idclient = '" . Contenido_Security::toInteger($client) . "' + ORDER BY + idtree"; + + # Debug info + if ($debug) { + + echo "
    ";
    +        echo $sql;
    +        echo "
    "; + } + + $db->query($sql); + + $bIgnore = false; + $iIgnoreLevel = 0; + + $items = array(); + while ($db->next_record()) { + $bSkip = false; + + if ($bIgnore == true && $iIgnoreLevel >= $db->f("level")) { + $bIgnore = false; + } + + if ($db->f("idcat") == $movesubtreeidcat) { + $bIgnore = true; + $iIgnoreLevel = $db->f("level"); + $sMoveSubtreeCatName = $db->f("name"); + } + + if ($iCurLevel == $db->f("level")) { + if ($iCurParent != $db->f("parentid")) { + $bSkip = true; + } + } else { + $iCurLevel = $db->f("level"); + $iCurParent = $db->f("parentid"); + } + + if ($bIgnore == false && $bSkip == false) { + $entry = array(); + $entry['idtree'] = $db->f("idtree"); + $entry['idcat'] = $db->f("idcat"); + $entry['level'] = $db->f("level"); + $entry['name'] = htmldecode($db->f("name")); + $entry['alias'] = htmldecode($db->f("alias")); + $entry['parentid'] = $db->f("parentid"); + $entry['preid'] = $db->f("preid"); + $entry['postid'] = $db->f("postid"); + $entry['visible'] = $db->f("visible"); + $entry['public'] = $db->f("public"); + $entry['idtplcfg'] = $db->f("idtplcfg"); + + array_push($items, $entry); + } + } + + $rootStrItem = new TreeItem("root", -1); + $rootStrItem->collapsed_icon = 'images/open_all.gif'; + $rootStrItem->expanded_icon = 'images/close_all.gif'; + + buildTree($rootStrItem, $items); + + $expandedList = unserialize($currentuser->getUserProperty("system", "cat_expandstate")); + + if (is_array($expandedList)) { + $rootStrItem->markExpanded($expandedList); + } + + if (isset($collapse) && is_numeric($collapse)) { + $rootStrItem->markCollapsed($collapse); + } + + if (isset($expand) && is_numeric($expand)) { + $rootStrItem->markExpanded($expand); + } + + if (isset($expand) && $expand == "all") { + $rootStrItem->expandAll(-1); + } + + if (isset($collapse) && $collapse == "all") { + $rootStrItem->collapseAll(-1); + } + + if ($action === "str_newcat") { + $rootStrItem->markExpanded($idcat); + } + + $expandedList = Array(); + $objects = array(); + + $rootStrItem->traverse($objects); + + $rootStrItem->getExpandedList($expandedList); + $currentuser->setUserProperty("system", "cat_expandstate", serialize($expandedList)); + + # Reset Template + $tpl->reset(); + $tpl->set('s', 'SID', $sess->id); + $tpl->set('s', 'AREA', $area); + $tpl->set('s', 'FRAME', $frame); + + $_cecIterator = $_cecRegistry->getIterator("Contenido.CategoryList.Columns"); + + $listColumns = array(); + if ($_cecIterator->count() > 0) { + + while ($chainEntry = $_cecIterator->next()) { + $tmplistColumns = $chainEntry->execute(array()); + + if (is_array($tmplistColumns)) { + $listColumns = array_merge($listColumns, $tmplistColumns); + } + } + + + foreach ($listColumns as $content) { + // Header for additional columns + $additionalheaders[] = '' . $content . ''; + } + + $additionalheader = implode("", $additionalheaders); + } else { + $additionalheader = ""; + } + + $tpl->set('s', 'ADDITIONALHEADERS', $additionalheader); + + // We don't want to show our root + unset($objects[0]); + + $selflink = "main.php"; + $expandlink = $sess->url($selflink . "?area=$area&frame=$frame&expand=all&syncoptions=$syncoptions"); + $collapselink = $sess->url($selflink . "?area=$area&frame=$frame&collapse=all&syncoptions=$syncoptions"); + $collapseimg = ' +  ' . i18n("Close all categories") . + ''; + $expandimg = ' +  ' . i18n("Open all categories") . + ''; + + + $tpl->set('s', 'COLLAPSE_ALL', $collapseimg); + $tpl->set('s', 'EXPAND_ALL', $expandimg); + $sMouseover = 'onmouseover="str.over(this)" onmouseout="str.out(this)" onclick="str.click(this)"'; + + //Fill inline edit table row + $tpl->set('s', 'SUM_COLUMNS_EDIT', 14 + count($listColumns)); + $tpl->set('s', 'ACTION_EDIT_URL', $sess->url("main.php?frame=$frame")); + $tpl->set('s', 'SRC_CANCEL', $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["images"] . 'but_cancel.gif'); + $tpl->set('s', 'SRC_OK', $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["images"] . 'but_ok.gif'); + $tpl->set('s', 'HREF_CANCEL', "javascript:handleInlineEdit(0)"); + $tpl->set('s', 'LABEL_ALIAS_NAME', i18n('Alias')); + $tpl->set('s', 'TEMPLATE_URL', $sess->url("main.php?area=str_tplcfg&frame=$frame")); + $message = addslashes(i18n("Do you really want to duplicate the following category:

    %s

    Notice: The duplicate process can take up to several minutes, depending on how many subitems and articles you've got.")); + $tpl->set('s', 'DUPLICATE_MESSAGE', $message); + $tpl->set('s', 'DELETE_MESSAGE', i18n("Do you really want to delete the following category:

    %s")); + + $bAreaAddNewCategory = false; + + $aInlineEditData = array(); + + $sql = "SELECT + idtplcfg, idtpl + FROM + " . $cfg["tab"]["tpl_conf"]; + $db->query($sql); + $aTplconfigs = array(); + while ($db->next_record()) { + $aTplconfigs[$db->f('idtplcfg')] = $db->f('idtpl'); + } + + $sql = "SELECT + name, description, idtpl + FROM + " . $cfg["tab"]["tpl"]; + + $db->query($sql); + $aTemplates = array(); + while ($db->next_record()) { + $aTemplates[$db->f('idtpl')] = array( + 'name' => $db->f('name'), + 'description' => $db->f('description') + ); + } + + foreach ($objects as $key => $value) { + // check if there area any permission for this $idcat in the mainarea 6 (=str) and there subareas + $bCheck = false; + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_newtree"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_newcat"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_makevisible"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_makepublic"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_deletecat"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_moveupcat"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_movedowncat"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_movesubtree"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action($tmp_area, "str_renamecat"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_area_action("str_tplcfg", "str_tplcfg"); + } + if (!$bCheck) { + $bCheck = $perm->have_perm_item($tmp_area, $value->id); + } + if (!$bCheck) { + $bCheck = $value->isCustomAttributeSet("forcedisplay"); + } + + if ($bCheck) { + + //Insert empty row + if ($value->custom['level'] == 0 && $value->custom['preid'] != 0) { + + $tpl->set('d', 'BGCOLOR', '#FFFFFF'); + $tpl->set('d', 'BGCOLOR_EDIT', '#F1F1F1'); + $tpl->set('d', 'ALIAS', ' '); + $tpl->set('d', 'INDENT', '3px'); + $tpl->set('d', 'RENAMEBUTTON', ' '); + $tpl->set('d', 'NEWCATEGORYBUTTON', ' '); + $tpl->set('d', 'VISIBLEBUTTON', ' '); + $tpl->set('d', 'PUBLICBUTTON', ' '); + $tpl->set('d', 'DELETEBUTTON', ' '); + $tpl->set('d', 'UPBUTTON', ' '); + $tpl->set('d', 'COLLAPSE_CATEGORY_NAME', ' '); + $tpl->set('d', 'TPLNAME', ' '); + $tpl->set('d', 'MOVEBUTTON', ' '); + $tpl->set('d', 'DOWNBUTTON', ' '); + $tpl->set('d', 'SHOW_MOUSEOVER', ''); + $tpl->set('d', 'SHOW_MOUSEOVER_ALIAS', ''); + $tpl->set('d', 'SHOW_MOUSEOVER_CATEGORY', ''); + $tpl->set('d', 'TPLDESC', ''); + $tpl->set('d', 'DUPLICATEBUTTON', ' '); + $tpl->set('d', 'TEMPLATEBUTTON', ' '); + $tpl->set('d', 'MOUSEOVER', ''); + $tpl->set('d', 'SUM_COLUMNS_EDIT', 14 + count($listColumns)); + $tpl->set('d', 'CATID', ''); + $tpl->set('d', 'ACTION_EDIT_URL', ''); + $tpl->set('d', 'INPUT_CATEGORY', ''); + $tpl->set('d', 'LABEL_ALIAS_NAME', ''); + $tpl->set('d', 'HREF_CANCEL', ''); + $tpl->set('d', 'SRC_CANCEL', ''); + $tpl->set('d', 'DIRECTION', ''); + $tpl->set('d', 'SRC_OK', ''); + $tpl->set('d', 'VALUE_ALIAS_NAME', ''); + $tpl->set('d', 'HEIGTH', 'height:5px;'); + $tpl->set('d', 'BORDER_CLASS', 'str-style-b'); + + $additionalColumns = array(); + + foreach ($listColumns as $content) { + // Content rows + $additionalColumns[] = ' '; + } + $tpl->set('d', 'ADDITIONALCOLUMNS', implode("", $additionalColumns)); + $tpl->next(); + } + + + $bgcolor = ( is_int($tpl->dyn_cnt / 2) ) ? $cfg["color"]["table_light"] : $cfg["color"]["table_dark"]; + + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'BGCOLOR_EDIT', '#F1F1F1'); + $tpl->set('d', 'HEIGTH', 'height:25px'); + $tpl->set('d', 'BORDER_CLASS', 'str-style-c'); + + $spaces = ""; + + $tpl->set('d', 'INDENT', ($value->custom['level'] * 16) . "px"); + $sCategoryname = $value->name; + if (strlen($value->name) > 30) { + $sCategoryname = capiStrTrimHard($sCategoryname, 30); + } + + //$tpl->set('d', 'CATEGORY', $sCategoryname); + if (strlen($value->name) > 30) { + $tpl->set('d', 'SHOW_MOUSEOVER_CATEGORY', 'onmouseover="Tip(\'' . $value->name . '\', BALLOON, true, ABOVE, true);"'); + } else { + $tpl->set('d', 'SHOW_MOUSEOVER_CATEGORY', ''); + } + + $tpl->set('d', 'COLLAPSE_CATEGORY_NAME', getExpandCollapseButton($value, $sCategoryname)); + if ($value->custom['alias']) { + $sCategoryalias = $value->custom['alias']; + if (strlen($value->custom['alias']) > 30) { + $sCategoryalias = capiStrTrimHard($sCategoryalias, 30); + } + $tpl->set('d', 'ALIAS', $sCategoryalias); + if (strlen($value->custom['alias']) > 30) { + $tpl->set('d', 'SHOW_MOUSEOVER_ALIAS', 'onmouseover="Tip(\'' . $value->custom['alias'] . '\', BALLOON, true, ABOVE, true);"'); + } else { + $tpl->set('d', 'SHOW_MOUSEOVER_ALIAS', ''); + } + } else { + $tpl->set('d', 'SHOW_MOUSEOVER_ALIAS', ''); + $tpl->set('d', 'ALIAS', ' '); + } + + $template = $aTemplates[$aTplconfigs[$value->custom['idtplcfg']]]['name']; + $templateDescription = $aTemplates[$aTplconfigs[$value->custom['idtplcfg']]]['description']; + + $descString = ''; + + if ($template == "") { + $template = '--- ' . i18n("none") . ' ---'; + } + + // Description for hover effect + $descString = '' . $template . ''; + + if (sizeof($templateDescription) > 0) { + $descString .= '
    ' . $templateDescription; + } + + $sTemplatename = $template; + if (strlen($template) > 20) { + $sTemplatename = capiStrTrimHard($sTemplatename, 20); + } + + $tpl->set('d', 'TPLNAME', $sTemplatename); + $tpl->set('d', 'TPLDESC', $descString); + + if ($perm->have_perm_area_action($tmp_area, "str_renamecat") || $perm->have_perm_area_action_item($tmp_area, "str_renamecat", $value->id)) { + $bPermRename = 1; + } else { + $bPermRename = 0; + } + + if ($perm->have_perm_area_action("str_tplcfg", "str_tplcfg") || $perm->have_perm_area_action_item("str_tplcfg", "str_tplcfg", $value->id)) { + $bPermTplcfg = 1; + } else { + $bPermTplcfg = 0; + } + + $aRecord = array(); + $sCatName = $value->name; + + $aRecord['catn'] = str_replace('\'', '\\\'', $sCatName); + $sAlias = $value->custom['alias']; + $aRecord['alias'] = str_replace('\'', '\\\'', $sAlias); + $aRecord['idtplcfg'] = $value->custom['idtplcfg']; + $aRecord['pName'] = $bPermRename; + $aRecord['pTplcfg'] = $bPermTplcfg; + $aInlineEditData[$value->id] = $aRecord; + + $tpl->set('d', 'RENAMEBUTTON', "id . ");\">id . "_image\">"); + $tpl->set('d', 'CATID', $value->id); + + if (strlen($template) > 20) { + $tpl->set('d', 'SHOW_MOUSEOVER', 'onmouseover="Tip(\'' . $descString . '\', BALLOON, true, ABOVE, true);"'); + } else { + $tpl->set('d', 'SHOW_MOUSEOVER', ''); + } + + $tpl->set('d', 'MOUSEOVER', $sMouseover); + + if ($perm->have_perm_area_action($tmp_area, "str_newcat") || $perm->have_perm_area_action_item($tmp_area, "str_newcat", $value->id)) { + $bAreaAddNewCategory = true; + } + + if ($perm->have_perm_area_action($tmp_area, "str_makevisible") || $perm->have_perm_area_action_item($tmp_area, "str_makevisible", $value->id)) { + if ($value->custom['visible'] == 1) { + $tpl->set('d', 'VISIBLEBUTTON', "url("main.php?area=$area&action=str_makevisible&frame=$frame&idcat=" . $value->id . "&visible=" . $value->custom['visible']) . "#clickedhere\">"); + } else { + $tpl->set('d', 'VISIBLEBUTTON', "url("main.php?area=$area&action=str_makevisible&frame=$frame&idcat=" . $value->id . "&visible=" . $value->custom['visible']) . "#clickedhere\">"); + } + } else { + $tpl->set('d', 'VISIBLEBUTTON', ' '); + } + + if ($perm->have_perm_area_action($tmp_area, "str_makepublic") || $perm->have_perm_area_action_item($tmp_area, "str_makepublic", $value->id)) { + if ($value->custom['public'] == 1) { + $tpl->set('d', 'PUBLICBUTTON', "url("main.php?area=$area&action=str_makepublic&frame=$frame&idcat=" . $value->id . "&public=" . $value->custom['public']) . "#clickedhere\">"); + } else { + $tpl->set('d', 'PUBLICBUTTON', "url("main.php?area=$area&action=str_makepublic&frame=$frame&idcat=" . $value->id . "&public=" . $value->custom['public']) . "#clickedhere\">"); + } + } else { + $tpl->set('d', 'PUBLICBUTTON', ' '); + } + + $hasChildren = strNextDeeper($value->id); + $hasArticles = strHasArticles($value->id); + if (($hasChildren == 0) && ($hasArticles == false) && ($perm->have_perm_area_action($tmp_area, "str_deletecat") || $perm->have_perm_area_action_item($tmp_area, "str_deletecat", $value->id))) { + + $delete = '' . ""; + $tpl->set('d', 'DELETEBUTTON', $delete); + } else { + $message = i18n("No permission"); + + if ($hasChildren) { + $button = 'delete_inact_h.gif'; + } + + if ($hasArticles) { + $button = 'delete_inact_g.gif'; + } + if ($hasChildren && $hasArticles) { + $button = 'delete_inact.gif'; + } + + + $tpl->set('d', 'DELETEBUTTON', ''); + } + + if ($perm->have_perm_area_action($tmp_area, "str_moveupcat") || $perm->have_perm_area_action_item($tmp_area, "str_moveupcat", $value->id)) { + + $rand = rand(); + + if ($value->custom['parentid'] == 0 && $value->custom['preid'] == 0) { + $tpl->set('d', 'UPBUTTON', ""); + } else { + if ($value->custom['preid'] != 0) { + $tpl->set('d', 'UPBUTTON', "url("main.php?area=$area&action=str_moveupcat&frame=$frame&idcat=" . $value->id . "&rand=$rand") . "#clickedhere\">"); + } else { + $tpl->set('d', 'UPBUTTON', ""); + } + } + } else { + $tpl->set('d', 'UPBUTTON', ""); + } + + if ($perm->have_perm_area_action($tmp_area, "str_movedowncat") || $perm->have_perm_area_action_item($tmp_area, "str_movedowncat", $value->id)) { + + $rand = rand(); + + if ($value->custom['postid'] == 0) { + $tpl->set('d', 'DOWNBUTTON', ""); + } else { + $tpl->set('d', 'DOWNBUTTON', "url("main.php?area=$area&action=str_movedowncat&frame=$frame&idcat=" . $value->id . "&rand=$rand") . "#clickedhere\">"); + } + } else { + $tpl->set('d', 'DOWNBUTTON', ""); + } + + if (($action === "str_movesubtree") && (!isset($parentid_new))) { + if ($perm->have_perm_area_action($tmp_area, "str_movesubtree") || $perm->have_perm_area_action_item($tmp_area, "str_movesubtree", $value->id)) { + if ($value->id == $idcat) { + $tpl->set('d', 'MOVEBUTTON', "url("main.php?area=$area&action=str_movesubtree&frame=$frame&idcat=$idcat&parentid_new=0") . "\">"); + } else { + $allowed = strMoveCatTargetallowed($value->id, $idcat); + if ($allowed == 1) { + $tpl->set('d', 'MOVEBUTTON', "url("main.php?area=$area&action=str_movesubtree&frame=$frame&idcat=$idcat&parentid_new=" . $value->id) . "\">"); + } else { + $tpl->set('d', 'MOVEBUTTON', ' '); + } + } + } else { + $tpl->set('d', 'MOVEBUTTON', ' '); + } + } else { + if ($perm->have_perm_area_action($tmp_area, "str_movesubtree") || $perm->have_perm_area_action_item($tmp_area, "str_movesubtree", $value->id)) { + $tpl->set('d', 'MOVEBUTTON', "url("main.php?area=$area&action=str_movesubtree&frame=$frame&idcat=" . $value->id) . "#movesubtreehere\">"); + } else { + $tpl->set('d', 'MOVEBUTTON', ' '); + } + } + + if ($perm->have_perm_area_action("str", "str_duplicate") || $perm->have_perm_area_action_item("str", "str_duplicate", $value->id)) { + $duplicate = '' . ""; + + $tpl->set('d', 'DUPLICATEBUTTON', $duplicate); + } else { + $tpl->set('d', 'DUPLICATEBUTTON', ' '); + } + + // DIRECTION + cInclude('includes', 'functions.lang.php'); + $tpl->set('d', 'DIRECTION', 'dir="' . langGetTextDirection($lang, $oDirectionDb) . '"'); + + $columns = array(); + + foreach ($listColumns as $key => $content) { + $columnInfo = array(); + $_cecIterator = $_cecRegistry->getIterator("Contenido.CategoryList.RenderColumn"); + + $columnContents = array(); + + if ($_cecIterator->count() > 0) { + while ($chainEntry = $_cecIterator->next()) { + $columnContents[] = $chainEntry->execute($value->id, $key); + } + } else { + $columnContents[] = ''; + } + + $columns[] = '' . implode("", $columnContents) . ''; + } + + $tpl->set('d', 'ADDITIONALCOLUMNS', implode("", $columns)); + $tpl->next(); + }//end if -> perm + } + + $jsDataArray = ""; + foreach ($aInlineEditData as $iIdCat => $aData) { + $aTmp = array(); + foreach ($aData as $aKey => $aValue) { + array_push($aTmp, $aKey . "':'" . $aValue); + } + $jsDataArray .= "tmpObject = new Object(); + tmpObject = {'" . implode("', '", $aTmp) . "'}; + dataArray[$iIdCat] = tmpObject; + "; + } + + $tpl->set('s', 'JS_DATA', $jsDataArray); + + $string = markSubMenuItem(0, true); + + //Set DHTML generic Values + $sImagepath = $cfg["path"]["images"]; + $tpl->set('s', 'SUM_COLUMNS', 14 + count($listColumns)); + $tpl->set('s', 'HREF_ACTION', $sess->url("main.php?frame=$frame")); + $tpl->set('s', 'CON_IMAGES', $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["images"]); + + //Generate input fields for category new layer and category edit layer + $oSession = new cHTMLHiddenField($sess->name, $sess->id); + $oActionEdit = new cHTMLHiddenField('action', 'str_renamecat'); + $oIdcat = new cHTMLHiddenField('idcat'); + + $tpl->set('s', 'INPUT_SESSION', $oSession->render()); + $tpl->set('s', 'INPUT_ACTION_EDIT', $oActionEdit->render()); + $tpl->set('s', 'INPUT_IDCAT', $oIdcat->render()); + + $oVisible = new cHTMLHiddenField('visible', 0, 'visible_input'); + $oPublic = new cHTMLHiddenField('public', 1, 'public_input'); + $oTemplate = new cHTMLHiddenField('idtplcfg', 0, 'idtplcfg_input'); + + $tpl->set('s', 'INPUT_VISIBLE', $oVisible->render()); + $tpl->set('s', 'INPUT_PUBLIC', $oPublic->render()); + $tpl->set('s', 'INPUT_TEMPLATE', $oTemplate->render()); + + $oCatName = new cHTMLTextbox('categoryname', '', '', '', 'cat_categoryname'); + $oCatName->setStyle('width:150px; vertical-align:middle;'); + $tpl->set('s', 'INPUT_CATNAME_NEW', $oCatName->render()); + + $oAlias = new cHTMLTextbox('categoryalias'); + $oAlias->setStyle('width:150px; vertical-align:middle;'); + $tpl->set('s', 'INPUT_ALIAS_NEW', $oAlias->render()); + + $oNewCatName = new cHTMLTextbox('newcategoryname'); + $oNewCatName->setStyle('width:150px; vertical-align:middle;'); + $tpl->set('s', 'INPUT_CATNAME_EDIT', $oNewCatName->render()); + + $oNewAlias = new cHTMLTextbox('newcategoryalias'); + $oNewAlias->setStyle('width:150px; vertical-align:middle;'); + $tpl->set('s', 'INPUT_ALIAS_EDIT', $oNewAlias->render()); + + $sCategorySelect = buildCategorySelectRights('idcat', ''); + + # Show Layerbutton for adding new Cateogries and set options according to Permisssions + if (($perm->have_perm_area_action($tmp_area, "str_newtree") || + $perm->have_perm_area_action($tmp_area, "str_newcat") || + $bAreaAddNewCategory) && (int) $client > 0 && (int) $lang > 0) { + $tpl->set('s', 'NEWCAT', $string . " " . i18n('Create new category') . ""); + if ($perm->have_perm_area_action($tmp_area, "str_newtree")) { + if ($perm->have_perm_area_action($tmp_area, "str_newcat") || $bAreaAddNewCategory) { + $tpl->set('s', 'PERMISSION_NEWTREE', ''); + $oActionNew = new cHTMLHiddenField('action', 'str_newcat', 'cat_new_action'); + } else { + $tpl->set('s', 'PERMISSION_NEWTREE', 'disabled checked'); + $oActionNew = new cHTMLHiddenField('action', 'str_newcat', 'str_newtree'); + } + $tpl->set('s', 'INPUT_ACTION_NEW', $oActionNew->render()); + $tpl->set('s', 'PERMISSION_NEWTREE_DISPLAY', 'block'); + } else { + $oActionNew = new cHTMLHiddenField('action', 'str_newcat', 'cat_new_action'); + $tpl->set('s', 'PERMISSION_NEWTREE', 'disabled'); + $tpl->set('s', 'PERMISSION_NEWTREE_DISPLAY', 'none'); + $tpl->set('s', 'NEW_ACTION', 'str_newcat'); + $tpl->set('s', 'INPUT_ACTION_NEW', $oActionNew->render()); + } + + if ($perm->have_perm_area_action($tmp_area, "str_newcat") || $bAreaAddNewCategory) { + $tpl->set('s', 'CATEGORY_SELECT', $sCategorySelect); + $tpl->set('s', 'PERMISSION_NEWCAT_DISPLAY', 'block'); + } else { + $tpl->set('s', 'CATEGORY_SELECT', ''); + $tpl->set('s', 'PERMISSION_NEWCAT_DISPLAY', 'none'); + } + + if ($perm->have_perm_area_action("str_tplcfg", "str_tplcfg")) { + $tpl->set('s', 'TEMPLATE_BUTTON_NEW', '' . i18n('Configure category') . ''); + $tpl->set('s', 'SELECT_TEMPLATE', getTemplateSelect()); + } else { + $tpl->set('s', 'TEMPLATE_BUTTON_NEW', '' . i18n('Configure category') . ''); + $tpl->set('s', 'SELECT_TEMPLATE', ''); + } + + if ($perm->have_perm_area_action($tmp_area, "str_makevisible")) { + $tpl->set('s', 'MAKEVISIBLE_BUTTON_NEW', '' . i18n('Make online') . ''); + } else { + $tpl->set('s', 'MAKEVISIBLE_BUTTON_NEW', '' . i18n('Make online') . ''); + } + + if ($perm->have_perm_area_action($tmp_area, "str_makepublic")) { + $tpl->set('s', 'MAKEPUBLIC_BUTTON_NEW', '' . i18n('Protect category') . ''); + } else { + $tpl->set('s', 'MAKEPUBLIC_BUTTON_NEW', '' . i18n('Protect category') . ''); + } + } else { + $tpl->set('s', 'NEWCAT', $string); + + $tpl->set('s', 'PERMISSION_NEWTREE', 'disabled'); + $tpl->set('s', 'PERMISSION_NEWTREE_DISPLAY', 'none'); + + $tpl->set('s', 'CATEGORY_SELECT', ''); + $tpl->set('s', 'PERMISSION_NEWCAT_DISPLAY', 'none'); + + $tpl->set('s', 'TEMPLATE_BUTTON_NEW', ''); + $tpl->set('s', 'MAKEVISIBLE_BUTTON_NEW', ''); + $tpl->set('s', 'MAKEPUBLIC_BUTTON_NEW', ''); + + $tpl->set('s', 'NEW_ACTION', 'str_newcat'); + $tpl->set('s', 'SELECT_TEMPLATE', ''); + } + + # Generate template + $clang = new cApiLanguage($lang); + + if ($movesubtreeidcat != 0) { + if (strlen($sMoveSubtreeCatName) > 30) { + $sLimiter = "..."; + } else { + $sLimiter = ""; + } + $sButtonDesc = sprintf(i18n('Cancel moving %s'), '"' . substr($sMoveSubtreeCatName, 0, 30) . $sLimiter . '"'); + $tpl->set('s', 'CANCEL_MOVE_TREE', '' . $sButtonDesc . ' ' . $sButtonDesc . ''); + } else { + $tpl->set('s', 'CANCEL_MOVE_TREE', ''); + } + + $tpl->setEncoding($clang->get("encoding")); + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['str_overview']); +} +?> diff --git a/branches/conlite20/conlite/includes/include.str_subnav.php b/branches/conlite20/conlite/includes/include.str_subnav.php new file mode 100644 index 0000000..6772a4d --- /dev/null +++ b/branches/conlite20/conlite/includes/include.str_subnav.php @@ -0,0 +1,108 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-01 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.str_subnav.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + if (!isset($path)) + { + $path = ""; + } + $area = $_GET['area']; + + $nav = new Contenido_Navigation; + + $sql = "SELECT + idarea + FROM + ".$cfg["tab"]["area"]." AS a + WHERE + a.name = '".Contenido_Security::escapeDB($area, $db)."' OR + a.parent_id = '".Contenido_Security::escapeDB($area, $db)."' + ORDER BY + idarea"; + + $db->query($sql); + + $in_str = ""; + + while ( $db->next_record() ) { + $in_str .= $db->f('idarea') . ','; + } + + $len = strlen($in_str)-1; + $in_str = substr($in_str, 0, $len); + $in_str = '('.$in_str.')'; + + $sql = "SELECT + b.location AS location, + a.name AS name + FROM + ".$cfg["tab"]["area"]." AS a, + ".$cfg["tab"]["nav_sub"]." AS b + WHERE + b.idarea IN ".$in_str." AND + b.idarea = a.idarea AND + b.level = 1 AND + b.online = 1 + ORDER BY + b.idnavs"; + + $db->query($sql); + + while ( $db->next_record() ) { + + /* Extract names from the XML document. */ + $caption = $nav->getName($db->f("location")); + + $tmp_area = $db->f("name"); + + if ($perm->have_perm_area_action($tmp_area)) + { + if ($tmp_area != "upl_edit") + { + # Set template data + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", ''.$caption.''); + $tpl->next(); + } + + } + } + + $tpl->set('s', 'COLSPAN', ($tpl->dyn_cnt * 2) + 2); + + # Generate the third + # navigation layer + $tpl->generate($cfg["path"]["templates"] . "template.subnav_noleft.html"); +?> diff --git a/branches/conlite20/conlite/includes/include.style_edit_form.php b/branches/conlite20/conlite/includes/include.style_edit_form.php new file mode 100644 index 0000000..f218f01 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.style_edit_form.php @@ -0,0 +1,211 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-20 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-08-14, Timo Trautmann, Bilal Arslan - Functions for versionning and storing file meta data added + * + * $Id: include.style_edit_form.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude("external", "edit_area/class.edit_area.php"); + +$sFileType = "css"; + +$sActionCreate = 'style_create'; +$sActionEdit = 'style_edit'; + +$page = new cPage; +$page->setEncoding("utf-8"); + +$tpl->reset(); + +if (!$perm->have_perm_area_action($area, $action)) +{ + $notification->displayNotification("error", i18n("Permission denied")); +} else if (!(int) $client > 0) { + #if there is no client selected, display empty page + $page->render(); +} else { + $path = $cfgClient[$client]["css"]["path"]; + if (stripslashes($_REQUEST['file'])) { + $sReloadScript = ""; + } else { + $sReloadScript = ""; + } + + $sTempFilename = stripslashes($_REQUEST['tmp_file']); + $sOrigFileName = $sTempFilename; + + if (getFileType($_REQUEST['file']) != $sFileType AND strlen(stripslashes(trim($_REQUEST['file']))) > 0) + { + $sFilename .= stripslashes($_REQUEST['file']).".$sFileType"; + }else + { + $sFilename .= stripslashes($_REQUEST['file']); + } + + if (stripslashes($_REQUEST['file'])) { + $sReloadScript = ""; + } else { + $sReloadScript = ""; + } + + // Content Type is css + $sTypeContent = "css"; + $aFileInfo = getFileInformation ($client, $sTempFilename, $sTypeContent, $db); + + # create new file + if ( $_REQUEST['action'] == $sActionCreate AND $_REQUEST['status'] == 'send') + { + $sTempFilename = $sFilename; + createFile($sFilename, $path); + $bEdit = fileEdit($sFilename, $_REQUEST['code'], $path); + updateFileInformation($client, $sFilename, 'css', $auth->auth['uid'], $_REQUEST['description'], $db); + $sReloadScript .= ""; + } + + # edit selected file + if ( $_REQUEST['action'] == $sActionEdit AND $_REQUEST['status'] == 'send') + { + if ($sFilename != $sTempFilename) + { + $sTempFilename = renameFile($sTempFilename, $sFilename, $path); + $sReloadScript .= ""; + }else + { + $sTempFilename = $sFilename; + } + + + updateFileInformation($client, $sOrigFileName, 'css', $auth->auth['uid'], $_REQUEST['description'], $db, $sFilename); + + /** + * START TRACK VERSION + **/ + // For read Fileinformation an get the id of current File + cInclude("includes", "functions.file.php"); + + if((count($aFileInfo) == 0) || ((int)$aFileInfo["idsfi"] == 0)) { + $aFileInfo = getFileInformation ($client, $sTempFilename, $sTypeContent, $db); + $aFileInfo['description'] = ''; + } + + if((count($aFileInfo) == 0) || ($aFileInfo["idsfi"] !="")) { + $oVersion = new VersionFile($aFileInfo["idsfi"], $aFileInfo, $sFilename, $sTypeContent, $cfg, $cfgClient, $db, $client, $area, $frame, $sOrigFileName); + // Create new version + $oVersion->createNewVersion(); + } + + /** + * END TRACK VERSION + **/ + + + $bEdit = fileEdit($sFilename, $_REQUEST['code'], $path); + + } + + # generate edit form + if (isset($_REQUEST['action'])) { + + $sAction = ($bEdit) ? $sActionEdit : $_REQUEST['action']; + + if ($_REQUEST['action'] == $sActionEdit) + { + $sCode = getFileContent($sFilename, $path); + }else + { + $sCode = stripslashes($_REQUEST['code']); # stripslashes is required here in case of creating a new file + } + + $aFileInfo = getFileInformation ($client, $sTempFilename, "css", $db); + + + $form = new UI_Table_Form("file_editor"); + $form->addHeader(i18n("Edit file")); + $form->setWidth("100%"); + $form->setVar("area", $area); + $form->setVar("action", $sAction); + $form->setVar("frame", $frame); + $form->setVar("status", 'send'); + $form->setVar("tmp_file", $sTempFilename); + + $tb_name = new cHTMLTextbox("file", $sFilename, 60); + $ta_code = new cHTMLTextarea("code", clHtmlSpecialChars($sCode), 100, 35, "code"); + $descr = new cHTMLTextarea("description", clHtmlSpecialChars($aFileInfo["description"]), 100, 5); + + + $ta_code->setStyle("font-family: monospace;width: 100%;"); + $descr->setStyle("font-family: monospace;width: 100%;"); + $ta_code->updateAttributes(array("wrap" => getEffectiveSetting('style_editor', 'wrap', 'off'))); + + $form->add(i18n("Name"),$tb_name); + $form->add(i18n("Description"), $descr->render()); + $form->add(i18n("Code"),$ta_code); + + $page->setContent($form->render()); + + $oEditArea = new EditArea('code', 'css', substr(strtolower($belang), 0, 2), true, $cfg); + $page->addScript('editarea', $oEditArea->renderScript()); + + $page->addScript('reload', $sReloadScript); + $page->render(); + } +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.style_files_overview.php b/branches/conlite20/conlite/includes/include.style_files_overview.php new file mode 100644 index 0000000..ecb205e --- /dev/null +++ b/branches/conlite20/conlite/includes/include.style_files_overview.php @@ -0,0 +1,161 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2002-03-02 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.style_files_overview.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes", "functions.file.php"); + +$tpl->reset(); + +if (!(int) $client > 0) { + #if there is no client selected, display empty page + $oPage = new cPage; + $oPage->render(); + return; +} + +$path = $cfgClient[$client]["css"]["path"]; +$sFileType = "css"; + +$sSession = $sess->id; + +$sArea = 'style'; +$sActionDelete = 'style_delete'; +$sActionEdit = 'style_edit'; + +$sScriptTemplate = ' + + + +'; + +$tpl->set('s', 'JAVASCRIPT', $sScriptTemplate); + +# delete file +if ($action == $sActionDelete) +{ + if (!strrchr($_REQUEST['delfile'], "/")) + { + if (file_exists($path.$_REQUEST['delfile'])) + { + unlink($path.$_REQUEST['delfile']); + removeFileInformation($client, $_REQUEST['delfile'], 'css', $db); + } + } + +} + +if ($handle = opendir($path)) +{ + + $aFiles = array(); + + while ($file = readdir($handle)) + { + if(substr($file, (strlen($file) - (strlen($sFileType) + 1)), (strlen($sFileType) + 1)) == ".$sFileType" AND is_readable($path.$file)) + { + $aFiles[] = $file; + }elseif (substr($file, (strlen($file) - (strlen($sFileType) + 1)), (strlen($sFileType) + 1)) == ".$sFileType" AND !is_readable($path.$file)) + { + $notification->displayNotification("error", $file." ".i18n("is not readable!")); + } + } + closedir($handle); + + // display files + if (is_array($aFiles)) + { + + sort($aFiles); + + foreach ($aFiles as $filename) + { + + $bgcolor = ( is_int($tpl->dyn_cnt / 2) ) ? $cfg["color"]["table_light"] : $cfg["color"]["table_dark"]; + $tpl->set('d', 'BGCOLOR', $bgcolor); + + $tmp_mstr = '%s'; + + $html_filename = sprintf($tmp_mstr, 'right_top', + $sess->url("main.php?area=$area&frame=3&file=$filename"), + 'right_bottom', + $sess->url("main.php?area=$area&frame=4&action=$sActionEdit&file=$filename&tmp_file=$filename"), + $filename, $filename, clHtmlSpecialChars($filename)); + + $tpl->set('d', 'FILENAME', $html_filename); + + $delTitle = i18n("Delete File"); + $delDescr = sprintf(i18n("Do you really want to delete the following file:

    %s
    "),$filename); + + if ($perm->have_perm_area_action('style', $sActionDelete)) + { + $tpl->set('d', 'DELETE', ''); + }else + { + $tpl->set('d', 'DELETE', ''); + } + + if (stripslashes($_REQUEST['file']) == $filename) { + $tpl->set('d', 'ID', 'id="marked"'); + } else { + $tpl->set('d', 'ID', ''); + } + + $tpl->next(); + + } + } +}else +{ + if ((int) $client > 0) { + $notification->displayNotification("error", i18n("Directory is not existing or readable!")."
    $path"); + } +} + +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['files_overview']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.style_history.php b/branches/conlite20/conlite/includes/include.style_history.php new file mode 100644 index 0000000..d14a116 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.style_history.php @@ -0,0 +1,188 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release >= 5.0 + * + * {@internal + * created 2008-08-05 + * $Id: include.style_history.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +// For update current layout with Revision +cInclude("includes", "functions.lay.php"); + +// For read Fileinformation an get the id of current File +cInclude("includes", "functions.file.php"); + +// For Editor syntax highlighting +cInclude("external", "edit_area/class.edit_area.php"); + +$sFileName = ""; +$sFileName = $_REQUEST['file']; + +if($sFileName == ""){ + $sFileName = $_REQUEST['idstyle']; // Content Type is css +} + +$sType = "css"; + +$oPage = new cPage; +$oPage->addScript('messageBox', ''); +$oPage->addScript('messageBoxInit', ''); + +if (!$perm->have_perm_area_action($area, 'style_history_manage')) +{ + $notification->displayNotification("error", i18n("Permission denied")); + $oPage->render(); +} else if (!(int) $client > 0) { + $oPage->render(); +} else if (getEffectiveSetting('versioning', 'activated', 'false') == 'false') { + $notification->displayNotification("warning", i18n("Versioning is not activated")); + $oPage->render(); +} else { + + $sTypeContent = "css"; + + $aFileInfo = getFileInformation ($client, $sFileName , $sTypeContent, $db); + + // [action] => history_truncate delete all current history + if($_POST["action"] == "history_truncate") { + $oVersionStyle = new VersionFile($aFileInfo["idsfi"], $aFileInfo, $sFileName ,$sTypeContent, $cfg, $cfgClient, $db, $client, $area, $frame); + $bDeleteFile = $oVersionStyle->deleteFile(); + unset($oVersionStyle); + } + + if ($_POST["style_send"] == true && $_POST["stylecode"] !="" && $sFileName != "" && $aFileInfo["idsfi"]!="") { // save button + // Get Post variables + $oVersionStyle = new VersionFile($aFileInfo["idsfi"], $aFileInfo, $sFileName, $sTypeContent, $cfg, $cfgClient, $db, $client, $area, $frame); + + $sStyleCode = $_POST["stylecode"]; + $sStyleName = $_POST["stylename"]; + $sStyleDesc = $_POST["styledesc"]; + + $sPath = $oVersionStyle->getPathFile(); + + // Edit File + + // There is a need for renaming file + if($sFileName != $sStyleName){ + if (getFileType($sStyleName) != 'css' AND strlen(stripslashes(trim($sStyleName))) > 0) { + $sStyleName = stripslashes($sStyleName).".css"; + } + + renameFile($sFileName, $sStyleName, $oVersionStyle->getPathFile()); + $oPage->addScript("reload", $oVersionStyle->renderReloadScript('style', $sStyleName, $sess)); + } + + if(fileEdit($sStyleName, $sStyleCode, $sPath)) { + // make new revision File + $oVersionStyle->createNewVersion(); + + // Update File Information + updateFileInformation($client, $sFileName, $sType, $aFileInfo["author"], $sStyleDesc, $db, $sStyleName); + $sFileName = $sStyleName; + } + + unset($oVersionStyle); + } + + if($sFileName != "" && $aFileInfo["idsfi"]!="" && $_POST["action"] != "history_truncate") { + $oVersionStyle = new VersionFile($aFileInfo["idsfi"], $aFileInfo, $sFileName, $sTypeContent, $cfg, $cfgClient, $db, $client, $area, $frame); + + // Init Form variables of SelectBox + $sSelectBox = ""; + $oVersionStyle->setVarForm("area", $area); + $oVersionStyle->setVarForm("frame", $frame); + $oVersionStyle->setVarForm("idstyle", $sFileName); + $oVersionStyle->setVarForm("file", $sFileName); + + // create and output the select box, for params please look class.version.php + $sSelectBox = $oVersionStyle->buildSelectBox("style_history", "Style History", "Show History Entry", "idstylehistory"); + + // Generate Form + $oForm = new UI_Table_Form("style_display"); + $oForm->addHeader(i18n("Edit Style")); + $oForm ->setWidth("100%"); + $oForm->setVar("area", "style_history"); + $oForm->setVar("frame", $frame); + $oForm->setVar("idstyle", $sFileName); + $oForm->setVar("style_send", 1); + + + // if send form refresh button + if ($_POST["idstylehistory"] != "") { + $sRevision = $_POST["idstylehistory"]; + } else { + $sRevision = $oVersionStyle->getLastRevision(); + } + + if ($sRevision != '') { + $sPath = $oVersionStyle->getFilePath() . $sRevision; + + // Read XML Nodes and get an array + $aNodes = array(); + $aNodes = $oVersionStyle->initXmlReader($sPath); + + // Create Textarea and fill it with xml nodes + if (count($aNodes) > 1) { + // if choose xml file read value an set it + $sName = $oVersionStyle->getTextBox("stylename", $aNodes["name"], 60); + $sDescription = $oVersionStyle->getTextarea("styledesc", $aNodes["desc"], 100, 10); + $sCode = $oVersionStyle->getTextarea("stylecode", $aNodes["code"], 100, 30, "IdLaycode"); + + } + + } + + // Add new Elements of Form + $oForm->add(i18n("Name"), $sName); + $oForm->add(i18n("Description"), $sDescription); + $oForm->add(i18n("Code"), $sCode); + $oForm->setActionButton("apply", "images/but_ok.gif", i18n("Copy to current"), "c" /*, "mod_history_takeover"*/); //modified it + $oForm->unsetActionButton("submit"); + + // Render and handle History Area + $oPage->setEncoding("utf-8"); + + $oEditAreaOutput = new EditArea('IdLaycode', 'css', substr(strtolower($belang), 0, 2), true, $cfg, !$bInUse); + $oPage->addScript('IdLaycode', $oEditAreaOutput->renderScript()); + + if($sSelectBox !="") { + $oPage->setContent($sSelectBox . $oForm->render()); + + } else { + $notification->displayNotification("warning", i18n("No style history available")); + } + $oPage->render(); + + }else{ + if($bDeleteFile) { + $notification->displayNotification("warning", i18n("Version history was cleared")); + } else { + $notification->displayNotification("warning", i18n("No style history available")); + } + } +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.style_left_top.php b/branches/conlite20/conlite/includes/include.style_left_top.php new file mode 100644 index 0000000..0f90187 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.style_left_top.php @@ -0,0 +1,57 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-09 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.style_left_top.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->set('s', 'ID', 'oTplSel'); +$tpl->set('s', 'CLASS', 'text_medium'); +$tpl->set('s', 'OPTIONS', ''); +$tpl->set('s', 'CAPTION', ''); +$tpl->set('s', 'SESSID', $sess->id); + + +$tpl->set('s', 'ACTION', $select); + +$tmp_mstr = ''; +$area = "style"; +$mstr = sprintf($tmp_mstr, 'right_top', + $sess->url("main.php?area=style&frame=3"), + 'right_bottom', + $sess->url("main.php?area=style&frame=4&action=style_create"), + i18n("Create style")); +if ((int) $client > 0) { + $tpl->set('s', 'NEWSTYLE', $mstr); +} else { + $tpl->set('s', 'NEWSTYLE', i18n('No Client selected')); +} +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['style_left_top']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.subnav.php b/branches/conlite20/conlite/includes/include.subnav.php new file mode 100644 index 0000000..9ba601f --- /dev/null +++ b/branches/conlite20/conlite/includes/include.subnav.php @@ -0,0 +1,83 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-25 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.subnav.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if ( isset($_GET['idcat']) ) { + + $nav = new Contenido_Navigation; + + $sql = "SELECT + b.location AS location, + a.name AS name, + a.relevant AS relevant + FROM + ".$cfg["tab"]["area"]." AS a, + ".$cfg["tab"]["nav_sub"]." AS b + WHERE + b.level = 1 AND + b.idarea = a.idarea AND + b.online = 1 + ORDER BY + b.idnavs"; + + $db->query($sql); + while ( $db->next_record() ) { + + /* Extract names from the XML document. */ + $caption = $nav->getName($db->f("location")); + + $tmp_area = $db->f("name"); + + if ($perm->have_perm_area_action($tmp_area) || ($db->f("relevant") == 0)) + { + # Set template data + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", ''.$caption.''); + $tpl->next(); + } + } + + $tpl->set('s', 'COLSPAN', ($tpl->dyn_cnt * 2) + 2); + + # Generate the third + # navigation layer + $tpl->generate($cfg["path"]["templates"] . $cfg["templates"]["subnav"]); + +} else { + include ($cfg["path"]["contenido"].$cfg["path"]["templates"] . $cfg["templates"]["right_top_blank"]); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.symbolhelp.php b/branches/conlite20/conlite/includes/include.symbolhelp.php new file mode 100644 index 0000000..e0bd37d --- /dev/null +++ b/branches/conlite20/conlite/includes/include.symbolhelp.php @@ -0,0 +1,37 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-14 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.symbolhelp.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +# Generate template +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['symbolhelp']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.system_configuration.php b/branches/conlite20/conlite/includes/include.system_configuration.php new file mode 100644 index 0000000..ee7943d --- /dev/null +++ b/branches/conlite20/conlite/includes/include.system_configuration.php @@ -0,0 +1,196 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release 4.8.8 + * + * {@internal + * created 2008-08-19 + * modified 2010-11-30, Dominik Ziegler, added check of minimum period time at update notifier check period [CON-372] + * + * }} + * + */ +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +function renderBooleanProperty($sName, $aPossValues, $sValue, $sLabel) { + $aReturn = array(); + + if ($aPossValues[0] == $sValue) { + $bChecked = false; + } else { + $bChecked = true; + } + + $oCheckbox = new cHTMLCheckbox($sName, $aPossValues[1], $sName, $bChecked); + $oCheckbox->setLabelText('  '.$sLabel); + $oCheckbox->setStyle('margin:0; padding:0px;margin-left:3px;'); + + $aReturn['input'] = $oCheckbox->toHtml(); + $aReturn['label'] = ''; + + return $aReturn; +} + +function renderLabel($sLabel, $sName, $iWidth = 250, $sSeperator = ':') { + $oLabel = new cHTMLLabel($sLabel.$sSeperator, $sName); + $oLabel->setStyle('padding:3px;display:block;float:left;width:'.$iWidth.'px;'); + return $oLabel->render(); +} + +function renderTextProperty($sName, $sValue, $sLabel) { + $oTextbox = new cHTMLTextbox($sName, $sValue, "50", "96"); + $oTextbox->setStyle('width:320px;'); + $aReturn['input'] = $oTextbox->render(); + $aReturn['label'] = renderLabel($sLabel, $sName); + return $aReturn; +} + +function getPostValue($aProperty) { + $sName = $aProperty['type'].'{_}'.$aProperty['name']; + if (isset($_POST[$sName])) { + if (is_array($aProperty['value'])) { + if (in_array($_POST[$sName], $aProperty['value'])) { + return $_POST[$sName]; + } else { + return $aProperty['value'][0]; + } + } else { + if ($aProperty['value'] == 'integer') { + return (int) $_POST[$sName]; + } else { + return $_POST[$sName]; + } + } + } + + if (is_array($aProperty['value'])) { + return $aProperty['value'][0]; + } else { + return ''; + } +} + +$aManagedProperties = array( + array('type' => 'versioning', 'name' => 'activated', 'value' => array('false', 'true'), 'label' => i18n('Versioning activated'), 'group' => i18n('Versioning')), + array('type' => 'versioning', 'name' => 'path', 'value' => '', 'label' => i18n('Serverpath to version files'), 'group' => i18n('Versioning')), + array('type' => 'versioning', 'name' => 'prune_limit', 'value' => 'integer', 'label' => i18n('Maximum number of stored versions'), 'group' => i18n('Versioning')), + array('type' => 'update', 'name' => 'check', 'value' => array('false', 'true'), 'label' => i18n('Check for updates'), 'group' => i18n('Update notifier')), + array('type' => 'update', 'name' => 'news_feed', 'value' => array('false', 'true'), 'label' => i18n('Get news from conlite.org'), 'group' => i18n('Update notifier')), + array('type' => 'update', 'name' => 'check_period', 'value' => 'integer', 'label' => i18n('Update check period (minutes)'), 'group' => i18n('Update notifier')), + array('type' => 'system', 'name' => 'clickmenu', 'value' => array('false', 'true'), 'label' => i18n('Clickable menu in backend'), 'group' => i18n('Backend')), + array('type' => 'pw_request', 'name' => 'enable', 'value' => array('false', 'true'), 'label' => i18n('Use passwordrequest in Backend'), 'group' => i18n('Backend')), + array('type' => 'maintenance', 'name' => 'mode', 'value' => array('disabled', 'enabled'), 'label' => i18n('Activate maintenance mode'), 'group' => i18n('Backend')), + array('type' => 'edit_area', 'name' => 'activated', 'value' => array('false', 'true'), 'label' => i18n('Use editarea for code highlighting'), 'group' => i18n('Backend')), + array('type' => 'system', 'name' => 'insight_editing_activated', 'value' => array('false', 'true'), 'label' => i18n('Use TinyMce as insight editor'), 'group' => i18n('Backend')), + array('type' => 'backend', 'name' => 'preferred_idclient', 'value' => 'integer', 'label' => i18n('Default client (ID)'), 'group' => i18n('Backend')), + array('type' => 'system', 'name' => 'mail_host', 'value' => '', 'label' => i18n('Mailserver host'), 'group' => i18n('Mailserver')), + array('type' => 'system', 'name' => 'mail_sender', 'value' => '', 'label' => i18n('Mailserver sender mail'), 'group' => i18n('Mailserver')), + array('type' => 'system', 'name' => 'mail_sender_name', 'value' => '', 'label' => i18n('Mailserver sender name'), 'group' => i18n('Mailserver')), + /*array('type' => 'generator', 'name' => 'xhtml', 'value' => array('false', 'true'), 'label' => i18n('Generate XHTML'), 'group' => i18n('Development')),*/ + array('type' => 'generator', 'name' => 'basehref', 'value' => array('false', 'true'), 'label' => i18n('Generate basehref'), 'group' => i18n('Development')), + array('type' => 'imagemagick', 'name' => 'available', 'value' => array('0', '1'), 'label' => i18n('Use image magic (if available)'), 'group' => i18n('Development')) + ); + +$aSettings = getSystemProperties(1); + +if (isset($_POST['action']) && $_POST['action'] == 'edit_sysconf' && $perm->have_perm_area_action($area, 'edit_sysconf')) { + $bStored = false; + foreach ($aManagedProperties as $aProperty) { + $sValue = getPostValue($aProperty); + $sStoredValue = $aSettings[$aProperty['type']][$aProperty['name']]['value']; + + if ($sStoredValue != $sValue && (is_array($aProperty['value']) && $sValue != '' || !is_array($aProperty['value']))) { + if ( $aProperty['type'] == 'update' && $aProperty['name'] == 'check_period' && (int) $sValue < 60 ) { + $sNotification = $notification->displayNotification("error", i18n("Update check period must be at least 60 minutes.")); + $bStored = false; + break; + } else { + setSystemProperty($aProperty['type'], $aProperty['name'], $sValue); + $bStored = true; + } + } + } + if ($bStored) { + $sNotification = $notification->displayNotification("info", i18n("Changes saved")); + } +} + + + +$aSettings = getSystemProperties(1); + +$oForm = new UI_Table_Form("system_configuration"); +$oForm->addHeader(i18n("System Configuration")); +$oForm ->setWidth("770"); +$oForm->setVar("area", $area); +$oForm->setVar("frame", $frame); +$oForm->setVar("action", 'edit_sysconf'); + +$sCurGroup = ''; +$sLeftContent = ''; + +$sRowTemplate = '

    %s

    '; + +foreach ($aManagedProperties as $aProperty) { + $sName = $aProperty['type'].'{_}'.$aProperty['name']; + if (isset($aSettings[$aProperty['type']][$aProperty['name']]['value'])) { + $sValue = $aSettings[$aProperty['type']][$aProperty['name']]['value']; + } else { + $sValue = ''; + } + + if (is_array($aProperty['value'])) { + $aHtmlElement = renderBooleanProperty($sName, $aProperty['value'], $sValue, $aProperty['label']); + } else { + $aHtmlElement = renderTextProperty($sName, $sValue, $aProperty['label']); + } + + if ($sCurGroup == '' || $sCurGroup == $aProperty['group']) { + if ($sCurGroup == '') { + $sCurGroup = $aProperty['group']; + } + $sLeftContent .= sprintf($sRowTemplate, $aHtmlElement['label']. $aHtmlElement['input']); + } else { + $oForm->add(renderLabel($sCurGroup, '', 150, ''), $sLeftContent); + $sCurGroup = $aProperty['group']; + $sLeftContent = sprintf($sRowTemplate, $aHtmlElement['label']. $aHtmlElement['input']); + } +} + +$oForm->add(renderLabel($sCurGroup, '', 150, ''), $sLeftContent); + +$sJs = ''; + +$oPage = new cPage; +if ($perm->have_perm_area_action($area, 'edit_sysconf')) { + $oPage->setContent($sNotification.$oForm->render()); +} else { + $oPage->setContent($notification->returnNotification("error", i18n('Access denied'), 1)); +} +$oPage->addScript('setMenu', $sJs); +$oPage->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.system_db_backup.php b/branches/conlite20/conlite/includes/include.system_db_backup.php new file mode 100644 index 0000000..a7a09e9 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.system_db_backup.php @@ -0,0 +1,408 @@ + + * @copyright (c) 2012-2013, conlite.org + * + * $Id: include.system_db_backup.php 438 2016-05-17 17:31:24Z oldperl $ + */ +/* @var $sess Contenido_Session */ +/* @var $perm Contenido_Perm */ +/* @var $auth Contenido_Challenge_Crypt_Auth */ +/* @var $notification Contenido_Notification */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +define('CL_BACKUP_COUNT_LINES', 20000); +define('CL_BACKUP_MAX_RELOADS', 600); +define('CL_BACKUP_VERSION', 'CL DB-Backup 1.3.4'); +define('CL_BACKUP_PATH', $cfg['path']['conlite_backup']); +define('CL_BACKUP_LOGFILE', $cfg['path']['conlite_logs'] . "db-backup-log.txt"); +define('CL_BACKUP_START_IMG', $cfg['path']['contenido_html'] . $cfg['path']['images'] . "db_backup_start.png"); +define('CL_BACKUP_START_IMG_OFF', $cfg['path']['contenido_html'] . $cfg['path']['images'] . "db_backup_start_off.png"); + +$aMessage = array(); +$bNoBackup = false; +$bFinalStep = false; +// check backup path +if (!is_dir(CL_BACKUP_PATH) || !is_writable(CL_BACKUP_PATH)) { + $notification->displayNotification("error", i18n("Backupfolder missing or not writable!")); + $bNoBackup = true; +} +$backup_action = (isset($_GET['cl_action']) ? $_GET['cl_action'] : ''); + +// check dbuser rights +/* +echo "
    ";
    +$oDb = new DB_ConLite();
    +//echo $sSql = "SHOW GRANTS FOR '".$cfg['db']['connection']['user']."'@'".$cfg['db']['connection']['host']."';";
    +echo $sSql = "SHOW GRANTS FOR '" . $cfg['db']['connection']['user'] . "';";
    +$oDb->query($sSql);
    +while ($oDb->next_record()) {
    +    print_r($oDb->toArray());
    +}
    +*/
    +
    +$sTable = "";
    +$bk_filename = str_replace(array("&cl_action=backupnow", "&"), array("", "&"), $sess->self_url()); // web28 - 2011-07-02 - Security Fix - PHP_SELF
    +$info_h1 = i18n("Start your Backup!");
    +$info_h2 = ' ';
    +$oImgButton = new cHTMLImage();
    +if ($bNoBackup) {
    +    $oImgButton->setSrc(CL_BACKUP_START_IMG_OFF);
    +    $oImgButton->setAlt(mi18n("Backup not possible!"));
    +} else {
    +    $oImgButton->setSrc(CL_BACKUP_START_IMG);
    +    $oImgButton->setAlt(mi18n("Click to start Backup!"));
    +}
    +$sImage = $oImgButton->render();
    +$oStartButton = new cHTMLLink($sess->self_url() . "&cl_action=backupnow");
    +$oStartButton->_setContent($sImage);
    +$button_back = ($bNoBackup) ? $sImage : $oStartButton->toHtml();
    +
    +//aktiviert die Ausgabepufferung
    +ob_start();
    +
    +//Start Session
    +session_name('dbdump');
    +if (!isset($_SESSION)) {
    +    session_start();
    +}
    +//unset($_SESSION['dump']);
    +//#### BACKUP ANFANG #######
    +if (isset($_SESSION['dump'])) {
    +    $dump = $_SESSION['dump'];
    +    $info_h2 = ' ';
    +    $button_back = ' ';
    +} else {
    +    $oUser = new User();
    +    $oUser->loadUserByUserID($auth->auth['uid']);
    +    $bHasPermission = ($oUser->getUserProperty("system", "cl_backup_allowed") == 'true') ? true : false;
    +    if (!$perm->isSysadmin() && !$bHasPermission) {
    +        $notification->displayNotification("error", i18n("Permission denied!"));
    +        exit();
    +    }
    +}
    +
    +cInclude("classes", "class.cl_db_backup.php");
    +
    +if ($backup_action == 'backupnow') {
    +    $oDB = new DB_ConLite();
    +    $oDB2 = new DB_ConLite();
    +
    +    $info_h1 = i18n("Starting Backup.");
    +    $info_h2 = ' ';
    +
    +    $restore = array();
    +    unset($_SESSION['restore']);
    +    $dump = array();
    +    unset($_SESSION['dump']);
    +
    +
    +    @set_time_limit(0);
    +
    +    //BOF Disable "STRICT" mode!
    +    $vers = $oDB->getClientInfo();
    +    if (substr($vers, 0, 1) > 4) {
    +        $oDB->query("SET SESSION sql_mode=''");
    +        //@mysql_query("SET SESSION sql_mode=''", $oDB->Link_ID);
    +    }
    +    //EOF Disable "STRICT" mode!
    +
    +    $mysql_version = '-- MySQL-Client-Version: ' . $oDB->getClientInfo() . "\n--\n";
    +
    +    $schema = '-- ConLite ' . $cfg['version'] . "\n" .
    +            '--' . "\n" .
    +            '-- ' . CL_BACKUP_VERSION . ' (c) 2012-' . date('Y') . ' php-backoffice.de' . "\n" .
    +            '--' . "\n" .
    +            '-- Database: ' . $cfg['db']['connection']['database'] . "\n" .
    +            '-- Database Server: ' . $oDB->getServerInfo() . "\n" .
    +            '--' . "\n" . $mysql_version .
    +            '-- Backup Date: ' . date("r") . "\n\n";
    +    $backup_file = 'dbd_' . $cfg['db']['connection']['database'] . '-' . date('YmdHis');
    +    $dump['file'] = CL_BACKUP_PATH . $backup_file;
    +
    +    if (!isset($dump['compress'])) {
    +        if (getEffectiveSetting("cl-backup", "use_gzip", false) == 'true') {
    +            $dump['compress'] = true;
    +            $dump['file'] .= '.sql.gz';
    +        } else {
    +            $dump['compress'] = false;
    +            $dump['file'] .= '.sql';
    +        }
    +    }
    +
    +    if (!isset($dump['complete_inserts'])) {
    +        if (getEffectiveSetting("cl-backup", "complete_inserts", false) == 'true') {
    +            $dump['complete_inserts'] = 'yes';
    +        }
    +    }
    +
    +    $oDB->query("SHOW TABLE STATUS FROM `" . $cfg['db']['connection']['database'] . "` LIKE '" . $cfg['sql']['sqlprefix'] . "_%'");
    +    $dump['num_tables'] = $oDB->num_rows();
    +
    +    //Tabellennamen in Array einlesen
    +    $dump['tables'] = Array();
    +    $dump['num_rows'] = -1;
    +    //echo "
    ";
    +    if ($dump['num_tables'] > 0) {
    +        $dump['num_rows'] = 0;
    +        for ($i = 0; $i < $dump['num_tables']; $i++) {
    +            $oDB->next_record();
    +            $row = $oDB->toArray(FETCH_ASSOC);
    +            $dump['tables'][$i] = $row['Name'];
    +            $oDB2->query("SELECT COUNT(*) FROM " . $row['Name']);
    +            $oDB2->next_record();
    +            //$result = mysql_query("SELECT COUNT(*) FROM ".$row['Name'], $oDB->Link_ID);
    +            $aTmp = $oDB2->toArray(FETCH_ASSOC);
    +            $dump['num_rows'] += $aTmp[0];
    +            //print_r($row);
    +        }
    +        $dump['nr'] = 0;
    +
    +        $dump['table_offset'] = 0;
    +        $_SESSION['dump'] = $dump;
    +        //echo '
    ';
    +        //print_r($dump);
    +        /*
    +         * Statuszeile kompatibel zu MySQLDumper (MSD)
    +         * AUFBAU der Statuszeile:
    +         *  -- Status:tabellenzahl:datensätze:Multipart:Datenbankname:script:scriptversion:Kommentar:MySQLVersion:Backupflags:SQLBefore:SQLAfter:Charset:EXTINFO
    +         *  Aufbau Backupflags (1 Zeichen pro Flag, 0 oder 1, 2=unbekannt)
    +         *  (complete inserts)(extended inserts)(ignore inserts)(delayed inserts)(downgrade)(lock tables)(optimize tables)
    +         */
    +        $statusline = array();
    +        $statusline['tables'] = $dump['num_tables'];
    +        $statusline['records'] = $dump['num_rows'];
    +        $statusline['part'] = 'MP_0';
    +        $statusline['dbname'] = $cfg['db']['connection']['database'];
    +        $statusline['script'] = 'php';
    +        $statusline['scriptversion'] = '1.24';
    +        $statusline['comment'] = 'Backup made by ' . CL_BACKUP_VERSION;
    +        $statusline['mysqlversion'] = $oDB->getServerInfo();
    +        $statusline['flags'] = '2222222';
    +        $statusline['sqlbefore'] = '';
    +        $statusline['sqlafter'] = '';
    +        $statusline['charset'] = $oDB->getClientEncoding();
    +        $statusline['extinfo'] = 'EXTINFO';
    +
    +        $sStatLine = "-- Status:";
    +        $sStatLine .= implode(":", $statusline) . "\n\n";
    +        ;
    +        $schema = $sStatLine . $schema;
    +        //die($schema);
    +        $oClBackup = new clDbBackup();
    +        $oClBackup->_writeToDumpFile($schema);
    +        $selbstaufruf = '';
    +    } else {
    +        $aMessage['level'] = Contenido_Notification::LEVEL_ERROR;
    +        $aMessage['text'] = "Error: Cannot read database!";
    +//else ERROR
    +    }
    +}
    +//Seite neu laden wenn noch nicht alle Tabellen ausgelesen sind
    +if ($dump['num_tables'] > 0 && $backup_action != 'backupnow') {
    +
    +    if (!is_object($oClBackup)) {
    +        $oClBackup = new clDbBackup();
    +    }
    +
    +    $info_h1 = i18n("Backup in Progress!");
    +
    +    @set_time_limit(0);
    +
    +    if ($dump['nr'] < $dump['num_tables']) {
    +        $nr = $dump['nr'];
    +        $dump['aufruf'] ++;
    +        $table_ok = i18n("Tables saved: ") . ($nr + 1) . '

    ' . i18n("Last processed: ") + . $dump['tables'][$nr] . '

    ' . i18n("Pageviews: ") . $dump['aufruf']; + + //Neue Tabelle + if ($dump['table_offset'] == 0) { + $dump['table_records'] = $oClBackup->_writeTableHeader($dump['tables'][$nr]); + $dump['anzahl_zeilen'] = CL_BACKUP_COUNT_LINES; + $dump['table_offset'] = 1; + $dump['zeilen_offset'] = 0; + } else { + //Daten aus Tabelle lesen + //GetTableData($dump['tables'][$nr]); + $oClBackup->_writeTableData($dump['tables'][$nr]); + } + + $_SESSION['dump'] = $dump; + + $selbstaufruf = ''; + //Verhindert Endlosschleife - Script wir nach MAX_RELOADS beendet + if ($dump['aufruf'] > CL_BACKUP_MAX_RELOADS) { + $selbstaufruf = ''; + } + } else { //Fertig + $info_h2 = ' '; + $info_h1 = i18n("Backup done!"); + $table_ok = i18n("Tables saved: ") . $dump['nr'] . '

    ' . i18n("Pageviews: ") . $dump['aufruf']; + $selbstaufruf = ''; + unset($_SESSION['dump']); + $oBackButton = new cHTMLLink($sess->self_url()); + $oBackButton->_setContent(i18n("Go Back to Overview")); + $button_back = $oBackButton->toHtml(); + $bFinalStep = true; + if (!is_object($oClBackup)) { + $oClBackup = new clDbBackup(); + } + $oClBackup->writeLog(); + } +} +//#### BACKUP ENDE ####### +// Let's build the file table +if (!isset($_SESSION['dump']) && !$bFinalStep) { + if (!is_object($oClBackup)) { + $oClBackup = new clDbBackup(); + } + $aFiles = $oClBackup->getDumpFiles(CL_BACKUP_PATH); + //print_r($aFiles); + $oFileList = new cScrollList(); + $oFileList->objTable->setID("files_tab"); + $oFileList->setHeader(mi18n("#"), mi18n("Date"), mi18n("Filename"), mi18n("Filesize"), mi18n("Tables/Entries"), "", mi18n("Actions")); + $oFileList->objHeaderItem->updateAttributes(array('style' => "width: 20px; padding: 0 4px;white-space:nowrap; border: 1px solid #B3B3B3; border-bottom: 0;")); + $oFileList->setSortable(1, true); + $oFileList->setSortable(2, true); + $iLoop = 0; + if (is_array($aFiles) && count($aFiles) > 0) { + foreach ($aFiles as $sKey => $aFile) { + // send file on request + if ($cl_action == 'download_file' && $fileid == $sKey) { + $oClBackup->sendFile(CL_BACKUP_PATH . $aFile['filename']); + die(); + } + + if ($cl_action == 'del_file' && $fileid == $sKey) { + if (unlink(CL_BACKUP_PATH . $aFile['filename'])) { + $notification->displayNotification('info', i18n("File successfully deleted.")); + continue; + } + } + + $oDelImg = new cHTMLImage(); + $oDelImg->setSrc($cfg['path']['contenido_html'] . $cfg['path']['images'] . "but_delete.gif"); + $oDelImg->setClass("img_but"); + $oDelImg->setAlt(i18n("Delete File")); + $oDelete = new cHTMLLink($sess->url($sess->self_url() . "&cl_action=del_file&fileid=$sKey"), "delete"); + $oDelete->setContent($oDelImg->render()); + + $oDownloadImg = new cHTMLImage(); + $oDownloadImg->setSrc($cfg['path']['contenido_html'] . $cfg['path']['images'] . "but_downloadlist.gif"); + $oDownloadImg->setClass("img_but"); + $oDownloadImg->setAlt(i18n("Download File")); + $oDownload = new cHTMLLink($sess->url($sess->self_url() . "&cl_action=download_file&fileid=$sKey"), "download"); + $oDownload->setContent($oDownloadImg->render()); + + $aFileStats = readStatusLineFromFile(CL_BACKUP_PATH . $aFile['filename']); + if (is_array($aFileStats)) { + $sFileStats = $aFileStats['tables'] . " / " . $aFileStats['records']; + } else { + $sFileStats = ''; + } + + $oFileList->setData($iLoop, $iLoop + 1, date("Y-m-d H:i", $aFile['ctime']), $aFile['filename'], human_readable_size($aFile['size']), $sFileStats, " ", $oDelete->render() . $oDownload->render()); + $iLoop++; + } + } + + $sFileList = $oFileList->render(true); +} + +function readStatusLineFromFile($sFile) { + $FileName = basename($sFile); + if (strtolower(substr($FileName, -2)) == 'gz') { + $fp = gzopen($sFile, "r"); + if ($fp === false) + die('Can\'t open file ' . $FileName); + $sline = gzgets($fp, 40960); + gzclose($fp); + } else { + $fp = fopen($sFile, "r"); + if ($fp === false) + die('Can\'t open file ' . $FileName); + $sline = fgets($fp, 5000); + fclose($fp); + } + $aStatusLine = clStatusLine2Array($sline); + return $aStatusLine; +} + +function clStatusLine2Array($sLine) { + + if (substr($sLine, 0, 9) != "-- Status") + return false; + + $aStatus = explode(":", $sLine); + + $aRet = array(); + $aRet['tables'] = $aStatus[1]; + $aRet['records'] = $aStatus[2]; + $aRet['dbname'] = $aStatus[4]; + if ((isset($aStatus[12])) && trim($aStatus[12]) != 'EXTINFO') { + $aRet['charset'] = $aStatus[12]; + } else { + $aRet['charset'] = '?'; + } + return $aRet; +} +?> + + + + + <?php echo TITLE; ?> + + + + '; + ?> +
    + +
    +

    +

    +

    +

    +

    +
    +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.system_purge.php b/branches/conlite20/conlite/includes/include.system_purge.php new file mode 100644 index 0000000..99a91d3 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.system_purge.php @@ -0,0 +1,226 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.8.12 + * + * $Id: include.system_purge.php 86 2012-06-01 16:46:19Z oldperl $: + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude('includes', 'functions.database.php'); + +$tpl->reset(); + +$iClientSelectSize = 4; +$oClient = new Client(); +$aAvailableClient = $oClient->getAvailableClients(); + +$sInfoMsg = ''; + +$action = 'do_purge'; +if (($action == "do_purge") && (!$perm->have_perm_area_action_anyitem($area, $action))) { + $notification->displayNotification("error", i18n("Permission denied")); +} else { + if (isset($_POST['send']) && $_POST['send'] == 'store') { + $aClientToClear = array(); + $aClientName = array(); + + if (isset($_POST['selectClient']) && $_POST['selectClient'] == 'all') { + // selected all clients + + foreach ($aAvailableClient as $iClientId => $aClient) { + $aClientToClear[] = $iClientId; + } + + } else if (isset($_POST['purge_clients']) && is_array($_POST['purge_clients']) && count($_POST['purge_clients']) > 0) { + // selected multiple clients + foreach ($_POST['purge_clients'] as $iClientId) { + $aClientToClear[] = (int)$iClientId; + } + + } else if (isset($_POST['purge_clients']) && (int)$_POST['purge_clients'] > 0) { + // selected single client + $aClientToClear[] = (int)$_POST['purge_clients']; + } + + $bError = false; + $sErrorMsg = ''; + $oPurge = new Purge($db, $cfg, $cfgClient); + + if (count($aClientToClear) > 0) { + // execute the selected actions + + foreach ($aAvailableClient as $iClientId => $aClient) { + $aClientName[$iClientId] = $aClient['name']; + } + + + foreach ($aClientToClear as $iClientId) { + $iClientId = (int) $iClientId; + if ($iClientId > 0) { + if (isset($_POST['conCode']) && $_POST['conCode'] == 1) { + if (!$oPurge->resetClientConCode($iClientId)) { + $bError = true; + $sErrorMsg .= i18n("Client ") . $aClientName[$iClientId] . ': ' . + sprintf(i18n("The entries of %s table are not deleted!"), $cfg['tab']['code']) . "
    "; + } + } + + if (isset($_POST['conCatArt']) && $_POST['conCatArt'] == 1) { + if (!$oPurge->resetClientConCatArt($iClientId)) { + $bError = true; + $sErrorMsg .= i18n("Client ") . $aClientName[$iClientId] . ': ' . + sprintf(i18n("The %s is not updated!"), $cfg['tab']['cat_art']) . "
    "; + } + } + + if (isset($_POST['clientCache']) && $_POST['clientCache'] == 1) { + if (!$oPurge->clearClientCache($iClientId)) { + $bError = true; + $sErrorMsg .= i18n("Client ") . $aClientName[$iClientId] . ': ' . + i18n("The cache is not deleted!") . "
    "; + } + } + + if (isset($_POST['clientLog']) && $_POST['clientLog'] == 1) { + if (!$oPurge->clearClientLog($iClientId)) { + $bError = true; + $sErrorMsg .= i18n("Client ") . $aClientName[$iClientId] . ': ' . + i18n("The log is not deleted!") . "
    "; + } + } + + if (isset($_POST['clientHistory']) && $_POST['clientHistory'] == 1) { + $bKeep = ($_POST['keepHistory'] == 1 && (int) $_POST['keepHistoryNumber'] > 0) ? true : false; + if (!$oPurge->clearClientHistory($iClientId, $bKeep, (int) $_POST['keepHistoryNumber'])) { + $bError = true; + $sErrorMsg .= i18n("Client ") . $aClientName[$iClientId] . ': ' . + i18n("The history is not deleted!") . "
    "; + } + } + + if ($sErrorMsg != '') { + $sErrorMsg .= "
    "; + } + + } + } + } + + if (isset($_POST['conInuse']) && $_POST['conInuse'] == 1) { + if (!$oPurge->resetConInuse()) { + $bError = true; + $sErrorMsg .= sprintf(i18n("The entries of %s table are not deleted!"), $cfg['tab']['inuse']) . "
    "; + } + } + + if (isset($_POST['conPHPLibActiveSession']) && $_POST['conPHPLibActiveSession'] == 1) { + if (!$oPurge->resetPHPLibActiveSession()) { + $bError = true; + $sErrorMsg .= sprintf(i18n("The entries of %s table are not deleted!"), $cfg['tab']['phplib_active_sessions']) . + "
    "; + } + } + + if (isset($_POST['conLog']) && $_POST['conLog'] == 1) { + if (!$oPurge->clearConLog()) { + $bError = true; + $sErrorMsg .= i18n("The contenido log is not cleaned!") . "
    "; + } + } + + if (isset($_POST['conCache']) && $_POST['conCache'] == 1) { + if (!$oPurge->clearConCache()) { + $bError = true; + $sErrorMsg .= i18n("The contenido cache is not deleted!") . "
    "; + } + } + + if (isset($_POST['conCronjobs']) && $_POST['conCronjobs'] == 1) { + if (!$oPurge->clearConCronjob()) { + $bError = true; + $sErrorMsg .= i18n("The contenido cronjobs are not cleaned!") . "
    "; + } + } + + if (isset($_POST['conSequence']) && $_POST['conSequence'] == 1) { + if (!$oPurge->updateConSequence()) { + $bError = true; + $sErrorMsg .= i18n("Update of sequence table not completed!") . "
    "; + } + } + + if ($bError === false) { + $sInfoMsg = $notification->returnNotification("info", i18n("The changes were successfully executed.")); + } else { + $sErrorComplete = i18n("The changes were not all successfully completed.") . "

    " . $sErrorMsg; + $sInfoMsg = $notification->returnNotification("error", $sErrorComplete); + } + } + + $oHtmlSelectHour = new cHTMLSelectElement ('purge_clients[]', '', 'client_select'); + + $i = 0; + foreach ($aAvailableClient as $iClientId => $aClient) { + $oHtmlSelectOption = new cHTMLOptionElement($aClient['name'], $iClientId, false); + $oHtmlSelectHour->addOptionElement($i, $oHtmlSelectOption); + $i++; + } + + $oHtmlSelectHour->setMultiselect(); + $oHtmlSelectHour->setSize($iClientSelectSize); + $sSelectClient = $oHtmlSelectHour->toHtml(); + $tpl->set('s', 'SELECT_CLIENT', $sSelectClient); + + $tpl->set('s', 'TITLE', i18n("System purge")); + $tpl->set('s', 'ERR_MSG_SELECT_CLIENT', i18n("No Client selected!")); + + $tpl->set('s', 'CONTENIDO', $contenido); + + $tpl->set('s', 'GROUP_CLIENT', i18n("Client")); + $tpl->set('s', 'CLIENT_SELECT_ALL', i18n("all clients")); + $tpl->set('s', 'CLIENT_SELECT', i18n("from list")); + $tpl->set('s', 'CLIENT_CHOOSE', i18n("Select clients")); + $tpl->set('s', 'CON_CODE', sprintf(i18n("Reset the table %s"), $cfg['tab']['code'])); + $tpl->set('s', 'CON_CAT_ART', sprintf(i18n("Activate the code generation in %s"), $cfg['tab']['code'], $cfg['tab']['cat_art'])); + $tpl->set('s', 'CON_INUSE', sprintf(i18n("Reset the table %s"), $cfg['tab']['inuse'])); + $tpl->set('s', 'CLIENT_CACHE', i18n("Clear client cache")); + $tpl->set('s', 'CLIENT_LOG', i18n("Clear client log file")); + $tpl->set('s', 'CLIENT_HISTORY', i18n("Clear client history")); + $tpl->set('s', 'NUMBER_OF_HISTORY', i18n("Keep last histories")); + + $tpl->set('s', 'GROUP_CONTENIDO', i18n("Contenido")); + $tpl->set('s', 'CON_LOG', i18n("Clear contenido log file")); + $tpl->set('s', 'CON_ACTIVE_SESSION', sprintf(i18n("Reset the table %s"), $cfg['tab']['phplib_active_sessions'])); + $tpl->set('s', 'CON_CACHE', i18n("Clear contenido cache")); + $tpl->set('s', 'CON_CRONJOB', i18n("Reset cronjobs")); + $tpl->set('s', 'CON_SEQUENCE', i18n("Update sequence table")); + + $tpl->set('s', 'BOX_TITLE', i18n("System purge")); + $tpl->set('s', 'BOX_MESSAGE', i18n("These changes can not be cancelled.") . '

    ' . i18n("Do you really want to complete it?")); + + $tpl->set('s', 'INFO_MSG_BOX', $sInfoMsg); + $tpl->set('s', 'ERR_MSG_BOX', $notification->returnNotification("error", '')); + + $tpl->set('s', 'ERR_MSG_NO_ACTION', i18n("No action selected!")); + + $tpl->set('s', 'SUBMIT_TEXT', i18n("Send")); + + $tpl->generate($cfg['path']['templates'] . $cfg['templates']['system_purge']); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.system_sysvalues.php b/branches/conlite20/conlite/includes/include.system_sysvalues.php new file mode 100644 index 0000000..58f742d --- /dev/null +++ b/branches/conlite20/conlite/includes/include.system_sysvalues.php @@ -0,0 +1,140 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-08-15 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2011-05-18, Ortwin Pinke, clean url due to validate page + * + * $Id: include.system_sysvalues.php 378 2015-11-09 20:01:25Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl->reset(); + +/* + * print out tmp_notifications if any action has been done +*/ +if (isset($tmp_notification)) +{ + $tpl->set('s', 'TEMPNOTIFICATION', $tmp_notification); +} +else +{ + $tpl->set('s', 'TEMPNOTIFICATION', ''); +} + +/* get system variables for output */ +writeSystemValuesOutput($usage='output'); + +// error log +$sNewErrorLogPath = $cfg['path']['conlite_logs']."errorlog.txt"; +$sOldErrorLogPath = $cfg['path']['contenido']."logs/errorlog.txt"; +$sUseLog = ''; +$bHasLog = false; + +if(file_exists($sNewErrorLogPath)) { + $sUseLog = $sNewErrorLogPath; + $bHasLog = true; +} else if(file_exists($sOldErrorLogPath)) { + $sUseLog = $sOldErrorLogPath; + $bHasLog = true; +} +if($bHasLog) { + $errorLogBuffer = ''; + $errorLogHandle = fopen ($sUseLog, "rb"); + $txtAreaHeight = "200"; + + /* If the file is larger than 16KB, seek to the file's length - 16KB) */ + fseek($errorLogHandle, -16384,SEEK_END); + + while (!feof($errorLogHandle)) + { + $errorLogBuffer .= fgets($errorLogHandle, 16384); + } + fclose ($errorLogHandle); + if (strlen ($errorLogBuffer) == 0) { + $errorLogBuffer = i18n("No error log entries found"); + $txtAreaHeight = "20"; + } +} else { + $errorLogBuffer = i18n("No error log file found"); + $txtAreaHeight = "20"; +} +$tpl->set('s', 'TXTERRORLOGSIZE', $txtAreaHeight); +$tpl->set('s', 'ERRORLOG', $errorLogBuffer); + +// upgrade error log +$sNewErrorLogPath = $cfg['path']['conlite_logs']."install.log.txt"; +$sOldErrorLogPath = $cfg['path']['contenido']."logs/install.log.txt"; +$sUseLog = ''; +$bHasLog = false; + +if(file_exists($sNewErrorLogPath)) { + $sUseLog = $sNewErrorLogPath; + $bHasLog = true; +} else if(file_exists($sOldErrorLogPath)) { + $sUseLog = $sOldErrorLogPath; + $bHasLog = true; +} +if($bHasLog) { + $upgErrorLogHandle = fopen ($sUseLog, "rb"); + $txtAreaHeight = "200"; + + /* If the file is larger than 200KB, seek to the file's length - 200KB) */ + fseek($upgErrorLogHandle, -16384,SEEK_END); + + while (!feof($upgErrorLogHandle)) + { + $upgErrorLogBuffer.= fgets($upgErrorLogHandle, 16384); + } + fclose ($upgErrorLogHandle); + if (strlen ($upgErrorLogBuffer) == 0) + { + $upgErrorLogBuffer = i18n("No install error log entries found"); + $txtAreaHeight = "20"; + } + +} +else +{ + $upgErrorLogBuffer = i18n("No error log entries found"); + $txtAreaHeight = "20"; +} +$tpl->set('s', 'TXTUPGERRORLOGSIZE', $txtAreaHeight); +$tpl->set('s', 'UPGERRORLOG', $upgErrorLogBuffer); + +/* + * parameter which log shoult be cleared + * log = 1 clear /contenido/logs/errorlog.txt + * log = 2 clear /contenido/upgrade_errorlog.txt +*/ +$tpl->set('s', 'LOGEMPTYURL', clHtmlEntities($sess->url("main.php?area=$area&frame=$frame&action=emptyLog&log=1"))); +$tpl->set('s', 'UPGLOGEMPTYURL', clHtmlEntities($sess->url("main.php?area=$area&frame=$frame&action=emptyLog&log=2"))); + +// parse out template +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['systam_variables']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.systemsettings.php b/branches/conlite20/conlite/includes/include.systemsettings.php new file mode 100644 index 0000000..42a0a83 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.systemsettings.php @@ -0,0 +1,194 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-11-18 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-11-13, Timo Trautmann - Fixed wron escaping of chars + * + * $Id: include.systemsettings.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$aManagedValues = array('versioning_prune_limit', 'update_check', 'update_news_feed', 'versioning_path', 'versioning_activated', + 'update_check_period', 'system_clickmenu', 'system_mail_host', 'system_mail_sender', + 'system_mail_sender_name', 'pw_request_enable', 'maintenance_mode', 'edit_area_activated', + 'backend_preferred_idclient', 'generator_basehref', 'generator_xhtml', 'imagemagick_available', + 'system_insight_editing_activated'); + +if ($action == "systemsettings_save_item") { + if (!in_array($systype . '_' . $sysname, $aManagedValues)) { + setSystemProperty($systype, $sysname, $sysvalue, $csidsystemprop); + } else { + $sWarning = $notification->returnNotification("warning", i18n('Please set this property in systemsettings directly'), 1) . '
    '; + } +} + +if ($action == "systemsettings_delete_item") { + deleteSystemProperty($systype, $sysname); +} + +$settings = getSystemProperties(1); + +$list = new UI_List; +$list->setSolidBorder(true); +$list->setCell(1, 1, i18n("Type")); +$list->setCell(1, 2, i18n("Name")); +$list->setCell(1, 3, i18n("Value")); +$list->setCell(1, 4, " "); +$list->setBgColor(1, $cfg['color']['table_header']); +$list->setBorder(1); + +$count = 2; + +$oLinkEdit = new Link; +$oLinkEdit->setCLink($area, $frame, "systemsettings_edit_item"); +$oLinkEdit->setContent('' . i18n('); + +$oLinkForward = new Link; +$oLinkForward->setCLink('system_configuration', $frame, ""); +$oLinkForward->setContent('' . i18n('); + +$oLinkDelete = new Link; +$oLinkDelete->setCLink($area, $frame, "systemsettings_delete_item"); +$oLinkDelete->setContent('' . i18n('); + +$oLinkDeleteForward = '' . i18n('; + +$spacer = new cHTMLImage; +$spacer->setWidth(5); + +if (is_array($settings)) { + foreach ($settings as $key => $types) { + foreach ($types as $type => $value) { + $oLinkEdit->setCustom("sysname", urlencode($type)); + $oLinkEdit->setCustom("systype", urlencode($key)); + + $oLinkDelete->setCustom("sysname", urlencode($type)); + $oLinkDelete->setCustom("systype", urlencode($key)); + + $link = $oLinkEdit; + $dlink = $oLinkDelete->render(); + + if (in_array($key . '_' . $type, $aManagedValues)) { + #ignore record + } else if (($action == "systemsettings_edit_item") && (stripslashes($systype) == $key) && (stripslashes($sysname) == $type)) { + $oInputboxValue = new cHTMLTextbox("sysvalue", $value['value']); + $oInputboxValue->setStyle("border:1px;border-style:solid;border-color:black;width:200px;"); + + $oInputboxName = new cHTMLTextbox("sysname", $type); + $oInputboxName->setStyle("border:1px;border-style:solid;border-color:black;width:200px;"); + + $oInputboxType = new cHTMLTextbox("systype", $key); + $oInputboxType->setStyle("border:1px;border-style:solid;border-color:black;width:200px;"); + + $hidden = ''; + $sSubmit = ''; + + $list->setCell($count, 1, $oInputboxType->render(true)); + $list->setCell($count, 2, $oInputboxName->render(true)); + $list->setCell($count, 3, $oInputboxValue->render(true) . $hidden . $sSubmit); + } else { + $sMouseoverTemplate = '%s'; + + if (strlen($key) > 35) { + $sShort = htmlspecialchars(capiStrTrimHard($key, 35)); + $key = sprintf($sMouseoverTemplate, clHtmlSpecialChars(addslashes($key), ENT_QUOTES), $sShort); + } else { + $key = cSecurity::escapeString($key); + } + if (strlen($type) > 35) { + $sShort = clHtmlSpecialChars(capiStrTrimHard($type, 35)); + $type = sprintf($sMouseoverTemplate, clHtmlSpecialChars(addslashes($type), ENT_QUOTES), $sShort); + } else { + $type = cSecurity::escapeString($type); + } + + if (strlen($value['value']) > 35) { + $sShort = clHtmlSpecialChars(capiStrTrimHard($value['value'], 35)); + $value['value'] = sprintf($sMouseoverTemplate, clHtmlEntities(addslashes($value['value'])), $sShort); + } else { + $value['value'] = clHtmlEntities($value['value']); + } + !strlen(trim($value['value'])) ? $sValue = ' ' : $sValue = $value['value']; + + $list->setCell($count, 1, $key); + $list->setCell($count, 2, $type); + $list->setCell($count, 3, $sValue); + } + + if (!in_array($key . '_' . $type, $aManagedValues)) { + $list->setCell($count, 4, $spacer->render() . $link->render() . $spacer->render() . $dlink . $spacer->render()); + $count++; + } + } + } +} + +if ($count == 2) { + $list->setCell($count, 4, ""); + $list->setCell($count, 1, i18n("No defined properties")); + $list->setCell($count, 2, ""); + $list->setCell($count, 3, ""); +} +unset($form); + +$form = new UI_Table_Form("systemsettings"); +$form->setVar("area", $area); +$form->setVar("frame", $frame); +$form->setVar("action", "systemsettings_save_item"); +$form->addHeader(i18n("Add new variable")); +$inputbox = new cHTMLTextbox("systype"); +$inputbox->setStyle("border:1px;border-style:solid;border-color:black;"); +$form->add(i18n("Type"), $inputbox->render()); + +$inputbox = new cHTMLTextbox("sysname"); +$inputbox->setStyle("border:1px;border-style:solid;border-color:black;"); +$form->add(i18n("Name"), $inputbox->render()); + +$inputbox = new cHTMLTextbox("sysvalue"); +$inputbox->setStyle("border:1px;border-style:solid;border-color:black;"); +$form->add(i18n("Value"), $inputbox->render()); + +if ($action == "systemsettings_edit_item") { + $form2 = new UI_Form("systemsettings"); + $form2->setVar("area", $area); + $form2->setVar("frame", $frame); + $form2->setVar("action", "systemsettings_save_item"); + $form2->add('list', $list->render()); + $sListstring = $form2->render(); +} else { + $sListstring = $list->render(); +} + +$page = new UI_Page; +$sTooltippScript = ' + '; + +$page->addScript('tooltippstyle', ''); +$page->setContent($sWarning . $sTooltippScript . "\n" . $sListstring . "
    " . $form->render()); +$page->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.todo.popup.php b/branches/conlite20/conlite/includes/include.todo.popup.php new file mode 100644 index 0000000..1a4ad2a --- /dev/null +++ b/branches/conlite20/conlite/includes/include.todo.popup.php @@ -0,0 +1,136 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2009-11-06, Murat Purc, replaced deprecated functions (PHP 5.3 ready) + * + * $Id: include.todo.popup.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$cpage = new cPage; + +if ($action == "todo_save_item") +{ + $todo = new TODOCollection; + + $subject = stripslashes($subject); + $message = stripslashes($message); + + if (is_array($userassignment)) { + foreach ($userassignment as $key => $value) { + $item = $todo->createItem($itemtype, $itemid, strtotime($reminderdate), $subject, $message, $notiemail, $notibackend, $auth->auth["uid"]); + $item->set("recipient", $value); + $item->setProperty("todo", "enddate", $enddate); + $item->store(); + } + } + + $cpage->setContent(""); +} else { + $ui = new UI_Table_Form("reminder"); + $ui->addHeader(i18n("Add TODO item")); + + $ui->setVar("area",$area); + $ui->setVar("frame", $frame); + $ui->setVar("action", "todo_save_item"); + $ui->setVar("itemtype", $itemtype); + $ui->setVar("itemid", $itemid); + + $subject = new cHTMLTextbox("subject", htmldecode(stripslashes(urldecode($subject))),60); + $ui->add(i18n("Subject"), $subject->render()); + + $message = new cHTMLTextarea("message", htmldecode(stripslashes(urldecode($message)))); + $ui->add(i18n("Description"), $message->render()); + + $reminderdate = new cHTMLTextbox("reminderdate", '', '', '', "reminderdate"); + + $datepopup = ' Endzeitpunkt w�hlen'; + $ui->add(i18n("Reminder date"),$reminderdate->render().$datepopup); + + $reminderdue = new cHTMLTextbox("enddate", '', '', '', "enddate"); + $duepopup = ' Endzeitpunkt w�hlen'; + $ui->add(i18n("End date"),$reminderdue->render().$duepopup); + $notiemail = new cHTMLCheckbox("notiemail", i18n("eMail notification")); + + $ui->add(i18n("Reminder options"), $notiemail->toHTML()); + $calscript = ''; + + $userselect = new cHTMLSelectElement("userassignment[]"); + + + $UsersClass = new Users; + foreach ($UsersClass->getAccessibleUsers(explode(',', $auth->auth['perm']), true) as $key => $value) + { + $acusers[$key] = $value["username"]." (".$value["realname"].")"; + } + + asort($acusers); + + $userselect->autoFill($acusers); + $userselect->setDefault($auth->auth["uid"]); + $userselect->setMultiselect(); + $userselect->setSize(5); + + $ui->add(i18n("Assigned to"), $userselect->render()); + $cpage->setcontent($ui->render().$calscript); + + + + $cpage->addScript("cal", ' + + + '); +} +$cpage->render(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.tpl_edit_form.php b/branches/conlite20/conlite/includes/include.tpl_edit_form.php new file mode 100644 index 0000000..ae7d9ae --- /dev/null +++ b/branches/conlite20/conlite/includes/include.tpl_edit_form.php @@ -0,0 +1,254 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2009-12-04, Dominik Ziegler, added notice for default module and removed auto select of module if there is no module set + * + * $Id: include.tpl_edit_form.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +$tpl2 = new Template(); + +if (($action == "tpl_new") && (!$perm->have_perm_area_action_anyitem($area, $action))) { + $notification->displayNotification("error", i18n("Permission denied")); +} else { + + if ($action == "tpl_new") { + $tplname = i18n("- New Template -"); + } + + $sql = "SELECT + a.idtpl, a.name as name, a.description, a.idlay, b.description as laydescription, a.defaulttemplate + FROM + " . $cfg['tab']['tpl'] . " AS a + LEFT JOIN + " . $cfg['tab']['lay'] . " AS b + ON a.idlay=b.idlay + WHERE a.idtpl='" . Contenido_Security::toInteger($idtpl) . "' + ORDER BY name"; + + $db->query($sql); + + if ($db->next_record()) { + $idtpl = $db->f("idtpl"); + $tplname = $db->f("name"); + $description = $db->f("description"); + $idlay = $db->f("idlay"); + $laydescription = nl2br($db->f("laydescription")); + $vdefault = $db->f("defaulttemplate"); + } + + $sql = "SELECT + number, idmod + FROM + " . $cfg['tab']['container'] . " + WHERE + idtpl='" . Contenido_Security::toInteger($idtpl) . "'"; + + $db->query($sql); + while ($db->next_record()) { + $a_c[$db->f("number")] = $db->f("idmod"); + } + + //*************** List layouts **************** + $tpl2->set('s', 'NAME', 'idlay'); + $tpl2->set('s', 'CLASS', 'text_medium'); + $tpl2->set('s', 'OPTIONS', 'onchange="tplform.changelayout.value=1;tplform.submit();"'); + + if ($idlay != 0) { + $tpl2->set('d', 'VALUE', 0); + $tpl2->set('d', 'CAPTION', '--- ' . i18n("none") . ' ---'); + $tpl2->set('d', 'SELECTED', ''); + $tpl2->next(); + } else { + $tpl2->set('d', 'VALUE', 0); + $tpl2->set('d', 'CAPTION', '--- ' . i18n("none") . ' ---'); + $tpl2->set('d', 'SELECTED', 'selected'); + $tpl2->next(); + } + $sql = "SELECT + idlay, name + FROM + " . $cfg['tab']['lay'] . " + WHERE + idclient='" . Contenido_Security::toInteger($client) . "' + ORDER BY name"; + + $db->query($sql); + + while ($db->next_record()) { + if ($db->f("idlay") != $idlay) { + $tpl2->set('d', 'VALUE', $db->f("idlay")); + $tpl2->set('d', 'CAPTION', $db->f("name")); + $tpl2->set('d', 'SELECTED', ''); + $tpl2->next(); + } else { + $tpl2->set('d', 'VALUE', $db->f("idlay")); + $tpl2->set('d', 'CAPTION', $db->f("name")); + $tpl2->set('d', 'SELECTED', 'selected'); + $tpl2->next(); + } + } + + $select = $tpl2->generate($cfg['path']['templates'] . $cfg['templates']['generic_select'], true); + + $sql = "SELECT + idmod, name, type + FROM + " . $cfg['tab']['mod'] . " + WHERE + idclient='" . Contenido_Security::toInteger($client) . "' + ORDER BY name"; + + $db->query($sql); + + $modules = array(); + + while ($db->next_record()) { + $modules[$db->f("idmod")]["name"] = $db->f("name"); + $modules[$db->f("idmod")]["type"] = $db->f("type"); + } + + + $form = new UI_Table_Form("tplform"); + $form->setVar("area", $area); + $form->setVar("changelayout", 0); + $form->setVar("frame", $frame); + $form->setVar("action", "tpl_edit"); + $form->setVar("idtpl", $idtpl); + if (!$idlay) { + $form->setVar("createmode", 1); + } + $form->addHeader(i18n("Edit template")); + + $name = new cHTMLTextbox("tplname", $tplname, 35); + $form->add(i18n("Name"), $name->render()); + + $descr = new cHTMLTextarea("description", $description); + $form->add(i18n("Description"), $descr->render()); + + + $standardcb = new cHTMLCheckbox("vdefault", 1, "", $vdefault); + $form->add(i18n("Default"), $standardcb->toHTML(false)); + + $form->add(i18n("Layout"), $select); + $form->add(i18n("Layout description"), $laydescription); + + if ($idlay) { + $oLayout = new cApiLayout($idlay); + $raw_code = ($oLayout->virgin) ? "" : $oLayout->getLayout(); + tplPreparseLayout($idlay, $raw_code); + $tmp_returnstring = tplBrowseLayoutForContainers($idlay, $raw_code); + $a_container = explode("&", $tmp_returnstring); + foreach ($a_container as $key => $value) { + if ($value != 0) { + // Loop through containers **************** + $name = tplGetContainerName($idlay, $value); + $modselect = new cHTMLSelectElement("c[" . $value . "]"); + + if ($name != "") { + $caption = $name . " (Container $value)"; + } else { + $caption = 'Container ' . $value; + } + + $mode = tplGetContainerMode($idlay, $value); + $defaultModuleNotice = ''; + + if ($mode == "fixed") { + $default = tplGetContainerDefault($idlay, $value); + + foreach ($modules as $key => $val) { + + if ($val["name"] == $default) { + $option = new cHTMLOptionElement($val["name"], $key); + + if ($a_c[$value] == $key) { + $option->setSelected(true); + } + + $modselect->addOptionElement($key, $option); + } + } + } else { + $default = tplGetContainerDefault($idlay, $value); + + if ($mode == "optional" || $mode == "") { + $option = new cHTMLOptionElement("-- " . i18n("none") . " --", 0); + + if (isset($a_c[$value]) && $a_c[$value] != 0) { + $option->setSelected(false); + } else { + $option->setSelected(true); + } + + $modselect->addOptionElement(0, $option); + } + + $allowedtypes = tplGetContainerTypes($idlay, $value); + + foreach ($modules as $key => $val) { + $option = new cHTMLOptionElement($val["name"], $key); + + //if ($a_c[$value] == $key || ($a_c[$value] == 0 && $val["name"] == $default)) + if ($a_c[$value] == $key || (($a_c[$value] == 0 && $val["name"] == $default) && $createmode == 1)) { + $option->setSelected(true); + } + + if (count($allowedtypes) > 0) { + if (in_array($val["type"], $allowedtypes) || $val["type"] == "") { + $modselect->addOptionElement($key, $option); + } + } else { + $modselect->addOptionElement($key, $option); + } + } + + if ($default != "" && $modules[$a_c[$value]]["name"] != $default && $createmode != 1) { + $defaultModuleNotice = " (" . i18n('Default') . ": " . $default . ")"; + } + } + + $form->add($caption, $modselect->render() . $defaultModuleNotice); + } + } + } + + $page = new cPage; + $page->setReload(); + + $page->setSubnav("idtpl=$idtpl", "tpl"); + + if ($action != "tpl_duplicate") { + $page->setContent($form->render()); + } + + $page->render(); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.tpl_new.php b/branches/conlite20/conlite/includes/include.tpl_new.php new file mode 100644 index 0000000..63b6781 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.tpl_new.php @@ -0,0 +1,44 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-03-27 + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.tpl_new.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$tpl->reset(); +if ((int) $client > 0) { + $tpl->set('s', 'ACTION', ''); +} else { + $tpl->set('s', 'ACTION', i18n('No Client selected')); +} +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['left_top']); +?> diff --git a/branches/conlite20/conlite/includes/include.tpl_overview.php b/branches/conlite20/conlite/includes/include.tpl_overview.php new file mode 100644 index 0000000..b8e1ab0 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.tpl_overview.php @@ -0,0 +1,131 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-03-27 + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * modified 2010-08-18, Munkh-Ulzii Balidar, added functionality to show the used information + * + * $Id: include.tpl_overview.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$sql = "SELECT + * + FROM + ".$cfg["tab"]["tpl"]." + WHERE + idclient = '".Contenido_Security::toInteger($client)."' + ORDER BY + name"; + +$db->query($sql); +$tpl->reset(); + +$tpl->set('s', 'SID', $sess->id); + +while ( $db->next_record() ) { + + if ( $perm->have_perm_item($area, $db->f("idtpl")) || + $perm->have_perm_area_action("tpl" , "tpl_delete") || + $perm->have_perm_area_action("tpl" , "tpl_duplicate") || + $perm->have_perm_area_action("tpl_edit" , "tpl_edit") || + $perm->have_perm_area_action("tpl_edit" , "tpl_new") || + $perm->have_perm_area_action("tpl_visual" , "tpl_visedit") + ) { + $name = $db->f('name'); + $descr = $db->f('description'); + $idtpl = $db->f("idtpl"); + + $bgcolor = ( is_int($tpl->dyn_cnt / 2) ) ? $cfg["color"]["table_light"] : $cfg["color"]["table_dark"]; + $tpl->set('d', 'BGCOLOR', $bgcolor); + + # create javascript multilink + $tmp_mstr = '%s'; + + if ($db->f("defaulttemplate") == 1) + { + $mstr = sprintf($tmp_mstr, clHtmlSpecialChars($descr), 'right_top', + $sess->url("main.php?area=tpl&frame=3&idtpl=$idtpl"), + 'right_bottom', + $sess->url("main.php?area=tpl_edit&frame=4&idtpl=$idtpl"), + "".$name.""); + } else { + $mstr = sprintf($tmp_mstr, clHtmlSpecialChars($descr), 'right_top', + $sess->url("main.php?area=tpl&frame=3&idtpl=$idtpl"), + 'right_bottom', + $sess->url("main.php?area=tpl_edit&frame=4&idtpl=$idtpl"), + $name); + + } + + if ($perm->have_perm_area_action_item("tpl_edit","tpl_edit",$db->f("idtpl"))) { + $tpl->set('d', 'NAME', $mstr); + } else { + $tpl->set('d', 'NAME', $name); + } + + /* Check if template is in use */ + $inUse = tplIsTemplateInUse($idtpl); + + $inUseString = i18n("Click for more information about usage"); + + if (!$inUse && ($perm->have_perm_area_action_item("tpl","tpl_delete",$db->f("idtpl")))) { + $delTitle = i18n("Delete template"); + $delDescr = sprintf(i18n("Do you really want to delete the following template:

    %s
    "),clHtmlSpecialChars($name)); + + $tpl->set('d', 'DELETE', ''.$delTitle.''); + $tpl->set('d', 'INUSE', ''); + } else { + $delDescription = i18n("Template in use, cannot delete"); + $tpl->set('d', 'DELETE',''.$delDescription.''); + $tpl->set('d', 'INUSE', ''.$inUseString.''); + } + + if ($perm->have_perm_area_action_item("tpl","tpl_dup", $db->f("idtpl"))) { + $copybutton = ''.i18n('; + + } else { + $copybutton = ''; + } + + $tpl->set('d', 'COPY', $copybutton); + $tpl->set('d', 'ID', 'tpl'.$tpl->dyn_cnt); + + $tpl->next(); + } +} + +//datas for show of used info per ajax +$tpl->set('s', 'AREA', $area); +$tpl->set('s', 'SESSION', $contenido); +$tpl->set('s', 'AJAXURL', $cfg['path']['contenido_fullhtml'].'ajaxmain.php'); +$tpl->set('s', 'BOX_TITLE', i18n("The template '%s' is used for following categories and articles") . ":"); +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['tpl_overview']); + +?> diff --git a/branches/conlite20/conlite/includes/include.tpl_visualedit.php b/branches/conlite20/conlite/includes/include.tpl_visualedit.php new file mode 100644 index 0000000..618673c --- /dev/null +++ b/branches/conlite20/conlite/includes/include.tpl_visualedit.php @@ -0,0 +1,233 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-12-15 + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2009-01-08, Timo Trautmann fixed bug: Changes in Head Containers in visualedit were not stored + * modified 2009-10-13, Murat Purc, Fixed bug in visualedit replacements (see [#CON-273]) and othe improvements + * + * $Id: include.tpl_visualedit.php 316 2014-06-27 14:49:54Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude('includes', 'functions.tpl.php'); + +$idtpl = Contenido_Security::toInteger($idtpl); +$client = Contenido_Security::toInteger($client); + +$sql = "SELECT + a.idtpl, a.name as name, a.description, a.idlay, b.description as laydescription, defaulttemplate + FROM + " . $cfg['tab']['tpl'] . " AS a + LEFT JOIN + " . $cfg['tab']['lay'] . " AS b + ON a.idlay=b.idlay + WHERE a.idtpl='" . $idtpl . "' + ORDER BY name"; + +$db->query($sql); +$db->next_record(); + +$idtpl = (int) $db->f('idtpl'); +$tplname = $db->f('name'); +$description = $db->f('description'); +$idlay = (int) $db->f('idlay'); +$laydescription = nl2br($db->f('laydescription')); +$bIsDefault = $db->f('defaulttemplate'); + + +$sql = "SELECT number, idmod FROM " . $cfg['tab']['container'] . " WHERE idtpl='" . $idtpl . "'"; +$db->query($sql); +while ($db->next_record()) { + $a_c[$db->f('number')] = $db->f('idmod'); +} + +$modules = array(); +$sql = "SELECT idmod, name, type FROM " . $cfg['tab']['mod'] . " WHERE idclient='" . $client . "' ORDER BY name"; +$db->query($sql); +while ($db->next_record()) { + $modules[$db->f('idmod')]['name'] = $db->f('name'); + $modules[$db->f('idmod')]['type'] = $db->f('type'); +} + + +$sql = "SELECT code FROM " . $cfg['tab']['lay'] . " WHERE idlay='" . $idlay . "'"; +$db->query($sql); + +$oLayout = new cApiLayout(Contenido_Security::toInteger($idlay)); +if($oLayout->virgin) { + echo i18n("No such layout"); +} else { + $code = $oLayout->getLayout(); + + // get document version (html or xhtml) + $is_XHTML = getEffectiveSetting('generator', 'xhtml', 'false'); + $sElemClosing = ($is_XHTML == 'true') ? ' /' : ''; + + $base = ''; + $tags = $base; + $tags .= ' + +'; + + $code = str_replace('', "\n".$tags ."\n", $code); + + tplPreparseLayout($idlay, $code); + $containers = tplBrowseLayoutForContainers($idlay, $code); + + $a_container = explode('&',$containers); + $sContainerInHead = ''; + + foreach ($a_container as $key => $value) { + + if ($value != 0) { + //*************** Loop through containers **************** + $name = tplGetContainerName($idlay, $value); + + $modselect = new cHTMLSelectElement('c['.$value.']'); + $modselect->setAttribute('title', "Container $value ($name)"); + + $mode = tplGetContainerMode($idlay, $value); + + if ($mode == 'fixed') { + $default = tplGetContainerDefault($idlay, $value); + + foreach ($modules as $key => $val) { + if ($val['name'] == $default) { + if (strlen($val['name']) > 20) { + $short_name = capiStrTrimHard($val['name'], 20); + $option = new cHTMLOptionElement($short_name, $key); + $option->setAttribute('title', "Container $value ($name) " . $val['name']); + } else { + $option = new cHTMLOptionElement($val['name'], $key); + $option->setAttribute('title', "Container $value ($name)"); + } + + if ($a_c[$value] == $key) { + $option->setSelected(true); + } + + $modselect->addOptionElement($key, $option); + } + } + } else { + + $default = tplGetContainerDefault($idlay, $value); + + if ($mode == 'optional' || $mode == '') { + $option = new cHTMLOptionElement('-- ' . i18n("none") . ' --', 0); + + if (isset($a_c[$value]) && $a_c[$value] != '0') { + $option->setSelected(false); + } else { + $option->setSelected(true); + } + + $modselect->addOptionElement(0, $option); + } + + $allowedtypes = tplGetContainerTypes($idlay, $value); + + foreach ($modules as $key => $val) { + $short_name = $val['name']; + if (strlen($val['name']) > 20) { + $short_name = capiStrTrimHard($val['name'], 20); + } + + $option = new cHTMLOptionElement($short_name, $key); + + if (strlen($val['name']) > 20) { + $option->setAttribute('title', "Container $value ($name) " . $val['name']); + } + + if ($a_c[$value] == $key || ($a_c[$value] == 0 && $val['name'] == $default)) { + $option->setSelected(true); + } + + if (count($allowedtypes) > 0) { + if (in_array($val['type'], $allowedtypes) || $val['type'] == '') { + $modselect->addOptionElement($key, $option); + } + } else { + $modselect->addOptionElement($key, $option); + } + } + } + + // visual edit item container + $sLabelAndSelect = '' . $modselect->render(); + $sVisualEditItem = '
    ' . $sLabelAndSelect . '
    '; + + // collect containers in head for displaying them at the start of body + if (is_array($containerinf) && isset($containerinf[$idlay]) && isset($containerinf[$idlay][$value]) && + isset($containerinf[$idlay][$value]['is_body']) && $containerinf[$idlay][$value]['is_body'] == false) { + // replace container inside head with empty values and collect the container + $code = preg_replace("/(.*)<\/container>/Uis", "CMS_CONTAINER[$value]", $code); + $code = preg_replace("//i", "CMS_CONTAINER[$value]", $code); + $code = str_ireplace("CMS_CONTAINER[$value]", '', $code); + $sContainerInHead .= $sVisualEditItem . "\n"; + } else { + // replace other container + $code = preg_replace("/(.*)<\/container>/Uis", "CMS_CONTAINER[$value]", $code); + $code = preg_replace("//i", "CMS_CONTAINER[$value]", $code); + $code = str_ireplace("CMS_CONTAINER[$value]", $sVisualEditItem, $code); + } + } + } + + // Get rid of any forms + $code = preg_replace("//i", '', $code); + $code = preg_replace("/<\/form(.*)>/i", '', $code); + + $form = ' +
    + + + + + + + + + '; + $form .= $sContainerInHead; + + $sInput = ''; + $button = '
    ' . $sInput . '
    '; + $code = preg_replace("//i", "" . $form . $button, $code); + $code = preg_replace("/<\/body(.*)>/i", '', $code); + // remove all scripts, we just need a plain layout + $code = preg_replace("/]*>(.*?)<\/script>/is", '', $code); + + eval("?>\n".$code."\n \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.tplcfg_edit.php b/branches/conlite20/conlite/includes/include.tplcfg_edit.php new file mode 100644 index 0000000..668f66d --- /dev/null +++ b/branches/conlite20/conlite/includes/include.tplcfg_edit.php @@ -0,0 +1,210 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2002 + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.tplcfg_edit.php 367 2015-10-19 10:08:51Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if (!isset($idtpl)) { + $idtpl = 0; +} +if ($idtpl != 0 && $idtplcfg != 0) { + $sql = "SELECT number FROM " . $cfg["tab"]["container"] . " WHERE idtpl = '" . Contenido_Security::toInteger($idtpl) . "'"; + $db->query($sql); + + while ($db->next_record()) { + + $i = $db->f("number"); + $CiCMS_VAR = "C" . $i . "CMS_VAR"; + + if (isset($_POST[$CiCMS_VAR])) { + $tmp = $_POST[$CiCMS_VAR]; + } else { + unset($tmp); + } + + if (isset($tmp)) { + + foreach ($tmp as $key => $value) { + $value = urlencode($value); + if (!isset($varstring[$i])) + $varstring[$i] = ""; + $varstring[$i] = $varstring[$i] . $key . "=" . $value . "&"; + } + } + } + + // update/insert in container_conf + if (isset($varstring) && is_array($varstring)) { + + // delete all containers + $sql = "DELETE FROM " . $cfg["tab"]["container_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($idtplcfg) . "'"; + $db->query($sql); + + foreach ($varstring as $col => $val) { + // insert all containers + $sql = "INSERT INTO " . $cfg["tab"]["container_conf"] . " (idcontainerc, idtplcfg, number, container) " . + "VALUES ('" . $db->nextid($cfg["tab"]["container_conf"]) . "', '" . Contenido_Security::toInteger($idtplcfg) . "', '" . Contenido_Security::toInteger($col) . "', '" . Contenido_Security::escapeDB($val, $db) . "') "; + + $db->query($sql); + } + } + + + if ($idart) { + + //echo "art: idart: $idart, idcat: $idcat"; + $sql = "UPDATE " . $cfg["tab"]["art_lang"] . " SET idtplcfg = '" . Contenido_Security::toInteger($idtplcfg) . "' WHERE idart='$idart' AND idlang='" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + } else { + + //echo "cat: idart: $idart, idcat: $idcat"; + $sql = "UPDATE " . $cfg["tab"]["cat_lang"] . " SET idtplcfg = '" . Contenido_Security::toInteger($idtplcfg) . "' WHERE idcat='$idcat' AND idlang='" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + } + + + if ($changetemplate == 1 && $idtplcfg != 0) { + + /* update template conf */ + $sql = "UPDATE " . $cfg["tab"]["tpl_conf"] . " SET idtpl='" . Contenido_Security::toInteger($idtpl) . "' WHERE idtplcfg='" . Contenido_Security::toInteger($idtplcfg) . "'"; + $db->query($sql); + + // delete old configured containers + $sql = "DELETE FROM " . $cfg["tab"]["container_conf"] . " WHERE idtplcfg='" . Contenido_Security::toInteger($idtplcfg) . "'"; + $db->query($sql); + $changetemplate = 0; + } else { + + // + } + + + if ($changetemplate != 1) { + + if (isset($idart) && 0 != $idart) { + conGenerateCode($idcat, $idart, $lang, $client); + //backToMainArea($send); + } else { + conGenerateCodeForAllartsInCategory($idcat); + if ($back == 'true') { + backToMainArea($send); + } + } + } +} elseif ($idtpl == 0) { + + /* template deselected */ + + if (isset($idtplcfg) && $idtplcfg != 0) { + + $sql = "DELETE FROM " . $cfg["tab"]["tpl_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($idtplcfg) . "'"; + $db->query($sql); + + $sql = "DELETE FROM " . $cfg["tab"]["container_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($idtplcfg) . "'"; + $db->query($sql); + } + + $idtplcfg = 0; + if (!isset($changetemplate)) { + $changetemplate = 0; + } + + if ($idcat != 0 && $changetemplate == 1 && !$idart) { + + /* Category */ + $sql = "SELECT idtplcfg FROM " . $cfg["tab"]["cat_lang"] . " WHERE idcat = '" . Contenido_Security::toInteger($idcat) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + $db->next_record(); + $tmp_idtplcfg = $db->f("idtplcfg"); + + $sql = "DELETE FROM " . $cfg["tab"]["tpl_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($tmp_idtplcfg) . "'"; + $db->query($sql); + + $sql = "DELETE FROM " . $cfg["tab"]["container_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($tmp_idtplcfg) . "'"; + $db->query($sql); + + $sql = "UPDATE " . $cfg["tab"]["cat_lang"] . " SET idtplcfg = 0 WHERE idcat = '" . Contenido_Security::toInteger($idcat) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + + conGenerateCodeForAllartsInCategory($idcat); + backToMainArea($send); + } elseif (isset($idart) && $idart != 0 && $changetemplate == 1) { + + /* Article */ + $sql = "SELECT idtplcfg FROM " . $cfg["tab"]["art_lang"] . " WHERE idart = '" . Contenido_Security::toInteger($idart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + $db->next_record(); + $tmp_idtplcfg = $db->f("idtplcfg"); + + $sql = "DELETE FROM " . $cfg["tab"]["tpl_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($tmp_idtplcfg) . "'"; + $db->query($sql); + + $sql = "DELETE FROM " . $cfg["tab"]["container_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($tmp_idtplcfg) . "'"; + $db->query($sql); + + $sql = "UPDATE " . $cfg["tab"]["art_lang"] . " SET idtplcfg = 0 WHERE idart = '" . Contenido_Security::toInteger($idart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + + conGenerateCodeForAllartsInCategory($idcat); + //backToMainArea($send); + } +} else { + + if ($changetemplate == 1) { + if (!$idart) { + $sql = "SELECT idtplcfg FROM " . $cfg["tab"]["cat_lang"] . " WHERE idcat = '" . Contenido_Security::toInteger($idcat) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + $db->next_record(); + $tmp_idtplcfg = $db->f("idtplcfg"); + + $sql = "DELETE FROM " . $cfg["tab"]["tpl_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($tmp_idtplcfg) . "'"; + $db->query($sql); + + $sql = "DELETE FROM " . $cfg["tab"]["container_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($tmp_idtplcfg) . "'"; + $db->query($sql); + } else { + $sql = "SELECT idtplcfg FROM " . $cfg["tab"]["art_lang"] . " WHERE idart = '" . Contenido_Security::toInteger($idart) . "' AND idlang = '" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + $db->next_record(); + $tmp_idtplcfg = $db->f("idtplcfg"); + + $sql = "DELETE FROM " . $cfg["tab"]["tpl_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($tmp_idtplcfg) . "'"; + $db->query($sql); + + $sql = "DELETE FROM " . $cfg["tab"]["container_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($tmp_idtplcfg) . "'"; + $db->query($sql); + } + } + conGenerateCodeForAllartsInCategory($idcat); +} +?> diff --git a/branches/conlite20/conlite/includes/include.tplcfg_edit_form.php b/branches/conlite20/conlite/includes/include.tplcfg_edit_form.php new file mode 100644 index 0000000..49af2f3 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.tplcfg_edit_form.php @@ -0,0 +1,487 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2002 + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.tplcfg_edit_form.php 367 2015-10-19 10:08:51Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes", "functions.pathresolver.php"); + +if (isset($idart)) { + + if ($idart > 0) { + $idartlang = getArtLang($idart, $lang); + $col = new InUseCollection; + + /* Remove all own marks */ + $col->removeSessionMarks($sess->id); + + if (($obj = $col->checkMark("article", $idartlang)) === false) { + $col->markInUse("article", $idartlang, $sess->id, $auth->auth["uid"]); + $inUse = false; + $disabled = ""; + } else { + + $vuser = new User; + $vuser->loadUserByUserID($obj->get("userid")); + $inUseUser = $vuser->getField("username"); + $inUseUserRealName = $vuser->getField("realname"); + + $message = sprintf(i18n("Article is in use by %s (%s)"), $inUseUser, $inUseUserRealName); + $notification->displayNotification("warning", $message); + $inUse = true; + $disabled = 'disabled="disabled"'; + } + } else { + $col = new InUseCollection; + $col->removeSessionMarks($sess->id); + if (($obj = $col->checkMark("categorytpl", $idcat)) === false) { + $col->markInUse("categorytpl", $idcat, $sess->id, $auth->auth["uid"]); + $inUse = false; + $disabled = ""; + } else { + + $vuser = new User; + $vuser->loadUserByUserID($obj->get("userid")); + $inUseUser = $vuser->getField("username"); + $inUseUserRealName = $vuser->getField("realname"); + + $message = sprintf(i18n("Category Template configuration is in use by %s (%s)"), $inUseUser, $inUseUserRealName); + $notification->displayNotification("warning", $message); + $inUse = true; + $disabled = 'disabled="disabled"'; + } + } +} + +if (!isset($idart)) + $idart = 0; +if (!isset($idlay)) + $idlay = 0; +if (!isset($db2) || !is_object($db2)) + $db2 = new DB_ConLite; +if (!isset($db3) || !is_object($db3)) + $db3 = new DB_ConLite; + +$tpl->reset(); + +if ($idart) { + + if ($perm->have_perm_area_action("con", "con_tplcfg_edit") || + $perm->have_perm_area_action_item("con", "con_tplcfg_edit", $idcat)) { + + /* Article is configured */ + $sql = "SELECT + c.idtpl AS idtpl, + b.idtplcfg AS idtplcfg, + b.locked AS locked + FROM + " . $cfg["tab"]["tpl_conf"] . " AS a, + " . $cfg["tab"]["art_lang"] . " AS b, + " . $cfg["tab"]["tpl"] . " AS c + WHERE + b.idart = '" . Contenido_Security::toInteger($idart) . "' AND + b.idlang = '" . Contenido_Security::toInteger($lang) . "' AND + b.idtplcfg = a.idtplcfg AND + c.idtpl = a.idtpl"; + + $db->query($sql); + + if ($db->next_record()) { + + /* template configuration found */ + $idtplcfg = $db->f("idtplcfg"); + $idtpl = $db->f("idtpl"); + if ($db->f("locked") == 1) { + $inUse = true; + $disabled = 'disabled="disabled"'; + } + } else { + + if ($idtpl) { + + /* create new configuration entry */ + $nextid = $db3->nextid($cfg["tab"]["tpl_conf"]); + + $sql = "INSERT INTO " . $cfg["tab"]["tpl_conf"] . " (idtplcfg, idtpl) VALUES ('" . Contenido_Security::toInteger($nextid) . "', '" . Contenido_Security::toInteger($idtpl) . "')"; + $db->query($sql); + + /* update art_lang */ + $sql = "UPDATE " . $cfg["tab"]["art_lang"] . " SET idtplcfg = '" . Contenido_Security::toInteger($nextid) . "' WHERE idart='" . Contenido_Security::toInteger($idart) . "' AND idlang='" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + + $idtplcfg = $nextid; + } + } + } else { + $notification->displayNotification("error", i18n("Permission denied")); + exit; + } +} elseif ($idcat) { + + /* Category is configured */ + $sql = "SELECT + c.idtpl AS idtpl, + b.idtplcfg AS idtplcfg + FROM + " . $cfg["tab"]["tpl_conf"] . " AS a, + " . $cfg["tab"]["cat_lang"] . " AS b, + " . $cfg["tab"]["tpl"] . " AS c + WHERE + b.idcat = '" . Contenido_Security::toInteger($idcat) . "' AND + b.idlang = '" . Contenido_Security::toInteger($lang) . "' AND + b.idtplcfg = a.idtplcfg AND + c.idtpl = a.idtpl AND + c.idclient = '" . Contenido_Security::toInteger($client) . "'"; + $db->query($sql); + + if ($db->next_record()) { + + /* template configuration found */ + $idtplcfg = $db->f("idtplcfg"); + $idtpl = $db->f("idtpl"); + } else { + if ($idtpl) { + + /* create new configuration entry */ + $nextid = $db3->nextid($cfg["tab"]["tpl_conf"]); + + $sql = "INSERT INTO " . $cfg["tab"]["tpl_conf"] . " (idtplcfg, idtpl) VALUES ('" . Contenido_Security::toInteger($nextid) . "', '" . Contenido_Security::toInteger($idtpl) . "')"; + $db->query($sql); + + /* update cat_lang */ + $sql = "UPDATE " . $cfg["tab"]["cat_lang"] . " SET idtplcfg = '" . Contenido_Security::toInteger($nextid) . "' WHERE idcat='" . Contenido_Security::toInteger($idcat) . "' AND idlang='" . Contenido_Security::toInteger($lang) . "'"; + $db->query($sql); + + $idtplcfg = $nextid; + } + } +} + + +/* change template to '--- Nothing ---' */ +if ($idtpl == 0) { + $idtplcfg = 0; +} + +/* Check if a configuration for this $idtplcfg exists */ +$sql = "SELECT idcontainerc FROM " . $cfg["tab"]["container_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($idtplcfg) . "'"; +$db->query($sql); + +if (!$db->next_record()) { + + /* There is no configuration for this $idtplcfg, + check if template has a pre-configuration */ + $sql = "SELECT idtplcfg FROM " . $cfg["tab"]["tpl"] . " WHERE idtpl = '" . Contenido_Security::toInteger($idtpl) . "'"; + + $db->query($sql); + $db->next_record(); + + if (0 != $db->f("idtplcfg")) { + + /* Template has a pre-configuration, + copy pre-configuration data to + category configuration with the + $idtplcfg from the category */ + $sql = "SELECT * FROM " . $cfg["tab"]["container_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($db->f("idtplcfg")) . "' ORDER BY number DESC"; + $db->query($sql); + + while ($db->next_record()) { + + /* get data */ + $nextid = $db3->nextid($cfg["tab"]["container_conf"]); + $number = $db->f("number"); + $container = $db->f("container"); + + /* write new entry */ + $sql = "INSERT INTO + " . $cfg["tab"]["container_conf"] . " + (idcontainerc, idtplcfg, number, container) + VALUES + ('" . Contenido_Security::toInteger($nextid) . "', '" . Contenido_Security::toInteger($idtplcfg) . "', '" . Contenido_Security::toInteger($number) . "', '" . Contenido_Security::escapeDB($container, $db2) . "')"; + + $db2->query($sql); + } + } +} + +/* Get template configuration from + 'con_container_conf' and create + configuration data array */ +$sql = "SELECT * FROM " . $cfg["tab"]["container_conf"] . " WHERE idtplcfg = '" . Contenido_Security::toInteger($idtplcfg) . "' ORDER BY number"; + +$db->query($sql); + +$a_c = array(); + +while ($db->next_record()) { + /* varstring is stored in array $a_c */ + $a_c[$db->f("number")] = $db->f("container"); +} + +$tmp_area = "tplcfg"; + + +//Form +$formaction = $sess->url("main.php"); +$hidden = ' + + + + + + + + '; + +$tpl->set('s', 'FORMACTION', $formaction); +$tpl->set('s', 'HIDDEN', $hidden); + +// Category Path for user +$oArticle = new Article($idart, $client, $lang); +$sArticleTitle = $oArticle->getField('title'); +$catString = ''; +prCreateURLNameLocationString($idcat, '/', $catString); +$tpl->set('s', 'CATEGORY', $catString . '/' . $sArticleTitle); + +//SELECT Box for Templates + +$tpl->set('s', 'TEMPLATECAPTION', i18n("Template")); + +$tpl2 = new Template; +$tpl2->set('s', 'NAME', 'idtpl'); +$tpl2->set('s', 'CLASS', 'text_medium'); + +if (!$perm->have_perm_area_action_item("con", "con_changetemplate", $idcat)) { + $disabled2 = 'disabled="disabled"'; +} + +$tpl2->set('s', 'OPTIONS', $disabled . ' ' . $disabled2 . ' onchange="tplcfgform.changetemplate.value=1;tplcfgform.send.value=0;tplcfgform.submit();"'); + +$sql = "SELECT + idtpl, + name + FROM + " . $cfg['tab']['tpl'] . " + WHERE + idclient = '" . Contenido_Security::toInteger($client) . "' + ORDER BY + name"; + +$db->query($sql); + +$tpl2->set('d', 'VALUE', 0); +$tpl2->set('d', 'CAPTION', '--- ' . i18n("none") . ' ---'); +$tpl2->set('d', 'SELECTED', ''); +$tpl2->next(); + +while ($db->next_record()) { + + if ($db->f("idtpl") != "$idtpl") { + $tpl2->set('d', 'VALUE', $db->f("idtpl")); + $tpl2->set('d', 'CAPTION', $db->f("name")); + $tpl2->set('d', 'SELECTED', ''); + $tpl2->next(); + } else { + $tpl2->set('d', 'VALUE', $db->f("idtpl")); + $tpl2->set('d', 'CAPTION', $db->f("name")); + $tpl2->set('d', 'SELECTED', 'selected="selected"'); + $tpl2->next(); + } +} + +$select = $tpl2->generate($cfg["path"]["templates"] . $cfg['templates']['generic_select'], true); +$tpl->set('s', 'TEMPLATESELECTBOX', $select); + +/* modul input bereich von allen + container anzeigen */ +$sql = "SELECT + * + FROM + " . $cfg["tab"]["container"] . " + WHERE + idtpl='" . Contenido_Security::toInteger($idtpl) . "' ORDER BY number ASC"; + +$db->query($sql); + +$a_d = array(); + +while ($db->next_record()) { + + /* liste der benutzten module generieren */ + $a_d[$db->f("number")] = $db->f("idmod"); +} + +if (isset($a_d) && is_array($a_d)) { + foreach ($a_d as $cnumber => $value) { + /* show only the containers which + contain a module */ + if (0 != $value) { + $oModule = new cApiModule($a_d[$cnumber]); + $input = $oModule->get('input') . "\n"; + + global $cCurrentModule; + $cCurrentModule = $oModule->get('idmod'); + $modulecaption = i18n("Module in container") . " " . $cnumber . ": "; + $modulename = $oModule->get('name'); + + $varstring = array(); + + if (isset($a_c[$cnumber])) { + $a_c[$cnumber] = preg_replace("/&$/", "", $a_c[$cnumber]); + $tmp1 = preg_split("/&/", $a_c[$cnumber]); + + foreach ($tmp1 as $key1 => $value1) { + $tmp2 = explode("=", $value1); + foreach ($tmp2 as $key2 => $value2) { + $varstring[$tmp2[0]] = $tmp2[1]; + } + } + } + + $CiCMS_Var = '$C' . $cnumber . 'CMS_VALUE'; + $CiCMS_VALUE = ''; + + foreach ($varstring as $key3 => $value3) { + $tmp = urldecode($value3); + $tmp = str_replace("\'", "'", $tmp); + $CiCMS_VALUE .= $CiCMS_Var . '[' . $key3 . ']="' . $tmp . '"; '; + $input = str_replace("\$CMS_VALUE[$key3]", $tmp, $input); + $input = str_replace("CMS_VALUE[$key3]", $tmp, $input); + } + + $input = str_replace("CMS_VALUE", $CiCMS_Var, $input); + $input = str_replace("\$" . $CiCMS_Var, $CiCMS_Var, $input); + $input = str_replace("CMS_VAR", "C" . $cnumber . "CMS_VAR", $input); + + ob_start(); + eval($CiCMS_VALUE . " \r\n " . $input); + + $modulecode = ob_get_contents(); + ob_end_clean(); + + + $tpl->set('d', 'MODULECAPTION', $modulecaption); + $tpl->set('d', 'MODULENAME', $modulename); + if ($inUse == false) { + $tpl->set('d', 'MODULECODE', $modulecode); + } else { + $tpl->set('d', 'MODULECODE', ' '); + } + $tpl->next(); + } + } +} + +$script = ' + + var sid = "' . $sess->id . '"; + + try { + obj = parent.parent.frames["left"].frames["left_top"].cfg; + } catch (e) { + // catch error exception + + } + + if ( obj ) { + + /* Format of the data-string + 0 -> category id + 1 -> category template id + 2 -> category online + 3 -> category public + 4 -> has right for: template + 5 -> has right for: online + 6 -> has right for: public + 7 -> idstring not splitted */ + + tmp_idtpl = ("' . $idtpl . '" == "") ? 0 : "' . $idtpl . '"; + + changed = (obj.tplId != tmp_idtpl); + + sData = "' . $idcat . '-' . $idtpl . '-"+obj.isOnline+"-"+obj.isPublic+"-"+obj.hasRight["template"]+"-"+obj.hasRight["online"]+"-"+obj.hasRight["public"]; + + if ( changed ) { + obj.load( "' . $idcat . '", "' . $idtpl . '", obj.isOnline, obj.isPublic, obj.hasRight["template"], obj.hasRight["online"], obj.hasRight["public"], sData ); + parent.parent.frames["left"].frames["left_bottom"].location.href = "' . $sess->url("main.php?area=con&force=1&frame=2") . '"; + + } + + } + + + // parent.parent.frames["right"].frames["right_top"].location.href = "main.php?area=con&frame=3&idcat=0&contenido=' . $sess->id . '"; + artObj = parent.parent.frames["left"].frames["left_top"].artObj; + artObj.disable();'; + +/* Change template select only + when configuring a category */ +if (!$idart && $area != "str_tplcfg") { + $tpl->set('s', 'SCRIPT', $script); +} else { + $tpl->set('s', 'SCRIPT', ''); +} + +if ($idart) { + $markscript = markSubMenuItem(2, true); + $tpl->set('s', 'MARKSUBMENU', $markscript); +} else { + $tpl->set('s', 'MARKSUBMENU', ""); +} + + + +if ($idart || $area == 'con_tplcfg') { + $buttons = '     + '; +} else { + $buttons = '     + '; +} +if ($idtpl != 0 && $inUse == false) { + $tpl->set('s', 'BUTTONS', $buttons); +} else { + $tpl->set('s', 'BUTTONS', ''); +} + +if ($area == 'str_tplcfg' || $area == 'con_tplcfg' && (int) $idart == 0) { + $tpl->set('s', 'HEADER', i18n('Categorytemplate configuration')); + $tpl->set('s', 'DISPLAY_HEADER', 'block'); +} else if ($area == 'con_tplcfg' && (int) $idart > 0) { + $tpl->set('s', 'HEADER', i18n('Articletemplate configuration')); + $tpl->set('s', 'DISPLAY_HEADER', 'block'); +} else { + $tpl->set('s', 'HEADER', ''); + $tpl->set('s', 'DISPLAY_HEADER', 'none'); +} +# Generate template +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['tplcfg_edit_form']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.upl_artlist.php b/branches/conlite20/conlite/includes/include.upl_artlist.php new file mode 100644 index 0000000..8e36636 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.upl_artlist.php @@ -0,0 +1,185 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.upl_artlist.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude("includes", "functions.con.php"); + +$page = new cPage; + +conCreateLocationString($idcat, "/", $cat_str); + +$mcatlink = ""; + +$_cecIterator = $_cecRegistry->getIterator("Contenido.Content.CreateCategoryLink"); +if ($_cecIterator->count() > 0) +{ + while ($chainEntry = $_cecIterator->next()) + { + $catlink = $chainEntry->execute($idcat); + + if ($catlink != "") + { + $mcatlink = $catlink; + } + } +} + +if ($mcatlink == "") +{ + $mcatlink = "front_content.php?idcat=$idcat"; +} + +$jslink = 'parent.parent.frames[\'left\'].frames[\'left_top\'].document.getElementById(\'selectedfile\').value= \''.$mcatlink.'\'; window.returnValue=\''.$mcatlink.'\'; window.close();'; +$content[] = '
    '; +$content[] = '
    '; +$content[] = ''.i18n('; +$content[] = $cat_str; +$content[] = '
    '; + +$cApiCategoryArticleCollection = new cApiCategoryArticleCollection; + +$cApiCategoryArticleCollection->link("cApiCategoryLanguageCollection"); +$cApiCategoryArticleCollection->link("cApiArticleCollection"); +$cApiCategoryArticleCollection->link("cApiArticleLanguageCollection"); +$cApiCategoryArticleCollection->link("cApiCategoryCollection"); +$cApiCategoryArticleCollection->setWhere("cApiCategoryLanguageCollection.idlang", $lang); +$cApiCategoryArticleCollection->setWhere("cApiArticleLanguageCollection.idlang", $lang); +$cApiCategoryArticleCollection->setWhere("cApiCategoryLanguageCollection.idcat", $idcat); +$cApiCategoryArticleCollection->query(); + +$headlines = array(i18n("Start"), i18n("Title"), i18n("Created"), i18n("Modified"), i18n("Sort Order"), i18n("Online")); +$fields = array("is_start", "title", "created", "lastmodified", "artsort", "online"); + +$content[] = ''; + +foreach ($headlines as $headline) +{ + $content[] = ''; +} + +$content[] = ''; + +$dateformat = getEffectiveSetting("backend", "timeformat", "Y-m-d H:i:s"); + +$odd = false; + +while ($cApiCategoryArticle = $cApiCategoryArticleCollection->next()) +{ + $obj = $cApiCategoryArticleCollection->fetchObject("cApiArticleLanguageCollection"); + + $odd = !$odd; + + if ($odd) + { + $mcol = $cfg['color']['table_light']; + } else { + $mcol = $cfg['color']['table_dark']; + } + + $content[] = ''; + + $martlink = ""; + $idart = $obj->get("idart"); + + $_cecIterator = $_cecRegistry->getIterator("Contenido.Content.CreateArticleLink"); + if ($_cecIterator->count() > 0) + { + while ($chainEntry = $_cecIterator->next()) + { + $artlink = $chainEntry->execute($idart, $idcat); + + if ($artlink != "") + { + $martlink = $artlink; + } + } + } + + if ($martlink == "") + { + $martlink = "front_content.php?idart=$idart"; + } + + $jslink = 'parent.parent.frames[\'left\'].frames[\'left_top\'].document.getElementById(\'selectedfile\').value= \''.$martlink.'\'; window.returnValue=\''.$martlink.'\'; window.close();'; + + foreach ($fields as $field) + { + switch ($field) + { + case "is_start": + $value = isStartArticle($obj->get("idartlang"), $idcat, $lang); + + if ($value == true) + { + $value = ''; + } else { + $value = ''; + } + break; + case "created": + case "modified": + $value = date($dateformat,strtotime($obj->get($field))); + break; + case "online": + if ($obj->get("online") == true) + { + $value = ''; + } else { + $value = ''; + } + break; + + default: + $value = $obj->get($field); + break; + } + + + if ($field == "title") + { + $xwidth = 'width="100%"'; + } else { + $xwidth = 'width="1%"'; + } + + $content[] = ''; + } + + $content[] = ''; +} + +$content[] = '
    '.$headline.'
    '.$value.'
    '; +$page->setContent(implode("", $content)); +$page->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.upl_dirs_overview.php b/branches/conlite20/conlite/includes/include.upl_dirs_overview.php new file mode 100644 index 0000000..ce2c925 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.upl_dirs_overview.php @@ -0,0 +1,594 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-12-28 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.upl_dirs_overview.php 298 2014-01-22 13:10:17Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude("includes", "functions.con.php"); +cInclude("includes", "functions.str.php"); + +if (!(int) $client > 0) { + #if there is no client selected, display empty page + $oPage = new cPage; + $oPage->render(); + return; +} + +function getExpandCollapseButton($item) +{ + global $sess, $PHP_SELF, $frame, $area, $appendparameters; + $selflink = "main.php"; + + if (count($item->subitems) > 0) + { + if ($item->collapsed == true) + { + $expandlink = $sess->url($selflink."?area=$area&frame=$frame&appendparameters=$appendparameters&expand=".$item->id); + return (''); + } else + { + $collapselink = $sess->url($selflink."?area=$area&appendparameters=$appendparameters&frame=$frame&collapse=".$item->id); + return (''); + } + } else + { + if ($item->custom["lastitem"]) + { + return ''; + } else + { + return ''; + } + } +} + +################# +# Create Folder +################# +#Fixxed by Timo Trautmann double database entries also called by action upl_mkdir +// Use remembered path from upl_last_path (from session) +if (!isset($path) && $sess->is_registered("upl_last_path")) +{ + $path = $upl_last_path; +} + +$appendparameters = $_REQUEST["appendparameters"]; + +if (!isset ($action)) + $action = ""; + +if ($tmp_area == "") { + $tmp_area = $area; // $tmp_area used at two places for unknown reasons... +} + +$uplexpandedList = unserialize($currentuser->getUserProperty("system", "upl_expandstate")); +$upldbfsexpandedList = unserialize($currentuser->getUserProperty("system", "upl_dbfs_expandstate")); + +if (!is_array($uplexpandedList)) +{ + $uplexpandedList = array (); +} + +if (!is_array($upldbfsexpandedList)) +{ + $upldbfsexpandedList = array (); +} + +if ($action == "upl_renamedir") +{ + if ($perm->have_perm_area_action("upl", "upl_renamedir")) + { + uplRenameDirectory($oldname, $newname, $parent); + $path = $cfgClient[$client]['upl']['path'].$parent.$newname."/"; + if (in_array($cfgClient[$client]['upl']['path'].$parent.$oldname."/", $uplexpandedList)) + { + $uplexpandedList[] = $cfgClient[$client]['upl']['path'].$parent.$newname."/"; + } + } +} + +################### +# File System Tree +################### +$dbfs = new DBFSCollection; + +if ($action == "upl_delete") +{ + if (is_dbfs($path)) + { + $dbfs->remove($path."/."); + } else + { + /* Check for files */ + if (uplHasFiles($path)) + { + $failedFiles = array (); + + $directory = opendir($cfgClient[$client]["upl"]["path"].$path); + while (false !== ($dir_entry = readdir($directory))) + { + if ($dir_entry != "." && $dir_entry != "..") + { + $res = @ unlink($cfgClient[$client]["upl"]["path"].$path.$dir_entry); + + if ($res == false) + { + $failedFiles[] = $dir_entry; + } + } + } + } + + if (count($failedFiles) > 0) + { + $notification->displayNotification("warning", i18n("Failed to delete the following files:")."

    ".implode("
    ", $failedFiles)); + } else + { + $res = @ rmdir($cfgClient[$client]['upl']['path'].$path); + if ($res == false) + { + $notification->displayNotification("warning", sprintf(i18n("Failed to remove directory %s"), $path)); + } + } + } +} + +$tpl->reset(); + +$file = 'Upload'; +$pathstring = ''; +/* +$rootTreeItem = new TreeItem; +$rootTreeItem->custom["level"] = 0; +$rootTreeItem->name = i18n("Upload directory"); +*/ +$user_upload_path = getEffectiveSetting("upload","userpath"); + +if (is_string($user_upload_path) AND !empty($user_upload_path)) { + trim($user_upload_path); + $file = $user_upload_path; + if (substr($user_upload_path, -1) != "/") { + $user_upload_path .= "/"; + } + $pathstring = $user_upload_path; + if (substr($cfgClient[$client]["upl"]["path"], -1) != "/" AND substr($user_upload_path, 0, 1) == "/") { + $user_upload_path = substr($user_upload_path, 1); + } +} + +$rootTreeItem = new TreeItem; +$rootTreeItem->custom["level"] = 0; +$rootTreeItem->name = i18n("Upload directory"); +$aInvalidDirectories = uplRecursiveDirectoryList($cfgClient[$client]["upl"]["path"].$user_upload_path, $rootTreeItem, 2); + +if (count($aInvalidDirectories) > 0) { + $sWarningInfo = i18n('The following directories contains invalid characters and were ignored: '); + $sSeperator = '
    '; + $sFiles = implode(', ', $aInvalidDirectories); + $sRenameString = i18n('Please click here in order to rename automatically.'); + $sRenameHref = $sess->url("main.php?area=$area&frame=$frame&force_rename=true"); + $sRemameLink = ''.$sRenameString.''; + $sNotificationString = $sWarningInfo.$sSeperator.$sFiles.$sSeperator.$sSeperator.$sRemameLink; + + $sErrorString = $notification->returnNotification("warning", $sNotificationString, 1); + $tpl->set('s', 'WARNING', $sErrorString); +} else { + $tpl->set('s', 'WARNING', ''); +} + +/* Mark all items in the expandedList as expanded */ +foreach ($uplexpandedList as $key => $value) +{ + $rootTreeItem->markExpanded($value); +} + +/* Collapse and expand the tree */ +if (is_string($collapse)) +{ + $rootTreeItem->markCollapsed($collapse); +} + +if (is_string($expand)) +{ + $rootTreeItem->markExpanded($expand); +} + +$uplexpandedList = Array (); +$rootTreeItem->getExpandedList($uplexpandedList); + +$currentuser->setUserProperty("system", "upl_expandstate", serialize($uplexpandedList)); + +$objects = Array (); +$rootTreeItem->traverse($objects); +unset ($objects[0]); + +$bgcolor = (is_int($tpl->dyn_cnt / 2)) ? $cfg["color"]["table_light"] : $cfg["color"]["table_dark"]; + +if ($appendparameters == "filebrowser") +{ + $mtree = new cWidgetTreeView("b58f0ae3-8d4e-4bb3-a754-5f0628863364"); + $cattree = conFetchCategoryTree(); + $marray = array (); + + foreach ($cattree as $key => $catitem) + { + $no_start = true; + $no_online = true; + $no_start = !strHasStartArticle($catitem["idcat"], $lang); + + $no_online = !$catitem["visible"]; + + if ($catitem["visible"] == 1) + { + if ($catitem["public"] == 0) + { + if ($no_start || $no_online) + { + # Error found + $tmp_img = "folder_on_error_locked.gif"; + } else + { + # No error found + $tmp_img = "folder_on_locked.gif"; + } + } else + { + # Category is public + if ($no_start || $no_online) + { + # Error found + $tmp_img = "folder_on_error.gif"; + } else + { + # No error found + $tmp_img = "folder_on.gif"; + } + } + } else + { + # Category is offline + if ($catitem['public'] == 0) + { + # Category is locked + if ($no_start || $no_online) + { + # Error found + $tmp_img = "folder_off_error_locked.gif"; + + } else + { + # No error found + $tmp_img = "folder_off_locked.gif"; + + } + + } else + { + # Category is public + if ($no_start || $no_online) + { + # Error found + $tmp_img = "folder_off_error.gif"; + + } else + { + # No error found + $tmp_img = "folder_off.gif"; + + } + } + } + + $icon = "./images/".$tmp_img; + + $idcat = $catitem["idcat"]; + + $name = ' '.$catitem["name"].''; + $marray[] = array ("id" => $catitem["idcat"], "name" => $name, "level" => $catitem["level"], "attributes" => array ("icon" => $icon)); + } + + $mtree->setTreeName(i18n("Categories")); + $mtree->setIcon("images/grid_folder.gif"); + $mtree->importTable($marray); + + $baselink = new cHTMLLink; + $baselink->setCLink($area, $frame, ""); + $baselink->setCustom("appendparameters", $appendparameters); + + $mtree->setBaseLink($baselink); + $mtree->setBackgroundMode(TREEVIEW_BACKGROUND_SHADED); + $mtree->setMouseoverMode(TREEVIEW_MOUSEOVER_NONE); + $mtree->setCollapsed($collapsed); + $mtree->processParameters(); + + $collapsed = array (); + $mtree->getCollapsedList($collapsed); + + $tpl->set('s', 'CATBROWSER', $mtree->render()); + $tpl->set('s', 'APPENDPARAMETERS', 'url += \'&appendparameters='.$appendparameters.'\''); +} else +{ + $tpl->set('s', 'CATBROWSER', ''); + $tpl->set('s', 'APPENDPARAMETERS', 'url += \'&appendparameters='.$appendparameters.'\''); +} + +chdir($cfg['path']['contenido']); + +$tpl->set('s', 'SID', $sess->id); + +# create javascript multilink +$tmp_mstr = '%s'; +$mstr = sprintf($tmp_mstr, 'right_top', $sess->url("main.php?area=$area&frame=3&path=$pathstring&appendparameters=$appendparameters"), + 'right_bottom', $sess->url("main.php?area=$area&frame=4&path=$pathstring&appendparameters=$appendparameters"), + ''.$file); + +$tpl->set('d', 'PATH', $pathstring); +$tpl->set('d', 'BGCOLOR', $bgcolor); +$tpl->set('d', 'INDENT', 3); +$tpl->set('d', 'DIRNAME', $mstr); +$tpl->set('d', 'EDITBUTTON', ''); +$tpl->set('d', 'DELETEBUTTON', ''); +$tpl->set('d', 'COLLAPSE', ''); +$tpl->next(); + + +if (is_array($objects)) +{ + foreach ($objects as $a_file) + { + $file = $a_file->name; + $depth = $a_file->custom["level"] - 1; + $pathstring = str_replace($cfgClient[$client]['upl']['path'], "", $a_file->id); + $a_file->collapsed_icon = "images/grid_expand.gif"; + $a_file->expanded_icon = "images/grid_collapse.gif"; + $dlevels[$depth] = $a_file->custom["lastitem"]; + $imgcollapse = getExpandCollapseButton($a_file); + $fileurl = rawurlencode($path.$file.'/'); + $pathurl = rawurlencode($path); + + # Indent for every level + $cnt = $depth; + $indent = 18; + + for ($i = 0; $i < $cnt; $i ++) + { + $indent += 18; + } + + # create javascript multilink # -> better create meaningful comments + $tmp_mstr = '%s'; + $mstr = sprintf( + $tmp_mstr, + 'right_bottom', $sess->url("main.php?area=$area&frame=4&path=$pathstring&appendparameters=$appendparameters"), + 'right_top', $sess->url("main.php?area=$area&frame=3&path=$pathstring&appendparameters=$appendparameters"), + ''.$file); + + $hasFiles = uplHasFiles($pathstring); + $hasSubdirs = uplHasSubdirs($pathstring); + + if ((!$hasSubdirs) && (!$hasFiles) && $perm->have_perm_area_action($tmp_area, "upl_rmdir")) + { + $deletebutton = ''.$file.'\', \'deleteDirectory(\\\''.$pathstring.'\\\')\')">'.i18n('; + } else + { + if ($hasFiles) + { + $message = i18n("Directory contains files"); + } else + { + $message = i18n("Permission denied"); + } + + $deletebutton = "\"".$message."\""; + } + + $bgcolor = (is_int($tpl->dyn_cnt / 2)) ? $cfg["color"]["table_light"] : $cfg["color"]["table_dark"]; + + $tpl->set('d', 'PATH', $pathstring); + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'INDENT', 0); + + $gline = ""; + + for ($i = 1; $i < $depth; $i ++) + { + if ($dlevels[$i] == false && $i != 0) + { + $gline .= ''; + } else + { + $gline .= ''; + } + } + + $parent = str_replace($cfgClient[$client]['upl']['path'], "", $a_file->custom["parent"]); + + $tpl->set('d', 'DIRNAME', $mstr); + $tpl->set('d', 'EDITBUTTON', ''); + $tpl->set('d', 'DELETEBUTTON', $deletebutton); + + $tpl->set('d', 'COLLAPSE', $gline.$imgcollapse); + $tpl->next(); + + } +} + +$tpl->set('d', 'DELETEBUTTON', ' '); +$tpl->set('d', 'DIRNAME', ''); +$tpl->set('d', 'EDITBUTTON', ''); +$tpl->set('d', 'COLLAPSE', ""); +$tpl->next(); + +#################################### +# Database-based filesystem (DBFS) +#################################### +$file = i18n("Database Filesystem"); +$pathstring = 'dbfs:'; +$rootTreeItem = new TreeItem; +$rootTreeItem->custom["level"] = 0; + +uplRecursiveDBDirectoryList("", $rootTreeItem, 2); + +/* Mark all items in the expandedList as expanded */ +foreach ($upldbfsexpandedList as $key => $value) +{ + $rootTreeItem->markExpanded($value); +} + +/* Collapse and expand the tree */ +if (is_string($collapse)) +{ + $rootTreeItem->markCollapsed($collapse); +} + +if (is_string($expand)) +{ + $rootTreeItem->markExpanded($expand); +} + +$upldbfsexpandedList = Array (); +$rootTreeItem->getExpandedList($upldbfsexpandedList); + +$currentuser->setUserProperty("system", "upl_dbfs_expandstate", serialize($upldbfsexpandedList)); + +$objects = Array (); +$rootTreeItem->traverse($objects); + +unset ($objects[0]); + +$bgcolor = (is_int($tpl->dyn_cnt / 2)) ? $cfg["color"]["table_light"] : $cfg["color"]["table_dark"]; + +$tmp_mstr = '%s'; +$mstr = sprintf($tmp_mstr, 'right_top', $sess->url("main.php?area=$area&frame=3&path=$pathstring&appendparameters=$appendparameters"), + 'right_bottom', $sess->url("main.php?area=$area&frame=4&path=$pathstring&appendparameters=$appendparameters"), + ''.$file); + +$tpl->set('d', 'PATH', $pathstring); +$tpl->set('d', 'BGCOLOR', $bgcolor); +$tpl->set('d', 'INDENT', 3); +$tpl->set('d', 'DIRNAME', $mstr); +$tpl->set('d', 'EDITBUTTON', ''); +$tpl->set('d', 'DELETEBUTTON', ''); +$tpl->set('d', 'COLLAPSE', ''); +$tpl->next(); + +$dbfsc = new DBFSCollection; + +$dlevels = array (); + +if (is_array($objects)) +{ + foreach ($objects as $a_file) + { + $file = $a_file->name; + $depth = $a_file->custom["level"] - 1; + $pathstring = $a_file->id; + $a_file->collapsed_icon = "images/grid_expand.gif"; + $a_file->expanded_icon = "images/grid_collapse.gif"; + $dlevels[$depth] = $a_file->custom["lastitem"]; + $collapse = getExpandCollapseButton($a_file); + $fileurl = rawurlencode($path.$file.'/'); + $pathurl = rawurlencode($path); + + if($file == 'tmp') + { + echo 'tmp2
    '; + } + + # Indent for every level + $cnt = $depth; + $indent = 18; + + for ($i = 0; $i < $cnt; $i ++) + { + # 18 px for every level + $indent += 18; + } + + # create javascript multilink + $tmp_mstr = '%s'; + $mstr = sprintf($tmp_mstr, 'right_bottom', $sess->url("main.php?area=$area&frame=4&path=$pathstring&appendparameters=$appendparameters"), + 'right_top', $sess->url("main.php?area=$area&frame=3&path=$pathstring&appendparameters=$appendparameters"), + ''.$file); + + $hasFiles = $dbfsc->hasFiles($pathstring); + + if (!$hasFiles && $perm->have_perm_area_action($tmp_area, "upl_rmdir")) + { + $deletebutton = ''.$file.'\', \'deleteDirectory(\\\''.$pathstring.'\\\')\')">'.i18n('; + } else + { + if ($hasFiles) + { + $message = i18n("Directory contains files"); + } else + { + $message = i18n("Permission denied"); + } + + $deletebutton = "\"".$message."\""; + } + + $bgcolor = (is_int($tpl->dyn_cnt / 2)) ? $cfg["color"]["table_light"] : $cfg["color"]["table_dark"]; + + $tpl->set('d', 'PATH', $pathstring); + $tpl->set('d', 'BGCOLOR', $bgcolor); + $tpl->set('d', 'INDENT', 0); + + $gline = ""; + + for ($i = 1; $i < $depth; $i ++) + { + if ($dlevels[$i] == false && $i != 0) + { + $gline .= ''; + } else + { + $gline .= ''; + } + } + + $parent = str_replace($cfgClient[$client]['upl']['path'], "", $a_file->custom["parent"]); + $tpl->set('d', 'DIRNAME', $mstr); + $tpl->set('d', 'EDITBUTTON', ''); + $tpl->set('d', 'DELETEBUTTON', $deletebutton); + $tpl->set('d', 'COLLAPSE', $gline.$collapse); + $tpl->next(); + + } +} + +$tpl->set('s', 'ID_PATH', $path); +chdir($cfg["path"]["contenido"]); +$tpl->generate($cfg['path']['templates'].$cfg['templates']['upl_dirs_overview']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.upl_edit.php b/branches/conlite20/conlite/includes/include.upl_edit.php new file mode 100644 index 0000000..aefa1fc --- /dev/null +++ b/branches/conlite20/conlite/includes/include.upl_edit.php @@ -0,0 +1,318 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-12-30 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-07-31, Oliver Lohkemper, add CEC + * modified 2008-08-11, Timo Trautmann, added urlencode for meta storage in database + * modified 2008-10-16, Oliver Lohkemper, add copyright in upl_meta - CON-212 + * modified 2010-09-20, Dominik Ziegler, implemented check for write permissions - CON-319 + * + * $Id: include.upl_edit.php 424 2016-02-25 06:28:41Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude("includes", "functions.upl.php"); + +$sFilename = Contenido_Security::escapeString($_REQUEST["file"]); +$sFilename = str_replace('"', '', $sFilename); +$sFilename = str_replace("'", '', $sFilename); + +$sPathname = Contenido_Security::escapeString($_REQUEST["path"]); +$sPathname = str_replace('"', '', $sPathname); +$sPathname = str_replace("'", '', $sPathname); + +$page = new UI_Page; +$page->addScript("cal1", ''); +$page->addScript("cal2", ''); +$page->addScript("cal3", ''); +$page->addScript("cal4", ''); + +$form = new UI_Table_Form("properties"); +$form->setVar("frame", $frame); +$form->setVar("area", "upl"); +$form->setVar("path", $sPathname); +$form->setVar("file", $sFilename); +$form->setVar("action", "upl_modify_file"); +$form->setVar("startpage", $_REQUEST["startpage"]); +$form->setVar("sortby", $_REQUEST["sortby"]); +$form->setVar("sortmode", $_REQUEST["sortmode"]); +$form->setVar("thumbnailmode", $_REQUEST["thumbnailmode"]); +$form->addHeader(i18n("Edit")); + +$properties = new PropertyCollection; +$uploads = new UploadCollection; + +if (is_dbfs($sPathname)) { + $qpath = $sPathname . "/"; +} else { + $qpath = $sPathname; +} + +if ((is_writable($cfgClient[$client]["upl"]["path"].$path) || is_dbfs($path)) && (int) $client > 0) { + $bDirectoryIsWritable = true; +} else { + $bDirectoryIsWritable = false; +} + +$uploads->select("idclient = '".$client."' AND dirname = '".$qpath."' AND filename='".$sFilename."'"); + +if ($upload = $uploads->next()) { + + /* + * Which rows to display? + */ + $aListRows = array(); + $aListRows["filename"] = i18n("File name"); + $aListRows["path"] = i18n("Path"); + $aListRows["replacefile"] = i18n("Replace file"); + $aListRows["medianame"] = i18n("Media name"); + $aListRows["description"] = i18n("Description"); + $aListRows["keywords"] = i18n("Keywords"); + $aListRows["medianotes"] = i18n("Internal notes"); + $aListRows["copyright"] = i18n("Copyright"); + $aListRows["protected"] = i18n("Protection"); + $aListRows["timecontrol"] = i18n("Time control"); + $aListRows["preview"] = i18n("Preview"); + $aListRows["author"] = i18n("Author"); + $aListRows["modified"] = i18n("Last modified by"); + + /* + * Delete dbfs specific rows + */ + if (!is_dbfs($sPathname)) { + unset($aListRows['protected']); + unset($aListRows['timecontrol']); + } + + /* + * Call chains to process the rows + */ + $_cecIterator = $_cecRegistry->getIterator("Contenido.Upl_edit.Rows"); + if ($_cecIterator->count() > 0) { + while ($chainEntry = $_cecIterator->next()) { + $newRowList = $chainEntry->execute($aListRows); + if (is_array($newRowList)) { + $aListRows = $newRowList; + } + } + } + + + $iIdupl = $upload->get("idupl"); + $sSql = "SELECT * FROM " . $cfg['tab']['upl_meta'] . " + WHERE idupl = '" . Contenido_Security::toInteger($iIdupl) . "' + AND idlang = '" . Contenido_Security::toInteger($lang) . "' + LIMIT 0, 1"; + $db->query($sSql); + + if ($db->num_rows() > 0) { + $db->next_record(); + } + + /* + * Add rows to $form + */ + foreach ($aListRows as $sListRow => $sTitle) + { + $sCell = ""; + switch ($sListRow) + { + case "filename": + $sCell = $sFilename; + break; + + case "path": + $sCell = generateDisplayFilePath($qpath, 65); + break; + + case "replacefile": + $uplelement = new cHTMLUpload("file",40); + $uplelement->setDisabled(!$bDirectoryIsWritable); + $sCell = $uplelement->render(); + + break; + + case "medianame": + if( $db->f('medianame') ) $medianame = Contenido_Security::unFilter($db->f('medianame')); + else $medianame = $properties->getValue("upload", $qpath.$sFilename, "file", "medianame"); + $mnedit = new cHTMLTextbox("medianame", $medianame, 60 ); + $sCell = $mnedit->render(); + break; + + case "description": + if( $db->f('description') ) $sDescription = Contenido_Security::unFilter($db->f('description')); + else $sDescription = $upload->get("description"); + $dsedit = new cHTMLTextarea("description", $sDescription ); + $sCell = $dsedit->render(); + break; + + case "keywords": + if( $db->f('keywords') ) $keywords = Contenido_Security::unFilter($db->f('keywords')); + else $keywords = $properties->getValue("upload", $qpath.$sFilename, "file", "keywords"); + $kwedit = new cHTMLTextarea("keywords", $keywords ); + $sCell = $kwedit->render(); + break; + + case "medianotes": + if( $db->f('internal_notice') ) $medianotes = Contenido_Security::unFilter($db->f('internal_notice')); + else $medianotes = $properties->getValue("upload", $qpath.$sFilename, "file", "medianotes"); + $moedit = new cHTMLTextarea("medianotes", $medianotes ); + $sCell = $moedit->render(); + break; + + case "copyright": + if( $db->f('copyright') ) $copyright = Contenido_Security::unFilter($db->f('copyright')); + else $copyright = $properties->getValue("upload", $qpath.$sFilename, "file", "copyright"); + $copyrightEdit = new cHTMLTextarea("copyright", $copyright); + $sCell = $copyrightEdit->render(); + break; + + case "protected": + $vprotected = $properties->getValue("upload", $qpath.$sFilename, "file", "protected"); + $protected = new cHTMLCheckbox("protected", "1" ); + $protected->setChecked($vprotected); + $protected->setLabelText(i18n("Protected for non-logged in users")); + $sCell = $protected->render(); + break; + + case "timecontrol": + $iTimeMng = (int)$properties->getValue("upload", $qpath.$sFilename, "file", "timemgmt"); + $sStartDate = $properties->getValue("upload", $qpath.$sFilename, "file", "datestart"); + $sEndDate = $properties->getValue("upload", $qpath.$sFilename, "file", "dateend"); + + $oTimeCheckbox = new cHTMLCheckbox("timemgmt", i18n("Use time control")); + $oTimeCheckbox->setChecked($iTimeMng); + + $sHtmlTimeMng = "\n"; + $sHtmlTimeMng .= "\n"; + + $sHtmlTimeMng .= "\n"; + $sHtmlTimeMng .= ''; + + $sHtmlTimeMng .= "\n"; + $sHtmlTimeMng .= ''; + + $sHtmlTimeMng .= "
    " . $oTimeCheckbox->render() . "
    ' . + ' 
    ' . + ' 
    \n"; + + $sHtmlTimeMng .= ''; + + $sHtmlTimeMng .= ''; + + $sCell = $sHtmlTimeMng; + break; + + case "preview": + if (is_dbfs($sPathname)) { + $sCell = ''; + } else { + $sCell = ''; + } + break; + + case "author": + $sCell = $classuser->getUserName($upload->get("author")) . " (". $upload->get("created").")"; + break; + + case "modified": + $sCell = $classuser->getUserName($upload->get("modifiedby")). " (". $upload->get("lastmodified").")"; + break; + + default: + /* + * Call chain to retrieve value + */ + $_cecIterator = $_cecRegistry->getIterator("Contenido.Upl_edit.RenderRows"); + + if ($_cecIterator->count() > 0) { + $contents = array(); + while ($chainEntry = $_cecIterator->next()) { + $contents[] = $chainEntry->execute( $iIdupl, $qpath, $sFilename, $sListRow ); + } } + $sCell = implode("", $contents); + } + $form->add($sTitle, $sCell ); + } + + + $sScript = ""; + if (is_dbfs($sPathname)) { + $sScript = "" . + "\n\n\n\n\n\n"; + } + /* + * Script must add in body-tag + */ + $sScriptinBody = ' + '; + $page->addScript('style', ''); + + if ( $bDirectoryIsWritable == false ) { + $sErrorMessage = $notification->returnNotification("error", i18n("Directory not writable") . ' (' . $cfgClient[$client]["upl"]["path"].$path . ')'); + $sErrorMessage .= '
    '; + } else { + $sErrorMessage = ''; + } + + $page->setContent( $sScriptinBody . $sErrorMessage . $form->render() . $sScript ); +} +else { + $page->setContent(sprintf(i18n("Could not load file %s"),$sFilename)); +} + +$page->render(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.upl_files_overview.php b/branches/conlite20/conlite/includes/include.upl_files_overview.php new file mode 100644 index 0000000..8f95b41 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.upl_files_overview.php @@ -0,0 +1,931 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * $Id: include.upl_files_overview.php 374 2015-11-09 15:59:28Z oldperl $: + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude("includes", "api/functions.frontend.list.php"); + +if (!(int) $client > 0) { + #if there is no client selected, display empty page + $oPage = new cPage; + $oPage->render(); + return; +} + +$appendparameters = $_REQUEST["appendparameters"]; +$file = $_REQUEST['file']; + +if (!is_array($browserparameters) && ($appendparameters != "imagebrowser" || $appendparameters != "filebrowser")) { + $browserparameters = array(); +} + +if (!$sess->is_registered("upl_last_path")) { + $upl_last_path = $path; + $sess->register("upl_last_path"); +} else if (!isset($path)) { + $path = $upl_last_path; +} +$upl_last_path = $path; + +$uploads = new UploadCollection; + +$dbfs = new DBFSCollection; + +if (is_dbfs($path)) { + $qpath = $path . "/"; +} else { + $qpath = $path; +} + +if ($path && $action != '') { + $sReloadScript = ""; +} else { + $sReloadScript = ""; +} + +$sErrorMessage = ''; + +if ((is_writable($cfgClient[$client]["upl"]["path"] . $path) || is_dbfs($path)) && (int) $client > 0) { + $bDirectoryIsWritable = true; +} else { + $bDirectoryIsWritable = false; + $sErrorMessage = $notification->returnNotification("error", i18n("Directory not writable") . ' (' . $cfgClient[$client]["upl"]["path"] . $path . ')'); + $sErrorMessage .= '
    '; +} + + +if ($action == "upl_modify_file") { + /* Did the user upload a new file? */ + if ($bDirectoryIsWritable == true && count($_FILES) == 1 && ($_FILES["file"]["size"] > 0) && ($_FILES["file"]["name"] != "")) { + if ($_FILES['file']['tmp_name'] != "") { + $tmp_name = $_FILES['file']['tmp_name']; + $_cecIterator = $_cecRegistry->getIterator("Contenido.Upload.UploadPreprocess"); + + if ($_cecIterator->count() > 0) { + /* Copy file to a temporary location */ + move_uploaded_file($tmp_name, $cfg["path"]["contenido"] . $cfg["path"]["temp"] . $file); + $tmp_name = $cfg["path"]["contenido"] . $cfg["path"]["temp"] . $file; + + while ($chainEntry = $_cecIterator->next()) { + if (is_dbfs($path)) { + $sPathPrepend = ''; + $sPathApppend = '/'; + } else { + $sPathPrepend = $cfgClient[$client]['upl']['path']; + $sPathApppend = ''; + } + + $modified = $chainEntry->execute($tmp_name, $sPathPrepend . $path . $sPathApppend . uplCreateFriendlyName($_FILES['file']['name'])); + + if ($modified !== false) { + $tmp_name = $modified; + } + } + } + + if (is_dbfs($path)) { + $dbfs->writeFromFile($tmp_name, $qpath . $file); + unlink($_FILES['file']['tmp_name']); + } else { + unlink($cfgClient[$client]['upl']['path'] . $path . $file); + + if (is_uploaded_file($tmp_name)) { + move_uploaded_file($tmp_name, $cfgClient[$client]['upl']['path'] . $path . $file); + } else { + rename($tmp_name, $cfgClient[$client]['upl']['path'] . $path . $file); + } + } + } + } + + $uploads->select("idclient = '$client' AND dirname = '$qpath' AND filename='$file'"); + $upload = $uploads->next(); + + $upload->set("description", stripslashes($description)); + $upload->store(); + + $properties = new PropertyCollection; + $properties->setValue("upload", $qpath . $file, "file", "protected", stripslashes($protected)); + + $bTimeMng = (isset($_REQUEST['timemgmt']) && strlen($_REQUEST['timemgmt']) > 1); + $properties->setValue("upload", $qpath . $file, "file", "timemgmt", ($bTimeMng) ? 1 : 0); + if ($bTimeMng) { + $properties->setValue("upload", $qpath . $file, "file", "datestart", $_REQUEST['datestart']); + $properties->setValue("upload", $qpath . $file, "file", "dateend", $_REQUEST['dateend']); + } + + $iIdupl = $upload->get("idupl"); + if (!empty($iIdupl) && $iIdupl > 0) { + // check for new entry: + $sSql = "SELECT id_uplmeta FROM " . $cfg['tab']['upl_meta'] . " WHERE idupl = $iIdupl AND idlang = $lang " . + "LIMIT 0, 1"; + $db->query($sSql); + if ($db->num_rows() == 0) { // new entry + $iNextId = $db->nextid($cfg['tab']['upl_meta']); + $sSql = "INSERT INTO " . $cfg['tab']['upl_meta'] . " " . + "SET id_uplmeta = $iNextId, idupl = $iIdupl, idlang = $lang, " . + "medianame = '" . Contenido_Security::filter($medianame, $db) . "', " . + "description = '" . Contenido_Security::filter($description, $db) . "', " . + "keywords = '" . Contenido_Security::filter($keywords, $db) . "', " . + "internal_notice = '" . Contenido_Security::filter($medianotes, $db) . "', " . + "copyright = '" . Contenido_Security::filter($copyright, $db) . "', " . + "author = '" . $auth->auth['uid'] . "', " . + "created = NOW(), modified = NOW(), modifiedby = '" . $auth->auth['uid'] . "'"; + } else { // update entry + $db->next_record(); + $iIduplmeta = $db->f('id_uplmeta'); + $sSql = "UPDATE " . $cfg['tab']['upl_meta'] . " " . + "SET " . + "medianame = '" . Contenido_Security::filter($medianame, $db) . "', " . + "description = '" . Contenido_Security::filter($description, $db) . "', " . + "keywords = '" . Contenido_Security::filter($keywords, $db) . "', " . + "internal_notice = '" . Contenido_Security::filter($medianotes, $db) . "', " . + "copyright = '" . Contenido_Security::filter($copyright, $db) . "', " . + "modified = NOW(), modifiedby = '" . $auth->auth['uid'] . "' " . + "WHERE id_uplmeta = " . $iIduplmeta; + } + $db->query($sSql); + } +} + +if ($action == "upl_multidelete" && $perm->have_perm_area_action($area, $action) && $bDirectoryIsWritable == true) { + if (is_array($fdelete)) { + /* Check if it is in the upload table */ + foreach ($fdelete as $file) { + $uploads->select("idclient = '$client' AND dirname='$qpath' AND filename='$file'"); + if ($item = $uploads->next()) { + if (is_dbfs($qpath)) { + $dbfs->remove($qpath . $file); + } else { + unlink($cfgClient[$client]['upl']['path'] . $qpath . $file); + } + + /* + * Call chain + */ + $_cecIterator = $_cecRegistry->getIterator("Contenido.Upl_edit.Delete"); + if ($_cecIterator->count() > 0) { + while ($chainEntry = $_cecIterator->next()) { + $chainEntry->execute($item->get('idupl'), $qpath, $file); + } + } + } + } + } +} + +if ($action == "upl_delete" && $perm->have_perm_area_action($area, $action) && $bDirectoryIsWritable == true) { + $uploads->select("idclient = '$client' AND dirname='$qpath' AND filename='$file'"); + if ($uploads->next()) { + if (is_dbfs($qpath)) { + $dbfs->remove($qpath . $file); + } else { + unlink($cfgClient[$client]['upl']['path'] . $qpath . $file); + } + + /* + * Call chain + */ + $_cecIterator = $_cecRegistry->getIterator("Contenido.Upl_edit.Delete"); + if ($_cecIterator->count() > 0) { + while ($chainEntry = $_cecIterator->next()) { + $chainEntry->execute($uploads->f('idupl'), $qpath, $file); + } + } + } +} + +if ($action == "upl_upload" && $bDirectoryIsWritable == true) { + //print_r($_FILES); + $bUplErr = false; + if (count($_FILES) == 1) { + foreach ($_FILES['file']['name'] as $key => $value) { + // new error handling + $iError = (int) $_FILES['file']['error'][$key]; + switch ($iError) { + case 1: + $bUplErr = true; + $sErrorMessage .= $notification->returnNotification("error", sprintf(i18n("The uploaded file (%s) exceeds the upload_max_filesize directive in php.ini."), $value)); + $sErrorMessage .= '
    '; + break; + case 2: + case 3: + case 5: + case 6: + case 7: + case 8: + $bUplErr = true; + $sErrorMessage .= $notification->returnNotification("error", sprintf(i18n("Error while uploading file (%s)."), $value)); + $sErrorMessage .= '
    '; + break; + default: + $bUplErr = false; + } + if ($_FILES['file']['tmp_name'][$key] != "") { + $tmp_name = $_FILES['file']['tmp_name'][$key]; + $_cecIterator = $_cecRegistry->getIterator("Contenido.Upload.UploadPreprocess"); + + if ($_cecIterator->count() > 0) { + /* Copy file to a temporary location */ + move_uploaded_file($tmp_name, $cfg["path"]["contenido"] . $cfg["path"]["temp"] . $_FILES['file']['name'][$key]); + $tmp_name = $cfg["path"]["contenido"] . $cfg["path"]["temp"] . $_FILES['file']['name'][$key]; + + while ($chainEntry = $_cecIterator->next()) { + if (is_dbfs($path)) { + $sPathPrepend = ''; + $sPathApppend = '/'; + } else { + $sPathPrepend = $cfgClient[$client]['upl']['path']; + $sPathApppend = ''; + } + + $modified = $chainEntry->execute($tmp_name, $sPathPrepend . $path . $sPathApppend . uplCreateFriendlyName($_FILES['file']['name'][$key])); + + if ($modified !== false) { + $tmp_name = $modified; + } + } + } + + if (is_dbfs($qpath)) { + $dbfs->writeFromFile($tmp_name, $qpath . uplCreateFriendlyName($_FILES['file']['name'][$key])); + unlink($tmp_name); + } else { + if (is_uploaded_file($tmp_name)) { + $final_filename = $cfgClient[$client]['upl']['path'] . $path . uplCreateFriendlyName($_FILES['file']['name'][$key]); + move_uploaded_file($tmp_name, $final_filename); + + $iterator = $_cecRegistry->getIterator("Contenido.Upload.UploadPostprocess"); + while ($chainEntry = $iterator->next()) { + $chainEntry->execute($final_filename); + } + } else { + rename($tmp_name, $cfgClient[$client]['upl']['path'] . $path . uplCreateFriendlyName($_FILES['file']['name'][$key])); + } + } + } + } + } + if ($bUplErr) { + $sTmpErrorMessage = $notification->returnNotification("warning", i18n("Errors while uploading file(s). Some or all files were not uploaded.")); + } + $sErrorMessage = $sTmpErrorMessage . "
    " . $sErrorMessage; +} + +if ($action == "upl_renamefile" && $bDirectoryIsWritable == true) { + $newname = str_replace("/", "", $newname); + rename($cfgClient[$client]['upl']['path'] . $path . $oldname, $cfgClient[$client]['upl']['path'] . $path . $newname); +} + +/** + * + */ +class UploadList extends FrontendList { + + var $dark; + var $size; + + public function convert($field, $data) { + global $cfg, $path, $sess, $cfgClient, $client, $appendparameters; + + switch ($field) { + case 1: + if ($this->dark) { + $data = $cfg["color"]["table_dark"]; + } else { + $data = $cfg["color"]["table_light"]; + } + $this->dark = !$this->dark; + break; + + case 2: + break; + + case 3: + /* If this file is an image, try to open */ + switch (getFileExtension($data)) { + case "png": + case "gif": + case "tiff": + case "bmp": + case "jpeg": + case "jpg": + case "bmp": + case "iff": + case "xbm": + case "wbmp": + $sCacheThumbnail = uplGetThumbnail($data, 150); + $sCacheName = substr($sCacheThumbnail, strrpos($sCacheThumbnail, "/") + 1, strlen($sCacheThumbnail) - (strrchr($sCacheThumbnail, '/') + 1)); + $sFullPath = $cfgClient[$client]['path']['frontend'] . 'cache/' . $sCacheName; + if (file_exists($sFullPath)) { + $aDimensions = getimagesize($sFullPath); + $iWidth = $aDimensions[0]; + $iHeight = $aDimensions[1]; + } else { + $iWidth = 0; + $iHeight = 0; + } + + if (is_dbfs($data)) { + $data = ' + + + '; + break; + } else { + $retValue = ' + + + '; + $retValue .= ''; + $data = $retValue; + } + break; + + default: + $sCacheThumbnail = uplGetThumbnail($data, 150); + return ''; + } + break; + + case 4: + if ($appendparameters == "imagebrowser" || $appendparameters == "filebrowser") { + if (is_dbfs($path . '/' . $data)) { + $mstr = ' ' . $data . ''; + } else { + $mstr = ' ' . $data . ''; + } + } else { + $tmp_mstr = '%s'; + $mstr = sprintf($tmp_mstr, 'right_bottom', $sess->url("main.php?area=upl_edit&frame=4&path=$path&file=$data&appendparameters=$appendparameters&startpage=" . $_REQUEST['startpage'] . "&sortby=" . $_REQUEST['sortby'] . "&sortmode=" . $_REQUEST['sortmode'] . "&thumbnailmode=" . $_REQUEST['thumbnailmode']), 'right_top', $sess->url("main.php?area=upl&frame=3&path=$path&file=$data"), $data); + } + $data = $mstr; + break; + + case 5: + $data = human_readable_size($data); + break; + + case 6: + $data = uplGetFileTypeDescription($data); + break; + } + return $data; + } + +} + +/** + * + * @global type $cfg + * @global type $client + * @global type $cfgClient + * @global type $area + * @global type $frame + * @global type $sess + * @global type $browserparameters + * @global type $appendparameters + * @global type $perm + * @global type $auth + * @global type $sReloadScript + * @global type $notification + * @global type $bDirectoryIsWritable + * @param type $path + * @param int $sortby + * @param string $sortmode + * @param type $startpage + * @param type $thumbnailmode + * @param type $sErrorMessage + * @return type + */ +function uplRender($path, $sortby, $sortmode, $startpage = 1, $thumbnailmode, $sErrorMessage) { + global $cfg, $client, $cfgClient, $area, $frame, $sess, $browserparameters, $appendparameters, $perm, $auth, $sReloadScript, $notification, $bDirectoryIsWritable; + + if ($sortby == "") { + $sortby = 3; + $sortmode = "ASC"; + } + + if ($startpage == "") { + $startpage = 1; + } + + $thisfile = $sess->url("main.php?idarea=$area&frame=$frame&path=$path&thumbnailmode=$thumbnailmode&appendparameters=$appendparameters"); + $scrollthisfile = $thisfile . "&sortmode=$sortmode&sortby=$sortby&appendparameters=$appendparameters"; + + if ($sortby == 3 && $sortmode == "DESC") { + $fnsort = '' . i18n("Filename / Description") . ''; + } else { + if ($sortby == 3) { + $fnsort = '' . i18n("Filename / Description") . ''; + } else { + $fnsort = '' . i18n("Filename / Description") . ''; + } + } + + if ($sortby == 5 && $sortmode == "DESC") { + $sizesort = '' . i18n("Size") . ''; + } else { + if ($sortby == 5) { + $sizesort = '' . i18n("Size") . ''; + } else { + $sizesort = '' . i18n("Size") . ""; + } + } + + if ($sortby == 6 && $sortmode == "DESC") { + $typesort = '' . i18n("Type") . ''; + } else { + if ($sortby == 6) { + $typesort = '' . i18n("Type") . ''; + } else { + $typesort = '' . i18n("Type") . ""; + } + } + + // Multiple deletes at top of table + if ($perm->have_perm_area_action("upl", "upl_multidelete") && $bDirectoryIsWritable == true) { + $sConfirmation = "box.confirm('" . i18n('Delete Files') . "', '" . i18n('Are you sure you want to delete the selected files?') . "', 'document.del.action.value = \\\\'upl_multidelete\\\\'; document.del.submit()');"; + $sDelete = '' . i18n(' . i18n("Delete selected files") . ''; + } else { + $sDelete = ''; + } + + if (is_dbfs($path)) { + $mpath = $path . "/"; + } else { + $mpath = "upload/" . $path; + } + + $sDisplayPath = generateDisplayFilePath($mpath, 85); + + $sToolsRow = ' + +
    + ' . i18n( ' . i18n("Flip Selection") . ' +   + ' . $sDelete . ' +
    + + ' . i18n("Path:") . " " . $sDisplayPath . ' + +
    + + '; + $sSpacedRow = ' + + '; + /* List wraps */ + + $pagerwrap = ' + +
    -C-SCROLLRIGHT-
    +
    -C-PAGE-
    +
    -C-SCROLLLEFT-
    + ' . i18n("Files per Page") . ' -C-FILESPERPAGE- +
    + + '; + + $startwrap = ' + ' . $pagerwrap . $sSpacedRow . $sToolsRow . $sSpacedRow . ' + + + + + + + + '; + $itemwrap = ' + + + + + + + '; + $endwrap = $sSpacedRow . $sToolsRow . $sSpacedRow . $pagerwrap . '
    ' . i18n("Mark") . '' . i18n("Preview") . '' . $fnsort . '' . $sizesort . '' . $typesort . '' . i18n("Actions") . '
    %s%s%s%s%s%s
    '; + + /* Object initializing */ + $page = new UI_Page; + $page->addScript('reloadscript', $sReloadScript); + $list2 = new UploadList($startwrap, $endwrap, $itemwrap); + + $uploads = new UploadCollection; + + /* Fetch data */ + if (substr($path, strlen($path) - 1, 1) != "/") { + if ($path != "") { + $qpath = $path . "/"; + } + } else { + $qpath = $path; + } + + $uploads->select("idclient = '$client' AND dirname = '$qpath'"); + + $user = new User; + $user->loadUserByUserID($auth->auth["uid"]); + + if ($thumbnailmode == '') { + $current_mode = $user->getUserProperty('upload_folder_thumbnailmode', md5($path)); + if ($current_mode != '') { + $thumbnailmode = $current_mode; + } else { + $thumbnailmode = getEffectiveSetting('backend', 'thumbnailmode', 100); + } + } + + switch ($thumbnailmode) { + case 25: $numpics = 25; + break; + case 50: $numpics = 50; + break; + case 100:$numpics = 100; + break; + case 200:$numpics = 200; + break; + default: $thumbnailmode = 100; + $numpics = 15; + break; + } + + # + $user->setUserProperty('upload_folder_thumbnailmode', md5($path), $thumbnailmode); + + $list2->setResultsPerPage($numpics); + + $list2->size = $thumbnailmode; + + $rownum = 0; + + $properties = new PropertyCollection; + + while ($item = $uploads->next()) { + $filename = $item->get("filename"); + + $bAddFile = true; + + + if ($appendparameters == "imagebrowser") { + $restrictvar = "restrict_" . $appendparameters; + if (array_key_exists($restrictvar, $browserparameters)) { + $extension = getFileExtension($filename); + if (count($browserparameters[$restrictvar]) > 0) { + $bAddFile = false; + if (in_array($extension, $browserparameters[$restrictvar])) { + $bAddFile = true; + } + } + } + } + + $dirname = $item->get("dirname"); + $filesize = $item->get("size"); + + if ($filesize == 0) { + if (file_exists($cfgClient[$client]["upl"]["path"] . $dirname . $filename)) { + $filesize = filesize($cfgClient[$client]["upl"]["path"] . $dirname . $filename); + } + } + + $actions = ""; + + $medianame = $properties->getValue("upload", $path . $filename, "file", "medianame"); + $medianotes = $properties->getValue("upload", $path . $filename, "file", "medianotes"); + + $todo = new TODOLink("upload", $path . $filename, "File $path$filename", ""); + + $proptitle = i18n("Display properties"); + + if ($appendparameters == "imagebrowser" || $appendparameters == "filebrowser") { + $mstr = ""; + } else { + $tmp_mstr = '%s'; + $mstr = sprintf($tmp_mstr, 'right_bottom', $sess->url("main.php?area=upl_edit&frame=4&path=$path&file=$filename&startpage=$startpage&sortby=$sortby&sortmode=$sortmode&thumbnailmode=$thumbnailmode"), 'right_top', $sess->url("main.php?area=upl&frame=3&path=$path&file=$filename"), '' . $proptitle . ''); + } + + $actions = $mstr . $actions; + + $showfilename = $filename; + + $check = new cHTMLCheckbox("fdelete[]", $filename); + + $mark = $check->toHTML(false); + + if ($bAddFile == true) { + // 'bgcolor' is just a placeholder... + $list2->setData($rownum, 'bgcolor', $mark, $dirname . $filename, $showfilename, $filesize, getFileExtension($filename), $todo->render() . $actions); + $rownum++; + } + } + + if ($rownum == 0) { + $markSubItem = markSubMenuItem(0, true); + $page->setContent($sErrorMessage . i18n("No files found") . $markSubItem); + $page->render(); + return; + } + + if ($sortmode == "ASC") { + $list2->sort($sortby, SORT_ASC); + } else { + $list2->sort($sortby, SORT_DESC); + } + + if ($startpage < 1) { + $startpage = 1; + } + + if ($startpage > $list2->getNumPages()) { + $startpage = $list2->getNumPages(); + } + + $list2->setListStart($startpage); + + /* Create scroller */ + if ($list2->getCurrentPage() > 1) { + $prevpage = '' . i18n("Previous Page") . ''; + } else { + $prevpage = ' '; + } + + if ($list2->getCurrentPage() < $list2->getNumPages()) { + $nextpage = '' . i18n("Next Page") . ''; + } else { + $nextpage = ' '; + } + + #$curpage = $list2->getCurrentPage() . " / ". $list2->getNumPages(); + + + + + if ($list2->getNumPages() > 1) { + $num_pages = $list2->getNumPages(); + + $paging_form.=""; + $paging_form.=""; + } else { + $paging_form = "1"; + } + $curpage = $paging_form . " / " . $list2->getNumPages(); + + $scroller = $prevpage . $nextpage; + $output = $list2->output(true); + $output = str_replace("-C-SCROLLLEFT-", $prevpage, $output); + $output = str_replace("-C-SCROLLRIGHT-", $nextpage, $output); + $output = str_replace("-C-PAGE-", i18n("Page") . " " . $curpage, $output); + + $select = new cHTMLSelectElement("thumbnailmode_input"); + + $values = Array( + 25 => "25", + 50 => "50", + 100 => "100", + 200 => "200"); + + foreach ($values as $key => $value) { + $option = new cHTMLOptionElement($value, $key); + $select->addOptionElement($key, $option); + } + + $select->setDefault($thumbnailmode); + $select->setEvent('change', "document.del.thumbnailmode.value = this.value;"); + + $topbar = $select->render() . ''; + + $output = str_replace("-C-FILESPERPAGE-", $topbar, $output); + + + $page->addScript('messagebox', ''); + + $sDelTitle = i18n("Delete file"); + $sDelDescr = i18n("Do you really want to delete the following file:
    "); + + $script = ' + '; + + $script = str_replace('{SID}', $sess->id, $script); + $script = str_replace('{RENAME}', i18n("Enter new filename"), $script); + + $page->addScript("script", $script); + $markSubItem = markSubMenuItem(0, true); + + + $delform = new UI_Form("del"); + $delform->setVar("area", $area); + $delform->setVar("action", ""); + $delform->setVar("startpage", $startpage); + $delform->setVar("thumbnailmode", $thumbnailmode); + $delform->setVar("sortmode", $sortmode); + $delform->setVar("sortby", $sortby); + $delform->setVar("appendparameters", $appendparameters); + $delform->setVar("path", $path); + $delform->setVar("frame", 4); + + + // Table with (preview) images + $delform->add("list", $output); + + + $page->addScript('iZoom', ''); + $page->addScript('style', ''); + + $sScriptinBody = ' + '; + $page->addScript('style', ''); + $page->setContent($sScriptinBody . $sErrorMessage . $delform->render()); + $page->render(); +} + +uplSyncDirectory($path); +uplRender($path, $sortby, $sortmode, $startpage, $thumbnailmode, $sErrorMessage); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.upl_files_upload.php b/branches/conlite20/conlite/includes/include.upl_files_upload.php new file mode 100644 index 0000000..f1759d5 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.upl_files_upload.php @@ -0,0 +1,70 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-12-30 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-09-20, Dominik Ziegler, added path to error message when directory is not writable - CON-319 + * + * $Id: include.upl_files_upload.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude("includes", "functions.upl.php"); + +$page = new UI_Page; + +if ((is_writable($cfgClient[$client]["upl"]["path"].$path) || is_dbfs($path)) && (int) $client > 0) +{ + $form = new UI_Table_Form("properties"); + $form->setVar("frame", $frame); + $form->setVar("area", "upl"); + $form->setVar("path", $path); + $form->setVar("file", $file); + $form->setVar("action", "upl_upload"); + $form->setVar("appendparameters", $_REQUEST["appendparameters"]); + + $form->addHeader(i18n("Upload")); + + if (is_dbfs($path)) + $mpath = $path."/"; + else + $mpath = "upload/".$path; + + $sDisplayPath = generateDisplayFilePath($mpath, 85); + $form->add(i18n("Path:"), $sDisplayPath); + + $uplelement = new cHTMLUpload("file[]",40); + $num_upload_files = getEffectiveSetting('backend','num_upload_files',10); + $form->add(i18n("Upload files"), str_repeat($uplelement->render()."
    " ,$num_upload_files)); + + $page->setContent($form->render()); +} else { + $page->setContent($notification->returnNotification("error", i18n("Directory not writable") . ' (' . $cfgClient[$client]["upl"]["path"].$path . ')')); +} +$page->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.upl_left_top.php b/branches/conlite20/conlite/includes/include.upl_left_top.php new file mode 100644 index 0000000..aa6e26f --- /dev/null +++ b/branches/conlite20/conlite/includes/include.upl_left_top.php @@ -0,0 +1,163 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-04-01 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.upl_left_top.php 283 2014-01-09 14:48:38Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude("includes", "functions.con.php"); +cInclude("includes", "functions.str.php"); +cInclude("includes", "functions.upl.php"); + +$tpl->set('s', 'FORMACTION', ''); +$sDisplayPath = ''; +if (isset($_REQUEST['path'])) { + $sDisplayPath = $_REQUEST['path']; +} else { + $sDisplayPath = $sCurrentPathInfo; +} + +$sDisplayPath = generateDisplayFilePath($sDisplayPath, 35); +$tpl->set('s', 'CAPTION2', $sDisplayPath); + +#display notification, if there is no client +if ((int) $client == 0) { + $sNoClientNotification = '
    '.i18n('No Client selected').'
    '; + $tpl->set('s', 'NOTIFICATION', $sNoClientNotification); +} else { + $tpl->set('s', 'NOTIFICATION', ''); +} + +##################### +# Form for 'Search' +##################### +if ($appendparameters != 'filebrowser' && (int) $client > 0) { + $search = new cHTMLTextbox("searchfor", $_REQUEST['searchfor'], 26); + $search->setStyle("width:170px;"); + $sSearch = $search->render(); + + $form = new UI_Form("search"); + $form->add("search", '
    '.$sSearch.'
    '); + $form->setVar("area", $area); + $form->setVar("frame", $frame); + $form->setVar("contenido", $sess->id); + $form->setVar("appendparameters", $appendparameters); + $tpl->set('s', 'SEARCHFORM', $form->render()); + $tpl->set('s', 'SEARCHTITLE', i18n("Search for")); + $tpl->set('s', 'DISPLAY_SEARCH', 'block'); +} else { + $tpl->set('s', 'SEARCHFORM', ''); + $tpl->set('s', 'SEARCHTITLE', ''); + $tpl->set('s', 'DISPLAY_SEARCH', 'none'); +} + +if ($perm->have_perm_area_action("upl", "upl_mkdir") && (int) $client > 0) +{ + $sCurrentPathInfo = ""; + if ($sess->is_registered("upl_last_path") && !isset($path)) + { + $path = $upl_last_path; + } + + if ($path == "" || is_dbfs($path)) + { + $sCurrentPathInfo = $path; + } + else + { + $sCurrentPathInfo = str_replace($cfgClient[$client]['upl']['path'], "", $path); + } + + ########################### + # Form for 'New Directory' + ########################### + $inputfield = ' + + + + '; + $tpl->set('s', 'ACTION', $inputfield); + $sessURL = $sess->url("main.php?area=upl_mkdir&frame=2&appendparameters=$appendparameters"); + $tpl->set('s', 'TARGET', 'onsubmit="parent.frames[2].location.href=\''.$sess->url("main.php?area=upl&action=upl_mkdir&frame=2&appendparameters=$appendparameters"). + '&path=\'+document.newdir.path.value+\'&foldername=\'+document.newdir.foldername.value;"'); + $tpl->set('s', 'SUBMIT', ''); + $tpl->set('s', 'CAPTION', i18n("Create directory in")); + $tpl->set('s', 'DEBUG', ''); + $tpl->set('s', 'DISPLAY_DIR', 'block'); +} +// No permission with current rights +else +{ + $tpl->set('s', 'CAPTION', ''); + $tpl->set('s', 'CAPTION2', ''); + $inputfield = ''; + $tpl->set('s', 'TARGET', ''); + $tpl->set('s', 'SUBMIT', ''); + $tpl->set('s', 'ACTION', ''); + $tpl->set('s', 'DISPLAY_DIR', 'none'); +} + +############# +# Searching +############# +if ($searchfor != "") +{ + $items = uplSearch($searchfor); + + $tmp_mstr = 'conMultiLink(\'%s\', \'%s\', \'%s\', \'%s\')'; + $mstr = sprintf($tmp_mstr, + 'right_bottom', + $sess->url("main.php?area=upl_search_results&frame=4&searchfor=$searchfor&appendparameters=$appendparameters"), + 'right_top', + $sess->url("main.php?area=$area&frame=3&appendparameters=$appendparameters")); + $refreshMenu = "\n".'if (top.content.left.left_bottom) top.content.left.left_bottom.refreshMenu()'; + $tpl->set('s', 'RESULT', $mstr.$refreshMenu); +} +else +{ + $tpl->set('s', 'RESULT', ''); +} + +# create javascript multilink +$tmp_mstr = '%s'; +$mstr = sprintf($tmp_mstr, 'right_top', $sess->url("main.php?area=$area&frame=3&path=$pathstring&appendparameters=$appendparameters"), 'right_bottom', $sess->url("main.php?area=$area&frame=4&path=$pathstring&appendparameters=$appendparameters"), ''.$file); + +$tpl->set('d', 'PATH', $pathstring); +$tpl->set('d', 'BGCOLOR', $bgcolor); +$tpl->set('d', 'INDENT', 3); +$tpl->set('d', 'DIRNAME', $mstr); +$tpl->set('d', 'EDITBUTTON', ''); +$tpl->set('d', 'DELETEBUTTON', ''); +$tpl->set('d', 'COLLAPSE', ''); +$tpl->next(); +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['upl_left_top']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.upl_search_results.php b/branches/conlite20/conlite/includes/include.upl_search_results.php new file mode 100644 index 0000000..5e7c8e0 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.upl_search_results.php @@ -0,0 +1,632 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-12-29 + * modified 2008-06-27, Frederic Schneider, add security fix + * + * $Id: include.upl_search_results.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude("includes", "api/functions.frontend.list.php"); +cInclude("includes", "functions.upl.php"); + +$appendparameters = $_REQUEST["appendparameters"]; + +class UploadList extends FrontendList +{ + var $dark; + var $size; + var $pathdata; + + function convert($field, $data) + { + global $cfg, $sess, $client, $cfgClient, $appendparameters; + + if ($field == 6) + { + if ($data == "") + { + return i18n("None"); + } + } + if ($field == 5) + { + return human_readable_size($data); + } + + if ($field == 4) + { + if ($data == "") + { + return " "; + } else + { + return $data; + } + } + + if ($field == 3) + { + $vpath = str_replace($cfgClient[$client]["upl"]["path"], "", $this->pathdata); + $slashpos = strrpos($vpath, "/"); + if ($slashpos === false) + { + $file = $vpath; + } else + { + $path = substr($vpath, 0, $slashpos +1); + $file = substr($vpath, $slashpos +1); + } + + if ($appendparameters == "imagebrowser" || $appendparameters == "filebrowser") + { + $mstr = ''.$data.''; + } else + { + $markLeftPane = "parent.parent.frames['left'].frames['left_bottom'].upl.click(parent.parent.frames['left'].frames['left_bottom'].document.getElementById('$path'));"; + + $tmp_mstr = '%s'; + $mstr = sprintf($tmp_mstr, 'right_bottom', $sess->url("main.php?area=upl_edit&frame=4&path=$path&file=$file"), 'right_top', $sess->url("main.php?area=upl&frame=3&path=$path&file=$file"), $data); + } + return $mstr; + } + + if ($field == 2) + { + $this->pathdata = $data; + + /* If this file is an image, try to open */ + switch (getFileExtension($data)) + { + case "png" : + case "psd" : + case "gif" : + case "tiff" : + case "bmp" : + case "jpeg" : + case "jpg" : + case "bmp" : + case "iff" : + case "xbm" : + case "wbmp" : + $sCacheThumbnail = uplGetThumbnail($data, 150); + $sCacheName = substr($sCacheThumbnail, strrpos($sCacheThumbnail, "/")+1, strlen($sCacheThumbnail)-(strrchr($sCacheThumbnail, '/')+1)); + $sFullPath = $cfgClient[$client]['path']['frontend'].'cache/'.$sCacheName; + if (file_exists($sFullPath)) { + $aDimensions = getimagesize($sFullPath); + $iWidth = $aDimensions[0]; + $iHeight = $aDimensions[1]; + } else { + $iWidth = 0; + $iHeight = 0; + } + + if (is_dbfs($data)) + { + $retValue = + ' + + + '; + return $retValue; + } else { + $retValue = + ' + + + '; + $retValue .= ''; + return $retValue; + } + break; + default: + $sCacheThumbnail = uplGetThumbnail($data, 150); + return ''; + } + } + + if ($field == 1) + { + if ($this->dark) + { + $data = $cfg["color"]["table_dark"]; + } else + { + $data = $cfg["color"]["table_light"]; + } + $this->dark = !$this->dark; + } + + return $data; + } +} + +function uplRender($searchfor, $sortby, $sortmode, $startpage = 1, $thumbnailmode) +{ + global $cfg, $client, $cfgClient, $area, $frame, $sess, $appendparameters; + + if ($sortby == "") + { + $sortby = 7; + $sortmode = "DESC"; + } + + if ($startpage == "") + { + $startpage = 1; + } + + $thisfile = $sess->url("main.php?idarea=$area&frame=$frame&appendparameters=$appendparameters&searchfor=$searchfor&thumbnailmode=$thumbnailmode"); + $scrollthisfile = $thisfile."&sortmode=$sortmode&sortby=$sortby"; + + if ($sortby == 3 && $sortmode == "DESC") + { + $fnsort = ''.i18n("Filename / Description").''; + } else + { + if ($sortby == 3) + { + $fnsort = ''.i18n("Filename / Description").''; + } else + { + $fnsort = ''.i18n("Filename / Description").''; + } + } + + if ($sortby == 4 && $sortmode == "DESC") + { + $pathsort = ''.i18n("Path").''; + } else + { + if ($sortby == 4) + { + $pathsort = ''.i18n("Path").''; + } else + { + $pathsort = ''.i18n("Path").""; + } + } + + if ($sortby == 5 && $sortmode == "DESC") + { + $sizesort = ''.i18n("Size").''; + } else + { + if ($sortby == 5) + { + $sizesort = ''.i18n("Size").''; + } else + { + $sizesort = ''.i18n("Size").""; + } + } + + if ($sortby == 6 && $sortmode == "DESC") + { + $typesort = ''.i18n("Type").''; + } else + { + if ($sortby == 6) + { + $typesort = ''.i18n("Type").''; + } else + { + $typesort = ''.i18n("Type").""; + } + } + + if ($sortby == 7 && $sortmode == "DESC") + { + $srelevance = ''.i18n("Relevance").''; + } else + { + if ($sortby == 7) + { + $srelevance = ''.i18n("Relevance").''; + } else + { + $srelevance = ''.i18n("Relevance").""; + } + } + + $sToolsRow = ' + +
    '.i18n("Searched for:")." ".$searchfor.'
    +
    + + '; + + /* List wraps */ + + $sSpacedRow = ' + + '; + + $pagerwrap = ' + +
    -C-SCROLLRIGHT-
    +
    -C-PAGE-
    +
    -C-SCROLLLEFT-
    + '.i18n("Files per Page").' -C-FILESPERPAGE- +
    + + '; + + $startwrap = + ' + + '.$pagerwrap.$sSpacedRow.$sToolsRow.$sSpacedRow.' + + + + + + + + '; + $itemwrap = ' + + + + + + + + '; + $endwrap = $sSpacedRow.$sToolsRow.$sSpacedRow.$pagerwrap.'
    '.i18n("Preview").''.$fnsort.''.$pathsort.''.$sizesort.''.$typesort.''.$srelevance.'
    %s%s%s%s%s%s
    '; + + /* Object initializing */ + $page = new UI_Page; + $list2 = new UploadList($startwrap, $endwrap, $itemwrap); + + $uploads = new UploadCollection; + + /* Fetch data */ + $files = uplSearch($searchfor); + + $user = new User; + $user->loadUserByUserID($auth->auth["uid"]); + + if ($thumbnailmode == '') + { + $current_mode = $user->getUserProperty('upload_folder_thumbnailmode', md5('search_results_num_per_page')); + if ($current_mode != '') + { + $thumbnailmode = $current_mode; + } + else + { + $thumbnailmode = getEffectiveSetting('backend','thumbnailmode',100); + } + } + + switch ($thumbnailmode) + { + case 25: $numpics = 25; break; + case 50: $numpics = 50; break; + case 100:$numpics = 100; break; + case 200:$numpics = 200; break; + default: $thumbnailmode = 100; + $numpics = 15; + break; + } + + $user->setUserProperty('upload_folder_thumbnailmode', md5('search_results_num_per_page'), $thumbnailmode); + + $list2->setResultsPerPage($numpics); + + $list2->size = $thumbnailmode; + + $rownum = 0; + if (!is_array($files)) + { + $files = array (); + } + + arsort($files, SORT_NUMERIC); + + $count = 0; + $properties = new PropertyCollection; + + foreach ($files as $file => $rating) + { + + $slashpos = strrpos($file, "/"); + + if ($slashpos === false) + { + $myfilename = $file; + $mydirname = ""; + } else + { + $myfilename = substr($file, $slashpos +1); + $mydirname = substr($file, 0, $slashpos +1); + } + $path = $mydirname; + + $filename = $myfilename; + $dirname = $cfgClient[$client]["upl"]["path"].$mydirname; + + $uploads->select("idclient = '$client' AND dirname = '$mydirname' AND filename = '$filename'"); + + if ($item = $uploads->next()) + { + $filesize = $item->get("size"); + + if ($filesize == 0) + { + if (file_exists($dirname.$filename)) + { + $filesize = filesize($dirname.$filename); + } + + } + + $description = $item->get("description"); + } else + { + if (file_exists($dirname.$filename)) + { + $filesize = filesize($dirname.$filename); + } + } + + $dark = !$dark; + + $count ++; + + $medianame = $properties->getValue("upload", $mydirname.$filename, "file", "medianame"); + $medianotes = $properties->getValue("upload", $mydirname.$filename, "file", "medianotes"); + + $showfilename = $filename; + $bgColor = false; + + $list2->setData($rownum, $bgColor, $mydirname.$filename, $showfilename, $mydirname, $filesize, getFileExtension($filename), $rating / 10); + + $rownum ++; + } + + if ($rownum == 0) + { + $page->setContent(i18n("No files found")); + $page->render(); + return; + } + + if ($sortmode == "ASC") + { + $list2->sort($sortby, SORT_ASC); + } else + { + $list2->sort($sortby, SORT_DESC); + } + + if ($startpage < 1) + { + $startpage = 1; + } + + if ($startpage > $list2->getNumPages()) + { + $startpage = $list2->getNumPages(); + } + + $list2->setListStart($startpage); + + /* Create scroller */ + if ($list2->getCurrentPage() > 1) + { + $prevpage = ''.i18n("Previous Page").''; + } else { + $nextpage = ' '; + } + + if ($list2->getCurrentPage() < $list2->getNumPages()) + { + $nextpage = ''.i18n("Next Page").''; + } else { + $nextpage = ' '; + } + + if ($list2->getNumPages()>1) { + $num_pages = $list2->getNumPages(); + + $paging_form.=""; + $paging_form.=""; + } else { + $paging_form="1"; + } + + $curpage = $paging_form . " / ". $list2->getNumPages(); + + $scroller = $prevpage.$nextpage; + + $output = $list2->output(true); + + $output = str_replace("-C-SCROLLLEFT-", $prevpage, $output); + $output = str_replace("-C-SCROLLRIGHT-", $nextpage, $output); + $output = str_replace("-C-PAGE-", i18n("Page")." ".$curpage, $output); + $output = str_replace("-C-THUMBNAILMODE-", $thumbnailmode, $output); + + $form = new UI_Form("options"); + $form->setVar("contenido", $sess->id); + $form->setVar("area", $area); + $form->setVar("frame", $frame); + $form->setVar("searchfor", $searchfor); + $form->setVar("sortmode", $sortmode); + $form->setVar("sortby", $sortby); + $form->setVar("startpage", $startpage); + $form->setVar("appendparameters", $appendparameters); + + $select = new cHTMLSelectElement("thumbnailmode_input"); + + $values = Array( + 25 => "25", + 50 => "50", + 100 => "100", + 200 => "200"); + + foreach ($values as $key => $value) + { + $option = new cHTMLOptionElement($value, $key); + $select->addOptionElement($key, $option); + } + + $select->setDefault($thumbnailmode); + $select->setEvent('change', "document.options.thumbnailmode.value = this.value"); + + $topbar = $select->render().''; + + $output = str_replace("-C-FILESPERPAGE-", $topbar, $output); + + $script = ' + '; + + $script = str_replace('{SID}', $sess->id, $script); + $script = str_replace('{RENAME}', i18n("Enter new filename"), $script); + + $page->addScript("script", $script); + $markSubItem = markSubMenuItem(0, true); + + $page->addScript("mark", $markSubItem); + $page->addScript('iZoom', ''); + $page->addScript('style', ''); + $form->add("", $output); + $page->setContent($form->render()); + $page->render(); +} + +uplRender($searchfor, $sortby, $sortmode, $startpage, $thumbnailmode); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/include.upl_subnav.php b/branches/conlite20/conlite/includes/include.upl_subnav.php new file mode 100644 index 0000000..b5ce7e0 --- /dev/null +++ b/branches/conlite20/conlite/includes/include.upl_subnav.php @@ -0,0 +1,117 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-25 + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.upl_subnav.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +// Use remembered path from upl_last_path (from session) +if (!isset($_GET['path']) && $sess->is_registered("upl_last_path")) +{ + $_GET['path'] = $upl_last_path; +} + +if ( isset($_GET['path']) ) +{ + $path = $_GET['path']; + $area = $_GET['area']; + + $nav = new Contenido_Navigation; + + $sql = "SELECT + idarea + FROM + ".$cfg["tab"]["area"]." AS a + WHERE + a.name = '".Contenido_Security::escapeDB($area, $db)."' OR + a.parent_id = '".Contenido_Security::escapeDB($area, $db)."' + ORDER BY + idarea"; + + $db->query($sql); + + $in_str = ""; + + while ( $db->next_record() ) { + $in_str .= $db->f('idarea') . ','; + } + + $len = strlen($in_str)-1; + $in_str = substr($in_str, 0, $len); + $in_str = '('.$in_str.')'; + + $sql = "SELECT + b.location AS location, + a.name AS name + FROM + ".$cfg["tab"]["area"]." AS a, + ".$cfg["tab"]["nav_sub"]." AS b + WHERE + b.idarea IN ".$in_str." AND + b.idarea = a.idarea AND + b.level = 1 AND + b.online = 1 + ORDER BY + b.idnavs"; + + $db->query($sql); + + while ( $db->next_record() ) + { + /* Extract names from the XML document. */ + $caption = $nav->getName($db->f("location")); + + $tmp_area = $db->f("name"); + + if ($perm->have_perm_area_action($tmp_area)) + { + if ($tmp_area != "upl_edit") + { + # Set template data + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", ''.$caption.''); + $tpl->next(); + } + } + } + + $tpl->set('s', 'COLSPAN', ($tpl->dyn_cnt * 2) + 2); + + # Generate the third + # navigation layer + $tpl->generate($cfg["path"]["templates"] . $cfg["templates"]["subnav"]); +} else { + include ($cfg["path"]["contenido"].$cfg["path"]["templates"] . $cfg["templates"]["right_top_blank"]); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/index.php b/branches/conlite20/conlite/includes/index.php new file mode 100644 index 0000000..ef8b776 --- /dev/null +++ b/branches/conlite20/conlite/includes/index.php @@ -0,0 +1,4 @@ + diff --git a/branches/conlite20/conlite/includes/main.login.php b/branches/conlite20/conlite/includes/main.login.php new file mode 100644 index 0000000..a161ccc --- /dev/null +++ b/branches/conlite20/conlite/includes/main.login.php @@ -0,0 +1,291 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-21 + * modified 2008-06-26, Dominik Ziegler, update notifier class added + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2009-12-14, Dominik Ziegler, use User::getRealname() for user name output and provide username fallback + * modified 2010-05-20, Oliver Lohkemper, add param true for get active admins + * modified 2011-01-28, Dominik Ziegler, added missing notice in backend home when no clients are available [#CON-379] + * + * $Id: main.login.php 309 2014-05-19 11:21:16Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude('pear', 'XML/Parser.php'); +cInclude('pear', 'XML/RSS.php'); + +if(!isset($oTpl) || !is_object($oTpl)) { + $oTpl = new Template(); +} +$oTpl->reset(); + +if ($saveLoginTime == true) { + $sess->register("saveLoginTime"); + $saveLoginTime= 0; + + $vuser= new User(); + + $vuser->loadUserByUserID($auth->auth["uid"]); + + $lastTime= $vuser->getUserProperty("system", "currentlogintime"); + $timestamp= date("Y-m-d H:i:s"); + $vuser->setUserProperty("system", "currentlogintime", $timestamp); + $vuser->setUserProperty("system", "lastlogintime", $lastTime); + +} + +$vuser= new User(); +$vuser->loadUserByUserID($auth->auth["uid"]); +$lastlogin= $vuser->getUserProperty("system", "lastlogintime"); + +if ($lastlogin == "") { + $lastlogin= i18n("No Login Information available."); +} + +$aNotifications = array(); +// notification for requested password +if($vuser->getField('using_pw_request') == 1) { + //$sPwNoti = $notification->returnNotification("warning", i18n("You're logged in with a temporary password. Please change your password.")); + $aNotifications[] = i18n("You're logged in with a temporary password. Please change your password."); +} + +// Check, if setup folder is still available +if (file_exists(dirname(dirname(dirname(__FILE__)))."/setup")) { + $aNotifications[] = i18n("The setup directory still exists. Please remove the setup directory before you continue."); +} + +// Check, if sysadmin and/or admin accounts are still using well-known default passwords +$sDate = date('Y-m-d'); +$sSQL = "SELECT * FROM ".$cfg["tab"]["phplib_auth_user_md5"]." + WHERE (username = 'sysadmin' AND password = '48a365b4ce1e322a55ae9017f3daf0c0' + AND (valid_from <= '".Contenido_Security::escapeDB($sDate, $db)."' OR valid_from = '0000-00-00' OR valid_from = '1000-01-01' OR valid_from is NULL) AND + (valid_to >= '".Contenido_Security::escapeDB($sDate, $db)."' OR valid_to = '0000-00-00' OR valid_to is NULL)) + OR (username = 'admin' AND password = '21232f297a57a5a743894a0e4a801fc3' + AND (valid_from <= '".Contenido_Security::escapeDB($sDate, $db)."' OR valid_from = '0000-00-00' OR valid_from = '1000-01-01' OR valid_from is NULL) AND + (valid_to >= '".Contenido_Security::escapeDB($sDate, $db)."' OR valid_to = '0000-00-00' OR valid_to = '1000-01-01' OR valid_to is NULL)) + "; +$db->query($sSQL); + +if ($db->num_rows() > 0) { + $aNotifications[] = i18n("The sysadmin and/or the admin account still contains a well-known default password. Please change immediately."); +} + +if (count($aNotifications) > 0) { + $oNotification = new Contenido_Notification(); + $sNotification = $oNotification->messageBox("warning", implode("
    ", $aNotifications), 1). "
    "; +} else { + $sNotification = ""; +} + +$oTpl->set('s', 'NOTIFICATION', $sNotification); + +$userid = $auth->auth["uid"]; + +$oTpl->set('s', 'WELCOME', "" . i18n("Welcome") . " " . $vuser->getRealname($userid, true) . "."); +$oTpl->set('s', 'LASTLOGIN', i18n("Last login") . ": " . $lastlogin); + +$clients= $classclient->getAccessibleClients(); + +$cApiClient= new cApiClient; +$warnings= array (); + +if (count($clients) > 1) { + $clientform= '
    '; + $select= new cHTMLSelectElement("changeclient"); + $choices= array (); + foreach ($clients as $key => $v_client) { + if ($perm->hasClientPermission($key)) { + + $cApiClient->loadByPrimaryKey($key); + if ($cApiClient->hasLanguages()) { + $choices[$key]= $v_client['name'] . " (" . $key . ')'; + } else { + $warnings[]= sprintf(i18n("Client %s (%s) has no languages"), $v_client['name'], $key); + } + + } + } + + $select->autoFill($choices); + $select->setDefault($client); + + $clientselect= $select->render(); + + $oTpl->set('s', 'CLIENTFORM', $clientform); + $oTpl->set('s', 'CLIENTFORMCLOSE', "
    "); + $oTpl->set('s', 'CLIENTSDROPDOWN', $clientselect); + + if ($perm->have_perm() && count($warnings) > 0) { + $oTpl->set('s', 'WARNINGS', "
    " . $notification->messageBox("warning", implode("
    ", $warnings), 0)); + } else { + $oTpl->set('s', 'WARNINGS', ''); + } + $oTpl->set('s', 'OKBUTTON', ''); +} else { + $oTpl->set('s', 'OKBUTTON', ''); + $sClientForm = ''; + if ( count($clients) == 0 ) { + $sClientForm = i18n('No clients available!'); + } + $oTpl->set('s', 'CLIENTFORM', $sClientForm); + $oTpl->set('s', 'CLIENTFORMCLOSE', ''); + + + foreach ($clients as $key => $v_client) { + if ($perm->hasClientPermission($key)) { + $cApiClient->loadByPrimaryKey($key); + if ($cApiClient->hasLanguages()) { + $name= $v_client['name'] . " (" . $key . ')'; + } else { + $warnings[]= sprintf(i18n("Client %s (%s) has no languages"), $v_client['name'], $key); + } + } + } + + if ($perm->have_perm() && count($warnings) > 0) { + $oTpl->set('s', 'WARNINGS', "
    " . $notification->messageBox("warning", implode("
    ", $warnings), 0)); + } else { + $oTpl->set('s', 'WARNINGS', ''); + } + + $oTpl->set('s', 'CLIENTSDROPDOWN', $name); +} + +$props= new PropertyCollection; +$props->select("itemtype = 'idcommunication' AND idclient='$client' AND type = 'todo' AND name = 'status' AND value != 'done'"); + +$todoitems= array (); + +while ($prop= $props->next()) { + $todoitems[]= $prop->get("itemid"); +} + +if (count($todoitems) > 0) { + $in= "idcommunication IN (" . implode(",", $todoitems) . ")"; +} else { + $in= 1; +} +$todoitems= new TODOCollection; +$recipient= $auth->auth["uid"]; +$todoitems->select("recipient = '$recipient' AND idclient='$client' AND $in"); + +while ($todo= $todoitems->next()) { + if ($todo->getProperty("todo", "status") != "done") { + $todoitems++; + } +} + +$sTaskTranslation = ''; +if ($todoitems->count() == 1) { + $sTaskTranslation = i18n("Reminder list: %d Task open"); +} else { + $sTaskTranslation = i18n("Reminder list: %d Tasks open"); +} + +$mycontenido_overview= '' . i18n("Overview") . ''; +$mycontenido_lastarticles= '' . i18n("Recently edited articles") . ''; +$mycontenido_tasks= '' . sprintf($sTaskTranslation, $todoitems->count()) . ''; +$mycontenido_settings= '' . i18n("Settings") . ''; + +$oTpl->set('s', 'MYCONTENIDO_OVERVIEW', $mycontenido_overview); +$oTpl->set('s', 'MYCONTENIDO_LASTARTICLES', $mycontenido_lastarticles); +$oTpl->set('s', 'MYCONTENIDO_TASKS', $mycontenido_tasks); +$oTpl->set('s', 'MYCONTENIDO_SETTINGS', $mycontenido_settings); +$admins= $classuser->getSystemAdmins(true); + +$sAdminTemplate = '
  • %s, %s
  • '; + +$sAdminName= ""; +$sAdminEmail = ""; +$sOutputAdmin = ""; + + +foreach ($admins as $key => $value) { + if ($value["email"] != "") { + $sAdminEmail= '' . $value["email"] . ''; + $sAdminName= $value['realname']; + $sOutputAdmin .= sprintf($sAdminTemplate, $sAdminName, $sAdminEmail); + } +} + +$oTpl->set('s', 'ADMIN_EMAIL', $sOutputAdmin); + +$oTpl->set('s', 'SYMBOLHELP', '' . i18n("Symbol help") . ''); + +if (isset($cfg["contenido"]["handbook_path"]) && file_exists($cfg["contenido"]["handbook_path"])) { + $oTpl->set('s', 'CONTENIDOMANUAL', '' . i18n("Contenido Manual") . ''); +} else { + $oTpl->set('s', 'CONTENIDOMANUAL', ''); +} + +// For display current online user in Contenido-Backend +$aMemberList= array (); +$oActiveUsers= new ActiveUsers($db, $cfg, $auth); +$iNumberOfUsers = 0; + +// Start() +$oActiveUsers->startUsersTracking(); + +//Currently User Online +$iNumberOfUsers = $oActiveUsers->getNumberOfUsers(); + +// Find all User who is online +$aMemberList= $oActiveUsers->findAllUser(); + +// Template for display current user +$sTemplate = ""; +$sOutput = ""; +$sTemplate= '
  • %s, %s
  • '; + +foreach ($aMemberList as $key) { + $sRealName= $key['realname']; + $aPerms['0']= $key['perms']; + $sOutput .= sprintf($sTemplate, $sRealName, $aPerms['0']); +} + +// set template welcome +$oTpl->set('s', 'USER_ONLINE', $sOutput); +$oTpl->set('s', 'Anzahl', $iNumberOfUsers); + +// rss feed +if($perm->isSysadmin($vuser) && isset($cfg["backend"]["newsfeed"]) && $cfg["backend"]["newsfeed"] == true){ + $newsfeed = 'some news'; + $oTpl->set('s', 'CONTENIDO_NEWS', $newsfeed); +} +else{ + $oTpl->set('s', 'CONTENIDO_NEWS', ''); +} + +// check for new updates +$oUpdateNotifier = new Contenido_UpdateNotifier($cfg, $vuser, $perm, $sess, $belang); +$sUpdateNotifierOutput = $oUpdateNotifier->displayOutput(); +$oTpl->set('s', 'UPDATENOTIFICATION', $sUpdateNotifierOutput); + +$oTpl->generate($cfg["path"]["templates"] . $cfg["templates"]["welcome"]); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/pseudo-cron.inc.php b/branches/conlite20/conlite/includes/pseudo-cron.inc.php new file mode 100644 index 0000000..c0a0b3b --- /dev/null +++ b/branches/conlite20/conlite/includes/pseudo-cron.inc.php @@ -0,0 +1,511 @@ +Configuration:"; + echo "\nPC_cronTab = " . $PC_cronTab; + echo "\nPC_writeDir = " . $PC_writeDir; + echo "\nPC_jobDir = " . $PC_jobDir; + echo "\nPC_reqDir = " . $PC_reqDir; + echo "\nPC_useLog = " . $PC_useLog; + echo "\n"; +} + +global $bJobRunned; + +$bJobRunned = false; + +chdir($PC_jobDir); +$PC_jobs = parseCronFile($PC_cronTab, $PC_debug); + +for ($i = 0; $i < count($PC_jobs); $i++) { + $bJobRunned = true; + runJob($PC_jobs[$i], $PC_jobDir, $PC_writeDir, $PC_useLog, $PC_debug); +} + +$PC_jobs = parseCronFile($PC_localCronTab, $PC_debug); +for ($i = 0; $i < count($PC_jobs); $i++) { + $bJobRunned = true; + runJob($PC_jobs[$i], $PC_jobDir, $PC_writeDir, $PC_useLog, $PC_debug); +} +chdir($PC_reqDir); + +if ($PC_debug) + echo "\n
    "; + +function logMessage($msg, $PC_writeDir, $PC_useLog, $PC_debug) { + $oCronLog = new cCronJob(); + $oCronLog->useCronLog($PC_useLog); + $oCronLog->logMessages($msg); + unset($oCronLog); + + if ($PC_debug) { + echo $msg; + } +} + +function lTrimZeros($number) { + while ($number[0] == '0') { + $number = substr($number, 1); + } + return (is_numeric($number))?$number:0; +} + +function parseElement($element, &$targetArray, $numberOfElements) { + + $subelements = explode(",", $element); + for ($i = 0; $i < $numberOfElements; $i++) { + $targetArray[$i] = $subelements[0] == "*"; + } + + for ($i = 0; $i < count($subelements); $i++) { + if (preg_match("~^(\\*|([0-9]{1,2})(-([0-9]{1,2}))?)(/([0-9]{1,2}))?$~", $subelements[$i], $matches)) { + if ($matches[1] == "*") { + $matches[2] = 0; // from + $matches[4] = $numberOfElements; //to + } elseif (!array_key_exists(4, $matches) || $matches[4] == "") { + $matches[4] = $matches[2]; + } + if (array_key_exists(5, $matches)) { + if ($matches[5][0] != "/") { + $matches[6] = 1; // step + } + } else { + $matches[6] = 1; // step + } + for ($j = lTrimZeros($matches[2]); $j <= lTrimZeros($matches[4]); $j += lTrimZeros($matches[6])) { + $targetArray[$j] = TRUE; + } + } + } +} + +function decDate(&$dateArr, $amount, $unit, $PC_debug) { + + if ($PC_debug) + echo sprintf("Decreasing from %02d.%02d. %02d:%02d by %d %6s ", $dateArr[mday], $dateArr[mon], $dateArr[hours], $dateArr[minutes], $amount, $unit); + if ($unit == "mday") { + $dateArr["hours"] = 23; + $dateArr["minutes"] = 59; + $dateArr["seconds"] = 59; + $dateArr["mday"] -= $amount; + $dateArr["wday"] -= $amount % 7; + if ($dateArr["wday"] < 0) { + $dateArr["wday"] += 7; + } + if ($dateArr["mday"] < 1) { + $dateArr["mon"] --; + switch ($dateArr["mon"]) { + case 0: + $dateArr["mon"] = 12; + $dateArr["year"] --; + // fall through + case 1: + case 3: + case 5: + case 7: + case 8: + case 10: + case 12: + $dateArr["mday"] = 31; + break; + case 4: + case 6: + case 9: + case 11: + $dateArr["mday"] = 30; + break; + case 2: + $dateArr["mday"] = 28; + break; + } + } + } elseif ($unit == "hour") { + if ($dateArr["hours"] == 0) { + decDate($dateArr, 1, "mday", $PC_debug); + } else { + $dateArr["minutes"] = 59; + $dateArr["seconds"] = 59; + $dateArr["hours"] --; + } + } elseif ($unit == "minute") { + if ($dateArr["minutes"] == 0) { + decDate($dateArr, 1, "hour", $PC_debug); + } else { + $dateArr["seconds"] = 59; + $dateArr["minutes"] --; + } + } + if ($PC_debug) + echo sprintf("to %02d.%02d. %02d:%02d\n", $dateArr[mday], $dateArr[mon], $dateArr[hours], $dateArr[minutes]); +} + +function getLastScheduledRunTime($job, $PC_debug) { + + $dateArr = getdate(); + $minutesBack = 0; + while ( + $minutesBack < 525600 AND ( !$job[PC_MINUTE][$dateArr["minutes"]] OR ! $job[PC_HOUR][$dateArr["hours"]] OR ( !$job[PC_DOM][$dateArr["mday"]] OR ! $job[PC_DOW][$dateArr["wday"]]) OR ! $job[PC_MONTH][$dateArr["mon"]]) + ) { + if (!$job[PC_DOM][$dateArr["mday"]] OR ! $job[PC_DOW][$dateArr["wday"]]) { + decDate($dateArr, 1, "mday", $PC_debug); + $minutesBack += 1440; + continue; + } + if (!$job[PC_HOUR][$dateArr["hours"]]) { + decDate($dateArr, 1, "hour", $PC_debug); + $minutesBack += 60; + continue; + } + if (!$job[PC_MINUTE][$dateArr["minutes"]]) { + decDate($dateArr, 1, "minute", $PC_debug); + $minutesBack++; + continue; + } + } + + if ($PC_debug) + print_r($dateArr); + + return mktime($dateArr["hours"], $dateArr["minutes"], 0, $dateArr["mon"], $dateArr["mday"], $dateArr["year"]); +} + +function getJobFileName($jobname, $PC_writeDir) { + + $jobfile = $PC_writeDir . urlencode($jobname) . ".job"; + return $jobfile; +} + +function getLastActialRunTime($jobname, $PC_writeDir) { + + $jobfile = getJobFileName($jobname, $PC_writeDir); + if (file_exists($jobfile)) { + $file = fopen($jobfile, "rb"); + $lastRun = fgets($file, 100); + fclose($file); + if (is_numeric($lastRun)) { + return $lastRun; + } + } + return 0; +} + +function markLastRun($jobname, $lastRun, $PC_writeDir) { + + $jobfile = getJobFileName($jobname, $PC_writeDir); + + if ($file = @fopen($jobfile, "w")) { + fputs($file, $lastRun); + fclose($file); + } else { + //echo "Could not write into file $jobfile - permission denied."; + } +} + +function runJob($job, $PC_jobDir, $PC_writeDir, $PC_useLog, $PC_debug = false) { + global $cfg, $sess, $PC_logDir; + if (!is_writable($PC_writeDir)) { + return false; + } + $extjob = Array(); + $jobfile = getJobFileName($job[PC_CMD], $PC_writeDir); + parseElement($job[PC_MINUTE], $extjob[PC_MINUTE], 60); + parseElement($job[PC_HOUR], $extjob[PC_HOUR], 24); + parseElement($job[PC_DOM], $extjob[PC_DOM], 31); + parseElement($job[PC_MONTH], $extjob[PC_MONTH], 12); + parseElement($job[PC_DOW], $extjob[PC_DOW], 7); + + $lastActual = getLastActialRunTime($job[PC_CMD], $PC_writeDir); + $lastScheduled = getLastScheduledRunTime($extjob, $PC_debug); + + //echo "LastSch: " . $lastScheduled . " ::: LastAct: " . $lastActual . "\n"; + + if ($lastScheduled > $lastActual) { + logMessage("Running " . $job[PC_CRONLINE], $PC_writeDir, $PC_useLog, $PC_debug); + logMessage(" Last run: " . date("r", $lastActual), $PC_writeDir, $PC_useLog, $PC_debug); + logMessage(" Last scheduled: " . date("r", $lastScheduled), $PC_writeDir, $PC_useLog, $PC_debug); + markLastRun($job[PC_CMD], $lastScheduled, $PC_writeDir); + + if ($PC_debug) { + echo getcwd(); + include($PC_jobDir . $job[PC_CMD]); // display errors only when debugging + } else { + if (is_object($sess)) { + $sess->freeze(); + } + @include($PC_jobDir . $job[PC_CMD]); // any error messages are supressed + if (is_object($sess)) { + $sess->thaw(); + } + } + logMessage("Completed " . $job[PC_CRONLINE], $PC_writeDir, $PC_useLog, $PC_debug); + return true; + } else { + if ($PC_debug) { + logMessage("Skipping " . $job[PC_CRONLINE], $PC_writeDir, $PC_useLog, $PC_debug); + logMessage(" Last run: " . date("r", $lastActual), $PC_writeDir, $PC_useLog, $PC_debug); + logMessage(" Last scheduled: " . date("r", $lastScheduled), $PC_writeDir, $PC_useLog, $PC_debug); + logMessage("Completed " . $job[PC_CRONLINE], $PC_writeDir, $PC_useLog, $PC_debug); + } + return false; + } +} + +function parseCronFile($PC_cronTabFile, $PC_debug) { + + $file = @file($PC_cronTabFile); + $job = Array(); + $jobs = Array(); + if(!is_countable($file)) { + return $jobs; + } + for ($i = 0; $i < count($file); $i++) { + if ($file[$i][0] != '#') { +// old regex, without dow abbreviations: +// if (preg_match("~^([-0-9,/*]+)\\s+([-0-9,/*]+)\\s+([-0-9,/*]+)\\s+([-0-9,/*]+)\\s+([-0-7,/*]+|Sun|Mon|Tue|Wen|Thu|Fri|Sat)\\s+([^#]*)(#.*)?$~i",$file[$i],$job)) { + if (preg_match("~^([-0-9,/*]+)\\s+([-0-9,/*]+)\\s+([-0-9,/*]+)\\s+([-0-9,/*]+)\\s+([-0-7,/*]+|(-|/|Sun|Mon|Tue|Wed|Thu|Fri|Sat)+)\\s+([^#]*)(#.*)?$~i", $file[$i], $job)) { + $jobNumber = count($jobs); + $jobs[$jobNumber] = $job; + if ($jobs[$jobNumber][PC_DOW][0] != '*' AND ! is_numeric($jobs[$jobNumber][PC_DOW])) { + $jobs[$jobNumber][PC_DOW] = str_replace( + Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"), Array(0, 1, 2, 3, 4, 5, 6), $jobs[$jobNumber][PC_DOW]); + } + $jobs[$jobNumber][PC_CMD] = trim($job[PC_CMD]); + $jobs[$jobNumber][PC_CRONLINE] = $file[$i]; + } + } + } + if ($PC_debug) { + var_dump($jobs); + } + return $jobs; +} + +class cCronJob { + + protected $_sCronTabFileName = "crontab.txt"; + protected $_sCronTabLocalFileName = "crontab.local.txt"; + protected $_sLogFileName = "pseudo-cron.log"; + protected $_sJobDir; + protected $_sCronDir; + protected $_sLogDir; + private $_bUseLog; + private $_iMaxLogFileSize = 1024; + + public function __construct() { + $this->_sJobDir = cRegistry::getConfigValue('path', 'conlite') . cRegistry::getConfigValue('path', 'cronjobs'); + $this->_sCronDir = cRegistry::getConfigValue('path', 'conlite_cronlog'); + $this->_sLogDir = cRegistry::getConfigValue('path', 'conlite_logs'); + } + + public function runJob() { + + } + + public function useCronLog($bUse = TRUE) { + $this->_bUseLog = boolval($bUse); + } + + public function logMessages($sMsg) { + if (!$this->_bUseLog) { + return; + } + if (is_dir($this->_sLogDir) && is_writable($this->_sLogDir)) { + $logfile = $this->_sLogDir . $this->_sLogFileName; + } else if (is_dir($this->_sCronDir) && is_writable($this->_sCronDir)) { + $logfile = $this->_sCronDir . $this->_sLogFileName; + } else { + cWarning(__FILE__, __LINE__, "PseudoCron: Cannot write cronlog file!"); + return; + } + + if ($sMsg[strlen($sMsg) - 1] != "\n") { + $sMsg .= "\r\n"; + } + $this->_rotateLogFiles($logfile); + file_put_contents($logfile, $sMsg, FILE_APPEND); + } + + private function _rotateLogFiles($sLogFile) { + if (file_exists($sLogFile) && + filesize($sLogFile) >= $this->_iMaxLogFileSize * 1024) { + // rotate + $path_info = pathinfo($sLogFile); + $base_directory = $path_info['dirname']; + $base_name = $path_info['basename']; + $num_map = array(); + foreach (new DirectoryIterator($base_directory) as $fInfo) { + if ($fInfo->isDot() || !$fInfo->isFile()) { + continue; + } + if (preg_match('/^' . $base_name . '\.?([0-9]*)$/', $fInfo->getFilename(), $matches)) { + $num = $matches[1]; + $file2move = $fInfo->getFilename(); + if ($num == '') { + $num = 0; + } + $num_map[$num] = $file2move; + } + } + krsort($num_map); + foreach ($num_map as $num => $file2move) { + $targetN = $num + 1; + if($targetN > 10) { + unlink($base_directory . DIRECTORY_SEPARATOR . $file2move); + continue; + } + rename($base_directory . DIRECTORY_SEPARATOR . $file2move, $base_directory . DIRECTORY_SEPARATOR .$base_name . '.' . $targetN); + } + } + } +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/rights.inc.php b/branches/conlite20/conlite/includes/rights.inc.php new file mode 100644 index 0000000..9c58e58 --- /dev/null +++ b/branches/conlite20/conlite/includes/rights.inc.php @@ -0,0 +1,374 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2008-07-03, Timo Trautmann, moved inline html to template + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: rights.inc.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +function saverights() { + global $rights_list, $rights_list_old, $db; + global $cfg, $userid, $rights_client, $rights_lang; + global $perm, $sess, $notification; + + //if no checkbox is checked + if (!is_array($rights_list)) { + $rights_list = array (); + } + + //search all checks which are not in the new Rights_list for deleting + $arraydel = array_diff(array_keys($rights_list_old), array_keys($rights_list)); + //search all checks which are not in the Rights_list_old for saving + $arraysave = array_diff(array_keys($rights_list), array_keys($rights_list_old)); + + if (is_array($arraydel)) { + + foreach ($arraydel as $value) { + + $data = explode("|", $value); + $data[0] = $perm->getIDForArea($data[0]); + $data[1] = $perm->getIDForAction($data[1]); + + $sql = "DELETE FROM ".$cfg["tab"]["rights"]." WHERE user_id='".Contenido_Security::escapeDB($userid, $db)."' AND idclient='".Contenido_Security::toInteger($rights_client)."' AND idlang='".Contenido_Security::toInteger($rights_lang)."' AND idarea='".Contenido_Security::toInteger($data[0])."' AND idcat='".Contenido_Security::toInteger($data[2])."' AND idaction='".Contenido_Security::toInteger($data[1])."' AND type=0"; + $db->query($sql); + } + } + + unset($data); + + //search for all mentioned checkboxes + if (is_array($arraysave)) { + foreach ($arraysave as $value) { + //explodes the key it consits areait+actionid+itemid + $data = explode("|", $value); + + // Since areas are stored in a numeric form in the rights table, we have + // to convert them from strings into numbers + + $data[0] = $perm->getIDForArea($data[0]); + $data[1] = $perm->getIDForAction($data[1]); + + if (!isset ($data[1])) { + $data[1] = 0; + } + // Insert new right + $sql = "INSERT INTO ".$cfg["tab"]["rights"]." + (idright, user_id,idarea,idaction,idcat,idclient,idlang,type) + VALUES ('".$db->nextid($cfg["tab"]["rights"])."', '".Contenido_Security::escapeDB($userid, $db)."','".Contenido_Security::toInteger($data[0])."','".Contenido_Security::toInteger($data[1])."','".Contenido_Security::toInteger($data[2])."','".Contenido_Security::toInteger($rights_client)."','".Contenido_Security::toInteger($rights_lang)."',0)"; + $db->query($sql); + } + } + + $rights_list_old = $rights_list; + //$notification->displayNotification("info", i18n("Changes saved"),0); +} + +function saverightsarea() +{ + global $db, $cfg,$userid,$rights_client,$rights_lang,$rights_admin,$rights_sysadmin,$rights_perms,$rights_list; + + if(!isset($rights_perms)){ + //search for the permissions of this user + $sql="SELECT perms FROM ".$cfg["tab"]["phplib_auth_user_md5"]." WHERE user_id='".Contenido_Security::escapeDB($userid, $db)."'"; + $db->query($sql); + $db->next_record(); + $rights_perms=$db->f("perms"); + } + + //if there are no permissions, delete permissions for lan and client + if(!is_array($rights_list)){ + $rights_perms=preg_replace("/,+client\[$rights_client\]/","",$rights_perms); + $rights_perms=preg_replace("/,+lang\[$rights_lang\]/","",$rights_perms); + }else{ + if(!strstr($rights_perms,"client[$rights_client]")) + $rights_perms.=",client[$rights_client]"; + if(!strstr($rights_perms,"lang[$rights_lang]")) + $rights_perms.=",lang[$rights_lang]"; + } + + //if admin is checked + if($rights_admin==1){ + //if admin is not set + if(!strstr($rights_perms,"admin[$rights_client]")) + $rights_perms.=",admin[$rights_client]"; + }else{ + //cut admin from the string + $rights_perms=preg_replace("/,*admin\[$rights_client\]/","",$rights_perms); + } + + //if sysadmin is checked + if($rights_sysadmin==1){ + //if sysadmin is not set + if(!strstr($rights_perms,"sysadmin")) + $rights_perms.=",sysadmin"; + }else{ + //cat sysadmin from string + $rights_perms=preg_replace("/,*sysadmin/","",$rights_perms); + } + + + //cut ',' in front of the string + $rights_perms=preg_replace("/^,/","",$rights_perms); + + //update table + $sql="UPDATE ".$cfg["tab"]["phplib_auth_user_md5"]." SET perms='".Contenido_Security::escapeDB($rights_perms, $db)."' WHERE user_id='".Contenido_Security::escapeDB($userid, $db)."'"; + + $db->query($sql); + + //save the other rights + saverights(); +} + +if (!is_object($oTpl)) { + $oTpl = new Template(); +} +$oTpl->reset(); + +if(!is_object($db2)) +$db2 = new DB_ConLite; + +if(!isset($rights_client)){ + $rights_client=$client; + $rights_lang=$lang; +} + +//set new right_list (=all possible rights) +if(!is_array($right_list)){ + # modified 2007-08-03, H. Librenz - this breaks, i do not know really know why, the session if storage container for session is other than database! + # PS: this is a hard, damn shit area of code -- ARRRGGGHHHH!!!!!!! + //register these list fore following sites +// $sess->register("right_list"); + + $plugxml=new XML_Doc(); + + //select all rights , actions an theeir locations without area login + $sql="SELECT A.idarea, A.parent_id, B.location,A.name FROM ".$cfg["tab"]["area"]." as A LEFT JOIN ".$cfg["tab"]["nav_sub"]." as B ON A.idarea = B.idarea WHERE A.name!='login' AND A.relevant='1' AND A.online='1' GROUP BY A.name ORDER BY A.idarea"; + $db->query($sql); + + while($db->next_record()) + { + if($db->f("parent_id")=="0"){ + $right_list[$db->f("name")][$db->f("name")]["perm"]=$db->f("name"); + + $right_list[$db->f("name")][$db->f("name")]["location"]=$db->f('location'); + }else{ + $right_list[$db->f("parent_id")][$db->f("name")]["perm"]=$db->f("name"); + $right_list[$db->f("parent_id")][$db->f("name")]["location"] = $db->f('location'); + } + + $sql="SELECT * FROM ".$cfg["tab"]["actions"]." WHERE idarea='".Contenido_Security::toInteger($db->f("idarea"))."' AND relevant='1'"; + $db2->query($sql); + while($db2->next_record()) + { + if($db->f("parent_id")=="0"){ + $right_list[$db->f("name")][$db->f("name")]["action"][]=$db2->f("name"); + }else{ + $right_list[$db->f("parent_id")][$db->f("name")]["action"][]=$db2->f("name"); + } + } + } +} + +$oTpl->set('s', 'SESS_ID', $sess->id); +$oTpl->set('s', 'ACTION_URL', $sess->url("main.php")); +// type id for user +$oTpl->set('s', 'TYPE_ID', 'userid'); +$oTpl->set('s', 'USER_ID', $userid); +$oTpl->set('s', 'AREA', $area); +$oTpl->set('s', 'TABLE_BORDER', $cfg["color"]["table_border"]); +$oTpl->set('s', 'TABLE_BGCOLOR', $cfg["color"]["table_dark"]); + +if(!isset($actionarea)){ + $actionarea="area"; +} + +$muser = new User; +$muser->loadUserByUserID($userid); + +$userperms = $muser->getField("perms"); + +ob_start(); + +$oTpl->set('s', 'RIGHTS_PERMS', $rights_perms); + + +//selectbox for clients +$oHtmlSelect = new cHTMLSelectElement ('rights_clientslang', "", "rights_clientslang"); + + $clientclass = new Client; + $clientList = $clientclass->getAccessibleClients(); + + $firstsel = false; + + $i = 0; + foreach ($clientList as $key=>$value) { + + $sql="SELECT * FROM ".$cfg["tab"]["lang"]." as A, ".$cfg["tab"]["clients_lang"]." as B WHERE B.idclient='".Contenido_Security::toInteger($key)."' AND A.idlang=B.idlang"; + $db->query($sql); + + while($db->next_record()) + { + if((strpos($userperms, "client[$key]") !== false) && + (strpos($userperms, "lang[".$db->f("idlang")."]") !== false) + && ($perm->have_perm("lang[".$db->f("idlang")."]"))){ + + if ($firstsel == false) + { + $firstsel = true; + $firstclientslang = $db->f("idclientslang"); + } + + if ($rights_clientslang == $db->f("idclientslang")) { + $oHtmlSelectOption = new cHTMLOptionElement($value["name"] . " -> ".$db->f("name"), $db->f("idclientslang"), true); + $oHtmlSelect->addOptionElement($i, $oHtmlSelectOption); + $i++; + + if(!isset($rights_client)) + { + $firstclientslang = $db->f("idclientslang"); + } + } else { + $oHtmlSelectOption = new cHTMLOptionElement($value["name"] . " -> ".$db->f("name"), $db->f("idclientslang"), false); + $oHtmlSelect->addOptionElement($i, $oHtmlSelectOption); + $i++; + } + } + } + } + + $oTpl->set('s', 'INPUT_SELECT_CLIENT', $oHtmlSelect->render()); + + if ($area == 'user_content') { + #filter for displaying rights + $oHtmlSelect = new cHTMLSelectElement ('filter_rights', '', "filter_rights"); + $oHtmlSelectOption = new cHTMLOptionElement('--- '.i18n("All").' ---', '', false); + $oHtmlSelect->addOptionElement(0, $oHtmlSelectOption); + $oHtmlSelectOption = new cHTMLOptionElement(i18n("Article rights"), 'article', false); + $oHtmlSelect->addOptionElement(1, $oHtmlSelectOption); + $oHtmlSelectOption = new cHTMLOptionElement(i18n("Category rights"), 'category', false); + $oHtmlSelect->addOptionElement(2, $oHtmlSelectOption); + $oHtmlSelectOption = new cHTMLOptionElement(i18n("Template rights"), 'template', false); + $oHtmlSelect->addOptionElement(3, $oHtmlSelectOption); + $oHtmlSelectOption = new cHTMLOptionElement(i18n("Plugin/Other rights"), 'other', false); + $oHtmlSelect->addOptionElement(4, $oHtmlSelectOption); + $oHtmlSelect->setEvent('change', "document.rightsform.submit();"); + $oHtmlSelect->setDefault($_POST['filter_rights']); + + #set global array which defines rights to display + $aArticleRights = array('con_syncarticle', 'con_lock', 'con_deleteart', 'con_makeonline', 'con_makestart', 'con_duplicate', 'con_editart', 'con_newart', 'con_edit'); + $aCategoryRights = array('con_synccat', 'con_makecatonline', 'con_makepublic'); + $aTempalteRights = array('con_changetemplate', 'con_tplcfg_edit'); + + $aViewRights = array(); + $bExclusive = false; + if (isset($_POST['filter_rights'])) { + switch($_POST['filter_rights']) { + case 'article': + $aViewRights = $aArticleRights; + break; + case 'category': + $aViewRights = $aCategoryRights; + break; + case 'template': + $aViewRights = $aTempalteRights; + break; + case 'other': + $aViewRights = array_merge($aArticleRights, $aCategoryRights, $aTempalteRights); + $bExclusive = true; + break; + default: + break; + } + } + $oTpl->set('s', 'INPUT_SELECT_RIGHTS', $oHtmlSelect->render()); + $oTpl->set('s', 'DISPLAY_RIGHTS', 'block'); + } else { + $oTpl->set('s', 'INPUT_SELECT_RIGHTS', ''); + $oTpl->set('s', 'DISPLAY_RIGHTS', 'none'); + } +//navigation + +if(!isset($rights_clientslang)) +{ + $rights_clientslang = $firstclientslang; +} + +$sql = "SELECT idclient, idlang FROM ".$cfg["tab"]["clients_lang"]." WHERE idclientslang = '".Contenido_Security::toInteger($rights_clientslang)."'"; +$db->query($sql); + +$bEndScript = false; + +if ($db->next_record()) +{ + $rights_client = $db->f("idclient"); + $rights_lang = $db->f("idlang"); + $oTpl->set('s', 'NOTIFICATION', ''); + $oTpl->set('s', 'DISPLAY_FILTER', 'block'); +} else { + $bEndScript = true; + ob_end_clean(); + + // Account is sysadmin + if (strpos($userperms, "sysadmin") !== false) + { + $oTpl->set('s', 'NOTIFICATION', $notification->messageBox("warning", i18n("The selected user is a system administrator. A system administrator has all rights for all clients for all languages and therefore rights can't be specified in more detail."),0)); + } + // Account is only assigned to clients with admin rights + else if (strpos($userperms, "admin[") !== false) + { + $oTpl->set('s', 'NOTIFICATION', $notification->messageBox("warning", i18n("The selected user is assigned to clients as admin, only. An admin has all rights for a client and therefore rights can't be specified in more detail."),0)); + } + else + { + $oTpl->set('s', 'NOTIFICATION', $notification->messageBox("error", i18n("Current user doesn't have any rights to any client/language."),0)); + } + $oTpl->set('s', 'DISPLAY_FILTER', 'none'); +} + +if ($bEndScript != true) { + $tmp = ob_get_contents(); + ob_end_clean(); + $oTpl->set('s', 'OB_CONTENT', $tmp); +} else { + $oTpl->set('s', 'OB_CONTENT', ''); +} + +if ($bEndScript == true) { + $oTpl->set('s', 'RIGHTS_CONTENT', ''); + $oTpl->set('s', 'JS_SCRIPT_BEFORE', ''); + $oTpl->set('s', 'JS_SCRIPT_AFTER', ''); + $oTpl->set('s', 'RIGHTS_CONTENT', ''); + $oTpl->set('s', 'EXTERNAL_SCRIPTS', ''); + $oTpl->generate('templates/standard/'.$cfg['templates']['rights_inc']); + die(); +} +?> diff --git a/branches/conlite20/conlite/includes/rights_area.inc.php b/branches/conlite20/conlite/includes/rights_area.inc.php new file mode 100644 index 0000000..b94996c --- /dev/null +++ b/branches/conlite20/conlite/includes/rights_area.inc.php @@ -0,0 +1,195 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2008-07-03, Timo Trautmann, moved inline html to template + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: rights_area.inc.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +//notice $oTpl is filled and generated in file rights.inc.php this file renders $oTpl to browser +include_once($cfg['path']['contenido'].'includes/rights.inc.php'); +$debug = 0; + +//set the areas which are in use for selecting these + +$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='".Contenido_Security::escapeDB($userid, $db)."' AND idclient='".Contenido_Security::toInteger($rights_client)."' AND idlang='".Contenido_Security::toInteger($rights_lang)."' AND idcat='0' AND A.idaction = C.idaction AND A.idarea = B.idarea"; +$db->query($sql); + +$rights_list_old = array (); +while ($db->next_record()) { //set a new rights list fore this user + $rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x"; +} + +if (($perm->have_perm_area_action($area, $action)) && ($action == "user_edit")) +{ + saverights(); +} else { + if (!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } +} + +$sJsBefore = ''; +$sJsAfter = ''; +$sJsExternal = ''; +$sTable = ''; + +$sJsBefore .= "var areatree=new Array();\n"; + +if(!isset($rights_perms)||$action==""||!isset($action)){ + + //search for the permissions of this user + $sql="SELECT perms FROM ".$cfg["tab"]["phplib_auth_user_md5"]." WHERE user_id='$userid'"; + + $db->query($sql); + $db->next_record(); + $rights_perms=$db->f("perms"); + +} + +$table = new Table($cfg["color"]["table_border"], "solid", 0, 2, $cfg["color"]["table_header"], $cfg["color"]["table_light"], $cfg["color"]["table_dark"], 0, 0); + +$sTable .= $table->start_table(); + +$sTable .= $table->header_row(); +$sTable .= $table->header_cell(" ","left"); +$sTable .= $table->header_cell(" ","left"); +$sTable .= $table->header_cell(i18n("Check all"),"left"); +$sTable .= $table->end_row(); + +$sTable .= $table->header_row(); +$sTable .= $table->header_cell(' ',"center", '', '', 0); +$sTable .= $table->header_cell(' ',"center", '', '', 0); +$sTable .= $table->header_cell("", "center", '', '', 0); +$sTable .= $table->end_row(); + +$nav = new Contenido_Navigation; +foreach($right_list as $key => $value){ + // look for possible actions in mainarea + foreach($value as $key2 =>$value2) + { + if($key==$key2){ + //does the user have the right + if(in_array($value2["perm"]."|fake_permission_action|0",array_keys($rights_list_old))) + $checked="checked=\"checked\""; + else + $checked=""; + + $darkRow = !$darkRow; + if ($darkRow) { + $bgColor = $cfg["color"]["table_dark"]; + } else { + $bgColor = $cfg["color"]["table_light"]; + } + + + /* Extract names from the XML document. */ + $main = $nav->getName(str_replace('/overview', '/main', $value2['location'])); + + if ($debug) + { + $locationString = $value2["location"] . " " . $value2["perm"]. "-->".$main; + } else { + $locationString = $main; + } + + $sTable .= $table->row(); + $sTable .= $table->cell($locationString,"", "", " class=\"td_rights1\"", false); + $sTable .= $table->cell("" ,"", "", " class=\"td_rights2\"", false); + $sTable .= $table->cell("","", "", " class=\"td_rights2\"", false); + $sTable .= $table->end_row(); + + //set javscript array for areatree + $sJsBefore .= " + areatree[\"$key\"]=new Array(); + areatree[\"$key\"][\"".$value2["perm"]."0\"]=\"rights_list[".$value2["perm"]."|fake_permission_action|0]\"\n"; + } + + //if there area some + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { + $idaction = $value3; + //does the user have the right + if(in_array($value2["perm"]."|$idaction|0",array_keys($rights_list_old))) + $checked="checked=\"checked\""; + else + $checked=""; + + $darkRow = !$darkRow; + if ($darkRow) { + $bgColor = $cfg["color"]["table_dark"]; + } else { + $bgColor = $cfg["color"]["table_light"]; + } + + //set the checkbox the name consits of areait+actionid+itemid + $sCellContent = ''; + if ($debug) + { + $sCellContent = "     " . $value2["perm"] . " | ". $value3 . "-->".$lngAct[$value2["perm"]][$value3]."    "; + } else { + if ($lngAct[$value2["perm"]][$value3] == "") + { + $sCellContent = "     " . $value2["perm"] . "|" .$value3 ."    "; + + } else { + $sCellContent = "     " . $lngAct[$value2["perm"]][$value3]."    "; + } + } + + $sTable .= $table->row(); + $sTable .= $table->cell($sCellContent,"left", "", " class=\"td_rights1\"", false); + $sTable .= $table->cell("", false); + $sTable .= $table->cell(" ", false); + $sTable .= $table->end_row(); + + //set javscript array for areatree + $sJsBefore .= "areatree[\"$key\"][\"".$value2["perm"]."$value3\"]=\"rights_list[".$value2["perm"]."|$value3|0]\"\n"; + + } + } + //checkbox for checking all actions fore this itemid +} + +$sTable .= $table->row(); +$sTable .= $table->sumcell("","right"); +$sTable .= $table->end_row(); +$sTable .= $table->end_table(); + +$oTpl->set('s', 'JS_SCRIPT_BEFORE', $sJsBefore); +$oTpl->set('s', 'JS_SCRIPT_AFTER', $sJsAfter); +$oTpl->set('s', 'RIGHTS_CONTENT', $sTable); +$oTpl->set('s', 'EXTERNAL_SCRIPTS', $sJsExternal); +$oTpl->generate('templates/standard/'.$cfg['templates']['rights_inc']); +?> diff --git a/branches/conlite20/conlite/includes/rights_con.inc.php b/branches/conlite20/conlite/includes/rights_con.inc.php new file mode 100644 index 0000000..a3de1d2 --- /dev/null +++ b/branches/conlite20/conlite/includes/rights_con.inc.php @@ -0,0 +1,234 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2008-07-03, Timo Trautmann, moved inline html to template + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: rights_con.inc.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +//notice $oTpl is filled and generated in file rights.inc.php this file renders $oTpl to browser +include_once($cfg['path']['contenido'].'includes/rights.inc.php'); +//set the areas which are in use fore selecting these + +$possible_area = "'".implode("','", $area_tree[$perm->showareas("con")])."'"; +$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='".Contenido_Security::escapeDB($userid, $db)."' AND idclient='".Contenido_Security::toInteger($rights_client)."' AND A.type = 0 AND idlang='".Contenido_Security::toInteger($rights_lang)."' AND B.idarea IN ($possible_area) AND idcat!='0' AND A.idaction = C.idaction AND A.idarea = C.idarea AND A.idarea = B.idarea"; +$db->query($sql); +$rights_list_old = array (); +while ($db->next_record()) { //set a new rights list fore this user + $rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x"; +} + +if (($perm->have_perm_area_action($area, $action)) && ($action == "user_edit")) +{ + saverights(); +} else { + if (!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } +} + +$sJsBefore = ''; +$sJsAfter = ''; +$sJsExternal = ''; +$sTable = ''; + + $sJsExternal .= ''."\n"; + $sJsExternal .= ''; + // declare new javascript variables; + $sJsBefore .=" + var itemids=new Array(); + var actareaids=new Array();\n"; + + $colspan=0; + + $table = new Table($cfg["color"]["table_border"], "solid", 0, 2, $cfg["color"]["table_header"], $cfg["color"]["table_light"], $cfg["color"]["table_dark"], 0, 0); + + $sTable .= $table->start_table(); + $sTable .= $table->header_row(); + $sTable .= $table->header_cell(i18n("Category"),"left"); + $sTable .= $table->header_cell(" ","left"); + + $sCheckboxesRow = ''; + $possible_areas=array(); + $aSecondHeaderRow=array(); + // look for possible actions in mainarea [] in str and con + foreach($right_list["con"] as $value2) + { + //if there are some actions + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { + if ((in_array($value3, $aViewRights) && !$bExclusive) || + (!in_array($value3, $aViewRights) && $bExclusive) || + (count($aViewRights) == 0)) { + //set the areas that are in use + $possible_areas[$value2["perm"]]=""; + + + $colspan++; + //set the possible areas and actions for this areas + + //checkbox for the whole action + $sTable .= $table->header_cell($lngAct[$value2["perm"]][$value3]); + $sJsBefore .= "actareaids[\"$value3|".$value2["perm"]."\"]=\"x\"\n"; + + array_push($aSecondHeaderRow, ""); + } + + } + } + + //checkbox for all rights + $sTable .= $table->header_cell(i18n("Check all")); + array_push($aSecondHeaderRow, ""); + $sTable .= $table->end_row(); + $colspan++; + + $sTable .= $table->header_row(); + $sTable .= $table->header_cell(' ',"center", '', '', 0); + $sTable .= $table->header_cell(' ',"center", '', '', 0); + + foreach ($aSecondHeaderRow as $value) { + $sTable .= $table->header_cell($value,"center", '', '', 0); + } + $sTable .= $table->end_row(); + + $sql = "SELECT A.idcat, level, name,parentid FROM ".$cfg["tab"]["cat_tree"]." AS A, ".$cfg["tab"]["cat"]." AS B, ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND C.idlang='$rights_lang' AND B.idclient='$rights_client' ORDER BY idtree"; + + $db->query($sql); + $counter=array(); + $parentid="leer"; + + $aRowname = array(); + $iLevel = 0; + + while ($db->next_record()) { + $iCurrentIdCat = $db->f('idcat'); + + if ($db->f("level") == 0 && $db->f("preid") != 0) { + $sTable .= $table->row(); + $sTable .= $table->sumcell(" ","right"); + $sTable .= $table->end_row(); + }else { + if ($db->f("level") < $iLevel) { + $iDistance = $iLevel-$db->f("level"); + + for ($i = 0; $i < $iDistance; $i++) { + array_pop($aRowname); + } + $iLevel = $db->f("level"); + } + + if ($db->f("level") >= $iLevel) { + if ($db->f("level") == $iLevel) { + array_pop($aRowname); + } else { + $iLevel = $db->f("level"); + } + array_push($aRowname, $db->f("idcat")); + } + + //find out parentid for inheritance + //if parentid is the same increase the counter + if($parentid==$db->f("parentid")){ + + $counter[$parentid]++; + }else{ + $parentid=$db->f("parentid"); + // if these parentid is in use increase the counter + if(isset($counter[$parentid])){ + $counter[$parentid]++; + }else{ + $counter[$parentid]=0; + } + + + } + + $spaces = ''; + + $sTable .= $table->row("id=\"".implode('_', $aRowname)."\""); + $sTable .= $table->cell($spaces.$db->f("name"),"", "", " class=\"td_rights0\"", false); + $sTable .= $table->cell("f("idcat")."')\" class=\"action\">","", "", " class=\"td_rights1\"", false); + + $sJsAfter.="itemids[\"".$db->f("idcat")."\"]=\"x\";\n"; + + // look for possible actions in mainarea[] + + foreach($right_list["con"] as $value2){ + + //if there area some + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { + if ((in_array($value3, $aViewRights) && !$bExclusive) || + (!in_array($value3, $aViewRights) && $bExclusive) || + (count($aViewRights) == 0)) { + //does the user have the right + if(isset($rights_list_old[$value2["perm"]."|$value3|".$iCurrentIdCat])) + $checked="checked=\"checked\""; + else + $checked=""; + + //set the checkbox the name consits of areaid+actionid+itemid the id = parebntid+couter for these parentid+areaid+actionid + $sTable .= $table->cell("f("idcat")."]\" value=\"x\" $checked>","", "", " class=\"td_rights2\"", false); + } + } + } + + //checkbox for checking all actions fore this itemid + $sTable .= $table->cell("f("idcat")."\" value=\"\" onClick=\"setRightsFor('".$value2["perm"]."','$value3','".$db->f("idcat")."')\">","", "", " class=\"td_rights3\"", false); + $sTable .= $table->end_row(); + } +} + +$sTable .= $table->end_row(); +$sTable .= $table->row(); +$sTable .= $table->sumcell(" ","right"); +$sTable .= $table->end_row(); +$sTable .= $table->end_table(); + +$sJsAfter .= " + aTranslations = new Object(); + aTranslations['pfeil_links.gif'] = '".i18n("Apply rights for this category to all categories on the same level or above")."'; + aTranslations['pfeil_runter.gif'] = '".i18n("Apply rights for this category to all categories below the current category")."'; + setImageTags(aTranslations); + + init('".i18n("Open category")."', '".i18n("Close category")."');\n"; + +$oTpl->set('s', 'JS_SCRIPT_BEFORE', $sJsBefore); +$oTpl->set('s', 'JS_SCRIPT_AFTER', $sJsAfter); +$oTpl->set('s', 'RIGHTS_CONTENT', $sTable); +$oTpl->set('s', 'EXTERNAL_SCRIPTS', $sJsExternal); +$oTpl->generate('templates/standard/'.$cfg['templates']['rights_inc']); +?> diff --git a/branches/conlite20/conlite/includes/rights_lay.inc.php b/branches/conlite20/conlite/includes/rights_lay.inc.php new file mode 100644 index 0000000..d47d4dc --- /dev/null +++ b/branches/conlite20/conlite/includes/rights_lay.inc.php @@ -0,0 +1,165 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-07-03, Timo Trautmann, moved inline html to template + * + * $Id: rights_lay.inc.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +//notice $oTpl is filled and generated in file rights.inc.php this file renders $oTpl to browser +include_once($cfg['path']['contenido'].'includes/rights.inc.php'); +// declare new javascript variables; + +//set the areas which are in use fore selecting these +$possible_area = "'".implode("','", $area_tree[$perm->showareas("lay")])."'"; +$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='".Contenido_Security::escapeDB($userid, $db)."' + AND idclient='".Contenido_Security::escapeDB($rights_client, $db)."' AND A.type = 0 AND idlang='".Contenido_Security::escapeDB($rights_lang, $db)."' AND B.idarea IN ($possible_area) AND idcat!='0' AND A.idaction = C.idaction AND A.idarea = C.idarea AND A.idarea = B.idarea"; +$db->query($sql); + +$rights_list_old = array (); +while ($db->next_record()) { //set a new rights list fore this user + $rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x"; +} + +if (($perm->have_perm_area_action($area, $action)) && ($action == "user_edit")) +{ + saverights(); +}else { + if (!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } +} + +$sJsBefore = ''; +$sJsAfter = ''; +$sJsExternal = ''; +$sTable = ''; + +$sJsBefore .= "var itemids=new Array(); + var actareaids=new Array();\n"; + +$colspan=0; + +$table = new Table($cfg["color"]["table_border"], "solid", 0, 2, $cfg["color"]["table_header"], $cfg["color"]["table_light"], $cfg["color"]["table_dark"], 0, 0); + +$sTable .= $table->start_table(); +$sTable .= $table->header_row(); +$sTable .= $table->header_cell(i18n("Layout name")); +$sTable .= $table->header_cell(i18n("Description")); + +$possible_areas=array(); +$sCheckboxesRow = ''; +$aSecondHeaderRow = array(); +// look for possible actions in mainarea [] +foreach($right_list["lay"] as $value2) +{ + //if there are some actions + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { //set the areas that are in use + $possible_areas[$value2["perm"]]=""; + + $colspan++; + //set the possible areas and actions for this areas + $sJsBefore .= "actareaids[\"$value3|".$value2["perm"]."\"]=\"x\";\n"; + + //checkbox for the whole action + $sTable .= $table->header_cell($lngAct[$value2["perm"]][$value3]); + array_push($aSecondHeaderRow, ""); + } +} +//checkbox for all rights +$sTable .= $table->header_cell(i18n('Check all')); +array_push($aSecondHeaderRow, ""); +$sTable .= $table->end_row(); +$colspan++; + +$sTable .= $table->header_row(); +$sTable .= $table->header_cell(' ',"center", '', '', 0); +$sTable .= $table->header_cell(' ',"center", '', '', 0); + +foreach ($aSecondHeaderRow as $value) { + $sTable .= $table->header_cell($value,"center", '', '', 0); +} +$sTable .= $table->end_row(); + +//Select the itemid�s +$sql = "SELECT * FROM ".$cfg["tab"]["lay"]." WHERE idclient='".Contenido_Security::toInteger($rights_client)."' ORDER BY name"; +$db->query($sql); + +while ($db->next_record()) { + + $tplname = clHtmlEntities($db->f("name")); + $description = clHtmlEntities($db->f("description")); + + $sTable .= $table->row(); + $sTable .= $table->cell($tplname,"", "", " class=\"td_rights0\"", false); + $sTable .= $table->cell($description,"", "", " class=\"td_rights1\" style=\"white-space:normal; \"", false); + + $darkrow = !$darkrow; + + //set javscript array for itemids + $sJsBefore .= "itemids[\"".$db->f("idlay")."\"]=\"x\"\n"; + + // look for possible actions in mainarea[] + foreach($right_list["lay"] as $value2) + { + + //if there area some + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { + //does the user have the right + if(in_array($value2["perm"]."|$value3|".$db->f("idlay"),array_keys($rights_list_old))) + $checked="checked=\"checked\""; + else + $checked=""; + + $sTable .= $table->cell("f("idlay")."]\" value=\"x\" $checked>","", "", " class=\"td_rights2\"", false); + } + } + //checkbox for checking all actions fore this itemid + $sTable .= $table->cell("f("idlay")."\" value=\"\" onClick=\"setRightsFor('".$value2["perm"]."','$value3','".$db->f("idlay")."')\">","", "", " class=\"td_rights3\"", false); + $sTable .= $table->end_row(); +} + +$sTable .= $table->end_row(); +$sTable .= $table->row(); +$sTable .= $table->sumcell(" ","right"); +$sTable .= $table->end_row(); +$sTable .= $table->end_table(); + +$oTpl->set('s', 'JS_SCRIPT_BEFORE', $sJsBefore); +$oTpl->set('s', 'JS_SCRIPT_AFTER', $sJsAfter); +$oTpl->set('s', 'RIGHTS_CONTENT', $sTable); +$oTpl->set('s', 'EXTERNAL_SCRIPTS', $sJsExternal); +$oTpl->generate('templates/standard/'.$cfg['templates']['rights_inc']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/rights_mod.inc.php b/branches/conlite20/conlite/includes/rights_mod.inc.php new file mode 100644 index 0000000..3561d7c --- /dev/null +++ b/branches/conlite20/conlite/includes/rights_mod.inc.php @@ -0,0 +1,163 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-07-03, Frederic Schneider, fixed wrong escape + * modified 2008-07-03, Timo Trautmann, moved inline html to template + * + * $Id: rights_mod.inc.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +//notice $oTpl is filled and generated in file rights.inc.php this file renders $oTpl to browser +include_once($cfg['path']['contenido'].'includes/rights.inc.php'); +//set the areas which are in use fore selecting these +$possible_area = "'".implode("','", $area_tree[$perm->showareas("mod")])."'"; +$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='".Contenido_Security::escapeDB($userid, $db)."' + AND idclient='".Contenido_Security::escapeDB($rights_client, $db)."' AND A.type = 0 AND idlang='".Contenido_Security::escapeDB($rights_lang, $db)."' AND B.idarea IN ($possible_area) AND idcat!='0' AND A.idaction = C.idaction AND A.idarea = C.idarea AND A.idarea = B.idarea"; +$db->query($sql); + +$rights_list_old = array (); +while ($db->next_record()) { //set a new rights list fore this user + $rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x"; +} + +if (($perm->have_perm_area_action($area, $action)) && ($action == "user_edit")) { + saverights(); +} else { + if (!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } +} + +$sJsBefore = ''; +$sJsAfter = ''; +$sJsExternal = ''; +$sTable = ''; + +// declare new javascript variables; +$sJsBefore = " + var itemids=new Array(); + var actareaids=new Array();"; + +$colspan=0; + +$table = new Table($cfg["color"]["table_border"], "solid", 0, 2, $cfg["color"]["table_header"], $cfg["color"]["table_light"], $cfg["color"]["table_dark"], 0, 0); + +$sTable .= $table->start_table(); +$sTable .= $table->header_row(); +$sTable .= $table->header_cell(i18n("Module name")); +$sTable .= $table->header_cell(i18n("Description")); +$aSecondHeaderRow = array(); +$possible_areas=array(); +// look for possible actions in mainarea [] +foreach($right_list["mod"] as $value2) +{ + //if there are some actions + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { //set the areas that are in use + $possible_areas[$value2["perm"]]=""; + + $colspan++; + //set the possible areas and actions for this areas + $sJsBefore .= "actareaids[\"$value3|".$value2["perm"]."\"]=\"x\";\n"; + + //checkbox for the whole action + $sTable .= $table->header_cell($lngAct[$value2["perm"]][$value3]); + array_push($aSecondHeaderRow, ""); + } +} + +//checkbox for all rights +$sTable .= $table->header_cell(i18n('Check all')); +array_push($aSecondHeaderRow, ""); +$sTable .= $table->end_row(); +$colspan++; + +$sTable .= $table->header_row(); +$sTable .= $table->header_cell(' ',"center", '', '', 0); +$sTable .= $table->header_cell(' ',"center", '', '', 0); + +foreach ($aSecondHeaderRow as $value) { + $sTable .= $table->header_cell($value,"center", '', '', 0); +} +$sTable .= $table->end_row(); + +//Select the itemid�s +$sql = "SELECT * FROM ".$cfg["tab"]["mod"]." WHERE idclient='".Contenido_Security::toInteger($rights_client)."' ORDER BY name"; +$db->query($sql); + +while ($db->next_record()) { + + $tplname = clHtmlEntities($db->f("name")); + $description = clHtmlEntities($db->f("description")); + + $sTable .= $table->row(); + $sTable .= $table->cell($tplname,"", "", " class=\"td_rights0\"", false); + $sTable .= $table->cell($description,"", "", " class=\"td_rights1\" style=\"white-space:normal; \"", false); + + //set javscript array for itemids + $sJsAfter.="itemids[\"".$db->f("idmod")."\"]=\"x\";\n"; + + // look for possible actions in mainarea[] + foreach($right_list["mod"] as $value2) + { + + //if there area some + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { + //does the user have the right + if(in_array($value2["perm"]."|$value3|".$db->f("idmod"),array_keys($rights_list_old))) + $checked="checked=\"checked\""; + else + $checked=""; + + //set the checkbox the name consits of areait+actionid+itemid + $sTable .= $table->cell("f("idmod")."]\" value=\"x\" $checked>","", "", " class=\"td_rights2\"", false); + } + } + //checkbox for checking all actions fore this itemid + $sTable .= $table->cell("f("idmod")."\" value=\"\" onClick=\"setRightsFor('".$value2["perm"]."','$value3','".$db->f("idmod")."')\">","", "", " class=\"td_rights3\"", false); + $sTable .= $table->end_row(); +} + +$sTable .= $table->end_row(); +$sTable .= $table->row(); +$sTable .= $table->sumcell(" ","right"); +$sTable .= $table->end_row(); +$sTable .= $table->end_table(); + +$oTpl->set('s', 'JS_SCRIPT_BEFORE', $sJsBefore); +$oTpl->set('s', 'JS_SCRIPT_AFTER', $sJsAfter); +$oTpl->set('s', 'RIGHTS_CONTENT', $sTable); +$oTpl->set('s', 'EXTERNAL_SCRIPTS', $sJsExternal); +$oTpl->generate('templates/standard/'.$cfg['templates']['rights_inc']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/rights_str.inc.php b/branches/conlite20/conlite/includes/rights_str.inc.php new file mode 100644 index 0000000..6b95abc --- /dev/null +++ b/branches/conlite20/conlite/includes/rights_str.inc.php @@ -0,0 +1,228 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-07-03, Timo Trautmann, moved inline html to template + * + * $Id: rights_str.inc.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +//notice $oTpl is filled and generated in file rights.inc.php this file renders $oTpl to browser +include_once($cfg['path']['contenido'].'includes/rights.inc.php'); +//set the areas which are in use fore selecting these +$possible_area = "'".implode("','", $area_tree[$perm->showareas("str")])."'"; +$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='".Contenido_Security::escapeDB($userid, $db)."' + AND idclient='".Contenido_Security::escapeDB($rights_client, $db)."' AND A.type = 0 AND idlang='".Contenido_Security::escapeDB($rights_lang, $db)."' AND B.idarea IN ($possible_area) AND idcat!='0' AND A.idaction = C.idaction AND A.idarea = C.idarea AND A.idarea = B.idarea"; +$db->query($sql); + +$rights_list_old = array (); +while ($db->next_record()) { //set a new rights list fore this user + $rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x"; +} + +if (($perm->have_perm_area_action($area, $action)) && ($action == "user_edit")) +{ + saverights(); +}else { + if (!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } +} +$sJsBefore = ''; +$sJsAfter = ''; +$sJsExternal = ''; +$sTable = ''; + + $sJsExternal .= ''."\n"; + $sJsExternal .= ''."\n"; + + // declare new javascript variables; + $sJsBefore .= " + var itemids=new Array(); \n + var actareaids=new Array(); \n"; + + $colspan=0; + + $table = new Table($cfg["color"]["table_border"], "solid", 0, 2, $cfg["color"]["table_header"], $cfg["color"]["table_light"], $cfg["color"]["table_dark"], 0, 0); + + $sTable .= $table->start_table(); + $sTable .= $table->header_row(); + $sTable .= $table->header_cell(i18n("Category"),"left"); + $sTable .= $table->header_cell(" ","left"); + $possible_areas=array(); + $aSecondHeaderRow = array(); + + // look for possible actions in mainarea [] in str and con + foreach($right_list["str"] as $value2) + { + //if there are some actions + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { //set the areas that are in use + + # HACK! + if ($value3 != "str_newtree") + { + $possible_areas[$value2["perm"]]=""; + + $colspan++; + //set the possible areas and actions for this areas + $sJsBefore .= "actareaids[\"$value3|".$value2["perm"]."\"]=\"x\";\n"; + + $sTable .= $table->header_cell($lngAct[$value2["perm"]][$value3]); + array_push($aSecondHeaderRow, ""); + } + } + } + + //checkbox for all rights + $sTable .= $table->header_cell(i18n("Check all")); + array_push($aSecondHeaderRow, ""); + $sTable .= $table->end_row(); + $colspan++; + + $sTable .= $table->header_row(); + $sTable .= $table->header_cell(' ',"center", '', '', 0); + $sTable .= $table->header_cell(' ',"center", '', '', 0); + + foreach ($aSecondHeaderRow as $value) { + $sTable .= $table->header_cell($value,"center", '', '', 0); + } + $sTable .= $table->end_row(); + + $sql = "SELECT A.idcat, level, name,parentid FROM ".$cfg["tab"]["cat_tree"]." AS A, ".$cfg["tab"]["cat"]." AS B, ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat + AND C.idlang='".Contenido_Security::toInteger($rights_lang)."' AND B.idclient='".Contenido_Security::toInteger($rights_client)."' ORDER BY idtree"; + $db->query($sql); + + $counter=array(); + $parentid="leer"; + + $aRowname = array(); + $iLevel = 0; + + while ($db->next_record()) { + + if ($db->f("level") == 0 && $db->f("preid") != 0) { + $sTable .= $table->row(); + $sTable .= $table->sumcell(" ","right"); + $sTable .= $table->end_row(); + }else { + if ($db->f("level") < $iLevel) { + $iDistance = $iLevel-$db->f("level"); + + for ($i = 0; $i < $iDistance; $i++) { + array_pop($aRowname); + } + $iLevel = $db->f("level"); + } + + if ($db->f("level") >= $iLevel) { + if ($db->f("level") == $iLevel) { + array_pop($aRowname); + } else { + $iLevel = $db->f("level"); + } + array_push($aRowname, $db->f("idcat")); + } + + //find out parentid for inheritance + //if parentid is the same increase the counter + if($parentid==$db->f("parentid")) { + $counter[$parentid]++; + }else{ + $parentid=$db->f("parentid"); + // if these parentid is in use increase the counter + if(isset($counter[$parentid])){ + $counter[$parentid]++; + }else{ + $counter[$parentid]=0; + } + + + } + //set javscript array for itemids + $sJsAfter.="itemids[\"".$db->f("idcat")."\"]=\"x\";\n"; + + $spaces=''; + + $sTable .= $table->row("id=\"".implode('_', $aRowname)."\""); + $sTable .= $table->cell(' '.$db->f("name"),"", "", " class=\"td_rights0\"", false); + $sTable .= $table->cell(" f("idcat")."')\" class=\"action\">","", "", " class=\"td_rights1\"", false); + + // look for possible actions in mainarea[] + + foreach($right_list["str"] as $value2){ + + //if there area some + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { + # HACK! + if ($value3 != "str_newtree") + { + //does the user have the right + if(in_array($value2["perm"]."|$value3|".$db->f("idcat"),array_keys($rights_list_old))) { + $checked="checked=\"checked\""; + } else { + $checked=""; + } + + //set the checkbox the name consits of areaid+actionid+itemid the id = parebntid+couter for these parentid+areaid+actionid + $sTable .= $table->cell("f("idcat")."]\" value=\"x\" $checked>","", "", " class=\"td_rights2\"", false); + + } + } + } + + //checkbox for checking all actions fore this itemid + $sTable .= $table->cell("f("idcat")."\" value=\"\" onClick=\"setRightsFor('".$value2["perm"]."','$value3','".$db->f("idcat")."')\">","", "", " class=\"td_rights3\"", false); + $sTable .= $table->end_row(); + } +} +$sTable .= $table->end_row(); +$sTable .= $table->row(); +$sTable .= $table->sumcell(" ","right"); +$sTable .= $table->end_row(); +$sTable .= $table->end_table(); + +$sJsAfter .= " + aTranslations = new Object(); + aTranslations['pfeil_links.gif'] = '".i18n("Apply rights for this category to all categories on the same level or above")."'; + aTranslations['pfeil_runter.gif'] = '".i18n("Apply rights for this category to all categories below the current category")."'; + setImageTags(aTranslations); + + init('".i18n("Open category")."', '".i18n("Close category")."');\n"; + +$oTpl->set('s', 'JS_SCRIPT_BEFORE', $sJsBefore); +$oTpl->set('s', 'JS_SCRIPT_AFTER', $sJsAfter); +$oTpl->set('s', 'RIGHTS_CONTENT', $sTable); +$oTpl->set('s', 'EXTERNAL_SCRIPTS', $sJsExternal); +$oTpl->generate('templates/standard/'.$cfg['templates']['rights_inc']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/rights_tpl.inc.php b/branches/conlite20/conlite/includes/rights_tpl.inc.php new file mode 100644 index 0000000..e0f50d8 --- /dev/null +++ b/branches/conlite20/conlite/includes/rights_tpl.inc.php @@ -0,0 +1,166 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created unknown + * modified 2008-06-27, Frederic Schneider, add security fix + * modified 2008-07-03, Timo Trautmann, moved inline html to template + * + * $Id: rights_tpl.inc.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +//notice $oTpl is filled and generated in file rights.inc.php this file renders $oTpl to browser +include_once($cfg['path']['contenido'].'includes/rights.inc.php'); +//set the areas which are in use fore selecting these +$possible_area = "'".implode("','", $area_tree[$perm->showareas("tpl")])."'"; +$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='".Contenido_Security::escapeDB($userid, $db)."' + AND idclient='".Contenido_Security::escapeDB($rights_client, $db)."' AND A.type = 0 AND idlang='".Contenido_Security::escapeDB($rights_lang, $db)."' AND B.idarea IN ($possible_area) AND idcat!='0' AND A.idaction = C.idaction AND A.idarea = C.idarea AND A.idarea = B.idarea"; +$db->query($sql); + +$rights_list_old = array (); +while ($db->next_record()) { //set a new rights list fore this user + $rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x"; +} + +if (($perm->have_perm_area_action($area, $action)) && ($action == "user_edit")) +{ + saverights(); +}else { + if (!$perm->have_perm_area_action($area, $action)) + { + $notification->displayNotification("error", i18n("Permission denied")); + } +} + +$sJsBefore = ''; +$sJsAfter = ''; +$sTable = ''; + +$sJsBefore .= "var itemids=new Array();\n + var actareaids=new Array();\n"; + +// declare new javascript variables; +$colspan=0; + +$table = new Table($cfg["color"]["table_border"], "solid", 0, 2, $cfg["color"]["table_header"], $cfg["color"]["table_light"], $cfg["color"]["table_dark"], 0, 0); + +$sTable .= $table->start_table(); +$sTable .= $table->header_row(); +$sTable .= $table->header_cell(i18n("Template name")); +$sTable .= $table->header_cell(i18n("Description")); + +$aSecondHeaderRow = array(); +$possible_areas=array(); + +// look for possible actions in mainarea [] +foreach($right_list["tpl"] as $value2) +{ + //if there are some actions + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { //set the areas that are in use + $possible_areas[$value2["perm"]]=""; + + $colspan++; + //set the possible areas and actions for this areas + + $sJsBefore .= "actareaids[\"$value3|".$value2["perm"]."\"]=\"x\"\n"; + + //checkbox for the whole action + $sTable .= $table->header_cell($lngAct[$value2["perm"]][$value3]); + array_push($aSecondHeaderRow, ""); + } +} + +//checkbox for all rights +$sTable .= $table->header_cell(i18n('Check all')); +array_push($aSecondHeaderRow, ""); +$sTable .= $table->end_row(); +$colspan++; + +$sTable .= $table->header_row(); +$sTable .= $table->header_cell(' ',"center", '', '', 0); +$sTable .= $table->header_cell(' ',"center", '', '', 0); + +foreach ($aSecondHeaderRow as $value) { + $sTable .= $table->header_cell($value,"center", '', '', 0); +} +$sTable .= $table->end_row(); + + +//Select the itemid�s +$sql = "SELECT * FROM ".$cfg["tab"]["tpl"]." WHERE idclient='".Contenido_Security::toInteger($rights_client)."' ORDER BY name"; +$db->query($sql); + +while ($db->next_record()) { + + $tplname = clHtmlEntities($db->f("name")); + $description = clHtmlEntities($db->f("description")); + + $sTable .= $table->row(); + $sTable .= $table->cell($tplname,"", "", " class=\"td_rights0\"", false); + $sTable .= $table->cell($description,"", "", " class=\"td_rights1\" style=\"white-space:normal;\"", false); + + //set javscript array for itemids + $sJsAfter.="itemids[\"".$db->f("idtpl")."\"]=\"x\";\n"; + + // look for possible actions in mainarea[] + foreach($right_list["tpl"] as $value2) + { + + //if there area some + if(is_array($value2["action"])) + foreach($value2["action"] as $key3 => $value3) + { + //does the user have the right + if(in_array($value2["perm"]."|$value3|".$db->f("idtpl"),array_keys($rights_list_old))) { + $checked="checked=\"checked\""; + } else { + $checked=""; + } + + //set the checkbox the name consits of areait+actionid+itemid + $sTable .= $table->cell("f("idtpl")."]\" value=\"x\" $checked>","", "", " class=\"td_rights2\"", false); + + } + } + //checkbox for checking all actions fore this itemid + $sTable .= $table->cell("f("idtpl")."\" value=\"\" onClick=\"setRightsFor('".$value2["perm"]."','$value3','".$db->f("idtpl")."')\">","", "", " class=\"td_rights3\"", false); + $sTable .= $table->end_row(); +} +$sTable .= $table->end_row(); +$sTable .= $table->row(); +$sTable .= $table->sumcell(" ","right"); +$sTable .= $table->end_row(); +$sTable .= $table->end_table(); + +$oTpl->set('s', 'JS_SCRIPT_BEFORE', $sJsBefore); +$oTpl->set('s', 'JS_SCRIPT_AFTER', $sJsAfter); +$oTpl->set('s', 'RIGHTS_CONTENT', $sTable); +$oTpl->set('s', 'EXTERNAL_SCRIPTS', $sJsExternal); +$oTpl->generate('templates/standard/'.$cfg['templates']['rights_inc']); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/includes/startup.php b/branches/conlite20/conlite/includes/startup.php new file mode 100644 index 0000000..6c71e4c --- /dev/null +++ b/branches/conlite20/conlite/includes/startup.php @@ -0,0 +1,227 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * $Id: startup.php 374 2015-11-09 15:59:28Z oldperl $: + */ + + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/* + * Do not edit this value! + * + * If you want to set a different enviroment value please define it in your .htaccess file + * or in the server configuration. + * + * SetEnv CL_ENVIRONMENT development + * + * You may also use a php-file in conlite folder named enviroment.php with content + * + */ +if (!defined('CL_ENVIRONMENT')) { + if (getenv('CONLITE_ENVIRONMENT')) { + $sEnvironment = getenv('CONLITE_ENVIRONMENT'); + } elseif (getenv('CL_ENVIRONMENT')) { + $sEnvironment = getenv('CL_ENVIRONMENT'); + } else { + if(file_exists(dirname(dirname(__FILE__))."/environment.php")) { + include_once dirname(dirname(__FILE__))."/environment.php"; + } + + if(!isset($sEnvironment) || empty($sEnvironment)) { + $sEnvironment = 'production'; + } + } + define('CL_ENVIRONMENT', $sEnvironment); + unset($sEnvironment); +} + +/* + * SetEnv CL_VERSION + */ +if (!defined('CL_VERSION')) { + + define('CL_VERSION', '2.1.0'); + +} + +// fixed functions for PHP 5.4 and later +include_once(str_replace('\\', '/', realpath(dirname(__FILE__) . '/..')) . '/includes/functions.php54.php'); + +// simulate PHP 7.3 functions +include_once(str_replace('\\', '/', realpath(dirname(__FILE__) . '/..')) . '/includes/functions.php73.php'); + +// 1. security check: Include security class and invoke basic request checks +include_once(str_replace('\\', '/', realpath(dirname(__FILE__) . '/..')) . '/classes/class.security.php'); +try { + Contenido_Security::checkRequests(); +} catch (Exception $e) { + die($e->getMessage()); +} + + +// "Workaround" for register_globals=off settings. +require_once(dirname(__FILE__) . '/globals_off.inc.php'); +$sPathCfgDir = dirname(dirname(dirname(__FILE__))).'/data/config/'.CL_ENVIRONMENT.'/'; +$sClConfigFile = $sPathCfgDir.'config.php'; +// Check if configuration file exists, this is a basic indicator to find out, if Contenido is installed +if (!file_exists(dirname(__FILE__) . '/config.php') && !file_exists($sClConfigFile)) { + $msg = "

    Fatal Error


    "; + $msg .= "Could not open the configuration file config.php.

    "; + $msg .= "Please make sure that you saved the file in the setup program. If you had to place the file manually on your webserver, make sure that it is placed in your data/config/ENVIROMENT directory."; + die($msg); +} + + +// Include some basic configuration files +if(file_exists($sClConfigFile)) { + include_once($sClConfigFile); +} else { + include_once(dirname(__FILE__) . '/config.php'); +} +include_once($sPathCfgDir.'config.path.php'); +include_once($sPathCfgDir. 'config.misc.php'); +include_once($sPathCfgDir . 'config.colors.php'); +include_once($sPathCfgDir . 'config.path.php'); +include_once($sPathCfgDir . 'config.templates.php'); +include_once($sPathCfgDir . 'cfg_sql.inc.php'); + +$cfg['path']['config'] = $sPathCfgDir; + +// Include userdefined configuration (if available), where you are able to +// extend/overwrite core settings from included configuration files above +if(file_exists($sPathCfgDir.'config.local.php')) { + include_once($sPathCfgDir.'config.local.php'); +} else if(file_exists($cfg['path']['contenido'].$cfg['path']['includes'] . '/config.local.php')) { + include_once($cfg['path']['contenido'] . $cfg['path']['includes'] . '/config.local.php'); +} + +// check $belang and set default +if(!isset($belang) || empty($belang)) { + $belang = "de_DE"; +} + +$I18N_EMULATE_GETTEXT = false; + +// Various base API functions +require_once($cfg['path']['contenido'] . $cfg['path']['includes'] . '/api/functions.api.general.php'); + + +// Initialization of autoloader +include_once($cfg['path']['contenido'] . $cfg['path']['classes'] . 'class.autoload.php'); +cAutoload::initialize($cfg); + + +// 2. security check: Check HTTP parameters, if requested +if ($cfg['http_params_check']['enabled'] === true) { + $oHttpInputValidator = + new HttpInputValidator($cfg['path']['contenido'] . $cfg['path']['includes'] . '/config.http_check.php'); +} + +/* Generate arrays for available login languages + * --------------------------------------------- + * Author: Martin Horwath + */ + +global $cfg; + +$handle = opendir($cfg['path']['contenido'] . $cfg['path']['locale']); + +while ($locale = readdir($handle)) { + if (is_dir($cfg['path']['contenido'] . $cfg['path']['locale'] . $locale) && $locale != '..' && $locale != '.') { + if (file_exists($cfg['path']['contenido'] . $cfg['path']['locale'] . $locale . '/LC_MESSAGES/conlite.po') && + file_exists($cfg['path']['contenido'] . $cfg['path']['locale'] . $locale . '/LC_MESSAGES/conlite.mo') && + file_exists($cfg['path']['contenido'] . $cfg['path']['xml'] . 'lang_'.$locale.'.xml') ) { + + $cfg['login_languages'][] = $locale; + $cfg['lang'][$locale] = 'lang_'.$locale.'.xml'; + } + } +} + + +// Some general includes +cInclude('includes', 'functions.general.php'); +cInclude('conlib', 'prepend.php'); +cInclude('includes', 'functions.i18n.php'); + + +// Initialization of CEC +$_cecRegistry = cApiCECRegistry::getInstance(); +cInclude('config', 'config.chains.php'); + +// fallback to old db-connection settings +if(!isset($cfg['db']) || !is_array($cfg['db'])) { + $cfg['db'] = array( + 'connection' => array( + 'host' => $contenido_host, + 'database' => $contenido_database, + 'user' => $contenido_user, + 'password' => $contenido_password, + ), + 'nolock' => false, // (bool) Flag to not lock tables + 'sequenceTable' => '', // (string) will be set later in startup! + 'haltBehavior' => 'report', // (string) Feasible values are 'yes', 'no' or 'report' + 'haltMsgPrefix' => (isset($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] . ' ' : '', + 'enableProfiling' => false, // (bool) Flag to enable profiling +); +} +// Set default database connection parameter +$cfg['db']['sequenceTable'] = $cfg['tab']['sequence']; +DB_ConLite::setDefaultConfiguration($cfg['db']); + +// @TODO: This should be done by instantiating a DB_ConLite class, creation of DB_ConLite object +checkMySQLConnectivity(); + + +// Initialize UrlBuilder, configuration is set in /contenido/includes/config.misc.php +Contenido_UrlBuilderConfig::setConfig($cfg['url_builder']); + +// set global encoding array +if (!isset($encoding) || !is_array($encoding) || count($encoding) == 0) { + // get encodings of all languages + $db = new DB_ConLite(); + $encoding = array(); + $sql = "SELECT idlang, encoding FROM " . $cfg["tab"]["lang"]; + $db->query($sql); + while ($db->next_record()) { + $encoding[$db->f('idlang')] = $db->f('encoding'); + } +} + +if($cfg['debug']['sendnocacheheader']) { + header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1. + header("Pragma: no-cache"); // HTTP 1.0. + header("Expires: 0"); // Proxies. +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/index.php b/branches/conlite20/conlite/index.php new file mode 100644 index 0000000..3e923d7 --- /dev/null +++ b/branches/conlite20/conlite/index.php @@ -0,0 +1,145 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-20 + * modified 2008-06-16, Holger Librenz, Hotifx: added check for invalid calls + * modified 2008-06-16, Rudi Bieller, Hotifx: added check for XSS at "contenido" and "belang" + * modified 2008-06-25, Timo Trautmann, Contenido Framework Constand added + * modified 2008-07-02, Frederic Schneider, add security fix and include security class + * modified 2009-10-16, Ortwin Pinke, added rewrite of ampersand in frameset url + * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307] + * + * $Id: index.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +// Contenido startup process +include_once ('./includes/startup.php'); + +page_open(array('sess' => 'Contenido_Session', + 'auth' => 'Contenido_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); + +i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang); + +/** + * Bugfix + * @see http://contenido.org/forum/viewtopic.php?t=18291 + * + * added by H. Librenz (2007-12-07) + */ +//includePluginConf(); +require_once $cfg['path']['contenido'] . $cfg['path']['includes'] . 'functions.includePluginConf.php'; +cInclude ("includes", 'cfg_language_de.inc.php'); +cInclude ("includes", 'functions.forms.php'); + +$sess->register("belang"); + +// Create Contenido classes +$db = new DB_ConLite; +$tpl = new Template; + +// Sprache wechseln +if (isset($changelang) && is_numeric($changelang)) +{ + $lang = $changelang; +} + +// Change Client +if (isset($changeclient) && is_numeric($changeclient)) +{ + $client = $changeclient; + unset($lang); +} + +// Preselect client, if definied +if (!$sess->is_registered("client")) { // only check at first login into backend + $iTmpClient = getEffectiveSetting ("backend", "preferred_idclient", false); + + if ($iTmpClient && ($perm->have_perm_client("admin[".$iTmpClient."]") || $perm->have_perm_client("client[".$iTmpClient."]"))) { + $client = $iTmpClient; + unset($lang); + } + unset($iTmpClient); + + /* Remove unused sessions and locks */ + cleanupSessions(); +} + +if (!is_numeric($client) || $client == "") { + $sess->register("client"); + $sql = "SELECT idclient FROM ".$cfg["tab"]["clients"]." ORDER BY idclient ASC"; + $db->query($sql); + $db->next_record(); + $client = $db->f("idclient"); +} else { + $sess->register("client"); +} + +if (!is_numeric($lang) || $lang == "") { + $sess->register("lang"); + // search for the first language of this client + $sql = "SELECT * FROM ".$cfg["tab"]["lang"]." AS A, ".$cfg["tab"]["clients_lang"]." AS B WHERE A.idlang=B.idlang AND idclient='".Contenido_Security::toInteger($client)."' ORDER BY A.idlang ASC"; + $db->query($sql); + $db->next_record(); + $lang = $db->f("idlang"); + + if (!$perm->have_perm_client_lang($client, $lang)) { + $lang = ''; + + while ($db->next_record() && ($lang == '')) { + if ($perm->have_perm_client_lang($client, $db->f('idlang'))) { + $lang = $db->f("idlang"); + } + } + } +} else { + $sess->register("lang"); +} + +$perm->load_permissions(); + +if (isset($area)) +{ + $sess_area = $area; +} else { + $area = (isset($sess_area)) ? $sess_area : 'login'; +} + +$tpl->reset(); + +$tpl->set('s', 'HEADER', str_replace("&", "&", $sess->url('header.php?changelang='.$lang.'&changeclient='.$client))); +$tpl->set('s', 'CONTENT', str_replace("&", "&", $sess->url('frameset.php?area=mycontenido&frame=1&menuless=1&changelang='.$changelang.'&lang='.$lang.'&client='.$client))); +$tpl->set('s', 'VERSION', $cfg["version"]); +$tpl->set('s', 'LOCATION', $cfg['path']['contenido_fullhtml']); +$tpl->set('s', 'CONTENIDOPATH', $cfg["path"]["contenido_fullhtml"]."favicon.ico"); +$tpl->generate($cfg['path']['templates'] . $cfg['templates']['frameset']); + +$db->disconnect(); +page_close(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/locale/conlite.pot b/branches/conlite20/conlite/locale/conlite.pot new file mode 100644 index 0000000..07179ac --- /dev/null +++ b/branches/conlite20/conlite/locale/conlite.pot @@ -0,0 +1,5239 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-06-01 20:24+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=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: includes/include.system_configuration.php:93 +msgid "Versioning activated" +msgstr "" + +#: includes/include.system_configuration.php:93 +#: includes/include.system_configuration.php:94 +#: includes/include.system_configuration.php:95 +msgid "Versioning" +msgstr "" + +#: includes/include.system_configuration.php:94 +msgid "Serverpath to version files" +msgstr "" + +#: includes/include.system_configuration.php:95 +msgid "Maximum number of stored versions" +msgstr "" + +#: includes/include.system_configuration.php:96 +msgid "Check for updates" +msgstr "" + +#: includes/include.system_configuration.php:96 +#: includes/include.system_configuration.php:97 +#: includes/include.system_configuration.php:98 +msgid "Update notifier" +msgstr "" + +#: includes/include.system_configuration.php:97 +msgid "Get news from conlite.org" +msgstr "" + +#: includes/include.system_configuration.php:98 +msgid "Update check period (minutes)" +msgstr "" + +#: includes/include.system_configuration.php:99 +msgid "Clickable menu in backend" +msgstr "" + +#: includes/include.system_configuration.php:99 +#: includes/include.system_configuration.php:100 +#: includes/include.system_configuration.php:101 +#: includes/include.system_configuration.php:102 +#: includes/include.system_configuration.php:103 +#: includes/include.system_configuration.php:104 +msgid "Backend" +msgstr "" + +#: includes/include.system_configuration.php:100 +msgid "Use passwordrequest in Backend" +msgstr "" + +#: includes/include.system_configuration.php:101 +msgid "Activate maintenance mode" +msgstr "" + +#: includes/include.system_configuration.php:102 +msgid "Use editarea for code highlighting" +msgstr "" + +#: includes/include.system_configuration.php:103 +msgid "Use TinyMce as insight editor" +msgstr "" + +#: includes/include.system_configuration.php:104 +msgid "Default client (ID)" +msgstr "" + +#: includes/include.system_configuration.php:105 +msgid "Mailserver host" +msgstr "" + +#: includes/include.system_configuration.php:105 +#: includes/include.system_configuration.php:106 +#: includes/include.system_configuration.php:107 +msgid "Mailserver" +msgstr "" + +#: includes/include.system_configuration.php:106 +msgid "Mailserver sender mail" +msgstr "" + +#: includes/include.system_configuration.php:107 +msgid "Mailserver sender name" +msgstr "" + +#: includes/include.system_configuration.php:109 +msgid "Generate basehref" +msgstr "" + +#: includes/include.system_configuration.php:109 +#: includes/include.system_configuration.php:110 +msgid "Development" +msgstr "" + +#: includes/include.system_configuration.php:110 +msgid "Use image magic (if available)" +msgstr "" + +#: includes/include.system_configuration.php:123 +msgid "Update check period must be at least 60 minutes." +msgstr "" + +#: includes/include.system_configuration.php:133 +#: includes/include.lang_edit.php:140 includes/include.client_edit.php:172 +#: includes/grouprights.inc.php:335 +#: includes/include.grouprights_overview.php:65 +#: includes/include.rights_overview.php:141 +msgid "Changes saved" +msgstr "" + +#: includes/include.system_configuration.php:142 +msgid "System Configuration" +msgstr "" + +#: includes/include.system_configuration.php:192 +msgid "Access denied" +msgstr "" + +#: includes/include.lang_edit.php:84 includes/include.lang_overview.php:103 +msgid "New language" +msgstr "" + +#: includes/include.lang_edit.php:127 includes/include.logs.php:46 +#: includes/grouprights_lay.inc.php:55 includes/grouprights_lay.inc.php:74 +#: includes/include.tpl_edit_form.php:39 includes/include.js_edit_form.php:50 +#: includes/include.grouprights_create.php:42 +#: includes/include.html_tpl_history.php:59 includes/rights_lay.inc.php:57 +#: includes/rights_mod.inc.php:55 includes/include.client_artspec.php:40 +#: includes/include.client_artspec.php:50 +#: includes/include.client_artspec.php:60 +#: includes/include.client_artspec.php:70 +#: includes/include.con_edit_form.php:764 includes/grouprights_str.inc.php:54 +#: includes/include.upl_dirs_overview.php:408 +#: includes/include.upl_dirs_overview.php:555 +#: includes/include.tplcfg_edit_form.php:144 +#: includes/include.con_art_overview.php:1013 +#: includes/grouprights_tpl.inc.php:53 includes/rights_con.inc.php:56 +#: includes/include.client_edit.php:48 includes/include.mod_history.php:52 +#: includes/include.js_history.php:55 includes/include.lay_history.php:46 +#: includes/include.grouprights_overview.php:42 +#: includes/include.lay_edit_form.php:43 includes/include.lay_edit_form.php:52 +#: includes/include.rights_overview.php:49 +#: includes/grouprights_area.inc.php:65 includes/grouprights_mod.inc.php:54 +#: includes/grouprights_members.inc.php:41 +#: includes/include.html_tpl_edit_form.php:50 +#: includes/include.style_history.php:57 +#: includes/include.style_edit_form.php:51 includes/grouprights_con.inc.php:56 +#: includes/include.rights_create.php:43 includes/rights_str.inc.php:55 +#: includes/rights_area.inc.php:58 includes/rights_tpl.inc.php:55 +#: includes/include.system_purge.php:37 +msgid "Permission denied" +msgstr "" + +#: includes/include.lang_edit.php:228 +msgid "Left to right" +msgstr "" + +#: includes/include.lang_edit.php:228 +msgid "Right to left" +msgstr "" + +#: includes/include.lang_edit.php:242 includes/cfg_language_de.inc.php:191 +msgid "Edit language" +msgstr "" + +#: includes/include.lang_edit.php:244 +msgid "Language name" +msgstr "" + +#: includes/include.lang_edit.php:245 +#: includes/include.frontend.user_edit.php:188 +msgid "Active" +msgstr "" + +#: includes/include.lang_edit.php:247 includes/include.lang_edit.php:249 +#: includes/include.con_editcontent.php:392 main.loginform.php:156 +msgid "Language" +msgstr "" + +#: includes/include.lang_edit.php:248 +msgid "Encoding" +msgstr "" + +#: includes/include.lang_edit.php:250 includes/include.rights_overview.php:260 +#: includes/include.rights_create.php:204 +msgid "Country" +msgstr "" + +#: includes/include.lang_edit.php:251 +msgid "Text direction" +msgstr "" + +#: includes/include.lang_edit.php:253 includes/include.lang_edit.php:256 +#: includes/include.mycontenido_settings.php:143 +msgid "Time format" +msgstr "" + +#: includes/include.lang_edit.php:254 +#: includes/include.mycontenido_settings.php:141 +msgid "Date/Time format" +msgstr "" + +#: includes/include.lang_edit.php:255 +#: includes/include.mycontenido_settings.php:142 +msgid "Date format" +msgstr "" + +#: includes/include.CMS_SIMPLELINK.php:139 includes/include.CMS_LINK.php:142 +#, php-format +msgid "Edit link for container %s" +msgstr "" + +#: includes/include.CMS_SIMPLELINK.php:150 scripts/langref.php:31 +msgid "Link" +msgstr "" + +#: includes/include.CMS_SIMPLELINK.php:153 includes/include.CMS_IMG.php:278 +#: includes/grouprights_lay.inc.php:86 includes/include.tpl_edit_form.php:154 +#: includes/include.js_edit_form.php:176 includes/include.CMS_LINK.php:341 +#: includes/include.grouprights_create.php:112 +#: includes/include.html_tpl_history.php:164 includes/rights_lay.inc.php:76 +#: includes/include.todo.popup.php:70 includes/rights_mod.inc.php:76 +#: includes/include.mycontenido.tasks.edit.php:71 +#: includes/grouprights_tpl.inc.php:73 includes/include.mod_edit_form.php:385 +#: includes/include.mod_history.php:132 includes/include.js_history.php:156 +#: includes/include.lay_history.php:121 includes/include.upl_edit.php:95 +#: includes/include.grouprights_overview.php:118 +#: includes/include.lay_edit_form.php:205 includes/grouprights_mod.inc.php:74 +#: includes/include.html_tpl_edit_form.php:214 +#: includes/include.style_history.php:161 +#: includes/include.style_edit_form.php:198 includes/include.mod_new.php:109 +#: includes/rights_tpl.inc.php:74 +#: templates/standard/template.tpl_edit_form.html:29 +#: templates/standard/template.upl_files_overview.html:84 +#: templates/standard/template.mod_edit_form.html:33 +#: templates/standard/template.lay_edit_form.html:32 scripts/langref.php:28 +msgid "Description" +msgstr "" + +#: includes/functions.upl.php:791 +msgid "OpenOffice.org Presentation" +msgstr "" + +#: includes/functions.upl.php:792 +msgid "OpenOffice.org Presentation Template" +msgstr "" + +#: includes/functions.upl.php:793 +msgid "Microsoft PowerPoint Screen Presentation" +msgstr "" + +#: includes/functions.upl.php:794 includes/functions.upl.php:796 +msgid "Microsoft PowerPoint Presentation Template" +msgstr "" + +#: includes/functions.upl.php:795 +msgid "KDE KPresenter Document" +msgstr "" + +#: includes/functions.upl.php:799 +msgid "Microsoft Word Document or regular text file" +msgstr "" + +#: includes/functions.upl.php:800 +msgid "Microsoft Word Template" +msgstr "" + +#: includes/functions.upl.php:801 +msgid "OpenOffice.org Text Document" +msgstr "" + +#: includes/functions.upl.php:802 +msgid "OpenOffice.org Text Document Template" +msgstr "" + +#: includes/functions.upl.php:803 +msgid "StarOffice 5.0 Text Document" +msgstr "" + +#: includes/functions.upl.php:804 +msgid "KDE KWord Document" +msgstr "" + +#: includes/functions.upl.php:807 +msgid "Microsoft Excel Worksheet" +msgstr "" + +#: includes/functions.upl.php:808 +msgid "OpenOffice.org Table" +msgstr "" + +#: includes/functions.upl.php:809 +msgid "OpenOffice.org Table Template" +msgstr "" + +#: includes/functions.upl.php:810 +msgid "Microsoft Excel File" +msgstr "" + +#: includes/functions.upl.php:811 +msgid "Microsoft Excel Template" +msgstr "" + +#: includes/functions.upl.php:812 +msgid "Comma Seperated Value File" +msgstr "" + +#: includes/functions.upl.php:813 +msgid "KDE KSpread Document" +msgstr "" + +#: includes/functions.upl.php:814 +msgid "StarOffice 5.0 Table" +msgstr "" + +#: includes/functions.upl.php:817 +msgid "Plain Text" +msgstr "" + +#: includes/functions.upl.php:818 +msgid "Rich Text Format" +msgstr "" + +#: includes/functions.upl.php:821 +msgid "GIF Image" +msgstr "" + +#: includes/functions.upl.php:822 +msgid "PNG Image" +msgstr "" + +#: includes/functions.upl.php:823 includes/functions.upl.php:824 +msgid "JPEG Image" +msgstr "" + +#: includes/functions.upl.php:825 +msgid "TIFF Image" +msgstr "" + +#: includes/functions.upl.php:826 +msgid "Adobe Photoshop Image" +msgstr "" + +#: includes/functions.upl.php:829 includes/functions.upl.php:830 +msgid "Hypertext Markup Language Document" +msgstr "" + +#: includes/functions.upl.php:831 +msgid "Cascading Style Sheets" +msgstr "" + +#: includes/functions.upl.php:834 +msgid "LHA Archive" +msgstr "" + +#: includes/functions.upl.php:835 +msgid "RAR Archive" +msgstr "" + +#: includes/functions.upl.php:836 +msgid "ARJ Archive" +msgstr "" + +#: includes/functions.upl.php:837 +msgid "bz2-compressed File" +msgstr "" + +#: includes/functions.upl.php:838 +msgid "bzip-compressed File" +msgstr "" + +#: includes/functions.upl.php:839 +msgid "ZIP Archive" +msgstr "" + +#: includes/functions.upl.php:840 +msgid "TAR Archive" +msgstr "" + +#: includes/functions.upl.php:841 +msgid "GZ Compressed File" +msgstr "" + +#: includes/functions.upl.php:844 +msgid "C Program Code" +msgstr "" + +#: includes/functions.upl.php:847 +msgid "C++ Program Code" +msgstr "" + +#: includes/functions.upl.php:849 +msgid "C or C++ Program Header" +msgstr "" + +#: includes/functions.upl.php:852 +msgid "PHP Program Code" +msgstr "" + +#: includes/functions.upl.php:853 +msgid "PHP Source File" +msgstr "" + +#: includes/functions.upl.php:855 +msgid "Adobe Acrobat Portable Document" +msgstr "" + +#: includes/functions.upl.php:858 +msgid "QuickTime Movie" +msgstr "" + +#: includes/functions.upl.php:859 +msgid "avi Movie" +msgstr "" + +#: includes/functions.upl.php:861 +msgid "MPEG Movie" +msgstr "" + +#: includes/functions.upl.php:862 +msgid "Windows Media Video" +msgstr "" + +#: includes/functions.upl.php:864 +msgid "-File" +msgstr "" + +#: includes/include.frontend.user_edit.php:50 +#: includes/include.frontend.user_edit.php:70 +#: includes/include.frontend.user_edit.php:107 +msgid "-- new user --" +msgstr "" + +#: includes/include.frontend.user_edit.php:110 +msgid "Username empty or not set! Please choose one." +msgstr "" + +#: includes/include.frontend.user_edit.php:115 +msgid "Password not set right now!" +msgstr "" + +#: includes/include.frontend.user_edit.php:121 +msgid "Could not set new username: Username already exists" +msgstr "" + +#: includes/include.frontend.user_edit.php:128 +msgid "Could not set new password: Passwords don't match" +msgstr "" + +#: includes/include.frontend.user_edit.php:177 +#: includes/cfg_language_de.inc.php:176 +msgid "Edit user" +msgstr "" + +#: includes/include.frontend.user_edit.php:185 +#: includes/include.rights_left_top.php:115 +msgid "User name" +msgstr "" + +#: includes/include.frontend.user_edit.php:186 +#: includes/include.mycontenido_settings.php:116 +#: includes/include.rights_overview.php:217 +#: includes/include.rights_create.php:162 +msgid "New password" +msgstr "" + +#: includes/include.frontend.user_edit.php:187 +msgid "New password (again)" +msgstr "" + +#: includes/include.frontend.user_edit.php:215 +msgid "WARNING" +msgstr "" + +#: includes/include.frontend.user_edit.php:215 +#, php-format +msgid "" +"The plugin %s delivered an array for the displayed titles, but did not " +"return an array for the contents." +msgstr "" + +#: includes/include.frontend.user_edit.php:237 +#: includes/include.tpl_visualedit.php:146 +#: includes/include.tpl_edit_form.php:86 includes/include.tpl_edit_form.php:91 +#: includes/include.tpl_edit_form.php:203 +#: includes/include.tplcfg_edit_form.php:301 +#: includes/include.con_left_top.php:374 +#: includes/include.rights_overview.php:455 +#: includes/include.str_overview.php:188 includes/include.str_overview.php:656 +msgid "none" +msgstr "" + +#: includes/include.frontend.user_edit.php:240 +#: includes/include.rights_overview.php:458 +msgid "Group membership" +msgstr "" + +#: includes/include.frontend.user_edit.php:241 +#: includes/include.con_left_top.php:275 includes/include.upl_edit.php:102 +msgid "Author" +msgstr "" + +#: includes/include.frontend.user_edit.php:242 +#: includes/include.upl_edit.php:103 +msgid "Last modified by" +msgstr "" + +#: includes/include.lay_preview.php:29 includes/include.tpl_visualedit.php:84 +msgid "No such layout" +msgstr "" + +#: includes/rights.inc.php:273 includes/functions.stat.php:992 +#: includes/functions.stat.php:1018 +#: includes/include.grouprights_left_top.php:59 +#: includes/include.con_art_overview.php:866 +#: includes/include.rights_left_top.php:76 includes/grouprights.inc.php:157 +msgid "All" +msgstr "" + +#: includes/rights.inc.php:275 includes/grouprights.inc.php:159 +msgid "Article rights" +msgstr "" + +#: includes/rights.inc.php:277 includes/grouprights.inc.php:161 +msgid "Category rights" +msgstr "" + +#: includes/rights.inc.php:279 includes/grouprights.inc.php:163 +msgid "Template rights" +msgstr "" + +#: includes/rights.inc.php:281 includes/grouprights.inc.php:165 +msgid "Plugin/Other rights" +msgstr "" + +#: includes/rights.inc.php:343 +msgid "" +"The selected user is a system administrator. A system administrator has all " +"rights for all clients for all languages and therefore rights can't be " +"specified in more detail." +msgstr "" + +#: includes/rights.inc.php:348 +msgid "" +"The selected user is assigned to clients as admin, only. An admin has all " +"rights for a client and therefore rights can't be specified in more detail." +msgstr "" + +#: includes/rights.inc.php:352 +msgid "Current user doesn't have any rights to any client/language." +msgstr "" + +#: includes/include.grouprights_menu.php:178 +#, php-format +msgid "Do you really want to delete the group %s?" +msgstr "" + +#: includes/include.grouprights_menu.php:196 +#: includes/cfg_language_de.inc.php:182 +msgid "Delete group" +msgstr "" + +#: includes/include.grouprights_menu.php:197 +#, php-format +msgid "Do you really want to delete the following group:

    %s
    " +msgstr "" + +#: includes/include.upl_left_top.php:53 includes/include.tpl_new.php:41 +#: includes/include.lay_new.php:40 includes/include.js_left_top.php:54 +#: includes/include.lang_left_top.php:82 +#: includes/include.style_left_top.php:54 +#: includes/include.frontend.left_top.php:181 +#: includes/include.frontend.left_top.php:445 includes/include.mod_new.php:76 +#: includes/include.html_tpl_left_top.php:54 +msgid "No Client selected" +msgstr "" + +#: includes/include.upl_left_top.php:74 +#: includes/include.rights_left_top.php:159 +#: includes/include.frontend.left_top.php:265 includes/include.mod_new.php:169 +msgid "Search for" +msgstr "" + +#: includes/include.upl_left_top.php:112 +msgid "Create directory in" +msgstr "" + +#: includes/include.mod_sync.php:39 +msgid "Syncing Modules!" +msgstr "" + +#: includes/include.mod_sync.php:44 includes/include.mod_sync.php:56 +msgid "Module " +msgstr "" + +#: includes/include.mod_sync.php:44 +msgid "nothing to do" +msgstr "" + +#: includes/include.mod_sync.php:56 +msgid "synchronized" +msgstr "" + +#: includes/include.mod_sync.php:61 +msgid "No modules to sync!" +msgstr "" + +#: includes/include.mod_sync.php:66 +msgid "Nothing to do!" +msgstr "" + +#: includes/include.logs.php:64 +msgid "Submit query" +msgstr "" + +#: includes/include.logs.php:75 +msgid "All users" +msgstr "" + +#: includes/include.logs.php:77 +msgid "All actions" +msgstr "" + +#: includes/include.logs.php:199 +msgid "Unlimited" +msgstr "" + +#: includes/include.logs.php:200 includes/include.logs.php:201 +#: includes/include.logs.php:202 includes/include.logs.php:203 +#: includes/include.logs.php:204 +msgid "Entries" +msgstr "" + +#: includes/include.logs.php:275 +msgid "No results" +msgstr "" + +#: includes/include.frontend.group_rights.php:47 +msgid "Invalid plugin" +msgstr "" + +#: includes/include.frontend.group_rights.php:96 +#, php-format +msgid "Permissions for plugin '%s'" +msgstr "" + +#: includes/include.frontend.group_rights.php:101 +msgid "(All)" +msgstr "" + +#: includes/include.frontend.group_rights.php:109 +msgid "Global rights" +msgstr "" + +#: includes/include.frontend.group_rights.php:131 +msgid "No items found" +msgstr "" + +#: includes/include.style_files_overview.php:104 +#: includes/include.js_files_overview.php:104 +#: includes/include.mod_package.php:111 +#: includes/include.html_tpl_files_overview.php:105 +msgid "is not readable!" +msgstr "" + +#: includes/include.style_files_overview.php:131 +#: includes/include.js_files_overview.php:131 +#: includes/include.system_db_backup.php:294 +#: includes/include.html_tpl_files_overview.php:132 +msgid "Delete File" +msgstr "" + +#: includes/include.style_files_overview.php:132 +#: includes/include.js_files_overview.php:132 +#: includes/include.html_tpl_files_overview.php:133 +#, php-format +msgid "Do you really want to delete the following file:

    %s
    " +msgstr "" + +#: includes/include.style_files_overview.php:155 +#: includes/include.js_files_overview.php:155 +#: includes/include.mod_package.php:123 +#: includes/include.html_tpl_files_overview.php:156 +msgid "Directory is not existing or readable!" +msgstr "" + +#: includes/include.CMS_IMG.php:186 includes/include.CMS_EASYIMG.php:146 +#, php-format +msgid "Edit image for container %s" +msgstr "" + +#: includes/include.CMS_IMG.php:235 includes/include.CMS_LINK.php:180 +#: includes/include.CMS_LINK.php:182 includes/include.CMS_SWF.php:80 +#: includes/include.con_left_top.php:449 +#: includes/include.con_art_overview.php:523 +#: includes/include.upl_search_results.php:55 +#: includes/include.mod_package.php:180 +#: includes/include.mycontenido_lastarticles.php:183 +#: includes/cfg_language_de.inc.php:370 backend_search.php:669 +msgid "None" +msgstr "" + +#: includes/include.CMS_IMG.php:275 +msgid "Directory / File" +msgstr "" + +#: includes/include.CMS_IMG.php:283 +#: includes/include.upl_files_overview.php:526 +#: includes/include.upl_search_results.php:286 +#: includes/include.upl_edit.php:101 +msgid "Preview" +msgstr "" + +#: includes/include.tpl_new.php:39 +msgid "New template" +msgstr "" + +#: includes/functions.stat.php:44 +msgid "Info about article" +msgstr "" + +#: includes/functions.stat.php:46 +msgid "Info about directory" +msgstr "" + +#: includes/functions.stat.php:285 +msgid "Category is online" +msgstr "" + +#: includes/functions.stat.php:287 +msgid "Category is offline" +msgstr "" + +#: includes/functions.stat.php:313 includes/functions.stat.php:314 +#: includes/functions.stat.php:644 includes/functions.stat.php:645 +#: includes/grouprights_str.inc.php:215 +#: includes/include.upl_dirs_overview.php:56 includes/rights_con.inc.php:227 +#: includes/include.str_overview.php:169 includes/grouprights_con.inc.php:241 +#: includes/rights_str.inc.php:221 +msgid "Open category" +msgstr "" + +#: includes/functions.stat.php:478 +msgid "Sum" +msgstr "" + +#: includes/functions.stat.php:989 includes/functions.stat.php:1015 +#: includes/include.stat_overview.php:50 +msgid "Top 10" +msgstr "" + +#: includes/functions.stat.php:990 includes/functions.stat.php:1016 +#: includes/include.stat_overview.php:53 +msgid "Top 20" +msgstr "" + +#: includes/functions.stat.php:991 includes/functions.stat.php:1017 +#: includes/include.stat_overview.php:56 +msgid "Top 30" +msgstr "" + +#: includes/include.upl_files_overview.php:84 +#: includes/include.upl_edit.php:304 includes/include.upl_files_upload.php:67 +msgid "Directory not writable" +msgstr "" + +#: includes/include.upl_files_overview.php:240 +#, php-format +msgid "" +"The uploaded file (%s) exceeds the upload_max_filesize directive in php.ini." +msgstr "" + +#: includes/include.upl_files_overview.php:250 +#, php-format +msgid "Error while uploading file (%s)." +msgstr "" + +#: includes/include.upl_files_overview.php:302 +msgid "Errors while uploading file(s). Some or all files were not uploaded." +msgstr "" + +#: includes/include.upl_files_overview.php:386 +#: includes/include.upl_files_overview.php:388 +msgid "Use file" +msgstr "" + +#: includes/include.upl_files_overview.php:449 +#: includes/include.upl_files_overview.php:452 +#: includes/include.upl_files_overview.php:454 +#: includes/include.upl_search_results.php:190 +#: includes/include.upl_search_results.php:195 +#: includes/include.upl_search_results.php:198 +msgid "Filename / Description" +msgstr "" + +#: includes/include.upl_files_overview.php:459 +#: includes/include.upl_files_overview.php:462 +#: includes/include.upl_files_overview.php:464 +#: includes/include.upl_search_results.php:218 +#: includes/include.upl_search_results.php:223 +#: includes/include.upl_search_results.php:226 +msgid "Size" +msgstr "" + +#: includes/include.upl_files_overview.php:469 +#: includes/include.upl_files_overview.php:472 +#: includes/include.upl_files_overview.php:474 +#: includes/include.systemsettings.php:60 +#: includes/include.systemsettings.php:170 +#: includes/include.upl_search_results.php:232 +#: includes/include.upl_search_results.php:237 +#: includes/include.upl_search_results.php:240 +#: includes/include.mod_edit_form.php:384 +#: includes/include.clientsettings.php:98 +#: includes/include.clientsettings.php:185 includes/include.mod_new.php:87 +#: includes/include.mod_new.php:110 +msgid "Type" +msgstr "" + +#: includes/include.upl_files_overview.php:480 +msgid "Delete Files" +msgstr "" + +#: includes/include.upl_files_overview.php:480 +msgid "Are you sure you want to delete the selected files?" +msgstr "" + +#: includes/include.upl_files_overview.php:481 +msgid "Delete selected files" +msgstr "" + +#: includes/include.upl_files_overview.php:497 +msgid "Flip Selection" +msgstr "" + +#: includes/include.upl_files_overview.php:502 +#: includes/include.upl_files_upload.php:59 +msgid "Path:" +msgstr "" + +#: includes/include.upl_files_overview.php:517 +#: includes/include.upl_search_results.php:276 +msgid "Files per Page" +msgstr "" + +#: includes/include.upl_files_overview.php:525 +msgid "Mark" +msgstr "" + +#: includes/include.upl_files_overview.php:530 +#: includes/include.mycontenido.tasks.php:276 +#: includes/include.con_art_overview.php:83 +#: includes/include.frontend.left_top.php:165 backend_search.php:497 +#: templates/standard/template.str_overview.html:233 +msgid "Actions" +msgstr "" + +#: includes/include.upl_files_overview.php:632 +msgid "Display properties" +msgstr "" + +#: includes/include.upl_files_overview.php:658 +#: includes/include.upl_search_results.php:417 +#: classes/class.cms_filelist.php:540 classes/class.cms_filelist.php:541 +msgid "No files found" +msgstr "" + +#: includes/include.upl_files_overview.php:681 +#: includes/include.upl_search_results.php:445 +msgid "Previous Page" +msgstr "" + +#: includes/include.upl_files_overview.php:687 +#: includes/include.upl_search_results.php:452 +msgid "Next Page" +msgstr "" + +#: includes/include.upl_files_overview.php:727 +#: includes/include.upl_search_results.php:490 +msgid "Page" +msgstr "" + +#: includes/include.upl_files_overview.php:752 +#: includes/cfg_language_de.inc.php:143 +msgid "Delete file" +msgstr "" + +#: includes/include.upl_files_overview.php:753 +msgid "Do you really want to delete the following file:
    " +msgstr "" + +#: includes/include.upl_files_overview.php:884 +#: includes/include.upl_search_results.php:605 +msgid "Enter new filename" +msgstr "" + +#: includes/grouprights_lay.inc.php:85 includes/rights_lay.inc.php:75 +msgid "Layout name" +msgstr "" + +#: includes/grouprights_lay.inc.php:113 includes/rights_lay.inc.php:100 +#: includes/rights_mod.inc.php:99 includes/grouprights_str.inc.php:105 +#: includes/grouprights_tpl.inc.php:101 includes/rights_con.inc.php:112 +#: includes/grouprights_area.inc.php:86 includes/grouprights_mod.inc.php:99 +#: includes/grouprights_con.inc.php:111 includes/rights_str.inc.php:106 +#: includes/rights_area.inc.php:87 includes/rights_tpl.inc.php:100 +msgid "Check all" +msgstr "" + +#: includes/include.grouprights_left_top.php:60 +#: includes/include.rights_left_top.php:77 +msgid "Frontend only" +msgstr "" + +#: includes/include.grouprights_left_top.php:61 +#: includes/include.rights_left_top.php:78 +msgid "Backend only" +msgstr "" + +#: includes/include.grouprights_left_top.php:90 +#: includes/cfg_language_de.inc.php:181 +#: includes/include.frontend.left_top.php:442 +msgid "Create group" +msgstr "" + +#: includes/include.tpl_edit_form.php:43 +msgid "- New Template -" +msgstr "" + +#: includes/include.tpl_edit_form.php:148 includes/cfg_language_de.inc.php:165 +msgid "Edit template" +msgstr "" + +#: includes/include.tpl_edit_form.php:151 +#: includes/include.js_edit_form.php:175 +#: includes/include.html_tpl_history.php:163 +#: includes/include.systemsettings.php:61 +#: includes/include.systemsettings.php:174 +#: includes/include.rights_left_top.php:116 +#: includes/include.mod_edit_form.php:377 +#: includes/include.mod_edit_form.php:381 includes/include.mod_history.php:131 +#: includes/include.js_history.php:155 includes/include.mod_package.php:235 +#: includes/include.mod_package.php:253 includes/include.mod_package.php:422 +#: includes/include.clientsettings.php:98 +#: includes/include.clientsettings.php:189 +#: includes/include.lay_history.php:120 includes/include.lay_edit_form.php:204 +#: includes/include.rights_overview.php:209 +#: includes/include.html_tpl_edit_form.php:213 +#: includes/include.style_history.php:160 +#: includes/include.style_edit_form.php:197 includes/include.mod_new.php:87 +#: includes/include.rights_create.php:156 +#: templates/standard/template.tpl_edit_form.html:19 +#: templates/standard/template.mod_edit_form.html:23 +#: templates/standard/template.lay_edit_form.html:22 +#: classes/class.ajax.php:162 classes/class.ajax.php:179 +msgid "Name" +msgstr "" + +#: includes/include.tpl_edit_form.php:158 +#: includes/include.tpl_edit_form.php:234 +msgid "Default" +msgstr "" + +#: includes/include.tpl_edit_form.php:160 +#: includes/include.lay_overview.php:101 +#: templates/standard/template.tpl_edit_form.html:42 +msgid "Layout" +msgstr "" + +#: includes/include.tpl_edit_form.php:161 +#: templates/standard/template.tpl_edit_form.html:55 +msgid "Layout description" +msgstr "" + +#: includes/include.js_edit_form.php:159 +#: includes/include.html_tpl_edit_form.php:197 +#: includes/include.style_edit_form.php:180 +msgid "Edit file" +msgstr "" + +#: includes/include.js_edit_form.php:177 +#: includes/include.html_tpl_history.php:165 +#: includes/include.js_history.php:157 includes/include.lay_history.php:122 +#: includes/include.lay_edit_form.php:206 +#: includes/include.lay_edit_form.php:217 +#: includes/include.html_tpl_edit_form.php:215 +#: includes/include.style_history.php:162 +#: includes/include.style_edit_form.php:199 +msgid "Code" +msgstr "" + +#: includes/include.CMS_LINK.php:153 +msgid "External link" +msgstr "" + +#: includes/include.CMS_LINK.php:210 +msgid "Internal link" +msgstr "" + +#: includes/include.CMS_LINK.php:215 includes/include.CMS_LINK.php:244 +#: includes/include.CMS_LINK.php:273 includes/include.CMS_LINK.php:288 +#: includes/include.CMS_LINK.php:304 includes/functions.general.php:1136 +#: includes/functions.general.php:1176 includes/include.str_overview.php:90 +#: classes/class.cms_teaser.php:353 classes/class.cms_teaser.php:382 +#: classes/class.cms_teaser.php:419 classes/class.cms_teaser.php:447 +#: classes/class.cms_teaser.php:476 classes/class.cms_teaser.php:539 +msgid "Please choose" +msgstr "" + +#: includes/include.CMS_LINK.php:240 +msgid "Link to a document" +msgstr "" + +#: includes/include.CMS_LINK.php:270 +msgid "Link to an image" +msgstr "" + +#: includes/include.CMS_LINK.php:285 +msgid "Link to an archive" +msgstr "" + +#: includes/include.CMS_LINK.php:300 +msgid "Link to a media file" +msgstr "" + +#: includes/include.CMS_LINK.php:316 +msgid "Link to any file" +msgstr "" + +#: includes/include.CMS_LINK.php:340 +msgid "Upload file" +msgstr "" + +#: includes/include.CMS_LINK.php:345 +msgid "Target frame" +msgstr "" + +#: includes/include.CMS_LINK.php:353 +msgid "Open link in new window" +msgstr "" + +#: includes/include.CMS_LINK.php:375 +msgid "Open in new window" +msgstr "" + +#: includes/include.tpl_overview.php:96 includes/include.lay_overview.php:83 +#: includes/include.mod_overview.php:196 +msgid "Click for more information about usage" +msgstr "" + +#: includes/include.tpl_overview.php:99 includes/cfg_language_de.inc.php:164 +msgid "Delete template" +msgstr "" + +#: includes/include.tpl_overview.php:100 +#, php-format +msgid "Do you really want to delete the following template:

    %s
    " +msgstr "" + +#: includes/include.tpl_overview.php:105 +msgid "Template in use, cannot delete" +msgstr "" + +#: includes/include.tpl_overview.php:111 includes/cfg_language_de.inc.php:167 +#: includes/cfg_language_de.inc.php:168 +#: templates/standard/template.symbolhelp.html:1016 +msgid "Duplicate template" +msgstr "" + +#: includes/include.tpl_overview.php:128 +#, php-format +msgid "The template '%s' is used for following categories and articles" +msgstr "" + +#: includes/functions.system.php:55 +msgid "Can't clear install error log : Access is denied!" +msgstr "" + +#: includes/functions.system.php:60 +msgid "error log successfully cleared" +msgstr "" + +#: includes/functions.system.php:278 +msgid "Contenido version" +msgstr "" + +#: includes/functions.system.php:281 +msgid "Contenido path" +msgstr "" + +#: includes/functions.system.php:283 +msgid "Contenido HTML path" +msgstr "" + +#: includes/functions.system.php:285 +msgid "Contenido full HTML path" +msgstr "" + +#: includes/functions.system.php:287 +msgid "Contenido frontend path" +msgstr "" + +#: includes/functions.system.php:289 +msgid "Contenido PHPLIB path" +msgstr "" + +#: includes/functions.system.php:291 +msgid "Contenido wysiwyg path" +msgstr "" + +#: includes/functions.system.php:293 +msgid "Contenido wysiwyg HTML path" +msgstr "" + +#: includes/functions.system.php:296 +msgid "Host name" +msgstr "" + +#: includes/functions.system.php:299 +msgid "Browser path" +msgstr "" + +#: includes/functions.system.php:321 +msgid "client settings" +msgstr "" + +#: includes/functions.system.php:322 +msgid "values" +msgstr "" + +#: includes/functions.system.php:353 +msgid "language(s)" +msgstr "" + +#: includes/functions.system.php:362 +msgid "htmlpath" +msgstr "" + +#: includes/functions.system.php:366 +msgid "frontendpath" +msgstr "" + +#: includes/functions.system.php:378 +msgid "No permissions!" +msgstr "" + +#: includes/functions.system.php:384 +msgid "Number of installed clients: " +msgstr "" + +#: includes/functions.system.php:387 +msgid "Client informations" +msgstr "" + +#: includes/functions.system.php:394 +msgid "Number of users" +msgstr "" + +#: includes/functions.system.php:401 includes/include.stat_overview.php:91 +msgid "Number of articles" +msgstr "" + +#: includes/functions.system.php:404 +msgid "Server operating system" +msgstr "" + +#: includes/functions.system.php:408 +msgid "PHP database extension" +msgstr "" + +#: includes/functions.system.php:410 +msgid "Database server version" +msgstr "" + +#: includes/functions.system.php:413 +msgid "Installed PHP version" +msgstr "" + +#: includes/functions.system.php:418 includes/functions.system.php:422 +#: includes/functions.system.php:426 includes/functions.system.php:447 +msgid "activated" +msgstr "" + +#: includes/functions.system.php:418 includes/functions.system.php:422 +#: includes/functions.system.php:426 includes/functions.system.php:447 +msgid "deactivated" +msgstr "" + +#: includes/functions.system.php:439 +msgid "nothing disabled" +msgstr "" + +#: includes/functions.system.php:440 +msgid "Disabled functions" +msgstr "" + +#: includes/functions.system.php:443 +msgid "loaded" +msgstr "" + +#: includes/functions.system.php:443 +msgid "not loaded" +msgstr "" + +#: includes/functions.system.php:444 +msgid "Gettext extension" +msgstr "" + +#: includes/functions.system.php:455 includes/main.login.php:213 +msgid "Settings" +msgstr "" + +#: includes/functions.system.php:456 +msgid "Values" +msgstr "" + +#: includes/functions.system.php:473 +msgid "GD library" +msgstr "" + +#: includes/functions.system.php:636 +msgid "an error occured while sending your bug report! Please try again" +msgstr "" + +#: includes/functions.system.php:639 +msgid "bug report forwarded" +msgstr "" + +#: includes/functions.system.php:645 +msgid "please fill out all mandatory fields" +msgstr "" + +#: includes/functions.system.php:649 +msgid "please enter a valid E-Mail adress" +msgstr "" + +#: includes/functions.system.php:653 +msgid "you must agree the declaration of consent" +msgstr "" + +#: includes/include.grouprights_create.php:57 +msgid "New Group" +msgstr "" + +#: includes/include.grouprights_create.php:71 +msgid "group created" +msgstr "" + +#: includes/include.grouprights_create.php:76 +msgid "Group couldn't created" +msgstr "" + +#: includes/include.grouprights_create.php:94 +#: includes/include.CMS_EASYIMG.php:158 includes/include.client_edit.php:227 +#: includes/include.grouprights_overview.php:102 +#: includes/include.rights_overview.php:192 +#: includes/include.rights_create.php:142 +#: classes/widgets/class.widgets.tableedit.php:188 +#: classes/widgets/class.widgets.views.php:80 classes/class.ui.php:351 +msgid "Save changes" +msgstr "" + +#: includes/include.grouprights_create.php:96 +#: includes/include.client_edit.php:236 +#: includes/include.grouprights_overview.php:106 +#: includes/include.grouprights_overview.php:209 +#: includes/include.rights_overview.php:197 +#: includes/include.rights_overview.php:353 +#: includes/include.rights_create.php:144 +msgid "Property" +msgstr "" + +#: includes/include.grouprights_create.php:99 +#: includes/include.systemsettings.php:62 +#: includes/include.systemsettings.php:178 +#: includes/include.client_edit.php:239 includes/include.clientsettings.php:98 +#: includes/include.clientsettings.php:193 +#: includes/include.grouprights_overview.php:109 +#: includes/include.grouprights_overview.php:210 +#: includes/include.rights_overview.php:200 +#: includes/include.rights_overview.php:354 +#: includes/include.rights_create.php:147 +#: templates/standard/template.log_main.html:15 +msgid "Value" +msgstr "" + +#: includes/include.grouprights_create.php:102 +#: includes/include.frontend.group_edit.php:221 +msgid "Group name" +msgstr "" + +#: includes/include.grouprights_create.php:123 +#: includes/include.grouprights_overview.php:129 +#: includes/include.rights_overview.php:271 +#: includes/include.rights_create.php:215 +msgid "System administrator" +msgstr "" + +#: includes/include.grouprights_create.php:141 +#: includes/include.grouprights_overview.php:147 +#: includes/include.rights_overview.php:289 +#: includes/include.rights_create.php:233 +msgid "Administrator" +msgstr "" + +#: includes/include.grouprights_create.php:156 +#: includes/include.grouprights_overview.php:163 +#: includes/include.rights_overview.php:305 +#: includes/include.rights_create.php:248 +msgid "Access clients" +msgstr "" + +#: includes/include.grouprights_create.php:172 +#: includes/include.grouprights_overview.php:180 +#: includes/include.rights_overview.php:322 +#: includes/include.rights_create.php:263 +msgid "Access languages" +msgstr "" + +#: includes/include.html_tpl_history.php:64 +#: includes/include.mod_history.php:57 includes/include.js_history.php:60 +#: includes/include.lay_history.php:51 includes/include.style_history.php:62 +msgid "Versioning is not activated" +msgstr "" + +#: includes/include.html_tpl_history.php:129 +#: includes/include.js_history.php:125 +msgid "Edit JScript" +msgstr "" + +#: includes/include.html_tpl_history.php:166 +#: includes/include.mod_history.php:135 includes/include.js_history.php:158 +#: includes/include.lay_history.php:123 includes/include.style_history.php:163 +msgid "Copy to current" +msgstr "" + +#: includes/include.html_tpl_history.php:179 +#: includes/include.html_tpl_history.php:187 +msgid "No template history available" +msgstr "" + +#: includes/include.html_tpl_history.php:185 +#: includes/include.mod_history.php:150 includes/include.js_history.php:177 +#: includes/include.lay_history.php:135 includes/include.style_history.php:182 +msgid "Version history was cleared" +msgstr "" + +#: includes/include.client_left_top.php:50 +#: includes/cfg_language_de.inc.php:243 +msgid "Create client" +msgstr "" + +#: includes/include.todo.popup.php:58 +msgid "Add TODO item" +msgstr "" + +#: includes/include.todo.popup.php:67 +#: includes/include.mycontenido.tasks.php:276 +#: includes/include.mycontenido.tasks.edit.php:68 +msgid "Subject" +msgstr "" + +#: includes/include.todo.popup.php:75 +#: includes/include.mycontenido.tasks.edit.php:100 +msgid "Reminder date" +msgstr "" + +#: includes/include.todo.popup.php:79 +#: includes/include.mycontenido.tasks.edit.php:75 +#: includes/include.upl_edit.php:219 +#: templates/standard/template.con_edit_form.html:150 +#: templates/standard/template.log_main.html:34 +msgid "End date" +msgstr "" + +#: includes/include.todo.popup.php:80 +msgid "eMail notification" +msgstr "" + +#: includes/include.todo.popup.php:82 +#: includes/include.mycontenido.tasks.edit.php:81 +msgid "Reminder options" +msgstr "" + +#: includes/include.todo.popup.php:124 +#: includes/include.mycontenido.tasks.edit.php:65 +msgid "Assigned to" +msgstr "" + +#: includes/include.lay_new.php:38 +msgid "New Layout" +msgstr "" + +#: includes/functions.general.php:103 +#: classes/datatypes/class.datatype.datetime.php:140 +msgid "January" +msgstr "" + +#: includes/functions.general.php:106 +#: classes/datatypes/class.datatype.datetime.php:141 +msgid "February" +msgstr "" + +#: includes/functions.general.php:109 +#: classes/datatypes/class.datatype.datetime.php:142 +msgid "March" +msgstr "" + +#: includes/functions.general.php:112 +#: classes/datatypes/class.datatype.datetime.php:143 +msgid "April" +msgstr "" + +#: includes/functions.general.php:115 +#: classes/datatypes/class.datatype.datetime.php:144 +msgid "May" +msgstr "" + +#: includes/functions.general.php:118 +#: classes/datatypes/class.datatype.datetime.php:145 +msgid "June" +msgstr "" + +#: includes/functions.general.php:121 +#: classes/datatypes/class.datatype.datetime.php:146 +msgid "July" +msgstr "" + +#: includes/functions.general.php:124 +#: classes/datatypes/class.datatype.datetime.php:147 +msgid "August" +msgstr "" + +#: includes/functions.general.php:127 +#: classes/datatypes/class.datatype.datetime.php:148 +msgid "September" +msgstr "" + +#: includes/functions.general.php:130 +#: classes/datatypes/class.datatype.datetime.php:149 +msgid "October" +msgstr "" + +#: includes/functions.general.php:133 +#: classes/datatypes/class.datatype.datetime.php:150 +msgid "November" +msgstr "" + +#: includes/functions.general.php:136 +#: classes/datatypes/class.datatype.datetime.php:151 +msgid "December" +msgstr "" + +#: includes/functions.general.php:150 +#: classes/datatypes/class.datatype.datetime.php:160 +msgid "Monday" +msgstr "" + +#: includes/functions.general.php:153 +#: classes/datatypes/class.datatype.datetime.php:161 +msgid "Tuesday" +msgstr "" + +#: includes/functions.general.php:156 +#: classes/datatypes/class.datatype.datetime.php:162 +msgid "Wednesday" +msgstr "" + +#: includes/functions.general.php:159 +#: classes/datatypes/class.datatype.datetime.php:163 +msgid "Thursday" +msgstr "" + +#: includes/functions.general.php:162 +#: classes/datatypes/class.datatype.datetime.php:164 +msgid "Friday" +msgstr "" + +#: includes/functions.general.php:165 +msgid "Saterday" +msgstr "" + +#: includes/functions.general.php:168 +#: classes/datatypes/class.datatype.datetime.php:159 +#: classes/datatypes/class.datatype.datetime.php:166 +msgid "Sunday" +msgstr "" + +#: includes/functions.general.php:1977 +#, php-format +msgid "MySQL Database not reachable for installation %s" +msgstr "" + +#: includes/functions.general.php:1980 +#, php-format +msgid "" +"The MySQL Database for the installation %s is not reachable. Please check if " +"this is a temporary problem or if it is a real fault." +msgstr "" + +#: includes/rights_mod.inc.php:75 includes/grouprights_mod.inc.php:73 +msgid "Module name" +msgstr "" + +#: includes/include.client_artspec.php:79 +#: includes/include.con_edit_form.php:241 +msgid "Article specification" +msgstr "" + +#: includes/include.client_artspec.php:80 +#: includes/include.mycontenido.tasks.php:397 +#: includes/include.mycontenido_settings.php:127 +#: includes/include.lay_edit_form.php:207 +msgid "Options" +msgstr "" + +#: includes/include.client_artspec.php:90 +#: includes/include.systemsettings.php:71 +#: includes/include.systemsettings.php:75 +#: includes/include.clientsettings.php:114 includes/include.upl_edit.php:66 +msgid "Edit" +msgstr "" + +#: includes/include.client_artspec.php:94 +#: includes/include.systemsettings.php:79 +#: includes/include.systemsettings.php:81 +#: includes/include.clientsettings.php:108 +msgid "Delete" +msgstr "" + +#: includes/include.client_artspec.php:131 +msgid "Save" +msgstr "" + +#: includes/include.client_artspec.php:140 +#: includes/include.con_art_overview.php:601 +#: includes/include.str_overview.php:957 includes/include.str_overview.php:959 +#: backend_search.php:652 scripts/HTMLObj.js.php:242 +#: scripts/HTMLObj.js.php:245 scripts/langref.php:9 +msgid "Make online" +msgstr "" + +#: includes/include.client_artspec.php:144 +#: includes/include.con_art_overview.php:593 backend_search.php:648 +#: scripts/HTMLObj.js.php:239 scripts/langref.php:8 +msgid "Make offline" +msgstr "" + +#: includes/include.client_artspec.php:150 +msgid "Make this article specification default" +msgstr "" + +#: includes/include.client_artspec.php:154 +msgid "This article specification is default" +msgstr "" + +#: includes/include.client_artspec.php:163 +#: includes/include.con_edit_form.php:238 +msgid "No article specifications found!" +msgstr "" + +#: includes/include.client_artspec.php:173 +msgid "Create new article specification" +msgstr "" + +#: includes/include.client_artspec.php:176 +msgid "Specification name" +msgstr "" + +#: includes/include.mycontenido.tasks.php:128 +msgid "No status type set" +msgstr "" + +#: includes/include.mycontenido.tasks.php:155 +#, php-format +msgid "%d %% complete" +msgstr "" + +#: includes/include.mycontenido.tasks.php:196 +msgid "Today" +msgstr "" + +#: includes/include.mycontenido.tasks.php:201 +#: includes/include.mycontenido.tasks.php:203 +msgid "Day(s)" +msgstr "" + +#: includes/include.mycontenido.tasks.php:276 +#: includes/include.con_edit_form.php:284 includes/include.upl_artlist.php:81 +#: templates/standard/template.mycontenido_lastarticles.html:64 +msgid "Created" +msgstr "" + +#: includes/include.mycontenido.tasks.php:276 +msgid "End Date" +msgstr "" + +#: includes/include.mycontenido.tasks.php:276 +#: includes/include.mycontenido.tasks.edit.php:137 +#: includes/include.stat_overview.php:90 includes/include.mod_package.php:252 +#: includes/include.mod_package.php:361 includes/include.mod_package.php:366 +msgid "Status" +msgstr "" + +#: includes/include.mycontenido.tasks.php:276 +#: includes/include.mycontenido.tasks.edit.php:132 +msgid "Priority" +msgstr "" + +#: includes/include.mycontenido.tasks.php:276 +#, php-format +msgid "%% complete" +msgstr "" + +#: includes/include.mycontenido.tasks.php:276 +msgid "Due in" +msgstr "" + +#: includes/include.mycontenido.tasks.php:302 +msgid "Unnamed item" +msgstr "" + +#: includes/include.mycontenido.tasks.php:307 +msgid "No end date set" +msgstr "" + +#: includes/include.mycontenido.tasks.php:314 +msgid "No status set" +msgstr "" + +#: includes/include.mycontenido.tasks.php:338 +msgid "Delete item" +msgstr "" + +#: includes/include.mycontenido.tasks.php:345 +msgid "Edit item" +msgstr "" + +#: includes/include.mycontenido.tasks.php:376 +msgid "Restrict display" +msgstr "" + +#: includes/include.mycontenido.tasks.php:380 classes/class.version.php:522 +msgid "Refresh" +msgstr "" + +#: includes/include.mycontenido.tasks.php:386 +msgid "Hide done tasks" +msgstr "" + +#: includes/include.mycontenido.tasks.php:401 +msgid "No tasks found" +msgstr "" + +#: includes/include.systemsettings.php:47 +msgid "Please set this property in systemsettings directly" +msgstr "" + +#: includes/include.systemsettings.php:157 +#: includes/include.clientsettings.php:172 +msgid "No defined properties" +msgstr "" + +#: includes/include.systemsettings.php:167 +#: includes/include.clientsettings.php:181 +msgid "Add new variable" +msgstr "" + +#: includes/include.con_edit_form.php:134 +#: includes/include.tplcfg_edit_form.php:57 +#: external/backendedit/front_content.php:484 +#: external/frontend/front_content.php:494 +#, php-format +msgid "Article is in use by %s (%s)" +msgstr "" + +#: includes/include.con_edit_form.php:208 +#: includes/include.con_art_overview.php:78 +#: includes/include.con_art_overview.php:746 +#: includes/include.stat_overview.php:89 includes/include.upl_artlist.php:81 +#: backend_search.php:492 +#: templates/standard/template.mycontenido_lastarticles.html:62 +msgid "Title" +msgstr "" + +#: includes/include.con_edit_form.php:211 +#: includes/include.str_overview.php:509 +#: templates/standard/template.str_overview.html:133 +#: templates/standard/template.str_overview.html:227 +msgid "Alias" +msgstr "" + +#: includes/include.con_edit_form.php:253 +msgid "Articlelink" +msgstr "" + +#: includes/include.con_edit_form.php:260 +msgid "Select an entry to display link" +msgstr "" + +#: includes/include.con_edit_form.php:261 +msgid "Article only" +msgstr "" + +#: includes/include.con_edit_form.php:262 +msgid "Article with Category" +msgstr "" + +#: includes/include.con_edit_form.php:263 +msgid "Article with Category and Language" +msgstr "" + +#: includes/include.con_edit_form.php:264 +msgid "Article with Language" +msgstr "" + +#: includes/include.con_edit_form.php:278 +msgid "Author (Creator)" +msgstr "" + +#: includes/include.con_edit_form.php:288 +msgid "Author (Modifier)" +msgstr "" + +#: includes/include.con_edit_form.php:289 +msgid "Last modified" +msgstr "" + +#: includes/include.con_edit_form.php:293 +msgid "Publishing date" +msgstr "" + +#: includes/include.con_edit_form.php:297 +#: includes/include.con_art_overview.php:354 +msgid "not yet published" +msgstr "" + +#: includes/include.con_edit_form.php:300 +msgid "Publisher" +msgstr "" + +#: includes/include.con_edit_form.php:308 +msgid "Redirect" +msgstr "" + +#: includes/include.con_edit_form.php:324 +msgid "New Window" +msgstr "" + +#: includes/include.con_edit_form.php:350 +#: includes/include.con_art_overview.php:553 +msgid "Start article" +msgstr "" + +#: includes/include.con_edit_form.php:354 +#: includes/include.con_art_overview.php:841 +msgid "Sort key" +msgstr "" + +#: includes/include.con_edit_form.php:391 includes/cfg_language_de.inc.php:114 +msgid "Remove assignments" +msgstr "" + +#: includes/include.con_edit_form.php:393 +msgid "Remove multiple category assignments" +msgstr "" + +#: includes/include.con_edit_form.php:394 +msgid "" +"Do you really want to remove the assignments to all categories except the " +"current one?" +msgstr "" + +#: includes/include.con_edit_form.php:410 +msgid "" +"Language parts of the articles are existing in other languages and are " +"online. To change the category assignment, please set the other articles " +"offline first." +msgstr "" + +#: includes/include.con_edit_form.php:510 includes/grouprights_str.inc.php:76 +#: includes/rights_con.inc.php:78 includes/include.con_editcontent.php:387 +#: includes/grouprights_con.inc.php:78 includes/rights_str.inc.php:77 +#: includes/include.note.popup.php:93 +#: templates/standard/template.symbolhelp.html:41 +#: templates/standard/template.symbolhelp.html:472 +#: templates/standard/template.str_overview.html:124 +#: templates/standard/template.str_overview.html:224 +#: templates/standard/template.mycontenido_lastarticles.html:63 +#: templates/standard/template.log_main.html:52 +#: classes/class.cms_teaser.php:595 classes/class.ajax.php:153 +msgid "Category" +msgstr "" + +#: includes/include.con_edit_form.php:549 +msgid "Choose Startdate" +msgstr "" + +#: includes/include.con_edit_form.php:550 +msgid "Choose Enddate" +msgstr "" + +#: includes/include.con_edit_form.php:648 +msgid "Select date" +msgstr "" + +#: includes/include.con_edit_form.php:685 +msgid "Summary" +msgstr "" + +#: includes/include.CMS_EASYIMG.php:153 +msgid "Upload image" +msgstr "" + +#: includes/include.CMS_EASYIMG.php:157 includes/include.client_edit.php:228 +#: includes/include.grouprights_overview.php:103 +#: includes/include.rights_overview.php:193 +msgid "Discard changes" +msgstr "" + +#: includes/grouprights_str.inc.php:212 includes/rights_con.inc.php:223 +#: includes/grouprights_con.inc.php:237 includes/rights_str.inc.php:217 +msgid "" +"Apply rights for this category to all categories on the same level or above" +msgstr "" + +#: includes/grouprights_str.inc.php:213 includes/rights_con.inc.php:224 +#: includes/grouprights_con.inc.php:238 includes/rights_str.inc.php:218 +msgid "" +"Apply rights for this category to all categories below the current category" +msgstr "" + +#: includes/grouprights_str.inc.php:215 +#: includes/include.upl_dirs_overview.php:60 includes/rights_con.inc.php:227 +#: includes/include.str_overview.php:174 includes/grouprights_con.inc.php:241 +#: includes/rights_str.inc.php:221 +msgid "Close category" +msgstr "" + +#: includes/include.upl_dirs_overview.php:153 +msgid "Failed to delete the following files:" +msgstr "" + +#: includes/include.upl_dirs_overview.php:159 +#, php-format +msgid "Failed to remove directory %s" +msgstr "" + +#: includes/include.upl_dirs_overview.php:190 +msgid "Upload directory" +msgstr "" + +#: includes/include.upl_dirs_overview.php:194 +msgid "" +"The following directories contains invalid characters and were ignored: " +msgstr "" + +#: includes/include.upl_dirs_overview.php:197 +msgid "Please click here in order to rename automatically." +msgstr "" + +#: includes/include.upl_dirs_overview.php:319 +msgid "Categories" +msgstr "" + +#: includes/include.upl_dirs_overview.php:400 +#: includes/include.upl_dirs_overview.php:547 +msgid "Delete directory" +msgstr "" + +#: includes/include.upl_dirs_overview.php:400 +#: includes/include.upl_dirs_overview.php:547 +msgid "Do you really want to delete the following directory:" +msgstr "" + +#: includes/include.upl_dirs_overview.php:405 +#: includes/include.upl_dirs_overview.php:552 +msgid "Directory contains files" +msgstr "" + +#: includes/include.upl_dirs_overview.php:454 +msgid "Database Filesystem" +msgstr "" + +#: includes/include.tplcfg_edit_form.php:76 +#, php-format +msgid "Category Template configuration is in use by %s (%s)" +msgstr "" + +#: includes/include.tplcfg_edit_form.php:276 +#: includes/include.con_art_overview.php:82 +#: includes/include.pretplcfg_edit_form.php:76 backend_search.php:496 +#: templates/standard/template.str_overview.html:230 +#: templates/standard/template.mycontenido_lastarticles.html:66 +msgid "Template" +msgstr "" + +#: includes/include.tplcfg_edit_form.php:352 +msgid "Module in container" +msgstr "" + +#: includes/include.tplcfg_edit_form.php:476 +msgid "Categorytemplate configuration" +msgstr "" + +#: includes/include.tplcfg_edit_form.php:479 +msgid "Articletemplate configuration" +msgstr "" + +#: includes/include.rights_menu.php:133 +#: includes/include.frontend.user_menu.php:273 +#: includes/include.frontend.left_top.php:395 +#, php-format +msgid "Do you really want to delete the user %s?" +msgstr "" + +#: includes/include.rights_menu.php:135 +#: includes/include.frontend.user_menu.php:275 +#: includes/cfg_language_de.inc.php:172 +#: includes/include.frontend.left_top.php:397 +msgid "Delete user" +msgstr "" + +#: includes/include.info.php:38 +msgid "" +"You can find a lot of information and a community forum on the ConLite Portal" +msgstr "" + +#: includes/include.CMS_HTMLHEAD.php:100 includes/include.CMS_HTML.php:98 +msgid "Save without leaving the editor" +msgstr "" + +#: includes/include.CMS_HTMLHEAD.php:101 includes/include.CMS_HTML.php:99 +msgid "Save and close editor" +msgstr "" + +#: includes/functions.tpl.php:436 includes/functions.con.php:1837 +#: includes/functions.str.php:1387 +#, php-format +msgid "%s (Copy)" +msgstr "" + +#: includes/include.con_left_top.php:135 +msgid "Ignore" +msgstr "" + +#: includes/include.con_left_top.php:136 classes/class.cms_filelist.php:444 +msgid "Date created" +msgstr "" + +#: includes/include.con_left_top.php:137 classes/class.cms_filelist.php:447 +msgid "Date modified" +msgstr "" + +#: includes/include.con_left_top.php:138 +msgid "Date published" +msgstr "" + +#: includes/include.con_left_top.php:141 +msgid "Article Search" +msgstr "" + +#: includes/include.con_left_top.php:237 +#: templates/standard/template.recipient_menu.html:92 +msgid "Search" +msgstr "" + +#: includes/include.con_left_top.php:250 +msgid "Title/Content" +msgstr "" + +#: includes/include.con_left_top.php:255 +msgid "Article ID" +msgstr "" + +#: includes/include.con_left_top.php:260 +msgid "Datum" +msgstr "" + +#: includes/include.con_left_top.php:265 +msgid "Date from" +msgstr "" + +#: includes/include.con_left_top.php:270 +msgid "Date to" +msgstr "" + +#: includes/include.con_left_top.php:291 +msgid "Saved Searches" +msgstr "" + +#: includes/include.con_left_top.php:302 +#: includes/include.mycontenido_lastarticles.php:137 +#: includes/main.login.php:211 +msgid "Recently edited articles" +msgstr "" + +#: includes/include.con_left_top.php:306 +msgid "My articles" +msgstr "" + +#: includes/include.con_left_top.php:311 +msgid "Workflow" +msgstr "" + +#: includes/include.con_left_top.php:369 scripts/HTMLObj.js.php:254 +#: scripts/langref.php:12 +msgid "Choose template" +msgstr "" + +#: includes/include.con_left_top.php:379 +msgid "Edit Category" +msgstr "" + +#: includes/include.con_left_top.php:395 +msgid "Template:" +msgstr "" + +#: includes/include.con_left_top.php:404 includes/include.con_left_top.php:405 +msgid "Configure Category" +msgstr "" + +#: includes/include.con_left_top.php:407 includes/include.con_left_top.php:408 +msgid "Online / Offline" +msgstr "" + +#: includes/include.con_left_top.php:410 includes/include.con_left_top.php:411 +msgid "Lock / Unlock" +msgstr "" + +#: includes/include.con_left_top.php:428 +msgid "close all" +msgstr "" + +#: includes/include.con_left_top.php:428 +#: includes/include.con_str_overview.php:612 +#: includes/include.str_overview.php:486 includes/include.str_overview.php:487 +#: includes/include.str_overview.php:488 +#: templates/standard/template.stat_overview.html:135 +msgid "Close all categories" +msgstr "" + +#: includes/include.con_left_top.php:429 +msgid "open all" +msgstr "" + +#: includes/include.con_left_top.php:429 +#: includes/include.con_str_overview.php:613 +#: includes/include.str_overview.php:493 includes/include.str_overview.php:494 +#: includes/include.str_overview.php:495 +#: templates/standard/template.stat_overview.html:137 +msgid "Open all categories" +msgstr "" + +#: includes/include.con_left_top.php:439 +msgid "Synchronize from" +msgstr "" + +#: includes/include.con_left_top.php:472 includes/include.con_left_top.php:473 +msgid "Copy to current language" +msgstr "" + +#: includes/include.con_left_top.php:474 includes/include.con_left_top.php:475 +msgid "Also copy subcategories" +msgstr "" + +#: includes/include.con_art_overview.php:77 +#: includes/include.con_editcontent.php:382 +#: includes/include.con_subnav.php:104 backend_search.php:491 +#: templates/standard/template.symbolhelp.html:38 +#: templates/standard/template.symbolhelp.html:283 +#: templates/standard/template.log_main.html:53 +#: classes/class.cms_teaser.php:596 classes/class.ajax.php:170 +msgid "Article" +msgstr "" + +#: includes/include.con_art_overview.php:79 backend_search.php:493 +msgid "Changed" +msgstr "" + +#: includes/include.con_art_overview.php:80 backend_search.php:494 +msgid "Published" +msgstr "" + +#: includes/include.con_art_overview.php:81 +#: includes/include.rights_left_top.php:155 +#: includes/include.frontend.left_top.php:257 includes/include.mod_new.php:161 +#: backend_search.php:495 classes/class.cms_teaser.php:588 +#: classes/class.cms_filelist.php:738 +msgid "Sort order" +msgstr "" + +#: includes/include.con_art_overview.php:369 +msgid "Article is in use" +msgstr "" + +#: includes/include.con_art_overview.php:370 +#, php-format +msgid "Article in use by %s (%s)" +msgstr "" + +#: includes/include.con_art_overview.php:436 backend_search.php:658 +msgid "Unfreeze article" +msgstr "" + +#: includes/include.con_art_overview.php:439 +#: includes/cfg_language_de.inc.php:98 backend_search.php:661 +msgid "Freeze article" +msgstr "" + +#: includes/include.con_art_overview.php:446 +msgid "Article is frozen" +msgstr "" + +#: includes/include.con_art_overview.php:449 +msgid "Article is not frozen" +msgstr "" + +#: includes/include.con_art_overview.php:472 backend_search.php:676 +msgid "Article properties" +msgstr "" + +#: includes/include.con_art_overview.php:486 +msgid "Copy article to the current language" +msgstr "" + +#: includes/include.con_art_overview.php:547 backend_search.php:635 +msgid "Flag as start article" +msgstr "" + +#: includes/include.con_art_overview.php:549 backend_search.php:632 +msgid "Flag as normal article" +msgstr "" + +#: includes/include.con_art_overview.php:555 +msgid "Normal article" +msgstr "" + +#: includes/include.con_art_overview.php:569 backend_search.php:675 +#: templates/standard/template.symbolhelp.html:413 +msgid "Duplicate article" +msgstr "" + +#: includes/include.con_art_overview.php:581 +#, php-format +msgid "Reminder for Article '%s'" +msgstr "" + +#: includes/include.con_art_overview.php:584 +#, php-format +msgid "" +"Reminder for Article '%s'\n" +"Category: %s" +msgstr "" + +#: includes/include.con_art_overview.php:595 +#: includes/include.mycontenido_lastarticles.php:221 +msgid "Article is online" +msgstr "" + +#: includes/include.con_art_overview.php:603 +#: includes/include.mycontenido_lastarticles.php:224 +msgid "Article is offline" +msgstr "" + +#: includes/include.con_art_overview.php:625 +#, php-format +msgid "Are you sure to delete the following article:

    %s" +msgstr "" + +#: includes/include.con_art_overview.php:626 +#: includes/cfg_language_de.inc.php:106 backend_search.php:678 +#: templates/standard/template.symbolhelp.html:425 +msgid "Delete article" +msgstr "" + +#: includes/include.con_art_overview.php:771 +#: includes/include.con_art_overview.php:774 +#, php-format +msgid "Go to page: %s" +msgstr "" + +#: includes/include.con_art_overview.php:777 +msgid "with click select line for further treatment" +msgstr "" + +#: includes/include.con_art_overview.php:832 +#: includes/include.con_art_overview.php:938 +msgid "No articles found" +msgstr "" + +#: includes/include.con_art_overview.php:838 +msgid "Alphabetical" +msgstr "" + +#: includes/include.con_art_overview.php:839 +msgid "Last change" +msgstr "" + +#: includes/include.con_art_overview.php:840 +msgid "Published date" +msgstr "" + +#: includes/include.con_art_overview.php:860 +msgid "Sort articles:" +msgstr "" + +#: includes/include.con_art_overview.php:887 +msgid "Items per page:" +msgstr "" + +#: includes/include.con_art_overview.php:988 +#: includes/include.con_art_overview.php:989 +#: templates/standard/template.symbolhelp.html:329 +msgid "Create new article" +msgstr "" + +#: includes/include.frontend.user_menu.php:53 +#: includes/include.frontend.left_top.php:58 +msgid "-- All fields --" +msgstr "" + +#: includes/include.frontend.user_menu.php:53 +#: includes/include.frontend.user_menu.php:54 +#: includes/include.rights_overview.php:203 +#: includes/include.frontend.left_top.php:58 +#: includes/include.frontend.left_top.php:59 +#: includes/include.rights_create.php:150 +msgid "Username" +msgstr "" + +#: includes/include.frontend.user_menu.php:112 +#: includes/include.rights_left_top.php:118 +#: includes/include.frontend.left_top.php:118 includes/include.mod_new.php:88 +#: classes/class.cms_teaser.php:423 classes/class.cms_filelist.php:465 +msgid "Ascending" +msgstr "" + +#: includes/include.frontend.user_menu.php:112 +#: includes/include.rights_left_top.php:119 +#: includes/include.frontend.left_top.php:118 includes/include.mod_new.php:88 +#: classes/class.cms_teaser.php:426 classes/class.cms_filelist.php:468 +msgid "Descending" +msgstr "" + +#: includes/include.frontend.user_menu.php:114 +#: includes/include.rights_left_top.php:123 +#: includes/include.frontend.left_top.php:193 includes/include.mod_new.php:94 +msgid "List options" +msgstr "" + +#: includes/include.frontend.user_menu.php:139 +#: includes/include.frontend.left_top.php:228 +msgid "-- All Groups --" +msgstr "" + +#: includes/include.mycontenido.tasks.edit.php:43 +msgid "Edit Reminder item" +msgstr "" + +#: includes/include.mycontenido.tasks.edit.php:77 +msgid "E-Mail notification" +msgstr "" + +#: includes/include.mycontenido.tasks.edit.php:140 +msgid "Progress" +msgstr "" + +#: includes/grouprights_tpl.inc.php:72 includes/rights_tpl.inc.php:73 +#: classes/class.ajax.php:105 classes/class.ajax.php:129 +msgid "Template name" +msgstr "" + +#: includes/include.upl_search_results.php:204 +#: includes/include.upl_search_results.php:209 +#: includes/include.upl_search_results.php:212 +#: includes/include.upl_edit.php:92 +msgid "Path" +msgstr "" + +#: includes/include.upl_search_results.php:246 +#: includes/include.upl_search_results.php:251 +#: includes/include.upl_search_results.php:254 +msgid "Relevance" +msgstr "" + +#: includes/include.upl_search_results.php:260 +msgid "Searched for:" +msgstr "" + +#: includes/include.client_edit.php:52 +msgid "No client ID passed" +msgstr "" + +#: includes/include.client_edit.php:65 +msgid "" +"Notice: In order to use this client, you must create a new language for it." +msgstr "" + +#: includes/include.client_edit.php:69 +#, php-format +msgid "Please click %shere%s to create a new language." +msgstr "" + +#: includes/include.client_edit.php:110 +msgid "Couldn't write the file config.php." +msgstr "" + +#: includes/include.client_edit.php:118 +#, php-format +msgid "Succesfully copied client-template to %s." +msgstr "" + +#: includes/include.client_edit.php:121 +#, php-format +msgid "" +"Cannot create directory %s . The client was created, but you have to copy " +"the frontend-template yourself" +msgstr "" + +#: includes/include.client_edit.php:125 +#, php-format +msgid "" +"The directory %s already exists. The client was created, but you have to " +"copy the frontend-template yourself" +msgstr "" + +#: includes/include.client_edit.php:129 +#, php-format +msgid "Client '%s' created." +msgstr "" + +#: includes/include.client_edit.php:147 +msgid "" +"You changed the client path. You might need to copy the frontend to the new " +"location" +msgstr "" + +#: includes/include.client_edit.php:245 +msgid "Client name" +msgstr "" + +#: includes/include.client_edit.php:261 +msgid "Server path" +msgstr "" + +#: includes/include.client_edit.php:277 +msgid "Web address" +msgstr "" + +#: includes/include.client_edit.php:286 +msgid "Error page category" +msgstr "" + +#: includes/include.client_edit.php:295 +msgid "Error page article" +msgstr "" + +#: includes/include.client_edit.php:306 +msgid "Client logo" +msgstr "" + +#: includes/include.client_edit.php:315 +msgid "HTML" +msgstr "" + +#: includes/include.client_edit.php:315 +msgid "XHTML" +msgstr "" + +#: includes/include.client_edit.php:315 +msgid "HTML5" +msgstr "" + +#: includes/include.client_edit.php:330 +msgid "Generate" +msgstr "" + +#: includes/include.client_edit.php:341 +msgid "Copy frontend template" +msgstr "" + +#: includes/include.rights_left_top.php:103 +#: includes/cfg_language_de.inc.php:171 includes/cfg_language_de.inc.php:174 +#: includes/include.frontend.left_top.php:178 +#: templates/standard/template.symbolhelp.html:1835 +msgid "Create user" +msgstr "" + +#: includes/include.rights_left_top.php:147 +#: includes/include.frontend.left_top.php:249 includes/include.mod_new.php:153 +msgid "Items / page" +msgstr "" + +#: includes/include.rights_left_top.php:151 +#: includes/include.frontend.left_top.php:253 includes/include.mod_new.php:157 +msgid "Sort by" +msgstr "" + +#: includes/include.rights_left_top.php:164 +#: includes/include.frontend.left_top.php:274 includes/include.mod_new.php:178 +msgid "Apply" +msgstr "" + +#: includes/include.mycontenido_settings.php:57 +msgid "Old password incorrect" +msgstr "" + +#: includes/include.mycontenido_settings.php:62 +#: includes/include.rights_overview.php:132 +#: includes/include.rights_create.php:122 +msgid "Passwords don't match" +msgstr "" + +#: includes/include.mycontenido_settings.php:77 +msgid "Password changed" +msgstr "" + +#: includes/include.mycontenido_settings.php:97 +#, php-format +msgid "Settings for %s" +msgstr "" + +#: includes/include.mycontenido_settings.php:115 +msgid "Old password" +msgstr "" + +#: includes/include.mycontenido_settings.php:117 +#: includes/include.rights_overview.php:223 +#: includes/include.rights_create.php:168 +msgid "Confirm new password" +msgstr "" + +#: includes/include.mycontenido_settings.php:121 +#: includes/include.rights_overview.php:230 +#: includes/include.rights_create.php:174 +msgid "E-Mail" +msgstr "" + +#: includes/include.mycontenido_settings.php:125 +msgid "Use WYSIWYG Editor" +msgstr "" + +#: includes/include.mycontenido_settings.php:129 +msgid "The format is equal to PHP's date() function." +msgstr "" + +#: includes/include.mycontenido_settings.php:131 +msgid "Common date formattings" +msgstr "" + +#: includes/include.mod_edit_form.php:54 includes/include.lay_overview.php:78 +#: includes/include.mod_overview.php:209 includes/include.str_overview.php:741 +msgid "No permission" +msgstr "" + +#: includes/include.mod_edit_form.php:58 +#: classes/contenido/class.module.php:395 +msgid "- Unnamed Module -" +msgstr "" + +#: includes/include.mod_edit_form.php:59 +msgid "" +msgstr "" + +#: includes/include.mod_edit_form.php:59 +msgid "Author: " +msgstr "" + +#: includes/include.mod_edit_form.php:59 +msgid "Version:" +msgstr "" + +#: includes/include.mod_edit_form.php:77 includes/include.mod_package.php:219 +#: includes/include.mod_package.php:357 +#, php-format +msgid "Error while importing XML file: %s" +msgstr "" + +#: includes/include.mod_edit_form.php:88 +msgid "Module folder created" +msgstr "" + +#: includes/include.mod_edit_form.php:91 +msgid "Error while creating module folder" +msgstr "" + +#: includes/include.mod_edit_form.php:106 includes/include.mod_package.php:398 +#, php-format +msgid "Module is in use by %s (%s)" +msgstr "" + +#: includes/include.mod_edit_form.php:127 includes/cfg_language_de.inc.php:157 +msgid "Edit module" +msgstr "" + +#: includes/include.mod_edit_form.php:299 +#: includes/include.mod_edit_form.php:301 +msgid "Custom" +msgstr "" + +#: includes/include.mod_edit_form.php:324 +#: includes/include.mod_edit_form.php:333 +#, php-format +msgid "Error in module. Error location: %s" +msgstr "" + +#: includes/include.mod_edit_form.php:327 +#: includes/include.mod_edit_form.php:336 +msgid "Module successfully compiled" +msgstr "" + +#: includes/include.mod_edit_form.php:371 +msgid "Create Folder" +msgstr "" + +#: includes/include.mod_edit_form.php:405 +#: includes/include.mod_edit_form.php:408 includes/include.mod_new.php:111 +msgid "Input" +msgstr "" + +#: includes/include.mod_edit_form.php:406 +#: includes/include.mod_edit_form.php:409 includes/include.mod_new.php:112 +msgid "Output" +msgstr "" + +#: includes/include.mod_edit_form.php:415 +msgid "" +"This module uses variables and/or functions which are probably not available " +"in this Contenido version. Please make sure that you use up-to-date modules." +msgstr "" + +#: includes/include.mod_edit_form.php:423 +#: includes/include.mod_translate.php:174 includes/include.mod_package.php:454 +msgid "Import from file" +msgstr "" + +#: includes/include.mod_edit_form.php:424 +#: includes/include.mod_translate.php:173 includes/include.mod_package.php:455 +msgid "Export to file" +msgstr "" + +#: includes/include.mod_edit_form.php:440 +#: includes/include.mod_translate.php:184 includes/include.mod_package.php:472 +msgid "Mode" +msgstr "" + +#: includes/include.mod_edit_form.php:442 +#: includes/include.mod_edit_form.php:444 +#: includes/include.mod_translate.php:185 includes/include.mod_package.php:476 +#: includes/include.mod_package.php:478 classes/class.cms_filelist.php:745 +msgid "File" +msgstr "" + +#: includes/grouprights.inc.php:215 +msgid "Current group doesn't have any rights to any client/language." +msgstr "" + +#: includes/include.lay_overview.php:82 +msgid "Layout is in use, cannot delete" +msgstr "" + +#: includes/include.lay_overview.php:92 includes/cfg_language_de.inc.php:147 +msgid "Delete layout" +msgstr "" + +#: includes/include.lay_overview.php:93 +#, php-format +msgid "Do you really want to delete the following layout:

    %s
    " +msgstr "" + +#: includes/include.lay_overview.php:118 +#, php-format +msgid "The layout '%s' is used for following templates" +msgstr "" + +#: includes/include.stat_overview.php:47 includes/include.stat_overview.php:60 +msgid "Full statistics" +msgstr "" + +#: includes/include.stat_overview.php:76 +msgid "Yearly" +msgstr "" + +#: includes/include.stat_overview.php:80 +msgid "Current" +msgstr "" + +#: includes/include.stat_overview.php:92 +#: templates/standard/template.symbolhelp.html:89 +#: templates/standard/template.symbolhelp.html:1472 +msgid "Hits" +msgstr "" + +#: includes/include.stat_overview.php:94 +msgid "Hits in this language" +msgstr "" + +#: includes/include.mod_history.php:94 +msgid "Edit Module" +msgstr "" + +#: includes/include.mod_history.php:133 +msgid "Code Input" +msgstr "" + +#: includes/include.mod_history.php:134 +msgid "Code Output" +msgstr "" + +#: includes/include.mod_history.php:152 +msgid "No module history available" +msgstr "" + +#: includes/include.js_history.php:171 +msgid "No jscript history available" +msgstr "" + +#: includes/include.js_history.php:179 includes/include.style_history.php:176 +#: includes/include.style_history.php:184 +msgid "No style history available" +msgstr "" + +#: includes/include.mod_translate.php:138 +#, php-format +msgid "Translate module '%s'" +msgstr "" + +#: includes/include.mod_translate.php:147 +msgid "Translated Name" +msgstr "" + +#: includes/include.mod_translate.php:157 +msgid "Original module string" +msgstr "" + +#: includes/include.mod_translate.php:157 +#, php-format +msgid "Translation for %s" +msgstr "" + +#: includes/include.mod_translate.php:165 +msgid "" +"Hint: Hit ALT+SHIFT+S to save the translated entry and advance to the next " +"string." +msgstr "" + +#: includes/include.mod_translate.php:166 +msgid "String list" +msgstr "" + +#: includes/include.mod_package.php:139 +msgid "No elements available" +msgstr "" + +#: includes/include.mod_package.php:188 +msgid "Javascript files" +msgstr "" + +#: includes/include.mod_package.php:189 +msgid "Module template files" +msgstr "" + +#: includes/include.mod_package.php:190 +msgid "Style files" +msgstr "" + +#: includes/include.mod_package.php:191 +#: templates/standard/template.symbolhelp.html:53 +#: templates/standard/template.symbolhelp.html:822 +msgid "Layouts" +msgstr "" + +#: includes/include.mod_package.php:192 +msgid "Translations" +msgstr "" + +#: includes/include.mod_package.php:238 +msgid "Skip" +msgstr "" + +#: includes/include.mod_package.php:238 +msgid "Append" +msgstr "" + +#: includes/include.mod_package.php:238 +msgid "Overwrite" +msgstr "" + +#: includes/include.mod_package.php:239 +msgid "OK" +msgstr "" + +#: includes/include.mod_package.php:240 +msgid "Assign" +msgstr "" + +#: includes/include.mod_package.php:241 +msgid "Conflict" +msgstr "" + +#: includes/include.mod_package.php:242 +msgid "Ignored" +msgstr "" + +#: includes/include.mod_package.php:243 +msgid "- Select -" +msgstr "" + +#: includes/include.mod_package.php:254 +#: templates/standard/template.log_main.html:26 +#: templates/standard/template.log_main.html:51 +msgid "Action" +msgstr "" + +#: includes/include.mod_package.php:311 +#: templates/standard/template.symbolhelp.html:181 +#: scripts/messageBox.js.php:79 scripts/langref.php:21 +msgid "Cancel" +msgstr "" + +#: includes/include.mod_package.php:312 +msgid "Import" +msgstr "" + +#: includes/include.mod_package.php:361 +msgid "Import was not succesful, please check data and try again" +msgstr "" + +#: includes/include.mod_package.php:362 +msgid "Retry" +msgstr "" + +#: includes/include.mod_package.php:366 +msgid "Import succesfully finished" +msgstr "" + +#: includes/include.mod_package.php:367 +msgid "Finish" +msgstr "" + +#: includes/include.mod_package.php:421 +msgid "Edit package" +msgstr "" + +#: includes/include.mod_package.php:442 +msgid "Package GUID" +msgstr "" + +#: includes/include.clientsettings.php:50 +msgid "Select range" +msgstr "" + +#: includes/include.clientsettings.php:53 +msgid "Language independent" +msgstr "" + +#: includes/include.clientsettings.php:79 +msgid "Range" +msgstr "" + +#: includes/include.system_db_backup.php:35 +msgid "Backupfolder missing or not writable!" +msgstr "" + +#: includes/include.system_db_backup.php:54 +msgid "Start your Backup!" +msgstr "" + +#: includes/include.system_db_backup.php:88 +msgid "Permission denied!" +msgstr "" + +#: includes/include.system_db_backup.php:99 +msgid "Starting Backup." +msgstr "" + +#: includes/include.system_db_backup.php:216 +msgid "Backup in Progress!" +msgstr "" + +#: includes/include.system_db_backup.php:223 +#: includes/include.system_db_backup.php:248 +msgid "Tables saved: " +msgstr "" + +#: includes/include.system_db_backup.php:223 +msgid "Last processed: " +msgstr "" + +#: includes/include.system_db_backup.php:224 +#: includes/include.system_db_backup.php:248 +msgid "Pageviews: " +msgstr "" + +#: includes/include.system_db_backup.php:247 +msgid "Backup done!" +msgstr "" + +#: includes/include.system_db_backup.php:252 +msgid "Go Back to Overview" +msgstr "" + +#: includes/include.system_db_backup.php:286 +msgid "File successfully deleted." +msgstr "" + +#: includes/include.system_db_backup.php:301 +msgid "Download File" +msgstr "" + +#: includes/include.upl_artlist.php:66 +msgid "Use this category" +msgstr "" + +#: includes/include.upl_artlist.php:81 +#: templates/standard/template.mycontenido_lastarticles.html:61 +msgid "Start" +msgstr "" + +#: includes/include.upl_artlist.php:81 +#: templates/standard/template.mycontenido_lastarticles.html:65 +msgid "Modified" +msgstr "" + +#: includes/include.upl_artlist.php:81 +msgid "Sort Order" +msgstr "" + +#: includes/include.upl_artlist.php:81 +msgid "Online" +msgstr "" + +#: includes/include.js_left_top.php:50 includes/cfg_language_de.inc.php:206 +msgid "Create script" +msgstr "" + +#: includes/include.stat_menu.php:37 +msgid "Current Report" +msgstr "" + +#: includes/include.stat_menu.php:45 +msgid "Statistics Overview" +msgstr "" + +#: includes/include.stat_menu.php:56 +msgid "Archived Statistics" +msgstr "" + +#: includes/include.con_editcontent.php:215 +msgid "Close editor" +msgstr "" + +#: includes/include.con_editcontent.php:216 +msgid "Close editor and save changes" +msgstr "" + +#: includes/include.con_editcontent.php:217 +msgid "Do you want to save changes?" +msgstr "" + +#: includes/include.con_editcontent.php:375 +msgid "No template assigned to the category
    and/or the article" +msgstr "" + +#: includes/include.con_editcontent.php:376 +msgid "The code for the following article
    couldnt be generated:" +msgstr "" + +#: includes/include.con_editcontent.php:397 +#: includes/include.system_purge.php:195 +#: templates/standard/template.log_main.html:18 +#: templates/standard/template.log_main.html:48 +#: classes/class.navigation.php:340 classes/class.navigation.php:343 +msgid "Client" +msgstr "" + +#: includes/functions.con.php:331 includes/functions.con.php:518 +msgid "Default title" +msgstr "" + +#: includes/include.lay_history.php:87 includes/include.lay_edit_form.php:186 +msgid "Edit Layout" +msgstr "" + +#: includes/include.lay_history.php:137 +msgid "No layout history available" +msgstr "" + +#: includes/include.upl_edit.php:91 +msgid "File name" +msgstr "" + +#: includes/include.upl_edit.php:93 +msgid "Replace file" +msgstr "" + +#: includes/include.upl_edit.php:94 +msgid "Media name" +msgstr "" + +#: includes/include.upl_edit.php:96 +msgid "Keywords" +msgstr "" + +#: includes/include.upl_edit.php:97 +msgid "Internal notes" +msgstr "" + +#: includes/include.upl_edit.php:98 +msgid "Copyright" +msgstr "" + +#: includes/include.upl_edit.php:99 +msgid "Protection" +msgstr "" + +#: includes/include.upl_edit.php:100 +#: templates/standard/template.con_edit_form.html:141 +msgid "Time control" +msgstr "" + +#: includes/include.upl_edit.php:200 +msgid "Protected for non-logged in users" +msgstr "" + +#: includes/include.upl_edit.php:209 +#: templates/standard/template.con_edit_form.html:144 +msgid "Use time control" +msgstr "" + +#: includes/include.upl_edit.php:215 +#: templates/standard/template.con_edit_form.html:146 +#: templates/standard/template.log_main.html:30 +msgid "Start date" +msgstr "" + +#: includes/include.upl_edit.php:313 +#, php-format +msgid "Could not load file %s" +msgstr "" + +#: includes/functions.file.php:206 +msgid "Please insert filename." +msgstr "" + +#: includes/functions.file.php:218 +#, php-format +msgid "Could not open file %s" +msgstr "" + +#: includes/functions.file.php:223 +#, php-format +msgid "Could not write file %s" +msgstr "" + +#: includes/functions.file.php:234 includes/functions.file.php:338 +#, php-format +msgid "%s is not writable" +msgstr "" + +#: includes/functions.file.php:255 +#, php-format +msgid "Can not open file%s " +msgstr "" + +#: includes/functions.file.php:304 +msgid "Unable to change file access permission." +msgstr "" + +#: includes/functions.file.php:308 +#, php-format +msgid "Unable to create file %s" +msgstr "" + +#: includes/functions.file.php:334 +#, php-format +msgid "Can not rename file %s" +msgstr "" + +#: includes/functions.file.php:361 +msgid "Wrong filename." +msgstr "" + +#: includes/include.mycontenido_lastarticles.php:293 +msgid "No article found" +msgstr "" + +#: includes/include.grouprights_overview.php:67 +msgid "Changes couldn't saved" +msgstr "" + +#: includes/include.grouprights_overview.php:112 +msgid "Groupname" +msgstr "" + +#: includes/include.grouprights_overview.php:208 +#: includes/include.rights_overview.php:352 +msgid "Area/Type" +msgstr "" + +#: includes/include.grouprights_overview.php:222 +#: includes/include.rights_overview.php:366 +msgid "User-defined properties" +msgstr "" + +#: includes/include.upl_files_upload.php:51 +msgid "Upload" +msgstr "" + +#: includes/include.upl_files_upload.php:63 +#: includes/cfg_language_de.inc.php:136 includes/cfg_language_de.inc.php:144 +msgid "Upload files" +msgstr "" + +#: includes/include.lay_edit_form.php:46 +msgid "-- New Layout --" +msgstr "" + +#: includes/include.lay_edit_form.php:56 +msgid "Layout deleted" +msgstr "" + +#: includes/include.lay_edit_form.php:128 +#, php-format +msgid "Container %s was defined %s times" +msgstr "" + +#: includes/include.lay_edit_form.php:141 +msgid "" +"The body tag does not exist in the layout. This is a requirement for the in-" +"site editing." +msgstr "" + +#: includes/include.lay_edit_form.php:147 +msgid "" +"The head tag does not exist in the layout. This is a requirement for the in-" +"site editing." +msgstr "" + +#: includes/include.lay_edit_form.php:173 +#: includes/include.html_tpl_edit_form.php:185 +#, php-format +msgid "Tag '%s' %s has no end tag (start tag is on line %s char %s)" +msgstr "" + +#: includes/include.lay_edit_form.php:202 +msgid "On save, apply default modules to new containers" +msgstr "" + +#: includes/include.rights_overview.php:75 +msgid "User deleted" +msgstr "" + +#: includes/include.rights_overview.php:144 +#: includes/include.rights_overview.php:149 +msgid "An error occured while saving user info." +msgstr "" + +#: includes/include.rights_overview.php:236 +#: includes/include.rights_create.php:180 +msgid "Phone number" +msgstr "" + +#: includes/include.rights_overview.php:242 +#: includes/include.rights_create.php:186 +msgid "Street" +msgstr "" + +#: includes/include.rights_overview.php:248 +#: includes/include.rights_create.php:192 +msgid "ZIP code" +msgstr "" + +#: includes/include.rights_overview.php:254 +#: includes/include.rights_create.php:198 +msgid "City" +msgstr "" + +#: includes/include.rights_overview.php:373 +#: includes/include.rights_create.php:269 +msgid "Use WYSIWYG-Editor" +msgstr "" + +#: includes/include.rights_overview.php:398 +#: includes/include.rights_create.php:290 +msgid "Valid from" +msgstr "" + +#: includes/include.rights_overview.php:418 +#: includes/include.rights_create.php:307 +msgid "Valid to" +msgstr "" + +#: includes/include.rights_overview.php:436 +msgid "This account is currently inactive." +msgstr "" + +#: includes/include.rights_overview.php:439 +msgid "This account is currently active." +msgstr "" + +#: includes/include.pretplcfg_edit_form.php:101 +#, php-format +msgid "Module in Container %s" +msgstr "" + +#: includes/include.pretplcfg_edit_form.php:150 +msgid "Template preconfiguration" +msgstr "" + +#: includes/include.mod_overview.php:198 +msgid "Module in use, cannot delete" +msgstr "" + +#: includes/include.mod_overview.php:200 +msgid "Module in filesystem, cannot delete" +msgstr "" + +#: includes/include.mod_overview.php:204 includes/cfg_language_de.inc.php:154 +msgid "Delete module" +msgstr "" + +#: includes/include.mod_overview.php:205 +#, php-format +msgid "Do you really want to delete the following module:

    %s
    " +msgstr "" + +#: includes/include.mod_overview.php:271 +#, php-format +msgid "The module '%s' is used for following templates" +msgstr "" + +#: includes/include.lang_left_top.php:80 includes/cfg_language_de.inc.php:189 +msgid "Create language" +msgstr "" + +#: includes/include.frontend.group.subnav.php:40 includes/main.login.php:210 +msgid "Overview" +msgstr "" + +#: includes/include.frontend.group_edit.php:56 +msgid "-- new group --" +msgstr "" + +#: includes/include.frontend.group_edit.php:121 +msgid "Could not set new group name: Group already exists" +msgstr "" + +#: includes/include.frontend.group_edit.php:227 +msgid "Default group" +msgstr "" + +#: includes/include.frontend.group_edit.php:275 +#: includes/cfg_language_de.inc.php:180 +msgid "Edit group" +msgstr "" + +#: includes/grouprights_members.inc.php:208 +msgid "Manage group members" +msgstr "" + +#: includes/include.style_left_top.php:50 +msgid "Create style" +msgstr "" + +#: includes/main.login.php:67 +msgid "No Login Information available." +msgstr "" + +#: includes/main.login.php:74 +msgid "" +"You're logged in with a temporary password. Please change your password." +msgstr "" + +#: includes/main.login.php:79 +msgid "" +"The setup directory still exists. Please remove the setup directory before " +"you continue." +msgstr "" + +#: includes/main.login.php:95 +msgid "" +"The sysadmin and/or the admin account still contains a well-known default " +"password. Please change immediately." +msgstr "" + +#: includes/main.login.php:109 +msgid "Welcome" +msgstr "" + +#: includes/main.login.php:110 +msgid "Last login" +msgstr "" + +#: includes/main.login.php:128 includes/main.login.php:165 +#, php-format +msgid "Client %s (%s) has no languages" +msgstr "" + +#: includes/main.login.php:148 +msgid "Change client" +msgstr "" + +#: includes/main.login.php:153 +msgid "No clients available!" +msgstr "" + +#: includes/main.login.php:205 +#, php-format +msgid "Reminder list: %d Task open" +msgstr "" + +#: includes/main.login.php:207 +#, php-format +msgid "Reminder list: %d Tasks open" +msgstr "" + +#: includes/main.login.php:238 +msgid "Symbol help" +msgstr "" + +#: includes/main.login.php:241 +msgid "Contenido Manual" +msgstr "" + +#: includes/cfg_language_de.inc.php:99 +msgid "Make category online" +msgstr "" + +#: includes/cfg_language_de.inc.php:100 +msgid "Change template" +msgstr "" + +#: includes/cfg_language_de.inc.php:101 +msgid "Set start article" +msgstr "" + +#: includes/cfg_language_de.inc.php:102 +msgid "Make article online" +msgstr "" + +#: includes/cfg_language_de.inc.php:103 +msgid "Syncronize Category" +msgstr "" + +#: includes/cfg_language_de.inc.php:104 +msgid "Syncronize Article" +msgstr "" + +#: includes/cfg_language_de.inc.php:105 includes/cfg_language_de.inc.php:124 +#: includes/include.str_overview.php:963 includes/include.str_overview.php:965 +#: templates/standard/template.str_overview.html:139 +msgid "Protect category" +msgstr "" + +#: includes/cfg_language_de.inc.php:107 +msgid "Edit template configuration" +msgstr "" + +#: includes/cfg_language_de.inc.php:108 +msgid "Duplicate Article" +msgstr "" + +#: includes/cfg_language_de.inc.php:109 +msgid "Expand boxes" +msgstr "" + +#: includes/cfg_language_de.inc.php:110 backend_search.php:677 +#: templates/standard/template.symbolhelp.html:377 +msgid "Configure template" +msgstr "" + +#: includes/cfg_language_de.inc.php:111 +msgid "Create article" +msgstr "" + +#: includes/cfg_language_de.inc.php:112 +msgid "Configure article" +msgstr "" + +#: includes/cfg_language_de.inc.php:113 +msgid "Save article" +msgstr "" + +#: includes/cfg_language_de.inc.php:115 includes/cfg_language_de.inc.php:117 +msgid "Edit article" +msgstr "" + +#: includes/cfg_language_de.inc.php:116 +msgid "Edit article properties" +msgstr "" + +#: includes/cfg_language_de.inc.php:118 +msgid "Help" +msgstr "" + +#: includes/cfg_language_de.inc.php:120 +#: templates/standard/template.symbolhelp.html:524 +msgid "Rename category" +msgstr "" + +#: includes/cfg_language_de.inc.php:121 +msgid "New category" +msgstr "" + +#: includes/cfg_language_de.inc.php:122 +msgid "Set category on- or offline" +msgstr "" + +#: includes/cfg_language_de.inc.php:123 +msgid "Disable category" +msgstr "" + +#: includes/cfg_language_de.inc.php:125 +msgid "Frontend access" +msgstr "" + +#: includes/cfg_language_de.inc.php:126 +msgid "Delete category" +msgstr "" + +#: includes/cfg_language_de.inc.php:127 +msgid "Move category up" +msgstr "" + +#: includes/cfg_language_de.inc.php:128 +msgid "Move category down" +msgstr "" + +#: includes/cfg_language_de.inc.php:129 +#: templates/standard/template.symbolhelp.html:665 +msgid "Move category" +msgstr "" + +#: includes/cfg_language_de.inc.php:130 +msgid "Create new tree" +msgstr "" + +#: includes/cfg_language_de.inc.php:131 +#: templates/standard/template.symbolhelp.html:701 +msgid "Duplicate category" +msgstr "" + +#: includes/cfg_language_de.inc.php:132 includes/include.str_overview.php:949 +#: includes/include.str_overview.php:952 +#: templates/standard/template.symbolhelp.html:314 +#: templates/standard/template.symbolhelp.html:506 +#: templates/standard/template.str_overview.html:148 +msgid "Configure category" +msgstr "" + +#: includes/cfg_language_de.inc.php:133 +msgid "Edit category" +msgstr "" + +#: includes/cfg_language_de.inc.php:135 includes/cfg_language_de.inc.php:145 +msgid "Create directory" +msgstr "" + +#: includes/cfg_language_de.inc.php:137 +msgid "Delete files" +msgstr "" + +#: includes/cfg_language_de.inc.php:138 +msgid "Remove directory" +msgstr "" + +#: includes/cfg_language_de.inc.php:139 +msgid "Rename directory" +msgstr "" + +#: includes/cfg_language_de.inc.php:140 +msgid "Modify file" +msgstr "" + +#: includes/cfg_language_de.inc.php:141 +msgid "Rename file" +msgstr "" + +#: includes/cfg_language_de.inc.php:142 +msgid "Multidelete Files" +msgstr "" + +#: includes/cfg_language_de.inc.php:148 +msgid "Modify layout" +msgstr "" + +#: includes/cfg_language_de.inc.php:149 +msgid "Create layout" +msgstr "" + +#: includes/cfg_language_de.inc.php:150 includes/cfg_language_de.inc.php:155 +#: includes/cfg_language_de.inc.php:201 includes/cfg_language_de.inc.php:207 +#: includes/cfg_language_de.inc.php:213 +msgid "Manage History" +msgstr "" + +#: includes/cfg_language_de.inc.php:151 includes/cfg_language_de.inc.php:156 +#: includes/cfg_language_de.inc.php:202 includes/cfg_language_de.inc.php:208 +#: includes/cfg_language_de.inc.php:214 +msgid "Truncate History" +msgstr "" + +#: includes/cfg_language_de.inc.php:158 +msgid "Create module" +msgstr "" + +#: includes/cfg_language_de.inc.php:159 +msgid "Import/Export module" +msgstr "" + +#: includes/cfg_language_de.inc.php:160 +msgid "Translate modules" +msgstr "" + +#: includes/cfg_language_de.inc.php:161 +msgid "Translation import/export" +msgstr "" + +#: includes/cfg_language_de.inc.php:162 +msgid "Import/Export package" +msgstr "" + +#: includes/cfg_language_de.inc.php:166 +msgid "Create template" +msgstr "" + +#: includes/cfg_language_de.inc.php:169 +msgid "Visual edit" +msgstr "" + +#: includes/cfg_language_de.inc.php:173 +msgid "Save user area rights" +msgstr "" + +#: includes/cfg_language_de.inc.php:175 +msgid "Edit rights" +msgstr "" + +#: includes/cfg_language_de.inc.php:178 +msgid "Delete group members" +msgstr "" + +#: includes/cfg_language_de.inc.php:179 +msgid "Add group members" +msgstr "" + +#: includes/cfg_language_de.inc.php:184 +msgid "Show statistics" +msgstr "" + +#: includes/cfg_language_de.inc.php:186 includes/include.lang_overview.php:68 +msgid "Activate language" +msgstr "" + +#: includes/cfg_language_de.inc.php:187 includes/include.lang_overview.php:72 +msgid "Deactivate language" +msgstr "" + +#: includes/cfg_language_de.inc.php:188 +msgid "Rename language" +msgstr "" + +#: includes/cfg_language_de.inc.php:190 includes/include.lang_overview.php:78 +msgid "Delete language" +msgstr "" + +#: includes/cfg_language_de.inc.php:193 +msgid "Linkchecker" +msgstr "" + +#: includes/cfg_language_de.inc.php:194 +msgid "Linkchecker Whitelist" +msgstr "" + +#: includes/cfg_language_de.inc.php:196 +msgid "Install/Remove plugins" +msgstr "" + +#: includes/cfg_language_de.inc.php:198 +msgid "Modify CSS" +msgstr "" + +#: includes/cfg_language_de.inc.php:199 +msgid "Create CSS" +msgstr "" + +#: includes/cfg_language_de.inc.php:200 +msgid "Delete CSS" +msgstr "" + +#: includes/cfg_language_de.inc.php:204 +msgid "Edit script" +msgstr "" + +#: includes/cfg_language_de.inc.php:205 +msgid "Delete script" +msgstr "" + +#: includes/cfg_language_de.inc.php:210 +msgid "Modify HTML-Template" +msgstr "" + +#: includes/cfg_language_de.inc.php:211 +msgid "Create HTML-Template" +msgstr "" + +#: includes/cfg_language_de.inc.php:212 +msgid "Delete HTML-Template" +msgstr "" + +#: includes/cfg_language_de.inc.php:216 +msgid "Edit newsletter" +msgstr "" + +#: includes/cfg_language_de.inc.php:217 +#: templates/standard/template.symbolhelp.html:1279 +msgid "Create newsletter" +msgstr "" + +#: includes/cfg_language_de.inc.php:218 +msgid "Delete newsletter" +msgstr "" + +#: includes/cfg_language_de.inc.php:219 +msgid "Duplicate newsletter" +msgstr "" + +#: includes/cfg_language_de.inc.php:220 +msgid "Add newsletter dispatch job" +msgstr "" + +#: includes/cfg_language_de.inc.php:221 +msgid "Change global HTML newsletter settings" +msgstr "" + +#: includes/cfg_language_de.inc.php:222 +msgid "Send test newsletter (to groups)" +msgstr "" + +#: includes/cfg_language_de.inc.php:223 +msgid "Delete dispatch job" +msgstr "" + +#: includes/cfg_language_de.inc.php:224 +msgid "Remove recipient from dispatch job" +msgstr "" + +#: includes/cfg_language_de.inc.php:225 +msgid "Run job" +msgstr "" + +#: includes/cfg_language_de.inc.php:226 +msgid "View dispatch job details" +msgstr "" + +#: includes/cfg_language_de.inc.php:228 +msgid "Edit recipient" +msgstr "" + +#: includes/cfg_language_de.inc.php:229 +#: templates/standard/template.symbolhelp.html:1373 +msgid "Create recipient" +msgstr "" + +#: includes/cfg_language_de.inc.php:230 +msgid "Delete recipient" +msgstr "" + +#: includes/cfg_language_de.inc.php:231 +msgid "Purge recipients" +msgstr "" + +#: includes/cfg_language_de.inc.php:232 +msgid "Import recipients" +msgstr "" + +#: includes/cfg_language_de.inc.php:233 +msgid "Execute recipients import" +msgstr "" + +#: includes/cfg_language_de.inc.php:234 +msgid "Delete recipient group" +msgstr "" + +#: includes/cfg_language_de.inc.php:235 +#: templates/standard/template.symbolhelp.html:1409 +msgid "Create recipient group" +msgstr "" + +#: includes/cfg_language_de.inc.php:236 +msgid "Delete recipient from group" +msgstr "" + +#: includes/cfg_language_de.inc.php:237 +msgid "Save recipient group" +msgstr "" + +#: includes/cfg_language_de.inc.php:239 +msgid "Edit own MyContenido settings" +msgstr "" + +#: includes/cfg_language_de.inc.php:240 +msgid "Delete reminder item" +msgstr "" + +#: includes/cfg_language_de.inc.php:241 +msgid "Save todo item" +msgstr "" + +#: includes/cfg_language_de.inc.php:244 +msgid "Edit client" +msgstr "" + +#: includes/cfg_language_de.inc.php:245 +msgid "Remove client" +msgstr "" + +#: includes/cfg_language_de.inc.php:246 +msgid "Delete clientsetting" +msgstr "" + +#: includes/cfg_language_de.inc.php:247 +msgid "Edit clientsetting" +msgstr "" + +#: includes/cfg_language_de.inc.php:248 +msgid "Save clientsetting" +msgstr "" + +#: includes/cfg_language_de.inc.php:249 +msgid "Create/Edit articlespecifications" +msgstr "" + +#: includes/cfg_language_de.inc.php:250 +msgid "Delete articlespecifications" +msgstr "" + +#: includes/cfg_language_de.inc.php:251 +msgid "Define default articlespecification" +msgstr "" + +#: includes/cfg_language_de.inc.php:252 +msgid "Edit articlespecifications" +msgstr "" + +#: includes/cfg_language_de.inc.php:253 +msgid "Make articlespecifications online" +msgstr "" + +#: includes/cfg_language_de.inc.php:255 +msgid "Save frontenduser" +msgstr "" + +#: includes/cfg_language_de.inc.php:256 +msgid "Create frontenduser" +msgstr "" + +#: includes/cfg_language_de.inc.php:257 includes/cfg_language_de.inc.php:263 +msgid "Delete frontenduser" +msgstr "" + +#: includes/cfg_language_de.inc.php:258 +msgid "Delete frontendgroup" +msgstr "" + +#: includes/cfg_language_de.inc.php:259 +msgid "Save frontendgroup" +msgstr "" + +#: includes/cfg_language_de.inc.php:260 includes/cfg_language_de.inc.php:261 +msgid "Create frontendgroup" +msgstr "" + +#: includes/cfg_language_de.inc.php:262 +msgid "Add frontendusers" +msgstr "" + +#: includes/cfg_language_de.inc.php:264 +msgid "Save frontendgroup permissions" +msgstr "" + +#: includes/cfg_language_de.inc.php:266 +msgid "Delete system property" +msgstr "" + +#: includes/cfg_language_de.inc.php:267 +msgid "Edit system property" +msgstr "" + +#: includes/cfg_language_de.inc.php:268 +msgid "Save system property" +msgstr "" + +#: includes/cfg_language_de.inc.php:270 +msgid "Empty log" +msgstr "" + +#: includes/cfg_language_de.inc.php:271 +msgid "Edit Systemconfigration" +msgstr "" + +#: includes/cfg_language_de.inc.php:272 +msgid "Do system purge" +msgstr "" + +#: includes/cfg_language_de.inc.php:274 +msgid "Show log" +msgstr "" + +#: includes/cfg_language_de.inc.php:276 main.loginform.php:159 +msgid "Login" +msgstr "" + +#: includes/cfg_language_de.inc.php:277 +msgid "Request password?" +msgstr "" + +#: includes/cfg_language_de.inc.php:279 +msgid "Delete note" +msgstr "" + +#: includes/cfg_language_de.inc.php:280 +msgid "Save note" +msgstr "" + +#: includes/cfg_language_de.inc.php:282 +msgid "Send mail" +msgstr "" + +#: includes/cfg_language_de.inc.php:283 +msgid "Fake permissions" +msgstr "" + +#: includes/include.style_history.php:126 +msgid "Edit Style" +msgstr "" + +#: includes/include.frontend.left_top.php:141 +msgid "Frontend users" +msgstr "" + +#: includes/include.frontend.left_top.php:148 +msgid "Frontend groups" +msgstr "" + +#: includes/include.frontend.left_top.php:261 +msgid "Show group" +msgstr "" + +#: includes/include.frontend.left_top.php:269 includes/include.mod_new.php:173 +msgid "Search in" +msgstr "" + +#: includes/include.mod_new.php:69 +msgid "New module" +msgstr "" + +#: includes/include.mod_new.php:72 +msgid "Sync module" +msgstr "" + +#: includes/include.mod_new.php:97 includes/include.mod_new.php:107 +#: includes/include.mod_new.php:127 +msgid "-- All --" +msgstr "" + +#: includes/include.mod_new.php:108 +msgid "Modulname" +msgstr "" + +#: includes/include.mod_new.php:128 +msgid "-- Without type --" +msgstr "" + +#: includes/include.mod_new.php:165 +msgid "Type filter" +msgstr "" + +#: includes/functions.lang.php:119 +msgid "" +"Could not set the language-ID in the file 'config.php'. Please set the " +"language manually." +msgstr "" + +#: includes/functions.lang.php:591 +msgid "Could not delete language" +msgstr "" + +#: includes/include.str_overview.php:511 +#, php-format +msgid "" +"Do you really want to duplicate the following category:

    %s

    Notice: The duplicate process can take up to several minutes, " +"depending on how many subitems and articles you've got." +msgstr "" + +#: includes/include.str_overview.php:513 +#, php-format +msgid "Do you really want to delete the following category:

    %s" +msgstr "" + +#: includes/include.str_overview.php:920 +msgid "Create new category" +msgstr "" + +#: includes/include.str_overview.php:993 +#, php-format +msgid "Cancel moving %s" +msgstr "" + +#: includes/include.html_tpl_left_top.php:50 +msgid "Create module template" +msgstr "" + +#: includes/include.lang_overview.php:77 +#, php-format +msgid "Do you really want to delete the language %s?" +msgstr "" + +#: includes/include.lang_overview.php:118 +msgid "Language deleted" +msgstr "" + +#: includes/include.system_sysvalues.php:79 +#: includes/include.system_sysvalues.php:123 +msgid "No error log entries found" +msgstr "" + +#: includes/include.system_sysvalues.php:83 +msgid "No error log file found" +msgstr "" + +#: includes/include.system_sysvalues.php:116 +msgid "No install error log entries found" +msgstr "" + +#: includes/include.frontend.group_menu.php:51 +msgid "Delete frontend group" +msgstr "" + +#: includes/include.frontend.group_menu.php:52 +#, php-format +msgid "Do you really want to delete the following frontend group:
    %s" +msgstr "" + +#: includes/include.rights_create.php:53 +msgid "Username can't be empty" +msgstr "" + +#: includes/include.rights_create.php:85 +msgid "User created" +msgstr "" + +#: includes/include.rights_create.php:106 +msgid "Username already exists" +msgstr "" + +#: includes/include.rights_create.php:110 +msgid "Unknown error" +msgstr "" + +#: includes/functions.mod.php:200 +msgid "Please do not use short open Tags. (Use
    %s
    " +msgstr "" + +#: includes/include.note.popup.php:63 +msgid "Add note" +msgstr "" + +#: includes/include.note.popup.php:75 +msgid "No category" +msgstr "" + +#: includes/include.note.popup.php:92 +msgid "Note" +msgstr "" + +#: includes/functions.lay.php:66 +msgid "-- Unnamed Layout --" +msgstr "" + +#: includes/include.system_purge.php:79 includes/include.system_purge.php:87 +#: includes/include.system_purge.php:95 includes/include.system_purge.php:103 +#: includes/include.system_purge.php:112 +msgid "Client " +msgstr "" + +#: includes/include.system_purge.php:80 includes/include.system_purge.php:128 +#: includes/include.system_purge.php:135 +#, php-format +msgid "The entries of %s table are not deleted!" +msgstr "" + +#: includes/include.system_purge.php:88 +#, php-format +msgid "The %s is not updated!" +msgstr "" + +#: includes/include.system_purge.php:96 +msgid "The cache is not deleted!" +msgstr "" + +#: includes/include.system_purge.php:104 +msgid "The log is not deleted!" +msgstr "" + +#: includes/include.system_purge.php:113 +msgid "The history is not deleted!" +msgstr "" + +#: includes/include.system_purge.php:143 +msgid "The contenido log is not cleaned!" +msgstr "" + +#: includes/include.system_purge.php:150 +msgid "The contenido cache is not deleted!" +msgstr "" + +#: includes/include.system_purge.php:157 +msgid "The contenido cronjobs are not cleaned!" +msgstr "" + +#: includes/include.system_purge.php:164 +msgid "Update of sequence table not completed!" +msgstr "" + +#: includes/include.system_purge.php:169 +msgid "The changes were successfully executed." +msgstr "" + +#: includes/include.system_purge.php:171 +msgid "The changes were not all successfully completed." +msgstr "" + +#: includes/include.system_purge.php:190 includes/include.system_purge.php:214 +msgid "System purge" +msgstr "" + +#: includes/include.system_purge.php:191 +msgid "No Client selected!" +msgstr "" + +#: includes/include.system_purge.php:196 +msgid "all clients" +msgstr "" + +#: includes/include.system_purge.php:197 +msgid "from list" +msgstr "" + +#: includes/include.system_purge.php:198 +msgid "Select clients" +msgstr "" + +#: includes/include.system_purge.php:199 includes/include.system_purge.php:201 +#: includes/include.system_purge.php:209 +#, php-format +msgid "Reset the table %s" +msgstr "" + +#: includes/include.system_purge.php:200 +#, php-format +msgid "Activate the code generation in %s" +msgstr "" + +#: includes/include.system_purge.php:202 +msgid "Clear client cache" +msgstr "" + +#: includes/include.system_purge.php:203 +msgid "Clear client log file" +msgstr "" + +#: includes/include.system_purge.php:204 +msgid "Clear client history" +msgstr "" + +#: includes/include.system_purge.php:205 +msgid "Keep last histories" +msgstr "" + +#: includes/include.system_purge.php:207 +msgid "Contenido" +msgstr "" + +#: includes/include.system_purge.php:208 +msgid "Clear contenido log file" +msgstr "" + +#: includes/include.system_purge.php:210 +msgid "Clear contenido cache" +msgstr "" + +#: includes/include.system_purge.php:211 +msgid "Reset cronjobs" +msgstr "" + +#: includes/include.system_purge.php:212 +msgid "Update sequence table" +msgstr "" + +#: includes/include.system_purge.php:215 +msgid "These changes can not be cancelled." +msgstr "" + +#: includes/include.system_purge.php:215 +msgid "Do you really want to complete it?" +msgstr "" + +#: includes/include.system_purge.php:220 +msgid "No action selected!" +msgstr "" + +#: includes/include.system_purge.php:222 +msgid "Send" +msgstr "" + +#: backend_search.php:328 +msgid "Thank you for saving this search from extinction !" +msgstr "" + +#: backend_search.php:490 +msgid "Search results" +msgstr "" + +#: backend_search.php:506 +msgid "Missing search value." +msgstr "" + +#: backend_search.php:507 backend_search.php:734 +msgid "No article found." +msgstr "" + +#: backend_search.php:672 +msgid "Reminder" +msgstr "" + +#: backend_search.php:674 classes/class.todo.php:158 +#: classes/class.todo.php:161 +msgid "Set reminder / add to todo list" +msgstr "" + +#: backend_search.php:679 +msgid "Do you really want to delete following article" +msgstr "" + +#: backend_search.php:765 +msgid "Search Name" +msgstr "" + +#: backend_search.php:767 +msgid "Store" +msgstr "" + +#: backend_search.php:772 +msgid "Save this Search" +msgstr "" + +#: external/backendedit/front_content.php:331 +#: external/backendedit/front_content.php:386 +#: external/frontend/front_content.php:348 +#: external/frontend/front_content.php:396 +msgid "No start article for this category" +msgstr "" + +#: templates/standard/template.symbolhelp.html:23 +msgid "Table of contents" +msgstr "" + +#: templates/standard/template.symbolhelp.html:29 +#: templates/standard/template.symbolhelp.html:135 +msgid "Common" +msgstr "" + +#: templates/standard/template.symbolhelp.html:35 +#: templates/standard/template.symbolhelp.html:277 +msgid "Content" +msgstr "" + +#: templates/standard/template.symbolhelp.html:44 +#: templates/standard/template.symbolhelp.html:740 +msgid "File management" +msgstr "" + +#: templates/standard/template.symbolhelp.html:50 +#: templates/standard/template.symbolhelp.html:816 +msgid "Style" +msgstr "" + +#: templates/standard/template.symbolhelp.html:56 +#: templates/standard/template.symbolhelp.html:904 +msgid "Modules" +msgstr "" + +#: templates/standard/template.symbolhelp.html:59 +#: templates/standard/template.symbolhelp.html:985 +msgid "Templates" +msgstr "" + +#: templates/standard/template.symbolhelp.html:62 +#: templates/standard/template.symbolhelp.html:1055 +msgid "CSS editor" +msgstr "" + +#: templates/standard/template.symbolhelp.html:65 +#: templates/standard/template.symbolhelp.html:1110 +msgid "Script editor" +msgstr "" + +#: templates/standard/template.symbolhelp.html:68 +#: templates/standard/template.symbolhelp.html:1165 +msgid "Module Templates" +msgstr "" + +#: templates/standard/template.symbolhelp.html:74 +#: templates/standard/template.symbolhelp.html:1242 +msgid "Extras" +msgstr "" + +#: templates/standard/template.symbolhelp.html:77 +#: templates/standard/template.symbolhelp.html:1248 +msgid "Newsletter" +msgstr "" + +#: templates/standard/template.symbolhelp.html:80 +msgid "Recipients" +msgstr "" + +#: templates/standard/template.symbolhelp.html:86 +#: templates/standard/template.symbolhelp.html:1466 +msgid "Statistics" +msgstr "" + +#: templates/standard/template.symbolhelp.html:95 +#: templates/standard/template.symbolhelp.html:1548 +msgid "Administration" +msgstr "" + +#: templates/standard/template.symbolhelp.html:98 +#: templates/standard/template.symbolhelp.html:1554 +msgid "Users" +msgstr "" + +#: templates/standard/template.symbolhelp.html:101 +#: templates/standard/template.symbolhelp.html:1609 +msgid "Groups" +msgstr "" + +#: templates/standard/template.symbolhelp.html:104 +#: templates/standard/template.symbolhelp.html:1664 +msgid "Languages" +msgstr "" + +#: templates/standard/template.symbolhelp.html:107 +#: templates/standard/template.symbolhelp.html:1734 +msgid "Clients" +msgstr "" + +#: templates/standard/template.symbolhelp.html:129 +msgid "Table of Contents" +msgstr "" + +#: templates/standard/template.symbolhelp.html:166 +msgid "Execute query / Save" +msgstr "" + +#: templates/standard/template.symbolhelp.html:196 +#: classes/class.request.password.php:247 +msgid "Submit" +msgstr "" + +#: templates/standard/template.symbolhelp.html:208 +msgid "Change to MyContenido (Personal Settings)" +msgstr "" + +#: templates/standard/template.symbolhelp.html:220 +msgid "Information (Impressum)" +msgstr "" + +#: templates/standard/template.symbolhelp.html:235 +msgid "Logout" +msgstr "" + +#: templates/standard/template.symbolhelp.html:341 +msgid "Article is start article / is not start article" +msgstr "" + +#: templates/standard/template.symbolhelp.html:353 +#: templates/standard/template.symbolhelp.html:868 +#: templates/standard/template.symbolhelp.html:949 +msgid "Set template / Add to To-Do list" +msgstr "" + +#: templates/standard/template.symbolhelp.html:365 +msgid "Configure article properties" +msgstr "" + +#: templates/standard/template.symbolhelp.html:389 +msgid "Element is online / offline (change through click)" +msgstr "" + +#: templates/standard/template.symbolhelp.html:401 +msgid "Element is protected / accessible (change through click)" +msgstr "" + +#: templates/standard/template.symbolhelp.html:439 +msgid "Lock / unlock folder (change through click)" +msgstr "" + +#: templates/standard/template.symbolhelp.html:451 +msgid "Set folder offline / online (change through click)" +msgstr "" + +#: templates/standard/template.symbolhelp.html:542 +msgid "Create category" +msgstr "" + +#: templates/standard/template.symbolhelp.html:560 +msgid "Set category online / offline" +msgstr "" + +#: templates/standard/template.symbolhelp.html:578 +msgid "Category is online and unprotected / protected" +msgstr "" + +#: templates/standard/template.symbolhelp.html:596 +msgid "Category is offline and unprotected / protected" +msgstr "" + +#: templates/standard/template.symbolhelp.html:614 +msgid "Category is online, contains an error and is unprotected / protected" +msgstr "" + +#: templates/standard/template.symbolhelp.html:632 +msgid "Category is offline, contains an error and is unprotected / protected" +msgstr "" + +#: templates/standard/template.symbolhelp.html:650 +msgid "Move up one category" +msgstr "" + +#: templates/standard/template.symbolhelp.html:683 +msgid "Select move target" +msgstr "" + +#: templates/standard/template.symbolhelp.html:716 +#: templates/standard/template.symbolhelp.html:880 +#: templates/standard/template.symbolhelp.html:961 +#: templates/standard/template.symbolhelp.html:1031 +#: templates/standard/template.symbolhelp.html:1086 +#: templates/standard/template.symbolhelp.html:1141 +#: templates/standard/template.symbolhelp.html:1196 +#: templates/standard/template.symbolhelp.html:1306 +#: templates/standard/template.symbolhelp.html:1421 +#: templates/standard/template.symbolhelp.html:1585 +#: templates/standard/template.symbolhelp.html:1640 +#: templates/standard/template.symbolhelp.html:1710 +#: templates/standard/template.symbolhelp.html:1765 +#: templates/standard/template.symbolhelp.html:1871 +msgid "Delete / Delete not available" +msgstr "" + +#: templates/standard/template.symbolhelp.html:762 +msgid "Root upload folder" +msgstr "" + +#: templates/standard/template.symbolhelp.html:780 +msgid "Regular folder" +msgstr "" + +#: templates/standard/template.symbolhelp.html:853 +msgid "Layout in use" +msgstr "" + +#: templates/standard/template.symbolhelp.html:934 +msgid "Module in use" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1294 +msgid "Copy newsletter" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1330 +#: templates/standard/template.symbolhelp.html:1361 +msgid "Recipient" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1385 +msgid "Remove recipient" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1397 +msgid "Recipient group" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1503 +msgid "Article is online / offline" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1695 +msgid "Language active / not active" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1823 +#: templates/standard/template.log_main.html:22 +#: templates/standard/template.log_main.html:50 +#: classes/class.navigation.php:360 +msgid "User" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1847 +msgid "User group" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1859 +msgid "Create user group" +msgstr "" + +#: templates/standard/template.info.html:15 +msgid "Concept and Implementation" +msgstr "" + +#: templates/standard/template.info.html:15 +msgid "Germany" +msgstr "" + +#: templates/standard/template.info.html:15 +msgid "Phone" +msgstr "" + +#: templates/standard/template.system_variables.html:16 +msgid "Your system configuration" +msgstr "" + +#: templates/standard/template.system_variables.html:21 +msgid "Variable" +msgstr "" + +#: templates/standard/template.system_variables.html:22 +msgid "Local value" +msgstr "" + +#: templates/standard/template.system_variables.html:37 +msgid "Contenido Error Log" +msgstr "" + +#: templates/standard/template.system_variables.html:50 +msgid "clear error log" +msgstr "" + +#: templates/standard/template.system_variables.html:58 +msgid "Contenido Upgrade Error Log" +msgstr "" + +#: templates/standard/template.system_variables.html:72 +msgid "clear upgrade error log" +msgstr "" + +#: templates/standard/template.rights_inc.html:24 +msgid "Client / Language" +msgstr "" + +#: templates/standard/template.str_overview.html:157 +msgid "Category is a tree" +msgstr "" + +#: templates/standard/template.str_overview.html:164 +msgid "Position of category" +msgstr "" + +#: templates/standard/template.con_edit_form.html:153 +msgid "When expired, move to category" +msgstr "" + +#: templates/standard/template.con_edit_form.html:155 +msgid "Make online after move" +msgstr "" + +#: templates/standard/template.con_edit_form.html:184 +msgid "Page title" +msgstr "" + +#: templates/standard/template.con_edit_form.html:190 +msgid "Meta tags" +msgstr "" + +#: templates/standard/template.mycontenido_lastarticles.html:35 +msgid "Your clients" +msgstr "" + +#: templates/standard/template.mycontenido_lastarticles.html:67 +#: classes/class.notification.php:126 +msgid "Info" +msgstr "" + +#: templates/standard/template.welcome.html:22 +msgid "Available clients" +msgstr "" + +#: templates/standard/template.welcome.html:42 +msgid "Currently" +msgstr "" + +#: templates/standard/template.welcome.html:42 +msgid "Users online" +msgstr "" + +#: templates/standard/template.welcome.html:50 +msgid "Contact System Administrators" +msgstr "" + +#: templates/standard/template.upl_files_overview.html:61 +msgid "Sort files" +msgstr "" + +#: templates/standard/template.upl_files_overview.html:82 +#: classes/class.cms_filelist.php:438 +msgid "Filename" +msgstr "" + +#: templates/standard/template.upl_files_overview.html:86 +#: classes/class.cms_filelist.php:441 +msgid "File size" +msgstr "" + +#: templates/standard/template.upl_files_overview.html:88 +msgid "Image size" +msgstr "" + +#: templates/standard/template.recipient_menu.html:88 +#: templates/standard/template.log_main.html:38 +msgid "Limit" +msgstr "" + +#: templates/standard/template.log_main.html:14 +#: classes/class.cms_filelist.php:722 +msgid "Filter" +msgstr "" + +#: templates/standard/template.log_main.html:49 +msgid "Date" +msgstr "" + +#: cronjobs/send_reminder.php:97 +#, php-format +msgid "" +"Hello %s,\n" +"\n" +"you've got a new reminder for the client '%s' at\n" +"%s:\n" +"\n" +"%s" +msgstr "" + +#: main.loginform.php:70 +msgid "" +"Contenido is in maintenance mode. Only sysadmins are allowed to login. " +"Please try again later." +msgstr "" + +#: main.loginform.php:158 +msgid "ConLite Backend" +msgstr "" + +#: main.loginform.php:169 +msgid "Invalid Login or Password!" +msgstr "" + +#: main.loginform.php:176 +msgid "Password" +msgstr "" + +#: classes/class.versionFile.php:131 +msgid "Can not open file " +msgstr "" + +#: classes/class.request.password.php:251 +msgid "Please enter your login" +msgstr "" + +#: classes/class.request.password.php:257 +msgid "Hide request" +msgstr "" + +#: classes/class.request.password.php:301 +#, php-format +msgid "Password requests are allowed every %s minutes." +msgstr "" + +#: classes/class.request.password.php:309 +#: classes/class.request.password.php:322 +msgid "No matching data found. Please contact your systemadministrator." +msgstr "" + +#: classes/class.request.password.php:315 +msgid "New password was submitted to your e-mail address." +msgstr "" + +#: classes/class.request.password.php:358 +#, php-format +msgid "" +"Dear Contenidouser %s,\n" +"\n" +"Your password to log in Content Management System Contenido is: %s\n" +"\n" +"Best regards\n" +"\n" +"Your Contenido sysadmin" +msgstr "" + +#: classes/class.request.password.php:374 +msgid "Your new password for Contenido Backend" +msgstr "" + +#: classes/class.notification.php:114 scripts/langref.php:14 +#: scripts/articleObject.js.php:228 scripts/articleObject.js.php:231 +msgid "Error" +msgstr "" + +#: classes/class.notification.php:120 +msgid "Warning" +msgstr "" + +#: classes/class.notification.php:133 +msgid "Notification" +msgstr "" + +#: classes/widgets/class.widgets.datawidgets.php:314 +#: classes/widgets/class.widgets.datawidgets.php:315 +msgid "Clear contents" +msgstr "" + +#: classes/widgets/class.widgets.pager.php:47 +#: classes/widgets/class.widgets.pager.php:51 +msgid "Paging" +msgstr "" + +#: classes/widgets/class.widgets.pager.php:85 +msgid "First page" +msgstr "" + +#: classes/widgets/class.widgets.pager.php:92 +msgid "Previous page" +msgstr "" + +#: classes/widgets/class.widgets.pager.php:106 +#, php-format +msgid "Page %s" +msgstr "" + +#: classes/widgets/class.widgets.pager.php:122 +msgid "Next page" +msgstr "" + +#: classes/widgets/class.widgets.pager.php:132 +msgid "Last page" +msgstr "" + +#: classes/con2con/class.filehandler.php:451 +msgid "Wrong file name." +msgstr "" + +#: classes/con2con/class.filehandler.php:467 +msgid "Please insert file name." +msgstr "" + +#: classes/class.cms_teaser.php:386 +msgid "Block Style" +msgstr "" + +#: classes/class.cms_teaser.php:389 +msgid "Blog Style" +msgstr "" + +#: classes/class.cms_teaser.php:451 +msgid "Scaled" +msgstr "" + +#: classes/class.cms_teaser.php:454 +msgid "Cropped" +msgstr "" + +#: classes/class.cms_teaser.php:480 +msgid "Sort Sequence" +msgstr "" + +#: classes/class.cms_teaser.php:483 +msgid "Creationdate" +msgstr "" + +#: classes/class.cms_teaser.php:486 +msgid "Publisheddate" +msgstr "" + +#: classes/class.cms_teaser.php:489 +msgid "Modificationdate" +msgstr "" + +#: classes/class.cms_teaser.php:578 +msgid "Teasersettings" +msgstr "" + +#: classes/class.cms_teaser.php:579 +msgid "Teasertitle" +msgstr "" + +#: classes/class.cms_teaser.php:580 +msgid "Teaser Startarticle" +msgstr "" + +#: classes/class.cms_teaser.php:581 +msgid "Sourcecategory" +msgstr "" + +#: classes/class.cms_teaser.php:582 +msgid "Number of Articles" +msgstr "" + +#: classes/class.cms_teaser.php:583 classes/class.cms_filelist.php:724 +msgid "General Settings" +msgstr "" + +#: classes/class.cms_teaser.php:584 +msgid "Teaser Style" +msgstr "" + +#: classes/class.cms_teaser.php:585 +msgid "Advanced Teaser Settings" +msgstr "" + +#: classes/class.cms_teaser.php:586 +msgid "Teaser Filter" +msgstr "" + +#: classes/class.cms_teaser.php:587 +msgid "Teaser Sort" +msgstr "" + +#: classes/class.cms_teaser.php:589 +msgid "Source Headline" +msgstr "" + +#: classes/class.cms_teaser.php:590 +msgid "Source Settings" +msgstr "" + +#: classes/class.cms_teaser.php:591 +msgid "Source Text" +msgstr "" + +#: classes/class.cms_teaser.php:592 +msgid "Source Image" +msgstr "" + +#: classes/class.cms_teaser.php:593 +msgid "Source Date" +msgstr "" + +#: classes/class.cms_teaser.php:598 classes/class.cms_filelist.php:720 +msgid "General" +msgstr "" + +#: classes/class.cms_teaser.php:599 +msgid "Advanced" +msgstr "" + +#: classes/class.cms_teaser.php:600 classes/class.cms_filelist.php:721 +msgid "Manual" +msgstr "" + +#: classes/class.cms_teaser.php:601 +msgid "Included Articles" +msgstr "" + +#: classes/class.cms_teaser.php:602 +msgid "Add Article" +msgstr "" + +#: classes/class.cms_teaser.php:603 +msgid "Manual Teaser Settings" +msgstr "" + +#: classes/class.cms_teaser.php:604 +msgid "Manual Teaser" +msgstr "" + +#: classes/class.cms_teaser.php:607 +msgid "Size Settings" +msgstr "" + +#: classes/class.cms_teaser.php:608 +msgid "Characterlength" +msgstr "" + +#: classes/class.cms_teaser.php:609 +msgid "Imagewidth" +msgstr "" + +#: classes/class.cms_teaser.php:610 +msgid "Imageheight" +msgstr "" + +#: classes/class.cms_teaser.php:611 +msgid "Image Scale" +msgstr "" + +#: classes/class.cms_teaser.php:648 +msgid "Add" +msgstr "" + +#: classes/class.ajax.php:111 classes/class.ajax.php:135 +#: classes/class.ajax.php:185 +msgid "No data found!" +msgstr "" + +#: classes/class.ajax.php:160 +msgid "idcat" +msgstr "" + +#: classes/class.ajax.php:161 classes/class.ajax.php:178 +msgid "idlang" +msgstr "" + +#: classes/class.ajax.php:177 +msgid "idart" +msgstr "" + +#: classes/class.cms_date.php:212 +msgid "Please Choose Format" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:165 +msgid "Saturday" +msgstr "" + +#: classes/class.version.php:199 +#, php-format +msgid "Alternative path %s does not exist. Version was saved in frondendpath." +msgstr "" + +#: classes/class.version.php:538 +msgid "Clear layout history" +msgstr "" + +#: classes/class.version.php:539 +msgid "Do you really want to clear layout history?" +msgstr "" + +#: classes/class.version.php:539 +msgid "Note: This only affects the current layout." +msgstr "" + +#: classes/class.version.php:542 +msgid "Clear module history" +msgstr "" + +#: classes/class.version.php:543 +msgid "Do you really want to clear module history?" +msgstr "" + +#: classes/class.version.php:543 +msgid "Note: This only affects the current module." +msgstr "" + +#: classes/class.version.php:546 +msgid "Clear style history" +msgstr "" + +#: classes/class.version.php:547 +msgid "Do you really want to clear style history?" +msgstr "" + +#: classes/class.version.php:547 +msgid "Note: This only affects the current style." +msgstr "" + +#: classes/class.version.php:550 +msgid "Clear Java-Script history" +msgstr "" + +#: classes/class.version.php:551 +msgid "Do you really want to clear Java-Script history?" +msgstr "" + +#: classes/class.version.php:551 +msgid "Note: This only affects the current Java-Script." +msgstr "" + +#: classes/class.version.php:554 +msgid "Clear HTML-Template history" +msgstr "" + +#: classes/class.version.php:555 +msgid "Do you really want to clear HTML-Template history?" +msgstr "" + +#: classes/class.version.php:555 +msgid "Note: This only the affects current HTML-Template." +msgstr "" + +#: classes/class.version.php:558 +msgid "Clear history" +msgstr "" + +#: classes/class.version.php:559 +msgid "Do you really want to clear history?" +msgstr "" + +#: classes/class.version.php:559 +msgid "Note: This only affects the current history." +msgstr "" + +#: classes/class.conuser.php:842 classes/class.conuser.php:867 +#, php-format +msgid "" +"Please use at least %d lower and upper case characters in your password!" +msgstr "" + +#: classes/class.conuser.php:847 +#, php-format +msgid "Please use at least %d numbers in your password!" +msgstr "" + +#: classes/class.conuser.php:852 +#, php-format +msgid "Please use at least %d symbols in your password!" +msgstr "" + +#: classes/class.conuser.php:857 +#, php-format +msgid "Password is too short! Please use at least %d signs." +msgstr "" + +#: classes/class.conuser.php:863 +msgid "Password does not contain enough different characters." +msgstr "" + +#: classes/class.conuser.php:872 +msgid "Please choose a more secure password!" +msgstr "" + +#: classes/class.update.notifier.php:422 classes/class.update.notifier.php:427 +msgid "Unable to check for new updates!" +msgstr "" + +#: classes/class.update.notifier.php:422 +msgid "Could not handle server response!" +msgstr "" + +#: classes/class.update.notifier.php:427 +msgid "Could not determine vendor version!" +msgstr "" + +#: classes/class.update.notifier.php:540 +msgid "Unable to check for updates!" +msgstr "" + +#: classes/class.update.notifier.php:541 +#, php-format +msgid "Connection to %s failed!" +msgstr "" + +#: classes/class.update.notifier.php:646 +msgid "Disable update notification" +msgstr "" + +#: classes/class.update.notifier.php:648 classes/class.update.notifier.php:660 +msgid "Disable notification" +msgstr "" + +#: classes/class.update.notifier.php:651 +msgid "Enable update notification (recommended)" +msgstr "" + +#: classes/class.update.notifier.php:653 classes/class.update.notifier.php:667 +msgid "Enable notification" +msgstr "" + +#: classes/class.update.notifier.php:658 +msgid "Disable RSS notification" +msgstr "" + +#: classes/class.update.notifier.php:665 +msgid "Enable RSS notification (recommended)" +msgstr "" + +#: classes/class.update.notifier.php:669 +msgid "RSS notification is disabled" +msgstr "" + +#: classes/class.update.notifier.php:718 +msgid "read more" +msgstr "" + +#: classes/class.update.notifier.php:728 classes/class.update.notifier.php:737 +msgid "No RSS content available" +msgstr "" + +#: classes/class.update.notifier.php:735 classes/class.update.notifier.php:753 +msgid "" +"Your webserver does not have write permissions for the directory /contenido/" +"cache/!" +msgstr "" + +#: classes/class.update.notifier.php:756 +msgid "" +"Update notification is disabled! For actual update information, please " +"activate." +msgstr "" + +#: classes/class.update.notifier.php:761 +msgid "You have an unknown or unsupported version of ConLite!" +msgstr "" + +#: classes/class.update.notifier.php:764 +#, php-format +msgid "" +"Your version of ConLite is deprecated and not longer supported for any " +"updates. Please update to a higher version!
    Download now!" +msgstr "" + +#: classes/class.update.notifier.php:768 +#, php-format +msgid "" +"A new version of ConLite is available!
    Download %s now!" +msgstr "" + +#: classes/class.update.notifier.php:771 +#, php-format +msgid "" +"It seems to be that your version string was manipulated. ConLite %s does not " +"exist!" +msgstr "" + +#: classes/class.update.notifier.php:774 +msgid "Your version of ConLite is up to date!" +msgstr "" + +#: classes/template/class.template.php:332 +msgid "\"" +msgstr "" + +#: classes/contenido/class.layout.php:179 +msgid "" +"Layout uses LayFromFile. Editing and Saving may not be possible in backend." +msgstr "" + +#: classes/contenido/class.client.php:97 classes/class.client.php:131 +msgid "No client" +msgstr "" + +#: classes/contenido/class.module.php:916 +msgid "" +"Using old CamelCase for name of modulefolder. You may lowercase the name for " +"modulefolder" +msgstr "" + +#: classes/contenido/class.module.php:919 +msgid "" +"Module uses Output- and/or InputFromFile. Editing and Saving may not be " +"possible in backend." +msgstr "" + +#: classes/class.todo.php:101 +msgid "New" +msgstr "" + +#: classes/class.todo.php:102 +msgid "In progress" +msgstr "" + +#: classes/class.todo.php:103 +msgid "Done" +msgstr "" + +#: classes/class.todo.php:104 +msgid "Waiting for action" +msgstr "" + +#: classes/class.todo.php:105 +msgid "Deferred" +msgstr "" + +#: classes/class.todo.php:113 +msgid "Low" +msgstr "" + +#: classes/class.todo.php:114 +msgid "Medium" +msgstr "" + +#: classes/class.todo.php:115 +msgid "High" +msgstr "" + +#: classes/class.todo.php:116 +msgid "Immediately" +msgstr "" + +#: classes/class.navigation.php:435 +msgid "-- No Language available --" +msgstr "" + +#: classes/class.note.php:331 classes/class.note.php:334 +msgid "View notes / add note" +msgstr "" + +#: classes/class.inuse.php:242 +msgid "Click here if you want to override the lock" +msgstr "" + +#: classes/class.inuse.php:246 +msgid "Do you really want to override the lock?" +msgstr "" + +#: classes/class.inuse.php:248 +msgid "Override lock" +msgstr "" + +#: classes/class.inuse.php:248 +msgid "Hide notification" +msgstr "" + +#: classes/class.cms_filelist.php:413 +msgid "Default Style" +msgstr "" + +#: classes/class.cms_filelist.php:719 +msgid "Directories" +msgstr "" + +#: classes/class.cms_filelist.php:725 +msgid "Manual Settings" +msgstr "" + +#: classes/class.cms_filelist.php:726 +msgid "Filter settings" +msgstr "" + +#: classes/class.cms_filelist.php:727 +msgid "File list settings" +msgstr "" + +#: classes/class.cms_filelist.php:728 +msgid "File list title" +msgstr "" + +#: classes/class.cms_filelist.php:729 +msgid "File size limit" +msgstr "" + +#: classes/class.cms_filelist.php:730 +msgid "Creation date limit" +msgstr "" + +#: classes/class.cms_filelist.php:731 +msgid "Modify date limit" +msgstr "" + +#: classes/class.cms_filelist.php:733 +msgid "File list style" +msgstr "" + +#: classes/class.cms_filelist.php:734 +msgid "Source directory" +msgstr "" + +#: classes/class.cms_filelist.php:735 +msgid "Include subdirectories?" +msgstr "" + +#: classes/class.cms_filelist.php:736 +msgid "Include meta data?" +msgstr "" + +#: classes/class.cms_filelist.php:737 +msgid "File list sort" +msgstr "" + +#: classes/class.cms_filelist.php:739 +msgid "Displayed file extensions" +msgstr "" + +#: classes/class.cms_filelist.php:740 +msgid "Ignore selection (use all)" +msgstr "" + +#: classes/class.cms_filelist.php:741 +msgid "Selection will be ignored!" +msgstr "" + +#: classes/class.cms_filelist.php:742 +msgid "Select all entries" +msgstr "" + +#: classes/class.cms_filelist.php:743 +msgid "Use manual file list?" +msgstr "" + +#: classes/class.cms_filelist.php:744 +msgid "Directory" +msgstr "" + +#: classes/class.cms_filelist.php:746 +msgid "Files" +msgstr "" + +#: classes/class.cms_filelist.php:747 +msgid "Existing files" +msgstr "" + +#: classes/class.cms_filelist.php:748 +msgid "Add file" +msgstr "" + +#: classes/class.cms_filelist.php:749 +msgid "File count" +msgstr "" + +#: scripts/HTMLObj.js.php:248 scripts/langref.php:10 +msgid "Protect" +msgstr "" + +#: scripts/HTMLObj.js.php:251 scripts/langref.php:11 +msgid "Remove protection" +msgstr "" + +#: scripts/messageBox.js.php:78 scripts/langref.php:20 +msgid "Confirm" +msgstr "" + +#: scripts/messageBox.js.php:80 scripts/langref.php:22 +msgid "Close window" +msgstr "" + +#: scripts/rights.js.php:67 scripts/rights.js.php:70 scripts/langref.php:23 +#: scripts/iZoom.js.php:70 scripts/iZoom.js.php:73 +msgid "Click to close" +msgstr "" + +#: scripts/langref.php:13 scripts/articleObject.js.php:248 +msgid "Overview cannot be displayed" +msgstr "" + +#: scripts/langref.php:15 scripts/articleObject.js.php:274 +msgid "Article can't be displayed" +msgstr "" + +#: scripts/langref.php:16 scripts/articleObject.js.php:274 +#: scripts/articleObject.js.php:305 scripts/articleObject.js.php:335 +#: scripts/articleObject.js.php:360 scripts/articleObject.js.php:379 +msgid "No article was selected" +msgstr "" + +#: scripts/langref.php:17 scripts/articleObject.js.php:305 +msgid "Template configuration can't be displayed" +msgstr "" + +#: scripts/langref.php:18 scripts/articleObject.js.php:257 +#: scripts/articleObject.js.php:290 scripts/articleObject.js.php:319 +#: scripts/articleObject.js.php:335 +msgid "Editor can't be displayed" +msgstr "" + +#: scripts/langref.php:19 scripts/articleObject.js.php:360 +msgid "Preview can't be displayed" +msgstr "" + +#: scripts/langref.php:24 +msgid "Headline / HTML" +msgstr "" + +#: scripts/langref.php:25 +msgid "Text / HTML" +msgstr "" + +#: scripts/langref.php:26 +msgid "Text / Standard" +msgstr "" + +#: scripts/langref.php:27 +msgid "Picture" +msgstr "" + +#: scripts/langref.php:29 +msgid "Description / Standard" +msgstr "" + +#: scripts/langref.php:30 +msgid "Flash Movie" +msgstr "" + +#: scripts/langref.php:32 +msgid "Frame" +msgstr "" + +#: scripts/articleObject.js.php:257 scripts/articleObject.js.php:290 +#: scripts/articleObject.js.php:319 +msgid "Can't edit articles in foreign languages." +msgstr "" + +#: scripts/articleObject.js.php:379 +msgid "Tab can't be displayed" +msgstr "" diff --git a/branches/conlite20/conlite/locale/de_DE/LC_MESSAGES/conlite.mo b/branches/conlite20/conlite/locale/de_DE/LC_MESSAGES/conlite.mo new file mode 100644 index 0000000000000000000000000000000000000000..3a27ab35e2e1e2ebde11847eae1e4faae85780ee GIT binary patch literal 79652 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 dV^~_MMHxn~ajA-I9J\n" +"Language-Team: CL-Dev \n" +"Language: de_DE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-KeywordsList: i18n\n" +"X-Poedit-Keywords: i18n,trans\n" +"X-Poedit-SourceCharset: iso-8859-1\n" +"X-Generator: Poedit 1.5.4\n" + +#: includes/include.system_configuration.php:93 +msgid "Versioning activated" +msgstr "Versionierung aktiviert" + +#: includes/include.system_configuration.php:93 +#: includes/include.system_configuration.php:94 +#: includes/include.system_configuration.php:95 +msgid "Versioning" +msgstr "Versionierung" + +#: includes/include.system_configuration.php:94 +msgid "Serverpath to version files" +msgstr "Serverpfad für Versionierungsdateien" + +#: includes/include.system_configuration.php:95 +msgid "Maximum number of stored versions" +msgstr "Maximale Anzahl gespeicherter Versionen" + +#: includes/include.system_configuration.php:96 +msgid "Check for updates" +msgstr "Auf Aktualisierungen prüfen" + +#: includes/include.system_configuration.php:96 +#: includes/include.system_configuration.php:97 +#: includes/include.system_configuration.php:98 +msgid "Update notifier" +msgstr "Update Benachrichtigung" + +#: includes/include.system_configuration.php:97 +#, fuzzy +msgid "Get news from conlite.org" +msgstr "Neuigkeiten von conlite.org lesen" + +#: includes/include.system_configuration.php:98 +msgid "Update check period (minutes)" +msgstr "Aktualisierungsperiode (Minuten)" + +#: includes/include.system_configuration.php:99 +msgid "Clickable menu in backend" +msgstr "Hauptmenüwechsel bei Klick" + +#: includes/include.system_configuration.php:99 +#: includes/include.system_configuration.php:100 +#: includes/include.system_configuration.php:101 +#: includes/include.system_configuration.php:102 +#: includes/include.system_configuration.php:103 +#: includes/include.system_configuration.php:104 +msgid "Backend" +msgstr "Backend" + +#: includes/include.system_configuration.php:100 +msgid "Use passwordrequest in Backend" +msgstr "Passwort vergessen Funktion benutzen" + +#: includes/include.system_configuration.php:101 +msgid "Activate maintenance mode" +msgstr "Wartungsmodus aktiviert" + +#: includes/include.system_configuration.php:102 +msgid "Use editarea for code highlighting" +msgstr "Editarea für Syntaxhighlighting verwenden" + +#: includes/include.system_configuration.php:103 +msgid "Use TinyMce as insight editor" +msgstr "TinyMce als Insite Editor verwenden" + +#: includes/include.system_configuration.php:104 +msgid "Default client (ID)" +msgstr "Standardmandant (ID)" + +#: includes/include.system_configuration.php:105 +msgid "Mailserver host" +msgstr "Mailserver Host" + +#: includes/include.system_configuration.php:105 +#: includes/include.system_configuration.php:106 +#: includes/include.system_configuration.php:107 +msgid "Mailserver" +msgstr "Mailserver" + +#: includes/include.system_configuration.php:106 +msgid "Mailserver sender mail" +msgstr "Mailserver Absender-Mail" + +#: includes/include.system_configuration.php:107 +msgid "Mailserver sender name" +msgstr "Mailserver Absender-Name" + +#: includes/include.system_configuration.php:109 +msgid "Generate basehref" +msgstr "Base-href erzeugen" + +#: includes/include.system_configuration.php:109 +#: includes/include.system_configuration.php:110 +msgid "Development" +msgstr "Entwicklung" + +#: includes/include.system_configuration.php:110 +msgid "Use image magic (if available)" +msgstr "Image magic benutzen (wenn verfügbar)" + +#: includes/include.system_configuration.php:123 +msgid "Update check period must be at least 60 minutes." +msgstr "Die Aktualisierungsperiode muss mindestens 60 Minuten betragen." + +#: includes/include.system_configuration.php:133 +#: includes/include.lang_edit.php:140 includes/include.client_edit.php:172 +#: includes/grouprights.inc.php:335 +#: includes/include.grouprights_overview.php:65 +#: includes/include.rights_overview.php:141 +msgid "Changes saved" +msgstr "Änderungen gespeichert" + +#: includes/include.system_configuration.php:142 +msgid "System Configuration" +msgstr "Systemeinstellungen" + +#: includes/include.system_configuration.php:192 +msgid "Access denied" +msgstr "Zugriff verweigert" + +#: includes/include.lang_edit.php:84 includes/include.lang_overview.php:103 +msgid "New language" +msgstr "Neue Sprache" + +#: includes/include.lang_edit.php:127 includes/include.logs.php:46 +#: includes/grouprights_lay.inc.php:55 includes/grouprights_lay.inc.php:74 +#: includes/include.tpl_edit_form.php:39 includes/include.js_edit_form.php:50 +#: includes/include.grouprights_create.php:42 +#: includes/include.html_tpl_history.php:59 includes/rights_lay.inc.php:57 +#: includes/rights_mod.inc.php:55 includes/include.client_artspec.php:40 +#: includes/include.client_artspec.php:50 +#: includes/include.client_artspec.php:60 +#: includes/include.client_artspec.php:70 +#: includes/include.con_edit_form.php:764 includes/grouprights_str.inc.php:54 +#: includes/include.upl_dirs_overview.php:408 +#: includes/include.upl_dirs_overview.php:555 +#: includes/include.tplcfg_edit_form.php:144 +#: includes/include.con_art_overview.php:1013 +#: includes/grouprights_tpl.inc.php:53 includes/rights_con.inc.php:56 +#: includes/include.client_edit.php:48 includes/include.mod_history.php:52 +#: includes/include.js_history.php:55 includes/include.lay_history.php:46 +#: includes/include.grouprights_overview.php:42 +#: includes/include.lay_edit_form.php:43 includes/include.lay_edit_form.php:52 +#: includes/include.rights_overview.php:49 +#: includes/grouprights_area.inc.php:65 includes/grouprights_mod.inc.php:54 +#: includes/grouprights_members.inc.php:41 +#: includes/include.html_tpl_edit_form.php:50 +#: includes/include.style_history.php:57 +#: includes/include.style_edit_form.php:51 includes/grouprights_con.inc.php:56 +#: includes/include.rights_create.php:43 includes/rights_str.inc.php:55 +#: includes/rights_area.inc.php:58 includes/rights_tpl.inc.php:55 +#: includes/include.system_purge.php:37 +msgid "Permission denied" +msgstr "Zugriff verweigert" + +#: includes/include.lang_edit.php:228 +msgid "Left to right" +msgstr "Links nach rechts" + +#: includes/include.lang_edit.php:228 +msgid "Right to left" +msgstr "Rechts nach Links" + +#: includes/include.lang_edit.php:242 includes/cfg_language_de.inc.php:191 +msgid "Edit language" +msgstr "Sprache bearbeiten" + +#: includes/include.lang_edit.php:244 +msgid "Language name" +msgstr "Name der Sprache" + +#: includes/include.lang_edit.php:245 +#: includes/include.frontend.user_edit.php:188 +msgid "Active" +msgstr "Aktiv" + +#: includes/include.lang_edit.php:247 includes/include.lang_edit.php:249 +#: includes/include.con_editcontent.php:392 main.loginform.php:156 +msgid "Language" +msgstr "Sprachen" + +#: includes/include.lang_edit.php:248 +msgid "Encoding" +msgstr "Encoding" + +#: includes/include.lang_edit.php:250 includes/include.rights_overview.php:260 +#: includes/include.rights_create.php:204 +msgid "Country" +msgstr "Land" + +#: includes/include.lang_edit.php:251 +msgid "Text direction" +msgstr "Laufrichtung Text" + +#: includes/include.lang_edit.php:253 includes/include.lang_edit.php:256 +#: includes/include.mycontenido_settings.php:143 +msgid "Time format" +msgstr "Zeitformat" + +#: includes/include.lang_edit.php:254 +#: includes/include.mycontenido_settings.php:141 +msgid "Date/Time format" +msgstr "Format Datum/Zeit" + +#: includes/include.lang_edit.php:255 +#: includes/include.mycontenido_settings.php:142 +msgid "Date format" +msgstr "Datumsformat" + +#: includes/include.CMS_SIMPLELINK.php:139 includes/include.CMS_LINK.php:142 +#, php-format +msgid "Edit link for container %s" +msgstr "Link für Container %s bearbeiten" + +#: includes/include.CMS_SIMPLELINK.php:150 scripts/langref.php:31 +msgid "Link" +msgstr "Link" + +#: includes/include.CMS_SIMPLELINK.php:153 includes/include.CMS_IMG.php:278 +#: includes/grouprights_lay.inc.php:86 includes/include.tpl_edit_form.php:154 +#: includes/include.js_edit_form.php:176 includes/include.CMS_LINK.php:341 +#: includes/include.grouprights_create.php:112 +#: includes/include.html_tpl_history.php:164 includes/rights_lay.inc.php:76 +#: includes/include.todo.popup.php:70 includes/rights_mod.inc.php:76 +#: includes/include.mycontenido.tasks.edit.php:71 +#: includes/grouprights_tpl.inc.php:73 includes/include.mod_edit_form.php:385 +#: includes/include.mod_history.php:132 includes/include.js_history.php:156 +#: includes/include.lay_history.php:121 includes/include.upl_edit.php:95 +#: includes/include.grouprights_overview.php:118 +#: includes/include.lay_edit_form.php:205 includes/grouprights_mod.inc.php:74 +#: includes/include.html_tpl_edit_form.php:214 +#: includes/include.style_history.php:161 +#: includes/include.style_edit_form.php:198 includes/include.mod_new.php:109 +#: includes/rights_tpl.inc.php:74 +#: templates/standard/template.tpl_edit_form.html:29 +#: templates/standard/template.upl_files_overview.html:84 +#: templates/standard/template.mod_edit_form.html:33 +#: templates/standard/template.lay_edit_form.html:32 scripts/langref.php:28 +msgid "Description" +msgstr "Beschreibung" + +#: includes/functions.upl.php:791 +msgid "OpenOffice.org Presentation" +msgstr "OpenOffice.org Präsentation" + +#: includes/functions.upl.php:792 +msgid "OpenOffice.org Presentation Template" +msgstr "OpenOffice.org Präsentationsvorlage" + +#: includes/functions.upl.php:793 +msgid "Microsoft PowerPoint Screen Presentation" +msgstr "Microsoft PowerPoint Bildschirmpräsentation" + +#: includes/functions.upl.php:794 includes/functions.upl.php:796 +msgid "Microsoft PowerPoint Presentation Template" +msgstr "Microsoft PowerPoint Präsentationsvorlage" + +#: includes/functions.upl.php:795 +msgid "KDE KPresenter Document" +msgstr "KDE KPresenter-Dokument" + +#: includes/functions.upl.php:799 +msgid "Microsoft Word Document or regular text file" +msgstr "Microsoft Word-Dokument oder reguläre Textdatei" + +#: includes/functions.upl.php:800 +msgid "Microsoft Word Template" +msgstr "Microsoft Word Vorlage" + +#: includes/functions.upl.php:801 +msgid "OpenOffice.org Text Document" +msgstr "OpenOffice.org Textdokument" + +#: includes/functions.upl.php:802 +msgid "OpenOffice.org Text Document Template" +msgstr "OpenOffice.org Dokumentenvorlage" + +#: includes/functions.upl.php:803 +msgid "StarOffice 5.0 Text Document" +msgstr "StarOffice 5.0 Textdokument" + +#: includes/functions.upl.php:804 +msgid "KDE KWord Document" +msgstr "KDE KWord Dokument" + +#: includes/functions.upl.php:807 +msgid "Microsoft Excel Worksheet" +msgstr "Microsoft Excel Arbeitsblatt" + +#: includes/functions.upl.php:808 +msgid "OpenOffice.org Table" +msgstr "OpenOffice.org Tabelle" + +#: includes/functions.upl.php:809 +msgid "OpenOffice.org Table Template" +msgstr "OpenOffice.org Tabellenvorlage" + +#: includes/functions.upl.php:810 +msgid "Microsoft Excel File" +msgstr "Microsoft Excel Datei" + +#: includes/functions.upl.php:811 +msgid "Microsoft Excel Template" +msgstr "Microsoft Excel Vorlage" + +#: includes/functions.upl.php:812 +msgid "Comma Seperated Value File" +msgstr "Komma-separierte Datei" + +#: includes/functions.upl.php:813 +msgid "KDE KSpread Document" +msgstr "KDE KSpread-Dokument" + +#: includes/functions.upl.php:814 +msgid "StarOffice 5.0 Table" +msgstr "StarOffice 5.0 Tabelle" + +#: includes/functions.upl.php:817 +msgid "Plain Text" +msgstr "einfache Textdatei" + +#: includes/functions.upl.php:818 +msgid "Rich Text Format" +msgstr "Rich Text Format - Datei" + +#: includes/functions.upl.php:821 +msgid "GIF Image" +msgstr "GIF-Bild" + +#: includes/functions.upl.php:822 +msgid "PNG Image" +msgstr "PNG-Bild" + +#: includes/functions.upl.php:823 includes/functions.upl.php:824 +msgid "JPEG Image" +msgstr "JPEG-Bild" + +#: includes/functions.upl.php:825 +msgid "TIFF Image" +msgstr "TIFF-Bild" + +#: includes/functions.upl.php:826 +msgid "Adobe Photoshop Image" +msgstr "Adobe Photoshop Bild" + +#: includes/functions.upl.php:829 includes/functions.upl.php:830 +msgid "Hypertext Markup Language Document" +msgstr "Hypertext Markup Language Dokument" + +#: includes/functions.upl.php:831 +msgid "Cascading Style Sheets" +msgstr "Cascading Style Sheets" + +#: includes/functions.upl.php:834 +msgid "LHA Archive" +msgstr "LHA-Archiv" + +#: includes/functions.upl.php:835 +msgid "RAR Archive" +msgstr "RAR-Archiv" + +#: includes/functions.upl.php:836 +msgid "ARJ Archive" +msgstr "ARJ-Archiv" + +#: includes/functions.upl.php:837 +msgid "bz2-compressed File" +msgstr "bz2-komprimierte Datei" + +#: includes/functions.upl.php:838 +msgid "bzip-compressed File" +msgstr "bzip-komprimierte Datei" + +#: includes/functions.upl.php:839 +msgid "ZIP Archive" +msgstr "ZIP-Archiv" + +#: includes/functions.upl.php:840 +msgid "TAR Archive" +msgstr "TAR-Archiv" + +#: includes/functions.upl.php:841 +msgid "GZ Compressed File" +msgstr "GZ-komprimierte Datei" + +#: includes/functions.upl.php:844 +msgid "C Program Code" +msgstr "C Programmcode" + +#: includes/functions.upl.php:847 +msgid "C++ Program Code" +msgstr "C++ Programmcode" + +#: includes/functions.upl.php:849 +msgid "C or C++ Program Header" +msgstr "C oder C++ Programmheader" + +#: includes/functions.upl.php:852 +msgid "PHP Program Code" +msgstr "PHP Programmcode" + +#: includes/functions.upl.php:853 +msgid "PHP Source File" +msgstr "PHP Quellcode" + +#: includes/functions.upl.php:855 +msgid "Adobe Acrobat Portable Document" +msgstr "Adobe Acrobat Portable Document" + +#: includes/functions.upl.php:858 +msgid "QuickTime Movie" +msgstr "QuickTime-Movie" + +#: includes/functions.upl.php:859 +msgid "avi Movie" +msgstr "avi-Movie" + +#: includes/functions.upl.php:861 +msgid "MPEG Movie" +msgstr "MPEG-Movie" + +#: includes/functions.upl.php:862 +msgid "Windows Media Video" +msgstr "Windows Media-Video" + +#: includes/functions.upl.php:864 +msgid "-File" +msgstr "-Datei" + +#: includes/include.frontend.user_edit.php:50 +#: includes/include.frontend.user_edit.php:70 +#: includes/include.frontend.user_edit.php:107 +msgid "-- new user --" +msgstr "-- Neuer Benutzer --" + +#: includes/include.frontend.user_edit.php:110 +msgid "Username empty or not set! Please choose one." +msgstr "Benutzername fehlt! Bitte wählen Sie einen Benutzernamen." + +#: includes/include.frontend.user_edit.php:115 +msgid "Password not set right now!" +msgstr "Passwort noch nicht gesetzt!" + +#: includes/include.frontend.user_edit.php:121 +msgid "Could not set new username: Username already exists" +msgstr "" +"Konnte neuen Benutzernamen nicht setzen: Benutzername existiert bereits" + +#: includes/include.frontend.user_edit.php:128 +msgid "Could not set new password: Passwords don't match" +msgstr "" +"Konnte neues Passwort nicht setzen: Passwort und Bestätigung stimmen " +"nicht überein" + +#: includes/include.frontend.user_edit.php:177 +#: includes/cfg_language_de.inc.php:176 +msgid "Edit user" +msgstr "Benutzer bearbeiten" + +#: includes/include.frontend.user_edit.php:185 +#: includes/include.rights_left_top.php:115 +msgid "User name" +msgstr "Benutzername" + +#: includes/include.frontend.user_edit.php:186 +#: includes/include.mycontenido_settings.php:116 +#: includes/include.rights_overview.php:217 +#: includes/include.rights_create.php:162 +msgid "New password" +msgstr "Neues Passwort" + +#: includes/include.frontend.user_edit.php:187 +msgid "New password (again)" +msgstr "Neues Passwort (erneut)" + +#: includes/include.frontend.user_edit.php:215 +msgid "WARNING" +msgstr "WARNUNG" + +#: includes/include.frontend.user_edit.php:215 +#, php-format +msgid "" +"The plugin %s delivered an array for the displayed titles, but did not " +"return an array for the contents." +msgstr "" +"Das Plugin %s lieferte ein Array für die angezeigten Titel, aber " +"lieferte kein Array für die Inhalte." + +#: includes/include.frontend.user_edit.php:237 +#: includes/include.tpl_visualedit.php:146 +#: includes/include.tpl_edit_form.php:86 includes/include.tpl_edit_form.php:91 +#: includes/include.tpl_edit_form.php:203 +#: includes/include.tplcfg_edit_form.php:301 +#: includes/include.con_left_top.php:374 +#: includes/include.rights_overview.php:455 +#: includes/include.str_overview.php:188 includes/include.str_overview.php:656 +msgid "none" +msgstr "kein" + +#: includes/include.frontend.user_edit.php:240 +#: includes/include.rights_overview.php:458 +msgid "Group membership" +msgstr "Gruppenzugehörigkeit" + +#: includes/include.frontend.user_edit.php:241 +#: includes/include.con_left_top.php:275 includes/include.upl_edit.php:102 +msgid "Author" +msgstr "Autor" + +#: includes/include.frontend.user_edit.php:242 +#: includes/include.upl_edit.php:103 +msgid "Last modified by" +msgstr "Zuletzt geändert von" + +#: includes/include.lay_preview.php:29 includes/include.tpl_visualedit.php:84 +msgid "No such layout" +msgstr "Layout nicht vorhanden" + +#: includes/rights.inc.php:273 includes/functions.stat.php:992 +#: includes/functions.stat.php:1018 +#: includes/include.grouprights_left_top.php:59 +#: includes/include.con_art_overview.php:866 +#: includes/include.rights_left_top.php:76 includes/grouprights.inc.php:157 +msgid "All" +msgstr "Alle" + +#: includes/rights.inc.php:275 includes/grouprights.inc.php:159 +msgid "Article rights" +msgstr "Artikelrechte" + +#: includes/rights.inc.php:277 includes/grouprights.inc.php:161 +msgid "Category rights" +msgstr "Kategorierechte" + +#: includes/rights.inc.php:279 includes/grouprights.inc.php:163 +msgid "Template rights" +msgstr "Templaterechte" + +#: includes/rights.inc.php:281 includes/grouprights.inc.php:165 +msgid "Plugin/Other rights" +msgstr "Pluginrechte / Andere Rechte" + +#: includes/rights.inc.php:343 +msgid "" +"The selected user is a system administrator. A system administrator has all " +"rights for all clients for all languages and therefore rights can't be " +"specified in more detail." +msgstr "" +"Der gewählte Nutzer ist ein Systemadministrator. Ein " +"Systemadministrator verfügt über alle Rechte für alle " +"Mandanten in allen Sprachen, es können keine weiteren Einstellungen " +"für Rechte vorgenommen werden." + +#: includes/rights.inc.php:348 +msgid "" +"The selected user is assigned to clients as admin, only. An admin has all " +"rights for a client and therefore rights can't be specified in more detail." +msgstr "" +"Der gewählte Nutzer ist als Administrator Mandanten zugeordnet. Ein " +"Administrator verfügt über alle Rechte für den oder die " +"zugeordneten Mandanten in allen Sprachen, es können keine weiteren " +"Einstellungen für Rechte vorgenommen werden." + +#: includes/rights.inc.php:352 +msgid "Current user doesn't have any rights to any client/language." +msgstr "" +"Der aktuelle Benutzer hat keine Zugriffsrechte auf irgendeine(n) Sprache " +"bzw. Mandant" + +#: includes/include.grouprights_menu.php:178 +#, php-format +msgid "Do you really want to delete the group %s?" +msgstr "Möchten Sie die Gruppe %s wirklich löschen?" + +#: includes/include.grouprights_menu.php:196 +#: includes/cfg_language_de.inc.php:182 +msgid "Delete group" +msgstr "Gruppe löschen" + +#: includes/include.grouprights_menu.php:197 +#, php-format +msgid "Do you really want to delete the following group:

    %s
    " +msgstr "" +"Möchten Sie die folgende Gruppe wirklich löschen:

    %s" + +#: includes/include.upl_left_top.php:53 includes/include.tpl_new.php:41 +#: includes/include.lay_new.php:40 includes/include.js_left_top.php:54 +#: includes/include.lang_left_top.php:82 +#: includes/include.style_left_top.php:54 +#: includes/include.frontend.left_top.php:181 +#: includes/include.frontend.left_top.php:445 includes/include.mod_new.php:76 +#: includes/include.html_tpl_left_top.php:54 +msgid "No Client selected" +msgstr "Kein Mandant ausgewählt" + +#: includes/include.upl_left_top.php:74 +#: includes/include.rights_left_top.php:159 +#: includes/include.frontend.left_top.php:265 includes/include.mod_new.php:169 +msgid "Search for" +msgstr "Suche nach" + +#: includes/include.upl_left_top.php:112 +msgid "Create directory in" +msgstr "Erstelle Verzeichnis in" + +#: includes/include.mod_sync.php:39 +msgid "Syncing Modules!" +msgstr "Module werden synchronisiert" + +#: includes/include.mod_sync.php:44 includes/include.mod_sync.php:56 +#, fuzzy +msgid "Module " +msgstr "Module" + +#: includes/include.mod_sync.php:44 +msgid "nothing to do" +msgstr "nichts zu tun" + +#: includes/include.mod_sync.php:56 +msgid "synchronized" +msgstr "synchronisiert" + +#: includes/include.mod_sync.php:61 +msgid "No modules to sync!" +msgstr "Keine Module zu synchronisieren" + +#: includes/include.mod_sync.php:66 +msgid "Nothing to do!" +msgstr "Nichts zu tun!" + +#: includes/include.logs.php:64 +msgid "Submit query" +msgstr "Abfrage absenden" + +#: includes/include.logs.php:75 +msgid "All users" +msgstr "Alle Benutzer" + +#: includes/include.logs.php:77 +msgid "All actions" +msgstr "Alle Aktionen" + +#: includes/include.logs.php:199 +msgid "Unlimited" +msgstr "Unbegrenzt" + +#: includes/include.logs.php:200 includes/include.logs.php:201 +#: includes/include.logs.php:202 includes/include.logs.php:203 +#: includes/include.logs.php:204 +msgid "Entries" +msgstr "Einträge" + +#: includes/include.logs.php:275 +msgid "No results" +msgstr "Keine Resultate" + +#: includes/include.frontend.group_rights.php:47 +msgid "Invalid plugin" +msgstr "Ungültiges Plugin" + +#: includes/include.frontend.group_rights.php:96 +#, php-format +msgid "Permissions for plugin '%s'" +msgstr "Rechte für Plugin '%s'" + +#: includes/include.frontend.group_rights.php:101 +msgid "(All)" +msgstr "(Alle)" + +#: includes/include.frontend.group_rights.php:109 +msgid "Global rights" +msgstr "Globale Rechte" + +#: includes/include.frontend.group_rights.php:131 +msgid "No items found" +msgstr "Keine Elemente gefunden" + +#: includes/include.style_files_overview.php:104 +#: includes/include.js_files_overview.php:104 +#: includes/include.mod_package.php:111 +#: includes/include.html_tpl_files_overview.php:105 +msgid "is not readable!" +msgstr "Datei ist nicht lesbar" + +#: includes/include.style_files_overview.php:131 +#: includes/include.js_files_overview.php:131 +#: includes/include.system_db_backup.php:294 +#: includes/include.html_tpl_files_overview.php:132 +msgid "Delete File" +msgstr "Datei löschen" + +#: includes/include.style_files_overview.php:132 +#: includes/include.js_files_overview.php:132 +#: includes/include.html_tpl_files_overview.php:133 +#, php-format +msgid "Do you really want to delete the following file:

    %s
    " +msgstr "" +"Möchten Sie die folgende Datei wirklich löschen:

    %s" + +#: includes/include.style_files_overview.php:155 +#: includes/include.js_files_overview.php:155 +#: includes/include.mod_package.php:123 +#: includes/include.html_tpl_files_overview.php:156 +msgid "Directory is not existing or readable!" +msgstr "Verzeichnis existiert nicht oder ist nicht lesbar" + +#: includes/include.CMS_IMG.php:186 includes/include.CMS_EASYIMG.php:146 +#, php-format +msgid "Edit image for container %s" +msgstr "Bild für Container %s bearbeiten" + +#: includes/include.CMS_IMG.php:235 includes/include.CMS_LINK.php:180 +#: includes/include.CMS_LINK.php:182 includes/include.CMS_SWF.php:80 +#: includes/include.con_left_top.php:449 +#: includes/include.con_art_overview.php:523 +#: includes/include.upl_search_results.php:55 +#: includes/include.mod_package.php:180 +#: includes/include.mycontenido_lastarticles.php:183 +#: includes/cfg_language_de.inc.php:370 backend_search.php:669 +msgid "None" +msgstr "Kein" + +#: includes/include.CMS_IMG.php:275 +msgid "Directory / File" +msgstr "Verzeichnis / Datei" + +#: includes/include.CMS_IMG.php:283 +#: includes/include.upl_files_overview.php:526 +#: includes/include.upl_search_results.php:286 +#: includes/include.upl_edit.php:101 +msgid "Preview" +msgstr "Vorschau" + +#: includes/include.tpl_new.php:39 +msgid "New template" +msgstr "Neues Template" + +#: includes/functions.stat.php:44 +msgid "Info about article" +msgstr "Info über Artikel" + +#: includes/functions.stat.php:46 +msgid "Info about directory" +msgstr "Info über Verzeichnis" + +#: includes/functions.stat.php:285 +msgid "Category is online" +msgstr "Kategorie ist online" + +#: includes/functions.stat.php:287 +msgid "Category is offline" +msgstr "Kategorie ist offline" + +#: includes/functions.stat.php:313 includes/functions.stat.php:314 +#: includes/functions.stat.php:644 includes/functions.stat.php:645 +#: includes/grouprights_str.inc.php:215 +#: includes/include.upl_dirs_overview.php:56 includes/rights_con.inc.php:227 +#: includes/include.str_overview.php:169 includes/grouprights_con.inc.php:241 +#: includes/rights_str.inc.php:221 +msgid "Open category" +msgstr "Kategorie öffnen" + +#: includes/functions.stat.php:478 +msgid "Sum" +msgstr "Summe" + +#: includes/functions.stat.php:989 includes/functions.stat.php:1015 +#: includes/include.stat_overview.php:50 +msgid "Top 10" +msgstr "Top 10" + +#: includes/functions.stat.php:990 includes/functions.stat.php:1016 +#: includes/include.stat_overview.php:53 +msgid "Top 20" +msgstr "Top 20" + +#: includes/functions.stat.php:991 includes/functions.stat.php:1017 +#: includes/include.stat_overview.php:56 +msgid "Top 30" +msgstr "Top 30" + +#: includes/include.upl_files_overview.php:84 +#: includes/include.upl_edit.php:304 includes/include.upl_files_upload.php:67 +msgid "Directory not writable" +msgstr "Verzeichnis nicht beschreibbar" + +#: includes/include.upl_files_overview.php:240 +#, php-format +msgid "" +"The uploaded file (%s) exceeds the upload_max_filesize directive in php.ini." +msgstr "" +"Die hochgeladene Datei (%s) überschreitet die Direktiveupload_max_filesize " +"in der php.ini." + +#: includes/include.upl_files_overview.php:250 +#, php-format +msgid "Error while uploading file (%s)." +msgstr "Fehler beim Hochladen der Datei %s" + +#: includes/include.upl_files_overview.php:302 +msgid "Errors while uploading file(s). Some or all files were not uploaded." +msgstr "" +"Fehler beim Dateiupload. Einige oder alle Dateien konnten nicht hochgeladen " +"werden." + +#: includes/include.upl_files_overview.php:386 +#: includes/include.upl_files_overview.php:388 +msgid "Use file" +msgstr "Datei verwenden" + +#: includes/include.upl_files_overview.php:449 +#: includes/include.upl_files_overview.php:452 +#: includes/include.upl_files_overview.php:454 +#: includes/include.upl_search_results.php:190 +#: includes/include.upl_search_results.php:195 +#: includes/include.upl_search_results.php:198 +msgid "Filename / Description" +msgstr "Dateiname / Beschreibung" + +#: includes/include.upl_files_overview.php:459 +#: includes/include.upl_files_overview.php:462 +#: includes/include.upl_files_overview.php:464 +#: includes/include.upl_search_results.php:218 +#: includes/include.upl_search_results.php:223 +#: includes/include.upl_search_results.php:226 +msgid "Size" +msgstr "Größe" + +#: includes/include.upl_files_overview.php:469 +#: includes/include.upl_files_overview.php:472 +#: includes/include.upl_files_overview.php:474 +#: includes/include.systemsettings.php:60 +#: includes/include.systemsettings.php:170 +#: includes/include.upl_search_results.php:232 +#: includes/include.upl_search_results.php:237 +#: includes/include.upl_search_results.php:240 +#: includes/include.mod_edit_form.php:384 +#: includes/include.clientsettings.php:98 +#: includes/include.clientsettings.php:185 includes/include.mod_new.php:87 +#: includes/include.mod_new.php:110 +msgid "Type" +msgstr "Typ" + +#: includes/include.upl_files_overview.php:480 +msgid "Delete Files" +msgstr "Dateien löschen" + +#: includes/include.upl_files_overview.php:480 +msgid "Are you sure you want to delete the selected files?" +msgstr "" +"Sind Sie sich sicher, dass Sie die gewählten Dateien wirklich lö" +"schen wollen?" + +#: includes/include.upl_files_overview.php:481 +msgid "Delete selected files" +msgstr "Markierte Dateien löschen" + +#: includes/include.upl_files_overview.php:497 +msgid "Flip Selection" +msgstr "Markierung umkehren" + +#: includes/include.upl_files_overview.php:502 +#: includes/include.upl_files_upload.php:59 +msgid "Path:" +msgstr "Pfad:" + +#: includes/include.upl_files_overview.php:517 +#: includes/include.upl_search_results.php:276 +msgid "Files per Page" +msgstr "Dateien pro Seite" + +#: includes/include.upl_files_overview.php:525 +msgid "Mark" +msgstr "Markieren" + +#: includes/include.upl_files_overview.php:530 +#: includes/include.mycontenido.tasks.php:276 +#: includes/include.con_art_overview.php:83 +#: includes/include.frontend.left_top.php:165 backend_search.php:497 +#: templates/standard/template.str_overview.html:233 +msgid "Actions" +msgstr "Aktionen" + +#: includes/include.upl_files_overview.php:632 +msgid "Display properties" +msgstr "Eigenschaften anzeigen" + +#: includes/include.upl_files_overview.php:658 +#: includes/include.upl_search_results.php:417 +#: classes/class.cms_filelist.php:540 classes/class.cms_filelist.php:541 +msgid "No files found" +msgstr "Keine Dateien gefunden / vorhanden" + +#: includes/include.upl_files_overview.php:681 +#: includes/include.upl_search_results.php:445 +msgid "Previous Page" +msgstr "Vorherige Seite" + +#: includes/include.upl_files_overview.php:687 +#: includes/include.upl_search_results.php:452 +msgid "Next Page" +msgstr "Nächste Seite" + +#: includes/include.upl_files_overview.php:727 +#: includes/include.upl_search_results.php:490 +msgid "Page" +msgstr "Seite" + +#: includes/include.upl_files_overview.php:752 +#: includes/cfg_language_de.inc.php:143 +msgid "Delete file" +msgstr "Datei löschen" + +#: includes/include.upl_files_overview.php:753 +msgid "Do you really want to delete the following file:
    " +msgstr "Möchten Sie wirklich die folgende Datei löschen:
    " + +#: includes/include.upl_files_overview.php:884 +#: includes/include.upl_search_results.php:605 +msgid "Enter new filename" +msgstr "Neuer Dateiname" + +#: includes/grouprights_lay.inc.php:85 includes/rights_lay.inc.php:75 +msgid "Layout name" +msgstr "Layoutname" + +#: includes/grouprights_lay.inc.php:113 includes/rights_lay.inc.php:100 +#: includes/rights_mod.inc.php:99 includes/grouprights_str.inc.php:105 +#: includes/grouprights_tpl.inc.php:101 includes/rights_con.inc.php:112 +#: includes/grouprights_area.inc.php:86 includes/grouprights_mod.inc.php:99 +#: includes/grouprights_con.inc.php:111 includes/rights_str.inc.php:106 +#: includes/rights_area.inc.php:87 includes/rights_tpl.inc.php:100 +msgid "Check all" +msgstr "Alle markieren" + +#: includes/include.grouprights_left_top.php:60 +#: includes/include.rights_left_top.php:77 +msgid "Frontend only" +msgstr "Nur Frontend" + +#: includes/include.grouprights_left_top.php:61 +#: includes/include.rights_left_top.php:78 +msgid "Backend only" +msgstr "Nur Backend" + +#: includes/include.grouprights_left_top.php:90 +#: includes/cfg_language_de.inc.php:181 +#: includes/include.frontend.left_top.php:442 +msgid "Create group" +msgstr "Gruppe erzeugen" + +#: includes/include.tpl_edit_form.php:43 +msgid "- New Template -" +msgstr "-- Neues Template --" + +#: includes/include.tpl_edit_form.php:148 includes/cfg_language_de.inc.php:165 +msgid "Edit template" +msgstr "Template bearbeiten" + +#: includes/include.tpl_edit_form.php:151 +#: includes/include.js_edit_form.php:175 +#: includes/include.html_tpl_history.php:163 +#: includes/include.systemsettings.php:61 +#: includes/include.systemsettings.php:174 +#: includes/include.rights_left_top.php:116 +#: includes/include.mod_edit_form.php:377 +#: includes/include.mod_edit_form.php:381 includes/include.mod_history.php:131 +#: includes/include.js_history.php:155 includes/include.mod_package.php:235 +#: includes/include.mod_package.php:253 includes/include.mod_package.php:422 +#: includes/include.clientsettings.php:98 +#: includes/include.clientsettings.php:189 +#: includes/include.lay_history.php:120 includes/include.lay_edit_form.php:204 +#: includes/include.rights_overview.php:209 +#: includes/include.html_tpl_edit_form.php:213 +#: includes/include.style_history.php:160 +#: includes/include.style_edit_form.php:197 includes/include.mod_new.php:87 +#: includes/include.rights_create.php:156 +#: templates/standard/template.tpl_edit_form.html:19 +#: templates/standard/template.mod_edit_form.html:23 +#: templates/standard/template.lay_edit_form.html:22 +#: classes/class.ajax.php:162 classes/class.ajax.php:179 +msgid "Name" +msgstr "Name" + +#: includes/include.tpl_edit_form.php:158 +#: includes/include.tpl_edit_form.php:234 +msgid "Default" +msgstr "Standard" + +#: includes/include.tpl_edit_form.php:160 +#: includes/include.lay_overview.php:101 +#: templates/standard/template.tpl_edit_form.html:42 +msgid "Layout" +msgstr "Layout" + +#: includes/include.tpl_edit_form.php:161 +#: templates/standard/template.tpl_edit_form.html:55 +msgid "Layout description" +msgstr "Layoutbeschreibung" + +#: includes/include.js_edit_form.php:159 +#: includes/include.html_tpl_edit_form.php:197 +#: includes/include.style_edit_form.php:180 +msgid "Edit file" +msgstr "Datei bearbeiten" + +#: includes/include.js_edit_form.php:177 +#: includes/include.html_tpl_history.php:165 +#: includes/include.js_history.php:157 includes/include.lay_history.php:122 +#: includes/include.lay_edit_form.php:206 +#: includes/include.lay_edit_form.php:217 +#: includes/include.html_tpl_edit_form.php:215 +#: includes/include.style_history.php:162 +#: includes/include.style_edit_form.php:199 +msgid "Code" +msgstr "Quelltext" + +#: includes/include.CMS_LINK.php:153 +msgid "External link" +msgstr "Externer Link" + +#: includes/include.CMS_LINK.php:210 +msgid "Internal link" +msgstr "Interner Link" + +#: includes/include.CMS_LINK.php:215 includes/include.CMS_LINK.php:244 +#: includes/include.CMS_LINK.php:273 includes/include.CMS_LINK.php:288 +#: includes/include.CMS_LINK.php:304 includes/functions.general.php:1136 +#: includes/functions.general.php:1176 includes/include.str_overview.php:90 +#: classes/class.cms_teaser.php:353 classes/class.cms_teaser.php:382 +#: classes/class.cms_teaser.php:419 classes/class.cms_teaser.php:447 +#: classes/class.cms_teaser.php:476 classes/class.cms_teaser.php:539 +msgid "Please choose" +msgstr "Bitte wählen" + +#: includes/include.CMS_LINK.php:240 +msgid "Link to a document" +msgstr "Link zu einem Dokument" + +#: includes/include.CMS_LINK.php:270 +msgid "Link to an image" +msgstr "Link zu einem Bild" + +#: includes/include.CMS_LINK.php:285 +msgid "Link to an archive" +msgstr "Link zu einem Archiv" + +#: includes/include.CMS_LINK.php:300 +msgid "Link to a media file" +msgstr "Link zu einer Mediendatei" + +#: includes/include.CMS_LINK.php:316 +msgid "Link to any file" +msgstr "Link auf eine beliebige Datei" + +#: includes/include.CMS_LINK.php:340 +msgid "Upload file" +msgstr "Datei hochladen" + +#: includes/include.CMS_LINK.php:345 +msgid "Target frame" +msgstr "Zielframe" + +#: includes/include.CMS_LINK.php:353 +msgid "Open link in new window" +msgstr "Link in neues Fenster öffnen" + +#: includes/include.CMS_LINK.php:375 +msgid "Open in new window" +msgstr "In neues Fenster öffnen" + +#: includes/include.tpl_overview.php:96 includes/include.lay_overview.php:83 +#: includes/include.mod_overview.php:196 +msgid "Click for more information about usage" +msgstr "Klicken Sie für mehr Information über Verwendung" + +#: includes/include.tpl_overview.php:99 includes/cfg_language_de.inc.php:164 +msgid "Delete template" +msgstr "Template löschen" + +#: includes/include.tpl_overview.php:100 +#, php-format +msgid "Do you really want to delete the following template:

    %s
    " +msgstr "" +"Möchten Sie das folgende Template wirklich löschen:

    %s" + +#: includes/include.tpl_overview.php:105 +msgid "Template in use, cannot delete" +msgstr "Template wird benutzt, löschen nicht möglich" + +#: includes/include.tpl_overview.php:111 includes/cfg_language_de.inc.php:167 +#: includes/cfg_language_de.inc.php:168 +#: templates/standard/template.symbolhelp.html:1016 +msgid "Duplicate template" +msgstr "Template duplizieren" + +#: includes/include.tpl_overview.php:128 +#, php-format +msgid "The template '%s' is used for following categories and articles" +msgstr "Das Template '%s' wird bei folgenden Kategorien und Artikeln benutzt" + +#: includes/functions.system.php:55 +msgid "Can't clear install error log : Access is denied!" +msgstr "Upgrade-Fehlerlog konnte nicht geleert werden: Zugriff verweigert!" + +#: includes/functions.system.php:60 +msgid "error log successfully cleared" +msgstr "Errorlog erfolgreich geleert" + +#: includes/functions.system.php:278 +msgid "Contenido version" +msgstr "ConLite Version" + +#: includes/functions.system.php:281 +msgid "Contenido path" +msgstr "ConLite Pfad" + +#: includes/functions.system.php:283 +msgid "Contenido HTML path" +msgstr "ConLite HTML-Pfad" + +#: includes/functions.system.php:285 +msgid "Contenido full HTML path" +msgstr "ConLite vollständiger HTML-Pfad" + +#: includes/functions.system.php:287 +msgid "Contenido frontend path" +msgstr "ConLite Frontend-Pfad" + +#: includes/functions.system.php:289 +msgid "Contenido PHPLIB path" +msgstr "ConLite PHPLIB-Pfad" + +#: includes/functions.system.php:291 +msgid "Contenido wysiwyg path" +msgstr "ConLite WYSIWYG-Pfad" + +#: includes/functions.system.php:293 +msgid "Contenido wysiwyg HTML path" +msgstr "ConLite WYSIWYG-HTML-Pfad" + +#: includes/functions.system.php:296 +msgid "Host name" +msgstr "Host-Name" + +#: includes/functions.system.php:299 +msgid "Browser path" +msgstr "Browser-Pfad" + +#: includes/functions.system.php:321 +msgid "client settings" +msgstr "Mandanten-Einstellungen" + +#: includes/functions.system.php:322 +msgid "values" +msgstr "Werte" + +#: includes/functions.system.php:353 +msgid "language(s)" +msgstr "Sprache(n)" + +#: includes/functions.system.php:362 +msgid "htmlpath" +msgstr "HTML-Pfad" + +#: includes/functions.system.php:366 +msgid "frontendpath" +msgstr "Frontend-Pfad" + +#: includes/functions.system.php:378 +msgid "No permissions!" +msgstr "Kein Zugriff!" + +#: includes/functions.system.php:384 +msgid "Number of installed clients: " +msgstr "Anzahl der installierten Mandanten: " + +#: includes/functions.system.php:387 +msgid "Client informations" +msgstr "Mandanteninformationen" + +#: includes/functions.system.php:394 +msgid "Number of users" +msgstr "Anzahl Benutzer" + +#: includes/functions.system.php:401 includes/include.stat_overview.php:91 +msgid "Number of articles" +msgstr "Anzahl der Artikel" + +#: includes/functions.system.php:404 +msgid "Server operating system" +msgstr "Server Betriebssystem" + +#: includes/functions.system.php:408 +msgid "PHP database extension" +msgstr "PHP Datenbankerweiterung" + +#: includes/functions.system.php:410 +msgid "Database server version" +msgstr "Datenbankserver-Version" + +#: includes/functions.system.php:413 +msgid "Installed PHP version" +msgstr "Installierte PHP-Version" + +#: includes/functions.system.php:418 includes/functions.system.php:422 +#: includes/functions.system.php:426 includes/functions.system.php:447 +msgid "activated" +msgstr "Aktiviert" + +#: includes/functions.system.php:418 includes/functions.system.php:422 +#: includes/functions.system.php:426 includes/functions.system.php:447 +msgid "deactivated" +msgstr "Deaktiviert" + +#: includes/functions.system.php:439 +msgid "nothing disabled" +msgstr "nichts deaktiviert" + +#: includes/functions.system.php:440 +msgid "Disabled functions" +msgstr "Deaktivierte Funktionen" + +#: includes/functions.system.php:443 +msgid "loaded" +msgstr "geladen" + +#: includes/functions.system.php:443 +msgid "not loaded" +msgstr "nicht geladen" + +#: includes/functions.system.php:444 +msgid "Gettext extension" +msgstr "Gettext Erweiterung" + +#: includes/functions.system.php:455 includes/main.login.php:213 +msgid "Settings" +msgstr "Einstellungen" + +#: includes/functions.system.php:456 +msgid "Values" +msgstr "Werte" + +#: includes/functions.system.php:473 +msgid "GD library" +msgstr "GD-Bibliothek" + +#: includes/functions.system.php:636 +msgid "an error occured while sending your bug report! Please try again" +msgstr "" +"Ein Fehler ist während des Sendens des Bugreports aufgetreten! Bitte " +"versuchen Sie es noch einmal" + +#: includes/functions.system.php:639 +msgid "bug report forwarded" +msgstr "Bug Report abgeschickt" + +#: includes/functions.system.php:645 +msgid "please fill out all mandatory fields" +msgstr "Bitte alle Pflichtfelder ausfüllen" + +#: includes/functions.system.php:649 +msgid "please enter a valid E-Mail adress" +msgstr "Bitte geben Sie eine gültige E-Mail Adresse an" + +#: includes/functions.system.php:653 +msgid "you must agree the declaration of consent" +msgstr "Sie müssen der Vereinbarung zustimmen" + +#: includes/include.grouprights_create.php:57 +msgid "New Group" +msgstr "Neue Gruppe" + +#: includes/include.grouprights_create.php:71 +msgid "group created" +msgstr "Gruppe erzeugt" + +#: includes/include.grouprights_create.php:76 +msgid "Group couldn't created" +msgstr "Gruppe konnte nicht erstellt werden" + +#: includes/include.grouprights_create.php:94 +#: includes/include.CMS_EASYIMG.php:158 includes/include.client_edit.php:227 +#: includes/include.grouprights_overview.php:102 +#: includes/include.rights_overview.php:192 +#: includes/include.rights_create.php:142 +#: classes/widgets/class.widgets.tableedit.php:188 +#: classes/widgets/class.widgets.views.php:80 classes/class.ui.php:351 +msgid "Save changes" +msgstr "Änderungen speichern" + +#: includes/include.grouprights_create.php:96 +#: includes/include.client_edit.php:236 +#: includes/include.grouprights_overview.php:106 +#: includes/include.grouprights_overview.php:209 +#: includes/include.rights_overview.php:197 +#: includes/include.rights_overview.php:353 +#: includes/include.rights_create.php:144 +msgid "Property" +msgstr "Eigenschaft" + +#: includes/include.grouprights_create.php:99 +#: includes/include.systemsettings.php:62 +#: includes/include.systemsettings.php:178 +#: includes/include.client_edit.php:239 includes/include.clientsettings.php:98 +#: includes/include.clientsettings.php:193 +#: includes/include.grouprights_overview.php:109 +#: includes/include.grouprights_overview.php:210 +#: includes/include.rights_overview.php:200 +#: includes/include.rights_overview.php:354 +#: includes/include.rights_create.php:147 +#: templates/standard/template.log_main.html:15 +msgid "Value" +msgstr "Wert" + +#: includes/include.grouprights_create.php:102 +#: includes/include.frontend.group_edit.php:221 +msgid "Group name" +msgstr "Gruppenname" + +#: includes/include.grouprights_create.php:123 +#: includes/include.grouprights_overview.php:129 +#: includes/include.rights_overview.php:271 +#: includes/include.rights_create.php:215 +msgid "System administrator" +msgstr "Systemadministrator" + +#: includes/include.grouprights_create.php:141 +#: includes/include.grouprights_overview.php:147 +#: includes/include.rights_overview.php:289 +#: includes/include.rights_create.php:233 +msgid "Administrator" +msgstr "Administrator" + +#: includes/include.grouprights_create.php:156 +#: includes/include.grouprights_overview.php:163 +#: includes/include.rights_overview.php:305 +#: includes/include.rights_create.php:248 +msgid "Access clients" +msgstr "Zugriff auf Mandanten" + +#: includes/include.grouprights_create.php:172 +#: includes/include.grouprights_overview.php:180 +#: includes/include.rights_overview.php:322 +#: includes/include.rights_create.php:263 +msgid "Access languages" +msgstr "Zugriff auf Sprache" + +#: includes/include.html_tpl_history.php:64 +#: includes/include.mod_history.php:57 includes/include.js_history.php:60 +#: includes/include.lay_history.php:51 includes/include.style_history.php:62 +msgid "Versioning is not activated" +msgstr "Die Versionierung ist nicht aktiv" + +#: includes/include.html_tpl_history.php:129 +#: includes/include.js_history.php:125 +msgid "Edit JScript" +msgstr "JScript bearbeiten" + +#: includes/include.html_tpl_history.php:166 +#: includes/include.mod_history.php:135 includes/include.js_history.php:158 +#: includes/include.lay_history.php:123 includes/include.style_history.php:163 +msgid "Copy to current" +msgstr "In die aktuelle Version kopieren" + +#: includes/include.html_tpl_history.php:179 +#: includes/include.html_tpl_history.php:187 +msgid "No template history available" +msgstr "Keine Template-Historie verfügbar" + +#: includes/include.html_tpl_history.php:185 +#: includes/include.mod_history.php:150 includes/include.js_history.php:177 +#: includes/include.lay_history.php:135 includes/include.style_history.php:182 +msgid "Version history was cleared" +msgstr "Die Versionshistorie wurde erfolgreich gelöscht" + +#: includes/include.client_left_top.php:50 +#: includes/cfg_language_de.inc.php:243 +msgid "Create client" +msgstr "Mandant erzeugen" + +#: includes/include.todo.popup.php:58 +msgid "Add TODO item" +msgstr "Todo Eintrag hinzufügen" + +#: includes/include.todo.popup.php:67 +#: includes/include.mycontenido.tasks.php:276 +#: includes/include.mycontenido.tasks.edit.php:68 +msgid "Subject" +msgstr "Betreff" + +#: includes/include.todo.popup.php:75 +#: includes/include.mycontenido.tasks.edit.php:100 +msgid "Reminder date" +msgstr "Zeitpunkt Wiedervorlage" + +#: includes/include.todo.popup.php:79 +#: includes/include.mycontenido.tasks.edit.php:75 +#: includes/include.upl_edit.php:219 +#: templates/standard/template.con_edit_form.html:150 +#: templates/standard/template.log_main.html:34 +msgid "End date" +msgstr "Enddatum" + +#: includes/include.todo.popup.php:80 +msgid "eMail notification" +msgstr "E-Mail Benachrichtigung" + +#: includes/include.todo.popup.php:82 +#: includes/include.mycontenido.tasks.edit.php:81 +msgid "Reminder options" +msgstr "Erinnerungsoptionen" + +#: includes/include.todo.popup.php:124 +#: includes/include.mycontenido.tasks.edit.php:65 +msgid "Assigned to" +msgstr "Zugewiesen zu" + +#: includes/include.lay_new.php:38 +msgid "New Layout" +msgstr "Neues Layout" + +#: includes/functions.general.php:103 +#: classes/datatypes/class.datatype.datetime.php:140 +msgid "January" +msgstr "Januar" + +#: includes/functions.general.php:106 +#: classes/datatypes/class.datatype.datetime.php:141 +msgid "February" +msgstr "Februar" + +#: includes/functions.general.php:109 +#: classes/datatypes/class.datatype.datetime.php:142 +msgid "March" +msgstr "März" + +#: includes/functions.general.php:112 +#: classes/datatypes/class.datatype.datetime.php:143 +msgid "April" +msgstr "April" + +#: includes/functions.general.php:115 +#: classes/datatypes/class.datatype.datetime.php:144 +msgid "May" +msgstr "Mai" + +#: includes/functions.general.php:118 +#: classes/datatypes/class.datatype.datetime.php:145 +msgid "June" +msgstr "Juni" + +#: includes/functions.general.php:121 +#: classes/datatypes/class.datatype.datetime.php:146 +msgid "July" +msgstr "Juli" + +#: includes/functions.general.php:124 +#: classes/datatypes/class.datatype.datetime.php:147 +msgid "August" +msgstr "August" + +#: includes/functions.general.php:127 +#: classes/datatypes/class.datatype.datetime.php:148 +msgid "September" +msgstr "September" + +#: includes/functions.general.php:130 +#: classes/datatypes/class.datatype.datetime.php:149 +msgid "October" +msgstr "Oktober" + +#: includes/functions.general.php:133 +#: classes/datatypes/class.datatype.datetime.php:150 +msgid "November" +msgstr "November" + +#: includes/functions.general.php:136 +#: classes/datatypes/class.datatype.datetime.php:151 +msgid "December" +msgstr "Dezember" + +#: includes/functions.general.php:150 +#: classes/datatypes/class.datatype.datetime.php:160 +msgid "Monday" +msgstr "Montag" + +#: includes/functions.general.php:153 +#: classes/datatypes/class.datatype.datetime.php:161 +msgid "Tuesday" +msgstr "Dienstag" + +#: includes/functions.general.php:156 +#: classes/datatypes/class.datatype.datetime.php:162 +msgid "Wednesday" +msgstr "Mittwoch" + +#: includes/functions.general.php:159 +#: classes/datatypes/class.datatype.datetime.php:163 +msgid "Thursday" +msgstr "Donnerstag" + +#: includes/functions.general.php:162 +#: classes/datatypes/class.datatype.datetime.php:164 +msgid "Friday" +msgstr "Freitag" + +#: includes/functions.general.php:165 +msgid "Saterday" +msgstr "Samstag" + +#: includes/functions.general.php:168 +#: classes/datatypes/class.datatype.datetime.php:159 +#: classes/datatypes/class.datatype.datetime.php:166 +msgid "Sunday" +msgstr "Sonntag" + +#: includes/functions.general.php:1977 +#, php-format +msgid "MySQL Database not reachable for installation %s" +msgstr "MySQL-Datenbank für die Installation %s ist nicht erreichbar " + +#: includes/functions.general.php:1980 +#, php-format +msgid "" +"The MySQL Database for the installation %s is not reachable. Please check if " +"this is a temporary problem or if it is a real fault." +msgstr "" +"Die MySQL-Datenbank für die Installation %s ist nicht erreichbar. Bitte " +"prüfen Sie, ob dies ein temporäres Problem oder ein wirklicher " +"Fehler ist." + +#: includes/rights_mod.inc.php:75 includes/grouprights_mod.inc.php:73 +msgid "Module name" +msgstr "Modulname" + +#: includes/include.client_artspec.php:79 +#: includes/include.con_edit_form.php:241 +msgid "Article specification" +msgstr "Artikelspezifikation" + +#: includes/include.client_artspec.php:80 +#: includes/include.mycontenido.tasks.php:397 +#: includes/include.mycontenido_settings.php:127 +#: includes/include.lay_edit_form.php:207 +msgid "Options" +msgstr "Optionen" + +#: includes/include.client_artspec.php:90 +#: includes/include.systemsettings.php:71 +#: includes/include.systemsettings.php:75 +#: includes/include.clientsettings.php:114 includes/include.upl_edit.php:66 +msgid "Edit" +msgstr "Bearbeiten" + +#: includes/include.client_artspec.php:94 +#: includes/include.systemsettings.php:79 +#: includes/include.systemsettings.php:81 +#: includes/include.clientsettings.php:108 +msgid "Delete" +msgstr "Löschen" + +#: includes/include.client_artspec.php:131 +msgid "Save" +msgstr "Speichern" + +#: includes/include.client_artspec.php:140 +#: includes/include.con_art_overview.php:601 +#: includes/include.str_overview.php:957 includes/include.str_overview.php:959 +#: backend_search.php:652 scripts/HTMLObj.js.php:242 +#: scripts/HTMLObj.js.php:245 scripts/langref.php:9 +msgid "Make online" +msgstr "Online setzen" + +#: includes/include.client_artspec.php:144 +#: includes/include.con_art_overview.php:593 backend_search.php:648 +#: scripts/HTMLObj.js.php:239 scripts/langref.php:8 +msgid "Make offline" +msgstr "Offline setzen" + +#: includes/include.client_artspec.php:150 +msgid "Make this article specification default" +msgstr "Diese Artikelspezifikation als Standard definieren" + +#: includes/include.client_artspec.php:154 +msgid "This article specification is default" +msgstr "Diese Artikelspezifikation ist Standard" + +#: includes/include.client_artspec.php:163 +#: includes/include.con_edit_form.php:238 +msgid "No article specifications found!" +msgstr "Keine Artikelspezifikation gefunden" + +#: includes/include.client_artspec.php:173 +msgid "Create new article specification" +msgstr "Neue Artikelspezifikation erstellen" + +#: includes/include.client_artspec.php:176 +msgid "Specification name" +msgstr "Name der Spezifikation" + +#: includes/include.mycontenido.tasks.php:128 +msgid "No status type set" +msgstr "Kein Status-Typ gesetzt" + +#: includes/include.mycontenido.tasks.php:155 +#, php-format +msgid "%d %% complete" +msgstr "%d %% fertig" + +#: includes/include.mycontenido.tasks.php:196 +msgid "Today" +msgstr "Heute" + +#: includes/include.mycontenido.tasks.php:201 +#: includes/include.mycontenido.tasks.php:203 +msgid "Day(s)" +msgstr "Tag(e)" + +#: includes/include.mycontenido.tasks.php:276 +#: includes/include.con_edit_form.php:284 includes/include.upl_artlist.php:81 +#: templates/standard/template.mycontenido_lastarticles.html:64 +msgid "Created" +msgstr "Erstelldatum" + +#: includes/include.mycontenido.tasks.php:276 +msgid "End Date" +msgstr "Enddatum" + +#: includes/include.mycontenido.tasks.php:276 +#: includes/include.mycontenido.tasks.edit.php:137 +#: includes/include.stat_overview.php:90 includes/include.mod_package.php:252 +#: includes/include.mod_package.php:361 includes/include.mod_package.php:366 +msgid "Status" +msgstr "Status" + +#: includes/include.mycontenido.tasks.php:276 +#: includes/include.mycontenido.tasks.edit.php:132 +msgid "Priority" +msgstr "Priorität" + +#: includes/include.mycontenido.tasks.php:276 +#, php-format +msgid "%% complete" +msgstr "%% fertig" + +#: includes/include.mycontenido.tasks.php:276 +msgid "Due in" +msgstr "Fällig in" + +#: includes/include.mycontenido.tasks.php:302 +msgid "Unnamed item" +msgstr "Unbenannter Eintrag" + +#: includes/include.mycontenido.tasks.php:307 +msgid "No end date set" +msgstr "Kein Enddatum definiert" + +#: includes/include.mycontenido.tasks.php:314 +msgid "No status set" +msgstr "Kein Status gesetzt" + +#: includes/include.mycontenido.tasks.php:338 +msgid "Delete item" +msgstr "Element löschen" + +#: includes/include.mycontenido.tasks.php:345 +msgid "Edit item" +msgstr "Element bearbeiten" + +#: includes/include.mycontenido.tasks.php:376 +msgid "Restrict display" +msgstr "Anzeige einschränken" + +#: includes/include.mycontenido.tasks.php:380 classes/class.version.php:522 +msgid "Refresh" +msgstr "Aktualisieren" + +#: includes/include.mycontenido.tasks.php:386 +msgid "Hide done tasks" +msgstr "Erledigte Aufgaben ausblenden" + +#: includes/include.mycontenido.tasks.php:401 +msgid "No tasks found" +msgstr "Keine Aufgaben gefunden" + +#: includes/include.systemsettings.php:47 +msgid "Please set this property in systemsettings directly" +msgstr "Bitte setzen Sie diese Einstellung direkt in den Systemeinstellungen" + +#: includes/include.systemsettings.php:157 +#: includes/include.clientsettings.php:172 +msgid "No defined properties" +msgstr "Keine definierten Eigenschaften" + +#: includes/include.systemsettings.php:167 +#: includes/include.clientsettings.php:181 +msgid "Add new variable" +msgstr "Neue Variable hinzufügen" + +#: includes/include.con_edit_form.php:134 +#: includes/include.tplcfg_edit_form.php:57 +#: external/backendedit/front_content.php:484 +#: external/frontend/front_content.php:494 +#, php-format +msgid "Article is in use by %s (%s)" +msgstr "Artikel wird benutzt von %s (%s)" + +#: includes/include.con_edit_form.php:208 +#: includes/include.con_art_overview.php:78 +#: includes/include.con_art_overview.php:746 +#: includes/include.stat_overview.php:89 includes/include.upl_artlist.php:81 +#: backend_search.php:492 +#: templates/standard/template.mycontenido_lastarticles.html:62 +msgid "Title" +msgstr "Titel" + +#: includes/include.con_edit_form.php:211 +#: includes/include.str_overview.php:509 +#: templates/standard/template.str_overview.html:133 +#: templates/standard/template.str_overview.html:227 +msgid "Alias" +msgstr "Alias" + +#: includes/include.con_edit_form.php:253 +msgid "Articlelink" +msgstr "Artikellink" + +#: includes/include.con_edit_form.php:260 +msgid "Select an entry to display link" +msgstr "Eintrag wählen, um einen Link anzuzeigen" + +#: includes/include.con_edit_form.php:261 +msgid "Article only" +msgstr "Nur Artikel" + +#: includes/include.con_edit_form.php:262 +msgid "Article with Category" +msgstr "Artikel mit Kategorie" + +#: includes/include.con_edit_form.php:263 +msgid "Article with Category and Language" +msgstr "Artikel mit Kategorie und Sprache" + +#: includes/include.con_edit_form.php:264 +msgid "Article with Language" +msgstr "Artikel mit Sprache" + +#: includes/include.con_edit_form.php:278 +msgid "Author (Creator)" +msgstr "erstellt von" + +#: includes/include.con_edit_form.php:288 +msgid "Author (Modifier)" +msgstr "verändert von" + +#: includes/include.con_edit_form.php:289 +msgid "Last modified" +msgstr "Änderungsdatum" + +#: includes/include.con_edit_form.php:293 +msgid "Publishing date" +msgstr "Veröffentlichungsdatum" + +#: includes/include.con_edit_form.php:297 +#: includes/include.con_art_overview.php:354 +msgid "not yet published" +msgstr "noch nicht veröffentlicht" + +#: includes/include.con_edit_form.php:300 +msgid "Publisher" +msgstr "veröffentlicht von" + +#: includes/include.con_edit_form.php:308 +msgid "Redirect" +msgstr "Weiterleitung" + +#: includes/include.con_edit_form.php:324 +msgid "New Window" +msgstr "Neues Fenster" + +#: includes/include.con_edit_form.php:350 +#: includes/include.con_art_overview.php:553 +msgid "Start article" +msgstr "Startartikel" + +#: includes/include.con_edit_form.php:354 +#: includes/include.con_art_overview.php:841 +msgid "Sort key" +msgstr "Sortierschlüssel" + +#: includes/include.con_edit_form.php:391 includes/cfg_language_de.inc.php:114 +msgid "Remove assignments" +msgstr "Zuweisungen entfernen" + +#: includes/include.con_edit_form.php:393 +msgid "Remove multiple category assignments" +msgstr "Mehrfachzuordnung entfernen" + +#: includes/include.con_edit_form.php:394 +msgid "" +"Do you really want to remove the assignments to all categories except the " +"current one?" +msgstr "" +"Möchten Sie wirklich alle Zuweisungen zu allen Kategorien außer " +"der aktuellen entfernen?" + +#: includes/include.con_edit_form.php:410 +msgid "" +"Language parts of the articles are existing in other languages and are " +"online. To change the category assignment, please set the other articles " +"offline first." +msgstr "" +"Sprachabhängige Teile dieses Artikels existieren in anderen Sprachen " +"und sind online. Um die Kategoriezuweisung zu verändern, setzen Sie die " +"anderen sprachabhängigen Teile zuerst offline." + +#: includes/include.con_edit_form.php:510 includes/grouprights_str.inc.php:76 +#: includes/rights_con.inc.php:78 includes/include.con_editcontent.php:387 +#: includes/grouprights_con.inc.php:78 includes/rights_str.inc.php:77 +#: includes/include.note.popup.php:93 +#: templates/standard/template.symbolhelp.html:41 +#: templates/standard/template.symbolhelp.html:472 +#: templates/standard/template.str_overview.html:124 +#: templates/standard/template.str_overview.html:224 +#: templates/standard/template.mycontenido_lastarticles.html:63 +#: templates/standard/template.log_main.html:52 +#: classes/class.cms_teaser.php:595 classes/class.ajax.php:153 +msgid "Category" +msgstr "Kategorie" + +#: includes/include.con_edit_form.php:549 +msgid "Choose Startdate" +msgstr "Startzeitpunkt wählen" + +#: includes/include.con_edit_form.php:550 +msgid "Choose Enddate" +msgstr "Endzeitpunkt wählen" + +#: includes/include.con_edit_form.php:648 +msgid "Select date" +msgstr "Datum auswählen" + +#: includes/include.con_edit_form.php:685 +msgid "Summary" +msgstr "Zusammenfassung" + +#: includes/include.CMS_EASYIMG.php:153 +msgid "Upload image" +msgstr "Bild hochladen" + +#: includes/include.CMS_EASYIMG.php:157 includes/include.client_edit.php:228 +#: includes/include.grouprights_overview.php:103 +#: includes/include.rights_overview.php:193 +msgid "Discard changes" +msgstr "Ängerungen verwerfen" + +#: includes/grouprights_str.inc.php:212 includes/rights_con.inc.php:223 +#: includes/grouprights_con.inc.php:237 includes/rights_str.inc.php:217 +msgid "" +"Apply rights for this category to all categories on the same level or above" +msgstr "" +"Rechte dieser Kategorie allen Kategorien auf derselben Ebene oder darü" +"ber zuweisen" + +#: includes/grouprights_str.inc.php:213 includes/rights_con.inc.php:224 +#: includes/grouprights_con.inc.php:238 includes/rights_str.inc.php:218 +msgid "" +"Apply rights for this category to all categories below the current category" +msgstr "" +"Rechte dieser Kategorie allen Kategorien unter dieser Kategorie zuweisen" + +#: includes/grouprights_str.inc.php:215 +#: includes/include.upl_dirs_overview.php:60 includes/rights_con.inc.php:227 +#: includes/include.str_overview.php:174 includes/grouprights_con.inc.php:241 +#: includes/rights_str.inc.php:221 +msgid "Close category" +msgstr "Kategorie schliessen" + +#: includes/include.upl_dirs_overview.php:153 +msgid "Failed to delete the following files:" +msgstr "Die folgenden Dateien konnten nicht gelöscht werden:" + +#: includes/include.upl_dirs_overview.php:159 +#, php-format +msgid "Failed to remove directory %s" +msgstr "Folgendes Verzeichnis konnte nicht verschoben werden: %s" + +#: includes/include.upl_dirs_overview.php:190 +msgid "Upload directory" +msgstr "Upload Verzeichnis" + +#: includes/include.upl_dirs_overview.php:194 +msgid "" +"The following directories contains invalid characters and were ignored: " +msgstr "" +"Die folgenden Verzeichnisnamen beinhalten ungültige Zeichen und wurden " +"daher ignoriert: " + +#: includes/include.upl_dirs_overview.php:197 +msgid "Please click here in order to rename automatically." +msgstr "" +"Bitte klicken Sie hier, um die Verzeichnisse automatisch umzubennennen." + +#: includes/include.upl_dirs_overview.php:319 +msgid "Categories" +msgstr "Kategorien" + +#: includes/include.upl_dirs_overview.php:400 +#: includes/include.upl_dirs_overview.php:547 +msgid "Delete directory" +msgstr "Verzeichnis löschen" + +#: includes/include.upl_dirs_overview.php:400 +#: includes/include.upl_dirs_overview.php:547 +msgid "Do you really want to delete the following directory:" +msgstr "" +"Möchten Sie das folgende Verzeichnis wirklich löschen:

    " + +#: includes/include.upl_dirs_overview.php:405 +#: includes/include.upl_dirs_overview.php:552 +msgid "Directory contains files" +msgstr "Verzeichnis enthält Dateien" + +#: includes/include.upl_dirs_overview.php:454 +msgid "Database Filesystem" +msgstr "Datenbank-Dateisystem" + +#: includes/include.tplcfg_edit_form.php:76 +#, php-format +msgid "Category Template configuration is in use by %s (%s)" +msgstr "Templatekonfiguration (Kategorie) wird benutzt von %s (%s)" + +#: includes/include.tplcfg_edit_form.php:276 +#: includes/include.con_art_overview.php:82 +#: includes/include.pretplcfg_edit_form.php:76 backend_search.php:496 +#: templates/standard/template.str_overview.html:230 +#: templates/standard/template.mycontenido_lastarticles.html:66 +msgid "Template" +msgstr "Template" + +#: includes/include.tplcfg_edit_form.php:352 +msgid "Module in container" +msgstr "Modul in Container" + +#: includes/include.tplcfg_edit_form.php:476 +msgid "Categorytemplate configuration" +msgstr "Kategorietemplate konfigurieren" + +#: includes/include.tplcfg_edit_form.php:479 +msgid "Articletemplate configuration" +msgstr "Artikeltemplate konfigurieren" + +#: includes/include.rights_menu.php:133 +#: includes/include.frontend.user_menu.php:273 +#: includes/include.frontend.left_top.php:395 +#, php-format +msgid "Do you really want to delete the user %s?" +msgstr "" +"Möchten Sie den folgenden Benutzer wirklich löschen:

    %s" + +#: includes/include.rights_menu.php:135 +#: includes/include.frontend.user_menu.php:275 +#: includes/cfg_language_de.inc.php:172 +#: includes/include.frontend.left_top.php:397 +msgid "Delete user" +msgstr "Benutzer löschen" + +#: includes/include.info.php:38 +#, fuzzy +msgid "" +"You can find a lot of information and a community forum on the ConLite Portal" +msgstr "" +"Alle Informationen zu ConLite und das ConLite Community Forum finden Sie auf " +"dem ConLite Portal" + +#: includes/include.CMS_HTMLHEAD.php:100 includes/include.CMS_HTML.php:98 +msgid "Save without leaving the editor" +msgstr "Speichern und im Editor bleiben" + +#: includes/include.CMS_HTMLHEAD.php:101 includes/include.CMS_HTML.php:99 +msgid "Save and close editor" +msgstr "Speichern und Editor schließen" + +#: includes/functions.tpl.php:436 includes/functions.con.php:1837 +#: includes/functions.str.php:1387 +#, php-format +msgid "%s (Copy)" +msgstr "%s (Kopie)" + +#: includes/include.con_left_top.php:135 +msgid "Ignore" +msgstr "Ignorieren" + +#: includes/include.con_left_top.php:136 classes/class.cms_filelist.php:444 +msgid "Date created" +msgstr "Erstelldatum" + +#: includes/include.con_left_top.php:137 classes/class.cms_filelist.php:447 +msgid "Date modified" +msgstr "Änderungsdatum" + +#: includes/include.con_left_top.php:138 +msgid "Date published" +msgstr "Veröffentlichungsdatum" + +#: includes/include.con_left_top.php:141 +msgid "Article Search" +msgstr "Artikelsuche" + +#: includes/include.con_left_top.php:237 +#: templates/standard/template.recipient_menu.html:92 +msgid "Search" +msgstr "Suche" + +#: includes/include.con_left_top.php:250 +msgid "Title/Content" +msgstr "Titel/Inhalt" + +#: includes/include.con_left_top.php:255 +msgid "Article ID" +msgstr "Artikel-ID" + +#: includes/include.con_left_top.php:260 +msgid "Datum" +msgstr "Datum" + +#: includes/include.con_left_top.php:265 +msgid "Date from" +msgstr "Datum von" + +#: includes/include.con_left_top.php:270 +msgid "Date to" +msgstr "Datum bis" + +#: includes/include.con_left_top.php:291 +msgid "Saved Searches" +msgstr "Gespeicherte Suchen" + +#: includes/include.con_left_top.php:302 +#: includes/include.mycontenido_lastarticles.php:137 +#: includes/main.login.php:211 +msgid "Recently edited articles" +msgstr "Zuletzt bearbeitete Artikel" + +#: includes/include.con_left_top.php:306 +msgid "My articles" +msgstr "Meine Artikel" + +#: includes/include.con_left_top.php:311 +msgid "Workflow" +msgstr "Workflow" + +#: includes/include.con_left_top.php:369 scripts/HTMLObj.js.php:254 +#: scripts/langref.php:12 +msgid "Choose template" +msgstr "Template wählen" + +#: includes/include.con_left_top.php:379 +msgid "Edit Category" +msgstr "Kategorie bearbeiten" + +#: includes/include.con_left_top.php:395 +msgid "Template:" +msgstr "Template:" + +#: includes/include.con_left_top.php:404 includes/include.con_left_top.php:405 +msgid "Configure Category" +msgstr "Kategorie konfigurieren" + +#: includes/include.con_left_top.php:407 includes/include.con_left_top.php:408 +msgid "Online / Offline" +msgstr "Online / Offline" + +#: includes/include.con_left_top.php:410 includes/include.con_left_top.php:411 +msgid "Lock / Unlock" +msgstr "Schützen / Freigeben" + +#: includes/include.con_left_top.php:428 +msgid "close all" +msgstr "alle schließen" + +#: includes/include.con_left_top.php:428 +#: includes/include.con_str_overview.php:612 +#: includes/include.str_overview.php:486 includes/include.str_overview.php:487 +#: includes/include.str_overview.php:488 +#: templates/standard/template.stat_overview.html:135 +msgid "Close all categories" +msgstr "Alle Kategorien schließen" + +#: includes/include.con_left_top.php:429 +msgid "open all" +msgstr "alle öffnen" + +#: includes/include.con_left_top.php:429 +#: includes/include.con_str_overview.php:613 +#: includes/include.str_overview.php:493 includes/include.str_overview.php:494 +#: includes/include.str_overview.php:495 +#: templates/standard/template.stat_overview.html:137 +msgid "Open all categories" +msgstr "Alle Kategorien öffnen" + +#: includes/include.con_left_top.php:439 +msgid "Synchronize from" +msgstr "Synchronisieren von" + +#: includes/include.con_left_top.php:472 includes/include.con_left_top.php:473 +msgid "Copy to current language" +msgstr "In die aktuelle Sprache kopieren" + +#: includes/include.con_left_top.php:474 includes/include.con_left_top.php:475 +msgid "Also copy subcategories" +msgstr "Unterkategorien mit kopieren" + +#: includes/include.con_art_overview.php:77 +#: includes/include.con_editcontent.php:382 +#: includes/include.con_subnav.php:104 backend_search.php:491 +#: templates/standard/template.symbolhelp.html:38 +#: templates/standard/template.symbolhelp.html:283 +#: templates/standard/template.log_main.html:53 +#: classes/class.cms_teaser.php:596 classes/class.ajax.php:170 +msgid "Article" +msgstr "Artikel" + +#: includes/include.con_art_overview.php:79 backend_search.php:493 +msgid "Changed" +msgstr "Geändert" + +#: includes/include.con_art_overview.php:80 backend_search.php:494 +msgid "Published" +msgstr "Veröffentlicht" + +#: includes/include.con_art_overview.php:81 +#: includes/include.rights_left_top.php:155 +#: includes/include.frontend.left_top.php:257 includes/include.mod_new.php:161 +#: backend_search.php:495 classes/class.cms_teaser.php:588 +#: classes/class.cms_filelist.php:738 +msgid "Sort order" +msgstr "Sortierreihenfolge" + +#: includes/include.con_art_overview.php:369 +msgid "Article is in use" +msgstr "Artikel wird benutzt" + +#: includes/include.con_art_overview.php:370 +#, php-format +msgid "Article in use by %s (%s)" +msgstr "Artikel wird benutzt von %s (%s)" + +#: includes/include.con_art_overview.php:436 backend_search.php:658 +msgid "Unfreeze article" +msgstr "Artikel auftauen" + +#: includes/include.con_art_overview.php:439 +#: includes/cfg_language_de.inc.php:98 backend_search.php:661 +msgid "Freeze article" +msgstr "Artikel einfrieren" + +#: includes/include.con_art_overview.php:446 +msgid "Article is frozen" +msgstr "Artikel ist eingefroren" + +#: includes/include.con_art_overview.php:449 +msgid "Article is not frozen" +msgstr "Artikel ist nicht eingefroren" + +#: includes/include.con_art_overview.php:472 backend_search.php:676 +msgid "Article properties" +msgstr "Artikeleigenschaften" + +#: includes/include.con_art_overview.php:486 +msgid "Copy article to the current language" +msgstr "Artikel in die aktuelle Sprache kopieren" + +#: includes/include.con_art_overview.php:547 backend_search.php:635 +msgid "Flag as start article" +msgstr "Als Startartikel markieren" + +#: includes/include.con_art_overview.php:549 backend_search.php:632 +msgid "Flag as normal article" +msgstr "Als normalen Artikel markieren" + +#: includes/include.con_art_overview.php:555 +msgid "Normal article" +msgstr "Normaler Artikel" + +#: includes/include.con_art_overview.php:569 backend_search.php:675 +#: templates/standard/template.symbolhelp.html:413 +msgid "Duplicate article" +msgstr "Artikel duplizieren" + +#: includes/include.con_art_overview.php:581 +#, php-format +msgid "Reminder for Article '%s'" +msgstr "Wiedervorlage für Artikel '%s'" + +#: includes/include.con_art_overview.php:584 +#, php-format +msgid "" +"Reminder for Article '%s'\n" +"Category: %s" +msgstr "" +"Wiedervorlage für Artikel '%s'\n" +"Kategorie: %s" + +#: includes/include.con_art_overview.php:595 +#: includes/include.mycontenido_lastarticles.php:221 +msgid "Article is online" +msgstr "Artikel ist online" + +#: includes/include.con_art_overview.php:603 +#: includes/include.mycontenido_lastarticles.php:224 +msgid "Article is offline" +msgstr "Artikel ist offline" + +#: includes/include.con_art_overview.php:625 +#, php-format +msgid "Are you sure to delete the following article:

    %s" +msgstr "" +"Möchten Sie den folgenden Artikel wirklich löschen:

    %s" + +#: includes/include.con_art_overview.php:626 +#: includes/cfg_language_de.inc.php:106 backend_search.php:678 +#: templates/standard/template.symbolhelp.html:425 +msgid "Delete article" +msgstr "Artikel löschen" + +#: includes/include.con_art_overview.php:771 +#: includes/include.con_art_overview.php:774 +#, php-format +msgid "Go to page: %s" +msgstr "Gehe zu Seite: %s" + +#: includes/include.con_art_overview.php:777 +msgid "with click select line for further treatment" +msgstr "mit Klick Zeile zur weiteren Bearbeitung auswählen" + +#: includes/include.con_art_overview.php:832 +#: includes/include.con_art_overview.php:938 +msgid "No articles found" +msgstr "Keine Artikel gefunden" + +#: includes/include.con_art_overview.php:838 +msgid "Alphabetical" +msgstr "Alphabetisch" + +#: includes/include.con_art_overview.php:839 +msgid "Last change" +msgstr "Letzte Änderung" + +#: includes/include.con_art_overview.php:840 +msgid "Published date" +msgstr "Veröffentlichungsdatum" + +#: includes/include.con_art_overview.php:860 +msgid "Sort articles:" +msgstr "Sortierung:" + +#: includes/include.con_art_overview.php:887 +msgid "Items per page:" +msgstr "Elemente/Seite:" + +#: includes/include.con_art_overview.php:988 +#: includes/include.con_art_overview.php:989 +#: templates/standard/template.symbolhelp.html:329 +msgid "Create new article" +msgstr "Neuen Artikel erstellen" + +#: includes/include.frontend.user_menu.php:53 +#: includes/include.frontend.left_top.php:58 +msgid "-- All fields --" +msgstr "-- Alle Felder --" + +#: includes/include.frontend.user_menu.php:53 +#: includes/include.frontend.user_menu.php:54 +#: includes/include.rights_overview.php:203 +#: includes/include.frontend.left_top.php:58 +#: includes/include.frontend.left_top.php:59 +#: includes/include.rights_create.php:150 +msgid "Username" +msgstr "Benutzername" + +#: includes/include.frontend.user_menu.php:112 +#: includes/include.rights_left_top.php:118 +#: includes/include.frontend.left_top.php:118 includes/include.mod_new.php:88 +#: classes/class.cms_teaser.php:423 classes/class.cms_filelist.php:465 +msgid "Ascending" +msgstr "Aufsteigend" + +#: includes/include.frontend.user_menu.php:112 +#: includes/include.rights_left_top.php:119 +#: includes/include.frontend.left_top.php:118 includes/include.mod_new.php:88 +#: classes/class.cms_teaser.php:426 classes/class.cms_filelist.php:468 +msgid "Descending" +msgstr "Absteigend" + +#: includes/include.frontend.user_menu.php:114 +#: includes/include.rights_left_top.php:123 +#: includes/include.frontend.left_top.php:193 includes/include.mod_new.php:94 +msgid "List options" +msgstr "Anzeigeoptionen" + +#: includes/include.frontend.user_menu.php:139 +#: includes/include.frontend.left_top.php:228 +msgid "-- All Groups --" +msgstr "-- Alle Gruppen --" + +#: includes/include.mycontenido.tasks.edit.php:43 +msgid "Edit Reminder item" +msgstr "Wiedervorlage bearbeiten" + +#: includes/include.mycontenido.tasks.edit.php:77 +msgid "E-Mail notification" +msgstr "E-Mail Benachrichtigung" + +#: includes/include.mycontenido.tasks.edit.php:140 +msgid "Progress" +msgstr "Fortschritt" + +#: includes/grouprights_tpl.inc.php:72 includes/rights_tpl.inc.php:73 +#: classes/class.ajax.php:105 classes/class.ajax.php:129 +msgid "Template name" +msgstr "Templatename" + +#: includes/include.upl_search_results.php:204 +#: includes/include.upl_search_results.php:209 +#: includes/include.upl_search_results.php:212 +#: includes/include.upl_edit.php:92 +msgid "Path" +msgstr "Pfad" + +#: includes/include.upl_search_results.php:246 +#: includes/include.upl_search_results.php:251 +#: includes/include.upl_search_results.php:254 +msgid "Relevance" +msgstr "Relevanz" + +#: includes/include.upl_search_results.php:260 +msgid "Searched for:" +msgstr "Suchbegriff:" + +#: includes/include.client_edit.php:52 +msgid "No client ID passed" +msgstr "Keine ClientID übergeben" + +#: includes/include.client_edit.php:65 +msgid "" +"Notice: In order to use this client, you must create a new language for it." +msgstr "" +"Hinweis: Um den neuen Mandanten zu nutzen, müssen Sie eine neue Sprache " +"dafür anlegen." + +#: includes/include.client_edit.php:69 +#, php-format +msgid "Please click %shere%s to create a new language." +msgstr "Bitte klicken Sie %shier%s, um dies zu tun." + +#: includes/include.client_edit.php:110 +msgid "Couldn't write the file config.php." +msgstr "Konnte die Datei config.php nicht schreiben" + +#: includes/include.client_edit.php:118 +#, php-format +msgid "Succesfully copied client-template to %s." +msgstr "Mandantentemplate erfolgreich nach %s kopiert." + +#: includes/include.client_edit.php:121 +#, php-format +msgid "" +"Cannot create directory %s . The client was created, but you have to copy " +"the frontend-template yourself" +msgstr "" +"Kann Verzeichnis %s nicht erstellen. Der Mandant wurde erstellt, das " +"Frontend-Template muß jedoch noch dorthin kopiert werden" + +#: includes/include.client_edit.php:125 +#, php-format +msgid "" +"The directory %s already exists. The client was created, but you have to " +"copy the frontend-template yourself" +msgstr "" +"Das Verzeichnis %s existiert bereits. Der Mandant wurde erstellt, das " +"Frontend-Template muß jedoch noch dorthin kopiert werden" + +#: includes/include.client_edit.php:129 +#, php-format +msgid "Client '%s' created." +msgstr "Mandant '%s erstellt." + +#: includes/include.client_edit.php:147 +msgid "" +"You changed the client path. You might need to copy the frontend to the new " +"location" +msgstr "" +"Der Mandanten-Pfad wurde geändert. Das Frontend muss eventuell an die " +"neue Position kopiert werden." + +#: includes/include.client_edit.php:245 +msgid "Client name" +msgstr "Name des Mandanten" + +#: includes/include.client_edit.php:261 +msgid "Server path" +msgstr "Server-Pfad" + +#: includes/include.client_edit.php:277 +msgid "Web address" +msgstr "Web-Adresse" + +#: includes/include.client_edit.php:286 +msgid "Error page category" +msgstr "Fehlerseiten-Kategorie" + +#: includes/include.client_edit.php:295 +msgid "Error page article" +msgstr "Fehlerseiten-Artikel" + +#: includes/include.client_edit.php:306 +msgid "Client logo" +msgstr "Mandantenlogo" + +#: includes/include.client_edit.php:315 +msgid "HTML" +msgstr "HTML" + +#: includes/include.client_edit.php:315 +msgid "XHTML" +msgstr "XHTML" + +#: includes/include.client_edit.php:315 +msgid "HTML5" +msgstr "HTML5" + +#: includes/include.client_edit.php:330 +msgid "Generate" +msgstr "Erstelle" + +#: includes/include.client_edit.php:341 +msgid "Copy frontend template" +msgstr "Frontend-Template kopieren" + +#: includes/include.rights_left_top.php:103 +#: includes/cfg_language_de.inc.php:171 includes/cfg_language_de.inc.php:174 +#: includes/include.frontend.left_top.php:178 +#: templates/standard/template.symbolhelp.html:1835 +msgid "Create user" +msgstr "Benutzer erstellen" + +#: includes/include.rights_left_top.php:147 +#: includes/include.frontend.left_top.php:249 includes/include.mod_new.php:153 +msgid "Items / page" +msgstr "Elemente / Seite" + +#: includes/include.rights_left_top.php:151 +#: includes/include.frontend.left_top.php:253 includes/include.mod_new.php:157 +msgid "Sort by" +msgstr "Sortieren nach" + +#: includes/include.rights_left_top.php:164 +#: includes/include.frontend.left_top.php:274 includes/include.mod_new.php:178 +msgid "Apply" +msgstr "Anwenden" + +#: includes/include.mycontenido_settings.php:57 +msgid "Old password incorrect" +msgstr "Altes Passwort nicht korrekt" + +#: includes/include.mycontenido_settings.php:62 +#: includes/include.rights_overview.php:132 +#: includes/include.rights_create.php:122 +msgid "Passwords don't match" +msgstr "Passwörter stimmen nicht überein" + +#: includes/include.mycontenido_settings.php:77 +msgid "Password changed" +msgstr "Passwort geändert" + +#: includes/include.mycontenido_settings.php:97 +#, php-format +msgid "Settings for %s" +msgstr "Einstellungen für %s" + +#: includes/include.mycontenido_settings.php:115 +msgid "Old password" +msgstr "Altes Passwort" + +#: includes/include.mycontenido_settings.php:117 +#: includes/include.rights_overview.php:223 +#: includes/include.rights_create.php:168 +msgid "Confirm new password" +msgstr "Neues Passwort bestätigen" + +#: includes/include.mycontenido_settings.php:121 +#: includes/include.rights_overview.php:230 +#: includes/include.rights_create.php:174 +msgid "E-Mail" +msgstr "E-Mail" + +#: includes/include.mycontenido_settings.php:125 +msgid "Use WYSIWYG Editor" +msgstr "WYSIWYG-Editor benutzen" + +#: includes/include.mycontenido_settings.php:129 +msgid "The format is equal to PHP's date() function." +msgstr "Das Format stimmt mit dem der PHP date()-Funktion überein" + +#: includes/include.mycontenido_settings.php:131 +msgid "Common date formattings" +msgstr "Gebräuchliche Datumsformatierungen" + +#: includes/include.mod_edit_form.php:54 includes/include.lay_overview.php:78 +#: includes/include.mod_overview.php:209 includes/include.str_overview.php:741 +msgid "No permission" +msgstr "Kein Zugriff" + +#: includes/include.mod_edit_form.php:58 +#: classes/contenido/class.module.php:395 +msgid "- Unnamed Module -" +msgstr "- Unbenanntes Modul -" + +#: includes/include.mod_edit_form.php:59 +msgid "" +msgstr "" + +#: includes/include.mod_edit_form.php:59 +msgid "Author: " +msgstr "Autor:" + +#: includes/include.mod_edit_form.php:59 +msgid "Version:" +msgstr "Version:" + +#: includes/include.mod_edit_form.php:77 includes/include.mod_package.php:219 +#: includes/include.mod_package.php:357 +#, php-format +msgid "Error while importing XML file: %s" +msgstr "Fehler beim importieren der XML-Datei %s" + +#: includes/include.mod_edit_form.php:88 +msgid "Module folder created" +msgstr "Modulverzeichnis erstellt" + +#: includes/include.mod_edit_form.php:91 +msgid "Error while creating module folder" +msgstr "Fehler beim Erstellen des Modulverzeichisses" + +#: includes/include.mod_edit_form.php:106 includes/include.mod_package.php:398 +#, php-format +msgid "Module is in use by %s (%s)" +msgstr "Modul wird benutzt von %s (%s)" + +#: includes/include.mod_edit_form.php:127 includes/cfg_language_de.inc.php:157 +msgid "Edit module" +msgstr "Modul bearbeiten" + +#: includes/include.mod_edit_form.php:299 +#: includes/include.mod_edit_form.php:301 +msgid "Custom" +msgstr "Benutzerdefiniert" + +#: includes/include.mod_edit_form.php:324 +#: includes/include.mod_edit_form.php:333 +#, php-format +msgid "Error in module. Error location: %s" +msgstr "Fehler in Modul. Fehlerquelle: %s" + +#: includes/include.mod_edit_form.php:327 +#: includes/include.mod_edit_form.php:336 +msgid "Module successfully compiled" +msgstr "Modul erfolgreich kompiliert" + +#: includes/include.mod_edit_form.php:371 +msgid "Create Folder" +msgstr "Verzeichnis erstellen" + +#: includes/include.mod_edit_form.php:405 +#: includes/include.mod_edit_form.php:408 includes/include.mod_new.php:111 +msgid "Input" +msgstr "Eingabe" + +#: includes/include.mod_edit_form.php:406 +#: includes/include.mod_edit_form.php:409 includes/include.mod_new.php:112 +msgid "Output" +msgstr "Ausgabe" + +#: includes/include.mod_edit_form.php:415 +msgid "" +"This module uses variables and/or functions which are probably not available " +"in this Contenido version. Please make sure that you use up-to-date modules." +msgstr "" +"Dieses Modul verwendet Variablen und/oder Funktionen, die in dieser " +"Contenido-Version nicht mehr vorhanden sind. Bitte stellen Sie sicher, dass " +"Sie aktuelle Module verwenden." + +#: includes/include.mod_edit_form.php:423 +#: includes/include.mod_translate.php:174 includes/include.mod_package.php:454 +msgid "Import from file" +msgstr "Aus Datei importieren" + +#: includes/include.mod_edit_form.php:424 +#: includes/include.mod_translate.php:173 includes/include.mod_package.php:455 +msgid "Export to file" +msgstr "In Datei exportieren" + +#: includes/include.mod_edit_form.php:440 +#: includes/include.mod_translate.php:184 includes/include.mod_package.php:472 +msgid "Mode" +msgstr "Modus" + +#: includes/include.mod_edit_form.php:442 +#: includes/include.mod_edit_form.php:444 +#: includes/include.mod_translate.php:185 includes/include.mod_package.php:476 +#: includes/include.mod_package.php:478 classes/class.cms_filelist.php:745 +msgid "File" +msgstr "Datei" + +#: includes/grouprights.inc.php:215 +msgid "Current group doesn't have any rights to any client/language." +msgstr "" +"Die aktuelle Gruppe hat keine Zugriffsrechte auf irgendeine(n) Sprache bzw " +"Mandant" + +#: includes/include.lay_overview.php:82 +msgid "Layout is in use, cannot delete" +msgstr "Layout wird benutzt, löschen nicht möglich" + +#: includes/include.lay_overview.php:92 includes/cfg_language_de.inc.php:147 +msgid "Delete layout" +msgstr "Layout löschen" + +#: includes/include.lay_overview.php:93 +#, php-format +msgid "Do you really want to delete the following layout:

    %s
    " +msgstr "" +"Möchten Sie das folgende Layout wirklich löschen:

    %s" + +#: includes/include.lay_overview.php:118 +#, php-format +msgid "The layout '%s' is used for following templates" +msgstr "Das Layout '%s' wird bei folgenden Templates benutzt" + +#: includes/include.stat_overview.php:47 includes/include.stat_overview.php:60 +msgid "Full statistics" +msgstr "Alle Statistiken" + +#: includes/include.stat_overview.php:76 +msgid "Yearly" +msgstr "Jährlich" + +#: includes/include.stat_overview.php:80 +msgid "Current" +msgstr "Aktuell" + +#: includes/include.stat_overview.php:92 +#: templates/standard/template.symbolhelp.html:89 +#: templates/standard/template.symbolhelp.html:1472 +msgid "Hits" +msgstr "Hits" + +#: includes/include.stat_overview.php:94 +msgid "Hits in this language" +msgstr "Hits in dieser Sprache" + +#: includes/include.mod_history.php:94 +msgid "Edit Module" +msgstr "Modul bearbeiten" + +#: includes/include.mod_history.php:133 +msgid "Code Input" +msgstr "Code Input" + +#: includes/include.mod_history.php:134 +msgid "Code Output" +msgstr "Code Output" + +#: includes/include.mod_history.php:152 +msgid "No module history available" +msgstr "Keine Modul-Historie verfügbar" + +#: includes/include.js_history.php:171 +msgid "No jscript history available" +msgstr "Keine JavaScript-Historie verfügbar" + +#: includes/include.js_history.php:179 includes/include.style_history.php:176 +#: includes/include.style_history.php:184 +msgid "No style history available" +msgstr "Keine Style-Historie verfügbar" + +#: includes/include.mod_translate.php:138 +#, php-format +msgid "Translate module '%s'" +msgstr "Modul übersetzen \"%s\"" + +#: includes/include.mod_translate.php:147 +msgid "Translated Name" +msgstr "Übersetzter Name" + +#: includes/include.mod_translate.php:157 +msgid "Original module string" +msgstr "Ursprünglicher Modulstring" + +#: includes/include.mod_translate.php:157 +#, php-format +msgid "Translation for %s" +msgstr "Übersetzung für %s" + +#: includes/include.mod_translate.php:165 +msgid "" +"Hint: Hit ALT+SHIFT+S to save the translated entry and advance to the next " +"string." +msgstr "" +"Hinweis: Drücken Sie ALT+SHIFT+S, um den aktuellen Eintrag zu speichern " +"und zur nächsten Zeichenkette zu springen." + +#: includes/include.mod_translate.php:166 +msgid "String list" +msgstr "Zeichenkettenliste" + +#: includes/include.mod_package.php:139 +msgid "No elements available" +msgstr "Keine Elemente vorhanden" + +#: includes/include.mod_package.php:188 +msgid "Javascript files" +msgstr "Javascript-Dateien" + +#: includes/include.mod_package.php:189 +msgid "Module template files" +msgstr "Modul-Template-Dateien" + +#: includes/include.mod_package.php:190 +msgid "Style files" +msgstr "Style-Dateien" + +#: includes/include.mod_package.php:191 +#: templates/standard/template.symbolhelp.html:53 +#: templates/standard/template.symbolhelp.html:822 +msgid "Layouts" +msgstr "Layouts" + +#: includes/include.mod_package.php:192 +msgid "Translations" +msgstr "Übersetzung" + +#: includes/include.mod_package.php:238 +msgid "Skip" +msgstr "Überspringen" + +#: includes/include.mod_package.php:238 +msgid "Append" +msgstr "Hinzufügen" + +#: includes/include.mod_package.php:238 +msgid "Overwrite" +msgstr "Überschreiben" + +#: includes/include.mod_package.php:239 +msgid "OK" +msgstr "OK" + +#: includes/include.mod_package.php:240 +msgid "Assign" +msgstr "Zuordnen" + +#: includes/include.mod_package.php:241 +msgid "Conflict" +msgstr "Konflikt" + +#: includes/include.mod_package.php:242 +msgid "Ignored" +msgstr "Ignoriert" + +#: includes/include.mod_package.php:243 +msgid "- Select -" +msgstr "- Auswählen -" + +#: includes/include.mod_package.php:254 +#: templates/standard/template.log_main.html:26 +#: templates/standard/template.log_main.html:51 +msgid "Action" +msgstr "Aktion" + +#: includes/include.mod_package.php:311 +#: templates/standard/template.symbolhelp.html:181 +#: scripts/messageBox.js.php:79 scripts/langref.php:21 +msgid "Cancel" +msgstr "Abbrechen" + +#: includes/include.mod_package.php:312 +msgid "Import" +msgstr "Import" + +#: includes/include.mod_package.php:361 +msgid "Import was not succesful, please check data and try again" +msgstr "" +"Import nicht erfolgreich, bitte überprüfen Sie die Daten und " +"versuchen Sie es erneut" + +#: includes/include.mod_package.php:362 +msgid "Retry" +msgstr "Wiederholen" + +#: includes/include.mod_package.php:366 +msgid "Import succesfully finished" +msgstr "Import erfolgreich abgeschlossen" + +#: includes/include.mod_package.php:367 +msgid "Finish" +msgstr "Beenden" + +#: includes/include.mod_package.php:421 +msgid "Edit package" +msgstr "Package bearbeiten" + +#: includes/include.mod_package.php:442 +msgid "Package GUID" +msgstr "Package GUID" + +#: includes/include.clientsettings.php:50 +msgid "Select range" +msgstr "Bereich auswählen" + +#: includes/include.clientsettings.php:53 +msgid "Language independent" +msgstr "Sprachunabhängig" + +#: includes/include.clientsettings.php:79 +msgid "Range" +msgstr "Bereich" + +#: includes/include.system_db_backup.php:35 +msgid "Backupfolder missing or not writable!" +msgstr "Sicherungsverzeichnis fehlt oder nicht beschreibbar!" + +#: includes/include.system_db_backup.php:54 +msgid "Start your Backup!" +msgstr "Starte das Backup!" + +#: includes/include.system_db_backup.php:88 +#, fuzzy +msgid "Permission denied!" +msgstr "Zugriff verweigert" + +#: includes/include.system_db_backup.php:99 +msgid "Starting Backup." +msgstr "Backup startet." + +#: includes/include.system_db_backup.php:216 +msgid "Backup in Progress!" +msgstr "Backup in Bearbeitung" + +#: includes/include.system_db_backup.php:223 +#: includes/include.system_db_backup.php:248 +msgid "Tables saved: " +msgstr "Tabellen gespeichert:" + +#: includes/include.system_db_backup.php:223 +msgid "Last processed: " +msgstr "Zuletzt bearbeitet:" + +#: includes/include.system_db_backup.php:224 +#: includes/include.system_db_backup.php:248 +msgid "Pageviews: " +msgstr "Seitenaufrufe:" + +#: includes/include.system_db_backup.php:247 +msgid "Backup done!" +msgstr "Backup fertig!" + +#: includes/include.system_db_backup.php:252 +msgid "Go Back to Overview" +msgstr "Zurück zur Übersicht" + +#: includes/include.system_db_backup.php:286 +msgid "File successfully deleted." +msgstr "Datei erfolgreich gelöscht!" + +#: includes/include.system_db_backup.php:301 +msgid "Download File" +msgstr "Datei herunterladen" + +#: includes/include.upl_artlist.php:66 +msgid "Use this category" +msgstr "Diese Kategorie verwenden" + +#: includes/include.upl_artlist.php:81 +#: templates/standard/template.mycontenido_lastarticles.html:61 +msgid "Start" +msgstr "Start" + +#: includes/include.upl_artlist.php:81 +#: templates/standard/template.mycontenido_lastarticles.html:65 +msgid "Modified" +msgstr "Geändert" + +#: includes/include.upl_artlist.php:81 +msgid "Sort Order" +msgstr "Sortierreihenfolge" + +#: includes/include.upl_artlist.php:81 +msgid "Online" +msgstr "Online" + +#: includes/include.js_left_top.php:50 includes/cfg_language_de.inc.php:206 +msgid "Create script" +msgstr "Script erstellen" + +#: includes/include.stat_menu.php:37 +msgid "Current Report" +msgstr "Aktuelle Statistik" + +#: includes/include.stat_menu.php:45 +msgid "Statistics Overview" +msgstr "Statistikübersicht" + +#: includes/include.stat_menu.php:56 +msgid "Archived Statistics" +msgstr "Archivierte Statistiken" + +#: includes/include.con_editcontent.php:215 +msgid "Close editor" +msgstr "Editor schließen" + +#: includes/include.con_editcontent.php:216 +msgid "Close editor and save changes" +msgstr "Editor schließen und Änderungen speichern" + +#: includes/include.con_editcontent.php:217 +msgid "Do you want to save changes?" +msgstr "Möchten Sie die Änderungen speichern?" + +#: includes/include.con_editcontent.php:375 +msgid "No template assigned to the category
    and/or the article" +msgstr "Kein Template mit einer Kategorie
    und/oder einem Artikel assoziiert" + +#: includes/include.con_editcontent.php:376 +msgid "The code for the following article
    couldnt be generated:" +msgstr "" +"Der Code für den folgenden Artikel
    konnte nicht erstellt werden:" + +#: includes/include.con_editcontent.php:397 +#: includes/include.system_purge.php:195 +#: templates/standard/template.log_main.html:18 +#: templates/standard/template.log_main.html:48 +#: classes/class.navigation.php:340 classes/class.navigation.php:343 +msgid "Client" +msgstr "Mandant" + +#: includes/functions.con.php:331 includes/functions.con.php:518 +msgid "Default title" +msgstr "Standardtitel" + +#: includes/include.lay_history.php:87 includes/include.lay_edit_form.php:186 +msgid "Edit Layout" +msgstr "Layout bearbeiten" + +#: includes/include.lay_history.php:137 +msgid "No layout history available" +msgstr "Keine Layout-Historie verfügbar" + +#: includes/include.upl_edit.php:91 +msgid "File name" +msgstr "Dateiname" + +#: includes/include.upl_edit.php:93 +msgid "Replace file" +msgstr "Datei ersetzen" + +#: includes/include.upl_edit.php:94 +msgid "Media name" +msgstr "Medienname" + +#: includes/include.upl_edit.php:96 +msgid "Keywords" +msgstr "Schlüsselwörter" + +#: includes/include.upl_edit.php:97 +msgid "Internal notes" +msgstr "Interne Notiz" + +#: includes/include.upl_edit.php:98 +msgid "Copyright" +msgstr "Copyright" + +#: includes/include.upl_edit.php:99 +msgid "Protection" +msgstr "Schutz" + +#: includes/include.upl_edit.php:100 +#: templates/standard/template.con_edit_form.html:141 +msgid "Time control" +msgstr "Zeitsteuerung" + +#: includes/include.upl_edit.php:200 +msgid "Protected for non-logged in users" +msgstr "Geschützt für nichteingeloggte Benutzer" + +#: includes/include.upl_edit.php:209 +#: templates/standard/template.con_edit_form.html:144 +msgid "Use time control" +msgstr "Zeitsteuerung aktivieren" + +#: includes/include.upl_edit.php:215 +#: templates/standard/template.con_edit_form.html:146 +#: templates/standard/template.log_main.html:30 +msgid "Start date" +msgstr "Startdatum" + +#: includes/include.upl_edit.php:313 +#, php-format +msgid "Could not load file %s" +msgstr "Konnte Datei %s nicht laden" + +#: includes/functions.file.php:206 +msgid "Please insert filename." +msgstr "Bitte Dateinamen angeben." + +#: includes/functions.file.php:218 +#, php-format +msgid "Could not open file %s" +msgstr "Konnte Datei %s nicht öffnen" + +#: includes/functions.file.php:223 +#, php-format +msgid "Could not write file %s" +msgstr "Konnte Datei %s nicht schreiben" + +#: includes/functions.file.php:234 includes/functions.file.php:338 +#, php-format +msgid "%s is not writable" +msgstr "%s ist nicht schreibbar" + +#: includes/functions.file.php:255 +#, php-format +msgid "Can not open file%s " +msgstr "Kann Datei %s nicht öffnen" + +#: includes/functions.file.php:304 +msgid "Unable to change file access permission." +msgstr "Konnte die Dateisystem-Berechtigungen nicht ändern." + +#: includes/functions.file.php:308 +#, php-format +msgid "Unable to create file %s" +msgstr "Konnte Datei %s nicht erstellen" + +#: includes/functions.file.php:334 +#, php-format +msgid "Can not rename file %s" +msgstr "Konnte Datei %s nicht umbenennen" + +#: includes/functions.file.php:361 +msgid "Wrong filename." +msgstr "Falscher Dateiname." + +#: includes/include.mycontenido_lastarticles.php:293 +msgid "No article found" +msgstr "Keine Artikel gefunden" + +#: includes/include.grouprights_overview.php:67 +msgid "Changes couldn't saved" +msgstr "Änderungen nicht gespeichert" + +#: includes/include.grouprights_overview.php:112 +msgid "Groupname" +msgstr "Gruppenname" + +#: includes/include.grouprights_overview.php:208 +#: includes/include.rights_overview.php:352 +msgid "Area/Type" +msgstr "Area/Type" + +#: includes/include.grouprights_overview.php:222 +#: includes/include.rights_overview.php:366 +msgid "User-defined properties" +msgstr "Benutzerdefinierte Eigenschaften" + +#: includes/include.upl_files_upload.php:51 +msgid "Upload" +msgstr "Hochladen" + +#: includes/include.upl_files_upload.php:63 +#: includes/cfg_language_de.inc.php:136 includes/cfg_language_de.inc.php:144 +msgid "Upload files" +msgstr "Dateien hochladen" + +#: includes/include.lay_edit_form.php:46 +msgid "-- New Layout --" +msgstr "-- Neues Layout --" + +#: includes/include.lay_edit_form.php:56 +msgid "Layout deleted" +msgstr "Layout gelöscht" + +#: includes/include.lay_edit_form.php:128 +#, php-format +msgid "Container %s was defined %s times" +msgstr "Container %s wurde %sx definiert" + +#: includes/include.lay_edit_form.php:141 +msgid "" +"The body tag does not exist in the layout. This is a requirement for the in-" +"site editing." +msgstr "" +"Der body-Tag existiert nicht in diesem Layout. Dies ist eine Voraussetzung " +"für das In-Site-Editing." + +#: includes/include.lay_edit_form.php:147 +msgid "" +"The head tag does not exist in the layout. This is a requirement for the in-" +"site editing." +msgstr "" +"Der head-Tag existiert nicht in diesem Layout. Dies ist eine Voraussetzung " +"für das In-Site-Editing." + +#: includes/include.lay_edit_form.php:173 +#: includes/include.html_tpl_edit_form.php:185 +#, php-format +msgid "Tag '%s' %s has no end tag (start tag is on line %s char %s)" +msgstr "" +"Tag '%s' %s hat keinen End-Tag (Start-Tag befindet sich auf Zeile %s Zeichen " +"%s)" + +#: includes/include.lay_edit_form.php:202 +msgid "On save, apply default modules to new containers" +msgstr "Beim Speichern alle Default-Module in neue Container zuweisen" + +#: includes/include.rights_overview.php:75 +msgid "User deleted" +msgstr "Benutzer gelöscht" + +#: includes/include.rights_overview.php:144 +#: includes/include.rights_overview.php:149 +msgid "An error occured while saving user info." +msgstr "" +"Ein Fehler ist während des Sendens des Bugreports aufgetreten! Bitte " +"versuchen Sie es noch einmal" + +#: includes/include.rights_overview.php:236 +#: includes/include.rights_create.php:180 +msgid "Phone number" +msgstr "Telefonnummer" + +#: includes/include.rights_overview.php:242 +#: includes/include.rights_create.php:186 +msgid "Street" +msgstr "Strasse" + +#: includes/include.rights_overview.php:248 +#: includes/include.rights_create.php:192 +msgid "ZIP code" +msgstr "Postleitzahl" + +#: includes/include.rights_overview.php:254 +#: includes/include.rights_create.php:198 +msgid "City" +msgstr "Stadt" + +#: includes/include.rights_overview.php:373 +#: includes/include.rights_create.php:269 +msgid "Use WYSIWYG-Editor" +msgstr "WYSIWYG-Editor benutzen" + +#: includes/include.rights_overview.php:398 +#: includes/include.rights_create.php:290 +msgid "Valid from" +msgstr "Gültig von" + +#: includes/include.rights_overview.php:418 +#: includes/include.rights_create.php:307 +msgid "Valid to" +msgstr "Gültig bis" + +#: includes/include.rights_overview.php:436 +msgid "This account is currently inactive." +msgstr "Dieser Benutzer ist momentan deaktiviert." + +#: includes/include.rights_overview.php:439 +msgid "This account is currently active." +msgstr "Dieser Benutzer ist momentan aktiviert." + +#: includes/include.pretplcfg_edit_form.php:101 +#, php-format +msgid "Module in Container %s" +msgstr "Modul in Container %s" + +#: includes/include.pretplcfg_edit_form.php:150 +msgid "Template preconfiguration" +msgstr "Template Vorkonfiguration" + +#: includes/include.mod_overview.php:198 +msgid "Module in use, cannot delete" +msgstr "Modul wird benutzt, löschen nicht möglich" + +#: includes/include.mod_overview.php:200 +msgid "Module in filesystem, cannot delete" +msgstr "Modul liegt im Dateisystem und kann nicht gelöscht werden" + +#: includes/include.mod_overview.php:204 includes/cfg_language_de.inc.php:154 +msgid "Delete module" +msgstr "Modul löschen" + +#: includes/include.mod_overview.php:205 +#, php-format +msgid "Do you really want to delete the following module:

    %s
    " +msgstr "" +"Möchten Sie das folgende Modul wirklich löschen:

    %s" + +#: includes/include.mod_overview.php:271 +#, php-format +msgid "The module '%s' is used for following templates" +msgstr "Das Modul '%s' wird bei folgenden Templates benutzt" + +#: includes/include.lang_left_top.php:80 includes/cfg_language_de.inc.php:189 +msgid "Create language" +msgstr "Sprache erstellen für" + +#: includes/include.frontend.group.subnav.php:40 includes/main.login.php:210 +msgid "Overview" +msgstr "Übersicht" + +#: includes/include.frontend.group_edit.php:56 +msgid "-- new group --" +msgstr "-- Neue Gruppe --" + +#: includes/include.frontend.group_edit.php:121 +msgid "Could not set new group name: Group already exists" +msgstr "Konnte Gruppennamen nicht setzen: Gruppe existiert bereits" + +#: includes/include.frontend.group_edit.php:227 +msgid "Default group" +msgstr "Standardgruppe" + +#: includes/include.frontend.group_edit.php:275 +#: includes/cfg_language_de.inc.php:180 +msgid "Edit group" +msgstr "Gruppe bearbeiten" + +#: includes/grouprights_members.inc.php:208 +msgid "Manage group members" +msgstr "Gruppenmitglieder verwalten" + +#: includes/include.style_left_top.php:50 +msgid "Create style" +msgstr "Style erstellen" + +#: includes/main.login.php:67 +msgid "No Login Information available." +msgstr "Keine Login-Informationen verfügbar." + +#: includes/main.login.php:74 +msgid "" +"You're logged in with a temporary password. Please change your password." +msgstr "" +"Sie haben sich mit einem temporären Passwort eingeloggt. Bitte ä" +"ndern Sie Ihr Passwort." + +#: includes/main.login.php:79 +msgid "" +"The setup directory still exists. Please remove the setup directory before " +"you continue." +msgstr "" +"Das Setupverzeichnis existiert noch. Bitte löschen Sie das " +"Setupverzeichnis, bevor Sie fortfahren." + +#: includes/main.login.php:95 +msgid "" +"The sysadmin and/or the admin account still contains a well-known default " +"password. Please change immediately." +msgstr "" +"Der Sysadmin und/oder Admin Account ist noch auf das Standardpasswort " +"gesetzt. Bitte ändern Sie das Passwort umgehend." + +#: includes/main.login.php:109 +msgid "Welcome" +msgstr "Willkommen" + +#: includes/main.login.php:110 +msgid "Last login" +msgstr "Letzter Login" + +#: includes/main.login.php:128 includes/main.login.php:165 +#, php-format +msgid "Client %s (%s) has no languages" +msgstr "Mandant %s (%s) hat keine Sprache" + +#: includes/main.login.php:148 +msgid "Change client" +msgstr "Mandant wechseln" + +#: includes/main.login.php:153 +msgid "No clients available!" +msgstr "Keine Mandanten verfügbar!" + +#: includes/main.login.php:205 +#, php-format +msgid "Reminder list: %d Task open" +msgstr "Wiedervorlage: %d Aufgabe offen" + +#: includes/main.login.php:207 +#, php-format +msgid "Reminder list: %d Tasks open" +msgstr "Wiedervorlage: %d Aufgaben offen" + +#: includes/main.login.php:238 +msgid "Symbol help" +msgstr "Symbolhilfe" + +#: includes/main.login.php:241 +msgid "Contenido Manual" +msgstr "Contenido Redakteurshandbuch" + +#: includes/cfg_language_de.inc.php:99 +msgid "Make category online" +msgstr "Kategorie online setzen" + +#: includes/cfg_language_de.inc.php:100 +msgid "Change template" +msgstr "Template wechseln" + +#: includes/cfg_language_de.inc.php:101 +msgid "Set start article" +msgstr "Startartikel festlegen" + +#: includes/cfg_language_de.inc.php:102 +msgid "Make article online" +msgstr "Artikel online setzen" + +#: includes/cfg_language_de.inc.php:103 +msgid "Syncronize Category" +msgstr "Kategorie synchronisieren" + +#: includes/cfg_language_de.inc.php:104 +msgid "Syncronize Article" +msgstr "Artikel synchronisieren" + +#: includes/cfg_language_de.inc.php:105 includes/cfg_language_de.inc.php:124 +#: includes/include.str_overview.php:963 includes/include.str_overview.php:965 +#: templates/standard/template.str_overview.html:139 +msgid "Protect category" +msgstr "Kategorie schützen" + +#: includes/cfg_language_de.inc.php:107 +msgid "Edit template configuration" +msgstr "Template-Konfiguration bearbeiten" + +#: includes/cfg_language_de.inc.php:108 +msgid "Duplicate Article" +msgstr "Artikel duplizieren" + +#: includes/cfg_language_de.inc.php:109 +msgid "Expand boxes" +msgstr "Boxen ausklappen/einklappen" + +#: includes/cfg_language_de.inc.php:110 backend_search.php:677 +#: templates/standard/template.symbolhelp.html:377 +msgid "Configure template" +msgstr "Template konfigurieren" + +#: includes/cfg_language_de.inc.php:111 +msgid "Create article" +msgstr "Neuen Artikel erstellen" + +#: includes/cfg_language_de.inc.php:112 +msgid "Configure article" +msgstr "Artikel konfigurieren" + +#: includes/cfg_language_de.inc.php:113 +msgid "Save article" +msgstr "Artikel speichern" + +#: includes/cfg_language_de.inc.php:115 includes/cfg_language_de.inc.php:117 +msgid "Edit article" +msgstr "Artikel bearbeiten" + +#: includes/cfg_language_de.inc.php:116 +msgid "Edit article properties" +msgstr "Artikeleigenschaften bearbeiten" + +#: includes/cfg_language_de.inc.php:118 +msgid "Help" +msgstr "Hilfe" + +#: includes/cfg_language_de.inc.php:120 +#: templates/standard/template.symbolhelp.html:524 +msgid "Rename category" +msgstr "Kategorie umbenennen" + +#: includes/cfg_language_de.inc.php:121 +msgid "New category" +msgstr "Neue Kategorie" + +#: includes/cfg_language_de.inc.php:122 +msgid "Set category on- or offline" +msgstr "Kategorie on- oder offline setzen" + +#: includes/cfg_language_de.inc.php:123 +msgid "Disable category" +msgstr "Kategorie schützen" + +#: includes/cfg_language_de.inc.php:125 +msgid "Frontend access" +msgstr "Frontend-Zugriff" + +#: includes/cfg_language_de.inc.php:126 +msgid "Delete category" +msgstr "Kategorie löschen" + +#: includes/cfg_language_de.inc.php:127 +msgid "Move category up" +msgstr "Eine Kategorie nach oben verschieben" + +#: includes/cfg_language_de.inc.php:128 +msgid "Move category down" +msgstr "Eine Kategorie nach unten verschieben" + +#: includes/cfg_language_de.inc.php:129 +#: templates/standard/template.symbolhelp.html:665 +msgid "Move category" +msgstr "Kategorie verschieben" + +#: includes/cfg_language_de.inc.php:130 +msgid "Create new tree" +msgstr "Neuen Baum anlegen" + +#: includes/cfg_language_de.inc.php:131 +#: templates/standard/template.symbolhelp.html:701 +msgid "Duplicate category" +msgstr "Kategorie duplizieren" + +#: includes/cfg_language_de.inc.php:132 includes/include.str_overview.php:949 +#: includes/include.str_overview.php:952 +#: templates/standard/template.symbolhelp.html:314 +#: templates/standard/template.symbolhelp.html:506 +#: templates/standard/template.str_overview.html:148 +msgid "Configure category" +msgstr "Kategorie konfigurieren" + +#: includes/cfg_language_de.inc.php:133 +msgid "Edit category" +msgstr "Kategorie bearbeiten" + +#: includes/cfg_language_de.inc.php:135 includes/cfg_language_de.inc.php:145 +msgid "Create directory" +msgstr "Verzeichnis erstellen" + +#: includes/cfg_language_de.inc.php:137 +msgid "Delete files" +msgstr "Dateien löschen" + +#: includes/cfg_language_de.inc.php:138 +msgid "Remove directory" +msgstr "Verzeichnis löschen" + +#: includes/cfg_language_de.inc.php:139 +msgid "Rename directory" +msgstr "Verzeichnis umbenennen" + +#: includes/cfg_language_de.inc.php:140 +msgid "Modify file" +msgstr "Datei modifizieren" + +#: includes/cfg_language_de.inc.php:141 +msgid "Rename file" +msgstr "Datei umbenennen" + +#: includes/cfg_language_de.inc.php:142 +msgid "Multidelete Files" +msgstr "Mehrfachlöschung" + +#: includes/cfg_language_de.inc.php:148 +msgid "Modify layout" +msgstr "Layout bearbeiten" + +#: includes/cfg_language_de.inc.php:149 +msgid "Create layout" +msgstr "Layout erstellen" + +#: includes/cfg_language_de.inc.php:150 includes/cfg_language_de.inc.php:155 +#: includes/cfg_language_de.inc.php:201 includes/cfg_language_de.inc.php:207 +#: includes/cfg_language_de.inc.php:213 +msgid "Manage History" +msgstr "Historie verwalten" + +#: includes/cfg_language_de.inc.php:151 includes/cfg_language_de.inc.php:156 +#: includes/cfg_language_de.inc.php:202 includes/cfg_language_de.inc.php:208 +#: includes/cfg_language_de.inc.php:214 +msgid "Truncate History" +msgstr "Historie löschen" + +#: includes/cfg_language_de.inc.php:158 +msgid "Create module" +msgstr "Modul erstellen" + +#: includes/cfg_language_de.inc.php:159 +msgid "Import/Export module" +msgstr "Modul importieren/exportieren" + +#: includes/cfg_language_de.inc.php:160 +msgid "Translate modules" +msgstr "Modul übersetzen" + +#: includes/cfg_language_de.inc.php:161 +msgid "Translation import/export" +msgstr "Übersetzungen importieren/exportieren" + +#: includes/cfg_language_de.inc.php:162 +msgid "Import/Export package" +msgstr "Paket importieren/exportieren" + +#: includes/cfg_language_de.inc.php:166 +msgid "Create template" +msgstr "Template erstellen" + +#: includes/cfg_language_de.inc.php:169 +msgid "Visual edit" +msgstr "Visuelles Bearbeiten" + +#: includes/cfg_language_de.inc.php:173 +msgid "Save user area rights" +msgstr "User-Bereichsrechte speichern" + +#: includes/cfg_language_de.inc.php:175 +msgid "Edit rights" +msgstr "Rechte bearbeiten" + +#: includes/cfg_language_de.inc.php:178 +msgid "Delete group members" +msgstr "Gruppenmitglieder löschen" + +#: includes/cfg_language_de.inc.php:179 +msgid "Add group members" +msgstr "Gruppenmitglied hinzufügen" + +#: includes/cfg_language_de.inc.php:184 +msgid "Show statistics" +msgstr "Statistik anzeigen" + +#: includes/cfg_language_de.inc.php:186 includes/include.lang_overview.php:68 +msgid "Activate language" +msgstr "Sprache aktivieren" + +#: includes/cfg_language_de.inc.php:187 includes/include.lang_overview.php:72 +msgid "Deactivate language" +msgstr "Sprache deaktivieren" + +#: includes/cfg_language_de.inc.php:188 +msgid "Rename language" +msgstr "Sprache umbenennen" + +#: includes/cfg_language_de.inc.php:190 includes/include.lang_overview.php:78 +msgid "Delete language" +msgstr "Sprache löschen" + +#: includes/cfg_language_de.inc.php:193 +msgid "Linkchecker" +msgstr "Linkchecker" + +#: includes/cfg_language_de.inc.php:194 +msgid "Linkchecker Whitelist" +msgstr "Linkchecker Whitelist" + +#: includes/cfg_language_de.inc.php:196 +msgid "Install/Remove plugins" +msgstr "Plugins installieren/deinstallieren" + +#: includes/cfg_language_de.inc.php:198 +msgid "Modify CSS" +msgstr "CSS modifizieren" + +#: includes/cfg_language_de.inc.php:199 +msgid "Create CSS" +msgstr "CSS erstellen" + +#: includes/cfg_language_de.inc.php:200 +msgid "Delete CSS" +msgstr "CSS löschen" + +#: includes/cfg_language_de.inc.php:204 +msgid "Edit script" +msgstr "Script bearbeiten" + +#: includes/cfg_language_de.inc.php:205 +msgid "Delete script" +msgstr "Script löschen" + +#: includes/cfg_language_de.inc.php:210 +msgid "Modify HTML-Template" +msgstr "HTML-Template verändern" + +#: includes/cfg_language_de.inc.php:211 +msgid "Create HTML-Template" +msgstr "HTML-Template erstellen" + +#: includes/cfg_language_de.inc.php:212 +msgid "Delete HTML-Template" +msgstr "HTML-Template löschen" + +#: includes/cfg_language_de.inc.php:216 +msgid "Edit newsletter" +msgstr "Newsletter bearbeiten" + +#: includes/cfg_language_de.inc.php:217 +#: templates/standard/template.symbolhelp.html:1279 +msgid "Create newsletter" +msgstr "Newsletter erzeugen" + +#: includes/cfg_language_de.inc.php:218 +msgid "Delete newsletter" +msgstr "Newsletter löschen" + +#: includes/cfg_language_de.inc.php:219 +msgid "Duplicate newsletter" +msgstr "Newsletter kopieren" + +#: includes/cfg_language_de.inc.php:220 +msgid "Add newsletter dispatch job" +msgstr "Newsletter Versand-Job erzeugen" + +#: includes/cfg_language_de.inc.php:221 +msgid "Change global HTML newsletter settings" +msgstr "Globale HTML-Newsletter-Einstellungen ändern" + +#: includes/cfg_language_de.inc.php:222 +msgid "Send test newsletter (to groups)" +msgstr "Test-Newsletter versenden (an Gruppen)" + +#: includes/cfg_language_de.inc.php:223 +msgid "Delete dispatch job" +msgstr "Newsletter Versand-Job löschen" + +#: includes/cfg_language_de.inc.php:224 +msgid "Remove recipient from dispatch job" +msgstr "Empfänger aus Newsletter-Job herausnehmen" + +#: includes/cfg_language_de.inc.php:225 +msgid "Run job" +msgstr "Job ausführen" + +#: includes/cfg_language_de.inc.php:226 +msgid "View dispatch job details" +msgstr "Newsletter Versand-Job-Details ansehen" + +#: includes/cfg_language_de.inc.php:228 +msgid "Edit recipient" +msgstr "Empfänger bearbeiten" + +#: includes/cfg_language_de.inc.php:229 +#: templates/standard/template.symbolhelp.html:1373 +msgid "Create recipient" +msgstr "Empfänger erzeugen" + +#: includes/cfg_language_de.inc.php:230 +msgid "Delete recipient" +msgstr "Empfänger löschen" + +#: includes/cfg_language_de.inc.php:231 +msgid "Purge recipients" +msgstr "Empfänger aufräumen" + +#: includes/cfg_language_de.inc.php:232 +msgid "Import recipients" +msgstr "Empfänger importieren" + +#: includes/cfg_language_de.inc.php:233 +msgid "Execute recipients import" +msgstr "Empfänger-Import ausführen" + +#: includes/cfg_language_de.inc.php:234 +msgid "Delete recipient group" +msgstr "Empfängergruppe löschen" + +#: includes/cfg_language_de.inc.php:235 +#: templates/standard/template.symbolhelp.html:1409 +msgid "Create recipient group" +msgstr "Empfängergruppe erstellen" + +#: includes/cfg_language_de.inc.php:236 +msgid "Delete recipient from group" +msgstr "Empfänger aus Gruppe entfernen" + +#: includes/cfg_language_de.inc.php:237 +msgid "Save recipient group" +msgstr "Änderungen an Empfängergruppe speichern" + +#: includes/cfg_language_de.inc.php:239 +msgid "Edit own MyContenido settings" +msgstr "Eigene MyConLite-Einstellungen bearbeiten" + +#: includes/cfg_language_de.inc.php:240 +msgid "Delete reminder item" +msgstr "Wiedervorlage löschen" + +#: includes/cfg_language_de.inc.php:241 +msgid "Save todo item" +msgstr "Todo-Eintrag speichern" + +#: includes/cfg_language_de.inc.php:244 +msgid "Edit client" +msgstr "Mandant bearbeiten" + +#: includes/cfg_language_de.inc.php:245 +msgid "Remove client" +msgstr "Mandant löschen" + +#: includes/cfg_language_de.inc.php:246 +msgid "Delete clientsetting" +msgstr "Mandanteneinstellungen löschen" + +#: includes/cfg_language_de.inc.php:247 +msgid "Edit clientsetting" +msgstr "Mandanteneinstellungen bearbeiten" + +#: includes/cfg_language_de.inc.php:248 +msgid "Save clientsetting" +msgstr "Mandanteneinstellungen speichern" + +#: includes/cfg_language_de.inc.php:249 +msgid "Create/Edit articlespecifications" +msgstr "Artikelspezifikation erstellen/bearbeiten" + +#: includes/cfg_language_de.inc.php:250 +msgid "Delete articlespecifications" +msgstr "Artikelspezifikation löschen" + +#: includes/cfg_language_de.inc.php:251 +msgid "Define default articlespecification" +msgstr "Standard Artikelspezifikation definieren" + +#: includes/cfg_language_de.inc.php:252 +msgid "Edit articlespecifications" +msgstr "Artikelspezifikationen bearbeiten" + +#: includes/cfg_language_de.inc.php:253 +msgid "Make articlespecifications online" +msgstr "Artikelspezifikationen online setzen" + +#: includes/cfg_language_de.inc.php:255 +msgid "Save frontenduser" +msgstr "Frontendbenutzer speichern" + +#: includes/cfg_language_de.inc.php:256 +msgid "Create frontenduser" +msgstr "Frontendbenutzer erstellen" + +#: includes/cfg_language_de.inc.php:257 includes/cfg_language_de.inc.php:263 +msgid "Delete frontenduser" +msgstr "Frontendbenutzer löschen" + +#: includes/cfg_language_de.inc.php:258 +msgid "Delete frontendgroup" +msgstr "Frontendbenutzergruppe löschen" + +#: includes/cfg_language_de.inc.php:259 +msgid "Save frontendgroup" +msgstr "Frontendbenutzergruppe speichern" + +#: includes/cfg_language_de.inc.php:260 includes/cfg_language_de.inc.php:261 +msgid "Create frontendgroup" +msgstr "Frontendbenutzergruppe erstellen" + +#: includes/cfg_language_de.inc.php:262 +msgid "Add frontendusers" +msgstr "Frontendbenutzer hinzufügen" + +#: includes/cfg_language_de.inc.php:264 +msgid "Save frontendgroup permissions" +msgstr "Frontendbenutzergruppe-Berechtigungen speichern" + +#: includes/cfg_language_de.inc.php:266 +msgid "Delete system property" +msgstr "Systemeinstellung löschen" + +#: includes/cfg_language_de.inc.php:267 +msgid "Edit system property" +msgstr "Systemeinstellung bearbeiten" + +#: includes/cfg_language_de.inc.php:268 +msgid "Save system property" +msgstr "Systemeinstellung speichern" + +#: includes/cfg_language_de.inc.php:270 +msgid "Empty log" +msgstr "Log leeren" + +#: includes/cfg_language_de.inc.php:271 +msgid "Edit Systemconfigration" +msgstr "Systemkonfiguration bearbeiten" + +#: includes/cfg_language_de.inc.php:272 +msgid "Do system purge" +msgstr "Systembereinigung ausführen" + +#: includes/cfg_language_de.inc.php:274 +msgid "Show log" +msgstr "Log anzeigen" + +#: includes/cfg_language_de.inc.php:276 main.loginform.php:159 +msgid "Login" +msgstr "Login" + +#: includes/cfg_language_de.inc.php:277 +msgid "Request password?" +msgstr "Passwort vergessen?" + +#: includes/cfg_language_de.inc.php:279 +msgid "Delete note" +msgstr "Notiz löschen" + +#: includes/cfg_language_de.inc.php:280 +msgid "Save note" +msgstr "Notiz speichern" + +#: includes/cfg_language_de.inc.php:282 +msgid "Send mail" +msgstr "E-Mail senden" + +#: includes/cfg_language_de.inc.php:283 +msgid "Fake permissions" +msgstr "Berechtigungen emulieren" + +#: includes/include.style_history.php:126 +msgid "Edit Style" +msgstr "Style bearbeiten" + +#: includes/include.frontend.left_top.php:141 +msgid "Frontend users" +msgstr "Frontend-Benutzer" + +#: includes/include.frontend.left_top.php:148 +msgid "Frontend groups" +msgstr "Frontend-Gruppen" + +#: includes/include.frontend.left_top.php:261 +msgid "Show group" +msgstr "Gruppe anzeigen" + +#: includes/include.frontend.left_top.php:269 includes/include.mod_new.php:173 +msgid "Search in" +msgstr "Suche in" + +#: includes/include.mod_new.php:69 +msgid "New module" +msgstr "Neues Modul" + +#: includes/include.mod_new.php:72 +msgid "Sync module" +msgstr "Module synchronisieren" + +#: includes/include.mod_new.php:97 includes/include.mod_new.php:107 +#: includes/include.mod_new.php:127 +msgid "-- All --" +msgstr "-- Alle --" + +#: includes/include.mod_new.php:108 +msgid "Modulname" +msgstr "Modulname" + +#: includes/include.mod_new.php:128 +msgid "-- Without type --" +msgstr "-- Ohne Typ --" + +#: includes/include.mod_new.php:165 +msgid "Type filter" +msgstr "Art des Moduls" + +#: includes/functions.lang.php:119 +msgid "" +"Could not set the language-ID in the file 'config.php'. Please set the " +"language manually." +msgstr "" +"Konnte die Sprach-ID in der Datei \"config.php\" nicht setzen. Bitte Sprach-" +"ID manuell setzen." + +#: includes/functions.lang.php:591 +msgid "Could not delete language" +msgstr "Konnte Sprache nicht löschen" + +#: includes/include.str_overview.php:511 +#, php-format +msgid "" +"Do you really want to duplicate the following category:

    %s

    Notice: The duplicate process can take up to several minutes, " +"depending on how many subitems and articles you've got." +msgstr "" +"Soll die folgende Kategorie wirklich dupliziert werden:

    %s

    Hinweis: Der Duplizierungsprozess kann mehrere Minuten dauern, " +"abhängig von der Anzahl der Artikel und Unterkategorien." + +#: includes/include.str_overview.php:513 +#, php-format +msgid "Do you really want to delete the following category:

    %s" +msgstr "" +"Möchten Sie die folgende Kategorie wirklich löschen:

    %s" + +#: includes/include.str_overview.php:920 +msgid "Create new category" +msgstr "Neue Kategorie erstellen" + +#: includes/include.str_overview.php:993 +#, php-format +msgid "Cancel moving %s" +msgstr "Verschieben von %s abbrechen" + +#: includes/include.html_tpl_left_top.php:50 +msgid "Create module template" +msgstr "Modul-Template erstellen" + +#: includes/include.lang_overview.php:77 +#, php-format +msgid "Do you really want to delete the language %s?" +msgstr "Möchten Sie die Sprache %s wirklich löschen?" + +#: includes/include.lang_overview.php:118 +msgid "Language deleted" +msgstr "Sprache gelöscht" + +#: includes/include.system_sysvalues.php:79 +#: includes/include.system_sysvalues.php:123 +msgid "No error log entries found" +msgstr "Keine Einträge im Errorlog gefunden" + +#: includes/include.system_sysvalues.php:83 +msgid "No error log file found" +msgstr "Keine Errorlog-Datei gefunden" + +#: includes/include.system_sysvalues.php:116 +msgid "No install error log entries found" +msgstr "Keine Einträge im install error log gefunden." + +#: includes/include.frontend.group_menu.php:51 +msgid "Delete frontend group" +msgstr "Frontend-Gruppe löschen" + +#: includes/include.frontend.group_menu.php:52 +#, php-format +msgid "Do you really want to delete the following frontend group:
    %s" +msgstr "" +"Möchten Sie die folgende Frontend-Gruppe wirklich löschen:
    " +"%s" + +#: includes/include.rights_create.php:53 +msgid "Username can't be empty" +msgstr "Benutzername darf nicht leer sein" + +#: includes/include.rights_create.php:85 +msgid "User created" +msgstr "Benutzer erstellt" + +#: includes/include.rights_create.php:106 +msgid "Username already exists" +msgstr "Benutzername existiert bereits" + +#: includes/include.rights_create.php:110 +msgid "Unknown error" +msgstr "Unbekannter Fehler" + +#: includes/functions.mod.php:200 +msgid "Please do not use short open Tags. (Use
    %s
    " +msgstr "" +"Möchten Sie den folgenden Mandant wirklich löschen:

    %s" + +#: includes/include.note.popup.php:63 +msgid "Add note" +msgstr "Notiz hinzufügen" + +#: includes/include.note.popup.php:75 +msgid "No category" +msgstr "Keine Kategorie" + +#: includes/include.note.popup.php:92 +msgid "Note" +msgstr "Notiz" + +#: includes/functions.lay.php:66 +msgid "-- Unnamed Layout --" +msgstr "-- Unbenanntes Layout --" + +#: includes/include.system_purge.php:79 includes/include.system_purge.php:87 +#: includes/include.system_purge.php:95 includes/include.system_purge.php:103 +#: includes/include.system_purge.php:112 +msgid "Client " +msgstr "Mandant" + +#: includes/include.system_purge.php:80 includes/include.system_purge.php:128 +#: includes/include.system_purge.php:135 +#, php-format +msgid "The entries of %s table are not deleted!" +msgstr "Einträge von der Tabelle %s wurden nicht gelöscht!" + +#: includes/include.system_purge.php:88 +#, php-format +msgid "The %s is not updated!" +msgstr "Tabelle %s ist nicht akutalisiert!" + +#: includes/include.system_purge.php:96 +msgid "The cache is not deleted!" +msgstr "Cache wurde nicht gelöscht" + +#: includes/include.system_purge.php:104 +msgid "The log is not deleted!" +msgstr "Log-Datei wurde nicht geleert" + +#: includes/include.system_purge.php:113 +msgid "The history is not deleted!" +msgstr "Versionierung wurde nicht gelöscht!" + +#: includes/include.system_purge.php:143 +msgid "The contenido log is not cleaned!" +msgstr "ConLite Log-Datei wurde nicht geleert" + +#: includes/include.system_purge.php:150 +msgid "The contenido cache is not deleted!" +msgstr "ConLite Cache wurde nicht gelöscht!" + +#: includes/include.system_purge.php:157 +msgid "The contenido cronjobs are not cleaned!" +msgstr "ConLite Cronjob-Dateien wurden nicht geleert!" + +#: includes/include.system_purge.php:164 +msgid "Update of sequence table not completed!" +msgstr "Aktualisierung der Sequence Tabelle nicht komplett " + +#: includes/include.system_purge.php:169 +msgid "The changes were successfully executed." +msgstr "Die Änderungen wurden erfolgreich ausgeführt." + +#: includes/include.system_purge.php:171 +msgid "The changes were not all successfully completed." +msgstr "" +"Die Änderungen wurden teilweise nicht erfolgreich ausgeführt." + +#: includes/include.system_purge.php:190 includes/include.system_purge.php:214 +msgid "System purge" +msgstr "System Bereinigen" + +#: includes/include.system_purge.php:191 +msgid "No Client selected!" +msgstr "Kein Mandant ausgewählt!" + +#: includes/include.system_purge.php:196 +msgid "all clients" +msgstr "alle Mandanten" + +#: includes/include.system_purge.php:197 +msgid "from list" +msgstr "aus Liste" + +#: includes/include.system_purge.php:198 +msgid "Select clients" +msgstr "Mandanten Auswahl" + +#: includes/include.system_purge.php:199 includes/include.system_purge.php:201 +#: includes/include.system_purge.php:209 +#, php-format +msgid "Reset the table %s" +msgstr "Tabelle %s leeren" + +#: includes/include.system_purge.php:200 +#, php-format +msgid "Activate the code generation in %s" +msgstr "Code-Generierung in der Tabelle %s" + +#: includes/include.system_purge.php:202 +msgid "Clear client cache" +msgstr "Cache-Dateien löschen" + +#: includes/include.system_purge.php:203 +msgid "Clear client log file" +msgstr "Log-Datei leeren" + +#: includes/include.system_purge.php:204 +msgid "Clear client history" +msgstr "Versionierung löschen" + +#: includes/include.system_purge.php:205 +msgid "Keep last histories" +msgstr "Letzten Versionierungen beibehalten" + +#: includes/include.system_purge.php:207 +msgid "Contenido" +msgstr "ConLite" + +#: includes/include.system_purge.php:208 +msgid "Clear contenido log file" +msgstr "ConLite Log-Datei leeren" + +#: includes/include.system_purge.php:210 +msgid "Clear contenido cache" +msgstr "ConLite Cache löschen" + +#: includes/include.system_purge.php:211 +msgid "Reset cronjobs" +msgstr "Job-Dateien von Cronjob leeren" + +#: includes/include.system_purge.php:212 +msgid "Update sequence table" +msgstr "Sequence-Tabelle aktualisiert" + +#: includes/include.system_purge.php:215 +msgid "These changes can not be cancelled." +msgstr "Die Änderungen können Sie nicht rückgängig machen." + +#: includes/include.system_purge.php:215 +msgid "Do you really want to complete it?" +msgstr "Wollen Sie diese Aktion wirklich ausführen!" + +#: includes/include.system_purge.php:220 +msgid "No action selected!" +msgstr "Keine Aktion ausgewählt!" + +#: includes/include.system_purge.php:222 +msgid "Send" +msgstr "Gesendet" + +#: backend_search.php:328 +msgid "Thank you for saving this search from extinction !" +msgstr "Vielen Dank für die Speicherung dieser Suche!" + +#: backend_search.php:490 +msgid "Search results" +msgstr "Suchergebnisse" + +#: backend_search.php:506 +msgid "Missing search value." +msgstr "Suchwert fehlt." + +#: backend_search.php:507 backend_search.php:734 +msgid "No article found." +msgstr "Keine Artikel gefunden." + +#: backend_search.php:672 +msgid "Reminder" +msgstr "Erinnerung" + +#: backend_search.php:674 classes/class.todo.php:158 +#: classes/class.todo.php:161 +msgid "Set reminder / add to todo list" +msgstr "Wiedervorlage setzen / zur Todo-Liste hinzufügen" + +#: backend_search.php:679 +msgid "Do you really want to delete following article" +msgstr "Möchten Sie wirklich die folgende Datei löschen:
    " + +#: backend_search.php:765 +msgid "Search Name" +msgstr "Bezeichnung" + +#: backend_search.php:767 +msgid "Store" +msgstr "Speichern" + +#: backend_search.php:772 +msgid "Save this Search" +msgstr "Suche speichern" + +#: external/backendedit/front_content.php:331 +#: external/backendedit/front_content.php:386 +#: external/frontend/front_content.php:348 +#: external/frontend/front_content.php:396 +msgid "No start article for this category" +msgstr "Kein Startartikel für diese Kategorie" + +#: templates/standard/template.symbolhelp.html:23 +msgid "Table of contents" +msgstr "Inhaltsverzeichnis" + +#: templates/standard/template.symbolhelp.html:29 +#: templates/standard/template.symbolhelp.html:135 +msgid "Common" +msgstr "Allgemeines" + +#: templates/standard/template.symbolhelp.html:35 +#: templates/standard/template.symbolhelp.html:277 +msgid "Content" +msgstr "Content" + +#: templates/standard/template.symbolhelp.html:44 +#: templates/standard/template.symbolhelp.html:740 +msgid "File management" +msgstr "Dateiverwaltung" + +#: templates/standard/template.symbolhelp.html:50 +#: templates/standard/template.symbolhelp.html:816 +msgid "Style" +msgstr "Style" + +#: templates/standard/template.symbolhelp.html:56 +#: templates/standard/template.symbolhelp.html:904 +msgid "Modules" +msgstr "Module" + +#: templates/standard/template.symbolhelp.html:59 +#: templates/standard/template.symbolhelp.html:985 +msgid "Templates" +msgstr "Templates" + +#: templates/standard/template.symbolhelp.html:62 +#: templates/standard/template.symbolhelp.html:1055 +msgid "CSS editor" +msgstr "CSS-Editor" + +#: templates/standard/template.symbolhelp.html:65 +#: templates/standard/template.symbolhelp.html:1110 +msgid "Script editor" +msgstr "Scripteditor" + +#: templates/standard/template.symbolhelp.html:68 +#: templates/standard/template.symbolhelp.html:1165 +msgid "Module Templates" +msgstr "Modul-Templates" + +#: templates/standard/template.symbolhelp.html:74 +#: templates/standard/template.symbolhelp.html:1242 +msgid "Extras" +msgstr "Extras" + +#: templates/standard/template.symbolhelp.html:77 +#: templates/standard/template.symbolhelp.html:1248 +msgid "Newsletter" +msgstr "Newsletter" + +#: templates/standard/template.symbolhelp.html:80 +msgid "Recipients" +msgstr "Empfänger" + +#: templates/standard/template.symbolhelp.html:86 +#: templates/standard/template.symbolhelp.html:1466 +msgid "Statistics" +msgstr "Statistiken" + +#: templates/standard/template.symbolhelp.html:95 +#: templates/standard/template.symbolhelp.html:1548 +msgid "Administration" +msgstr "Administration" + +#: templates/standard/template.symbolhelp.html:98 +#: templates/standard/template.symbolhelp.html:1554 +msgid "Users" +msgstr "Benutzer" + +#: templates/standard/template.symbolhelp.html:101 +#: templates/standard/template.symbolhelp.html:1609 +msgid "Groups" +msgstr "Gruppen" + +#: templates/standard/template.symbolhelp.html:104 +#: templates/standard/template.symbolhelp.html:1664 +msgid "Languages" +msgstr "Sprachen" + +#: templates/standard/template.symbolhelp.html:107 +#: templates/standard/template.symbolhelp.html:1734 +msgid "Clients" +msgstr "Mandanten" + +#: templates/standard/template.symbolhelp.html:129 +msgid "Table of Contents" +msgstr "Inhaltsverzeichnis" + +#: templates/standard/template.symbolhelp.html:166 +msgid "Execute query / Save" +msgstr "Anfrage senden / Speichern" + +#: templates/standard/template.symbolhelp.html:196 +#: classes/class.request.password.php:247 +msgid "Submit" +msgstr "Absenden" + +#: templates/standard/template.symbolhelp.html:208 +msgid "Change to MyContenido (Personal Settings)" +msgstr "Zu MyConLite wechseln (Persönliche Einstellungen)" + +#: templates/standard/template.symbolhelp.html:220 +msgid "Information (Impressum)" +msgstr "Information (Impressum)" + +#: templates/standard/template.symbolhelp.html:235 +msgid "Logout" +msgstr "Ausloggen" + +#: templates/standard/template.symbolhelp.html:341 +msgid "Article is start article / is not start article" +msgstr "Artikel ist Startartikel / kein Startartikel" + +#: templates/standard/template.symbolhelp.html:353 +#: templates/standard/template.symbolhelp.html:868 +#: templates/standard/template.symbolhelp.html:949 +msgid "Set template / Add to To-Do list" +msgstr "Template setzen / zur Todo-Liste hinzufügen" + +#: templates/standard/template.symbolhelp.html:365 +msgid "Configure article properties" +msgstr "Artikeleigenschaften bearbeiten" + +#: templates/standard/template.symbolhelp.html:389 +msgid "Element is online / offline (change through click)" +msgstr "Element ist online / offline (Durch Klick ändern)" + +#: templates/standard/template.symbolhelp.html:401 +msgid "Element is protected / accessible (change through click)" +msgstr "Element ist geschützt / erreichbar (Ändern durch Klick)" + +#: templates/standard/template.symbolhelp.html:439 +msgid "Lock / unlock folder (change through click)" +msgstr "Kategorie sperren / entsperren (Ändern durch Klick)" + +#: templates/standard/template.symbolhelp.html:451 +msgid "Set folder offline / online (change through click)" +msgstr "Ordner offline / online setzen (Ändern durch Klick)" + +#: templates/standard/template.symbolhelp.html:542 +msgid "Create category" +msgstr "Kategorie erzeugen" + +#: templates/standard/template.symbolhelp.html:560 +msgid "Set category online / offline" +msgstr "Kategorie online / offline setzen" + +#: templates/standard/template.symbolhelp.html:578 +msgid "Category is online and unprotected / protected" +msgstr "Kategorie ist online und ungeschützt / geschützt" + +#: templates/standard/template.symbolhelp.html:596 +msgid "Category is offline and unprotected / protected" +msgstr "Kategorie ist offline und ungeschützt / geschützt" + +#: templates/standard/template.symbolhelp.html:614 +msgid "Category is online, contains an error and is unprotected / protected" +msgstr "" +"Kategorie ist online, enthält einen Fehler und ist ungeschützt / " +"geschützt" + +#: templates/standard/template.symbolhelp.html:632 +msgid "Category is offline, contains an error and is unprotected / protected" +msgstr "" +"Kategorie ist offline, ist fehlerhaft und ist ungeschützt / geschü" +"tzt" + +#: templates/standard/template.symbolhelp.html:650 +msgid "Move up one category" +msgstr "Eine Kategorie nach oben verschieben" + +#: templates/standard/template.symbolhelp.html:683 +msgid "Select move target" +msgstr "Verschiebeziel auswählen" + +#: templates/standard/template.symbolhelp.html:716 +#: templates/standard/template.symbolhelp.html:880 +#: templates/standard/template.symbolhelp.html:961 +#: templates/standard/template.symbolhelp.html:1031 +#: templates/standard/template.symbolhelp.html:1086 +#: templates/standard/template.symbolhelp.html:1141 +#: templates/standard/template.symbolhelp.html:1196 +#: templates/standard/template.symbolhelp.html:1306 +#: templates/standard/template.symbolhelp.html:1421 +#: templates/standard/template.symbolhelp.html:1585 +#: templates/standard/template.symbolhelp.html:1640 +#: templates/standard/template.symbolhelp.html:1710 +#: templates/standard/template.symbolhelp.html:1765 +#: templates/standard/template.symbolhelp.html:1871 +msgid "Delete / Delete not available" +msgstr "Löschen / Löschen nicht verfügbar" + +#: templates/standard/template.symbolhelp.html:762 +msgid "Root upload folder" +msgstr "Basis-Uploadverzeichnis" + +#: templates/standard/template.symbolhelp.html:780 +msgid "Regular folder" +msgstr "Normaler Ordner" + +#: templates/standard/template.symbolhelp.html:853 +msgid "Layout in use" +msgstr "Layout wird verwendet" + +#: templates/standard/template.symbolhelp.html:934 +msgid "Module in use" +msgstr "Modul wird verwendet" + +#: templates/standard/template.symbolhelp.html:1294 +msgid "Copy newsletter" +msgstr "Newsletter kopieren" + +#: templates/standard/template.symbolhelp.html:1330 +#: templates/standard/template.symbolhelp.html:1361 +msgid "Recipient" +msgstr "Empfänger" + +#: templates/standard/template.symbolhelp.html:1385 +msgid "Remove recipient" +msgstr "Empfänger entfernen" + +#: templates/standard/template.symbolhelp.html:1397 +msgid "Recipient group" +msgstr "Empfängergruppe" + +#: templates/standard/template.symbolhelp.html:1503 +msgid "Article is online / offline" +msgstr "Artikel ist online / offline" + +#: templates/standard/template.symbolhelp.html:1695 +msgid "Language active / not active" +msgstr "Sprache ist aktiv / nicht aktiv" + +#: templates/standard/template.symbolhelp.html:1823 +#: templates/standard/template.log_main.html:22 +#: templates/standard/template.log_main.html:50 +#: classes/class.navigation.php:360 +msgid "User" +msgstr "Benutzer" + +#: templates/standard/template.symbolhelp.html:1847 +msgid "User group" +msgstr "Benutzergruppe" + +#: templates/standard/template.symbolhelp.html:1859 +msgid "Create user group" +msgstr "Benutzergruppe erzeugen" + +#: templates/standard/template.info.html:15 +msgid "Concept and Implementation" +msgstr "Konzept und Implementierung" + +#: templates/standard/template.info.html:15 +msgid "Germany" +msgstr "Deutschland" + +#: templates/standard/template.info.html:15 +msgid "Phone" +msgstr "Telefon" + +#: templates/standard/template.system_variables.html:16 +msgid "Your system configuration" +msgstr "Ihre Systemkonfiguration" + +#: templates/standard/template.system_variables.html:21 +msgid "Variable" +msgstr "Variable" + +#: templates/standard/template.system_variables.html:22 +msgid "Local value" +msgstr "Lokaler Wert" + +#: templates/standard/template.system_variables.html:37 +msgid "Contenido Error Log" +msgstr "Contenido Fehlerlog" + +#: templates/standard/template.system_variables.html:50 +msgid "clear error log" +msgstr "Fehlerlog leeren" + +#: templates/standard/template.system_variables.html:58 +msgid "Contenido Upgrade Error Log" +msgstr "Contenido Upgrade-Fehlerlog" + +#: templates/standard/template.system_variables.html:72 +msgid "clear upgrade error log" +msgstr "Upgrade-Fehlerlog leeren" + +#: templates/standard/template.rights_inc.html:24 +msgid "Client / Language" +msgstr "Mandant / Sprache" + +#: templates/standard/template.str_overview.html:157 +msgid "Category is a tree" +msgstr "Kategorie ist ein Baum" + +#: templates/standard/template.str_overview.html:164 +msgid "Position of category" +msgstr "Position der Kategorie" + +#: templates/standard/template.con_edit_form.html:153 +msgid "When expired, move to category" +msgstr "Nach Endzeitpunkt in diese Kategorie verschieben" + +#: templates/standard/template.con_edit_form.html:155 +msgid "Make online after move" +msgstr "Nach Verschieben Artikel online lassen" + +#: templates/standard/template.con_edit_form.html:184 +msgid "Page title" +msgstr "Seitentitel" + +#: templates/standard/template.con_edit_form.html:190 +msgid "Meta tags" +msgstr "Meta-Tags" + +#: templates/standard/template.mycontenido_lastarticles.html:35 +msgid "Your clients" +msgstr "Ihre Mandanten" + +#: templates/standard/template.mycontenido_lastarticles.html:67 +#: classes/class.notification.php:126 +msgid "Info" +msgstr "Information" + +#: templates/standard/template.welcome.html:22 +msgid "Available clients" +msgstr "Verfügbare Mandanten" + +#: templates/standard/template.welcome.html:42 +msgid "Currently" +msgstr "Momentan" + +#: templates/standard/template.welcome.html:42 +msgid "Users online" +msgstr "Benutzer online" + +#: templates/standard/template.welcome.html:50 +msgid "Contact System Administrators" +msgstr "Kontakt Systemadministrator(en)" + +#: templates/standard/template.upl_files_overview.html:61 +msgid "Sort files" +msgstr "Dateisortierung" + +#: templates/standard/template.upl_files_overview.html:82 +#: classes/class.cms_filelist.php:438 +msgid "Filename" +msgstr "Dateiname" + +#: templates/standard/template.upl_files_overview.html:86 +#: classes/class.cms_filelist.php:441 +msgid "File size" +msgstr "Dateigröße" + +#: templates/standard/template.upl_files_overview.html:88 +msgid "Image size" +msgstr "Bildgröße" + +#: templates/standard/template.recipient_menu.html:88 +#: templates/standard/template.log_main.html:38 +msgid "Limit" +msgstr "Beschränkung" + +#: templates/standard/template.log_main.html:14 +#: classes/class.cms_filelist.php:722 +msgid "Filter" +msgstr "Filter" + +#: templates/standard/template.log_main.html:49 +msgid "Date" +msgstr "Datum" + +#: cronjobs/send_reminder.php:97 +#, php-format +msgid "" +"Hello %s,\n" +"\n" +"you've got a new reminder for the client '%s' at\n" +"%s:\n" +"\n" +"%s" +msgstr "" +"Hallo %s,\n" +"\n" +"Du hast eine Wiedervorlage erhalten für den Mandanten '%s' bei\n" +"%s:\n" +"\n" +"%s" + +#: main.loginform.php:70 +msgid "" +"Contenido is in maintenance mode. Only sysadmins are allowed to login. " +"Please try again later." +msgstr "" +"Contenido befindet sich im Wartungsmodus. Nur Systemadministratoren kö" +"nnen sich einloggen. Bitte versuchen Sie es zu einem späteren Zeitpunkt " +"erneut." + +#: main.loginform.php:158 +msgid "ConLite Backend" +msgstr "ConLite Backend" + +#: main.loginform.php:169 +msgid "Invalid Login or Password!" +msgstr "Login fehlgeschlagen!" + +#: main.loginform.php:176 +msgid "Password" +msgstr "Passwort" + +#: classes/class.versionFile.php:131 +msgid "Can not open file " +msgstr "Konnte Datei %s nicht Öffnen" + +#: classes/class.request.password.php:251 +msgid "Please enter your login" +msgstr "Bitte geben Sie hier Ihren Login ein" + +#: classes/class.request.password.php:257 +msgid "Hide request" +msgstr "Fenster schliessen" + +#: classes/class.request.password.php:301 +#, php-format +msgid "Password requests are allowed every %s minutes." +msgstr "Passwörter können nur alle %s Minuten angefordert werden." + +#: classes/class.request.password.php:309 +#: classes/class.request.password.php:322 +msgid "No matching data found. Please contact your systemadministrator." +msgstr "" +"Keine passenden Daten gefunden. Bitte wenden Sie sich an Ihren System-" +"Administrator." + +#: classes/class.request.password.php:315 +msgid "New password was submitted to your e-mail address." +msgstr "Das neue Passwort wurde soeben an Ihre E-Mailadresse gesendet." + +#: classes/class.request.password.php:358 +#, php-format +msgid "" +"Dear Contenidouser %s,\n" +"\n" +"Your password to log in Content Management System Contenido is: %s\n" +"\n" +"Best regards\n" +"\n" +"Your Contenido sysadmin" +msgstr "" +"Lieber ConLite-User %s,\n" +"\n" +"Ihr Passwort für das Login in das Content Management System ConLite " +"ist: %s\n" +"\n" +"Viele Grüße\n" +"\n" +"Ihr ConLite Systemadministrator" + +#: classes/class.request.password.php:374 +msgid "Your new password for Contenido Backend" +msgstr "Ihr neues Passwort für das ConLite Backend" + +#: classes/class.notification.php:114 scripts/langref.php:14 +#: scripts/articleObject.js.php:228 scripts/articleObject.js.php:231 +msgid "Error" +msgstr "Fehler" + +#: classes/class.notification.php:120 +msgid "Warning" +msgstr "Warnung" + +#: classes/class.notification.php:133 +msgid "Notification" +msgstr "Hinweis" + +#: classes/widgets/class.widgets.datawidgets.php:314 +#: classes/widgets/class.widgets.datawidgets.php:315 +msgid "Clear contents" +msgstr "Inhalt leeren" + +#: classes/widgets/class.widgets.pager.php:47 +#: classes/widgets/class.widgets.pager.php:51 +msgid "Paging" +msgstr "Seitennavigation" + +#: classes/widgets/class.widgets.pager.php:85 +msgid "First page" +msgstr "Erste Seite" + +#: classes/widgets/class.widgets.pager.php:92 +msgid "Previous page" +msgstr "Vorherige Seite" + +#: classes/widgets/class.widgets.pager.php:106 +#, php-format +msgid "Page %s" +msgstr "Seite %s" + +#: classes/widgets/class.widgets.pager.php:122 +msgid "Next page" +msgstr "Nächste Seite" + +#: classes/widgets/class.widgets.pager.php:132 +msgid "Last page" +msgstr "Letzte Seite" + +#: classes/con2con/class.filehandler.php:451 +#, fuzzy +msgid "Wrong file name." +msgstr "Falscher Dateiname." + +#: classes/con2con/class.filehandler.php:467 +#, fuzzy +msgid "Please insert file name." +msgstr "Bitte Dateinamen angeben." + +#: classes/class.cms_teaser.php:386 +msgid "Block Style" +msgstr "Blockdarstellung" + +#: classes/class.cms_teaser.php:389 +msgid "Blog Style" +msgstr "Listendarstellung" + +#: classes/class.cms_teaser.php:451 +msgid "Scaled" +msgstr "Skaliert" + +#: classes/class.cms_teaser.php:454 +msgid "Cropped" +msgstr "Zugeschnitten" + +#: classes/class.cms_teaser.php:480 +msgid "Sort Sequence" +msgstr "Sortierreihenfolge" + +#: classes/class.cms_teaser.php:483 +msgid "Creationdate" +msgstr "Erstellungsdatum" + +#: classes/class.cms_teaser.php:486 +msgid "Publisheddate" +msgstr "Veröffentlichungsdatum" + +#: classes/class.cms_teaser.php:489 +msgid "Modificationdate" +msgstr "Änderungsdatum" + +#: classes/class.cms_teaser.php:578 +msgid "Teasersettings" +msgstr "Teasereinstellungen" + +#: classes/class.cms_teaser.php:579 +msgid "Teasertitle" +msgstr "Teaserüberschrift" + +#: classes/class.cms_teaser.php:580 +msgid "Teaser Startarticle" +msgstr "Teaser Startartikel" + +#: classes/class.cms_teaser.php:581 +msgid "Sourcecategory" +msgstr "Quellkategorie" + +#: classes/class.cms_teaser.php:582 +msgid "Number of Articles" +msgstr "Anzahl der Artikel" + +#: classes/class.cms_teaser.php:583 classes/class.cms_filelist.php:724 +msgid "General Settings" +msgstr "Allgemeine Einstellungen" + +#: classes/class.cms_teaser.php:584 +msgid "Teaser Style" +msgstr "Teaser Darstellung" + +#: classes/class.cms_teaser.php:585 +msgid "Advanced Teaser Settings" +msgstr "Erweiterte Teaser Einstellungen" + +#: classes/class.cms_teaser.php:586 +msgid "Teaser Filter" +msgstr "Teaser Filter" + +#: classes/class.cms_teaser.php:587 +msgid "Teaser Sort" +msgstr "Teaser Sortierung" + +#: classes/class.cms_teaser.php:589 +msgid "Source Headline" +msgstr "Quelle Überschrift" + +#: classes/class.cms_teaser.php:590 +msgid "Source Settings" +msgstr "Quelleinstellungen" + +#: classes/class.cms_teaser.php:591 +msgid "Source Text" +msgstr "Quelle Text" + +#: classes/class.cms_teaser.php:592 +msgid "Source Image" +msgstr "Quelle Bild" + +#: classes/class.cms_teaser.php:593 +msgid "Source Date" +msgstr "Quelle Datum" + +#: classes/class.cms_teaser.php:598 classes/class.cms_filelist.php:720 +msgid "General" +msgstr "Allgemein" + +#: classes/class.cms_teaser.php:599 +msgid "Advanced" +msgstr "Erweitert" + +#: classes/class.cms_teaser.php:600 classes/class.cms_filelist.php:721 +msgid "Manual" +msgstr "Manuell" + +#: classes/class.cms_teaser.php:601 +msgid "Included Articles" +msgstr "Eingebundene Artikel" + +#: classes/class.cms_teaser.php:602 +msgid "Add Article" +msgstr "Artikel hinzufügen" + +#: classes/class.cms_teaser.php:603 +msgid "Manual Teaser Settings" +msgstr "Manuelle Teaser Einstellungen" + +#: classes/class.cms_teaser.php:604 +msgid "Manual Teaser" +msgstr "Manueller Teaser" + +#: classes/class.cms_teaser.php:607 +msgid "Size Settings" +msgstr "Größeneinstellungen" + +#: classes/class.cms_teaser.php:608 +msgid "Characterlength" +msgstr "Zeichenanzahl" + +#: classes/class.cms_teaser.php:609 +msgid "Imagewidth" +msgstr "Bildbreite" + +#: classes/class.cms_teaser.php:610 +msgid "Imageheight" +msgstr "Bildhöhe" + +#: classes/class.cms_teaser.php:611 +msgid "Image Scale" +msgstr "Bildskalierung" + +#: classes/class.cms_teaser.php:648 +msgid "Add" +msgstr "Hinzufügen" + +#: classes/class.ajax.php:111 classes/class.ajax.php:135 +#: classes/class.ajax.php:185 +msgid "No data found!" +msgstr "Keine Daten gefunden!" + +#: classes/class.ajax.php:160 +msgid "idcat" +msgstr "idcat" + +#: classes/class.ajax.php:161 classes/class.ajax.php:178 +msgid "idlang" +msgstr "idlang" + +#: classes/class.ajax.php:177 +msgid "idart" +msgstr "idart" + +#: classes/class.cms_date.php:212 +msgid "Please Choose Format" +msgstr "Format Auswählen" + +#: classes/datatypes/class.datatype.datetime.php:165 +msgid "Saturday" +msgstr "Samstag" + +#: classes/class.version.php:199 +#, php-format +msgid "Alternative path %s does not exist. Version was saved in frondendpath." +msgstr "" +"Der alternative Pfad %s existiert nicht. Die Verison wurde im Frontendpfad " +"gespeichert." + +#: classes/class.version.php:538 +msgid "Clear layout history" +msgstr "Layouthistorie löschen" + +#: classes/class.version.php:539 +msgid "Do you really want to clear layout history?" +msgstr "Möchten Sie wirklich die Layouthistorie löschen?" + +#: classes/class.version.php:539 +msgid "Note: This only affects the current layout." +msgstr "Hinweis: Dies betrifft nur das aktuelle Layout." + +#: classes/class.version.php:542 +msgid "Clear module history" +msgstr "Modulhistorie löschen" + +#: classes/class.version.php:543 +msgid "Do you really want to clear module history?" +msgstr "Möchte Sie wirklich die Modulhistorie löschen?" + +#: classes/class.version.php:543 +msgid "Note: This only affects the current module." +msgstr "Hinweis: Dies betrifft nur das aktuelle Modul." + +#: classes/class.version.php:546 +msgid "Clear style history" +msgstr "Stylehistorie löschen" + +#: classes/class.version.php:547 +msgid "Do you really want to clear style history?" +msgstr "Möchten Sie wirklich die Stylehistorie löschen?" + +#: classes/class.version.php:547 +msgid "Note: This only affects the current style." +msgstr "Hinweis: Dies betrifft nur das aktuelle Style." + +#: classes/class.version.php:550 +msgid "Clear Java-Script history" +msgstr "Java-Script Historie löschen" + +#: classes/class.version.php:551 +msgid "Do you really want to clear Java-Script history?" +msgstr "Möchten Sie wirklich die Java-Script Historie löschen?" + +#: classes/class.version.php:551 +msgid "Note: This only affects the current Java-Script." +msgstr "Hinweis: Dies betrifft nur das aktuelle Java-Script." + +#: classes/class.version.php:554 +msgid "Clear HTML-Template history" +msgstr "HTML-Template Historie löschen" + +#: classes/class.version.php:555 +msgid "Do you really want to clear HTML-Template history?" +msgstr "Möchten Sie wirklich die HTML-Template Historie löschen?" + +#: classes/class.version.php:555 +msgid "Note: This only the affects current HTML-Template." +msgstr "Hinweis: Dies betrifft nur das aktuelle HTML-Template." + +#: classes/class.version.php:558 +msgid "Clear history" +msgstr "Stylehistorie löschen" + +#: classes/class.version.php:559 +msgid "Do you really want to clear history?" +msgstr "Möchten Sie wirklich die Stylehistorie löschen?" + +#: classes/class.version.php:559 +msgid "Note: This only affects the current history." +msgstr "Hinweis: Dies betrifft nur die aktuelle Historie." + +#: classes/class.conuser.php:842 classes/class.conuser.php:867 +#, php-format +msgid "" +"Please use at least %d lower and upper case characters in your password!" +msgstr "" +"Bitte benutzen Sie mindestens %d Klein- und Groß-Buchstaben in Ihrem " +"Passwort!" + +#: classes/class.conuser.php:847 +#, php-format +msgid "Please use at least %d numbers in your password!" +msgstr "Bitte benutzen Sie mindestens %d Zahlen in Ihrem Passwort!" + +#: classes/class.conuser.php:852 +#, php-format +msgid "Please use at least %d symbols in your password!" +msgstr "Bitte benutzen Sie mindestens %d Sonderzeichen in Ihrem Passwort!" + +#: classes/class.conuser.php:857 +#, php-format +msgid "Password is too short! Please use at least %d signs." +msgstr "Ihr Passwort ist zu kurz! Bitte benutzen Sie mindestens %d Zeichen." + +#: classes/class.conuser.php:863 +msgid "Password does not contain enough different characters." +msgstr "Ihr Passwort beinhaltet nicht genug unterschiedliche Zeichen." + +#: classes/class.conuser.php:872 +msgid "Please choose a more secure password!" +msgstr "" +"Ihr Passwort ist nicht sicher genug. Bitte wählen Sie ein sichereres " +"Passwort!" + +#: classes/class.update.notifier.php:422 classes/class.update.notifier.php:427 +msgid "Unable to check for new updates!" +msgstr "Update-Überprüfung kann nicht durchgeführt werden!" + +#: classes/class.update.notifier.php:422 +msgid "Could not handle server response!" +msgstr "Server-Antwort konnte nicht verarbeitet werden!" + +#: classes/class.update.notifier.php:427 +msgid "Could not determine vendor version!" +msgstr "Hersteller-Version konnte nicht gelesen werden!" + +#: classes/class.update.notifier.php:540 +msgid "Unable to check for updates!" +msgstr "Es kann nicht auf Updates geprüft werden" + +#: classes/class.update.notifier.php:541 +#, fuzzy, php-format +msgid "Connection to %s failed!" +msgstr "Verbindung zu %s fehlgeschlagen!" + +#: classes/class.update.notifier.php:646 +msgid "Disable update notification" +msgstr "Update-Nachrichten deaktivieren" + +#: classes/class.update.notifier.php:648 classes/class.update.notifier.php:660 +msgid "Disable notification" +msgstr "Benachrichtigung deaktivieren" + +#: classes/class.update.notifier.php:651 +msgid "Enable update notification (recommended)" +msgstr "Update-Nachrichten aktivieren (empfohlen)" + +#: classes/class.update.notifier.php:653 classes/class.update.notifier.php:667 +msgid "Enable notification" +msgstr "Benachrichtigung aktivieren" + +#: classes/class.update.notifier.php:658 +msgid "Disable RSS notification" +msgstr "RSS-Nachrichten deaktivieren" + +#: classes/class.update.notifier.php:665 +msgid "Enable RSS notification (recommended)" +msgstr "RSS-Nachrichten aktivieren (empfohlen)" + +#: classes/class.update.notifier.php:669 +msgid "RSS notification is disabled" +msgstr "RSS-Nachrichten sind deaktiviert" + +#: classes/class.update.notifier.php:718 +msgid "read more" +msgstr "mehr lesen" + +#: classes/class.update.notifier.php:728 classes/class.update.notifier.php:737 +msgid "No RSS content available" +msgstr "Keine RSS-Inhalte verfügbar" + +#: classes/class.update.notifier.php:735 classes/class.update.notifier.php:753 +msgid "" +"Your webserver does not have write permissions for the directory /contenido/" +"cache/!" +msgstr "" +"Ihr Webserver hat keine Schreibberechtigungen für das Verzeichnis /" +"contenido/cache/!" + +#: classes/class.update.notifier.php:756 +msgid "" +"Update notification is disabled! For actual update information, please " +"activate." +msgstr "" +"Die Update-Benachrichtigung ist deaktiviert! Für aktuelle Update-" +"Nachrichten, bitte aktivieren." + +#: classes/class.update.notifier.php:761 +#, fuzzy +msgid "You have an unknown or unsupported version of ConLite!" +msgstr "" +"Sie haben eine unbekannte oder nicht unterstützte Version von ConLite!" + +#: classes/class.update.notifier.php:764 +#, fuzzy, php-format +msgid "" +"Your version of ConLite is deprecated and not longer supported for any " +"updates. Please update to a higher version!
    Download now!" +msgstr "" +"Ihre Version von ConLite wird nicht länger mit Updates gepflegt. Bitte " +"aktualisieren Sie auf eine höhere Version!
    Jetzt herunterladen!" + +#: classes/class.update.notifier.php:768 +#, fuzzy, php-format +msgid "" +"A new version of ConLite is available!
    Download %s now!" +msgstr "" +"Eine neue Version von ConLite ist verfügbar!
    %s jetzt herunterladen!" + +#: classes/class.update.notifier.php:771 +#, fuzzy, php-format +msgid "" +"It seems to be that your version string was manipulated. ConLite %s does not " +"exist!" +msgstr "" +"Es scheint so als wenn der ConLite Versionsstring manipuliert wurde. ConLite " +"%s gibt es nicht!" + +#: classes/class.update.notifier.php:774 +#, fuzzy +msgid "Your version of ConLite is up to date!" +msgstr "Ihre Version von ConLite ist aktuell!" + +#: classes/template/class.template.php:332 +msgid "\"" +msgstr "" + +#: classes/contenido/class.layout.php:179 +msgid "" +"Layout uses LayFromFile. Editing and Saving may not be possible in backend." +msgstr "" +"Das Layout liegt im Dateisystem. Das Bearbeiten und Speichern ist im Backend " +"nicht möglich." + +#: classes/contenido/class.client.php:97 classes/class.client.php:131 +msgid "No client" +msgstr "Kein Mandant" + +#: classes/contenido/class.module.php:916 +msgid "" +"Using old CamelCase for name of modulefolder. You may lowercase the name for " +"modulefolder" +msgstr "" +"Using old CamelCase for name of modulefolder. You may lowercase the name for " +"modulefolder" + +#: classes/contenido/class.module.php:919 +msgid "" +"Module uses Output- and/or InputFromFile. Editing and Saving may not be " +"possible in backend." +msgstr "" +"Das Modul liegt im Dateisystem. Das Bearbeiten und Speichern ist im Backend " +"nicht möglich." + +#: classes/class.todo.php:101 +msgid "New" +msgstr "Neu" + +#: classes/class.todo.php:102 +msgid "In progress" +msgstr "In Bearbeitung" + +#: classes/class.todo.php:103 +msgid "Done" +msgstr "Erledigt" + +#: classes/class.todo.php:104 +msgid "Waiting for action" +msgstr "Warte auf Aktion" + +#: classes/class.todo.php:105 +msgid "Deferred" +msgstr "Aufgeschoben" + +#: classes/class.todo.php:113 +msgid "Low" +msgstr "Niedrig" + +#: classes/class.todo.php:114 +msgid "Medium" +msgstr "Mittel" + +#: classes/class.todo.php:115 +msgid "High" +msgstr "Hoch" + +#: classes/class.todo.php:116 +msgid "Immediately" +msgstr "Sofort" + +#: classes/class.navigation.php:435 +msgid "-- No Language available --" +msgstr "-- Keine Sprache verfügbar --" + +#: classes/class.note.php:331 classes/class.note.php:334 +msgid "View notes / add note" +msgstr "Notizen anzeigen / hinzufügen" + +#: classes/class.inuse.php:242 +msgid "Click here if you want to override the lock" +msgstr "Hier klicken, um die Sperre zu übergehen" + +#: classes/class.inuse.php:246 +msgid "Do you really want to override the lock?" +msgstr "Möchten Sie wirklich die Sperre übergehen?" + +#: classes/class.inuse.php:248 +msgid "Override lock" +msgstr "Sperre übergehen" + +#: classes/class.inuse.php:248 +msgid "Hide notification" +msgstr "Benachrichtigung ausblenden" + +#: classes/class.cms_filelist.php:413 +msgid "Default Style" +msgstr "Standarddarstellung" + +#: classes/class.cms_filelist.php:719 +msgid "Directories" +msgstr "Verzeichnisse" + +#: classes/class.cms_filelist.php:725 +msgid "Manual Settings" +msgstr "Manuelle Einstellungen" + +#: classes/class.cms_filelist.php:726 +msgid "Filter settings" +msgstr "Filter-Einstellungen" + +#: classes/class.cms_filelist.php:727 +msgid "File list settings" +msgstr "Dateilisteneinstellungen" + +#: classes/class.cms_filelist.php:728 +msgid "File list title" +msgstr "Dateilistentitel" + +#: classes/class.cms_filelist.php:729 +msgid "File size limit" +msgstr "Dateigrößenbeschränkung" + +#: classes/class.cms_filelist.php:730 +msgid "Creation date limit" +msgstr "Zeitraum des Erstellungsdatums" + +#: classes/class.cms_filelist.php:731 +msgid "Modify date limit" +msgstr "Zeitraum des Änderungsdatums" + +#: classes/class.cms_filelist.php:733 +msgid "File list style" +msgstr "Darstellungsart" + +#: classes/class.cms_filelist.php:734 +msgid "Source directory" +msgstr "Quellverzeichnis" + +#: classes/class.cms_filelist.php:735 +msgid "Include subdirectories?" +msgstr "Unterverzeichnisse berücksichtigen?" + +#: classes/class.cms_filelist.php:736 +msgid "Include meta data?" +msgstr "Meta-Daten laden?" + +#: classes/class.cms_filelist.php:737 +msgid "File list sort" +msgstr "Sortierungsart" + +#: classes/class.cms_filelist.php:739 +msgid "Displayed file extensions" +msgstr "Angezeigte Datei-Erweiterungen" + +#: classes/class.cms_filelist.php:740 +msgid "Ignore selection (use all)" +msgstr "Auswahl ignorieren (alle benutzen)" + +#: classes/class.cms_filelist.php:741 +msgid "Selection will be ignored!" +msgstr "Auswahl wird ignoriert!" + +#: classes/class.cms_filelist.php:742 +msgid "Select all entries" +msgstr "Alle Einträge selektieren" + +#: classes/class.cms_filelist.php:743 +msgid "Use manual file list?" +msgstr "Manuelle Dateiliste verwenden?" + +#: classes/class.cms_filelist.php:744 +msgid "Directory" +msgstr "Verzeichnis" + +#: classes/class.cms_filelist.php:746 +msgid "Files" +msgstr "Dateien" + +#: classes/class.cms_filelist.php:747 +msgid "Existing files" +msgstr "Ausgewählte Dateien" + +#: classes/class.cms_filelist.php:748 +msgid "Add file" +msgstr "Datei hinzufügen" + +#: classes/class.cms_filelist.php:749 +msgid "File count" +msgstr "Anzahl der Dateien" + +#: scripts/HTMLObj.js.php:248 scripts/langref.php:10 +msgid "Protect" +msgstr "Schützen" + +#: scripts/HTMLObj.js.php:251 scripts/langref.php:11 +msgid "Remove protection" +msgstr "Schutz entfernen" + +#: scripts/messageBox.js.php:78 scripts/langref.php:20 +msgid "Confirm" +msgstr "Bestätigen" + +#: scripts/messageBox.js.php:80 scripts/langref.php:22 +msgid "Close window" +msgstr "Fenster schliessen" + +#: scripts/rights.js.php:67 scripts/rights.js.php:70 scripts/langref.php:23 +#: scripts/iZoom.js.php:70 scripts/iZoom.js.php:73 +msgid "Click to close" +msgstr "Klicken zum Schliessen" + +#: scripts/langref.php:13 scripts/articleObject.js.php:248 +msgid "Overview cannot be displayed" +msgstr "Übersicht kann nicht angezeigt werden" + +#: scripts/langref.php:15 scripts/articleObject.js.php:274 +msgid "Article can't be displayed" +msgstr "Artikel kann nicht angezeigt werden" + +#: scripts/langref.php:16 scripts/articleObject.js.php:274 +#: scripts/articleObject.js.php:305 scripts/articleObject.js.php:335 +#: scripts/articleObject.js.php:360 scripts/articleObject.js.php:379 +msgid "No article was selected" +msgstr "Kein Artikel ausgewählt" + +#: scripts/langref.php:17 scripts/articleObject.js.php:305 +msgid "Template configuration can't be displayed" +msgstr "Template-Konfiguration kann nicht angezeigt werden" + +#: scripts/langref.php:18 scripts/articleObject.js.php:257 +#: scripts/articleObject.js.php:290 scripts/articleObject.js.php:319 +#: scripts/articleObject.js.php:335 +msgid "Editor can't be displayed" +msgstr "Editor kann nicht angezeigt werden" + +#: scripts/langref.php:19 scripts/articleObject.js.php:360 +msgid "Preview can't be displayed" +msgstr "Vorschau kann nicht angezeigt werden" + +#: scripts/langref.php:24 +msgid "Headline / HTML" +msgstr "Überschrift / HTML" + +#: scripts/langref.php:25 +msgid "Text / HTML" +msgstr "Text / HTML" + +#: scripts/langref.php:26 +msgid "Text / Standard" +msgstr "Text / Standard" + +#: scripts/langref.php:27 +msgid "Picture" +msgstr "Bild" + +#: scripts/langref.php:29 +msgid "Description / Standard" +msgstr "Beschreibung / Standard" + +#: scripts/langref.php:30 +msgid "Flash Movie" +msgstr "Flash-Film" + +#: scripts/langref.php:32 +msgid "Frame" +msgstr "Frame" + +#: scripts/articleObject.js.php:257 scripts/articleObject.js.php:290 +#: scripts/articleObject.js.php:319 +msgid "Can't edit articles in foreign languages." +msgstr "" +"Artikel ist in nicht-aktiver bzw. nicht synchronisierter Sprache nicht " +"bearbeitbar." + +#: scripts/articleObject.js.php:379 +msgid "Tab can't be displayed" +msgstr "Reiter kann nicht angezeigt werden" + +#~ msgid "No" +#~ msgstr "Nein" + +#~ msgid "Yes" +#~ msgstr "Ja" + +#~ msgid "Generate XHTML" +#~ msgstr "XHTML erzeugen" + +#~ msgid "Newsletter: %s" +#~ msgstr "Newsletter: %s" + +#~ msgid "" +#~ "The html newsletter article has been deleted (idart: %s), the html " +#~ "message is lost" +#~ msgstr "" +#~ "Der HTML-Newsletter-Artikel wurde gelöscht (idart: %s), die HTML-" +#~ "Nachricht kann nicht wiederhergestellt werden" + +#~ msgid "" +#~ "The html newsletter template article has been deleted, it has been " +#~ "restored using the html message article of this newsletter" +#~ msgstr "" +#~ "Der HTML-Newsletter-Template-Artikel wurde gelöscht; er wurde aus " +#~ "dem aktuellen HTML-Newsletter-Artikel wiederhergestellt" + +#~ msgid "%s (Template restored)" +#~ msgstr "%s (Template wiederhergestellt)" + +#~ msgid "Edit newsletter message (%s)" +#~ msgstr "Newsletter-Nachricht bearbeiten (%s)" + +#~ msgid "Tag information" +#~ msgstr "Tag-Information" + +#~ msgid "Special message tags (will be replaced when sending)" +#~ msgstr "Spezielle Tags (werden beim Senden ersetzt)" + +#~ msgid "Name of the recipient" +#~ msgstr "Name des Empfägers" + +#~ msgid "Date, when the mail has been sent" +#~ msgstr "Datum des E-Mail Versands" + +#~ msgid "Time, when the mail has been sent" +#~ msgstr "Zeit des e-Mail Versand" + +#~ msgid "Number of recipients" +#~ msgstr "Anzahl der Empfänger" + +#~ msgid "Link to unsubscribe" +#~ msgstr "Link zum Abbestellen des Newsletters" + +#~ msgid "Link to pause the subscription" +#~ msgstr "Link zum Pausieren des Newsletterempfangs" + +#~ msgid "Link to resume the subscription" +#~ msgstr "Link, um den Newsletterempfang wieder aufzunehmen" + +#~ msgid "" +#~ "Special message tags (will be replaced when sending, {..} = optional)" +#~ msgstr "" +#~ "Spezielle Nachrichten-Tags (werden beim Senden ersetzt, {...} = optional)" + +#~ msgid "Link text" +#~ msgstr "Link-Text" + +#~ msgid "Additional message tags from recipients plugins:" +#~ msgstr "Zusätzliche Tags aus Empfänger-Plugins:" + +#~ msgid "-- none --" +#~ msgstr "-- Kein(e) --" + +#~ msgid "HTML Template" +#~ msgstr "HTML-Template" + +#~ msgid "" +#~ "Note, that changing the template discards the current html message content" +#~ msgstr "" +#~ "Hinweis: Eine Änderung des Templates verwirft die aktuelle HTML-" +#~ "Nachricht" + +#~ msgid "HTML Message" +#~ msgstr "HTML-Nachricht" + +#~ msgid "" +#~ "Newsletter type has been set to HTML/text, please remember to select an " +#~ "html template" +#~ msgstr "" +#~ "Dieser Newsletter ist ein HTML- und Text-Newsletter; bitte denken Sie " +#~ "daran, ein HTML-Template auszuwählen" + +#~ msgid "Please choose a template first" +#~ msgstr "Bitte zuerst HTML-Template wählen" + +#~ msgid "Text Message" +#~ msgstr "Text-Nachricht" + +#~ msgid "HTML newsletter template changed" +#~ msgstr "Änderung des HTML-Newsletter-Templates" + +#~ msgid "" +#~ "HTML template has been changed. Do you like to save now to apply changes?" +#~ "

    Note, that existing HTML newsletter content will get lost!" +#~ "" +#~ msgstr "" +#~ "Das HTML-Template wurde geändert. Möchten Sie jetzt speichern, " +#~ "um die Änderungen anzuwenden?

    Bitte beachten Sie, dass " +#~ "der ggf. vorhandene Inhalt des HTML-Newsletters verloren geht!" + +#~ msgid "-- new newsletter --" +#~ msgstr "-- Neuer Newsletter --" + +#~ msgid "Newsletter dispatch job has been added for this newsletter" +#~ msgstr "Versand-Job für diesen Newsletter wurde erzeugt" + +#~ msgid "" +#~ "Newsletter dispatch job has been not been added! Please check newsletter " +#~ "details" +#~ msgstr "" +#~ "Versand-Job für diesen Newsletter wurde nicht erzeugt! Bitte die " +#~ "Angaben überprüfen" + +#~ msgid "Test newsletter has been sent to:" +#~ msgstr "Test-Newsletter wurde an folgende Empfänger gesendet:" + +#~ msgid "Test newsletter has not been sent (partly or completely):" +#~ msgstr "Der Newsletter wurde nicht gesendet (im Ganzen oder in Teilen):" + +#~ msgid "Successful:" +#~ msgstr "Erfolgreich:" + +#~ msgid "Error messages:" +#~ msgstr "Fehlermeldungen:" + +#~ msgid "Could not set new newsletter name: name already exists" +#~ msgstr "" +#~ "Name konnte nicht geändert werden: Ein Newsletter gleichen Namens " +#~ "existiert bereits." + +#~ msgid "" +#~ "'Send to recipients in selected groups' has been selected, but no group " +#~ "has been specified. Selection has been set to 'Send to all recipients'" +#~ msgstr "" +#~ "'Newsletter an die Mitglieder der ausgewählten Gruppe(n) senden' " +#~ "wurde aktiviert, aber es wurde keine Gruppe ausgewählt. Die Option " +#~ "wurde auf 'An alle Empfänger senden' zurückgesetzt" + +#~ msgid "Text only" +#~ msgstr "Nur Text" + +#~ msgid "HTML and text" +#~ msgstr "HTML und Text" + +#~ msgid "From (E-Mail)" +#~ msgstr "Absender (E-Mail)" + +#~ msgid "From (Name)" +#~ msgstr "Absender (Name)" + +#~ msgid "optional" +#~ msgstr "Optional" + +#~ msgid "Note: Hold to select multiple items." +#~ msgstr "" +#~ "Hinweis: Drücken und halten Sie die Taste , um mehrere " +#~ "Einträge zu selektieren." + +#~ msgid "Send newsletter to all recipients" +#~ msgstr "Newsletter an alle Empfänger senden" + +#~ msgid "Send newsletter to the members of the default group" +#~ msgstr "Newsletter an Mitglieder der Standardgruppe senden" + +#~ msgid "Send newsletter to the members of the selected group(s):" +#~ msgstr "" +#~ "Newsletter an die Mitglieder der ausgewählten Gruppe(n) senden:" + +#~ msgid "Option has to be enabled as client setting - see techref for details" +#~ msgstr "" +#~ "Option muss über eine Systemeinstellung aktiviert werden - siehe " +#~ "techref für details" + +#~ msgid "Note: Set to 0 to send chunks manually." +#~ msgstr "Hinweis: 0 auswählen um Blöcke manuell zu versenden" + +#~ msgid "Welcome-Newsletter" +#~ msgstr "Willkommen-Newsletter" + +#~ msgid "Use cronjob" +#~ msgstr "Cronjob verwenden" + +#~ msgid "Send in blocks:" +#~ msgstr "In Blöcken senden:" + +#~ msgid "Recipients per block:" +#~ msgstr "Empfänger pro Block:" + +#~ msgid "Delay between blocks:" +#~ msgstr "Pause zwischen Blöcken:" + +#~ msgid "sec." +#~ msgstr "Sek." + +#~ msgid "Save option settings as default" +#~ msgstr "Einstellungen als Standard speichern" + +#~ msgid "" +#~ "Do you really want to delete the following newsletter dispatch job:
    " +#~ msgstr "" +#~ "Möchten Sie wirklich den folgenden Newsletter Versand-Job lö" +#~ "schen:
    " + +#~ msgid "Do you really want to run the following job:
    " +#~ msgstr "Möchten Sie wirklich den folgenden Job ausführen:
    " + +#~ msgid "Confirmed" +#~ msgstr "Bestätigt" + +#~ msgid "Deactivated" +#~ msgstr "Deaktiviert" + +#~ msgid "Member list options" +#~ msgstr "Anzeigeoptionen (Mitglieder)" + +#~ msgid "No recipients are added to this group yet" +#~ msgstr "Die Gruppe enthält z.Z. keine Empfänger" + +#~ msgid "No recipients found" +#~ msgstr "Keine Empfänger gefunden" + +#~ msgid "Member navigation" +#~ msgstr "Navigation (Mitglieder)" + +#~ msgid "Recipients in group" +#~ msgstr "Empfänger in der Gruppe" + +#~ msgid "Outsider list options" +#~ msgstr "Anzeigeoptionen (Nicht-Mitglieder)" + +#~ msgid "Outsider navigation" +#~ msgstr "Navigation (Nicht-Mitglieder)" + +#~ msgid "Add recipients" +#~ msgstr "Empfänger hinzufügen" + +#~ msgid "Note: Hold <Ctrl> to
    select multiple items." +#~ msgstr "" +#~ "Hinweis: Halten Sie <Ctrl> gedrückt, um
    mehrere Elemente " +#~ "auszuwählen." + +#~ msgid "Can't clear error log : Access is denied!" +#~ msgstr "Fehlerlog konnte nicht geleert werden: Zugriff verweigert!" + +#~ msgid "install error log successfully cleared" +#~ msgstr "Installation-Errorlog erfolgreich geleert" + +#~ msgid "Do you really want to delete the following newsletter:
    " +#~ msgstr "" +#~ "Sind Sie sicher, dass Sie den folgenden Newsletter löschen mö" +#~ "chten:
    " + +#~ msgid "Send test newsletter" +#~ msgstr "Test-Newsletter versenden" + +#~ msgid "" +#~ "Send test newsletter (disabled, check newsletter sender e-mail address " +#~ "and handler article selection)" +#~ msgstr "" +#~ "Test-Newsletter versenden (deaktiviert, Absender-Adresse und Handler-" +#~ "Artikel überprüfen)" + +#~ msgid "" +#~ "Add newsletter dispatch job (disabled, check newsletter sender e-mail " +#~ "address and handler article selection)" +#~ msgstr "" +#~ "Newsletter-Versand-Job erzeugen (deaktiviert, Absender-Adresse und " +#~ "Handler-Artikel überprüfen)" + +#~ msgid "Recipient group: %s" +#~ msgstr "Empfänger-Gruppe: %s" + +#~ msgid "Do you really want to send the newsletter to:
    %s" +#~ msgstr "" +#~ "Möchten Sie wirklich den Newsletter an den angegebenen Empfä" +#~ "nger versenden:
    %s" + +#~ msgid "Report:" +#~ msgstr "Bericht:" + +#~ msgid "Sending newsletter ... (chunk %s of %s, recipients: %s, sent: %s)" +#~ msgstr "" +#~ "Sende Newsletter ... (Block %s von %s, Empfänger: %s, gesendet: %s)" + +#~ msgid "Stop sending" +#~ msgstr "Senden abbrechen" + +#~ msgid "Send next chunk" +#~ msgstr "Nächster Block senden" + +#~ msgid "The newsletter has been sent to %s recipients" +#~ msgstr "Der Newsletter wurde an %s Empfänger gesendet" + +#~ msgid "-All-" +#~ msgstr "-Alle-" + +#~ msgid "Sent" +#~ msgstr "Gesendet" + +#~ msgid "Waiting for sending" +#~ msgstr "Warte auf Versand" + +#~ msgid "Sending" +#~ msgstr "Sende" + +#~ msgid "Successful" +#~ msgstr "Erfolgreich" + +#~ msgid "Error: %s" +#~ msgstr "Fehler: %s" + +#~ msgid "Newsletter Dispatch Job" +#~ msgstr "Newsletter Versand-Job" + +#~ msgid "Pending" +#~ msgstr "Bereit" + +#~ msgid "Sending (started: %s)" +#~ msgstr "Sende (gestartet: %s)" + +#~ msgid "Finished (started: %s, finished: %s)" +#~ msgstr "Abgeschlossen (gestartet: %s, abgeschlossen: %s)" + +#~ msgid "Planned: %s, Send: %s" +#~ msgstr "Geplant: %s, Gesendet: %s" + +#~ msgid "From" +#~ msgstr "Absender" + +#~ msgid "Send newsletter to single recipient:" +#~ msgstr "Newsletter an einzelnen Empfänger senden:" + +#~ msgid "Use cronjob: Enabled" +#~ msgstr "Cronjob: Aktiviert" + +#~ msgid "Use cronjob: Not enabled" +#~ msgstr "Cronjob: Nicht aktiviert" + +#~ msgid "Dispatch: Enabled (block size: %s, delay: %s sec.)" +#~ msgstr "" +#~ "In Blöcken versenden: Aktiviert (Blockgröße: %s, Pause: " +#~ "%s Sek.)" + +#~ msgid "Dispatch: Disabled" +#~ msgstr "Block-Sendung: Deaktiviert" + +#~ msgid "" +#~ "%d recipients, with no or incompatible key has been updated. Deactivate " +#~ "update function." +#~ msgstr "" +#~ "%d Empfänger ohne bzw. mit inkompatiblen Schlüssel wurden " +#~ "aktualisiert. Deaktivieren Sie die Update-Funktion." + +#~ msgid "Do you really want to delete the following recipient:
    " +#~ msgstr "" +#~ "Möchten Sie wirklich den folgenden Empfänger löschen:
    " + +#~ msgid "Mail" +#~ msgstr "Mail" + +#~ msgid "Confirmed Date" +#~ msgstr "Bestätigungsdatum" + +#~ msgid "Message type" +#~ msgstr "Nachrichtentyp" + +#~ msgid "Group" +#~ msgstr "Gruppe" + +#~ msgid "Given column header '%s' unknown, column ignored" +#~ msgstr "Gegebener Spaltenname '%s' unbekannt, Spalte wird ignoriert" + +#~ msgid "Mandatory column '%s' wasn't found, import stopped" +#~ msgstr "Benötigte Spalte '%s' nicht gefunden, Import gestoppt" + +#~ msgid "Item with empty mail address found, item ignored (name: %s, row: %s)" +#~ msgstr "" +#~ "Eintrag mit fehlender Emailadresse gefunden, Eintrag wird ignoriert " +#~ "(Name: %s, Reihe: %s)" + +#~ msgid "Mail address '%s' is invalid, item ignored (row: %s)" +#~ msgstr "Emailadresse '%s' ungültig, Eintrag ignoriert (Reihe: %s)" + +#~ msgid "" +#~ "Recipient with mail address '%s' already exists, item skipped (row: %s)" +#~ msgstr "" +#~ "Empfänger mit Emailadresse '%s' bereits vorhanden, Eintrag ü" +#~ "bersprungen (Reihe: %s)" + +#~ msgid "yes" +#~ msgstr "ja" + +#~ msgid "" +#~ "%d recipients added, %d recipients skipped (email already exists) and %d " +#~ "invalid recipients/e-mail adresses ignored. Invalid recipients are shown " +#~ "(if any)." +#~ msgstr "" +#~ "%d Empfänger ergänzt, %d Empfänger übergangen " +#~ "(Empfänger-E-Mail-Adresse wird bereits verwendet) und %d ungü" +#~ "tige Emfänger/E-Mail-Adressen ignoriert. Ggf. ungültige " +#~ "Empfänger werden angezeigt." + +#~ msgid "Tab" +#~ msgstr "Tab" + +#~ msgid "Semicolon" +#~ msgstr "Semikolon" + +#~ msgid "Delimiter" +#~ msgstr "Trennzeichen" + +#~ msgid "Import information" +#~ msgstr "Import Hinweise" + +#~ msgid "Specify colum types:" +#~ msgstr "Spaltentypen definieren:" + +#~ msgid "" +#~ "
    The first line must contain the column names; this specifies the " +#~ "column order.
    <column name>[delimiter]<column name>..." +#~ msgstr "" +#~ "
    Die erste Zeile muss die Spaltennamen enthalten; dies definiert die " +#~ "Spaltenreihenfolge.
    <Spaltenname>[Separator]<" +#~ "Spaltenname>..." + +#~ msgid "Data structure:" +#~ msgstr "Datenstruktur:" + +#~ msgid "" +#~ "The recipients have to be entered using the following format:
    <" +#~ "data>[Delimiter]<data>... - each recipient in a new line." +#~ msgstr "" +#~ "Die Empfänger müssen nach dem folgenden Format eingegeben " +#~ "werden:
    <data>[Separator]<data>... - Jeder Empfä" +#~ "nger in einer neuen Zeile." + +#~ msgid "Example:" +#~ msgstr "Beispiel:" + +#~ msgid "
    name;mail;confirmed
    Smith;jon.smith@example.org;1" +#~ msgstr "" +#~ "

    name;mail;bestätigt
    Smith;jon.smith@example.org;1" + +#~ msgid "The following column names will be recognized:" +#~ msgstr "Die folgenden Spaltennamen können verwendet werden:" + +#~ msgid "Contenido: " +#~ msgstr "ConLite: " + +#~ msgid "View" +#~ msgstr "Ansehen" + +#~ msgid "Details" +#~ msgstr "Details" + +#~ msgid "Edit Message" +#~ msgstr "Nachricht bearbeiten" + +#~ msgid "-- new recipient --" +#~ msgstr "-- Neuer Empfänger --" + +#~ msgid "" +#~ "%1backslashdollard recipients, which hasn't been confirmed since more " +#~ "than %2backslashdollard days has been removed." +#~ msgstr "" +#~ "%1backslashdollard Empfänger, die ihre E-Mail-Adresse seit mehr als " +#~ "%2backslashdollard Tagen nicht bestätigt haben, wurden gelöscht." + +#~ msgid "" +#~ "There are no recipients, which hasn't been confirmed since more than " +#~ "%2backslashdollard days has been removed." +#~ msgstr "" +#~ "Es gibt keine Empfänger, die ihre E-Mail-Adresse seit mehr als " +#~ "%2backslashdollard Tagen nicht bestätigt haben." + +#~ msgid "Please specify a valid e-mail address" +#~ msgstr "Bitte geben Sie eine gültige E-Mail-Adresse an" + +#~ msgid "" +#~ "Could not set new e-mail adress: Other recipient with same e-mail address " +#~ "already exists" +#~ msgstr "" +#~ "E-Mail-Adresse konnte nicht geändert werden: Ein Empfänger mit " +#~ "der gleichen E-Mail-Adresse existiert bereits" + +#~ msgid "Recipient is not member of any group" +#~ msgstr "Empfänger ist kein Mitglied einer Gruppe" + +#~ msgid "Associated Groups" +#~ msgstr "Mitglied von" + +#~ msgid "Dispatch" +#~ msgstr "Versand" + +#~ msgid "Recipient groups" +#~ msgstr "Empfänger-Gruppen" + +#~ msgid "Please select" +#~ msgstr "Bitte wählen" + +#~ msgid "My mail address" +#~ msgstr "Meine E-Mail-Adresse" + +#~ msgid "Enable HTML Newsletter" +#~ msgstr "HTML-Newsletter aktivieren" + +#~ msgid "HTML Template Category:" +#~ msgstr "Kategorie (HTML-Template):" + +#~ msgid "HTML Newsletter Category:" +#~ msgstr "Kategorie (HTML-Newsletter):" + +#~ msgid "Send test destination:" +#~ msgstr "Test-Empfänger:" + +#~ msgid "" +#~ "Do you really want to remove recipients, that have not been confirmed " +#~ "since %s days and over?" +#~ msgstr "" +#~ "Wollen Sie wirklich alle Empfänger, die ihre E-Mail-Adresse seit " +#~ "mehr als %s Tagen nicht bestätigt haben, löschen?" + +#~ msgid "Purge timeframe" +#~ msgstr "Zeitfenster" + +#~ msgid "days" +#~ msgstr "Tage" + +#~ msgid "-- All groups --" +#~ msgstr "-- Alle Gruppen --" + +#~ msgid "" +#~ "Do you really want to delete the following newsletter recipient group:
    " +#~ msgstr "" +#~ "Sind Sie sicher, dass Sie die folgende Gruppe löschen möchten:" +#~ "
    " + +#~ msgid "" +#~ "There was a problem getting the newsletter article using http. Error: %s " +#~ "(%s)" +#~ msgstr "" +#~ "Der HTML-Newsletter-Artikel konnte nicht eingelesen werden. Fehler: %s " +#~ "(%s)" + +#~ msgid "Newsletter to %s could not be sent: No html message available" +#~ msgstr "" +#~ "Newsletter an %s konnte nicht versendet werden: Keine HTML-Nachricht " +#~ "verügbar" + +#~ msgid "Newsletter to %s could not be sent: No valid e-mail address" +#~ msgstr "" +#~ "Newsletter an %s konnte nicht versendet werden: Keine gütige E-Mail-" +#~ "Adresse verfügbar" + +#~ msgid "Newsletter to %s could not be sent" +#~ msgstr "Newsletter an %s konnte nicht versendet werden" + +#~ msgid "Newsletter could not be sent: No html message available" +#~ msgstr "" +#~ "Newsletter konnte nicht versendet werden: Keine HTML-Nachricht verfü" +#~ "gbar" + +#~ msgid "" +#~ "Newsletter to %s could not be sent: Recipient has an incompatible or " +#~ "empty key" +#~ msgstr "" +#~ "Newsletter an %s konnte nicht versendet werden: Empfänger hat einen " +#~ "inkompatiblen oder leeren Schlüssel." + +#~ msgid "" +#~ "Newsletter to %s could not be sent: No valid e-mail address specified" +#~ msgstr "" +#~ "Newsletter an %s konnte nicht versendet werden: Keine gütige E-Mail " +#~ "Adresse angegeben" + +#~ msgid "No recipient with specified recipient/group id %s/%s found" +#~ msgstr "" +#~ "Keine Empfänger mit der angegebenen Empfänger-/Gruppen-ID %s/%s " +#~ "gefunden" + +#~ msgid "Provide address" +#~ msgstr "Adresse angeben" + +#~ msgid "Mailer not supported" +#~ msgstr "Mailer wird nicht unterstützt" + +#~ msgid "Execute" +#~ msgstr "Ausführen" + +#~ msgid "Instantiate" +#~ msgstr "Keine mail()-Instanz erzeugt" + +#~ msgid "From failed" +#~ msgstr "Fehler bei SMTP-Versand" + +#~ msgid "Recipients failed" +#~ msgstr "Fehlerhafte Empfänger" + +#~ msgid "Data not accepted" +#~ msgstr "Daten nicht akzeptiert" + +#~ msgid "Authenticate" +#~ msgstr "Authentifizierung" + +#~ msgid "Connect host" +#~ msgstr "Hostverbindung" + +#~ msgid "File access" +#~ msgstr "Dateizugriff" + +#~ msgid "File open" +#~ msgstr "Öffnen der Datei" + +#~ msgid "Endzeitpunkt wählen" +#~ msgstr "Endzeitpunkt wählen" + +#~ msgid "Startzeitpunkt wählen" +#~ msgstr "Startzeitpunkt wählen" + +#, fuzzy +#~ msgid "Please enter a category name" +#~ msgstr "Bitte geben Sie einen Kategorienamen ein." + +#~ msgid "Set category offline" +#~ msgstr "Kategorie offline setzen" + +#~ msgid "Set category online" +#~ msgstr "Kategorie online setzen" + +#~ msgid "One or more subcategories exist, unable to delete" +#~ msgstr "" +#~ "Mindestens eine Unterkategorie existiert, löschen nicht möglich" + +#~ msgid "Are you sure to delete the following category" +#~ msgstr "" +#~ "Sind Sie sicher, dass Sie die folgende Kategorie Löschen wollen" + +#~ msgid "Store content allocations" +#~ msgstr "Content Allocations speichern" + +#, fuzzy +#~ msgid "Content Allocation" +#~ msgstr "Content Allocations speichern" + +#~ msgid "There is no Content Allocation tree." +#~ msgstr "Es existiert kein Content Allocation Baum." + +#~ msgid "Remove all" +#~ msgstr "Alle entfernen" + +#~ msgid "Remove" +#~ msgstr "Entfernen" + +#~ msgid "New Category %s successfully stored!" +#~ msgstr "Neue Kategorie %s erfolgreich erstellt!" + +#~ msgid "Category %s successfully renamed!" +#~ msgstr "Kategorie %s erfolgreich umbenannt!" + +#~ msgid "Please enter a category name." +#~ msgstr "Bitte geben Sie einen Kategorienamen ein." + +#, fuzzy +#~ msgid "Access category" +#~ msgstr "Neue Kategorie" + +#~ msgid "Interns" +#~ msgstr "Interne Links" + +#~ msgid "Externs" +#~ msgstr "Externe Links" + +#~ msgid "Intern/extern Links" +#~ msgstr "Interne & externe Links" + +#~ msgid "Link analysis from " +#~ msgstr "Link Analyse von" + +#~ msgid "%Y-%m-%d" +#~ msgstr "%d.%m.%Y" + +#~ msgid "No errors were found." +#~ msgstr "Keine Einträge im Errorlog gefunden" + +#, fuzzy +#~ msgid "Linkerror" +#~ msgstr "Link" + +#, fuzzy +#~ msgid "Links to articles" +#~ msgstr "Link auf eine beliebige Datei" + +#, fuzzy +#~ msgid "Links to categories" +#~ msgstr "Alle Kategorien öffnen" + +#, fuzzy +#~ msgid "Links to documents and images" +#~ msgstr "Link zu einem Bild" + +#, fuzzy +#~ msgid "Wrong links" +#~ msgstr "Zeichenkettenliste" + +#, fuzzy +#~ msgid "Offline: article or category is offline." +#~ msgstr "Kategorie offline setzen" + +#~ msgid "No errors for this type." +#~ msgstr "Keine Einträge im Errorlog gefunden" + +#, fuzzy +#~ msgid "Entry" +#~ msgstr "Einträge" + +#, fuzzy +#~ msgid "Publish article" +#~ msgstr "Veröffentlichungsdatum" + +#, fuzzy +#~ msgid "Lock article" +#~ msgstr "Meine Artikel" + +#, fuzzy +#~ msgid "Move back to last editor" +#~ msgstr "Speichern und Editor schließen" + +#, fuzzy +#~ msgid "Reject article" +#~ msgstr "Artikel löschen" + +#, fuzzy +#~ msgid "Edit article content" +#~ msgstr "Artikel bearbeiten" + +#, fuzzy +#~ msgid "Revise article" +#~ msgstr "Artikel speichern" + +#, fuzzy +#~ msgid "Article doesn't exist" +#~ msgstr "Artikeleigenschaften" + +#, fuzzy +#~ msgid "Workflow notification" +#~ msgstr "E-Mail Benachrichtigung" + +#, fuzzy +#~ msgid "No item loaded" +#~ msgstr "nicht geladen" + +#, fuzzy +#~ msgid "Delete workflow" +#~ msgstr "Datei löschen" + +#, fuzzy +#~ msgid "Select workflow task" +#~ msgstr "Workflow Aufgaben anzeigen" + +#, fuzzy +#~ msgid "Show workflow" +#~ msgstr "Workflow Aufgaben anzeigen" + +#, fuzzy +#~ msgid "Create workflow" +#~ msgstr "Gruppe erzeugen" + +#, fuzzy +#~ msgid "Edit workflow" +#~ msgstr "Datei bearbeiten" + +#, fuzzy +#~ msgid "Process workflow step" +#~ msgstr "Workflow Aufgaben anzeigen" + +#~ msgid "Edit workflow step" +#~ msgstr "Workflow Schritt bearbeiten" + +#, fuzzy +#~ msgid "Move workflowstep down" +#~ msgstr "Eine Kategorie nach unten verschieben" + +#, fuzzy +#~ msgid "Save Workflowstep" +#~ msgstr "Notiz speichern" + +#, fuzzy +#~ msgid "Create workflowstep" +#~ msgstr "Gruppe erzeugen" + +#, fuzzy +#~ msgid "Delete workflowstep" +#~ msgstr "Datei löschen" + +#, fuzzy +#~ msgid "Create Workflowstepuser" +#~ msgstr "Frontendbenutzer erstellen" + +#~ msgid "Delete Workflowstepuser" +#~ msgstr "Frontendbenutzer löschen" + +#, fuzzy +#~ msgid "Associate workflow with category" +#~ msgstr "Artikel mit Kategorie" + +#~ msgid "Workflow Step" +#~ msgstr "Workflow Schritt" + +#~ msgid "Workflow Action" +#~ msgstr "Workflow Aktion" + +#~ msgid "Workflow Editor" +#~ msgstr "Workflow Editor" + +#, fuzzy +#~ msgid "Last status" +#~ msgstr "Letzte Seite" + +#, fuzzy +#~ msgid "Back to last editor" +#~ msgstr "Speichern und im Editor bleiben" + +#, fuzzy +#~ msgid "Rejected" +#~ msgstr "Weiterleitung" + +#, fuzzy +#~ msgid "Revised" +#~ msgstr "Entfernen" + +#, fuzzy +#~ msgid "Last" +#~ msgstr "Letzte Seite" + +#, fuzzy +#~ msgid "New Workflow" +#~ msgstr "Neues Fenster" + +#, fuzzy +#~ msgid "Create new workflow" +#~ msgstr "Neuen Baum anlegen" + +#, fuzzy +#~ msgid "Workflow name" +#~ msgstr "Gruppenname" + +#~ msgid "Do you really want to delete the following workflow:

    %s
    " +#~ msgstr "" +#~ "Möchten Sie die folgende Datei wirklich löschen:

    %s" + +#~ msgid "Add User" +#~ msgstr "Benutzer hinzufügen" + +#, fuzzy +#~ msgid "New Workflow Step" +#~ msgstr "Workflow Aufgaben anzeigen" + +#, fuzzy +#~ msgid "Seconds" +#~ msgstr "Semikolon" + +#~ msgid "Minutes" +#~ msgstr "Minuten" + +#~ msgid "Hours" +#~ msgstr "Stunden" + +#, fuzzy +#~ msgid "Days" +#~ msgstr "Tag(e)" + +#~ msgid "Weeks" +#~ msgstr "Wochen" + +#~ msgid "Months" +#~ msgstr "Monate" + +#, fuzzy +#~ msgid "Years" +#~ msgstr "Ja" + +#, fuzzy +#~ msgid "Move step up" +#~ msgstr "Eine Kategorie nach oben verschieben" + +#, fuzzy +#~ msgid "Move step down" +#~ msgstr "Eine Kategorie nach unten verschieben" + +#, fuzzy +#~ msgid "Delete step" +#~ msgstr "Benutzer löschen" + +#, fuzzy +#~ msgid "Create new step" +#~ msgstr "Neuen Baum anlegen" + +#, fuzzy +#~ msgid "Step name" +#~ msgstr "Host-Name" + +#, fuzzy +#~ msgid "Step description" +#~ msgstr "Layoutbeschreibung" + +#, fuzzy +#~ msgid "Assigned users" +#~ msgstr "Zugewiesen zu" + +#, fuzzy +#~ msgid "Move user up" +#~ msgstr "Eine Kategorie nach oben verschieben" + +#, fuzzy +#~ msgid "Move user down" +#~ msgstr "Eine Kategorie nach unten verschieben" + +#~ msgid "Notify this user via E-Mail" +#~ msgstr "Diesen Benutzer per Email erinnern" + +#~ msgid "Show users" +#~ msgstr "Aktueller Benutzer" + +#, fuzzy +#~ msgid "Workflow tasks" +#~ msgstr "Workflow Aufgaben anzeigen" + +#~ msgid "No (more) recipients found" +#~ msgstr "Keine (weiteren) Empfänger gefunden" + +#~ msgid "Sent successfully" +#~ msgstr "Erfolgreich versendet" + +#~ msgid "" +#~ "Newsletter to %s could not be sent (recipient has an incompatible or " +#~ "empty key)." +#~ msgstr "" +#~ "Newsletter an %s konnte nicht versendet werden: Empfänger hat einen " +#~ "inkompatiblen oder leeren Schlüssel" + +#~ msgid "Target" +#~ msgstr "Ziel" + +#~ msgid "Open in same window" +#~ msgstr "Im gleichen Fenster öffnen" + +#~ msgid "Colorpicker" +#~ msgstr "Farbauswahl" + +#~ msgid "Insert Link" +#~ msgstr "Link einfügen" + +#~ msgid "PDF" +#~ msgstr "PDF" + +#~ msgid "Media" +#~ msgstr "Medien" + +#~ msgid "Open in parent frame" +#~ msgstr "Im parent-Frame öffnen" + +#~ msgid "Open in top frame" +#~ msgstr "Im top-Frame öffnen" + +#~ msgid "Edit URL names" +#~ msgstr "URL-Namen bearbeiten" + +#~ msgid "Take over module history" +#~ msgstr "Modulhistorie übernehmen" + +#~ msgid "Filter users" +#~ msgstr "Benutzer filtern" + +#~ msgid "Delete frontenduser in frontendgroup" +#~ msgstr "Frontendbenutzer in Gruppe löschen" + +#~ msgid "The following users were added to this group" +#~ msgstr "Die folgenden Benutzer wurden dieser Gruppe hinzugefügt" + +#~ msgid "" +#~ "The following users are already existing in the group and where not added" +#~ msgstr "" +#~ "Die folgenden Benutzer existieren in dieser Gruppe bereits und wurden " +#~ "deshalb nicht hinzugefügt" + +#~ msgid "Group member" +#~ msgstr "Gruppenmitglied" + +#~ msgid "No users found" +#~ msgstr "Keine Benutzer gefunden" + +#~ msgid "Add group member" +#~ msgstr "Gruppenmitglied hinzufügen" + +#~ msgid "Choose user" +#~ msgstr "Benutzer wählen" + +#~ msgid "Display article link" +#~ msgstr "Artikellink anzeigen" + +#~ msgid "Syncronize from" +#~ msgstr "Synchronisieren von" + +#~ msgid "No users are added to this group yet" +#~ msgstr "Gruppe enthält noch keine Benutzer" + +#~ msgid "Users in Group" +#~ msgstr "Benutzer in der Gruppe" + +#~ msgid "Note: Hold ctrl to select multiple items." +#~ msgstr "" +#~ "Hinweis: Drücken und halten Sie die Taste \"STRG\", um mehrere " +#~ "Einträge zu selektieren." + +#~ msgid "Do you really want to create a new language?" +#~ msgstr "Möchten Sie wirklich eine neue Sprache erstellen?" + +#~ msgid "Layout is in use" +#~ msgstr "Layout wird benutzt" + +#~ msgid "Module history" +#~ msgstr "Modulhistorie" + +#~ msgid "Module data" +#~ msgstr "Moduldaten" + +#~ msgid "No history available" +#~ msgstr "Keine Modulhistorie vorhanden" + +#~ msgid "Module history disabled by system administrator" +#~ msgstr "Die Modulhistorie wurde vom Systemadministrator deaktiviert." + +#~ msgid "In use" +#~ msgstr "Wird benutzt" + +#~ msgid "Translate module \"%s\"" +#~ msgstr "Modul \"%s\" übersetzen" + +#~ msgid "Use JAVA Module Editor (experimental)" +#~ msgstr "JAVA-Moduleditor verwenden (experimentell)" + +#~ msgid "" +#~ "Insert recipients using this format:
    <data>[Delimiter]<" +#~ "data>... - each recipient in a new line." +#~ msgstr "" +#~ "Empfänger im folgenden Format eingeben:
    <Daten>" +#~ "[Trennzeichen]<Daten>... - jeweils eine Zeile pro Empfänger." + +#~ msgid "" +#~ "
    e.g. name;mail -> first column contains the name, the second the " +#~ "mail address." +#~ msgstr "" +#~ "
    z.B. Name;Mail -> erste Spalte enthält den Namen, die zweite " +#~ "die E-Mail-Adresse." + +#~ msgid "Categoryname" +#~ msgstr "Kategoriename" + +#~ msgid "Unprotect category" +#~ msgstr "Kategorie freigeben" + +#~ msgid "One or more articles are existing, unable to delete" +#~ msgstr "" +#~ "Ein oder mehrere Artikel existieren, löschen nicht möglich" + +#~ msgid "" +#~ "One or more subtrees and one or more articles are existing, unable to " +#~ "delete." +#~ msgstr "" +#~ "Mindestens eine Unterkategorie sowie mindestens ein Artikel existieren, " +#~ "löschen nicht möglich" + +#~ msgid "Move tree" +#~ msgstr "Baum verschieben" + +#~ msgid "Place tree here" +#~ msgstr "Baum hier ablegen" + +#~ msgid "No thumbnails" +#~ msgstr "Keine Thumbnails" + +#~ msgid "Thumbnail size:" +#~ msgstr "Thumbnail-Größe" + +#~ msgid "Select date, please." +#~ msgstr "Bitte Datum wählen" + +#~ msgid "Su" +#~ msgstr "So" + +#~ msgid "Mo" +#~ msgstr "Mo" + +#~ msgid "Tu" +#~ msgstr "Di" + +#~ msgid "We" +#~ msgstr "Mi" + +#~ msgid "Th" +#~ msgstr "Do" + +#~ msgid "Fr" +#~ msgstr "Fr" + +#~ msgid "Sa" +#~ msgstr "Sa" + +#~ msgid "Previous year" +#~ msgstr "Vorheriges Jahr" + +#~ msgid "Previous month" +#~ msgstr "Vorheriger Monat" + +#~ msgid "Next month" +#~ msgstr "Nächster Monat" + +#~ msgid "Next year" +#~ msgstr "Nächstes Jahr" + +#~ msgid "Time" +#~ msgstr "Zeit" + +#~ msgid "Conceptual Project Management / Testing" +#~ msgstr "Konzeptionelles Projektmanagement / Qualitätssicherung" + +#~ msgid "Technical Project Management / Testing" +#~ msgstr "Technisches Projektmanagement / Qualitätssicherung" + +#~ msgid "Warning: Changes will reset active Workflows" +#~ msgstr "Warnung: Änderungen setzen aktive Workflows zurück" + +#~ msgid "Non Groupmembers" +#~ msgstr "Nicht Gruppenmitglieder" + +#~ msgid "Groupmembers" +#~ msgstr "Gruppenmitglieder" + +#~ msgid "Add right side selected users to group" +#~ msgstr "Füge rechts ausgewählte Benutzer der Gruppe hinzu" + +#~ msgid "Remove left side selected users from group" +#~ msgstr "Entferne links ausgewählte Benutzer aus der Gruppe" + +#~ msgid "Rights type" +#~ msgstr "Rechtegruppe" + +#~ msgid "This user does not exist." +#~ msgstr "Der eingegebene Nutzername existiert nicht." + +#~ msgid "" +#~ "The requested user has no valid e-mail address. Submitting new password " +#~ "is not possible. Please contact your system- administrator for further " +#~ "support." +#~ msgstr "" +#~ "Der betroffene Nutzer hat keine gültige E-Mailadresse hinterlegt. " +#~ "Die Zusendung eines neuen Passworts ist nicht möglich. Bitte " +#~ "kontaktieren Sie Ihren System- administrator für weitere " +#~ "Unterstützung." + +#~ msgid "Form error" +#~ msgstr "Formularfehler" + +#~ msgid "Please select a new Position for new category" +#~ msgstr "Bitte wählen Sie eine Position für die neue Kategorie" + +#~ msgid "Field category name is empty" +#~ msgstr "Das Feld Kateogoriename ist leer" + +#~ msgid "Your Contenido Version" +#~ msgstr "Ihre Contenido Version" + +#~ msgid "Latest Contenido Version" +#~ msgstr "Aktuelle Contenido Version" + +#~ msgid "Changed by" +#~ msgstr "Geändert von" + +#~ msgid "Show History Entry" +#~ msgstr "Historieneintrag anzeigen" + +#~ msgid "Update Information" +#~ msgstr "Update-Nachrichten" + +#~ msgid "Internal History Error" +#~ msgstr "Interner Historie Fehler" + +#~ msgid "more" +#~ msgstr "mehr" + +#~ msgid "No layout description available" +#~ msgstr "Keine Layout-Beschreibung vorhanden" + +#~ msgid "Client %s" +#~ msgstr "Mandant %s" + +#~ msgid "-- Unnamed Template --" +#~ msgstr "-- Unbenanntes Template --" + +#~ msgid "Is used in" +#~ msgstr "Wird benutzt in" diff --git a/branches/conlite20/conlite/locale/en_US/LC_MESSAGES/conlite.mo b/branches/conlite20/conlite/locale/en_US/LC_MESSAGES/conlite.mo new file mode 100644 index 0000000000000000000000000000000000000000..122fc78855f229bd27f09418de01a8d6efdba2c9 GIT binary patch literal 548 zcmZut!A=4(5Y^~ukDfjB;7w=UBE+SrF(5HU2n5l1AR%=-E>&nrJE(k!zvl<|6?R2k zO`PPVY398*^X6@9^K~uMdcbzTPQXUMUO-W4zjRpV+jz`1nO~KP+##n(i04wG=3_{I>CC5p0#0pZ61*w(N`zfoT?11nQDWv!jq^YO}>yh z!Vu-`_x7ckFZI^>)9gFoAH85`#@AO-_oCY_kHO<4S{)>8x15KVgfFx|pGs{SESpH@ zk&d;ukfyad@RD3Ce2)&=CbLSLT(I;`Q*;Y`i%Jt*;_}%#b2cOPUDQ79-L#JNij5o}g6aH)zh$pj%yVHHh)J79U1yA9&iRHUIzs literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/locale/en_US/LC_MESSAGES/conlite.po b/branches/conlite20/conlite/locale/en_US/LC_MESSAGES/conlite.po new file mode 100644 index 0000000..fa96d8c --- /dev/null +++ b/branches/conlite20/conlite/locale/en_US/LC_MESSAGES/conlite.po @@ -0,0 +1,5162 @@ +msgid "" +msgstr "" +"Project-Id-Version: Contenido 4.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-01-09 21:17+0100\n" +"PO-Revision-Date: 2014-01-09 21:39+0100\n" +"Last-Translator: Ortwin Pinke \n" +"Language-Team: Contenido Translators \n" +"Language: en_US\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-KeywordsList: i18n;trans;gettext\n" +"X-Poedit-Basepath: E:\\timo\\contenido_head\\contenido\n" +"X-Generator: Poedit 1.5.7\n" + +#: cronjobs/send_reminder.php:97 +#, php-format +msgid "" +"Hello %s,\n" +"\n" +"you've got a new reminder for the client '%s' at\n" +"%s:\n" +"\n" +"%s" +msgstr "" + +#: backend_search.php:328 +msgid "Thank you for saving this search from extinction !" +msgstr "" + +#: backend_search.php:490 +msgid "Search results" +msgstr "" + +#: backend_search.php:491 classes/class.cms_teaser.php:596 +#: classes/class.ajax.php:171 templates/standard/template.symbolhelp.html:38 +#: templates/standard/template.symbolhelp.html:283 +#: templates/standard/template.log_main.html:56 +#: includes/include.con_art_overview.php:77 +#: includes/include.con_editcontent.php:387 +#: includes/include.con_subnav.php:104 +msgid "Article" +msgstr "" + +#: backend_search.php:492 +#: templates/standard/template.mycontenido_lastarticles.html:62 +#: includes/include.con_art_overview.php:78 +#: includes/include.con_art_overview.php:746 +#: includes/include.con_edit_form.php:208 includes/include.upl_artlist.php:81 +#: includes/include.stat_overview.php:89 +msgid "Title" +msgstr "" + +#: backend_search.php:493 includes/include.con_art_overview.php:79 +msgid "Changed" +msgstr "" + +#: backend_search.php:494 includes/include.con_art_overview.php:80 +msgid "Published" +msgstr "" + +#: backend_search.php:495 classes/class.cms_teaser.php:588 +#: classes/class.cms_filelist.php:738 includes/include.con_art_overview.php:81 +#: includes/include.mod_new.php:133 includes/include.frontend.left_top.php:257 +#: includes/include.rights_left_top.php:155 +msgid "Sort order" +msgstr "" + +#: backend_search.php:496 +#: templates/standard/template.mycontenido_lastarticles.html:66 +#: templates/standard/template.str_overview.html:230 +#: includes/include.con_art_overview.php:82 +#: includes/include.tplcfg_edit_form.php:283 +#: includes/include.pretplcfg_edit_form.php:76 +msgid "Template" +msgstr "" + +#: backend_search.php:497 templates/standard/template.str_overview.html:233 +#: includes/include.con_art_overview.php:83 +#: includes/include.upl_files_overview.php:541 +#: includes/include.frontend.left_top.php:165 +#: includes/include.mycontenido.tasks.php:276 +msgid "Actions" +msgstr "" + +#: backend_search.php:506 +msgid "Missing search value." +msgstr "" + +#: backend_search.php:507 backend_search.php:734 +msgid "No article found." +msgstr "" + +#: backend_search.php:632 includes/include.con_art_overview.php:549 +msgid "Flag as normal article" +msgstr "" + +#: backend_search.php:635 includes/include.con_art_overview.php:547 +msgid "Flag as start article" +msgstr "" + +#: backend_search.php:648 scripts/langref.php:8 scripts/HTMLObj.js.php:239 +#: includes/include.con_art_overview.php:593 +#: includes/include.client_artspec.php:144 +msgid "Make offline" +msgstr "" + +#: backend_search.php:652 scripts/langref.php:9 scripts/HTMLObj.js.php:242 +#: scripts/HTMLObj.js.php:245 includes/include.con_art_overview.php:601 +#: includes/include.client_artspec.php:140 +#: includes/include.str_overview.php:957 includes/include.str_overview.php:959 +msgid "Make online" +msgstr "" + +#: backend_search.php:658 includes/include.con_art_overview.php:436 +msgid "Unfreeze article" +msgstr "" + +#: backend_search.php:661 includes/include.con_art_overview.php:439 +#: includes/cfg_language_de.inc.php:98 +msgid "Freeze article" +msgstr "" + +#: backend_search.php:669 includes/include.con_art_overview.php:523 +#: includes/include.mod_package.php:180 +#: includes/include.upl_search_results.php:55 +#: includes/include.con_left_top.php:449 includes/cfg_language_de.inc.php:370 +#: includes/include.CMS_LINK.php:180 includes/include.CMS_LINK.php:182 +#: includes/include.CMS_SWF.php:80 +#: includes/include.mycontenido_lastarticles.php:183 +#: includes/include.CMS_IMG.php:235 +msgid "None" +msgstr "" + +#: backend_search.php:672 +msgid "Reminder" +msgstr "" + +#: backend_search.php:674 classes/class.todo.php:158 +#: classes/class.todo.php:161 +msgid "Set reminder / add to todo list" +msgstr "" + +#: backend_search.php:675 templates/standard/template.symbolhelp.html:413 +#: includes/include.con_art_overview.php:569 +msgid "Duplicate article" +msgstr "" + +#: backend_search.php:676 includes/include.con_art_overview.php:472 +msgid "Article properties" +msgstr "" + +#: backend_search.php:677 templates/standard/template.symbolhelp.html:377 +#: includes/cfg_language_de.inc.php:110 +msgid "Configure template" +msgstr "" + +#: backend_search.php:678 templates/standard/template.symbolhelp.html:425 +#: includes/include.con_art_overview.php:626 +#: includes/cfg_language_de.inc.php:106 +msgid "Delete article" +msgstr "" + +#: backend_search.php:679 +msgid "Do you really want to delete following article" +msgstr "" + +#: backend_search.php:765 +msgid "Search Name" +msgstr "" + +#: backend_search.php:767 +msgid "Store" +msgstr "" + +#: backend_search.php:772 +msgid "Save this Search" +msgstr "" + +#: scripts/langref.php:10 scripts/HTMLObj.js.php:248 +msgid "Protect" +msgstr "" + +#: scripts/langref.php:11 scripts/HTMLObj.js.php:251 +msgid "Remove protection" +msgstr "" + +#: scripts/langref.php:12 scripts/HTMLObj.js.php:254 +#: includes/include.con_left_top.php:369 +msgid "Choose template" +msgstr "" + +#: scripts/langref.php:13 scripts/articleObject.js.php:248 +msgid "Overview cannot be displayed" +msgstr "" + +#: scripts/langref.php:14 scripts/articleObject.js.php:228 +#: scripts/articleObject.js.php:231 classes/class.notification.php:114 +msgid "Error" +msgstr "" + +#: scripts/langref.php:15 scripts/articleObject.js.php:274 +msgid "Article can't be displayed" +msgstr "" + +#: scripts/langref.php:16 scripts/articleObject.js.php:274 +#: scripts/articleObject.js.php:305 scripts/articleObject.js.php:335 +#: scripts/articleObject.js.php:360 scripts/articleObject.js.php:379 +msgid "No article was selected" +msgstr "" + +#: scripts/langref.php:17 scripts/articleObject.js.php:305 +msgid "Template configuration can't be displayed" +msgstr "" + +#: scripts/langref.php:18 scripts/articleObject.js.php:257 +#: scripts/articleObject.js.php:290 scripts/articleObject.js.php:319 +#: scripts/articleObject.js.php:335 +msgid "Editor can't be displayed" +msgstr "" + +#: scripts/langref.php:19 scripts/articleObject.js.php:360 +msgid "Preview can't be displayed" +msgstr "" + +#: scripts/langref.php:20 scripts/messageBox.js.php:78 +msgid "Confirm" +msgstr "" + +#: scripts/langref.php:21 scripts/messageBox.js.php:79 +#: templates/standard/template.symbolhelp.html:181 +#: includes/include.mod_package.php:311 +msgid "Cancel" +msgstr "" + +#: scripts/langref.php:22 scripts/messageBox.js.php:80 +msgid "Close window" +msgstr "" + +#: scripts/langref.php:23 scripts/rights.js.php:67 scripts/rights.js.php:70 +#: scripts/iZoom.js.php:70 scripts/iZoom.js.php:73 +msgid "Click to close" +msgstr "" + +#: scripts/langref.php:24 +msgid "Headline / HTML" +msgstr "" + +#: scripts/langref.php:25 +msgid "Text / HTML" +msgstr "" + +#: scripts/langref.php:26 +msgid "Text / Standard" +msgstr "" + +#: scripts/langref.php:27 +msgid "Picture" +msgstr "" + +#: scripts/langref.php:28 templates/standard/template.tpl_edit_form.html:29 +#: templates/standard/template.mod_edit_form.html:33 +#: templates/standard/template.lay_edit_form.html:32 +#: templates/standard/template.upl_files_overview.html:84 +#: includes/rights_tpl.inc.php:74 includes/grouprights_tpl.inc.php:73 +#: includes/include.todo.popup.php:70 includes/include.upl_edit.php:87 +#: includes/grouprights_lay.inc.php:86 +#: includes/include.style_edit_form.php:198 +#: includes/include.html_tpl_edit_form.php:214 includes/include.mod_new.php:81 +#: includes/include.mycontenido.tasks.edit.php:71 +#: includes/include.grouprights_overview.php:118 +#: includes/grouprights_mod.inc.php:74 includes/include.style_history.php:161 +#: includes/include.CMS_LINK.php:341 includes/include.js_history.php:156 +#: includes/rights_lay.inc.php:76 includes/include.grouprights_create.php:112 +#: includes/include.lay_edit_form.php:205 +#: includes/include.tpl_edit_form.php:155 includes/include.lay_history.php:121 +#: includes/include.CMS_IMG.php:278 includes/rights_mod.inc.php:76 +#: includes/include.js_edit_form.php:176 +#: includes/include.html_tpl_history.php:164 +#: includes/include.mod_edit_form.php:378 +#: includes/include.CMS_SIMPLELINK.php:153 +#: includes/include.mod_history.php:132 +msgid "Description" +msgstr "" + +#: scripts/langref.php:29 +msgid "Description / Standard" +msgstr "" + +#: scripts/langref.php:30 +msgid "Flash Movie" +msgstr "" + +#: scripts/langref.php:31 includes/include.CMS_SIMPLELINK.php:150 +msgid "Link" +msgstr "" + +#: scripts/langref.php:32 +msgid "Frame" +msgstr "" + +#: scripts/articleObject.js.php:257 scripts/articleObject.js.php:290 +#: scripts/articleObject.js.php:319 +msgid "Can't edit articles in foreign languages." +msgstr "" + +#: scripts/articleObject.js.php:379 +msgid "Tab can't be displayed" +msgstr "" + +#: classes/class.note.php:331 classes/class.note.php:334 +msgid "View notes / add note" +msgstr "" + +#: classes/class.todo.php:101 +msgid "New" +msgstr "" + +#: classes/class.todo.php:102 +msgid "In progress" +msgstr "" + +#: classes/class.todo.php:103 +msgid "Done" +msgstr "" + +#: classes/class.todo.php:104 +msgid "Waiting for action" +msgstr "" + +#: classes/class.todo.php:105 +msgid "Deferred" +msgstr "" + +#: classes/class.todo.php:113 +msgid "Low" +msgstr "" + +#: classes/class.todo.php:114 +msgid "Medium" +msgstr "" + +#: classes/class.todo.php:115 +msgid "High" +msgstr "" + +#: classes/class.todo.php:116 +msgid "Immediately" +msgstr "" + +#: classes/class.inuse.php:242 +msgid "Click here if you want to override the lock" +msgstr "" + +#: classes/class.inuse.php:246 +msgid "Do you really want to override the lock?" +msgstr "" + +#: classes/class.inuse.php:248 +msgid "Override lock" +msgstr "" + +#: classes/class.inuse.php:248 +msgid "Hide notification" +msgstr "" + +#: classes/class.version.php:199 +#, php-format +msgid "Alternative path %s does not exist. Version was saved in frondendpath." +msgstr "" + +#: classes/class.version.php:522 includes/include.mycontenido.tasks.php:380 +msgid "Refresh" +msgstr "" + +#: classes/class.version.php:538 +msgid "Clear layout history" +msgstr "" + +#: classes/class.version.php:539 +msgid "Do you really want to clear layout history?" +msgstr "" + +#: classes/class.version.php:539 +msgid "Note: This only affects the current layout." +msgstr "" + +#: classes/class.version.php:542 +msgid "Clear module history" +msgstr "" + +#: classes/class.version.php:543 +msgid "Do you really want to clear module history?" +msgstr "" + +#: classes/class.version.php:543 +msgid "Note: This only affects the current module." +msgstr "" + +#: classes/class.version.php:546 +msgid "Clear style history" +msgstr "" + +#: classes/class.version.php:547 +msgid "Do you really want to clear style history?" +msgstr "" + +#: classes/class.version.php:547 +msgid "Note: This only affects the current style." +msgstr "" + +#: classes/class.version.php:550 +msgid "Clear Java-Script history" +msgstr "" + +#: classes/class.version.php:551 +msgid "Do you really want to clear Java-Script history?" +msgstr "" + +#: classes/class.version.php:551 +msgid "Note: This only affects the current Java-Script." +msgstr "" + +#: classes/class.version.php:554 +msgid "Clear HTML-Template history" +msgstr "" + +#: classes/class.version.php:555 +msgid "Do you really want to clear HTML-Template history?" +msgstr "" + +#: classes/class.version.php:555 +msgid "Note: This only the affects current HTML-Template." +msgstr "" + +#: classes/class.version.php:558 +msgid "Clear history" +msgstr "" + +#: classes/class.version.php:559 +msgid "Do you really want to clear history?" +msgstr "" + +#: classes/class.version.php:559 +msgid "Note: This only affects the current history." +msgstr "" + +#: classes/class.update.notifier.php:432 classes/class.update.notifier.php:437 +msgid "Unable to check for new updates!" +msgstr "" + +#: classes/class.update.notifier.php:432 +msgid "Could not handle server response!" +msgstr "" + +#: classes/class.update.notifier.php:437 +msgid "Could not determine vendor version!" +msgstr "" + +#: classes/class.update.notifier.php:551 +msgid "Unable to check for updates!" +msgstr "" + +#: classes/class.update.notifier.php:552 +#, php-format +msgid "Connection to s% failed!" +msgstr "" + +#: classes/class.update.notifier.php:662 +msgid "Disable update notification" +msgstr "" + +#: classes/class.update.notifier.php:664 classes/class.update.notifier.php:676 +msgid "Disable notification" +msgstr "" + +#: classes/class.update.notifier.php:667 +msgid "Enable update notification (recommended)" +msgstr "" + +#: classes/class.update.notifier.php:669 classes/class.update.notifier.php:683 +msgid "Enable notification" +msgstr "" + +#: classes/class.update.notifier.php:674 +msgid "Disable RSS notification" +msgstr "" + +#: classes/class.update.notifier.php:681 +msgid "Enable RSS notification (recommended)" +msgstr "" + +#: classes/class.update.notifier.php:685 +msgid "RSS notification is disabled" +msgstr "" + +#: classes/class.update.notifier.php:733 +msgid "read more" +msgstr "" + +#: classes/class.update.notifier.php:743 classes/class.update.notifier.php:752 +msgid "No RSS content available" +msgstr "" + +#: classes/class.update.notifier.php:750 classes/class.update.notifier.php:768 +msgid "" +"Your webserver does not have write permissions for the directory /contenido/" +"cache/!" +msgstr "" + +#: classes/class.update.notifier.php:771 +msgid "" +"Update notification is disabled! For actual update information, please " +"activate." +msgstr "" + +#: classes/class.update.notifier.php:776 +msgid "You have an unknown or unsupported version of ConLite!" +msgstr "" + +#: classes/class.update.notifier.php:779 +#, php-format +msgid "" +"Your version of ConLite is deprecated and not longer supported for any " +"updates. Please update to a higher version!
    Download now!" +msgstr "" + +#: classes/class.update.notifier.php:783 +#, php-format +msgid "" +"A new version of ConLite is available!
    Download %s now!" +msgstr "" + +#: classes/class.update.notifier.php:786 +#, php-format +msgid "" +"It seems to be that your version string was manipulated. ConLite %s does not " +"exist!" +msgstr "" + +#: classes/class.update.notifier.php:789 +msgid "Your version of ConLite is up to date!" +msgstr "" + +#: classes/class.ui.php:351 classes/widgets/class.widgets.views.php:80 +#: classes/widgets/class.widgets.tableedit.php:188 +#: includes/include.client_edit.php:225 +#: includes/include.grouprights_overview.php:102 +#: includes/include.CMS_EASYIMG.php:158 +#: includes/include.grouprights_create.php:94 +#: includes/include.rights_overview.php:192 +#: includes/include.rights_create.php:142 +msgid "Save changes" +msgstr "" + +#: classes/widgets/class.widgets.datawidgets.php:314 +#: classes/widgets/class.widgets.datawidgets.php:315 +msgid "Clear contents" +msgstr "" + +#: classes/widgets/class.widgets.pager.php:47 +#: classes/widgets/class.widgets.pager.php:51 +msgid "Paging" +msgstr "" + +#: classes/widgets/class.widgets.pager.php:85 +msgid "First page" +msgstr "" + +#: classes/widgets/class.widgets.pager.php:92 +msgid "Previous page" +msgstr "" + +#: classes/widgets/class.widgets.pager.php:106 +#, php-format +msgid "Page %s" +msgstr "" + +#: classes/widgets/class.widgets.pager.php:122 +msgid "Next page" +msgstr "" + +#: classes/widgets/class.widgets.pager.php:132 +msgid "Last page" +msgstr "" + +#: classes/class.cms_teaser.php:353 classes/class.cms_teaser.php:382 +#: classes/class.cms_teaser.php:419 classes/class.cms_teaser.php:447 +#: classes/class.cms_teaser.php:476 classes/class.cms_teaser.php:539 +#: includes/include.CMS_LINK.php:215 includes/include.CMS_LINK.php:244 +#: includes/include.CMS_LINK.php:273 includes/include.CMS_LINK.php:288 +#: includes/include.CMS_LINK.php:304 includes/include.str_overview.php:90 +#: includes/functions.general.php:1213 includes/functions.general.php:1256 +msgid "Please choose" +msgstr "" + +#: classes/class.cms_teaser.php:386 +msgid "Block Style" +msgstr "" + +#: classes/class.cms_teaser.php:389 +msgid "Blog Style" +msgstr "" + +#: classes/class.cms_teaser.php:423 classes/class.cms_filelist.php:465 +#: includes/include.mod_new.php:60 includes/include.frontend.left_top.php:118 +#: includes/include.rights_left_top.php:118 +#: includes/include.frontend.user_menu.php:112 +msgid "Ascending" +msgstr "" + +#: classes/class.cms_teaser.php:426 classes/class.cms_filelist.php:468 +#: includes/include.mod_new.php:60 includes/include.frontend.left_top.php:118 +#: includes/include.rights_left_top.php:119 +#: includes/include.frontend.user_menu.php:112 +msgid "Descending" +msgstr "" + +#: classes/class.cms_teaser.php:451 +msgid "Scaled" +msgstr "" + +#: classes/class.cms_teaser.php:454 +msgid "Cropped" +msgstr "" + +#: classes/class.cms_teaser.php:480 +msgid "Sort Sequence" +msgstr "" + +#: classes/class.cms_teaser.php:483 +msgid "Creationdate" +msgstr "" + +#: classes/class.cms_teaser.php:486 +msgid "Publisheddate" +msgstr "" + +#: classes/class.cms_teaser.php:489 +msgid "Modificationdate" +msgstr "" + +#: classes/class.cms_teaser.php:578 +msgid "Teasersettings" +msgstr "" + +#: classes/class.cms_teaser.php:579 +msgid "Teasertitle" +msgstr "" + +#: classes/class.cms_teaser.php:580 +msgid "Teaser Startarticle" +msgstr "" + +#: classes/class.cms_teaser.php:581 +msgid "Sourcecategory" +msgstr "" + +#: classes/class.cms_teaser.php:582 +msgid "Number of Articles" +msgstr "" + +#: classes/class.cms_teaser.php:583 classes/class.cms_filelist.php:724 +msgid "General Settings" +msgstr "" + +#: classes/class.cms_teaser.php:584 +msgid "Teaser Style" +msgstr "" + +#: classes/class.cms_teaser.php:585 +msgid "Advanced Teaser Settings" +msgstr "" + +#: classes/class.cms_teaser.php:586 +msgid "Teaser Filter" +msgstr "" + +#: classes/class.cms_teaser.php:587 +msgid "Teaser Sort" +msgstr "" + +#: classes/class.cms_teaser.php:589 +msgid "Source Headline" +msgstr "" + +#: classes/class.cms_teaser.php:590 +msgid "Source Settings" +msgstr "" + +#: classes/class.cms_teaser.php:591 +msgid "Source Text" +msgstr "" + +#: classes/class.cms_teaser.php:592 +msgid "Source Image" +msgstr "" + +#: classes/class.cms_teaser.php:593 +msgid "Source Date" +msgstr "" + +#: classes/class.cms_teaser.php:595 classes/class.ajax.php:154 +#: templates/standard/template.symbolhelp.html:41 +#: templates/standard/template.symbolhelp.html:472 +#: templates/standard/template.mycontenido_lastarticles.html:63 +#: templates/standard/template.log_main.html:55 +#: templates/standard/template.str_overview.html:124 +#: templates/standard/template.str_overview.html:224 +#: includes/include.con_editcontent.php:392 +#: includes/include.con_edit_form.php:510 includes/rights_con.inc.php:78 +#: includes/include.note.popup.php:93 includes/grouprights_str.inc.php:76 +#: includes/rights_str.inc.php:77 includes/grouprights_con.inc.php:78 +msgid "Category" +msgstr "" + +#: classes/class.cms_teaser.php:598 classes/class.cms_filelist.php:720 +msgid "General" +msgstr "" + +#: classes/class.cms_teaser.php:599 +msgid "Advanced" +msgstr "" + +#: classes/class.cms_teaser.php:600 classes/class.cms_filelist.php:721 +msgid "Manual" +msgstr "" + +#: classes/class.cms_teaser.php:601 +msgid "Included Articles" +msgstr "" + +#: classes/class.cms_teaser.php:602 +msgid "Add Article" +msgstr "" + +#: classes/class.cms_teaser.php:603 +msgid "Manual Teaser Settings" +msgstr "" + +#: classes/class.cms_teaser.php:604 +msgid "Manual Teaser" +msgstr "" + +#: classes/class.cms_teaser.php:607 +msgid "Size Settings" +msgstr "" + +#: classes/class.cms_teaser.php:608 +msgid "Characterlength" +msgstr "" + +#: classes/class.cms_teaser.php:609 +msgid "Imagewidth" +msgstr "" + +#: classes/class.cms_teaser.php:610 +msgid "Imageheight" +msgstr "" + +#: classes/class.cms_teaser.php:611 +msgid "Image Scale" +msgstr "" + +#: classes/class.cms_teaser.php:648 +msgid "Add" +msgstr "" + +#: classes/class.notification.php:120 +msgid "Warning" +msgstr "" + +#: classes/class.notification.php:126 +#: templates/standard/template.mycontenido_lastarticles.html:67 +msgid "Info" +msgstr "" + +#: classes/class.notification.php:133 +msgid "Notification" +msgstr "" + +#: classes/class.cms_filelist.php:413 +msgid "Default Style" +msgstr "" + +#: classes/class.cms_filelist.php:438 +#: templates/standard/template.upl_files_overview.html:82 +msgid "Filename" +msgstr "" + +#: classes/class.cms_filelist.php:441 +#: templates/standard/template.upl_files_overview.html:86 +msgid "File size" +msgstr "" + +#: classes/class.cms_filelist.php:444 includes/include.con_left_top.php:136 +msgid "Date created" +msgstr "" + +#: classes/class.cms_filelist.php:447 includes/include.con_left_top.php:137 +msgid "Date modified" +msgstr "" + +#: classes/class.cms_filelist.php:540 classes/class.cms_filelist.php:541 +#: includes/include.upl_files_overview.php:690 +#: includes/include.upl_search_results.php:417 +msgid "No files found" +msgstr "" + +#: classes/class.cms_filelist.php:719 +msgid "Directories" +msgstr "" + +#: classes/class.cms_filelist.php:722 +#: templates/standard/template.log_main.html:17 +msgid "Filter" +msgstr "" + +#: classes/class.cms_filelist.php:725 +msgid "Manual Settings" +msgstr "" + +#: classes/class.cms_filelist.php:726 +msgid "Filter settings" +msgstr "" + +#: classes/class.cms_filelist.php:727 +msgid "File list settings" +msgstr "" + +#: classes/class.cms_filelist.php:728 +msgid "File list title" +msgstr "" + +#: classes/class.cms_filelist.php:729 +msgid "File size limit" +msgstr "" + +#: classes/class.cms_filelist.php:730 +msgid "Creation date limit" +msgstr "" + +#: classes/class.cms_filelist.php:731 +msgid "Modify date limit" +msgstr "" + +#: classes/class.cms_filelist.php:733 +msgid "File list style" +msgstr "" + +#: classes/class.cms_filelist.php:734 +msgid "Source directory" +msgstr "" + +#: classes/class.cms_filelist.php:735 +msgid "Include subdirectories?" +msgstr "" + +#: classes/class.cms_filelist.php:736 +msgid "Include meta data?" +msgstr "" + +#: classes/class.cms_filelist.php:737 +msgid "File list sort" +msgstr "" + +#: classes/class.cms_filelist.php:739 +msgid "Displayed file extensions" +msgstr "" + +#: classes/class.cms_filelist.php:740 +msgid "Ignore selection (use all)" +msgstr "" + +#: classes/class.cms_filelist.php:741 +msgid "Selection will be ignored!" +msgstr "" + +#: classes/class.cms_filelist.php:742 +msgid "Select all entries" +msgstr "" + +#: classes/class.cms_filelist.php:743 +msgid "Use manual file list?" +msgstr "" + +#: classes/class.cms_filelist.php:744 +msgid "Directory" +msgstr "" + +#: classes/class.cms_filelist.php:745 includes/include.mod_package.php:476 +#: includes/include.mod_package.php:478 includes/include.mod_translate.php:185 +#: includes/include.mod_edit_form.php:440 +#: includes/include.mod_edit_form.php:442 +msgid "File" +msgstr "" + +#: classes/class.cms_filelist.php:746 +msgid "Files" +msgstr "" + +#: classes/class.cms_filelist.php:747 +msgid "Existing files" +msgstr "" + +#: classes/class.cms_filelist.php:748 +msgid "Add file" +msgstr "" + +#: classes/class.cms_filelist.php:749 +msgid "File count" +msgstr "" + +#: classes/class.client.php:131 classes/contenido/class.client.php:106 +msgid "No client" +msgstr "" + +#: classes/template/class.template.php:325 +msgid "\"" +msgstr "" + +#: classes/class.ajax.php:103 classes/class.ajax.php:127 +#: includes/rights_tpl.inc.php:73 includes/grouprights_tpl.inc.php:72 +msgid "Template name" +msgstr "" + +#: classes/class.ajax.php:109 classes/class.ajax.php:136 +#: classes/class.ajax.php:187 +msgid "No data found!" +msgstr "" + +#: classes/class.ajax.php:161 +msgid "idcat" +msgstr "" + +#: classes/class.ajax.php:162 classes/class.ajax.php:179 +msgid "idlang" +msgstr "" + +#: classes/class.ajax.php:163 classes/class.ajax.php:180 +#: templates/standard/template.tpl_edit_form.html:19 +#: templates/standard/template.mod_edit_form.html:23 +#: templates/standard/template.lay_edit_form.html:22 +#: includes/include.mod_package.php:235 includes/include.mod_package.php:253 +#: includes/include.mod_package.php:422 +#: includes/include.style_edit_form.php:197 +#: includes/include.html_tpl_edit_form.php:213 includes/include.mod_new.php:59 +#: includes/include.style_history.php:160 includes/include.js_history.php:155 +#: includes/include.lay_edit_form.php:204 +#: includes/include.tpl_edit_form.php:152 includes/include.lay_history.php:120 +#: includes/include.rights_left_top.php:116 +#: includes/include.rights_overview.php:209 +#: includes/include.rights_create.php:156 +#: includes/include.js_edit_form.php:175 +#: includes/include.html_tpl_history.php:163 +#: includes/include.mod_edit_form.php:372 +#: includes/include.mod_edit_form.php:374 +#: includes/include.systemsettings.php:61 +#: includes/include.systemsettings.php:174 +#: includes/include.clientsettings.php:98 +#: includes/include.clientsettings.php:189 +#: includes/include.mod_history.php:131 +msgid "Name" +msgstr "" + +#: classes/class.ajax.php:178 +msgid "idart" +msgstr "" + +#: classes/class.navigation.php:340 classes/class.navigation.php:343 +#: templates/standard/template.log_main.html:21 +#: templates/standard/template.log_main.html:51 +#: includes/include.con_editcontent.php:402 +#: includes/include.system_purge.php:195 +msgid "Client" +msgstr "" + +#: classes/class.navigation.php:360 +#: templates/standard/template.symbolhelp.html:1823 +#: templates/standard/template.log_main.html:25 +#: templates/standard/template.log_main.html:53 +msgid "User" +msgstr "" + +#: classes/class.navigation.php:435 +msgid "-- No Language available --" +msgstr "" + +#: classes/contenido/class.module.php:361 +#: includes/include.mod_edit_form.php:56 +msgid "- Unnamed Module -" +msgstr "" + +#: classes/contenido/class.module.php:889 +msgid "" +"Module uses Output- and/or InputFromFile. Editing and Saving may not be " +"possible in backend." +msgstr "" + +#: classes/class.conuser.php:842 classes/class.conuser.php:867 +#, php-format +msgid "" +"Please use at least %d lower and upper case characters in your password!" +msgstr "" + +#: classes/class.conuser.php:847 +#, php-format +msgid "Please use at least %d numbers in your password!" +msgstr "" + +#: classes/class.conuser.php:852 +#, php-format +msgid "Please use at least %d symbols in your password!" +msgstr "" + +#: classes/class.conuser.php:857 +#, php-format +msgid "Password is too short! Please use at least %d signs." +msgstr "" + +#: classes/class.conuser.php:863 +msgid "Password does not contain enough different characters." +msgstr "" + +#: classes/class.conuser.php:872 +msgid "Please choose a more secure password!" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:140 +#: includes/functions.general.php:111 +msgid "January" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:141 +#: includes/functions.general.php:114 +msgid "February" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:142 +#: includes/functions.general.php:117 +msgid "March" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:143 +#: includes/functions.general.php:120 +msgid "April" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:144 +#: includes/functions.general.php:123 +msgid "May" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:145 +#: includes/functions.general.php:126 +msgid "June" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:146 +#: includes/functions.general.php:129 +msgid "July" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:147 +#: includes/functions.general.php:132 +msgid "August" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:148 +#: includes/functions.general.php:135 +msgid "September" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:149 +#: includes/functions.general.php:138 +msgid "October" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:150 +#: includes/functions.general.php:141 +msgid "November" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:151 +#: includes/functions.general.php:144 +msgid "December" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:159 +#: classes/datatypes/class.datatype.datetime.php:166 +#: includes/functions.general.php:178 +msgid "Sunday" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:160 +#: includes/functions.general.php:160 +msgid "Monday" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:161 +#: includes/functions.general.php:163 +msgid "Tuesday" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:162 +#: includes/functions.general.php:166 +msgid "Wednesday" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:163 +#: includes/functions.general.php:169 +msgid "Thursday" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:164 +#: includes/functions.general.php:172 +msgid "Friday" +msgstr "" + +#: classes/datatypes/class.datatype.datetime.php:165 +msgid "Saturday" +msgstr "" + +#: classes/class.versionFile.php:131 +msgid "Can not open file " +msgstr "" + +#: classes/class.request.password.php:247 +#: templates/standard/template.symbolhelp.html:196 +msgid "Submit" +msgstr "" + +#: classes/class.request.password.php:251 +msgid "Please enter your login" +msgstr "" + +#: classes/class.request.password.php:291 +#, php-format +msgid "Password requests are allowed every %s minutes." +msgstr "" + +#: classes/class.request.password.php:299 +#: classes/class.request.password.php:312 +msgid "No matching data found. Please contact your systemadministrator." +msgstr "" + +#: classes/class.request.password.php:305 +msgid "New password was submitted to your e-mail address." +msgstr "" + +#: classes/class.request.password.php:348 +#, php-format +msgid "" +"Dear Contenidouser %s,\n" +"\n" +"Your password to log in Content Management System Contenido is: %s\n" +"\n" +"Best regards\n" +"\n" +"Your Contenido sysadmin" +msgstr "" + +#: classes/class.request.password.php:364 +msgid "Your new password for Contenido Backend" +msgstr "" + +#: classes/class.cms_date.php:212 +msgid "Please Choose Format" +msgstr "" + +#: external/frontend/front_content.php:348 +#: external/frontend/front_content.php:396 +#: external/backendedit/front_content.php:331 +#: external/backendedit/front_content.php:386 +msgid "No start article for this category" +msgstr "" + +#: external/frontend/front_content.php:494 +#: external/backendedit/front_content.php:484 +#: includes/include.con_edit_form.php:134 +#: includes/include.tplcfg_edit_form.php:59 +#, php-format +msgid "Article is in use by %s (%s)" +msgstr "" + +#: templates/standard/template.stat_overview.html:135 +#: includes/include.con_left_top.php:428 +#: includes/include.con_str_overview.php:662 +#: includes/include.str_overview.php:486 includes/include.str_overview.php:487 +#: includes/include.str_overview.php:488 +msgid "Close all categories" +msgstr "" + +#: templates/standard/template.stat_overview.html:137 +#: includes/include.con_left_top.php:429 +#: includes/include.con_str_overview.php:663 +#: includes/include.str_overview.php:493 includes/include.str_overview.php:494 +#: includes/include.str_overview.php:495 +msgid "Open all categories" +msgstr "" + +#: templates/standard/template.symbolhelp.html:23 +msgid "Table of contents" +msgstr "" + +#: templates/standard/template.symbolhelp.html:29 +#: templates/standard/template.symbolhelp.html:135 +msgid "Common" +msgstr "" + +#: templates/standard/template.symbolhelp.html:35 +#: templates/standard/template.symbolhelp.html:277 +msgid "Content" +msgstr "" + +#: templates/standard/template.symbolhelp.html:44 +#: templates/standard/template.symbolhelp.html:740 +msgid "File management" +msgstr "" + +#: templates/standard/template.symbolhelp.html:50 +#: templates/standard/template.symbolhelp.html:816 +msgid "Style" +msgstr "" + +#: templates/standard/template.symbolhelp.html:53 +#: templates/standard/template.symbolhelp.html:822 +#: includes/include.mod_package.php:191 +msgid "Layouts" +msgstr "" + +#: templates/standard/template.symbolhelp.html:56 +#: templates/standard/template.symbolhelp.html:904 +msgid "Modules" +msgstr "" + +#: templates/standard/template.symbolhelp.html:59 +#: templates/standard/template.symbolhelp.html:985 +msgid "Templates" +msgstr "" + +#: templates/standard/template.symbolhelp.html:62 +#: templates/standard/template.symbolhelp.html:1055 +msgid "CSS editor" +msgstr "" + +#: templates/standard/template.symbolhelp.html:65 +#: templates/standard/template.symbolhelp.html:1110 +msgid "Script editor" +msgstr "" + +#: templates/standard/template.symbolhelp.html:68 +#: templates/standard/template.symbolhelp.html:1165 +msgid "Module Templates" +msgstr "" + +#: templates/standard/template.symbolhelp.html:74 +#: templates/standard/template.symbolhelp.html:1242 +msgid "Extras" +msgstr "" + +#: templates/standard/template.symbolhelp.html:77 +#: templates/standard/template.symbolhelp.html:1248 +msgid "Newsletter" +msgstr "" + +#: templates/standard/template.symbolhelp.html:80 +msgid "Recipients" +msgstr "" + +#: templates/standard/template.symbolhelp.html:86 +#: templates/standard/template.symbolhelp.html:1466 +msgid "Statistics" +msgstr "" + +#: templates/standard/template.symbolhelp.html:89 +#: templates/standard/template.symbolhelp.html:1472 +#: includes/include.stat_overview.php:92 +msgid "Hits" +msgstr "" + +#: templates/standard/template.symbolhelp.html:95 +#: templates/standard/template.symbolhelp.html:1548 +msgid "Administration" +msgstr "" + +#: templates/standard/template.symbolhelp.html:98 +#: templates/standard/template.symbolhelp.html:1554 +msgid "Users" +msgstr "" + +#: templates/standard/template.symbolhelp.html:101 +#: templates/standard/template.symbolhelp.html:1609 +msgid "Groups" +msgstr "" + +#: templates/standard/template.symbolhelp.html:104 +#: templates/standard/template.symbolhelp.html:1664 +msgid "Languages" +msgstr "" + +#: templates/standard/template.symbolhelp.html:107 +#: templates/standard/template.symbolhelp.html:1734 +msgid "Clients" +msgstr "" + +#: templates/standard/template.symbolhelp.html:129 +msgid "Table of Contents" +msgstr "" + +#: templates/standard/template.symbolhelp.html:166 +msgid "Execute query / Save" +msgstr "" + +#: templates/standard/template.symbolhelp.html:208 +msgid "Change to MyContenido (Personal Settings)" +msgstr "" + +#: templates/standard/template.symbolhelp.html:220 +msgid "Information (Impressum)" +msgstr "" + +#: templates/standard/template.symbolhelp.html:235 +msgid "Logout" +msgstr "" + +#: templates/standard/template.symbolhelp.html:314 +#: templates/standard/template.symbolhelp.html:506 +#: templates/standard/template.str_overview.html:148 +#: includes/cfg_language_de.inc.php:132 includes/include.str_overview.php:949 +#: includes/include.str_overview.php:952 +msgid "Configure category" +msgstr "" + +#: templates/standard/template.symbolhelp.html:329 +#: includes/include.con_art_overview.php:988 +#: includes/include.con_art_overview.php:989 +msgid "Create new article" +msgstr "" + +#: templates/standard/template.symbolhelp.html:341 +msgid "Article is start article / is not start article" +msgstr "" + +#: templates/standard/template.symbolhelp.html:353 +#: templates/standard/template.symbolhelp.html:868 +#: templates/standard/template.symbolhelp.html:949 +msgid "Set template / Add to To-Do list" +msgstr "" + +#: templates/standard/template.symbolhelp.html:365 +msgid "Configure article properties" +msgstr "" + +#: templates/standard/template.symbolhelp.html:389 +msgid "Element is online / offline (change through click)" +msgstr "" + +#: templates/standard/template.symbolhelp.html:401 +msgid "Element is protected / accessible (change through click)" +msgstr "" + +#: templates/standard/template.symbolhelp.html:439 +msgid "Lock / unlock folder (change through click)" +msgstr "" + +#: templates/standard/template.symbolhelp.html:451 +msgid "Set folder offline / online (change through click)" +msgstr "" + +#: templates/standard/template.symbolhelp.html:524 +#: includes/cfg_language_de.inc.php:120 +msgid "Rename category" +msgstr "" + +#: templates/standard/template.symbolhelp.html:542 +msgid "Create category" +msgstr "" + +#: templates/standard/template.symbolhelp.html:560 +msgid "Set category online / offline" +msgstr "" + +#: templates/standard/template.symbolhelp.html:578 +msgid "Category is online and unprotected / protected" +msgstr "" + +#: templates/standard/template.symbolhelp.html:596 +msgid "Category is offline and unprotected / protected" +msgstr "" + +#: templates/standard/template.symbolhelp.html:614 +msgid "Category is online, contains an error and is unprotected / protected" +msgstr "" + +#: templates/standard/template.symbolhelp.html:632 +msgid "Category is offline, contains an error and is unprotected / protected" +msgstr "" + +#: templates/standard/template.symbolhelp.html:650 +msgid "Move up one category" +msgstr "" + +#: templates/standard/template.symbolhelp.html:665 +#: includes/cfg_language_de.inc.php:129 +msgid "Move category" +msgstr "" + +#: templates/standard/template.symbolhelp.html:683 +msgid "Select move target" +msgstr "" + +#: templates/standard/template.symbolhelp.html:701 +#: includes/cfg_language_de.inc.php:131 +msgid "Duplicate category" +msgstr "" + +#: templates/standard/template.symbolhelp.html:716 +#: templates/standard/template.symbolhelp.html:880 +#: templates/standard/template.symbolhelp.html:961 +#: templates/standard/template.symbolhelp.html:1031 +#: templates/standard/template.symbolhelp.html:1086 +#: templates/standard/template.symbolhelp.html:1141 +#: templates/standard/template.symbolhelp.html:1196 +#: templates/standard/template.symbolhelp.html:1306 +#: templates/standard/template.symbolhelp.html:1421 +#: templates/standard/template.symbolhelp.html:1585 +#: templates/standard/template.symbolhelp.html:1640 +#: templates/standard/template.symbolhelp.html:1710 +#: templates/standard/template.symbolhelp.html:1765 +#: templates/standard/template.symbolhelp.html:1871 +msgid "Delete / Delete not available" +msgstr "" + +#: templates/standard/template.symbolhelp.html:762 +msgid "Root upload folder" +msgstr "" + +#: templates/standard/template.symbolhelp.html:780 +msgid "Regular folder" +msgstr "" + +#: templates/standard/template.symbolhelp.html:853 +msgid "Layout in use" +msgstr "" + +#: templates/standard/template.symbolhelp.html:934 +msgid "Module in use" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1016 +#: includes/cfg_language_de.inc.php:167 includes/cfg_language_de.inc.php:168 +#: includes/include.tpl_overview.php:111 +msgid "Duplicate template" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1279 +#: includes/cfg_language_de.inc.php:217 +msgid "Create newsletter" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1294 +msgid "Copy newsletter" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1330 +#: templates/standard/template.symbolhelp.html:1361 +msgid "Recipient" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1373 +#: includes/cfg_language_de.inc.php:229 +msgid "Create recipient" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1385 +msgid "Remove recipient" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1397 +msgid "Recipient group" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1409 +#: includes/cfg_language_de.inc.php:235 +msgid "Create recipient group" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1503 +msgid "Article is online / offline" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1695 +msgid "Language active / not active" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1835 +#: includes/cfg_language_de.inc.php:171 includes/cfg_language_de.inc.php:174 +#: includes/include.frontend.left_top.php:178 +#: includes/include.rights_left_top.php:103 +msgid "Create user" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1847 +msgid "User group" +msgstr "" + +#: templates/standard/template.symbolhelp.html:1859 +msgid "Create user group" +msgstr "" + +#: templates/standard/template.mycontenido_lastarticles.html:35 +msgid "Your clients" +msgstr "" + +#: templates/standard/template.mycontenido_lastarticles.html:61 +#: includes/include.upl_artlist.php:81 +msgid "Start" +msgstr "" + +#: templates/standard/template.mycontenido_lastarticles.html:64 +#: includes/include.con_edit_form.php:284 +#: includes/include.mycontenido.tasks.php:276 +#: includes/include.upl_artlist.php:81 +msgid "Created" +msgstr "" + +#: templates/standard/template.mycontenido_lastarticles.html:65 +#: includes/include.upl_artlist.php:81 +msgid "Modified" +msgstr "" + +#: templates/standard/template.system_variables.html:16 +msgid "Your system configuration" +msgstr "" + +#: templates/standard/template.system_variables.html:21 +msgid "Variable" +msgstr "" + +#: templates/standard/template.system_variables.html:22 +msgid "Local value" +msgstr "" + +#: templates/standard/template.system_variables.html:37 +msgid "Contenido Error Log" +msgstr "" + +#: templates/standard/template.system_variables.html:50 +msgid "clear error log" +msgstr "" + +#: templates/standard/template.system_variables.html:58 +msgid "Contenido Upgrade Error Log" +msgstr "" + +#: templates/standard/template.system_variables.html:72 +msgid "clear upgrade error log" +msgstr "" + +#: templates/standard/template.log_main.html:18 +#: includes/include.client_edit.php:237 +#: includes/include.grouprights_overview.php:109 +#: includes/include.grouprights_overview.php:210 +#: includes/include.grouprights_create.php:99 +#: includes/include.rights_overview.php:200 +#: includes/include.rights_overview.php:354 +#: includes/include.rights_create.php:147 +#: includes/include.systemsettings.php:62 +#: includes/include.systemsettings.php:178 +#: includes/include.clientsettings.php:98 +#: includes/include.clientsettings.php:193 +msgid "Value" +msgstr "" + +#: templates/standard/template.log_main.html:29 +#: templates/standard/template.log_main.html:54 +#: includes/include.mod_package.php:254 +msgid "Action" +msgstr "" + +#: templates/standard/template.log_main.html:33 +#: templates/standard/template.con_edit_form.html:146 +#: includes/include.upl_edit.php:207 +msgid "Start date" +msgstr "" + +#: templates/standard/template.log_main.html:37 +#: templates/standard/template.con_edit_form.html:150 +#: includes/include.todo.popup.php:79 includes/include.upl_edit.php:211 +#: includes/include.mycontenido.tasks.edit.php:75 +msgid "End date" +msgstr "" + +#: templates/standard/template.log_main.html:41 +#: templates/standard/template.recipient_menu.html:88 +msgid "Limit" +msgstr "" + +#: templates/standard/template.log_main.html:52 +msgid "Date" +msgstr "" + +#: templates/standard/template.tpl_edit_form.html:42 +#: includes/include.lay_overview.php:101 +#: includes/include.tpl_edit_form.php:161 +msgid "Layout" +msgstr "" + +#: templates/standard/template.tpl_edit_form.html:55 +#: includes/include.tpl_edit_form.php:162 +msgid "Layout description" +msgstr "" + +#: templates/standard/template.info.html:15 +msgid "Concept and Implementation" +msgstr "" + +#: templates/standard/template.info.html:15 +msgid "Germany" +msgstr "" + +#: templates/standard/template.info.html:15 +msgid "Phone" +msgstr "" + +#: templates/standard/template.rights_inc.html:24 +msgid "Client / Language" +msgstr "" + +#: templates/standard/template.con_edit_form.html:141 +#: includes/include.upl_edit.php:92 +msgid "Time control" +msgstr "" + +#: templates/standard/template.con_edit_form.html:144 +#: includes/include.upl_edit.php:201 +msgid "Use time control" +msgstr "" + +#: templates/standard/template.con_edit_form.html:153 +msgid "When expired, move to category" +msgstr "" + +#: templates/standard/template.con_edit_form.html:155 +msgid "Make online after move" +msgstr "" + +#: templates/standard/template.con_edit_form.html:184 +msgid "Page title" +msgstr "" + +#: templates/standard/template.con_edit_form.html:190 +msgid "Meta tags" +msgstr "" + +#: templates/standard/template.welcome.html:22 +msgid "Available clients" +msgstr "" + +#: templates/standard/template.welcome.html:42 +msgid "Currently" +msgstr "" + +#: templates/standard/template.welcome.html:42 +msgid "Users online" +msgstr "" + +#: templates/standard/template.welcome.html:50 +msgid "Contact System Administrators" +msgstr "" + +#: templates/standard/template.upl_files_overview.html:61 +msgid "Sort files" +msgstr "" + +#: templates/standard/template.upl_files_overview.html:88 +msgid "Image size" +msgstr "" + +#: templates/standard/template.str_overview.html:133 +#: templates/standard/template.str_overview.html:227 +#: includes/include.con_edit_form.php:211 +#: includes/include.str_overview.php:509 +msgid "Alias" +msgstr "" + +#: templates/standard/template.str_overview.html:139 +#: includes/cfg_language_de.inc.php:105 includes/cfg_language_de.inc.php:124 +#: includes/include.str_overview.php:963 includes/include.str_overview.php:965 +msgid "Protect category" +msgstr "" + +#: templates/standard/template.str_overview.html:157 +msgid "Category is a tree" +msgstr "" + +#: templates/standard/template.str_overview.html:164 +msgid "Position of category" +msgstr "" + +#: templates/standard/template.recipient_menu.html:92 +#: includes/include.con_left_top.php:237 +msgid "Search" +msgstr "" + +#: includes/rights_tpl.inc.php:55 includes/grouprights_area.inc.php:65 +#: includes/include.client_edit.php:48 +#: includes/include.con_art_overview.php:1013 +#: includes/include.client_artspec.php:40 +#: includes/include.client_artspec.php:50 +#: includes/include.client_artspec.php:60 +#: includes/include.client_artspec.php:70 includes/grouprights_tpl.inc.php:53 +#: includes/grouprights_lay.inc.php:55 includes/grouprights_lay.inc.php:74 +#: includes/include.style_edit_form.php:51 +#: includes/include.html_tpl_edit_form.php:50 +#: includes/include.system_purge.php:37 includes/include.logs.php:46 +#: includes/include.grouprights_overview.php:42 +#: includes/grouprights_mod.inc.php:54 includes/include.style_history.php:57 +#: includes/include.js_history.php:55 includes/rights_area.inc.php:58 +#: includes/include.con_edit_form.php:764 +#: includes/grouprights_members.inc.php:41 includes/rights_con.inc.php:56 +#: includes/rights_lay.inc.php:57 includes/include.grouprights_create.php:42 +#: includes/include.lay_edit_form.php:43 includes/include.lay_edit_form.php:52 +#: includes/grouprights_str.inc.php:54 includes/include.tpl_edit_form.php:40 +#: includes/include.tplcfg_edit_form.php:148 +#: includes/include.lay_history.php:46 includes/include.rights_overview.php:49 +#: includes/rights_str.inc.php:55 includes/include.upl_dirs_overview.php:389 +#: includes/include.upl_dirs_overview.php:536 includes/rights_mod.inc.php:55 +#: includes/grouprights_con.inc.php:56 includes/include.rights_create.php:43 +#: includes/include.js_edit_form.php:50 includes/include.lang_edit.php:127 +#: includes/include.html_tpl_history.php:59 +#: includes/include.mod_history.php:52 +msgid "Permission denied" +msgstr "" + +#: includes/rights_tpl.inc.php:100 includes/grouprights_area.inc.php:86 +#: includes/grouprights_tpl.inc.php:101 includes/grouprights_lay.inc.php:113 +#: includes/grouprights_mod.inc.php:99 includes/rights_area.inc.php:87 +#: includes/rights_con.inc.php:112 includes/rights_lay.inc.php:100 +#: includes/grouprights_str.inc.php:105 includes/rights_str.inc.php:106 +#: includes/rights_mod.inc.php:99 includes/grouprights_con.inc.php:111 +msgid "Check all" +msgstr "" + +#: includes/rights.inc.php:273 includes/include.con_art_overview.php:866 +#: includes/include.grouprights_left_top.php:59 +#: includes/grouprights.inc.php:157 includes/include.rights_left_top.php:76 +#: includes/functions.stat.php:992 includes/functions.stat.php:1018 +msgid "All" +msgstr "" + +#: includes/rights.inc.php:275 includes/grouprights.inc.php:159 +msgid "Article rights" +msgstr "" + +#: includes/rights.inc.php:277 includes/grouprights.inc.php:161 +msgid "Category rights" +msgstr "" + +#: includes/rights.inc.php:279 includes/grouprights.inc.php:163 +msgid "Template rights" +msgstr "" + +#: includes/rights.inc.php:281 includes/grouprights.inc.php:165 +msgid "Plugin/Other rights" +msgstr "" + +#: includes/rights.inc.php:343 +msgid "" +"The selected user is a system administrator. A system administrator has all " +"rights for all clients for all languages and therefore rights can't be " +"specified in more detail." +msgstr "" + +#: includes/rights.inc.php:348 +msgid "" +"The selected user is assigned to clients as admin, only. An admin has all " +"rights for a client and therefore rights can't be specified in more detail." +msgstr "" + +#: includes/rights.inc.php:352 +msgid "Current user doesn't have any rights to any client/language." +msgstr "" + +#: includes/include.client_menu.php:80 +msgid "Delete client" +msgstr "" + +#: includes/include.client_menu.php:81 +#, php-format +msgid "Do you really want to delete the following client:

    %s
    " +msgstr "" + +#: includes/include.client_edit.php:52 +msgid "No client ID passed" +msgstr "" + +#: includes/include.client_edit.php:65 +msgid "" +"Notice: In order to use this client, you must create a new language for it." +msgstr "" + +#: includes/include.client_edit.php:69 +#, php-format +msgid "Please click %shere%s to create a new language." +msgstr "" + +#: includes/include.client_edit.php:116 +msgid "Couldn't write the file config.php." +msgstr "" + +#: includes/include.client_edit.php:126 +#, php-format +msgid "" +"The directory %s already exists. The client was created, but you have to " +"copy the frontend-template yourself" +msgstr "" + +#: includes/include.client_edit.php:145 +msgid "" +"You changed the client path. You might need to copy the frontend to the new " +"location" +msgstr "" + +#: includes/include.client_edit.php:170 +#: includes/include.system_configuration.php:133 +#: includes/include.grouprights_overview.php:65 +#: includes/grouprights.inc.php:335 includes/include.rights_overview.php:141 +#: includes/include.lang_edit.php:140 +msgid "Changes saved" +msgstr "" + +#: includes/include.client_edit.php:226 +#: includes/include.grouprights_overview.php:103 +#: includes/include.CMS_EASYIMG.php:157 +#: includes/include.rights_overview.php:193 +msgid "Discard changes" +msgstr "" + +#: includes/include.client_edit.php:234 +#: includes/include.grouprights_overview.php:106 +#: includes/include.grouprights_overview.php:209 +#: includes/include.grouprights_create.php:96 +#: includes/include.rights_overview.php:197 +#: includes/include.rights_overview.php:353 +#: includes/include.rights_create.php:144 +msgid "Property" +msgstr "" + +#: includes/include.client_edit.php:243 +msgid "Client name" +msgstr "" + +#: includes/include.client_edit.php:259 +msgid "Server path" +msgstr "" + +#: includes/include.client_edit.php:275 +msgid "Web address" +msgstr "" + +#: includes/include.client_edit.php:284 +msgid "Error page category" +msgstr "" + +#: includes/include.client_edit.php:293 +msgid "Error page article" +msgstr "" + +#: includes/include.client_edit.php:304 +msgid "Client logo" +msgstr "" + +#: includes/include.client_edit.php:313 +msgid "HTML" +msgstr "" + +#: includes/include.client_edit.php:313 +msgid "XHTML" +msgstr "" + +#: includes/include.client_edit.php:313 +msgid "HTML5" +msgstr "" + +#: includes/include.client_edit.php:328 +msgid "Generate" +msgstr "" + +#: includes/include.client_edit.php:339 +msgid "Copy frontend template" +msgstr "" + +#: includes/include.con_art_overview.php:354 +#: includes/include.con_edit_form.php:297 +msgid "not yet published" +msgstr "" + +#: includes/include.con_art_overview.php:369 +msgid "Article is in use" +msgstr "" + +#: includes/include.con_art_overview.php:370 +#, php-format +msgid "Article in use by %s (%s)" +msgstr "" + +#: includes/include.con_art_overview.php:446 +msgid "Article is frozen" +msgstr "" + +#: includes/include.con_art_overview.php:449 +msgid "Article is not frozen" +msgstr "" + +#: includes/include.con_art_overview.php:486 +msgid "Copy article to the current language" +msgstr "" + +#: includes/include.con_art_overview.php:553 +#: includes/include.con_edit_form.php:350 +msgid "Start article" +msgstr "" + +#: includes/include.con_art_overview.php:555 +msgid "Normal article" +msgstr "" + +#: includes/include.con_art_overview.php:581 +#, php-format +msgid "Reminder for Article '%s'" +msgstr "" + +#: includes/include.con_art_overview.php:584 +#, php-format +msgid "" +"Reminder for Article '%s'\n" +"Category: %s" +msgstr "" + +#: includes/include.con_art_overview.php:595 +#: includes/include.mycontenido_lastarticles.php:221 +msgid "Article is online" +msgstr "" + +#: includes/include.con_art_overview.php:603 +#: includes/include.mycontenido_lastarticles.php:224 +msgid "Article is offline" +msgstr "" + +#: includes/include.con_art_overview.php:625 +#, php-format +msgid "Are you sure to delete the following article:

    %s" +msgstr "" + +#: includes/include.con_art_overview.php:771 +#: includes/include.con_art_overview.php:774 +#, php-format +msgid "Go to page: %s" +msgstr "" + +#: includes/include.con_art_overview.php:777 +msgid "with click select line for further treatment" +msgstr "" + +#: includes/include.con_art_overview.php:832 +#: includes/include.con_art_overview.php:938 +msgid "No articles found" +msgstr "" + +#: includes/include.con_art_overview.php:838 +msgid "Alphabetical" +msgstr "" + +#: includes/include.con_art_overview.php:839 +msgid "Last change" +msgstr "" + +#: includes/include.con_art_overview.php:840 +msgid "Published date" +msgstr "" + +#: includes/include.con_art_overview.php:841 +#: includes/include.con_edit_form.php:354 +msgid "Sort key" +msgstr "" + +#: includes/include.con_art_overview.php:860 +msgid "Sort articles:" +msgstr "" + +#: includes/include.con_art_overview.php:887 +msgid "Items per page:" +msgstr "" + +#: includes/include.client_artspec.php:79 +#: includes/include.con_edit_form.php:241 +msgid "Article specification" +msgstr "" + +#: includes/include.client_artspec.php:80 +#: includes/include.mycontenido_settings.php:127 +#: includes/include.lay_edit_form.php:207 +#: includes/include.mycontenido.tasks.php:397 +msgid "Options" +msgstr "" + +#: includes/include.client_artspec.php:90 includes/include.upl_edit.php:58 +#: includes/include.systemsettings.php:71 +#: includes/include.systemsettings.php:75 +#: includes/include.clientsettings.php:114 +msgid "Edit" +msgstr "" + +#: includes/include.client_artspec.php:94 +#: includes/include.systemsettings.php:79 +#: includes/include.systemsettings.php:81 +#: includes/include.clientsettings.php:108 +msgid "Delete" +msgstr "" + +#: includes/include.client_artspec.php:131 +msgid "Save" +msgstr "" + +#: includes/include.client_artspec.php:150 +msgid "Make this article specification default" +msgstr "" + +#: includes/include.client_artspec.php:154 +msgid "This article specification is default" +msgstr "" + +#: includes/include.client_artspec.php:163 +#: includes/include.con_edit_form.php:238 +msgid "No article specifications found!" +msgstr "" + +#: includes/include.client_artspec.php:173 +msgid "Create new article specification" +msgstr "" + +#: includes/include.client_artspec.php:176 +msgid "Specification name" +msgstr "" + +#: includes/include.mod_package.php:111 +#: includes/include.js_files_overview.php:104 +#: includes/include.html_tpl_files_overview.php:105 +#: includes/include.style_files_overview.php:104 +msgid "is not readable!" +msgstr "" + +#: includes/include.mod_package.php:123 +#: includes/include.js_files_overview.php:155 +#: includes/include.html_tpl_files_overview.php:156 +#: includes/include.style_files_overview.php:155 +msgid "Directory is not existing or readable!" +msgstr "" + +#: includes/include.mod_package.php:139 +msgid "No elements available" +msgstr "" + +#: includes/include.mod_package.php:188 +msgid "Javascript files" +msgstr "" + +#: includes/include.mod_package.php:189 +msgid "Module template files" +msgstr "" + +#: includes/include.mod_package.php:190 +msgid "Style files" +msgstr "" + +#: includes/include.mod_package.php:192 +msgid "Translations" +msgstr "" + +#: includes/include.mod_package.php:219 includes/include.mod_package.php:357 +#: includes/include.mod_edit_form.php:81 +#, php-format +msgid "Error while importing XML file: %s" +msgstr "" + +#: includes/include.mod_package.php:238 +msgid "Skip" +msgstr "" + +#: includes/include.mod_package.php:238 +msgid "Append" +msgstr "" + +#: includes/include.mod_package.php:238 +msgid "Overwrite" +msgstr "" + +#: includes/include.mod_package.php:239 +msgid "OK" +msgstr "" + +#: includes/include.mod_package.php:240 +msgid "Assign" +msgstr "" + +#: includes/include.mod_package.php:241 +msgid "Conflict" +msgstr "" + +#: includes/include.mod_package.php:242 +msgid "Ignored" +msgstr "" + +#: includes/include.mod_package.php:243 +msgid "- Select -" +msgstr "" + +#: includes/include.mod_package.php:252 includes/include.mod_package.php:361 +#: includes/include.mod_package.php:366 +#: includes/include.mycontenido.tasks.edit.php:137 +#: includes/include.mycontenido.tasks.php:276 +#: includes/include.stat_overview.php:90 +msgid "Status" +msgstr "" + +#: includes/include.mod_package.php:312 +msgid "Import" +msgstr "" + +#: includes/include.mod_package.php:361 +msgid "Import was not succesful, please check data and try again" +msgstr "" + +#: includes/include.mod_package.php:362 +msgid "Retry" +msgstr "" + +#: includes/include.mod_package.php:366 +msgid "Import succesfully finished" +msgstr "" + +#: includes/include.mod_package.php:367 +msgid "Finish" +msgstr "" + +#: includes/include.mod_package.php:398 includes/include.mod_edit_form.php:101 +#, php-format +msgid "Module is in use by %s (%s)" +msgstr "" + +#: includes/include.mod_package.php:421 +msgid "Edit package" +msgstr "" + +#: includes/include.mod_package.php:442 +msgid "Package GUID" +msgstr "" + +#: includes/include.mod_package.php:454 includes/include.mod_translate.php:174 +#: includes/include.mod_edit_form.php:419 +msgid "Import from file" +msgstr "" + +#: includes/include.mod_package.php:455 includes/include.mod_translate.php:173 +#: includes/include.mod_edit_form.php:420 +msgid "Export to file" +msgstr "" + +#: includes/include.mod_package.php:472 includes/include.mod_translate.php:184 +#: includes/include.mod_edit_form.php:437 +msgid "Mode" +msgstr "" + +#: includes/include.todo.popup.php:58 +msgid "Add TODO item" +msgstr "" + +#: includes/include.todo.popup.php:67 +#: includes/include.mycontenido.tasks.edit.php:68 +#: includes/include.mycontenido.tasks.php:276 +msgid "Subject" +msgstr "" + +#: includes/include.todo.popup.php:75 +#: includes/include.mycontenido.tasks.edit.php:100 +msgid "Reminder date" +msgstr "" + +#: includes/include.todo.popup.php:80 +msgid "eMail notification" +msgstr "" + +#: includes/include.todo.popup.php:82 +#: includes/include.mycontenido.tasks.edit.php:81 +msgid "Reminder options" +msgstr "" + +#: includes/include.todo.popup.php:124 +#: includes/include.mycontenido.tasks.edit.php:65 +msgid "Assigned to" +msgstr "" + +#: includes/include.upl_edit.php:83 +msgid "File name" +msgstr "" + +#: includes/include.upl_edit.php:84 +#: includes/include.upl_search_results.php:204 +#: includes/include.upl_search_results.php:209 +#: includes/include.upl_search_results.php:212 +msgid "Path" +msgstr "" + +#: includes/include.upl_edit.php:85 +msgid "Replace file" +msgstr "" + +#: includes/include.upl_edit.php:86 +msgid "Media name" +msgstr "" + +#: includes/include.upl_edit.php:88 +msgid "Keywords" +msgstr "" + +#: includes/include.upl_edit.php:89 +msgid "Internal notes" +msgstr "" + +#: includes/include.upl_edit.php:90 +msgid "Copyright" +msgstr "" + +#: includes/include.upl_edit.php:91 +msgid "Protection" +msgstr "" + +#: includes/include.upl_edit.php:93 +#: includes/include.upl_files_overview.php:537 +#: includes/include.upl_search_results.php:286 +#: includes/include.CMS_IMG.php:283 +msgid "Preview" +msgstr "" + +#: includes/include.upl_edit.php:94 includes/include.con_left_top.php:275 +#: includes/include.frontend.user_edit.php:245 +msgid "Author" +msgstr "" + +#: includes/include.upl_edit.php:95 +#: includes/include.frontend.user_edit.php:246 +msgid "Last modified by" +msgstr "" + +#: includes/include.upl_edit.php:192 +msgid "Protected for non-logged in users" +msgstr "" + +#: includes/include.upl_edit.php:296 +#: includes/include.upl_files_overview.php:87 +#: includes/include.upl_files_upload.php:67 +msgid "Directory not writable" +msgstr "" + +#: includes/include.upl_edit.php:305 +#, php-format +msgid "Could not load file %s" +msgstr "" + +#: includes/include.upl_files_overview.php:260 +#, php-format +msgid "" +"The uploaded file (%s) exceeds the upload_max_filesize directive in php.ini." +msgstr "" + +#: includes/include.upl_files_overview.php:270 +#, php-format +msgid "Error while uploading file (%s)." +msgstr "" + +#: includes/include.upl_files_overview.php:322 +msgid "Errors while uploading file(s). Some or all files were not uploaded." +msgstr "" + +#: includes/include.upl_files_overview.php:405 +#: includes/include.upl_files_overview.php:407 +msgid "Use file" +msgstr "" + +#: includes/include.upl_files_overview.php:453 +#: includes/include.upl_files_overview.php:457 +#: includes/include.upl_files_overview.php:459 +#: includes/include.upl_search_results.php:190 +#: includes/include.upl_search_results.php:195 +#: includes/include.upl_search_results.php:198 +msgid "Filename / Description" +msgstr "" + +#: includes/include.upl_files_overview.php:465 +#: includes/include.upl_files_overview.php:469 +#: includes/include.upl_files_overview.php:471 +#: includes/include.upl_search_results.php:218 +#: includes/include.upl_search_results.php:223 +#: includes/include.upl_search_results.php:226 +msgid "Size" +msgstr "" + +#: includes/include.upl_files_overview.php:477 +#: includes/include.upl_files_overview.php:481 +#: includes/include.upl_files_overview.php:483 +#: includes/include.upl_search_results.php:232 +#: includes/include.upl_search_results.php:237 +#: includes/include.upl_search_results.php:240 includes/include.mod_new.php:59 +#: includes/include.mod_new.php:82 includes/include.mod_edit_form.php:377 +#: includes/include.systemsettings.php:60 +#: includes/include.systemsettings.php:170 +#: includes/include.clientsettings.php:98 +#: includes/include.clientsettings.php:185 +msgid "Type" +msgstr "" + +#: includes/include.upl_files_overview.php:490 +msgid "Delete Files" +msgstr "" + +#: includes/include.upl_files_overview.php:490 +msgid "Are you sure you want to delete the selected files?" +msgstr "" + +#: includes/include.upl_files_overview.php:491 +msgid "Delete selected files" +msgstr "" + +#: includes/include.upl_files_overview.php:508 +msgid "Flip Selection" +msgstr "" + +#: includes/include.upl_files_overview.php:513 +#: includes/include.upl_files_upload.php:59 +msgid "Path:" +msgstr "" + +#: includes/include.upl_files_overview.php:528 +#: includes/include.upl_search_results.php:276 +msgid "Files per Page" +msgstr "" + +#: includes/include.upl_files_overview.php:536 +msgid "Mark" +msgstr "" + +#: includes/include.upl_files_overview.php:654 +msgid "Display properties" +msgstr "" + +#: includes/include.upl_files_overview.php:717 +#: includes/include.upl_search_results.php:445 +msgid "Previous Page" +msgstr "" + +#: includes/include.upl_files_overview.php:724 +#: includes/include.upl_search_results.php:452 +msgid "Next Page" +msgstr "" + +#: includes/include.upl_files_overview.php:764 +#: includes/include.upl_search_results.php:490 +msgid "Page" +msgstr "" + +#: includes/include.upl_files_overview.php:790 +#: includes/cfg_language_de.inc.php:143 +msgid "Delete file" +msgstr "" + +#: includes/include.upl_files_overview.php:791 +msgid "Do you really want to delete the following file:
    " +msgstr "" + +#: includes/include.upl_files_overview.php:922 +#: includes/include.upl_search_results.php:605 +msgid "Enter new filename" +msgstr "" + +#: includes/include.upl_search_results.php:246 +#: includes/include.upl_search_results.php:251 +#: includes/include.upl_search_results.php:254 +msgid "Relevance" +msgstr "" + +#: includes/include.upl_search_results.php:260 +msgid "Searched for:" +msgstr "" + +#: includes/include.system_sysvalues.php:79 +#: includes/include.system_sysvalues.php:123 +msgid "No error log entries found" +msgstr "" + +#: includes/include.system_sysvalues.php:83 +msgid "No error log file found" +msgstr "" + +#: includes/include.system_sysvalues.php:116 +msgid "No install error log entries found" +msgstr "" + +#: includes/grouprights_lay.inc.php:85 includes/rights_lay.inc.php:75 +msgid "Layout name" +msgstr "" + +#: includes/include.js_files_overview.php:131 +#: includes/include.html_tpl_files_overview.php:132 +#: includes/include.system_db_backup.php:276 +#: includes/include.style_files_overview.php:131 +msgid "Delete File" +msgstr "" + +#: includes/include.js_files_overview.php:132 +#: includes/include.html_tpl_files_overview.php:133 +#: includes/include.style_files_overview.php:132 +#, php-format +msgid "Do you really want to delete the following file:

    %s
    " +msgstr "" + +#: includes/include.system_configuration.php:93 +msgid "Versioning activated" +msgstr "" + +#: includes/include.system_configuration.php:93 +#: includes/include.system_configuration.php:94 +#: includes/include.system_configuration.php:95 +msgid "Versioning" +msgstr "" + +#: includes/include.system_configuration.php:94 +msgid "Serverpath to version files" +msgstr "" + +#: includes/include.system_configuration.php:95 +msgid "Maximum number of stored versions" +msgstr "" + +#: includes/include.system_configuration.php:96 +msgid "Check for updates" +msgstr "" + +#: includes/include.system_configuration.php:96 +#: includes/include.system_configuration.php:97 +#: includes/include.system_configuration.php:98 +msgid "Update notifier" +msgstr "" + +#: includes/include.system_configuration.php:97 +msgid "Get news from conlite.org" +msgstr "" + +#: includes/include.system_configuration.php:98 +msgid "Update check period (minutes)" +msgstr "" + +#: includes/include.system_configuration.php:99 +msgid "Clickable menu in backend" +msgstr "" + +#: includes/include.system_configuration.php:99 +#: includes/include.system_configuration.php:100 +#: includes/include.system_configuration.php:101 +#: includes/include.system_configuration.php:102 +#: includes/include.system_configuration.php:103 +#: includes/include.system_configuration.php:104 +msgid "Backend" +msgstr "" + +#: includes/include.system_configuration.php:100 +msgid "Use passwordrequest in Backend" +msgstr "" + +#: includes/include.system_configuration.php:101 +msgid "Activate maintenance mode" +msgstr "" + +#: includes/include.system_configuration.php:102 +msgid "Use editarea for code highlighting" +msgstr "" + +#: includes/include.system_configuration.php:103 +msgid "Use TinyMce as insight editor" +msgstr "" + +#: includes/include.system_configuration.php:104 +msgid "Default client (ID)" +msgstr "" + +#: includes/include.system_configuration.php:105 +msgid "Mailserver host" +msgstr "" + +#: includes/include.system_configuration.php:105 +#: includes/include.system_configuration.php:106 +#: includes/include.system_configuration.php:107 +msgid "Mailserver" +msgstr "" + +#: includes/include.system_configuration.php:106 +msgid "Mailserver sender mail" +msgstr "" + +#: includes/include.system_configuration.php:107 +msgid "Mailserver sender name" +msgstr "" + +#: includes/include.system_configuration.php:109 +msgid "Generate basehref" +msgstr "" + +#: includes/include.system_configuration.php:109 +#: includes/include.system_configuration.php:110 +msgid "Development" +msgstr "" + +#: includes/include.system_configuration.php:110 +msgid "Use image magic (if available)" +msgstr "" + +#: includes/include.system_configuration.php:123 +msgid "Update check period must be at least 60 minutes." +msgstr "" + +#: includes/include.system_configuration.php:142 +msgid "System Configuration" +msgstr "" + +#: includes/include.system_configuration.php:192 +msgid "Access denied" +msgstr "" + +#: includes/include.con_editcontent.php:216 +msgid "Close editor" +msgstr "" + +#: includes/include.con_editcontent.php:217 +msgid "Close editor and save changes" +msgstr "" + +#: includes/include.con_editcontent.php:218 +msgid "Do you want to save changes?" +msgstr "" + +#: includes/include.con_editcontent.php:380 +msgid "No template assigned to the category
    and/or the article" +msgstr "" + +#: includes/include.con_editcontent.php:381 +msgid "The code for the following article
    couldnt be generated:" +msgstr "" + +#: includes/include.con_editcontent.php:397 includes/include.lang_edit.php:247 +#: includes/include.lang_edit.php:249 main.loginform.php:193 +msgid "Language" +msgstr "" + +#: includes/include.con_left_top.php:135 +msgid "Ignore" +msgstr "" + +#: includes/include.con_left_top.php:138 +msgid "Date published" +msgstr "" + +#: includes/include.con_left_top.php:141 +msgid "Article Search" +msgstr "" + +#: includes/include.con_left_top.php:250 +msgid "Title/Content" +msgstr "" + +#: includes/include.con_left_top.php:255 +msgid "Article ID" +msgstr "" + +#: includes/include.con_left_top.php:260 +msgid "Datum" +msgstr "" + +#: includes/include.con_left_top.php:265 +msgid "Date from" +msgstr "" + +#: includes/include.con_left_top.php:270 +msgid "Date to" +msgstr "" + +#: includes/include.con_left_top.php:291 +msgid "Saved Searches" +msgstr "" + +#: includes/include.con_left_top.php:302 +#: includes/include.mycontenido_lastarticles.php:137 +#: includes/main.login.php:184 +msgid "Recently edited articles" +msgstr "" + +#: includes/include.con_left_top.php:306 +msgid "My articles" +msgstr "" + +#: includes/include.con_left_top.php:311 +msgid "Workflow" +msgstr "" + +#: includes/include.con_left_top.php:374 +#: includes/include.frontend.user_edit.php:241 +#: includes/include.str_overview.php:188 includes/include.str_overview.php:656 +#: includes/include.tpl_edit_form.php:87 includes/include.tpl_edit_form.php:92 +#: includes/include.tpl_edit_form.php:206 +#: includes/include.tplcfg_edit_form.php:309 +#: includes/include.rights_overview.php:455 +#: includes/include.tpl_visualedit.php:146 +msgid "none" +msgstr "" + +#: includes/include.con_left_top.php:379 +msgid "Edit Category" +msgstr "" + +#: includes/include.con_left_top.php:395 +msgid "Template:" +msgstr "" + +#: includes/include.con_left_top.php:404 includes/include.con_left_top.php:405 +msgid "Configure Category" +msgstr "" + +#: includes/include.con_left_top.php:407 includes/include.con_left_top.php:408 +msgid "Online / Offline" +msgstr "" + +#: includes/include.con_left_top.php:410 includes/include.con_left_top.php:411 +msgid "Lock / Unlock" +msgstr "" + +#: includes/include.con_left_top.php:428 +msgid "close all" +msgstr "" + +#: includes/include.con_left_top.php:429 +msgid "open all" +msgstr "" + +#: includes/include.con_left_top.php:439 +msgid "Synchronize from" +msgstr "" + +#: includes/include.con_left_top.php:472 includes/include.con_left_top.php:473 +msgid "Copy to current language" +msgstr "" + +#: includes/include.con_left_top.php:474 includes/include.con_left_top.php:475 +msgid "Also copy subcategories" +msgstr "" + +#: includes/include.style_edit_form.php:180 +#: includes/include.html_tpl_edit_form.php:197 +#: includes/include.js_edit_form.php:159 +msgid "Edit file" +msgstr "" + +#: includes/include.style_edit_form.php:199 +#: includes/include.html_tpl_edit_form.php:215 +#: includes/include.style_history.php:162 includes/include.js_history.php:157 +#: includes/include.lay_edit_form.php:206 +#: includes/include.lay_edit_form.php:217 includes/include.lay_history.php:122 +#: includes/include.js_edit_form.php:177 +#: includes/include.html_tpl_history.php:165 +msgid "Code" +msgstr "" + +#: includes/include.frontend.group.subnav.php:40 includes/main.login.php:183 +msgid "Overview" +msgstr "" + +#: includes/include.mycontenido_settings.php:57 +msgid "Old password incorrect" +msgstr "" + +#: includes/include.mycontenido_settings.php:62 +#: includes/include.rights_overview.php:132 +#: includes/include.rights_create.php:122 +msgid "Passwords don't match" +msgstr "" + +#: includes/include.mycontenido_settings.php:77 +msgid "Password changed" +msgstr "" + +#: includes/include.mycontenido_settings.php:97 +#, php-format +msgid "Settings for %s" +msgstr "" + +#: includes/include.mycontenido_settings.php:115 +msgid "Old password" +msgstr "" + +#: includes/include.mycontenido_settings.php:116 +#: includes/include.frontend.user_edit.php:190 +#: includes/include.rights_overview.php:217 +#: includes/include.rights_create.php:162 +msgid "New password" +msgstr "" + +#: includes/include.mycontenido_settings.php:117 +#: includes/include.rights_overview.php:223 +#: includes/include.rights_create.php:168 +msgid "Confirm new password" +msgstr "" + +#: includes/include.mycontenido_settings.php:121 +#: includes/include.rights_overview.php:230 +#: includes/include.rights_create.php:174 +msgid "E-Mail" +msgstr "" + +#: includes/include.mycontenido_settings.php:125 +msgid "Use WYSIWYG Editor" +msgstr "" + +#: includes/include.mycontenido_settings.php:129 +msgid "The format is equal to PHP's date() function." +msgstr "" + +#: includes/include.mycontenido_settings.php:131 +msgid "Common date formattings" +msgstr "" + +#: includes/include.mycontenido_settings.php:141 +#: includes/include.lang_edit.php:254 +msgid "Date/Time format" +msgstr "" + +#: includes/include.mycontenido_settings.php:142 +#: includes/include.lang_edit.php:255 +msgid "Date format" +msgstr "" + +#: includes/include.mycontenido_settings.php:143 +#: includes/include.lang_edit.php:253 includes/include.lang_edit.php:256 +msgid "Time format" +msgstr "" + +#: includes/include.html_tpl_edit_form.php:185 +#: includes/include.lay_edit_form.php:173 +#, php-format +msgid "Tag '%s' %s has no end tag (start tag is on line %s char %s)" +msgstr "" + +#: includes/include.system_purge.php:79 includes/include.system_purge.php:87 +#: includes/include.system_purge.php:95 includes/include.system_purge.php:103 +#: includes/include.system_purge.php:112 +msgid "Client " +msgstr "" + +#: includes/include.system_purge.php:80 includes/include.system_purge.php:128 +#: includes/include.system_purge.php:135 +#, php-format +msgid "The entries of %s table are not deleted!" +msgstr "" + +#: includes/include.system_purge.php:88 +#, php-format +msgid "The %s is not updated!" +msgstr "" + +#: includes/include.system_purge.php:96 +msgid "The cache is not deleted!" +msgstr "" + +#: includes/include.system_purge.php:104 +msgid "The log is not deleted!" +msgstr "" + +#: includes/include.system_purge.php:113 +msgid "The history is not deleted!" +msgstr "" + +#: includes/include.system_purge.php:143 +msgid "The contenido log is not cleaned!" +msgstr "" + +#: includes/include.system_purge.php:150 +msgid "The contenido cache is not deleted!" +msgstr "" + +#: includes/include.system_purge.php:157 +msgid "The contenido cronjobs are not cleaned!" +msgstr "" + +#: includes/include.system_purge.php:164 +msgid "Update of sequence table not completed!" +msgstr "" + +#: includes/include.system_purge.php:169 +msgid "The changes were successfully executed." +msgstr "" + +#: includes/include.system_purge.php:171 +msgid "The changes were not all successfully completed." +msgstr "" + +#: includes/include.system_purge.php:190 includes/include.system_purge.php:214 +msgid "System purge" +msgstr "" + +#: includes/include.system_purge.php:191 +msgid "No Client selected!" +msgstr "" + +#: includes/include.system_purge.php:196 +msgid "all clients" +msgstr "" + +#: includes/include.system_purge.php:197 +msgid "from list" +msgstr "" + +#: includes/include.system_purge.php:198 +msgid "Select clients" +msgstr "" + +#: includes/include.system_purge.php:199 includes/include.system_purge.php:201 +#: includes/include.system_purge.php:209 +#, php-format +msgid "Reset the table %s" +msgstr "" + +#: includes/include.system_purge.php:200 +#, php-format +msgid "Activate the code generation in %s" +msgstr "" + +#: includes/include.system_purge.php:202 +msgid "Clear client cache" +msgstr "" + +#: includes/include.system_purge.php:203 +msgid "Clear client log file" +msgstr "" + +#: includes/include.system_purge.php:204 +msgid "Clear client history" +msgstr "" + +#: includes/include.system_purge.php:205 +msgid "Keep last histories" +msgstr "" + +#: includes/include.system_purge.php:207 +msgid "Contenido" +msgstr "" + +#: includes/include.system_purge.php:208 +msgid "Clear contenido log file" +msgstr "" + +#: includes/include.system_purge.php:210 +msgid "Clear contenido cache" +msgstr "" + +#: includes/include.system_purge.php:211 +msgid "Reset cronjobs" +msgstr "" + +#: includes/include.system_purge.php:212 +msgid "Update sequence table" +msgstr "" + +#: includes/include.system_purge.php:215 +msgid "These changes can not be cancelled." +msgstr "" + +#: includes/include.system_purge.php:215 +msgid "Do you really want to complete it?" +msgstr "" + +#: includes/include.system_purge.php:220 +msgid "No action selected!" +msgstr "" + +#: includes/include.system_purge.php:222 +msgid "Send" +msgstr "" + +#: includes/cfg_language_de.inc.php:99 +msgid "Make category online" +msgstr "" + +#: includes/cfg_language_de.inc.php:100 +msgid "Change template" +msgstr "" + +#: includes/cfg_language_de.inc.php:101 +msgid "Set start article" +msgstr "" + +#: includes/cfg_language_de.inc.php:102 +msgid "Make article online" +msgstr "" + +#: includes/cfg_language_de.inc.php:103 +msgid "Syncronize Category" +msgstr "" + +#: includes/cfg_language_de.inc.php:104 +msgid "Syncronize Article" +msgstr "" + +#: includes/cfg_language_de.inc.php:107 +msgid "Edit template configuration" +msgstr "" + +#: includes/cfg_language_de.inc.php:108 +msgid "Duplicate Article" +msgstr "" + +#: includes/cfg_language_de.inc.php:109 +msgid "Expand boxes" +msgstr "" + +#: includes/cfg_language_de.inc.php:111 +msgid "Create article" +msgstr "" + +#: includes/cfg_language_de.inc.php:112 +msgid "Configure article" +msgstr "" + +#: includes/cfg_language_de.inc.php:113 +msgid "Save article" +msgstr "" + +#: includes/cfg_language_de.inc.php:114 includes/include.con_edit_form.php:391 +msgid "Remove assignments" +msgstr "" + +#: includes/cfg_language_de.inc.php:115 includes/cfg_language_de.inc.php:117 +msgid "Edit article" +msgstr "" + +#: includes/cfg_language_de.inc.php:116 +msgid "Edit article properties" +msgstr "" + +#: includes/cfg_language_de.inc.php:118 +msgid "Help" +msgstr "" + +#: includes/cfg_language_de.inc.php:121 +msgid "New category" +msgstr "" + +#: includes/cfg_language_de.inc.php:122 +msgid "Set category on- or offline" +msgstr "" + +#: includes/cfg_language_de.inc.php:123 +msgid "Disable category" +msgstr "" + +#: includes/cfg_language_de.inc.php:125 +msgid "Frontend access" +msgstr "" + +#: includes/cfg_language_de.inc.php:126 +msgid "Delete category" +msgstr "" + +#: includes/cfg_language_de.inc.php:127 +msgid "Move category up" +msgstr "" + +#: includes/cfg_language_de.inc.php:128 +msgid "Move category down" +msgstr "" + +#: includes/cfg_language_de.inc.php:130 +msgid "Create new tree" +msgstr "" + +#: includes/cfg_language_de.inc.php:133 +msgid "Edit category" +msgstr "" + +#: includes/cfg_language_de.inc.php:135 includes/cfg_language_de.inc.php:145 +msgid "Create directory" +msgstr "" + +#: includes/cfg_language_de.inc.php:136 includes/cfg_language_de.inc.php:144 +#: includes/include.upl_files_upload.php:63 +msgid "Upload files" +msgstr "" + +#: includes/cfg_language_de.inc.php:137 +msgid "Delete files" +msgstr "" + +#: includes/cfg_language_de.inc.php:138 +msgid "Remove directory" +msgstr "" + +#: includes/cfg_language_de.inc.php:139 +msgid "Rename directory" +msgstr "" + +#: includes/cfg_language_de.inc.php:140 +msgid "Modify file" +msgstr "" + +#: includes/cfg_language_de.inc.php:141 +msgid "Rename file" +msgstr "" + +#: includes/cfg_language_de.inc.php:142 +msgid "Multidelete Files" +msgstr "" + +#: includes/cfg_language_de.inc.php:147 includes/include.lay_overview.php:92 +msgid "Delete layout" +msgstr "" + +#: includes/cfg_language_de.inc.php:148 +msgid "Modify layout" +msgstr "" + +#: includes/cfg_language_de.inc.php:149 +msgid "Create layout" +msgstr "" + +#: includes/cfg_language_de.inc.php:150 includes/cfg_language_de.inc.php:155 +#: includes/cfg_language_de.inc.php:201 includes/cfg_language_de.inc.php:207 +#: includes/cfg_language_de.inc.php:213 +msgid "Manage History" +msgstr "" + +#: includes/cfg_language_de.inc.php:151 includes/cfg_language_de.inc.php:156 +#: includes/cfg_language_de.inc.php:202 includes/cfg_language_de.inc.php:208 +#: includes/cfg_language_de.inc.php:214 +msgid "Truncate History" +msgstr "" + +#: includes/cfg_language_de.inc.php:154 includes/include.mod_overview.php:234 +msgid "Delete module" +msgstr "" + +#: includes/cfg_language_de.inc.php:157 includes/include.mod_edit_form.php:124 +msgid "Edit module" +msgstr "" + +#: includes/cfg_language_de.inc.php:158 +msgid "Create module" +msgstr "" + +#: includes/cfg_language_de.inc.php:159 +msgid "Import/Export module" +msgstr "" + +#: includes/cfg_language_de.inc.php:160 +msgid "Translate modules" +msgstr "" + +#: includes/cfg_language_de.inc.php:161 +msgid "Translation import/export" +msgstr "" + +#: includes/cfg_language_de.inc.php:162 +msgid "Import/Export package" +msgstr "" + +#: includes/cfg_language_de.inc.php:164 includes/include.tpl_overview.php:99 +msgid "Delete template" +msgstr "" + +#: includes/cfg_language_de.inc.php:165 includes/include.tpl_edit_form.php:149 +msgid "Edit template" +msgstr "" + +#: includes/cfg_language_de.inc.php:166 +msgid "Create template" +msgstr "" + +#: includes/cfg_language_de.inc.php:169 +msgid "Visual edit" +msgstr "" + +#: includes/cfg_language_de.inc.php:172 +#: includes/include.frontend.left_top.php:397 +#: includes/include.rights_menu.php:135 +#: includes/include.frontend.user_menu.php:275 +msgid "Delete user" +msgstr "" + +#: includes/cfg_language_de.inc.php:173 +msgid "Save user area rights" +msgstr "" + +#: includes/cfg_language_de.inc.php:175 +msgid "Edit rights" +msgstr "" + +#: includes/cfg_language_de.inc.php:176 +#: includes/include.frontend.user_edit.php:181 +msgid "Edit user" +msgstr "" + +#: includes/cfg_language_de.inc.php:178 +msgid "Delete group members" +msgstr "" + +#: includes/cfg_language_de.inc.php:179 +msgid "Add group members" +msgstr "" + +#: includes/cfg_language_de.inc.php:180 +#: includes/include.frontend.group_edit.php:275 +msgid "Edit group" +msgstr "" + +#: includes/cfg_language_de.inc.php:181 +#: includes/include.grouprights_left_top.php:90 +#: includes/include.frontend.left_top.php:442 +msgid "Create group" +msgstr "" + +#: includes/cfg_language_de.inc.php:182 +#: includes/include.grouprights_menu.php:196 +msgid "Delete group" +msgstr "" + +#: includes/cfg_language_de.inc.php:184 +msgid "Show statistics" +msgstr "" + +#: includes/cfg_language_de.inc.php:186 includes/include.lang_overview.php:68 +msgid "Activate language" +msgstr "" + +#: includes/cfg_language_de.inc.php:187 includes/include.lang_overview.php:72 +msgid "Deactivate language" +msgstr "" + +#: includes/cfg_language_de.inc.php:188 +msgid "Rename language" +msgstr "" + +#: includes/cfg_language_de.inc.php:189 includes/include.lang_left_top.php:80 +msgid "Create language" +msgstr "" + +#: includes/cfg_language_de.inc.php:190 includes/include.lang_overview.php:78 +msgid "Delete language" +msgstr "" + +#: includes/cfg_language_de.inc.php:191 includes/include.lang_edit.php:242 +msgid "Edit language" +msgstr "" + +#: includes/cfg_language_de.inc.php:193 +msgid "Linkchecker" +msgstr "" + +#: includes/cfg_language_de.inc.php:194 +msgid "Linkchecker Whitelist" +msgstr "" + +#: includes/cfg_language_de.inc.php:196 +msgid "Install/Remove plugins" +msgstr "" + +#: includes/cfg_language_de.inc.php:198 +msgid "Modify CSS" +msgstr "" + +#: includes/cfg_language_de.inc.php:199 +msgid "Create CSS" +msgstr "" + +#: includes/cfg_language_de.inc.php:200 +msgid "Delete CSS" +msgstr "" + +#: includes/cfg_language_de.inc.php:204 +msgid "Edit script" +msgstr "" + +#: includes/cfg_language_de.inc.php:205 +msgid "Delete script" +msgstr "" + +#: includes/cfg_language_de.inc.php:206 includes/include.js_left_top.php:50 +msgid "Create script" +msgstr "" + +#: includes/cfg_language_de.inc.php:210 +msgid "Modify HTML-Template" +msgstr "" + +#: includes/cfg_language_de.inc.php:211 +msgid "Create HTML-Template" +msgstr "" + +#: includes/cfg_language_de.inc.php:212 +msgid "Delete HTML-Template" +msgstr "" + +#: includes/cfg_language_de.inc.php:216 +msgid "Edit newsletter" +msgstr "" + +#: includes/cfg_language_de.inc.php:218 +msgid "Delete newsletter" +msgstr "" + +#: includes/cfg_language_de.inc.php:219 +msgid "Duplicate newsletter" +msgstr "" + +#: includes/cfg_language_de.inc.php:220 +msgid "Add newsletter dispatch job" +msgstr "" + +#: includes/cfg_language_de.inc.php:221 +msgid "Change global HTML newsletter settings" +msgstr "" + +#: includes/cfg_language_de.inc.php:222 +msgid "Send test newsletter (to groups)" +msgstr "" + +#: includes/cfg_language_de.inc.php:223 +msgid "Delete dispatch job" +msgstr "" + +#: includes/cfg_language_de.inc.php:224 +msgid "Remove recipient from dispatch job" +msgstr "" + +#: includes/cfg_language_de.inc.php:225 +msgid "Run job" +msgstr "" + +#: includes/cfg_language_de.inc.php:226 +msgid "View dispatch job details" +msgstr "" + +#: includes/cfg_language_de.inc.php:228 +msgid "Edit recipient" +msgstr "" + +#: includes/cfg_language_de.inc.php:230 +msgid "Delete recipient" +msgstr "" + +#: includes/cfg_language_de.inc.php:231 +msgid "Purge recipients" +msgstr "" + +#: includes/cfg_language_de.inc.php:232 +msgid "Import recipients" +msgstr "" + +#: includes/cfg_language_de.inc.php:233 +msgid "Execute recipients import" +msgstr "" + +#: includes/cfg_language_de.inc.php:234 +msgid "Delete recipient group" +msgstr "" + +#: includes/cfg_language_de.inc.php:236 +msgid "Delete recipient from group" +msgstr "" + +#: includes/cfg_language_de.inc.php:237 +msgid "Save recipient group" +msgstr "" + +#: includes/cfg_language_de.inc.php:239 +msgid "Edit own MyContenido settings" +msgstr "" + +#: includes/cfg_language_de.inc.php:240 +msgid "Delete reminder item" +msgstr "" + +#: includes/cfg_language_de.inc.php:241 +msgid "Save todo item" +msgstr "" + +#: includes/cfg_language_de.inc.php:243 +#: includes/include.client_left_top.php:50 +msgid "Create client" +msgstr "" + +#: includes/cfg_language_de.inc.php:244 +msgid "Edit client" +msgstr "" + +#: includes/cfg_language_de.inc.php:245 +msgid "Remove client" +msgstr "" + +#: includes/cfg_language_de.inc.php:246 +msgid "Delete clientsetting" +msgstr "" + +#: includes/cfg_language_de.inc.php:247 +msgid "Edit clientsetting" +msgstr "" + +#: includes/cfg_language_de.inc.php:248 +msgid "Save clientsetting" +msgstr "" + +#: includes/cfg_language_de.inc.php:249 +msgid "Create/Edit articlespecifications" +msgstr "" + +#: includes/cfg_language_de.inc.php:250 +msgid "Delete articlespecifications" +msgstr "" + +#: includes/cfg_language_de.inc.php:251 +msgid "Define default articlespecification" +msgstr "" + +#: includes/cfg_language_de.inc.php:252 +msgid "Edit articlespecifications" +msgstr "" + +#: includes/cfg_language_de.inc.php:253 +msgid "Make articlespecifications online" +msgstr "" + +#: includes/cfg_language_de.inc.php:255 +msgid "Save frontenduser" +msgstr "" + +#: includes/cfg_language_de.inc.php:256 +msgid "Create frontenduser" +msgstr "" + +#: includes/cfg_language_de.inc.php:257 includes/cfg_language_de.inc.php:263 +msgid "Delete frontenduser" +msgstr "" + +#: includes/cfg_language_de.inc.php:258 +msgid "Delete frontendgroup" +msgstr "" + +#: includes/cfg_language_de.inc.php:259 +msgid "Save frontendgroup" +msgstr "" + +#: includes/cfg_language_de.inc.php:260 includes/cfg_language_de.inc.php:261 +msgid "Create frontendgroup" +msgstr "" + +#: includes/cfg_language_de.inc.php:262 +msgid "Add frontendusers" +msgstr "" + +#: includes/cfg_language_de.inc.php:264 +msgid "Save frontendgroup permissions" +msgstr "" + +#: includes/cfg_language_de.inc.php:266 +msgid "Delete system property" +msgstr "" + +#: includes/cfg_language_de.inc.php:267 +msgid "Edit system property" +msgstr "" + +#: includes/cfg_language_de.inc.php:268 +msgid "Save system property" +msgstr "" + +#: includes/cfg_language_de.inc.php:270 +msgid "Empty log" +msgstr "" + +#: includes/cfg_language_de.inc.php:271 +msgid "Edit Systemconfigration" +msgstr "" + +#: includes/cfg_language_de.inc.php:272 +msgid "Do system purge" +msgstr "" + +#: includes/cfg_language_de.inc.php:274 +msgid "Show log" +msgstr "" + +#: includes/cfg_language_de.inc.php:276 main.loginform.php:197 +msgid "Login" +msgstr "" + +#: includes/cfg_language_de.inc.php:277 +msgid "Request password?" +msgstr "" + +#: includes/cfg_language_de.inc.php:279 +msgid "Delete note" +msgstr "" + +#: includes/cfg_language_de.inc.php:280 +msgid "Save note" +msgstr "" + +#: includes/cfg_language_de.inc.php:282 +msgid "Send mail" +msgstr "" + +#: includes/cfg_language_de.inc.php:283 +msgid "Fake permissions" +msgstr "" + +#: includes/include.mod_new.php:41 +msgid "New module" +msgstr "" + +#: includes/include.mod_new.php:44 +msgid "Sync module" +msgstr "" + +#: includes/include.mod_new.php:48 includes/include.js_left_top.php:54 +#: includes/include.tpl_new.php:41 includes/include.html_tpl_left_top.php:54 +#: includes/include.frontend.left_top.php:181 +#: includes/include.frontend.left_top.php:445 +#: includes/include.upl_left_top.php:53 includes/include.lay_new.php:40 +#: includes/include.lang_left_top.php:82 +#: includes/include.style_left_top.php:54 +msgid "No Client selected" +msgstr "" + +#: includes/include.mod_new.php:66 includes/include.frontend.left_top.php:193 +#: includes/include.rights_left_top.php:123 +#: includes/include.frontend.user_menu.php:114 +msgid "List options" +msgstr "" + +#: includes/include.mod_new.php:69 includes/include.mod_new.php:79 +#: includes/include.mod_new.php:99 +msgid "-- All --" +msgstr "" + +#: includes/include.mod_new.php:80 +msgid "Modulname" +msgstr "" + +#: includes/include.mod_new.php:83 includes/include.mod_edit_form.php:399 +#: includes/include.mod_edit_form.php:402 +msgid "Input" +msgstr "" + +#: includes/include.mod_new.php:84 includes/include.mod_edit_form.php:400 +#: includes/include.mod_edit_form.php:403 +msgid "Output" +msgstr "" + +#: includes/include.mod_new.php:100 +msgid "-- Without type --" +msgstr "" + +#: includes/include.mod_new.php:125 includes/include.frontend.left_top.php:249 +#: includes/include.rights_left_top.php:147 +msgid "Items / page" +msgstr "" + +#: includes/include.mod_new.php:129 includes/include.frontend.left_top.php:253 +#: includes/include.rights_left_top.php:151 +msgid "Sort by" +msgstr "" + +#: includes/include.mod_new.php:137 +msgid "Type filter" +msgstr "" + +#: includes/include.mod_new.php:141 includes/include.frontend.left_top.php:265 +#: includes/include.upl_left_top.php:74 +#: includes/include.rights_left_top.php:159 +msgid "Search for" +msgstr "" + +#: includes/include.mod_new.php:144 includes/include.frontend.left_top.php:269 +msgid "Search in" +msgstr "" + +#: includes/include.mod_new.php:149 includes/include.frontend.left_top.php:274 +#: includes/include.rights_left_top.php:164 +msgid "Apply" +msgstr "" + +#: includes/functions.lang.php:119 +msgid "" +"Could not set the language-ID in the file 'config.php'. Please set the " +"language manually." +msgstr "" + +#: includes/functions.lang.php:591 +msgid "Could not delete language" +msgstr "" + +#: includes/include.mycontenido.tasks.edit.php:43 +msgid "Edit Reminder item" +msgstr "" + +#: includes/include.mycontenido.tasks.edit.php:77 +msgid "E-Mail notification" +msgstr "" + +#: includes/include.mycontenido.tasks.edit.php:132 +#: includes/include.mycontenido.tasks.php:276 +msgid "Priority" +msgstr "" + +#: includes/include.mycontenido.tasks.edit.php:140 +msgid "Progress" +msgstr "" + +#: includes/include.logs.php:64 +msgid "Submit query" +msgstr "" + +#: includes/include.logs.php:75 +msgid "All users" +msgstr "" + +#: includes/include.logs.php:77 +msgid "All actions" +msgstr "" + +#: includes/include.logs.php:199 +msgid "Unlimited" +msgstr "" + +#: includes/include.logs.php:200 includes/include.logs.php:201 +#: includes/include.logs.php:202 includes/include.logs.php:203 +#: includes/include.logs.php:204 +msgid "Entries" +msgstr "" + +#: includes/include.logs.php:275 +msgid "No results" +msgstr "" + +#: includes/include.lang_overview.php:77 +#, php-format +msgid "Do you really want to delete the language %s?" +msgstr "" + +#: includes/include.lang_overview.php:103 includes/include.lang_edit.php:84 +msgid "New language" +msgstr "" + +#: includes/include.lang_overview.php:118 +msgid "Language deleted" +msgstr "" + +#: includes/include.grouprights_overview.php:67 +msgid "Changes couldn't saved" +msgstr "" + +#: includes/include.grouprights_overview.php:112 +msgid "Groupname" +msgstr "" + +#: includes/include.grouprights_overview.php:129 +#: includes/include.grouprights_create.php:123 +#: includes/include.rights_overview.php:271 +#: includes/include.rights_create.php:215 +msgid "System administrator" +msgstr "" + +#: includes/include.grouprights_overview.php:147 +#: includes/include.grouprights_create.php:141 +#: includes/include.rights_overview.php:289 +#: includes/include.rights_create.php:233 +msgid "Administrator" +msgstr "" + +#: includes/include.grouprights_overview.php:163 +#: includes/include.grouprights_create.php:156 +#: includes/include.rights_overview.php:305 +#: includes/include.rights_create.php:248 +msgid "Access clients" +msgstr "" + +#: includes/include.grouprights_overview.php:180 +#: includes/include.grouprights_create.php:172 +#: includes/include.rights_overview.php:322 +#: includes/include.rights_create.php:263 +msgid "Access languages" +msgstr "" + +#: includes/include.grouprights_overview.php:208 +#: includes/include.rights_overview.php:352 +msgid "Area/Type" +msgstr "" + +#: includes/include.grouprights_overview.php:222 +#: includes/include.rights_overview.php:366 +msgid "User-defined properties" +msgstr "" + +#: includes/include.mod_translate.php:138 +#, php-format +msgid "Translate module '%s'" +msgstr "" + +#: includes/include.mod_translate.php:147 +msgid "Translated Name" +msgstr "" + +#: includes/include.mod_translate.php:157 +msgid "Original module string" +msgstr "" + +#: includes/include.mod_translate.php:157 +#, php-format +msgid "Translation for %s" +msgstr "" + +#: includes/include.mod_translate.php:165 +msgid "" +"Hint: Hit ALT+SHIFT+S to save the translated entry and advance to the next " +"string." +msgstr "" + +#: includes/include.mod_translate.php:166 +msgid "String list" +msgstr "" + +#: includes/include.grouprights_menu.php:178 +#, php-format +msgid "Do you really want to delete the group %s?" +msgstr "" + +#: includes/include.grouprights_menu.php:197 +#, php-format +msgid "Do you really want to delete the following group:

    %s
    " +msgstr "" + +#: includes/grouprights_mod.inc.php:73 includes/rights_mod.inc.php:75 +msgid "Module name" +msgstr "" + +#: includes/include.style_history.php:62 includes/include.js_history.php:60 +#: includes/include.lay_history.php:51 +#: includes/include.html_tpl_history.php:64 +#: includes/include.mod_history.php:57 +msgid "Versioning is not activated" +msgstr "" + +#: includes/include.style_history.php:126 +msgid "Edit Style" +msgstr "" + +#: includes/include.style_history.php:163 includes/include.js_history.php:158 +#: includes/include.lay_history.php:123 +#: includes/include.html_tpl_history.php:166 +#: includes/include.mod_history.php:135 +msgid "Copy to current" +msgstr "" + +#: includes/include.style_history.php:176 +#: includes/include.style_history.php:184 includes/include.js_history.php:179 +msgid "No style history available" +msgstr "" + +#: includes/include.style_history.php:182 includes/include.js_history.php:177 +#: includes/include.lay_history.php:135 +#: includes/include.html_tpl_history.php:185 +#: includes/include.mod_history.php:150 +msgid "Version history was cleared" +msgstr "" + +#: includes/include.CMS_HTMLHEAD.php:100 includes/include.CMS_HTML.php:98 +msgid "Save without leaving the editor" +msgstr "" + +#: includes/include.CMS_HTMLHEAD.php:101 includes/include.CMS_HTML.php:99 +msgid "Save and close editor" +msgstr "" + +#: includes/include.CMS_LINK.php:142 includes/include.CMS_SIMPLELINK.php:139 +#, php-format +msgid "Edit link for container %s" +msgstr "" + +#: includes/include.CMS_LINK.php:153 +msgid "External link" +msgstr "" + +#: includes/include.CMS_LINK.php:210 +msgid "Internal link" +msgstr "" + +#: includes/include.CMS_LINK.php:240 +msgid "Link to a document" +msgstr "" + +#: includes/include.CMS_LINK.php:270 +msgid "Link to an image" +msgstr "" + +#: includes/include.CMS_LINK.php:285 +msgid "Link to an archive" +msgstr "" + +#: includes/include.CMS_LINK.php:300 +msgid "Link to a media file" +msgstr "" + +#: includes/include.CMS_LINK.php:316 +msgid "Link to any file" +msgstr "" + +#: includes/include.CMS_LINK.php:340 +msgid "Upload file" +msgstr "" + +#: includes/include.CMS_LINK.php:345 +msgid "Target frame" +msgstr "" + +#: includes/include.CMS_LINK.php:353 +msgid "Open link in new window" +msgstr "" + +#: includes/include.CMS_LINK.php:375 +msgid "Open in new window" +msgstr "" + +#: includes/include.grouprights_left_top.php:60 +#: includes/include.rights_left_top.php:77 +msgid "Frontend only" +msgstr "" + +#: includes/include.grouprights_left_top.php:61 +#: includes/include.rights_left_top.php:78 +msgid "Backend only" +msgstr "" + +#: includes/include.tpl_new.php:39 +msgid "New template" +msgstr "" + +#: includes/include.frontend.group_edit.php:56 +msgid "-- new group --" +msgstr "" + +#: includes/include.frontend.group_edit.php:121 +msgid "Could not set new group name: Group already exists" +msgstr "" + +#: includes/include.frontend.group_edit.php:221 +#: includes/include.grouprights_create.php:102 +msgid "Group name" +msgstr "" + +#: includes/include.frontend.group_edit.php:227 +msgid "Default group" +msgstr "" + +#: includes/include.js_history.php:125 +#: includes/include.html_tpl_history.php:129 +msgid "Edit JScript" +msgstr "" + +#: includes/include.js_history.php:171 +msgid "No jscript history available" +msgstr "" + +#: includes/include.html_tpl_left_top.php:50 +msgid "Create module template" +msgstr "" + +#: includes/grouprights.inc.php:215 +msgid "Current group doesn't have any rights to any client/language." +msgstr "" + +#: includes/include.lay_preview.php:39 includes/include.tpl_visualedit.php:83 +msgid "No such layout" +msgstr "" + +#: includes/include.con_edit_form.php:253 +msgid "Articlelink" +msgstr "" + +#: includes/include.con_edit_form.php:260 +msgid "Select an entry to display link" +msgstr "" + +#: includes/include.con_edit_form.php:261 +msgid "Article only" +msgstr "" + +#: includes/include.con_edit_form.php:262 +msgid "Article with Category" +msgstr "" + +#: includes/include.con_edit_form.php:263 +msgid "Article with Category and Language" +msgstr "" + +#: includes/include.con_edit_form.php:264 +msgid "Article with Language" +msgstr "" + +#: includes/include.con_edit_form.php:278 +msgid "Author (Creator)" +msgstr "" + +#: includes/include.con_edit_form.php:288 +msgid "Author (Modifier)" +msgstr "" + +#: includes/include.con_edit_form.php:289 +msgid "Last modified" +msgstr "" + +#: includes/include.con_edit_form.php:293 +msgid "Publishing date" +msgstr "" + +#: includes/include.con_edit_form.php:300 +msgid "Publisher" +msgstr "" + +#: includes/include.con_edit_form.php:308 +msgid "Redirect" +msgstr "" + +#: includes/include.con_edit_form.php:324 +msgid "New Window" +msgstr "" + +#: includes/include.con_edit_form.php:393 +msgid "Remove multiple category assignments" +msgstr "" + +#: includes/include.con_edit_form.php:394 +msgid "" +"Do you really want to remove the assignments to all categories except the " +"current one?" +msgstr "" + +#: includes/include.con_edit_form.php:410 +msgid "" +"Language parts of the articles are existing in other languages and are " +"online. To change the category assignment, please set the other articles " +"offline first." +msgstr "" + +#: includes/include.con_edit_form.php:549 +msgid "Choose Startdate" +msgstr "" + +#: includes/include.con_edit_form.php:550 +msgid "Choose Enddate" +msgstr "" + +#: includes/include.con_edit_form.php:648 +msgid "Select date" +msgstr "" + +#: includes/include.con_edit_form.php:685 +msgid "Summary" +msgstr "" + +#: includes/include.stat_menu.php:37 +msgid "Current Report" +msgstr "" + +#: includes/include.stat_menu.php:45 +msgid "Statistics Overview" +msgstr "" + +#: includes/include.stat_menu.php:56 +msgid "Archived Statistics" +msgstr "" + +#: includes/grouprights_members.inc.php:208 +msgid "Manage group members" +msgstr "" + +#: includes/include.CMS_EASYIMG.php:146 includes/include.CMS_IMG.php:186 +#, php-format +msgid "Edit image for container %s" +msgstr "" + +#: includes/include.CMS_EASYIMG.php:153 +msgid "Upload image" +msgstr "" + +#: includes/functions.tpl.php:433 includes/functions.con.php:1837 +#: includes/functions.str.php:1387 +#, php-format +msgid "%s (Copy)" +msgstr "" + +#: includes/include.frontend.user_edit.php:50 +#: includes/include.frontend.user_edit.php:74 +#: includes/include.frontend.user_edit.php:111 +msgid "-- new user --" +msgstr "" + +#: includes/include.frontend.user_edit.php:114 +msgid "Username empty or not set! Please choose one." +msgstr "" + +#: includes/include.frontend.user_edit.php:119 +msgid "Password not set right now!" +msgstr "" + +#: includes/include.frontend.user_edit.php:125 +msgid "Could not set new username: Username already exists" +msgstr "" + +#: includes/include.frontend.user_edit.php:132 +msgid "Could not set new password: Passwords don't match" +msgstr "" + +#: includes/include.frontend.user_edit.php:189 +#: includes/include.rights_left_top.php:115 +msgid "User name" +msgstr "" + +#: includes/include.frontend.user_edit.php:191 +msgid "New password (again)" +msgstr "" + +#: includes/include.frontend.user_edit.php:192 +#: includes/include.lang_edit.php:245 +msgid "Active" +msgstr "" + +#: includes/include.frontend.user_edit.php:219 +msgid "WARNING" +msgstr "" + +#: includes/include.frontend.user_edit.php:219 +#, php-format +msgid "" +"The plugin %s delivered an array for the displayed titles, but did not " +"return an array for the contents." +msgstr "" + +#: includes/include.frontend.user_edit.php:244 +#: includes/include.rights_overview.php:458 +msgid "Group membership" +msgstr "" + +#: includes/functions.system.php:55 +msgid "Can't clear install error log : Access is denied!" +msgstr "" + +#: includes/functions.system.php:60 +msgid "error log successfully cleared" +msgstr "" + +#: includes/functions.system.php:278 +msgid "Contenido version" +msgstr "" + +#: includes/functions.system.php:281 +msgid "Contenido path" +msgstr "" + +#: includes/functions.system.php:283 +msgid "Contenido HTML path" +msgstr "" + +#: includes/functions.system.php:285 +msgid "Contenido full HTML path" +msgstr "" + +#: includes/functions.system.php:287 +msgid "Contenido frontend path" +msgstr "" + +#: includes/functions.system.php:289 +msgid "Contenido PHPLIB path" +msgstr "" + +#: includes/functions.system.php:291 +msgid "Contenido wysiwyg path" +msgstr "" + +#: includes/functions.system.php:293 +msgid "Contenido wysiwyg HTML path" +msgstr "" + +#: includes/functions.system.php:296 +msgid "Host name" +msgstr "" + +#: includes/functions.system.php:299 +msgid "Browser path" +msgstr "" + +#: includes/functions.system.php:321 +msgid "client settings" +msgstr "" + +#: includes/functions.system.php:322 +msgid "values" +msgstr "" + +#: includes/functions.system.php:353 +msgid "language(s)" +msgstr "" + +#: includes/functions.system.php:362 +msgid "htmlpath" +msgstr "" + +#: includes/functions.system.php:366 +msgid "frontendpath" +msgstr "" + +#: includes/functions.system.php:378 +msgid "No permissions!" +msgstr "" + +#: includes/functions.system.php:384 +msgid "Number of installed clients: " +msgstr "" + +#: includes/functions.system.php:387 +msgid "Client informations" +msgstr "" + +#: includes/functions.system.php:394 +msgid "Number of users" +msgstr "" + +#: includes/functions.system.php:401 includes/include.stat_overview.php:91 +msgid "Number of articles" +msgstr "" + +#: includes/functions.system.php:404 +msgid "Server operating system" +msgstr "" + +#: includes/functions.system.php:408 +msgid "PHP database extension" +msgstr "" + +#: includes/functions.system.php:410 +msgid "Database server version" +msgstr "" + +#: includes/functions.system.php:413 +msgid "Installed PHP version" +msgstr "" + +#: includes/functions.system.php:418 includes/functions.system.php:422 +#: includes/functions.system.php:426 includes/functions.system.php:447 +msgid "activated" +msgstr "" + +#: includes/functions.system.php:418 includes/functions.system.php:422 +#: includes/functions.system.php:426 includes/functions.system.php:447 +msgid "deactivated" +msgstr "" + +#: includes/functions.system.php:439 +msgid "nothing disabled" +msgstr "" + +#: includes/functions.system.php:440 +msgid "Disabled functions" +msgstr "" + +#: includes/functions.system.php:443 +msgid "loaded" +msgstr "" + +#: includes/functions.system.php:443 +msgid "not loaded" +msgstr "" + +#: includes/functions.system.php:444 +msgid "Gettext extension" +msgstr "" + +#: includes/functions.system.php:455 includes/main.login.php:186 +msgid "Settings" +msgstr "" + +#: includes/functions.system.php:456 +msgid "Values" +msgstr "" + +#: includes/functions.system.php:473 +msgid "GD library" +msgstr "" + +#: includes/functions.system.php:636 +msgid "an error occured while sending your bug report! Please try again" +msgstr "" + +#: includes/functions.system.php:639 +msgid "bug report forwarded" +msgstr "" + +#: includes/functions.system.php:645 +msgid "please fill out all mandatory fields" +msgstr "" + +#: includes/functions.system.php:649 +msgid "please enter a valid E-Mail adress" +msgstr "" + +#: includes/functions.system.php:653 +msgid "you must agree the declaration of consent" +msgstr "" + +#: includes/rights_con.inc.php:223 includes/grouprights_str.inc.php:212 +#: includes/rights_str.inc.php:217 includes/grouprights_con.inc.php:237 +msgid "" +"Apply rights for this category to all categories on the same level or above" +msgstr "" + +#: includes/rights_con.inc.php:224 includes/grouprights_str.inc.php:213 +#: includes/rights_str.inc.php:218 includes/grouprights_con.inc.php:238 +msgid "" +"Apply rights for this category to all categories below the current category" +msgstr "" + +#: includes/rights_con.inc.php:227 includes/grouprights_str.inc.php:215 +#: includes/include.str_overview.php:169 includes/rights_str.inc.php:221 +#: includes/include.upl_dirs_overview.php:56 +#: includes/grouprights_con.inc.php:241 includes/functions.stat.php:313 +#: includes/functions.stat.php:314 includes/functions.stat.php:644 +#: includes/functions.stat.php:645 +msgid "Open category" +msgstr "" + +#: includes/rights_con.inc.php:227 includes/grouprights_str.inc.php:215 +#: includes/include.str_overview.php:174 includes/rights_str.inc.php:221 +#: includes/include.upl_dirs_overview.php:60 +#: includes/grouprights_con.inc.php:241 +msgid "Close category" +msgstr "" + +#: includes/include.frontend.left_top.php:58 +#: includes/include.frontend.user_menu.php:53 +msgid "-- All fields --" +msgstr "" + +#: includes/include.frontend.left_top.php:58 +#: includes/include.frontend.left_top.php:59 +#: includes/include.rights_overview.php:203 +#: includes/include.frontend.user_menu.php:53 +#: includes/include.frontend.user_menu.php:54 +#: includes/include.rights_create.php:150 +msgid "Username" +msgstr "" + +#: includes/include.frontend.left_top.php:141 +msgid "Frontend users" +msgstr "" + +#: includes/include.frontend.left_top.php:148 +msgid "Frontend groups" +msgstr "" + +#: includes/include.frontend.left_top.php:228 +#: includes/include.frontend.user_menu.php:139 +msgid "-- All Groups --" +msgstr "" + +#: includes/include.frontend.left_top.php:261 +msgid "Show group" +msgstr "" + +#: includes/include.frontend.left_top.php:395 +#: includes/include.rights_menu.php:133 +#: includes/include.frontend.user_menu.php:273 +#, php-format +msgid "Do you really want to delete the user %s?" +msgstr "" + +#: includes/include.grouprights_create.php:57 +msgid "New Group" +msgstr "" + +#: includes/include.grouprights_create.php:71 +msgid "group created" +msgstr "" + +#: includes/include.grouprights_create.php:76 +msgid "Group couldn't created" +msgstr "" + +#: includes/include.note.popup.php:63 +msgid "Add note" +msgstr "" + +#: includes/include.note.popup.php:75 +msgid "No category" +msgstr "" + +#: includes/include.note.popup.php:92 +msgid "Note" +msgstr "" + +#: includes/include.lay_edit_form.php:46 +msgid "-- New Layout --" +msgstr "" + +#: includes/include.lay_edit_form.php:56 +msgid "Layout deleted" +msgstr "" + +#: includes/include.lay_edit_form.php:128 +#, php-format +msgid "Container %s was defined %s times" +msgstr "" + +#: includes/include.lay_edit_form.php:141 +msgid "" +"The body tag does not exist in the layout. This is a requirement for the in-" +"site editing." +msgstr "" + +#: includes/include.lay_edit_form.php:147 +msgid "" +"The head tag does not exist in the layout. This is a requirement for the in-" +"site editing." +msgstr "" + +#: includes/include.lay_edit_form.php:186 includes/include.lay_history.php:87 +msgid "Edit Layout" +msgstr "" + +#: includes/include.lay_edit_form.php:202 +msgid "On save, apply default modules to new containers" +msgstr "" + +#: includes/include.mycontenido.tasks.php:128 +msgid "No status type set" +msgstr "" + +#: includes/include.mycontenido.tasks.php:155 +#, php-format +msgid "%d %% complete" +msgstr "" + +#: includes/include.mycontenido.tasks.php:196 +msgid "Today" +msgstr "" + +#: includes/include.mycontenido.tasks.php:201 +#: includes/include.mycontenido.tasks.php:203 +msgid "Day(s)" +msgstr "" + +#: includes/include.mycontenido.tasks.php:276 +msgid "End Date" +msgstr "" + +#: includes/include.mycontenido.tasks.php:276 +#, php-format +msgid "%% complete" +msgstr "" + +#: includes/include.mycontenido.tasks.php:276 +msgid "Due in" +msgstr "" + +#: includes/include.mycontenido.tasks.php:302 +msgid "Unnamed item" +msgstr "" + +#: includes/include.mycontenido.tasks.php:307 +msgid "No end date set" +msgstr "" + +#: includes/include.mycontenido.tasks.php:314 +msgid "No status set" +msgstr "" + +#: includes/include.mycontenido.tasks.php:338 +msgid "Delete item" +msgstr "" + +#: includes/include.mycontenido.tasks.php:345 +msgid "Edit item" +msgstr "" + +#: includes/include.mycontenido.tasks.php:376 +msgid "Restrict display" +msgstr "" + +#: includes/include.mycontenido.tasks.php:386 +msgid "Hide done tasks" +msgstr "" + +#: includes/include.mycontenido.tasks.php:401 +msgid "No tasks found" +msgstr "" + +#: includes/functions.lay.php:66 +msgid "-- Unnamed Layout --" +msgstr "" + +#: includes/include.tpl_overview.php:96 includes/include.lay_overview.php:83 +#: includes/include.mod_overview.php:226 +msgid "Click for more information about usage" +msgstr "" + +#: includes/include.tpl_overview.php:100 +#, php-format +msgid "Do you really want to delete the following template:

    %s
    " +msgstr "" + +#: includes/include.tpl_overview.php:105 +msgid "Template in use, cannot delete" +msgstr "" + +#: includes/include.tpl_overview.php:128 +#, php-format +msgid "The template '%s' is used for following categories and articles" +msgstr "" + +#: includes/include.lay_overview.php:78 includes/include.mod_overview.php:239 +#: includes/include.str_overview.php:741 includes/include.mod_edit_form.php:51 +msgid "No permission" +msgstr "" + +#: includes/include.lay_overview.php:82 +msgid "Layout is in use, cannot delete" +msgstr "" + +#: includes/include.lay_overview.php:93 +#, php-format +msgid "Do you really want to delete the following layout:

    %s
    " +msgstr "" + +#: includes/include.lay_overview.php:118 +#, php-format +msgid "The layout '%s' is used for following templates" +msgstr "" + +#: includes/functions.con.php:331 includes/functions.con.php:518 +msgid "Default title" +msgstr "" + +#: includes/functions.upl.php:791 +msgid "OpenOffice.org Presentation" +msgstr "" + +#: includes/functions.upl.php:792 +msgid "OpenOffice.org Presentation Template" +msgstr "" + +#: includes/functions.upl.php:793 +msgid "Microsoft PowerPoint Screen Presentation" +msgstr "" + +#: includes/functions.upl.php:794 includes/functions.upl.php:796 +msgid "Microsoft PowerPoint Presentation Template" +msgstr "" + +#: includes/functions.upl.php:795 +msgid "KDE KPresenter Document" +msgstr "" + +#: includes/functions.upl.php:799 +msgid "Microsoft Word Document or regular text file" +msgstr "" + +#: includes/functions.upl.php:800 +msgid "Microsoft Word Template" +msgstr "" + +#: includes/functions.upl.php:801 +msgid "OpenOffice.org Text Document" +msgstr "" + +#: includes/functions.upl.php:802 +msgid "OpenOffice.org Text Document Template" +msgstr "" + +#: includes/functions.upl.php:803 +msgid "StarOffice 5.0 Text Document" +msgstr "" + +#: includes/functions.upl.php:804 +msgid "KDE KWord Document" +msgstr "" + +#: includes/functions.upl.php:807 +msgid "Microsoft Excel Worksheet" +msgstr "" + +#: includes/functions.upl.php:808 +msgid "OpenOffice.org Table" +msgstr "" + +#: includes/functions.upl.php:809 +msgid "OpenOffice.org Table Template" +msgstr "" + +#: includes/functions.upl.php:810 +msgid "Microsoft Excel File" +msgstr "" + +#: includes/functions.upl.php:811 +msgid "Microsoft Excel Template" +msgstr "" + +#: includes/functions.upl.php:812 +msgid "Comma Seperated Value File" +msgstr "" + +#: includes/functions.upl.php:813 +msgid "KDE KSpread Document" +msgstr "" + +#: includes/functions.upl.php:814 +msgid "StarOffice 5.0 Table" +msgstr "" + +#: includes/functions.upl.php:817 +msgid "Plain Text" +msgstr "" + +#: includes/functions.upl.php:818 +msgid "Rich Text Format" +msgstr "" + +#: includes/functions.upl.php:821 +msgid "GIF Image" +msgstr "" + +#: includes/functions.upl.php:822 +msgid "PNG Image" +msgstr "" + +#: includes/functions.upl.php:823 includes/functions.upl.php:824 +msgid "JPEG Image" +msgstr "" + +#: includes/functions.upl.php:825 +msgid "TIFF Image" +msgstr "" + +#: includes/functions.upl.php:826 +msgid "Adobe Photoshop Image" +msgstr "" + +#: includes/functions.upl.php:829 includes/functions.upl.php:830 +msgid "Hypertext Markup Language Document" +msgstr "" + +#: includes/functions.upl.php:831 +msgid "Cascading Style Sheets" +msgstr "" + +#: includes/functions.upl.php:834 +msgid "LHA Archive" +msgstr "" + +#: includes/functions.upl.php:835 +msgid "RAR Archive" +msgstr "" + +#: includes/functions.upl.php:836 +msgid "ARJ Archive" +msgstr "" + +#: includes/functions.upl.php:837 +msgid "bz2-compressed File" +msgstr "" + +#: includes/functions.upl.php:838 +msgid "bzip-compressed File" +msgstr "" + +#: includes/functions.upl.php:839 +msgid "ZIP Archive" +msgstr "" + +#: includes/functions.upl.php:840 +msgid "TAR Archive" +msgstr "" + +#: includes/functions.upl.php:841 +msgid "GZ Compressed File" +msgstr "" + +#: includes/functions.upl.php:844 +msgid "C Program Code" +msgstr "" + +#: includes/functions.upl.php:847 +msgid "C++ Program Code" +msgstr "" + +#: includes/functions.upl.php:849 +msgid "C or C++ Program Header" +msgstr "" + +#: includes/functions.upl.php:852 +msgid "PHP Program Code" +msgstr "" + +#: includes/functions.upl.php:853 +msgid "PHP Source File" +msgstr "" + +#: includes/functions.upl.php:855 +msgid "Adobe Acrobat Portable Document" +msgstr "" + +#: includes/functions.upl.php:858 +msgid "QuickTime Movie" +msgstr "" + +#: includes/functions.upl.php:859 +msgid "avi Movie" +msgstr "" + +#: includes/functions.upl.php:861 +msgid "MPEG Movie" +msgstr "" + +#: includes/functions.upl.php:862 +msgid "Windows Media Video" +msgstr "" + +#: includes/functions.upl.php:864 +msgid "-File" +msgstr "" + +#: includes/include.upl_left_top.php:112 +msgid "Create directory in" +msgstr "" + +#: includes/functions.file.php:206 +msgid "Please insert filename." +msgstr "" + +#: includes/functions.file.php:218 +#, php-format +msgid "Could not open file %s" +msgstr "" + +#: includes/functions.file.php:223 +#, php-format +msgid "Could not write file %s" +msgstr "" + +#: includes/functions.file.php:234 includes/functions.file.php:338 +#, php-format +msgid "%s is not writable" +msgstr "" + +#: includes/functions.file.php:255 +#, php-format +msgid "Can not open file%s " +msgstr "" + +#: includes/functions.file.php:304 +msgid "Unable to change file access permission." +msgstr "" + +#: includes/functions.file.php:308 +#, php-format +msgid "Unable to create file %s" +msgstr "" + +#: includes/functions.file.php:334 +#, php-format +msgid "Can not rename file %s" +msgstr "" + +#: includes/functions.file.php:361 +msgid "Wrong filename." +msgstr "" + +#: includes/include.mod_overview.php:228 +msgid "Module in use, cannot delete" +msgstr "" + +#: includes/include.mod_overview.php:235 +#, php-format +msgid "Do you really want to delete the following module:

    %s
    " +msgstr "" + +#: includes/include.mod_overview.php:302 +#, php-format +msgid "The module '%s' is used for following templates" +msgstr "" + +#: includes/include.frontend.group_rights.php:47 +msgid "Invalid plugin" +msgstr "" + +#: includes/include.frontend.group_rights.php:96 +#, php-format +msgid "Permissions for plugin '%s'" +msgstr "" + +#: includes/include.frontend.group_rights.php:101 +msgid "(All)" +msgstr "" + +#: includes/include.frontend.group_rights.php:109 +msgid "Global rights" +msgstr "" + +#: includes/include.frontend.group_rights.php:131 +msgid "No items found" +msgstr "" + +#: includes/include.str_overview.php:511 +#, php-format +msgid "" +"Do you really want to duplicate the following category:

    %s

    Notice: The duplicate process can take up to several minutes, " +"depending on how many subitems and articles you've got." +msgstr "" + +#: includes/include.str_overview.php:513 +#, php-format +msgid "Do you really want to delete the following category:

    %s" +msgstr "" + +#: includes/include.str_overview.php:920 +msgid "Create new category" +msgstr "" + +#: includes/include.str_overview.php:993 +#, php-format +msgid "Cancel moving %s" +msgstr "" + +#: includes/include.tpl_edit_form.php:44 +msgid "- New Template -" +msgstr "" + +#: includes/include.tpl_edit_form.php:159 +#: includes/include.tpl_edit_form.php:237 +msgid "Default" +msgstr "" + +#: includes/include.upl_files_upload.php:51 +msgid "Upload" +msgstr "" + +#: includes/include.tplcfg_edit_form.php:79 +#, php-format +msgid "Category Template configuration is in use by %s (%s)" +msgstr "" + +#: includes/include.tplcfg_edit_form.php:362 +msgid "Module in container" +msgstr "" + +#: includes/include.tplcfg_edit_form.php:492 +msgid "Categorytemplate configuration" +msgstr "" + +#: includes/include.tplcfg_edit_form.php:495 +msgid "Articletemplate configuration" +msgstr "" + +#: includes/include.lay_history.php:137 +msgid "No layout history available" +msgstr "" + +#: includes/functions.general.php:175 +msgid "Saterday" +msgstr "" + +#: includes/functions.general.php:2183 +#, php-format +msgid "MySQL Database not reachable for installation %s" +msgstr "" + +#: includes/functions.general.php:2186 +#, php-format +msgid "" +"The MySQL Database for the installation %s is not reachable. Please check if " +"this is a temporary problem or if it is a real fault." +msgstr "" + +#: includes/include.info.php:38 +msgid "" +"You can find a lot of information and a community forum on the ConLite Portal" +msgstr "" + +#: includes/include.mycontenido_lastarticles.php:293 +msgid "No article found" +msgstr "" + +#: includes/include.upl_artlist.php:66 +msgid "Use this category" +msgstr "" + +#: includes/include.upl_artlist.php:81 +msgid "Sort Order" +msgstr "" + +#: includes/include.upl_artlist.php:81 +msgid "Online" +msgstr "" + +#: includes/include.CMS_IMG.php:275 +msgid "Directory / File" +msgstr "" + +#: includes/include.rights_overview.php:75 +msgid "User deleted" +msgstr "" + +#: includes/include.rights_overview.php:144 +#: includes/include.rights_overview.php:149 +msgid "An error occured while saving user info." +msgstr "" + +#: includes/include.rights_overview.php:236 +#: includes/include.rights_create.php:180 +msgid "Phone number" +msgstr "" + +#: includes/include.rights_overview.php:242 +#: includes/include.rights_create.php:186 +msgid "Street" +msgstr "" + +#: includes/include.rights_overview.php:248 +#: includes/include.rights_create.php:192 +msgid "ZIP code" +msgstr "" + +#: includes/include.rights_overview.php:254 +#: includes/include.rights_create.php:198 +msgid "City" +msgstr "" + +#: includes/include.rights_overview.php:260 +#: includes/include.rights_create.php:204 includes/include.lang_edit.php:250 +msgid "Country" +msgstr "" + +#: includes/include.rights_overview.php:373 +#: includes/include.rights_create.php:269 +msgid "Use WYSIWYG-Editor" +msgstr "" + +#: includes/include.rights_overview.php:398 +#: includes/include.rights_create.php:290 +msgid "Valid from" +msgstr "" + +#: includes/include.rights_overview.php:418 +#: includes/include.rights_create.php:307 +msgid "Valid to" +msgstr "" + +#: includes/include.rights_overview.php:436 +msgid "This account is currently inactive." +msgstr "" + +#: includes/include.rights_overview.php:439 +msgid "This account is currently active." +msgstr "" + +#: includes/include.stat_overview.php:47 includes/include.stat_overview.php:60 +msgid "Full statistics" +msgstr "" + +#: includes/include.stat_overview.php:50 includes/functions.stat.php:989 +#: includes/functions.stat.php:1015 +msgid "Top 10" +msgstr "" + +#: includes/include.stat_overview.php:53 includes/functions.stat.php:990 +#: includes/functions.stat.php:1016 +msgid "Top 20" +msgstr "" + +#: includes/include.stat_overview.php:56 includes/functions.stat.php:991 +#: includes/functions.stat.php:1017 +msgid "Top 30" +msgstr "" + +#: includes/include.stat_overview.php:76 +msgid "Yearly" +msgstr "" + +#: includes/include.stat_overview.php:80 +msgid "Current" +msgstr "" + +#: includes/include.stat_overview.php:94 +msgid "Hits in this language" +msgstr "" + +#: includes/include.upl_dirs_overview.php:153 +msgid "Failed to delete the following files:" +msgstr "" + +#: includes/include.upl_dirs_overview.php:159 +#, php-format +msgid "Failed to remove directory %s" +msgstr "" + +#: includes/include.upl_dirs_overview.php:172 +msgid "Upload directory" +msgstr "" + +#: includes/include.upl_dirs_overview.php:175 +msgid "" +"The following directories contains invalid characters and were ignored: " +msgstr "" + +#: includes/include.upl_dirs_overview.php:178 +msgid "Please click here in order to rename automatically." +msgstr "" + +#: includes/include.upl_dirs_overview.php:300 +msgid "Categories" +msgstr "" + +#: includes/include.upl_dirs_overview.php:381 +#: includes/include.upl_dirs_overview.php:528 +msgid "Delete directory" +msgstr "" + +#: includes/include.upl_dirs_overview.php:381 +#: includes/include.upl_dirs_overview.php:528 +msgid "Do you really want to delete the following directory:" +msgstr "" + +#: includes/include.upl_dirs_overview.php:386 +#: includes/include.upl_dirs_overview.php:533 +msgid "Directory contains files" +msgstr "" + +#: includes/include.upl_dirs_overview.php:435 +msgid "Database Filesystem" +msgstr "" + +#: includes/main.login.php:67 +msgid "No Login Information available." +msgstr "" + +#: includes/main.login.php:72 +msgid "" +"You're logged in with a temporary password. Please change your password." +msgstr "" + +#: includes/main.login.php:80 +msgid "Welcome" +msgstr "" + +#: includes/main.login.php:81 +msgid "Last login" +msgstr "" + +#: includes/main.login.php:101 includes/main.login.php:138 +#, php-format +msgid "Client %s (%s) has no languages" +msgstr "" + +#: includes/main.login.php:121 +msgid "Change client" +msgstr "" + +#: includes/main.login.php:126 +msgid "No clients available!" +msgstr "" + +#: includes/main.login.php:178 +#, php-format +msgid "Reminder list: %d Task open" +msgstr "" + +#: includes/main.login.php:180 +#, php-format +msgid "Reminder list: %d Tasks open" +msgstr "" + +#: includes/main.login.php:211 +msgid "Symbol help" +msgstr "" + +#: includes/main.login.php:214 +msgid "Contenido Manual" +msgstr "" + +#: includes/include.lay_new.php:38 +msgid "New Layout" +msgstr "" + +#: includes/functions.stat.php:44 +msgid "Info about article" +msgstr "" + +#: includes/functions.stat.php:46 +msgid "Info about directory" +msgstr "" + +#: includes/functions.stat.php:285 +msgid "Category is online" +msgstr "" + +#: includes/functions.stat.php:287 +msgid "Category is offline" +msgstr "" + +#: includes/functions.stat.php:478 +msgid "Sum" +msgstr "" + +#: includes/include.rights_create.php:53 +msgid "Username can't be empty" +msgstr "" + +#: includes/include.rights_create.php:85 +msgid "User created" +msgstr "" + +#: includes/include.rights_create.php:106 +msgid "Username already exists" +msgstr "" + +#: includes/include.rights_create.php:110 +msgid "Unknown error" +msgstr "" + +#: includes/include.lang_edit.php:228 +msgid "Left to right" +msgstr "" + +#: includes/include.lang_edit.php:228 +msgid "Right to left" +msgstr "" + +#: includes/include.lang_edit.php:244 +msgid "Language name" +msgstr "" + +#: includes/include.lang_edit.php:248 +msgid "Encoding" +msgstr "" + +#: includes/include.lang_edit.php:251 +msgid "Text direction" +msgstr "" + +#: includes/include.html_tpl_history.php:179 +#: includes/include.html_tpl_history.php:187 +msgid "No template history available" +msgstr "" + +#: includes/include.system_db_backup.php:36 +msgid "Backupfolder missing or not writable!" +msgstr "" + +#: includes/include.system_db_backup.php:43 +msgid "Start your Backup!" +msgstr "" + +#: includes/include.system_db_backup.php:77 +msgid "Permission denied!" +msgstr "" + +#: includes/include.system_db_backup.php:87 +msgid "Starting Backup." +msgstr "" + +#: includes/include.system_db_backup.php:196 +msgid "Backup in Progress!" +msgstr "" + +#: includes/include.system_db_backup.php:203 +#: includes/include.system_db_backup.php:229 +msgid "Tables saved: " +msgstr "" + +#: includes/include.system_db_backup.php:203 +msgid "Last processed: " +msgstr "" + +#: includes/include.system_db_backup.php:204 +#: includes/include.system_db_backup.php:229 +msgid "Pageviews: " +msgstr "" + +#: includes/include.system_db_backup.php:228 +msgid "Backup done!" +msgstr "" + +#: includes/include.system_db_backup.php:233 +msgid "Go Back to Overview" +msgstr "" + +#: includes/include.system_db_backup.php:268 +msgid "File successfully deleted." +msgstr "" + +#: includes/include.system_db_backup.php:283 +msgid "Download File" +msgstr "" + +#: includes/include.mod_edit_form.php:57 +msgid "" +msgstr "" + +#: includes/include.mod_edit_form.php:57 +msgid "Author: " +msgstr "" + +#: includes/include.mod_edit_form.php:57 +msgid "Version:" +msgstr "" + +#: includes/include.mod_edit_form.php:304 +#: includes/include.mod_edit_form.php:306 +msgid "Custom" +msgstr "" + +#: includes/include.mod_edit_form.php:332 +#: includes/include.mod_edit_form.php:342 +#, php-format +msgid "Error in module. Error location: %s" +msgstr "" + +#: includes/include.mod_edit_form.php:335 +#: includes/include.mod_edit_form.php:345 +msgid "Module successfully compiled" +msgstr "" + +#: includes/include.mod_edit_form.php:410 +msgid "" +"This module uses variables and/or functions which are probably not available " +"in this Contenido version. Please make sure that you use up-to-date modules." +msgstr "" + +#: includes/include.systemsettings.php:47 +msgid "Please set this property in systemsettings directly" +msgstr "" + +#: includes/include.systemsettings.php:157 +#: includes/include.clientsettings.php:172 +msgid "No defined properties" +msgstr "" + +#: includes/include.systemsettings.php:167 +#: includes/include.clientsettings.php:181 +msgid "Add new variable" +msgstr "" + +#: includes/include.clientsettings.php:50 +msgid "Select range" +msgstr "" + +#: includes/include.clientsettings.php:53 +msgid "Language independent" +msgstr "" + +#: includes/include.clientsettings.php:79 +msgid "Range" +msgstr "" + +#: includes/functions.mod.php:200 +msgid "Please do not use short open Tags. (Use %s" +msgstr "" + +#: includes/include.style_left_top.php:50 +msgid "Create style" +msgstr "" + +#: includes/include.pretplcfg_edit_form.php:101 +#, php-format +msgid "Module in Container %s" +msgstr "" + +#: includes/include.pretplcfg_edit_form.php:150 +msgid "Template preconfiguration" +msgstr "" + +#: main.loginform.php:76 +msgid "" +"The setup directory still exists. Please remove the setup directory before " +"you continue." +msgstr "" + +#: main.loginform.php:93 +msgid "" +"The sysadmin and/or the admin account still contains a well-known default " +"password. Please change immediately after login." +msgstr "" + +#: main.loginform.php:97 +msgid "" +"Contenido is in maintenance mode. Only sysadmins are allowed to login. " +"Please try again later." +msgstr "" + +#: main.loginform.php:195 +msgid "ConLite Backend" +msgstr "" + +#: main.loginform.php:204 +msgid "Invalid Login or Password!" +msgstr "" + +#: main.loginform.php:211 +msgid "Password" +msgstr "" diff --git a/branches/conlite20/conlite/locale/potfiles.txt b/branches/conlite20/conlite/locale/potfiles.txt new file mode 100644 index 0000000..aa6c315 --- /dev/null +++ b/branches/conlite20/conlite/locale/potfiles.txt @@ -0,0 +1,585 @@ +./main.php +./tools/phpcompatinfo.php +./tools/mpAutoloaderClassMap/mpClassTypeFinder.php +./tools/mpAutoloaderClassMap/mpClassMapFileCreator.php +./tools/mpAutoloaderClassMap/mpClassMapFileCreatorContenido.php +./tools/create_autoloader_cfg.php +./includes/include.system_configuration.php +./includes/functions.con2.php +./includes/include.left_top_blank.php +./includes/include.lang_edit.php +./includes/include.CMS_SIMPLELINK.php +./includes/functions.upl.php +./includes/include.frontend.user_edit.php +./includes/include.lay_preview.php +./includes/rights.inc.php +./includes/include.grouprights_menu.php +./includes/functions.api.category.php +./includes/include.upl_left_top.php +./includes/include.mod_sync.php +./includes/include.tpl_visualedit.php +./includes/include.logs.php +./includes/include.frontend.group_rights.php +./includes/include.style_files_overview.php +./includes/include.CMS_IMG.php +./includes/include.tpl_new.php +./includes/functions.stat.php +./includes/include.upl_files_overview.php +./includes/include.tplcfg_edit.php +./includes/grouprights_lay.inc.php +./includes/include.grouprights_left_top.php +./includes/include.blank.php +./includes/functions.api.string.php +./includes/include.tpl_edit_form.php +./includes/include.js_edit_form.php +./includes/include.CMS_HEAD.php +./includes/functions.api.images.php +./includes/functions.api.php +./includes/include.CMS_LINK.php +./includes/include.tpl_overview.php +./includes/functions.system.php +./includes/include.stat_left_top.php +./includes/include.grouprights_create.php +./includes/include.html_tpl_history.php +./includes/include.default_subnav.php +./includes/include.client_left_top.php +./includes/rights_lay.inc.php +./includes/include.todo.popup.php +./includes/include.lay_new.php +./includes/functions.general.php +./includes/rights_mod.inc.php +./includes/include.CMS_HTMLTEXT.php +./includes/index.php +./includes/include.client_artspec.php +./includes/include.mycontenido.tasks.php +./includes/include.systemsettings.php +./includes/include.con_edit_form.php +./includes/include.CMS_EASYIMG.php +./includes/grouprights_str.inc.php +./includes/include.upl_dirs_overview.php +./includes/include.pretplcfg_edit.php +./includes/api/functions.frontend.list.php +./includes/api/functions.api.general.php +./includes/include.tplcfg_edit_form.php +./includes/include.rights_menu.php +./includes/include.mod_translate_stringlist.php +./includes/include.CMS_SWF.php +./includes/include.info.php +./includes/include.CMS_HTMLHEAD.php +./includes/functions.tpl.php +./includes/include.con_left_top.php +./includes/include.con_art_overview.php +./includes/include.frontend.user_menu.php +./includes/include.rights_external.php +./includes/include.mycontenido.tasks.edit.php +./includes/grouprights_tpl.inc.php +./includes/include.grouprights_subnav.php +./includes/rights_con.inc.php +./includes/functions.forms.php +./includes/include.upl_search_results.php +./includes/include.client_edit.php +./includes/functions.pathresolver.php +./includes/include.debug.php +./includes/include.rights_left_top.php +./includes/include.mycontenido_settings.php +./includes/include.mod_edit_form.php +./includes/startup.php +./includes/ajax/include.ajax.con.php +./includes/include.js_files_overview.php +./includes/grouprights.inc.php +./includes/include.str_subnav.php +./includes/include.lay_overview.php +./includes/include.stat_overview.php +./includes/include.mod_history.php +./includes/include.js_history.php +./includes/include.grouprights_details.php +./includes/include.mod_translate.php +./includes/include.mod_package.php +./includes/include.clientsettings.php +./includes/include.system_db_backup.php +./includes/include.upl_artlist.php +./includes/include.js_left_top.php +./includes/include.stat_menu.php +./includes/include.con_editcontent.php +./includes/functions.con.php +./includes/include.lay_history.php +./includes/include.note.display.php +./includes/include.con_subnav.php +./includes/include.upl_edit.php +./includes/functions.file.php +./includes/include.mycontenido_lastarticles.php +./includes/include.grouprights_overview.php +./includes/functions.includePluginConf.php +./includes/include.upl_files_upload.php +./includes/include.lay_edit_form.php +./includes/include.rights_overview.php +./includes/functions.database.php +./includes/include.pretplcfg_edit_form.php +./includes/include.files_subnav.php +./includes/functions.rights.php +./includes/grouprights_area.inc.php +./includes/include.mod_overview.php +./includes/include.lang_left_top.php +./includes/include.backendedit.php +./includes/include.frontend.group.subnav.php +./includes/include.html_tpl_files_overview.php +./includes/grouprights_mod.inc.php +./includes/include.CMS_HTML.php +./includes/include.frontend.group_edit.php +./includes/functions.php54.php +./includes/grouprights_members.inc.php +./includes/globals_off.inc.php +./includes/include.style_left_top.php +./includes/functions.str.php +./includes/include.html_tpl_edit_form.php +./includes/functions.domxml-php4-to-php5.php +./includes/include.grouprights_external.php +./includes/main.login.php +./includes/cfg_language_de.inc.php +./includes/include.style_history.php +./includes/include.style_edit_form.php +./includes/include.con_str_overview.php +./includes/include.frontend.left_top.php +./includes/include.mod_new.php +./includes/functions.lang.php +./includes/include.str_overview.php +./includes/functions.i18n.php +./includes/include.upl_subnav.php +./includes/include.CMS_TEXT.php +./includes/functions.encoding.php +./includes/include.html_tpl_left_top.php +./includes/grouprights_con.inc.php +./includes/include.lang_overview.php +./includes/pseudo-cron.inc.php +./includes/include.CMS_QRCODE.php +./includes/include.system_sysvalues.php +./includes/include.symbolhelp.php +./includes/include.frontend.group_menu.php +./includes/include.rights_create.php +./includes/functions.mod.php +./includes/rights_str.inc.php +./includes/rights_area.inc.php +./includes/include.client_menu.php +./includes/include.note.popup.php +./includes/functions.lay.php +./includes/old.config.misc.php +./includes/rights_tpl.inc.php +./includes/include.system_purge.php +./includes/include.subnav.php +./backend_search.php +./ajaxmain.php +./logout.php +./images/index.php +./external/edit_area/edit_area_compressor_cl.php +./external/edit_area/class.edit_area.php +./external/edit_area/template.html +./external/edit_area/plugins/charmap/popup.html +./external/edit_area/edit_area_compressor.php +./external/index.php +./external/backendedit/front_content.php +./external/PHPMailer/test/contents.html +./external/PHPMailer/test/test_callback.php +./external/PHPMailer/test/testemail.php +./external/PHPMailer/test/phpmailerTest.php +./external/PHPMailer/class.phpmailer.php +./external/PHPMailer/class.pop3.php +./external/PHPMailer/class.smtp.php +./external/PHPMailer/examples/test_smtp_gmail_advanced.php +./external/PHPMailer/examples/contents.html +./external/PHPMailer/examples/test_smtp_advanced.php +./external/PHPMailer/examples/test_pop_before_smtp_advanced.php +./external/PHPMailer/examples/test_db_smtp_basic.php +./external/PHPMailer/examples/test_smtp_basic.php +./external/PHPMailer/examples/test_mail_basic.php +./external/PHPMailer/examples/test_pop_before_smtp_basic.php +./external/PHPMailer/examples/test_smtp_basic_no_auth.php +./external/PHPMailer/examples/test_sendmail_advanced.php +./external/PHPMailer/examples/test_mail_advanced.php +./external/PHPMailer/examples/test_smtp_gmail_basic.php +./external/PHPMailer/examples/index.html +./external/PHPMailer/examples/test_smtp_advanced_no_auth.php +./external/PHPMailer/examples/test_sendmail_basic.php +./external/PHPMailer/language/phpmailer.lang-tr.php +./external/PHPMailer/language/phpmailer.lang-ca.php +./external/PHPMailer/language/phpmailer.lang-dk.php +./external/PHPMailer/language/phpmailer.lang-fo.php +./external/PHPMailer/language/phpmailer.lang-et.php +./external/PHPMailer/language/phpmailer.lang-ja.php +./external/PHPMailer/language/phpmailer.lang-nl.php +./external/PHPMailer/language/phpmailer.lang-ch.php +./external/PHPMailer/language/phpmailer.lang-es.php +./external/PHPMailer/language/phpmailer.lang-it.php +./external/PHPMailer/language/phpmailer.lang-ro.php +./external/PHPMailer/language/phpmailer.lang-zh.php +./external/PHPMailer/language/phpmailer.lang-br.php +./external/PHPMailer/language/phpmailer.lang-zh_cn.php +./external/PHPMailer/language/phpmailer.lang-cz.php +./external/PHPMailer/language/phpmailer.lang-hu.php +./external/PHPMailer/language/phpmailer.lang-pl.php +./external/PHPMailer/language/phpmailer.lang-se.php +./external/PHPMailer/language/phpmailer.lang-fr.php +./external/PHPMailer/language/phpmailer.lang-fi.php +./external/PHPMailer/language/phpmailer.lang-no.php +./external/PHPMailer/language/phpmailer.lang-ar.php +./external/PHPMailer/language/phpmailer.lang-de.php +./external/PHPMailer/language/phpmailer.lang-ru.php +./external/PHPMailer/aboutus.html +./external/PHPMailer/docs/faq.html +./external/PHPMailer/docs/extending.html +./external/frontend/includes/index.php +./external/frontend/includes/class.input.helper.php +./external/frontend/includes/concache.php +./external/frontend/includes/class.concache.php +./external/frontend/js/index.php +./external/frontend/dbfs.php +./external/frontend/images/index.php +./external/frontend/index.php +./external/frontend/css/index.php +./external/frontend/error.php +./external/frontend/templates/index.php +./external/frontend/front_content.php +./external/frontend/front_crcloginform.inc.php +./external/frontend/config.php +./external/frontend/cache/index.php +./external/frontend/logs/index.php +./external/phpqrcode/tools/merged_config.php +./external/phpqrcode/tools/merged_header.php +./external/phpqrcode/tools/merge.php +./external/phpqrcode/bindings/tcpdf/qrcode.php +./external/phpqrcode/qrbitstream.php +./external/phpqrcode/qrinput.php +./external/phpqrcode/index.php +./external/phpqrcode/qrconst.php +./external/phpqrcode/qrimage.php +./external/phpqrcode/qrconfig.php +./external/phpqrcode/qrrscode.php +./external/phpqrcode/qrtools.php +./external/phpqrcode/qrsplit.php +./external/phpqrcode/phpqrcode.php +./external/phpqrcode/qrmask.php +./external/phpqrcode/qrencode.php +./external/phpqrcode/qrspec.php +./external/phpqrcode/qrlib.php +./external/wysiwyg/tinymce3/editor.php +./external/wysiwyg/tinymce3/editorclass.php +./external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/preview.html +./external/wysiwyg/tinymce3/jscripts/tiny_mce/plugins/preview/example.html +./external/wysiwyg/tinymce3/list.php +./external/wysiwyg/tinymce3/tiny_mce_gzip.php +./external/wysiwyg/tinymce3/tinymce.tpl.html +./external/wysiwyg/tinymce3/config.php +./external/wysiwyg/index.php +./index.php +./subnav.php +./templates/index.php +./templates/standard/template.cms_filelist_metadata_limititem.html +./templates/standard/template.blank.html +./templates/standard/template.mycontenido_subnav.html +./templates/standard/template.system_purge.html +./templates/standard/template.grouprights_memberselect.html +./templates/standard/template.con_str_overview.html +./templates/standard/template.tplcfg_edit_form.html +./templates/standard/template.tpl_edit_form.html +./templates/standard/frameset_content_right.html +./templates/standard/template.generic_form.html +./templates/standard/template.js_left_top.html +./templates/standard/template.symbolhelp.html +./templates/standard/template.mycontenido_start.html +./templates/standard/template.cms_teaser_edit.html +./templates/standard/template.backend_search_results.html +./templates/standard/template.generic_page.html +./templates/standard/template.file_subnav.html +./templates/standard/template.info.html +./templates/standard/template.inuse_lay_mod.html +./templates/standard/submenu.html +./templates/standard/template.system_variables.html +./templates/standard/template.newsletter_edit.html +./templates/standard/template.upl_left_top.html +./templates/standard/template.rights_inc.html +./templates/standard/template.deco.html +./templates/standard/widgets/template.widgets.left_top.html +./templates/standard/template.str_overview.html +./templates/standard/template.stat_menu.html +./templates/standard/template.generic_list_row.html +./templates/standard/template.lang_overview.html +./templates/standard/template.subnav_blank.html +./templates/standard/template.rights_overview.html +./templates/standard/template.client_subnav.html +./templates/standard/index.php +./templates/standard/template.con_art_overview.html +./templates/standard/template.system_subnav.html +./templates/standard/template.grouprights_overview.html +./templates/standard/frameset.html +./templates/standard/template.cms_filelist_edit.html +./templates/standard/template.html_tpl_left_top.html +./templates/standard/template.lang_edit.html +./templates/standard/template.con_subnav.html +./templates/standard/html5/template.generic_page.html +./templates/standard/template.tpl_overview.html +./templates/standard/template.grouprights_memberlist.html +./templates/standard/template.lang_left_top.html +./templates/standard/template.generic_list.html +./templates/standard/template.log_menu.html +./templates/standard/template.grouprights_menu.html +./templates/standard/template.generic_left_top.html +./templates/standard/white.html +./templates/standard/template.recipient_edit.html +./templates/standard/template.newsletter_menu.html +./templates/standard/template.default_subnav.html +./templates/standard/template.mycontenido_settings.html +./templates/standard/template.client_edit.html +./templates/standard/template.right_top_blank.html +./templates/standard/template.left_top.html +./templates/standard/template.subnav.html +./templates/standard/template.stat_top.html +./templates/standard/template.client_menu.html +./templates/standard/template.recipient_left_top.html +./templates/standard/filler.html +./templates/standard/template.con_edit_form.html +./templates/standard/template.con_str_overview.list.html +./templates/standard/template.left_top_blank.html +./templates/standard/template.upl_dirs_overview.html +./templates/standard/generic_list.html +./templates/standard/template.mod_left_top.html +./templates/standard/template.stat_subnav.html +./templates/standard/template.con_left_top.html +./templates/standard/frameset_menuless_content.html +./templates/standard/template.cms_filelist_dirlistitem.html +./templates/standard/template.rights_menu.html +./templates/standard/header.html +./templates/standard/template.rights_details.html +./templates/standard/template.grouprights_create.html +./templates/standard/frameset_content_left.html +./templates/standard/template.mycontenido_lastarticles.html +./templates/standard/template.welcome.html +./templates/standard/template.newsletter_left_top.html +./templates/standard/template.upl_files_overview.html +./templates/standard/template.select.html +./templates/standard/template.generic_table_form.html +./templates/standard/template.mod_edit_form.html +./templates/standard/template.con_subnav_noleft.html +./templates/standard/template.grouprights_left_top.html +./templates/standard/template.admin_frontend.html +./templates/standard/template.generic_menu.html +./templates/standard/template.recipient_menu.html +./templates/standard/template.request_password.html +./templates/standard/template.client_left_top.html +./templates/standard/template.rights_left_top.html +./templates/standard/template.style_left_top.html +./templates/standard/template.files_overview.html +./templates/standard/template.lay_overview.html +./templates/standard/template.stat_left_top.html +./templates/standard/template.inuse_tpl.html +./templates/standard/template.lay_edit_form.html +./templates/standard/template.grouprights_details.html +./templates/standard/template.welcome_update.html +./templates/standard/template.subnav_noleft.html +./templates/standard/template.rights_create.html +./templates/standard/template.log_main.html +./templates/standard/template.stat_overview.html +./templates/standard/frameset_content.html +./cronjobs/setfrontenduserstate.php +./cronjobs/send_reminder.php +./cronjobs/index.php +./cronjobs/move_old_stats.php +./cronjobs/linkchecker.php +./cronjobs/optimize_database.php +./cronjobs/session_cleanup.php +./cronjobs/run_newsletter_job.php +./cronjobs/advance_workflow.php +./cronjobs/move_articles.php +./main.loginform.php +./classes/Url/Contenido_Url.class.php +./classes/class.versionFile.php +./classes/class.cec.php +./classes/abstract_classes/class.conuser.php +./classes/class.csv.php +./classes/class.backend.php +./classes/class.frontend.groups.php +./classes/class.htmlparser.php +./classes/class.xsltprocessor.php +./classes/class.request.password.php +./classes/class.cec_hook.php +./classes/class.area.php +./classes/class.notification.php +./classes/widgets/class.views.advancedmenu.php +./classes/widgets/class.widgets.actionlist.php +./classes/widgets/class.widgets.tableedit.php +./classes/widgets/class.widgets.actionbutton.php +./classes/widgets/class.widgets.foldingrow.php +./classes/widgets/class.widgets.datawidgets.php +./classes/widgets/class.widgets.datefield.php +./classes/widgets/class.widgets.switchabledatechooser.php +./classes/widgets/class.widgets.treeview.php +./classes/widgets/class.widgets.views.php +./classes/widgets/class.widgets.dateselect.php +./classes/widgets/class.widgets.pager.php +./classes/widgets/class.widgets.page.php +./classes/widgets/class.widgets.buttons.php +./classes/widgets/class.widgets.datechooser.php +./classes/widgets/class.widgets.nominaltextfield.php +./classes/widgets/class.widgets.calendar.php +./classes/class.genericdb.php +./classes/class.treeitem.php +./classes/class.frontend.logic.php +./classes/con2con/class.filehandler.php +./classes/con2con/class.registry.php +./classes/con2con/class.dirhandler.php +./classes/class.autoload.php +./classes/exceptions/exception.conuser.php +./classes/class.versionImport.php +./classes/class.ui.php +./classes/class.user.php +./classes/class.metaobject.php +./classes/index.php +./classes/class.cms_teaser.php +./classes/class.ajax.php +./classes/class.iterator.php +./classes/Debug/Debug_File.class.php +./classes/Debug/DebuggerFactory.class.php +./classes/Debug/Debug_DevNull.class.php +./classes/Debug/Debug_Hidden.class.php +./classes/Debug/Debug_Visible.class.php +./classes/Debug/Sample.php +./classes/Debug/Debug_VisibleAdv.class.php +./classes/Debug/IDebug.php +./classes/class.frontend.users.php +./classes/class.action.php +./classes/class.cms_date.php +./classes/class.versionModule.php +./classes/class.purge.php +./classes/datatypes/class.datatype.number.php +./classes/datatypes/class.datatype.currency.php +./classes/datatypes/class.datatype.datetime.php +./classes/datatypes/class.datatype.php +./classes/class.version.php +./classes/class.conuser.php +./classes/cApi/class.upload.meta.php +./classes/cApi/class.action.php +./classes/cApi/class.system_property.php +./classes/cApi/class.upload.php +./classes/cApi/class.stat_archive.php +./classes/cApi/class.stat.php +./classes/class.structure.php +./classes/class.search.php +./classes/class.input.helper.php +./classes/class.security.php +./classes/class.phpmailer.php +./classes/class.chartable.php +./classes/class.xmltree.php +./classes/class.templateconfig.php +./classes/class.form.php +./classes/class.htmlvalidator.php +./classes/class.update.notifier.php +./classes/class.httpinputvalidator.php +./classes/tree/class.ctreeitem.php +./classes/tree/class.ctree.php +./classes/interfaces/interface.conuser.php +./classes/class.lang.php +./classes/cHTML5/class.chtml5.list.element.php +./classes/cHTML5/class.chtml5.button.php +./classes/cHTML5/class.chtml5.meta.php +./classes/cHTML5/class.chtml.php +./classes/cHTML5/class.chtml5.list.php +./classes/class.xml.php +./classes/Contenido_FrontendNavigation/Contenido_FrontendNavigation_Breadcrumb.class.php +./classes/Contenido_FrontendNavigation/Contenido_FrontendNavigation.class.php +./classes/Contenido_FrontendNavigation/Contenido_FrontendNavigation_Base.class.php +./classes/Contenido_FrontendNavigation/Sample.php +./classes/class.smtp.php +./classes/class.dbfs.php +./classes/template/class.clCounterFunctionParser.php +./classes/template/class.clStrAPIFunctionsParser.php +./classes/template/class.clAbstractTemplateParser.php +./classes/template/class.template.php +./classes/template/class.clIfFunctionParser.php +./classes/class.communications.php +./classes/class.group.php +./classes/contenido/class.clientslang.php +./classes/contenido/class.file.php +./classes/contenido/class.area.php +./classes/contenido/class.articlelanguage.php +./classes/contenido/class.categorytree.php +./classes/contenido/class.user.php +./classes/contenido/class.metatag.php +./classes/contenido/class.containerconfig.php +./classes/contenido/class.templateconfig.php +./classes/contenido/class.language.php +./classes/contenido/class.type.php +./classes/contenido/class.layout.php +./classes/contenido/class.categoryarticle.php +./classes/contenido/class.category.php +./classes/contenido/class.container.php +./classes/contenido/class.client.php +./classes/contenido/class.article.php +./classes/contenido/class.framefile.php +./classes/contenido/class.categorylanguage.php +./classes/contenido/class.metatype.php +./classes/contenido/class.template.php +./classes/contenido/class.module.php +./classes/contenido/class.content.php +./classes/class.todo.php +./classes/class.artspec.php +./classes/class.layout.php +./classes/class.xmlparser.php +./classes/UrlBuilder/Contenido_UrlBuilder_CustomPath.class.php +./classes/UrlBuilder/Contenido_UrlBuilder_Frontcontent.class.php +./classes/UrlBuilder/Contenido_UrlBuilderFactory.class.php +./classes/UrlBuilder/Contenido_UrlBuilder_Custom.class.php +./classes/UrlBuilder/Sample.php +./classes/UrlBuilder/Contenido_UrlBuilderConfig.class.php +./classes/UrlBuilder/Contenido_UrlBuilder.class.php +./classes/UrlBuilder/Contenido_UrlBuilder_MR.class.php +./classes/class.cl_db_backup.php +./classes/log/class.log.writer.php +./classes/log/class.modulelog.php +./classes/log/class.log.writer.file.php +./classes/log/class.log.php +./classes/class.upload.php +./classes/class.versionLayout.php +./classes/class.activeusers.php +./classes/class.wysiwyg_editor.php +./classes/class.category.php +./classes/content_types/class.content.type.abstract.php +./classes/frontend/navigation/class.frontend.navigation.php +./classes/frontend/navigation/class.frontend.navigation.abstract.php +./classes/class.frontend.permissions.php +./classes/class.htmlelements.php +./classes/class.client.php +./classes/xml/class.xml.base.php +./classes/xml/class.xml.writer.php +./classes/xml/class.xml.reader.php +./classes/xml/class.xml2array.php +./classes/class.navigation.php +./classes/class.cat.php +./classes/drivers/mysql/class.gdb.mysql.php +./classes/drivers/class.gdb.driver.php +./classes/class.properties.php +./classes/class.note.php +./classes/class.article.php +./classes/class.inuse.php +./classes/class.output_compressor.php +./classes/class.article.collector.php +./classes/class.cms_filelist.php +./classes/class.excel.php +./classes/Contenido_Category/Contenido_Category_Articles.class.php +./classes/Contenido_Category/Contenido_Category.class.php +./classes/Contenido_Category/Sample.php +./classes/class.template.php +./classes/class.table.php +./classes/class.art.php +./header.php +./frameset.php +./frameset_left.php +./frameset_right.php +./styles/index.php +./xml/index.php +./scripts/HTMLObj.js.php +./scripts/help.js.php +./scripts/index.php +./scripts/messageBox.js.php +./scripts/rights.js.php +./scripts/langref.php +./scripts/articleObject.js.php +./scripts/iZoom.js.php +./logs/index.php diff --git a/branches/conlite20/conlite/logout.php b/branches/conlite20/conlite/logout.php new file mode 100644 index 0000000..d919a0a --- /dev/null +++ b/branches/conlite20/conlite/logout.php @@ -0,0 +1,57 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-05-20 + * modified 2008-07-02, Frederic Schneider, new code-header and include security_class + * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307] + * + * $Id: logout.php 284 2014-01-09 23:58:34Z oldperl $: + * }} + * + */ + +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +// Contenido startup process +include_once ('./includes/startup.php'); + + +page_open(array('sess' => 'Contenido_Session', + 'auth' => 'Contenido_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); + +i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang); + +cInclude("includes", 'cfg_language_de.inc.php'); +cInclude("includes", 'functions.forms.php'); + +$oActiveUser = new ActiveUsers($db, $cfg, $auth); +$iUserId= $auth->auth["uid"]; +$oActiveUser->deleteUser($iUserId); + +$auth->logout(); +page_close(); +$sess->delete(); +header("location:index.php"); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/logs/deprecated.txt b/branches/conlite20/conlite/logs/deprecated.txt new file mode 100644 index 0000000..e69de29 diff --git a/branches/conlite20/conlite/logs/index.php b/branches/conlite20/conlite/logs/index.php new file mode 100644 index 0000000..ef8b776 --- /dev/null +++ b/branches/conlite20/conlite/logs/index.php @@ -0,0 +1,4 @@ + diff --git a/branches/conlite20/conlite/main.loginform.php b/branches/conlite20/conlite/main.loginform.php new file mode 100644 index 0000000..32c770c --- /dev/null +++ b/branches/conlite20/conlite/main.loginform.php @@ -0,0 +1,211 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-21 + * modified 2008-06-17, Rudi Bieller, some ugly fix for possible abuse of belang... + * modified 2008-07-02, Frederic Schneider, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * modified 2010-05-25, Dominik Ziegler, Remove password and username maxlength definitions at backend login [#CON-314] + * modified 2010-05-27, Dominik Ziegler, restored maxlength definition for username at backend login [#CON-314] + * + * $Id: main.loginform.php 445 2016-07-08 09:27:16Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +global $cfg, $username; + +$aLangs = i18nStripAcceptLanguages($_SERVER['HTTP_ACCEPT_LANGUAGE']); + +foreach ($aLangs as $sValue) { + $sEncoding = i18nMatchBrowserAccept($sValue); + $GLOBALS['belang'] = $sEncoding; + + if ($sEncoding !== false) { + break; + } +} + + +if (isset($_POST['belang']) && $_POST['belang'] != '') { + $sSelectedLang = $_POST['belang']; + $GLOBALS['belang'] = $sSelectedLang; +} + +if (!isset($belang) || empty($belang)) { + $belang = $GLOBALS['belang']; +} + + +$db = new DB_ConLite(); + +$noti = ""; +if (getenv('CONTENIDO_IGNORE_SETUP') != "true") { + $aMessages = array(); + + if (getSystemProperty('maintenance', 'mode') == 'enabled') { + $aMessages[] = i18n("Contenido is in maintenance mode. Only sysadmins are allowed to login. Please try again later."); + } + + if (count($aMessages) > 0) { + $notification = new Contenido_Notification; + $noti = $notification->messageBox("warning", implode("
    ", $aMessages), 1) . "
    "; + } +} +?> + + + + + + :: :: :: :: ConLite Login + + + " /> + + + + + +
    + +
    +
     
    +
    +
    + + +
    + + + auth["uname"])) : "" ?>" /> + + +
    +
    + +
    + +
    +
    + + + + + +
    +
    +
    +
    + +
    + +
    + + + +
    © 2012 - ConLite by CL-Community, based on CONTENIDO 4.8
    + + \ No newline at end of file diff --git a/branches/conlite20/conlite/main.php b/branches/conlite20/conlite/main.php new file mode 100644 index 0000000..5e665c0 --- /dev/null +++ b/branches/conlite20/conlite/main.php @@ -0,0 +1,268 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2003-01-20 + * modified 2008-06-16, Holger Librenz, Hotfix: added check for invalid calls + * modified 2008-06-25, Timo Trautmann, Contenido Framework Constand added + * modified 2008-07-02, Frederic Schneider, add security fix and include security_class + * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307] + * modified 2011-02-08, Dominik Ziegler, removed old PHP compatibility stuff as contenido now requires at least PHP 5 + * + * $Id: main.php 301 2014-02-03 22:30:20Z oldperl $: + * }} + * + */ +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +// Contenido startup process +include_once ('./includes/startup.php'); + +$cfg["debug"]["backend_exectime"]["fullstart"] = getmicrotime(); + +cInclude("includes", 'functions.api.php'); +cInclude("includes", 'functions.forms.php'); + +page_open(array('sess' => 'Contenido_Session', + 'auth' => 'Contenido_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); + +i18nInit($cfg["path"]["contenido"] . $cfg["path"]["locale"], $belang); + +/** + * Bugfix + * @see http://contenido.org/forum/viewtopic.php?t=18291 + * + * added by H. Librenz (2007-12-07) + */ +//includePluginConf(); +require_once $cfg['path']['contenido'] . $cfg['path']['includes'] . 'functions.includePluginConf.php'; + +cInclude("includes", 'cfg_language_de.inc.php'); + +if ($cfg["use_pseudocron"] == true) { + /* Include cronjob-Emulator, but only for frame 1 */ + if ($frame == 4) { + $sess->freeze(); + $oldpwd = getcwd(); + + chdir($cfg["path"]["contenido"] . $cfg["path"]["cronjobs"]); + cInclude("includes", "pseudo-cron.inc.php"); + chdir($oldpwd); + + if ($bJobRunned == true) { + // Some cronjobs might overwrite important system variables. + // We are thaw'ing the session again to re-register these variables. + $sess->thaw(); + } + } +} + + +/* Remove all own marks, only for frame 1 and 4 if $_REQUEST['appendparameters'] == 'filebrowser' + filebrowser is used in tiny in this case also do not remove session marks */ +if (($frame == 1 || $frame == 4) && isset($_REQUEST['appendparameters']) && $_REQUEST['appendparameters'] != 'filebrowser') { + $col = new InUseCollection; + $col->removeSessionMarks($sess->id); +} + +/* If the override flag is set, override a specific InUseItem */ +if (isset($overrideid) && isset($overridetype)) { + $col = new InUseCollection; + $col->removeItemMarks($overridetype, $overrideid); +} + +# Create Contenido classes +$oDb = new DB_ConLite(); +/* @var $db DB_ConLite */ +$db = &$oDb; +$notification = new Contenido_Notification; +$classarea = new Area(); +$classlayout = new Layout(); +$classclient = new Client(); +$classuser = new User(); + +$currentuser = new User(); +$currentuser->loadUserByUserID($auth->auth["uid"]); + + +# change Client +if (isset($changeclient) && is_numeric($changeclient)) { + $client = $changeclient; + unset($lang); +} + +# Sprache wechseln +if (isset($changelang) && is_numeric($changelang)) { + unset($area_rights); + unset($item_rights); + + $lang = $changelang; +} + +if (!is_numeric($client) || (!$perm->have_perm_client("client[" . $client . "]") && !$perm->have_perm_client("admin[" . $client . "]"))) { + // use first client which is accessible + $sess->register("client"); + $sql = "SELECT idclient FROM " . $cfg["tab"]["clients"] . " ORDER BY idclient ASC"; + $db->query($sql); + + while ($db->next_record()) { + $mclient = $db->f("idclient"); + + if ($perm->have_perm_client("client[" . $mclient . "]") || $perm->have_perm_client("admin[" . $mclient . "]")) { + unset($lang); + $client = $mclient; + break; + } + } +} else { + $sess->register("client"); +} + +if (!is_numeric($lang) || $lang == "") { + $sess->register("lang"); + # search for the first language of this client + $sql = "SELECT * FROM " . $cfg["tab"]["lang"] . " AS A, " . $cfg["tab"]["clients_lang"] . " AS B WHERE A.idlang=B.idlang AND idclient='" . Contenido_Security::toInteger($client) . "' ORDER BY A.idlang ASC"; + $db->query($sql); + $db->next_record(); + $lang = $db->f("idlang"); +} else { + $sess->register("lang"); +} + +// send right encoding http header +sendEncodingHeader($db, $cfg, $lang); + +$perm->load_permissions(); + +# Create Contenido classes +$xml = new XML_doc; +$tpl = new Template; +$backend = new Contenido_Backend; +//$backend->debug=true; +# Register session variables +$sess->register("sess_area"); + +if (isset($area)) { + $sess_area = $area; +} else { + $area = ( isset($sess_area) && $sess_area != "" ) ? $sess_area : 'login'; +} + +$sess->register("cfgClient"); +$sess->register("errsite_idcat"); +$sess->register("errsite_idart"); + +if (!isset($cfgClient) || !isset($cfgClient["set"]) || $cfgClient["set"] != "set") { + rereadClients(); +} + +# Initialize Contenido_Backend. +# Load all actions from the DB +# and check if permission is +# granted. +if ($cfg["debug"]["rendering"] == true) { + $oldmemusage = memory_get_usage(); +} +# Select frameset +$backend->setFrame($frame); + +# Select area +$backend->select($area); + +$cfg["debug"]["backend_exectime"]["start"] = getmicrotime(); + +# Include all required 'include' files. +# Can be an array of files, if more than +# one file is required. +if (is_array($backend->getFile('inc'))) { + foreach ($backend->getFile('inc') as $filename) { + include_once($cfg['path']['contenido'] . $filename); + } +} + +# If $action is set -> User klicked some button/link +# get the appopriate code for this action and evaluate it. + +if (isset($action) && $action != "") { + if (!isset($idart)) { + $idart = 0; + } + + $backend->log($idcat, $idart, $client, $lang, $action); +} + + +if (isset($action)) { + if ($backend->getCode($action) != '') { + if ($backend->debug == 1) { + echo '
    Executing:' . "\n";
    +            echo $backend->getCode($action) . "\n";
    +            echo '
    '; + } + eval($backend->getCode($action)); + } else { + if ($backend->debug == 1) { + echo '
    Executing:' . "\n";
    +            echo "no code available in action\n";
    +            echo '
    '; + } + } +} + +# Include the 'main' file for the selected area. +# Usually there is only one main file +if (is_array($backend->getFile('main'))) { + foreach ($backend->getFile('main') as $id => $filename) { + include_once($cfg['path']['contenido'] . $filename); + } +} elseif ($frame == 3) { + include_once($cfg['path']['contenido'] . $cfg['path']['includes'] . "include.default_subnav.php" ); +} else { + include_once($cfg['path']['contenido'] . $cfg['path']['includes'] . "include.blank.php"); +} + +$cfg["debug"]["backend_exectime"]["end"] = getmicrotime(); + +if ($cfg["debug"]["rendering"] == true) { + echo "Building this page (excluding contenido includes) took: " . ($cfg["debug"]["backend_exectime"]["end"] - $cfg["debug"]["backend_exectime"]["start"]) . " seconds
    "; + echo "Building the complete page took: " . ($cfg["debug"]["backend_exectime"]["end"] - $cfg["debug"]["backend_exectime"]["fullstart"]) . " seconds
    "; + + echo "Include memory usage: " . human_readable_size(memory_get_usage() - $oldmemusage) . "
    "; + echo "Complete memory usage: " . human_readable_size(memory_get_usage()) . "
    "; +} + +/** + * Start User Tracking (who is online) + * + * */ +$oActiveUser = new ActiveUsers($db, $cfg, $auth); +$oActiveUser->startUsersTracking(); +/** + * + * End of the User Tracking + */ +$db->disconnect(); +page_close(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/chains/createmetatags/classes/class.metatag.creator.html5.php b/branches/conlite20/conlite/plugins/chains/createmetatags/classes/class.metatag.creator.html5.php new file mode 100644 index 0000000..0807c13 --- /dev/null +++ b/branches/conlite20/conlite/plugins/chains/createmetatags/classes/class.metatag.creator.html5.php @@ -0,0 +1,480 @@ + + * @copyright (c) 2012-2013, ConLite Team + * @license http://www.gnu.de/documents/gpl.en.html GPL v3 (english version) + * @license http://www.gnu.de/documents/gpl.de.html GPL v3 (deutsche Version) + * @link http://www.conlite.org ConLite.org + * + * $Id: class.metatag.creator.html5.php 301 2014-02-03 22:30:20Z oldperl $ + */ + +// security check +defined('CON_FRAMEWORK') or die('Illegal call'); + +/** + * Description of class + * + * @author Ortwin Pinke + */ +class MetaTagCreatorHtml5 { + + /** + * + * @var array + */ + protected static $_MetaExtensions = null; + + /** + * + * @var array default values for meta names + */ + protected $_aDefinedMeta = array('application-name','author','description','generator','keywords'); + + /** + * Holds all config vars for metatag-creator + * You may add custom-settings using client-setting + * meta_tag_creator_html5 | [name of setting] | [value] + * + * possible names|values are + * only_html5|boolean (default:true) ,if set to true non-valide metas are deleted + * add_article_meta|boolean (default:true), if set to true metas set in article conf will overwrite existing meta + * use_cache|boolean (default:true) use cache/cachefile or not + * cachetime|[seconds] + * cachedir|[path to writable cache dir] + * + * @var array predefined config array + */ + protected $_aConfig = array( + 'only_html5' => true, + 'add_article_meta' => true, + 'use_cache' => true + ); + + /** + * + * @var string path/filename of cachefile + */ + protected $_sCacheFile = null; + + /** + * Incoming and Outgoing MetaTags + * + * @var array holds all metatags + */ + protected $_aMetaTags = array(); + + /** + * New created MetaTags + * + * @var array + */ + protected $_aCreatedMetaTags = array(); + + + /** + * + * @var boolean switch on debugging output + */ + protected $_bDebug = false; + + /** + * Object of the current article + * + * @var Article + */ + protected $_oArticle = NULL; + + /** + * Constructor + * + * @global int $idart + * @global int $client + * @global int $lang + * @param array $aMTags given array of metatags + * @param array $aConfig configuration array + * + * @return void + */ + public function __construct($aMTags, $aConfig) { + global $idart, $client, $lang; + + $this->_iIdart = (int) $idart; + $this->_iClient = (int) $client; + $this->_iLang = (int) $lang; + + if(is_null(self::$_MetaExtensions)) { + $file = dirname(dirname(__FILE__))."/conf/MetaExtension.php"; + if ($aTmp = include_once($file)) { + self::$_MetaExtensions = $aTmp; + } + self::$_MetaExtensions = array_merge(self::$_MetaExtensions, $this->_aDefinedMeta); + } + + if(is_array($aConfig) && count($aConfig) > 0) { + $this->_aConfig = array_merge($this->_aConfig, $aConfig); + } + $aCustomConfig = getEffectiveSettingsByType("meta_tag_creator_html5"); + if(is_array($aCustomConfig) && count($aCustomConfig) > 0) { + $this->_aConfig = array_merge($this->_aConfig, $aCustomConfig); + } + + if(is_array($aMTags) && count($aMTags) > 0) { + $this->_aMetaTags = array_merge($this->_aMetaTags, $aMTags); + } + if($this->_bDebug) { + echo "
    ";
    +            print_r($this->_aMetaTags);
    +        }
    +        $this->_createCacheFileHash();
    +    }
    +    
    +    /**
    +     * 
    +     * @return array generated cached metatag array
    +     */
    +    public function generateMetaTags() {
    +        if($this->_aConfig['use_cache'] && $this->_checkCacheFile()) {
    +            return $this->_getCacheFile();
    +        }
    +        // add metatags
    +        $this->_addArticleMeta();
    +        $this->_addFacebookMetaTags();
    +        
    +        $this->_mergeNewMetaTags();
    +        if(count($this->_aMetaTags) > 0) {
    +            $this->_checkForHtml5Tags();
    +        }        
    +        if($this->_bDebug) {
    +            echo "
    ";
    +            print_r($this->_aMetaTags);
    +        }
    +        if($this->_aConfig['use_cache'] && $this->_createCacheFile()) {
    +            return $this->_getCacheFile();
    +        } 
    +        return $this->_aMetaTags;
    +    }
    +    
    +    /**
    +     * Adds article meta to meta array
    +     * 
    +     * @global int $lang
    +     * @global array $encoding
    +     * @return void
    +     */
    +    protected function _addArticleMeta() {
    +        global $lang, $encoding;
    +        if($this->_aConfig['add_article_meta'] === false) return false;
    +        if(is_null($this->_oArticle) || !is_object($this->_oArticle)) {
    +            $this->_oArticle = new Article($this->_iIdart, $this->_iClient, $this->_iLang);        
    +        }
    +        $aHeadLines = $this->_checkAndMergeArrays($this->_oArticle->getContent("htmlhead"),
    +                $this->_oArticle->getContent("head"));
    +        $aText = $this->_checkAndMergeArrays($this->_oArticle->getContent("html"),
    +                $this->_oArticle->getContent("text"));
    +        $sHead = $this->_getFirstArrayValue($aHeadLines);
    +        $sText = $this->_getFirstArrayValue($aText);
    +        if($sHead) {
    +            $sHead = substr(str_replace(chr(13).chr(10),' ',strip_tags($sHead)),0,100);
    +            $this->_addMeta('description', $sHead);
    +        }
    +        if($sText) {
    +            $sText = keywordDensity($sHead, strip_tags(urldecode($sText)), $encoding[$lang]);
    +            $this->_addMeta('keywords', $sText);
    +        }
    +        
    +        // get custom meta from article conf
    +        $aAvailableMeta = conGetAvailableMetaTagTypes();
    +        foreach($aAvailableMeta as $iIdMeta=>$aValue) {
    +            if($aValue['fieldname'] != 'name') continue;
    +            if($this->_isHtml5Ext($aValue['name'])) {
    +                $sTmpContent = conGetMetaValue($this->_oArticle->getIdArtLang(), $iIdMeta);
    +                if(empty($sTmpContent)) continue;
    +                $this->_addMeta($aValue['name'], $sTmpContent);
    +            }
    +        }
    +        unset($oArticle);
    +    }
    +    
    +    /**
    +     * 
    +     *
    +     * 
    +     * 
    +     * 
    +     * 
    +     * 
    +     * 
    +     * 
    +     * 
    +     * 
    +     * 
    +     * 
    +     * 
    +     * 
    +     * @return boolean
    +     */
    +    protected function _addFacebookMetaTags() {
    +        if(!$this->_aConfig['add_facebook_meta']) return;
    +        // add always article data, cause they needed for fb-meta
    +        if($this->_aConfig['add_article_meta'] === false) {
    +            $this->_aConfig['add_article_meta'] = true;
    +            $this->_addArticleMeta();
    +        }        
    +        $aAllowedFbMetas = array("og:image","og:locality","og:country-name","og:latitude","og:longitude",
    +            "og:type","og:title","og:url","og:site_name","fb_admins","fb:page_id");
    +        $this->_aDefinedMeta = array_merge($this->_aDefinedMeta, $aAllowedFbMetas);
    +        $aFbSystemSettings = getEffectiveSettingsByType('facebook');
    +        $bHasSysSettings = (count($aFbSystemSettings) > 0)?true:false;
    +        foreach ($aAllowedFbMetas as $sMetaName) {
    +            if($sProp = $this->_oArticle->getProperty('facebook', $sMetaName)) {
    +                if(empty($sProp)) {
    +                    continue;
    +                } else {
    +                    $this->_addPropertyMeta($sMetaName, $sProp);
    +                }
    +            }
    +            if($bHasSysSettings) {
    +                if(array_key_exists($sMetaName, $aFbSystemSettings)) {
    +                    $this->_addPropertyMeta($sMetaName, $aFbSystemSettings[$sMetaName]);
    +                }
    +            }
    +            
    +            switch ($sMetaName) {
    +                case "og:url":
    +                    $aParams = array ('idcat' => $this->_iIdart,'lang' => $this->_iLang);
    +                    $sUrl = Contenido_Url::getInstance()->build($aParams, true);
    +                    $this->_addPropertyMeta($sMetaName, $sUrl);
    +                    break;
    +                
    +                case "og:title":
    +                    $sTitle = $this->_oArticle->getField("title");
    +                    $this->_addPropertyMeta($sMetaName, $sTitle);
    +                    break;
    +                
    +                case "og:image":
    +                    if(!isset($this->_aCreatedMetaTags[$sMetaName])) {
    +                        $aImages = $this->_oArticle->getContent("img");
    +                        $iImg = 0;
    +                        if(is_array($aImages) && count($aImages) > 0) {
    +                            if(isset($aFbSystemSettings['cms_img_no']) 
    +                                    && (int)$aFbSystemSettings['cms_img_no'] > 0
    +                                    && array_key_exists($aFbSystemSettings['cms_img_no'], $aImages)) {
    +                                $iImg = $aFbSystemSettings['cms_img_no'];
    +                            } else {
    +                                $iImg = 1;
    +                            }
    +                            if($iImg && $aFbSystemSettings['use_cms_img']) {
    +                                /* @var $oImg UploadItem */
    +                                $oImg = new UploadItem($iImg);
    +                                $sImgHtmlPath = $oImg->getField("url");
    +                                unset($oImg);                                
    +                            }
    +                        }                        
    +                    }
    +                    break;
    +            }
    +        }        
    +    }
    +    
    +    protected function _mergeNewMetaTags() {
    +        if(count($this->_aCreatedMetaTags) > 0) {
    +            foreach($this->_aCreatedMetaTags as $iKey=>$aValue) {
    +                $iKey = $this->_inMetaArray($aValue['name'], $this->_aMetaTags);
    +                if($iKey !== false) {
    +                    $this->_aMetaTags[$iKey]['content'] = $aValue['content'];
    +                } else {
    +                    array_push($this->_aMetaTags, $aValue);
    +                }
    +            }
    +        }
    +    }
    +
    +    /**
    +     * Check meta array for valid html5 meta tags
    +     * 
    +     * @todo add support for other meta tags than name
    +     * @return void
    +     */
    +    protected function _checkForHtml5Tags() {
    +        if(!$this->_aConfig['only_html5']) return;
    +        foreach($this->_aMetaTags as $iKey => $aValue) {
    +            if(key_exists('name', $aValue)) {
    +                if($this->_isHtml5Ext($aValue['name'])) continue;
    +                unset($this->_aMetaTags[$iKey]);
    +            }
    +        }
    +        
    +    }
    +    
    +    /**
    +     * Check if extensions is registered
    +     * 
    +     * @uses $_MetaExtensions Array of default and registered extensions
    +     * @param string $sExt
    +     * @return boolean
    +     */
    +    protected function _isHtml5Ext($sExt) {
    +        $sExt = strtolower($sExt);
    +        // check standard tags first
    +        if(in_array($sExt, $this->_aDefinedMeta)) return true;
    +        // check only names to save time
    +        if(in_array($sExt, self::$_MetaExtensions['names'])) return true;
    +        // now check keys with deeper arrays
    +        if(array_key_exists($sExt, self::$_MetaExtensions)) return true;
    +        // parts
    +        foreach(self::$_MetaExtensions as $sKey=>$aValue) {
    +            if($sKey === $sExt) return true;
    +            if(stristr($sKey, $sExt)) return true;
    +        }        
    +        return false;
    +    }
    +
    +    /**
    +     * Cachefile exists and not outdated
    +     * 
    +     * @return boolean
    +     */
    +    protected function _checkCacheFile() {
    +        if(file_exists($this->_sCacheFile)) {
    +            $iDiff = mktime() - filemtime($this->_sCacheFile);
    +            if($iDiff < $this->_aConfig['cachetime']) {
    +                return true;
    +            }
    +        }
    +        return false;
    +    }
    +    
    +    /**
    +     * Get meta-array from cachefile
    +     * 
    +     * @return array
    +     */
    +    protected function _getCacheFile() {
    +        return unserialize(file_get_contents($this->_sCacheFile));
    +    }
    +    
    +    /**
    +     * Create cachefile
    +     * 
    +     * @return boolean
    +     */
    +    protected function _createCacheFile() {
    +        if(empty($this->_sCacheFile)) {
    +            return false;
    +        }
    +        return (file_put_contents($this->_sCacheFile, serialize($this->_aMetaTags)) === false)?false:true;
    +    }
    +
    +    /**
    +     * Create path to cachefile with hashed filename
    +     * 
    +     * @global int $idart
    +     * @global int $lang
    +     * @return void
    +     */
    +    protected function _createCacheFileHash() {
    +        global $idart, $lang;
    +        if(isset($this->_aConfig['cachedir']) 
    +                && !empty($this->_aConfig['cachedir']) 
    +                && is_dir($this->_aConfig['cachedir'])
    +                && is_writable($this->_aConfig['cachedir'])) {
    +            $hash = 'metatag_'.md5($idart.'/'.$lang);
    +            $this->_sCacheFile = $this->_aConfig['cachedir'].$hash.'.tmp';
    +        }
    +    }
    +    
    +    /**
    +     * Merge 2 arrays
    +     * 
    +     * @param array $aArr1
    +     * @param array $aArr2
    +     * @return array merged array
    +     */
    +    protected function _checkAndMergeArrays($aArr1, $aArr2) {
    +        if(!is_array($aArr1)) {
    +            $aArr1 = array();
    +        }
    +        if(!is_array($aArr2)) {
    +            $aArr2 = array();
    +        }
    +        return array_merge($aArr1, $aArr2);
    +    }
    +    
    +    /**
    +     * 
    +     * @param type $aArr
    +     * @return mixed text as string or false
    +     */
    +    protected function _getFirstArrayValue($aArr) {
    +        $sText = "";
    +        foreach ($aArr as $key => $value) {
    +            if ($value != '') {
    +                $sText = $value;
    +                break;
    +            }
    +        }
    +        return (empty($sText))?false:$sText;
    +    }
    +    
    +    /**
    +     * Add new meta to meta-array
    +     * overwrite if exist
    +     * 
    +     * @param string $sName
    +     * @param string $sValue
    +     * @return void
    +     */
    +    protected function _addMeta($sName, $sValue) {
    +        $aTmp = array(
    +            'name'      =>  $sName,
    +            'content'   =>  $sValue
    +        );
    +        $iTmpKey = $this->_inMetaArray($sName, $this->_aCreatedMetaTags);
    +        if(false !== $iTmpKey) {
    +            $this->_aCreatedMetaTags[$iTmpKey]['content'] = $sValue;
    +        } else {
    +            array_push($this->_aCreatedMetaTags, $aTmp);
    +        }
    +    }
    +    
    +    protected function _addPropertyMeta($sName, $sValue) {
    +        $aTmp = array(
    +            'property'      =>  $sName,
    +            'content'   =>  $sValue
    +        );
    +        $iTmpKey = $this->_inMetaArray($sName, $this->_aCreatedMetaTags);
    +        if(false !== $iTmpKey) {
    +            $this->_aCreatedMetaTags[$iTmpKey]['content'] = $sValue;
    +        } else {
    +            array_push($this->_aCreatedMetaTags, $aTmp);
    +        }
    +    }
    +    
    +    /**
    +     * Search in meta-array for a name/content
    +     * returns the key if the needle is found
    +     * 
    +     * @param string $sNeedle
    +     * @param array $aHaystack
    +     * @param boolean $bStrict
    +     * @return mixed key_number in haystack or false if nothing was found
    +     */
    +    protected function _inMetaArray($sNeedle, $aHaystack, $bStrict = false) {
    +        foreach($aHaystack as $iKey=>$aValue) {
    +            if(in_array($sNeedle, $aValue)) return $iKey;
    +        }
    +        return false;
    +    }
    +}
    +?>
    \ No newline at end of file
    diff --git a/branches/conlite20/conlite/plugins/chains/createmetatags/conf/MetaExtension.php b/branches/conlite20/conlite/plugins/chains/createmetatags/conf/MetaExtension.php
    new file mode 100644
    index 0000000..ca5ed7f
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/chains/createmetatags/conf/MetaExtension.php
    @@ -0,0 +1,314 @@
    + array([name1],[name2],...),
    + *     [group]    =>  array(
    + *         'separator' => [.|:|/|-],
    + *         'names'     =>  array(
    + *             name1,
    + *             name2,
    + *             name2,
    + *             namen)
    + *     )
    + * );
    + * @todo struct is not good, maybe i have to overthink it again
    + * @see http://wiki.whatwg.org/wiki/MetaExtensions
    + * @author Ortwin Pinke 
    + * 
    + * $Id: MetaExtension.php 278 2013-11-20 14:28:48Z oldperl $
    + */
    +
    +return array(
    +    'names' => array(
    +        'alexaverifyid',
    +        'tysontcsverid',
    +        'apple-itunes-app',
    +        'baiduspider',
    +        'citeseerxbot',
    +        'collection',
    +        'designer',
    +        'entity',
    +        'EssayDirectory',
    +        'publisher',
    +        'review_date',
    +        'es.title',
    +        'format-detection',
    +        'verify-v1',
    +        'googlebot',
    +        'revisit-after',
    +        'icbm',
    +        'HandheldFriendly',
    +        'markosweb.com/validation',
    +        'MobileOptimized',
    +        'itemsPerPage',
    +        'msvalidate.01',
    +        'norton-safeweb-site-verification',
    +        'pinterest',
    +        'rating',
    +        'referrer',
    +        'rights-standard',
    +        'robots',
    +        'skype_toolbar',
    +        'slurp',
    +        'startIndex',
    +        'teoma',
    +        'totalResults',
    +        'vieport',
    +        'y_key',
    +        'yandex-verification',
    +        'meta_date',
    +        'Site-Type',
    +        'wot-verification',
    +        'mobile-agent'
    +        ),
    +    'AGLSTERMS' =>  array(
    +        'separator' =>  '.',
    +        'names' =>  array(
    +            'serviceType',
    +            'regulation',
    +            'protectiveMarking',
    +            'mandate',
    +            'jurisdiction',
    +            'isBasedOn',
    +            'isBasisFor',
    +            'function',
    +            'documentType',
    +            'dateLicensed',
    +            'category',
    +            'case',
    +            'availability',
    +            'aggregationLevel',
    +            'act'
    +        )
    +    ),
    +    'apple-mobile-web-app'  =>  array(
    +        'separator' =>  '-',
    +        'names'     =>  array(
    +            'title',
    +            'status-bar-style',
    +            'capable'
    +        )
    +    ),
    +    'csrf'  =>  array(
    +        'separator' =>  '-',
    +        'names'     =>  array(
    +            'token',
    +            'param'
    +        )  
    +    ),
    +    'dc'    =>  array(
    +        'separator' =>  '.',
    +        'names'     =>  array(
    +            'language',
    +            'date'  =>  array(
    +                'separator' =>  '.',
    +                'names'     =>  array(
    +                    'issued'
    +                )
    +            )
    +        )
    +    ),
    +    'dcterms'   =>  array(
    +        'separator' =>  '.',
    +        'names'     =>  array(
    +            'valid',
    +            'type',
    +            'title',
    +            'temporal',
    +            'tableOfContents',
    +            'subject',
    +            'spatial',
    +            'source',
    +            'rightsHolder',
    +            'rights',
    +            'requires',
    +            'replaces',
    +            'relation',
    +            'references',
    +            'publisher',
    +            'provenance',
    +            'modified',
    +            'medium',
    +            'mediator',
    +            'license',
    +            'language',
    +            'isVersionOf',
    +            'issued',
    +            'isRequiredBy',
    +            'isReplacedBy',
    +            'isReferencedBy',
    +            'isPartOf',
    +            'isFormatOf',
    +            'instructionalMethod',
    +            'identifier',
    +            'hasVersion',
    +            'hasPart',
    +            'hasFormat',
    +            'format',
    +            'extent',
    +            'educationLevel',
    +            'description',
    +            'dateSubmitted',
    +            'dateCopyrighted',
    +            'dateAccepted',
    +            'date',
    +            'creator',
    +            'created',
    +            'coverage',
    +            'contributor',
    +            'conformsTo',
    +            'collection',
    +            'bibliographicCitation',
    +            'available',
    +            'audience',
    +            'alternative',
    +            'accrualPolicy',
    +            'accrualPeriodicity',
    +            'accrualMethod',
    +            'accessRights',
    +            'abstract'            
    +        )
    +    ),
    +    'icas'  =>  array(
    +        'separator' =>  '.',
    +        'names'     =>  array(
    +            'datetime'  =>  array(
    +                'separator' =>  '.',
    +                'names'     =>  array(
    +                    null,
    +                    'abbr',
    +                    'day',
    +                    'long'                    
    +                )
    +            )
    +        )
    +    ),
    +    'geo'   =>  array(
    +        'separator' =>  '.',
    +        'names'     =>  array(
    +            'placename',
    +            'region',
    +            'lmk',
    +            'a3',
    +            'a2',
    +            'a1',
    +            'country',
    +            'position'            
    +        )
    +    ),
    +    'google'    =>  array(
    +        'separator' =>  '-',
    +        'names'     =>  array(
    +            null,
    +            'translate' =>  array(
    +                'separator' =>  '-',
    +                'names'     =>  array(
    +                    'customization'
    +                )
    +            ),
    +            'site'  =>  array(
    +                'separator' =>  '-',
    +                'names'     =>  array(
    +                    'verification'
    +                )
    +            )
    +        )
    +    ),
    +    'msapplication' =>  array(
    +        'separator' =>  '-',
    +        'names'     =>  array(
    +            'TileColor',
    +            'TileImage',
    +            'window',
    +            'navbutton' =>  array(
    +                'separator' =>  '-',
    +                'names'     =>  array(
    +                    'color'
    +                )
    +            )
    +        ),
    +        'tooltip',
    +        'starturl',
    +        'task'
    +    ),
    +    'og'    =>  array(
    +        'separator' =>  ':',
    +        'names'     =>  array(
    +            'video',
    +            'url',
    +            'type',
    +            'title',
    +            'site_name',
    +            'locale' => array(
    +                'separator' =>  ':',
    +                'names'     =>  array(
    +                    null,
    +                    'alternate'
    +                )
    +            ),
    +            'image',
    +            'determiner',
    +            'description',
    +            'audio'
    +        )
    +    ),
    +    'wt'    =>  array(
    +        'separator' =>  '.',
    +        'names'     =>  array(
    +            'ti',
    +            'sv',
    +            'mc_id',
    +            'ad',
    +            'ac',
    +            'si_x',
    +            'si_p',
    +            'si_n',
    +            'cg_s',
    +            'cg_n'            
    +        )
    +    ),
    +    'globrix'   =>  array(
    +        'separator' =>  '.',
    +        'names'     =>  array(
    +            'longitude',
    +            'latitude',
    +            'priceproximity',
    +            'underoffer',
    +            'tenure',
    +            'poa',
    +            'period',
    +            'parking',
    +            'outsidespace',
    +            'features',
    +            'condition',
    +            'type',
    +            'bathrooms',
    +            'bedrooms',
    +            'postcode',
    +            'price',
    +            'instruction'
    +        )
    +    ),
    +    'gwt'   =>  array(
    +        'separator' =>  ':',
    +        'names'     =>  array(
    +            'property'
    +        )
    +    ),
    +    'twitter'   =>  array(
    +        'separator' => ':',
    +        'names'     =>  array(
    +            'card',
    +            'url',
    +            'title',
    +            'description',
    +            'image',
    +            'site',
    +            'creator'
    +        )
    +    )
    +)
    +?>
    \ No newline at end of file
    diff --git a/branches/conlite20/conlite/plugins/chains/createmetatags/include.chain.content.createmetatags.php b/branches/conlite20/conlite/plugins/chains/createmetatags/include.chain.content.createmetatags.php
    new file mode 100644
    index 0000000..1a67bf6
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/chains/createmetatags/include.chain.content.createmetatags.php
    @@ -0,0 +1,298 @@
    +
    + * @license    http://www.contenido.org/license/LIZENZ.txt
    + * @link       http://www.4fb.de
    + * @link       http://www.contenido.org
    + *
    + */
    +
    +/**
    + * No direct call
    + */
    +if(!defined('CON_FRAMEWORK')) {
    +    die('Illegal call');
    +}
    +
    +// Compatibility for php < 5.3 using closures or not, @todo remove if we only support PHP >= 5.3
    +if(version_compare(PHP_VERSION, "5.3", "<")) {
    +    cInclude("plugins", "chains/createmetatags/includes/keyword_density_php52.php");
    +} else {
    +    cInclude("plugins", "chains/createmetatags/includes/keyword_density.php");
    +}
    +cInclude("plugins", "chains/createmetatags/classes/class.metatag.creator.html5.php");
    +
    +function cecCreateMetatags($metatags) {
    +
    +    global $cfg, $lang, $idart, $client, $cfgClient, $idcat, $idartlang;
    +    
    +    $bIsHTML5   = ((getEffectiveSetting('generator', 'html5', 'false') == 'false') ? false : true);
    +    
    +    if($bIsHTML5) {        
    +        $aConfig = array(
    +            'cachetime' => 3600,
    +            'cachedir'  => $cfgClient[$client]['path']['frontend'] . "cache/"            
    +        );
    +        
    +        $oHtml5MetaCreator = new MetaTagCreatorHtml5($metatags, $aConfig);        
    +        return $oHtml5MetaCreator->generateMetaTags();
    +    }   
    +
    +    //Basic settings
    +    $cachetime = 3600; // measured in seconds
    +    $cachedir = $cfgClient[$client]['path']['frontend'] . "cache/";
    +
    +    if (!is_array($metatags)) {
    +        $metatags = array();
    +    }
    +
    +    $hash = 'metatag_'.md5($idart.'/'.$lang);
    +    $cachefilename = $cachedir.$hash.'.tmp';
    +
    +    #Check if rebuilding of metatags is necessary
    +    $reload = true;
    +
    +    $fileexists = false;
    +
    +    if (file_exists($cachefilename)) {
    +        $fileexists = true;
    +
    +        $diff =  mktime() - filemtime($cachefilename);
    +
    +        if ($diff > $cachetime) {
    +            $reload = true;
    +        } else {
    +            $reload = false;
    +        }
    +    }
    +
    +    if ($reload) {
    +        //(Re)build metatags
    +        $db = new DB_ConLite();
    +
    +        #Get encoding
    +        $sql = "SELECT * FROM ".$cfg['tab']['lang']." WHERE idlang=".(int)$lang;
    +        $db->query($sql);
    +        if ($db->next_record()) {
    +            $sEncoding = strtoupper($db->f('encoding'));
    +        } else {
    +            $sEncoding = "ISO-8859-1";
    +        }
    +
    +        #Get idcat of homepage
    +        $sql = "SELECT a.idcat
    +            FROM
    +                ".$cfg['tab']['cat_tree']." AS a,
    +                ".$cfg['tab']['cat_lang']." AS b
    +            WHERE
    +                (a.idcat = b.idcat) AND
    +                (b.visible = 1) AND
    +                (b.idlang = ".Contenido_Security::toInteger($lang).")
    +            ORDER BY a.idtree LIMIT 1";
    +
    +        $db->query($sql);
    +
    +        if ($db->next_record()) {
    +            $idcat_homepage = $db->f('idcat');
    +        }
    +
    +        $availableTags = conGetAvailableMetaTagTypes();
    +
    +        #Get first headline and first text for current article
    +        $oArt = new Article ($idart, $client, $lang);
    +
    +        #Set idartlang, if not set
    +        if ($idartlang == '') {
    +            $idartlang = $oArt->getIdArtLang();
    +        }
    +
    +        $arrHead1 = $oArt->getContent("htmlhead");
    +        $arrHead2 = $oArt->getContent("head");
    +
    +        if (!is_array($arrHead1)) {
    +            $arrHead1 = array();
    +        }
    +
    +        if (!is_array($arrHead2)) {
    +            $arrHead2 = array();
    +        }
    +
    +        $arrHeadlines = array_merge($arrHead1, $arrHead2);
    +
    +        foreach ($arrHeadlines as $key => $value) {
    +            if ($value != '') {
    +                $sHeadline = $value;
    +                break;
    +            }
    +        }
    +
    +        $sHeadline = strip_tags($sHeadline);
    +        $sHeadline = substr(str_replace(chr(13).chr(10),' ',$sHeadline),0,100);
    +
    +        $arrText1 = $oArt->getContent("html");
    +        $arrText2 = $oArt->getContent("text");
    +
    +        if (!is_array($arrText1)) {
    +            $arrText1 = array();
    +        }
    +
    +        if (!is_array($arrText2)) {
    +            $arrText2 = array();
    +        }
    +
    +        $arrText = array_merge($arrText1, $arrText2);
    +
    +        foreach ($arrText as $key => $value) {
    +            if ($value != '') {
    +                $sText = $value;
    +                break;
    +            }
    +        }
    +
    +        $sText = strip_tags(urldecode($sText));
    +        $sText = keywordDensity ('', $sText);
    +
    +        //Get metatags for homeapge
    +        $arrHomepageMetaTags = array();
    +
    +        $sql = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." WHERE (idcat=".Contenido_Security::toInteger($idcat_homepage).") AND(idlang=".Contenido_Security::toInteger($lang).")";
    +        $db->query($sql);
    +
    +        if($db->next_record()){
    +            $iIdArtLangHomepage = $db->f('startidartlang');
    +
    +            #get idart of homepage
    +            $sql = "SELECT idart FROM ".$cfg["tab"]["art_lang"]." WHERE idartlang =".Contenido_Security::toInteger($iIdArtLangHomepage);
    +
    +            $db->query($sql);
    +
    +            if ($db->next_record()) {
    +                $iIdArtHomepage = $db->f('idart');
    +            }
    +
    +            $t1 = $cfg["tab"]["meta_tag"];
    +            $t2 = $cfg["tab"]["meta_type"];
    +
    +            $sql = "SELECT ".$t1.".metavalue,".$t2.".metatype FROM ".$t1.
    +                " INNER JOIN ".$t2." ON ".$t1.".idmetatype = ".$t2.".idmetatype WHERE ".
    +                $t1.".idartlang =".$iIdArtLangHomepage.
    +                " ORDER BY ".$t2.".metatype";
    +
    +            $db->query($sql);
    +
    +            while ($db->next_record()) {
    +                $arrHomepageMetaTags[$db->f("metatype")] = $db->f("metavalue");
    +            }
    +
    +            $oArt = new Article ($iIdArtHomepage, $client, $lang);
    +
    +            $arrHomepageMetaTags['pagetitle'] = $oArt->getField('title');
    +        }
    +
    +        //Cycle through all metatags
    +        foreach ($availableTags as $key => $value) {
    +            $metavalue = conGetMetaValue($idartlang, $key);
    +
    +            if (strlen($metavalue) == 0){
    +                //Add values for metatags that don't have a value in the current article
    +                switch(strtolower($value["name"])){
    +                    case 'author':
    +                        //Build author metatag from name of last modifier
    +                        $oArt = new Article ($idart, $client, $lang);
    +                        $lastmodifier = $oArt->getField("modifiedby");
    +                        $oUser = new User();
    +                        $oUser->loadUserByUserID(md5($lastmodifier));
    +                        $lastmodifier_real = $oUser->getRealname(md5($lastmodifier));
    +
    +                        $iCheck = CheckIfMetaTagExists($metatags, 'author');
    +                        $metatags[$iCheck]['name'] = 'author';
    +                        $metatags[$iCheck]['content'] = $lastmodifier_real;
    +
    +                        break;
    +                    case 'date':
    +                        //Build date metatag from date of last modification
    +                        $oArt = new Article ($idart, $client, $lang);
    +                        $lastmodified = $oArt->getField("lastmodified");
    +
    +                        $iCheck = CheckIfMetaTagExists($metatags, 'date');
    +                        $metatags[$iCheck]['name'] = 'date';
    +                        $metatags[$iCheck]['content'] = $lastmodified;
    +
    +                        break;
    +                    case 'description':
    +                        //Build description metatag from first headline on page
    +                        $iCheck = CheckIfMetaTagExists($metatags, 'description');
    +                        $metatags[$iCheck]['name'] = 'description';
    +                        $metatags[$iCheck]['content'] = $sHeadline;
    +
    +                        break;
    +                    case 'keywords':
    +                        $iCheck = CheckIfMetaTagExists($metatags, 'keywords');
    +                        $metatags[$iCheck]['name'] = 'keywords';
    +                        $metatags[$iCheck]['content'] = $sText;
    +
    +                        break;
    +                    case 'revisit-after':
    +                    case 'robots':
    +                    case 'expires':
    +                        //Build these 3 metatags from entries in homepage
    +                        $sCurrentTag = strtolower($value["name"]);
    +                        $iCheck = CheckIfMetaTagExists($metatags, $sCurrentTag);
    +                        $metatags[$iCheck]['name'] = $sCurrentTag;
    +                        $metatags[$iCheck]['content'] = $arrHomepageMetaTags[$sCurrentTag];
    +                        break;
    +                }
    +            }
    +        }
    +
    +        // save metatags in cache file
    +        file_put_contents($cachefilename, serialize($metatags));
    +
    +    } else {
    +        #Get metatags from file system cache
    +        $metatags = unserialize(file_get_contents($cachefilename));
    +    }
    +
    +    return $metatags;
    +}
    +
    +
    +/**
    + * Checks if the metatag allready exists inside the metatag list.
    + *
    + * @param   array|mixed  $arrMetatags       List of metatags or not a list
    + * @param   string       $sCheckForMetaTag  The metatag to check
    + * @return  int                             Position of metatag inside the metatag list or the next
    + *                                          available position
    + */
    +function CheckIfMetaTagExists($arrMetatags, $sCheckForMetaTag) {
    +    if (!is_array($arrMetatags) || count($arrMetatags) == 0) {
    +        // metatag list ist not set or empty, return initial position
    +        return 0;
    +    }
    +
    +    // loop thru existing metatags and check against the listitem name
    +    foreach ($arrMetatags as $pos => $item) {
    +        if ($item['name'] == $sCheckForMetaTag) {
    +            // metatag found -> return the position
    +            return $pos;
    +        }
    +    }
    +
    +    // metatag doesn't exists, return next position
    +    return count($arrMetatags);
    +}
    +?>
    \ No newline at end of file
    diff --git a/branches/conlite20/conlite/plugins/chains/createmetatags/includes/keyword_density.php b/branches/conlite20/conlite/plugins/chains/createmetatags/includes/keyword_density.php
    new file mode 100644
    index 0000000..5d6f80f
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/chains/createmetatags/includes/keyword_density.php
    @@ -0,0 +1,220 @@
    + $b) ? -1 : 1;
    +}
    +
    +/**
    + * 
    + * @param array $singlewordcounter
    + * @param int $maxKeywords
    + * @return array Array with valued keywords
    + */
    +function stripCount($singlewordcounter, $maxKeywords = 15) {
    +    // strip all with only 1
    +    $tmp = array();
    +    $result = array();
    +    $tmpToRemove = 1;
    +    
    +    foreach ($singlewordcounter as $key => $value) {
    +        if ($value > $tmpToRemove) {
    +            $tmp[$key] = $value;
    +        }
    +    }
    +    
    +    if (sizeof($tmp) <= $maxKeywords) {
    +        foreach ($tmp as $key => $value) {
    +            $result[] = $key;
    +        }
    +    } else {
    +        $dist = array();
    +        foreach ($tmp as $key => $value) {
    +            $dist[$value]++;
    +        }
    +        uksort($dist, "__cmp");
    +        reset($dist);
    +        $count = 0;
    +        $resultset = array();
    +        $useQuantity = array();
    +        
    +        foreach ($dist as $key => $value) {
    +            $_count = $count + $value;
    +            if ($_count <= $maxKeywords) {
    +                $count += $value;
    +                $useQuantity[] = $key;
    +            } else {
    +                break;
    +            }
    +        }
    +        // run all keywords and select by quantities to use
    +        foreach ($singlewordcounter as $key => $value) {
    +            if (in_array($value, $useQuantity)) {
    +                $result[] = $key;
    +            }
    +        }
    +    }
    +    return $result;
    +}
    +
    +/**
    + * Generate keywords from content
    + * 
    + * @version 1.0
    + * @since 2.0.0
    + * @author Ortwin Pinke 
    + * 
    + * @param string $sHeadline
    + * @param string $sText
    + * @param string $sEncoding
    + * @param int $iMinLen
    + * @return mixed commaseparated string of keywords or false
    + */
    +function keywordDensity($sHeadline, $sText, $sEncoding = "UTF-8", $iMinLen = 5) {
    +    $sHeadline = strip_tags($sHeadline);
    +    $sText = strip_tags($sText);
    +    $sText = clHtmlEntityDecode($sText, ENT_QUOTES, $sEncoding);
    +    
    +    $aSingleWordHeadline = str_word_count($sHeadline, 1);
    +    // double array for higher valenz of headline
    +    $aSingleWordHeadline = array_merge($aSingleWordHeadline,$aSingleWordHeadline);
    +    $aSingleWordHeadline = array_count_values($aSingleWordHeadline);
    +    
    +    $aSingleWordText = str_word_count($sText, 1);
    +    $aSingleWordText = array_count_values($aSingleWordText);    
    +    
    +    $aAllWords = array_merge($aSingleWordHeadline, $aSingleWordText);
    +    array_walk($aAllWords, function(&$n, $key, $iLen) use(&$aAllWords){
    +        if(strlen($key) < $iLen || clIsStopWord($key)) {
    +            unset($aAllWords[$key]);
    +        }    
    +    }, $iMinLen);
    +    arsort($aAllWords, SORT_NUMERIC);
    +    $aAllWords = stripCount($aAllWords);
    +    if(is_array($aAllWords)) {
    +        return implode(', ', $aAllWords);
    +    }
    +    return false;
    +}
    +
    +/**
    + * Check keyword against stopword list
    + * 
    + * @version 1.0
    + * @since 2.0.0
    + * @author Ortwin Pinke 
    + * @todo move stopwords to sqlite
    + * 
    + * @global int $lang
    + * @global array $encoding
    + * @param string $sWord
    + * @return boolean
    + */
    +function clIsStopWord($sWord) {
    +    global $lang, $encoding;    
    +    $aStopWords = array();
    +    $aStopWords['de_DE'] = array("aber", "als", "am", "an", "auch", "auf", "aus", "bei", "bin",
    +        "bis", "bist", "da", "dadurch", "daher", "darum", "das", "daß", "dass", "dein",
    +        "deine", "dem", "den", "der", "des", "dessen", "deshalb", "die", "dies", "dieser", "dieses",
    +        "doch", "dort", "du", "durch", "ein", "eine", "einem", "einen", "einer", "eines", "er",
    +        "es", "euer", "eure", "für", "hatte", "hatten", "hattest", "hattet", "hier", "hinter",
    +        "ich", "ihr", "ihre", "im", "in", "ist", "ja", "jede", "jedem", "jeden", "jeder", "jedes",
    +        "jener", "jenes", "jetzt", "kann", "kannst", "können", "könnt", "machen", "mein",
    +        "meine", "mit", "muß", "mußt", "musst", "müssen", "müßt", "nach", "nachdem", "nein",
    +        "nicht", "nun", "oder", "seid", "sein", "seine", "sich", "sie",
    +        "sind", "soll", "sollen", "sollst", "sollt", "sonst", "soweit", "sowie", "und", "unser",
    +        "unsere", "unter", "vom", "von", "vor", "wann", "warum", "was", "weiter", "weitere", "wenn",
    +        "wer", "werde", "werden", "werdet", "weshalb", "wie", "wieder", "wieso", "wir", "wird",
    +        "wirst", "wo", "woher", "wohin", "zu", "zum", "zur", "über");
    +    $aStopWords['en_EN'] = $aStopWords['en_US'] = array("a", "able", "about", "above", "abst",
    +        "accordance", "according", "accordingly", "across", "act", "actually", "added", "adj",
    +        "affected", "affecting", "affects", "after", "afterwards", "again", "against", "ah", "all",
    +        "almost", "alone", "along", "already", "also", "although", "always", "am", "among",
    +        "amongst", "an", "and", "announce", "another", "any", "anybody", "anyhow", "anymore",
    +        "anyone", "anything", "anyway", "anyways", "anywhere", "apparently", "approximately",
    +        "are", "aren", "arent", "arise", "around", "as", "aside", "ask", "asking", "at", "auth",
    +        "available", "away", "awfully", "b", "back", "be", "became", "because", "become", "becomes",
    +        "becoming", "been", "before", "beforehand", "begin", "beginning", "beginnings", "begins",
    +        "behind", "being", "believe", "below", "beside", "besides", "between", "beyond", "biol",
    +        "both", "brief", "briefly", "but", "by", "c", "ca", "came", "can", "cannot", "can't",
    +        "cause", "causes", "certain", "certainly", "co", "com", "come", "comes", "contain",
    +        "containing", "contains", "could", "couldnt", "d", "date", "did", "didn't", "different",
    +        "do", "does", "doesn't", "doing", "done", "don't", "down", "downwards", "due", "during",
    +        "e", "each", "ed", "edu", "effect", "eg", "eight", "eighty", "either", "else", "elsewhere",
    +        "end", "ending", "enough", "especially", "et", "et-al", "etc", "even", "ever", "every",
    +        "everybody", "everyone", "everything", "everywhere", "ex", "except", "f", "far", "few",
    +        "ff", "fifth", "first", "five", "fix", "followed", "following", "follows", "for", "former",
    +        "formerly", "forth", "found", "four", "from", "further", "furthermore", "g", "gave", "get",
    +        "gets", "getting", "give", "given", "gives", "giving", "go", "goes", "gone", "got", "gotten",
    +        "h", "had", "happens", "hardly", "has", "hasn't", "have", "haven't", "having", "he", "hed",
    +        "hence", "her", "here", "hereafter", "hereby", "herein", "heres", "hereupon", "hers",
    +        "herself", "hes", "hi", "hid", "him", "himself", "his", "hither", "home", "how", "howbeit",
    +        "however", "hundred", "i", "id", "ie", "if", "i'll", "im", "immediate", "immediately",
    +        "importance", "important", "in", "inc", "indeed", "index", "information", "instead", "into",
    +        "invention", "inward", "is", "isn't", "it", "itd", "it'll", "its", "itself", "i've", "j",
    +        "just", "k", "keep", "keeps", "kept", "kg", "km", "know", "known", "knows", "l", "largely",
    +        "last", "lately", "later", "latter", "latterly", "least", "less", "lest", "let", "lets",
    +        "like", "liked", "likely", "line", "little", "'ll", "look", "looking", "looks", "ltd", "m",
    +        "made", "mainly", "make", "makes", "many", "may", "maybe", "me", "mean", "means", "meantime",
    +        "meanwhile", "merely", "mg", "might", "million", "miss", "ml", "more", "moreover", "most",
    +        "mostly", "mr", "mrs", "much", "mug", "must", "my", "myself", "n", "na", "name", "namely",
    +        "nay", "nd", "near", "nearly", "necessarily", "necessary", "need", "needs", "neither",
    +        "never", "nevertheless", "new", "next", "nine", "ninety", "no", "nobody", "non", "none",
    +        "nonetheless", "noone", "nor", "normally", "nos", "not", "noted", "nothing", "now", "nowhere",
    +        "o", "obtain", "obtained", "obviously", "of", "off", "often", "oh", "ok", "okay", "old",
    +        "omitted", "on", "once", "one", "ones", "only", "onto", "or", "ord", "other", "others",
    +        "otherwise", "ought", "our", "ours", "ourselves", "out", "outside", "over", "overall", "owing",
    +        "own", "p", "page", "pages", "part", "particular", "particularly", "past", "per", "perhaps",
    +        "placed", "please", "plus", "poorly", "possible", "possibly", "potentially", "pp", "predominantly",
    +        "present", "previously", "primarily", "probably", "promptly", "proud", "provides", "put",
    +        "q", "que", "quickly", "quite", "qv", "r", "ran", "rather", "rd", "re", "readily", "really",
    +        "recent", "recently", "ref", "refs", "regarding", "regardless", "regards", "related",
    +        "relatively", "research", "respectively", "resulted", "resulting", "results", "right",
    +        "run", "s", "said", "same", "saw", "say", "saying", "says", "sec", "section", "see",
    +        "seeing", "seem", "seemed", "seeming", "seems", "seen", "self", "selves", "sent", "seven",
    +        "several", "shall", "she", "shed", "she'll", "shes", "should", "shouldn't", "show",
    +        "showed", "shown", "showns", "shows", "significant", "significantly", "similar", "similarly",
    +        "since", "six", "slightly", "so", "some", "somebody", "somehow", "someone", "somethan",
    +        "something", "sometime", "sometimes", "somewhat", "somewhere", "soon", "sorry", "specifically",
    +        "specified", "specify", "specifying", "still", "stop", "strongly", "sub", "substantially",
    +        "successfully", "such", "sufficiently", "suggest", "sup", "sure", "t", "take", "taken",
    +        "taking", "tell", "tends", "th", "than", "thank", "thanks", "thanx", "that", "that'll",
    +        "thats", "that've", "the", "their", "theirs", "them", "themselves", "then", "thence",
    +        "there", "thereafter", "thereby", "thered", "therefore", "therein", "there'll", "thereof",
    +        "therere", "theres", "thereto", "thereupon", "there've", "these", "they", "theyd", "they'll",
    +        "theyre", "they've", "think", "this", "those", "thou", "though", "thoughh", "thousand",
    +        "throug", "through", "throughout", "thru", "thus", "til", "tip", "to", "together", "too",
    +        "took", "toward", "towards", "tried", "tries", "truly", "try", "trying", "ts", "twice",
    +        "two", "u", "un", "under", "unfortunately", "unless", "unlike", "unlikely", "until", "unto",
    +        "up", "upon", "ups", "us", "use", "used", "useful", "usefully", "usefulness", "uses", "using",
    +        "usually", "v", "value", "various", "'ve", "very", "via", "viz", "vol", "vols", "vs", "w",
    +        "want", "wants", "was", "wasn't", "way", "we", "wed", "welcome", "we'll", "went", "were",
    +        "weren't", "we've", "what", "whatever", "what'll", "whats", "when", "whence", "whenever",
    +        "where", "whereafter", "whereas", "whereby", "wherein", "wheres", "whereupon", "wherever",
    +        "whether", "which", "while", "whim", "whither", "who", "whod", "whoever", "whole", "who'll",
    +        "whom", "whomever", "whos", "whose", "why", "widely", "willing", "wish", "with", "within",
    +        "without", "won't", "words", "world", "would", "wouldn't", "www", "x", "y", "yes", "yet",
    +        "you", "youd", "you'll", "your", "youre", "yours", "yourself", "yourselves", "you've", "z", "zero");    
    +    
    +    if(is_int($lang) && is_array($encoding)) {
    +        $sUseEnc = $encoding[$lang];
    +        if(empty($sUseEnc) || !array_key_exists($sUseEnc, $aStopWords)) {
    +            $sUseEnc = "de_DE";
    +        }
    +    }
    +    
    +    if(in_array(utf8_encode($sWord), $aStopWords['de_DE'])) {
    +        return true;
    +    }
    +    return false;
    +}
    +?>
    \ No newline at end of file
    diff --git a/branches/conlite20/conlite/plugins/chains/createmetatags/includes/keyword_density_php52.php b/branches/conlite20/conlite/plugins/chains/createmetatags/includes/keyword_density_php52.php
    new file mode 100644
    index 0000000..887f9c4
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/chains/createmetatags/includes/keyword_density_php52.php
    @@ -0,0 +1,221 @@
    + $b) ? -1 : 1;
    +}
    +
    +/**
    + * 
    + * @param array $singlewordcounter
    + * @param int $maxKeywords
    + * @return array Array with valued keywords
    + */
    +function stripCount($singlewordcounter, $maxKeywords = 15) {
    +    // strip all with only 1
    +    $tmp = array();
    +    $result = array();
    +    $tmpToRemove = 1;
    +    
    +    foreach ($singlewordcounter as $key => $value) {
    +        if ($value > $tmpToRemove) {
    +            $tmp[$key] = $value;
    +        }
    +    }
    +    
    +    if (sizeof($tmp) <= $maxKeywords) {
    +        foreach ($tmp as $key => $value) {
    +            $result[] = $key;
    +        }
    +    } else {
    +        $dist = array();
    +        foreach ($tmp as $key => $value) {
    +            $dist[$value]++;
    +        }
    +        uksort($dist, "__cmp");
    +        reset($dist);
    +        $count = 0;
    +        $resultset = array();
    +        $useQuantity = array();
    +        
    +        foreach ($dist as $key => $value) {
    +            $_count = $count + $value;
    +            if ($_count <= $maxKeywords) {
    +                $count += $value;
    +                $useQuantity[] = $key;
    +            } else {
    +                break;
    +            }
    +        }
    +        // run all keywords and select by quantities to use
    +        foreach ($singlewordcounter as $key => $value) {
    +            if (in_array($value, $useQuantity)) {
    +                $result[] = $key;
    +            }
    +        }
    +    }
    +    return $result;
    +}
    +
    +/**
    + * Generate keywords from content
    + * 
    + * @version 1.0
    + * @since 2.0.0
    + * @author Ortwin Pinke 
    + * 
    + * @param string $sHeadline
    + * @param string $sText
    + * @param string $sEncoding
    + * @param int $iMinLen
    + * @return mixed commaseparated string of keywords or false
    + */
    +function keywordDensity($sHeadline, $sText, $sEncoding = "UTF-8", $iMinLen = 5) {
    +    global $aAllWords;
    +    $sHeadline = strip_tags($sHeadline);
    +    $sText = strip_tags($sText);
    +    $sText = clHtmlEntityDecode($sText, ENT_QUOTES, $sEncoding);
    +    
    +    $aSingleWordHeadline = str_word_count($sHeadline, 1);
    +    // double array for higher valenz of headline
    +    $aSingleWordHeadline = array_merge($aSingleWordHeadline,$aSingleWordHeadline);
    +    $aSingleWordHeadline = array_count_values($aSingleWordHeadline);
    +    
    +    $aSingleWordText = str_word_count($sText, 1);
    +    $aSingleWordText = array_count_values($aSingleWordText);    
    +    
    +    $aAllWords = array_merge($aSingleWordHeadline, $aSingleWordText);
    +    array_walk($aAllWords, create_function('&$n, $key, $iLen', '
    +        global $aAllWords;
    +        if(strlen($key) < $iLen || clIsStopWord($key)) {
    +            unset($aAllWords[$key]);
    +        }'), $iMinLen);
    +    arsort($aAllWords, SORT_NUMERIC);
    +    $aAllWords = stripCount($aAllWords);
    +    if(is_array($aAllWords)) {
    +        return implode(', ', $aAllWords);
    +    }
    +    return false;
    +}
    +
    +/**
    + * Check keyword against stopword list
    + * 
    + * @version 1.0
    + * @since 2.0.0
    + * @author Ortwin Pinke 
    + * @todo move stopwords to sqlite
    + * 
    + * @global int $lang
    + * @global array $encoding
    + * @param string $sWord
    + * @return boolean
    + */
    +function clIsStopWord($sWord) {
    +    global $lang, $encoding;    
    +    $aStopWords = array();
    +    $aStopWords['de_DE'] = array("aber", "als", "am", "an", "auch", "auf", "aus", "bei", "bin",
    +        "bis", "bist", "da", "dadurch", "daher", "darum", "das", "daß", "dass", "dein",
    +        "deine", "dem", "den", "der", "des", "dessen", "deshalb", "die", "dies", "dieser", "dieses",
    +        "doch", "dort", "du", "durch", "ein", "eine", "einem", "einen", "einer", "eines", "er",
    +        "es", "euer", "eure", "für", "hatte", "hatten", "hattest", "hattet", "hier", "hinter",
    +        "ich", "ihr", "ihre", "im", "in", "ist", "ja", "jede", "jedem", "jeden", "jeder", "jedes",
    +        "jener", "jenes", "jetzt", "kann", "kannst", "können", "könnt", "machen", "mein",
    +        "meine", "mit", "muß", "mußt", "musst", "müssen", "müßt", "nach", "nachdem", "nein",
    +        "nicht", "nun", "oder", "seid", "sein", "seine", "sich", "sie",
    +        "sind", "soll", "sollen", "sollst", "sollt", "sonst", "soweit", "sowie", "und", "unser",
    +        "unsere", "unter", "vom", "von", "vor", "wann", "warum", "was", "weiter", "weitere", "wenn",
    +        "wer", "werde", "werden", "werdet", "weshalb", "wie", "wieder", "wieso", "wir", "wird",
    +        "wirst", "wo", "woher", "wohin", "zu", "zum", "zur", "über");
    +    $aStopWords['en_EN'] = $aStopWords['en_US'] = array("a", "able", "about", "above", "abst",
    +        "accordance", "according", "accordingly", "across", "act", "actually", "added", "adj",
    +        "affected", "affecting", "affects", "after", "afterwards", "again", "against", "ah", "all",
    +        "almost", "alone", "along", "already", "also", "although", "always", "am", "among",
    +        "amongst", "an", "and", "announce", "another", "any", "anybody", "anyhow", "anymore",
    +        "anyone", "anything", "anyway", "anyways", "anywhere", "apparently", "approximately",
    +        "are", "aren", "arent", "arise", "around", "as", "aside", "ask", "asking", "at", "auth",
    +        "available", "away", "awfully", "b", "back", "be", "became", "because", "become", "becomes",
    +        "becoming", "been", "before", "beforehand", "begin", "beginning", "beginnings", "begins",
    +        "behind", "being", "believe", "below", "beside", "besides", "between", "beyond", "biol",
    +        "both", "brief", "briefly", "but", "by", "c", "ca", "came", "can", "cannot", "can't",
    +        "cause", "causes", "certain", "certainly", "co", "com", "come", "comes", "contain",
    +        "containing", "contains", "could", "couldnt", "d", "date", "did", "didn't", "different",
    +        "do", "does", "doesn't", "doing", "done", "don't", "down", "downwards", "due", "during",
    +        "e", "each", "ed", "edu", "effect", "eg", "eight", "eighty", "either", "else", "elsewhere",
    +        "end", "ending", "enough", "especially", "et", "et-al", "etc", "even", "ever", "every",
    +        "everybody", "everyone", "everything", "everywhere", "ex", "except", "f", "far", "few",
    +        "ff", "fifth", "first", "five", "fix", "followed", "following", "follows", "for", "former",
    +        "formerly", "forth", "found", "four", "from", "further", "furthermore", "g", "gave", "get",
    +        "gets", "getting", "give", "given", "gives", "giving", "go", "goes", "gone", "got", "gotten",
    +        "h", "had", "happens", "hardly", "has", "hasn't", "have", "haven't", "having", "he", "hed",
    +        "hence", "her", "here", "hereafter", "hereby", "herein", "heres", "hereupon", "hers",
    +        "herself", "hes", "hi", "hid", "him", "himself", "his", "hither", "home", "how", "howbeit",
    +        "however", "hundred", "i", "id", "ie", "if", "i'll", "im", "immediate", "immediately",
    +        "importance", "important", "in", "inc", "indeed", "index", "information", "instead", "into",
    +        "invention", "inward", "is", "isn't", "it", "itd", "it'll", "its", "itself", "i've", "j",
    +        "just", "k", "keep", "keeps", "kept", "kg", "km", "know", "known", "knows", "l", "largely",
    +        "last", "lately", "later", "latter", "latterly", "least", "less", "lest", "let", "lets",
    +        "like", "liked", "likely", "line", "little", "'ll", "look", "looking", "looks", "ltd", "m",
    +        "made", "mainly", "make", "makes", "many", "may", "maybe", "me", "mean", "means", "meantime",
    +        "meanwhile", "merely", "mg", "might", "million", "miss", "ml", "more", "moreover", "most",
    +        "mostly", "mr", "mrs", "much", "mug", "must", "my", "myself", "n", "na", "name", "namely",
    +        "nay", "nd", "near", "nearly", "necessarily", "necessary", "need", "needs", "neither",
    +        "never", "nevertheless", "new", "next", "nine", "ninety", "no", "nobody", "non", "none",
    +        "nonetheless", "noone", "nor", "normally", "nos", "not", "noted", "nothing", "now", "nowhere",
    +        "o", "obtain", "obtained", "obviously", "of", "off", "often", "oh", "ok", "okay", "old",
    +        "omitted", "on", "once", "one", "ones", "only", "onto", "or", "ord", "other", "others",
    +        "otherwise", "ought", "our", "ours", "ourselves", "out", "outside", "over", "overall", "owing",
    +        "own", "p", "page", "pages", "part", "particular", "particularly", "past", "per", "perhaps",
    +        "placed", "please", "plus", "poorly", "possible", "possibly", "potentially", "pp", "predominantly",
    +        "present", "previously", "primarily", "probably", "promptly", "proud", "provides", "put",
    +        "q", "que", "quickly", "quite", "qv", "r", "ran", "rather", "rd", "re", "readily", "really",
    +        "recent", "recently", "ref", "refs", "regarding", "regardless", "regards", "related",
    +        "relatively", "research", "respectively", "resulted", "resulting", "results", "right",
    +        "run", "s", "said", "same", "saw", "say", "saying", "says", "sec", "section", "see",
    +        "seeing", "seem", "seemed", "seeming", "seems", "seen", "self", "selves", "sent", "seven",
    +        "several", "shall", "she", "shed", "she'll", "shes", "should", "shouldn't", "show",
    +        "showed", "shown", "showns", "shows", "significant", "significantly", "similar", "similarly",
    +        "since", "six", "slightly", "so", "some", "somebody", "somehow", "someone", "somethan",
    +        "something", "sometime", "sometimes", "somewhat", "somewhere", "soon", "sorry", "specifically",
    +        "specified", "specify", "specifying", "still", "stop", "strongly", "sub", "substantially",
    +        "successfully", "such", "sufficiently", "suggest", "sup", "sure", "t", "take", "taken",
    +        "taking", "tell", "tends", "th", "than", "thank", "thanks", "thanx", "that", "that'll",
    +        "thats", "that've", "the", "their", "theirs", "them", "themselves", "then", "thence",
    +        "there", "thereafter", "thereby", "thered", "therefore", "therein", "there'll", "thereof",
    +        "therere", "theres", "thereto", "thereupon", "there've", "these", "they", "theyd", "they'll",
    +        "theyre", "they've", "think", "this", "those", "thou", "though", "thoughh", "thousand",
    +        "throug", "through", "throughout", "thru", "thus", "til", "tip", "to", "together", "too",
    +        "took", "toward", "towards", "tried", "tries", "truly", "try", "trying", "ts", "twice",
    +        "two", "u", "un", "under", "unfortunately", "unless", "unlike", "unlikely", "until", "unto",
    +        "up", "upon", "ups", "us", "use", "used", "useful", "usefully", "usefulness", "uses", "using",
    +        "usually", "v", "value", "various", "'ve", "very", "via", "viz", "vol", "vols", "vs", "w",
    +        "want", "wants", "was", "wasn't", "way", "we", "wed", "welcome", "we'll", "went", "were",
    +        "weren't", "we've", "what", "whatever", "what'll", "whats", "when", "whence", "whenever",
    +        "where", "whereafter", "whereas", "whereby", "wherein", "wheres", "whereupon", "wherever",
    +        "whether", "which", "while", "whim", "whither", "who", "whod", "whoever", "whole", "who'll",
    +        "whom", "whomever", "whos", "whose", "why", "widely", "willing", "wish", "with", "within",
    +        "without", "won't", "words", "world", "would", "wouldn't", "www", "x", "y", "yes", "yet",
    +        "you", "youd", "you'll", "your", "youre", "yours", "yourself", "yourselves", "you've", "z", "zero");    
    +    
    +    if(is_int($lang) && is_array($encoding)) {
    +        $sUseEnc = $encoding[$lang];
    +        if(empty($sUseEnc) || !array_key_exists($sUseEnc, $aStopWords)) {
    +            $sUseEnc = "de_DE";
    +        }
    +    }
    +    
    +    if(in_array(utf8_encode($sWord), $aStopWords['de_DE'])) {
    +        return true;
    +    }
    +    return false;
    +}
    +?>
    \ No newline at end of file
    diff --git a/branches/conlite20/conlite/plugins/chains/includes/class.ceccreatefacebookmeta.php b/branches/conlite20/conlite/plugins/chains/includes/class.ceccreatefacebookmeta.php
    new file mode 100644
    index 0000000..002db82
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/chains/includes/class.ceccreatefacebookmeta.php
    @@ -0,0 +1,48 @@
    +
    + * @copyright (c) 2012-2013, ConLite Team 
    + * @license http://www.gnu.de/documents/gpl.en.html GPL v3 (english version)
    + * @license http://www.gnu.de/documents/gpl.de.html GPL v3 (deutsche Version)
    + * @link http://www.conlite.org ConLite.org
    + * 
    + * $Id: class.ceccreatefacebookmeta.php 291 2014-01-14 23:48:52Z oldperl $
    + */
    +
    +// security check
    +defined('CON_FRAMEWORK') or die('Illegal call');
    +
    +/**
    + * Description of createFacebookMeta
    + *
    + * @author Ortwin Pinke 
    + */
    +class cecCreateFacebookMeta {
    +    
    +    protected $_aConfig = array();
    +    
    +    private $_sFbHeadTag = '';
    +
    +    public function __construct() {
    +        $this->_aConfig = getEffectiveSettingsByType("meta_tag_creator_html5", array("add_facebook_meta"=>false));
    +    }
    +    
    +    public function createHeadTag($sCode) {
    +        $bIsHTML5 = ((getEffectiveSetting('generator', 'html5', 'false') == 'false') ? false : true);
    +        if($bIsHTML5 && $this->_aConfig['add_facebook_meta']) return str_ireplace_once("", $this->_sFbHeadTag, $sCode);
    +        return $sCode;
    +    }
    +}
    +
    +cAutoload::addClassmapConfig(array("cecCreateFacebookMeta" => "conlite/plugins/chains/includes/class.ceccreatefacebookmeta.php"))
    +?>
    \ No newline at end of file
    diff --git a/branches/conlite20/conlite/plugins/chains/includes/config.plugin.php b/branches/conlite20/conlite/plugins/chains/includes/config.plugin.php
    new file mode 100644
    index 0000000..6b57d8d
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/chains/includes/config.plugin.php
    @@ -0,0 +1,48 @@
    +
    + * @license    http://www.contenido.org/license/LIZENZ.txt
    + * @link       http://www.4fb.de
    + * @link       http://www.contenido.org
    + * 
    + * {@internal 
    + *   created 
    + *
    + *   $Id: config.plugin.php 291 2014-01-14 23:48:52Z oldperl $: 
    + * }}
    + * 
    + */
    + 
    +if(!defined('CON_FRAMEWORK')) {
    +	die('Illegal call');
    +}
    +global $_cecRegistry, $cfg;
    +
    +#$cfg['plugins']['frontendlogic'][] = "category";
    +
    +cInclude("plugins", "chains/includes/include.chain.frontend.cat_backendaccess.php");
    +cInclude("plugins", "chains/includes/include.chain.frontend.cat_access.php");
    +cInclude("plugins", "chains/createmetatags/include.chain.content.createmetatags.php");
    +cInclude("plugins", "chains/includes/class.ceccreatefacebookmeta.php");
    +cInclude("plugins", "chains/includes/include.chain.frontend.createbasehref.php");
    +plugin_include('chains', 'includes/include.chain.frontend.output_compressor.php');
    +
    +$_cecRegistry->addChainFunction("Contenido.Frontend.CategoryAccess", "cecFrontendCategoryAccess");
    +$_cecRegistry->addChainFunction("Contenido.Frontend.CategoryAccess", "cecFrontendCategoryAccess_Backend");
    +$_cecRegistry->addChainFunction("Contenido.Content.CreateMetatags", "cecCreateMetatags");
    +$_cecRegistry->addChainFunction("Contenido.Frontend.HTMLCodeOutput", "cecCreateFacebookMeta->createHeadTag");
    +$_cecRegistry->addChainFunction("Contenido.Frontend.BaseHrefGeneration", "cecCreateBaseHref");
    +$_cecRegistry->addChainFunction('Contenido.Frontend.HTMLCodeCompression', 'cecOutputCompressor');
    +?>
    \ No newline at end of file
    diff --git a/branches/conlite20/conlite/plugins/chains/includes/include.chain.content.set_clear_cache.php b/branches/conlite20/conlite/plugins/chains/includes/include.chain.content.set_clear_cache.php
    new file mode 100644
    index 0000000..83e8a0c
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/chains/includes/include.chain.content.set_clear_cache.php
    @@ -0,0 +1,98 @@
    +addChainFunction("Contenido.Content.SaveContentEntry", "cecContentSetClearCache");
    + * 
    + *
    + * @package    Contenido Backend
    + * @subpackage Contenido Chain
    + * @version    $Id: include.chain.content.set_clear_cache.php 17 2011-08-09 10:49:01Z oldperl $
    + * @since      2011-07-14
    + * @author     Ortwin Pinke
    + * @copyright  DCEonline 
    + * @license    http://www.contenido.org/license/LIZENZ.txt
    + * @link       http://www.contenido.org
    + * @link       http://www.ortwinpinke.de
    + * @link       http://forum.contenido.org/viewtopic.php?f=66&t=31432
    + *
    + */
    +
    +if(!defined('CON_FRAMEWORK')) {
    +	die('Illegal call');
    +}
    +
    +/**
    + *
    + * @param int $idartlang
    + * @param int $type
    + * @param int $typeid
    + * @param string $value
    + * @return bool 
    + */
    +function cecContentSetClearCache($idartlang, $type, $typeid, $value) {
    +    
    +    $aArticle2Clear = array($idartlang);
    +    
    +    $bClearCache = getEffectiveSetting('save_article', 'clear_cache', false);
    +    $sAdditionalArticles = getEffectiveSetting('save_article', 'clear_cache_add_idart', null);
    +    $iLimitAdditionalArticles = (int) getEffectiveSetting('save_article', 'clear_cache_limit_add_idart', 10);
    +    $iLimitAdditionalArticles = ($iLimitAdditionalArticles < 10)?10:$iLimitAdditionalArticles;
    +    
    +    if(!is_null($sAdditionalArticles)) {
    +        $aAdditionalArticles = array_map('trim',explode(",", $sAdditionalArticles, $iLimitAdditionalArticles +1));
    +        $iCountElements = count($aAdditionalArticles);        
    +        if($iCountElements > 0) {
    +            if($iCountElements > 1 && $iCountElements > $iLimitAdditionalArticles) {
    +                array_pop ($aAdditionalArticles);
    +            }
    +            array_splice($aArticle2Clear, count($aArticle2Clear), 0, $aAdditionalArticles);
    +        }
    +    }
    +    
    +    if($bClearCache) {
    +        cInclude("classes", "contenido/class.articlelanguage.php");
    +        cInclude("classes", "contenido/class.categoryarticle.php");
    +        
    +        foreach($aArticle2Clear as $iIdArt) {
    +            $oArtLang = new cApiArticleLanguage();
    +            if($oArtLang->loadByPrimaryKey($iIdArt)) {
    +                $oArtCat = new cApiCategoryArticle();
    +                if($oArtCat->loadBy('idart', $oArtLang->get('idart'))) {
    +                    $bCreateCode = !$oArtCat->get('createcode');
    +                    if($bCreateCode) {
    +                        $oArtCat->set('createcode', 1);
    +                        $oArtCat->store();
    +                    }
    +                }
    +                unset($oArtCat);
    +            }
    +            unset($oArtLang);
    +        }       
    +    }
    +    return $value;
    +}
    +?>
    \ No newline at end of file
    diff --git a/branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.cat_access.php b/branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.cat_access.php
    new file mode 100644
    index 0000000..a33c499
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.cat_access.php
    @@ -0,0 +1,74 @@
    +
    + * @license    http://www.contenido.org/license/LIZENZ.txt
    + * @link       http://www.4fb.de
    + * @link       http://www.contenido.org
    + * 
    + * {@internal 
    + *   created 
    + *   modified 2008-07-04, bilal arslan, added security fix
    + *   $Id: include.chain.frontend.cat_access.php 306 2014-03-13 23:03:26Z oldperl $: 
    + * }}
    + * 
    + */
    + 
    +if(!defined('CON_FRAMEWORK')) {
    +	die('Illegal call');
    +}
    +
    +
    +function cecFrontendCategoryAccess ($idlang, $idcat, $user)
    +{
    +	global $cfg;
    +	
    +	$db = new DB_ConLite;
    +	
    +	$FrontendUser = new FrontendUser;
    +	$FrontendUser->loadByPrimaryKey($user);
    +
    +	if ($FrontendUser->virgin)
    +	{
    +		return false;	
    +	}
    +	
    +	$groups = $FrontendUser->getGroupsForUser();
    +
    +	$FrontendPermissionCollection = new FrontendPermissionCollection;
    +	
    +	$sql = "SELECT idcatlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat = " . Contenido_Security::toInteger($idcat) . " AND idlang = " . Contenido_Security::toInteger($idlang);
    +	$db->query($sql);
    +	
    +	if ($db->next_record())
    +	{
    +		$idcatlang = $db->f("idcatlang");	
    +	} else {
    +		return false;	
    +	}
    +	
    +	foreach ($groups as $group)
    +	{
    +		$allow = $FrontendPermissionCollection->checkPerm($group, "category", "access", $idcatlang);
    +		
    +		if ($allow == true)
    +		{
    +			return true;	
    +		}
    +	}
    +	
    +	return false;
    +}
    +?>
    \ No newline at end of file
    diff --git a/branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.cat_backendaccess.php b/branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.cat_backendaccess.php
    new file mode 100644
    index 0000000..81e21f0
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.cat_backendaccess.php
    @@ -0,0 +1,72 @@
    +
    + * @license    http://www.contenido.org/license/LIZENZ.txt
    + * @link       http://www.4fb.de
    + * @link       http://www.contenido.org
    + * 
    + * {@internal 
    + *   created 
    + *   modified 2008-07-04, bilal arslan, added security fix
    + *   modified 2008-09-14, Murat Purc, CON-206: fixed backend access logic
    + *   modified 2008-10-30, Andreas Lindner, also consider group memnership of backend users    
    + *   $Id: include.chain.frontend.cat_backendaccess.php 306 2014-03-13 23:03:26Z oldperl $: 
    + * }}
    + * 
    + */
    + 
    +if(!defined('CON_FRAMEWORK')) {
    +	die('Illegal call');
    +}
    +
    +
    +function cecFrontendCategoryAccess_Backend($idlang, $idcat, $user)
    +{
    +	global $cfg, $perm;
    +
    +	if ($perm->have_perm()) {
    +        // sysadmin or client admin can always access to protected areas
    +        return true;
    +    }
    +    
    +	$db2 = new DB_ConLite;
    +	
    +	$arrSearchFor = array("'".Contenido_Security::escapeDB($user, $db2)."'");
    +
    +	$sql = "SELECT * FROM ".$cfg['tab']['groupmembers']." WHERE user_id = '".Contenido_Security::escapeDB($user, $db2)."'";
    +
    +	$db2->query($sql);
    +	
    +	while ($db2->next_record()) {
    +		$arrSearchFor[] = "'".Contenido_Security::escapeDB($db2->f('group_id'), $db2)."'";
    +	}
    +
    +	$sSearchFor = implode(",", $arrSearchFor);
    +	
    +	$sql = "SELECT idright
    +					FROM ".$cfg["tab"]["rights"]." AS A,
    +						 ".$cfg["tab"]["actions"]." AS B,
    +						 ".$cfg["tab"]["area"]." AS C
    +					 WHERE B.name = 'front_allow' AND C.name = 'str' AND A.user_id IN (". $sSearchFor .") AND A.idcat = '".Contenido_Security::toInteger($idcat)."'
    +							AND A.idarea = C.idarea AND B.idaction = A.idaction AND A.idlang = '".Contenido_Security::toInteger($idlang)."'";
    +
    +	$db2->query($sql);
    +
    +	if (!$db2->next_record()) {
    +		return false;
    +	} else {
    +		return true;
    +	}
    +}?>
    diff --git a/branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.createbasehref.php b/branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.createbasehref.php
    new file mode 100644
    index 0000000..5724318
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.createbasehref.php
    @@ -0,0 +1,70 @@
    +
    + * @license    http://www.contenido.org/license/LIZENZ.txt
    + * @link       http://www.4fb.de
    + * @link       http://www.contenido.org
    + * 
    + * {@internal 
    + *   created 2008-07-31
    + *   modified 2008-08-05, Bj�rn Behrens (HerrB) - added missing parameter and refactored
    + *   modified 2008-08-15, Oliver Lohkemper (OliverL) - run only Client-Properties return Array
    + *   $Id: include.chain.frontend.createbasehref.php 306 2014-03-13 23:03:26Z oldperl $: 
    + * }}
    + * 
    + */
    + 
    +if(!defined('CON_FRAMEWORK')) {
    +	die('Illegal call');
    +}
    +
    +function cecCreateBaseHref ($sCurrentBaseHref)
    +{
    +	global $cfg, $client;
    +	
    +	$oClient	= new cApiClient($client);
    +	$aSettings	= $oClient->getProperties();
    +	if( is_array($aSettings) ) {
    +		foreach ($aSettings as $aClient)
    +		{
    +			if ($aClient["type"] == "client" && strstr($aClient["name"], "frontend_path") !== false)
    +			{
    +				$aUrlData = parse_url($aClient["value"]);
    +	
    +				if ($aUrlData["host"] == $_SERVER['HTTP_HOST'] || 
    +					("www." . $aUrlData["host"]) == $_SERVER['HTTP_HOST'] || 
    +					 $aUrlData["host"] ==  "www." . $_SERVER['HTTP_HOST'] )
    +				{
    +					// The currently used host has been found as 
    +					// part of the base href(s) specified in client settings
    +					
    +					// Return base href as specified in client settings
    +					$sNewBaseHref = $aClient["value"];
    +					return $sNewBaseHref;
    +				}
    +			}
    +		}
    +	}
    +	
    +	// We are still here, so no alternative href was found - return the default one 
    +	return $sCurrentBaseHref;
    +}
    +?>
    \ No newline at end of file
    diff --git a/branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.output_compressor.php b/branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.output_compressor.php
    new file mode 100644
    index 0000000..d9c5a90
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/chains/includes/include.chain.frontend.output_compressor.php
    @@ -0,0 +1,699 @@
    +
    + * @license    http://www.conlite.org/license/LIZENZ.txt
    + * @link       http://www.conlite.org
    + * 
    + * {@internal 
    + *   created 2012-12-16
    + *
    + *   $Id: include.chain.frontend.output_compressor.php 312 2014-06-18 11:01:08Z oldperl $: 
    + * }}
    + * 
    + */
    + 
    +if(!defined('CON_FRAMEWORK')) {
    +    die('Illegal call');
    +}
    +
    +function cecOutputCompressor($sCode) {
    +    global $cfgClient, $client;
    +    
    +    # How is output compression switched?
    +    $switch = getEffectiveSetting('generator', 'output_compression', 'off');
    +    if ($switch == 'off') {
    +        return $sCode;
    +    }
    +    if(!is_writable($cfgClient[$client]['path']['frontend'] . 'cache/')) {
    +        return $sCode;
    +    }
    +    
    +    # Remove comments (NOT IE conditional comment tags and HTML comments in Javascript blocks) from the code
    +    $p0 = strpos($sCode, '');
    +    $p1 = strpos($sCode, '', ($p1 + 1));
    +            $p1 = strpos($sCode, ')
    +            $p1 = strpos($sCode, '', $p1);
    +            while (substr($sCode, ($p2 - 6), 9) == 'endif]-->') {
    +                # IE conditional comment end tag, but in commented block
    +                $p2 = strpos($sCode, '-->', ($p2 + 1));
    +            }
    +            $tmp = substr($sCode, $p1, ($p2 - $p1 + 3));
    +            $sCode = str_replace($tmp, '', $sCode);
    +            $p0 = strpos($sCode, '');
    +            $p1 = strpos($sCode, ')
    +    # We can move the complete block to the end of the head section if only link tags are included, otherwise we must move only the links
    +    # while rebuilding the IE conditional comments around them
    +    $IE = array();
    +    $IElinks = array();
    +    $IEscripts = array();
    +    $IEscriptblocks = array();
    +    $IEstyles = array();
    +    $p1 = strpos($sCode, '', $p1);
    +        $tmp = substr($sCode, $p1, (($p2 - $p1) + 9));
    +        # Find all style link tags with rel="stylesheet" and type="text/css"
    +        $p3 = strpos($tmp, '', $p3);
    +            $tmp2 = substr($tmp, $p3, (($p4 - $p3) + 1));
    +            if ((strpos(strtolower($tmp2), 'rel="stylesheet"')) || (strpos(strtolower($tmp2), "rel='stylesheet'"))) {
    +                if ((strpos(strtolower($tmp2), 'type="text/css"')) || (strpos(strtolower($tmp2), "type='text/css'"))) {
    +                    # Extract the path and filename
    +                    $url = '';
    +                    $p5 = strpos($tmp2, 'href=');
    +                    if ($p5 !== false) { # shouldn't happen, an address is needed
    +                        $p5 += 6;
    +                        $char = substr($tmp2, ($p5 - 1), 1);
    +                        $p6 = strpos($tmp2, $char, $p5);
    +                        $url = substr($tmp2, $p5, ($p6 - $p5));
    +                        # Clean the url from unnessecary path information (just leave the folder name like "css/xxx.css")
    +                        $url = str_replace($cfgClient[$client]['path']['htmlpath'], '', $url);
    +                        $url = ((substr($url, 0, 1) == '/') ? substr($url, 1) : $url);
    +                    }
    +                    # Sort into array grouped by media type
    +                    $p5 = strpos($tmp2, 'media=');
    +                    if ($p5 !== false) {
    +                        $p5 += 7;
    +                        $char = substr($tmp2, ($p5 - 1), 1);
    +                        $p6 = strpos($tmp2, $char, $p5);
    +                        $media = substr($tmp2, $p5, ($p6 - $p5));
    +                        $IElinks[$c][$media][] = array('url' => $url, 'old' => $tmp2);
    +                    } else {
    +                        $IElinks[$c]['all'][] = array('url' => $url, 'old' => $tmp2);
    +                    }
    +                    $IEtmp[] = $tmp2;
    +                }
    +            }
    +            $p3 = strpos($tmp, '', $p3);
    +            # Check if this is included code, or code directly in the page
    +            if (substr($tmp, $p4, 10) == '>') {
    +                $tmp2 = substr($tmp, $p3, (($p4 - $p3) + 10));
    +                # Check if this script tag has a type or language set
    +                $p5 = strpos($tmp2, 'type=');
    +                if ($p5 !== false) {
    +                    $p5 += 6;
    +                    $char = substr($tmp2, ($p5 - 1), 1);
    +                    $p6 = strpos($tmp2, $char, $p5);
    +                    $type = substr($tmp2, $p5, ($p6 - $p5));
    +                    # If type isn't "text/javascript", leave the tag alone
    +                    if (strtolower($type) != 'text/javascript') {
    +                        continue;
    +                    }
    +                } else {
    +                    $p5 = strpos($tmp2, 'language=');
    +                    if ($p5 !== false) {
    +                        $p5 += 10;
    +                        $char = substr($tmp2, ($p5 - 1), 1);
    +                        $p6 = strpos($tmp2, $char, $p5);
    +                        $lang = substr($tmp2, $p5, ($p6 - $p5));
    +                        # If language isn't "javascript", leave the tag alone
    +                        if (strtolower($lang) != 'javascript') {
    +                            continue;
    +                        }
    +                    }
    +                }
    +                # We now definitely have a javascript link tag, save it in an array
    +                $url = '';
    +                $p5 = strpos($tmp2, 'src=');
    +                if ($p5 !== false) { # shouldn't happen, an address is needed
    +                    $p5 += 5;
    +                    $char = substr($tmp2, ($p5 - 1), 1);
    +                    $p6 = strpos($tmp2, $char, $p5);
    +                    $url = substr($tmp2, $p5, ($p6 - $p5));
    +                    # Clean the url from unnessecary path information (just leave the folder name like "js/xxx.js")
    +                    $url = str_replace($cfgClient[$client]['path']['htmlpath'], '', $url);
    +                    $url = ((substr($url, 0, 1) == '/') ? substr($url, 1) : $url);
    +                }
    +                # Exclude files with complete URLs or parameters from the compressor
    +                $compress = (((substr($url, 0, 7) == 'http://') || (substr($url, 0, 8) == 'https://') || (strpos($url, '?') !== false)) ? false : true);
    +                $IEscripts[$c][] = array('url' => $url, 'compress' => $compress, 'old' => $tmp2);
    +                $IEtmp[] = $tmp2;
    +            } else {
    +                # Script block
    +                $p5 = strpos($sCode, '');
    +                if ($p3 < $p5) {
    +                    $p4 = strpos($tmp, '', $p3);
    +                    $tmp2 = substr($tmp, $p3, (($p4 - $p3) + 9));
    +                    $IEscriptblocks[$c][] = $tmp2;
    +                    $IEtmp[] = $tmp2;
    +                }
    +            }
    +            $p3 = strpos($tmp, '', $p3);
    +            $tmp2 = substr($tmp, $p3, (($p4 - $p3) + 8));
    +            $IEstyles[$c][] = $tmp2;
    +            $IEtmp[] = $tmp2;
    +            $p3 = strpos($tmp, '', $p1);
    +        $tmp = substr($sCode, $p1, (($p2 - $p1) + 1));
    +        if ((strpos(strtolower($tmp), 'rel="stylesheet"')) || (strpos(strtolower($tmp), "rel='stylesheet'"))) {
    +            if ((strpos(strtolower($tmp), 'type="text/css"')) || (strpos(strtolower($tmp), "type='text/css'"))) {
    +                # Extract the path and filename
    +                $url = '';
    +                $p3 = strpos($tmp, 'href=');
    +                if ($p3 !== false) { # shouldn't happen, an address is needed
    +                    $p3 += 6;
    +                    $char = substr($tmp, ($p3 - 1), 1);
    +                    $p4 = strpos($tmp, $char, $p3);
    +                    $url = substr($tmp, $p3, ($p4 - $p3));
    +                    # Clean the url from unnessecary path information (just leave the folder name like "css/xxx.css")
    +                    $url = str_replace($cfgClient[$client]['path']['htmlpath'], '', $url);
    +                    $url = ((substr($url, 0, 1) == '/') ? substr($url, 1) : $url);
    +                }
    +                # Exclude files with complete URLs or parameters
    +                if ((substr($url, 0, 7) != 'http://') && (substr($url, 0, 8) != 'https://') && (strpos($url, '?') === false)) {
    +                    # Sort into array grouped by media type
    +                    $p3 = strpos($tmp, 'media=');
    +                    if ($p3 !== false) {
    +                        $p3 += 7;
    +                        $char = substr($tmp, ($p3 - 1), 1);
    +                        $p4 = strpos($tmp, $char, $p3);
    +                        $media = substr($tmp, $p3, ($p4 - $p3));
    +                        $stylesheets[$media][] = array('url' => $url, 'old' => $tmp);
    +                    } else {
    +                        $stylesheets['all'][] = array('url' => $url, 'old' => $tmp);
    +                    }
    +                }
    +            }
    +        }
    +        $p1 = strpos($sCode, '', $p1);
    +        $tmp = substr($sCode, $p1, (($p2 - $p1) + 8));
    +        $styles[] = $tmp;
    +        $p1 = strpos($sCode, ' $sheets) {
    +        # Correct or compress?
    +        if ($switch == 'correct') {
    +            for ($i = 0, $n = count($sheets); $i < $n; $i ++) {
    +                # Remove the old links for this media type
    +                if (strlen($sheets[$i]['url'])) {
    +                    $sCode = str_replace($sheets[$i]['old'], '', $sCode);
    +                }
    +                # Add the links to the end of the head section
    +                $p1 = strpos($sCode, '');
    +                if (strlen($sheets[$i]['url'])) {
    +                    $sCode = substr($sCode, 0, $p1) . '' . "\n" . substr($sCode, $p1);
    +                }
    +            }
    +        } else {
    +            # Call the compressor class for each media type and replace the old links with the single new one
    +            $files = array();
    +            for ($i = 0, $n = count($sheets); $i < $n; $i ++) {
    +                if (strlen($sheets[$i]['url'])) {
    +                    # Find and extract included stylesheet files
    +                    if (is_file($cfgClient[$client]['path']['frontend'] . $sheets[$i]['url'])) {
    +                        $content = file_get_contents($cfgClient[$client]['path']['frontend'] . $sheets[$i]['url']);
    +                        if (strrpos($sheets[$i]['url'], '/') > 0) {
    +                            $path = substr($sheets[$i]['url'], 0, (strrpos($sheets[$i]['url'], '/') + 1));
    +                        } else {
    +                            $path = '';
    +                        }
    +                        $p1 = strpos(strtolower($content), '@import url(');
    +                        while ($p1 !== false) {
    +                            $p2 = strpos($content, ');', $p1);
    +                            $url = str_replace(array('"', "'"), '', substr($content, ($p1 + 12), ($p2 - $p1 - 12)));
    +                            # Clean the url from unnessecary path information (just leave the folder name like "css/xxx.css")
    +                            $url = str_replace($cfgClient[$client]['path']['htmlpath'], '', $url);
    +                            $url = ((substr($url, 0, 1) == '/') ? substr($url, 1) : $url);
    +                            # Exclude files with complete URLs or parameters
    +                            if ((substr($url, 0, 7) != 'http://') && (substr($url, 0, 8) != 'https://') && (strpos($url, '?') === false)) {
    +                                $files[] = $path . $url;
    +                            } else {
    +                                # Files with absolute paths must be placed in the HTML head section
    +                                $p1 = strpos($sCode, '');
    +                                $sCode = substr($sCode, 0, $p1) . '' . "\n" . substr($sCode, $p1);
    +                            }
    +                            $content = substr($content, 0, $p1) . substr($content, ($p2 + 2));
    +                            $p1 = strpos(strtolower($content), '@import url(');
    +                        }
    +                        # Is there any content left in this file?
    +                        if (strlen(trim(str_replace(array("\r", "\n"), '', $content)))) {
    +                            # Yes, add it to the compressor, which will include it's remaining content in the compressed file
    +                            $files[] = $sheets[$i]['url'];
    +                        }
    +                    }
    +                }
    +            }
    +            if (count($files)) {
    +                $compressed = Output_Compressor::generate($cfgClient[$client]['path']['frontend'] . 'cache/', $files, 'css', $cfgClient[$client]['path']['htmlpath']);
    +                # Add the compressed file link to the end of the head section
    +                $p1 = strpos($sCode, '');
    +                $sCode = substr($sCode, 0, $p1) . '' . "\n" . substr($sCode, $p1);
    +            }
    +            # Remove the old links for this media type
    +            for ($i = 0, $n = count($sheets); $i < $n; $i ++) {
    +                if (strlen($sheets[$i]['url'])) {
    +                    $sCode = str_replace($sheets[$i]['old'], '', $sCode);
    +                }
    +            }
    +        }
    +    }
    +    unset($stylesheets);
    +    unset($media);
    +    unset($sheets);
    +    
    +    # Rebuild the code for the IE-commented stylesheets
    +    if (count($IElinks)) {
    +        foreach ($IElinks as $condition => $links) {
    +            # Add the conditional comment start tag to the end of the head section
    +            $p1 = strpos($sCode, '');
    +            $sCode = substr($sCode, 0, $p1) . $condition . "\n" . substr($sCode, $p1);
    +            # Put the links there
    +            foreach ($links as $media => $sheets) {
    +                # Correct or compress?
    +                if ($switch == 'correct') {
    +                    for ($i = 0, $n = count($sheets); $i < $n; $i ++) {
    +                        # Remove the old links for this media type
    +                        if (strlen($sheets[$i]['url'])) {
    +                            $sCode = str_replace($sheets[$i]['old'], '', $sCode);
    +                        }
    +                        # Add the links to the end of the head section
    +                        $p1 = strpos($sCode, '');
    +                        if (strlen($sheets[$i]['url'])) {
    +                            $sCode = substr($sCode, 0, $p1) . '' . "\n" . substr($sCode, $p1);
    +                        }
    +                    }
    +                } else {
    +                    # Call the compressor class for each media type and replace the old links with the single new one
    +                    $files = array();
    +                    for ($i = 0, $n = count($sheets); $i < $n; $i ++) {
    +                        if (strlen($sheets[$i]['url'])) {
    +                            # Find and extract included stylesheet files
    +                            $content = file_get_contents($cfgClient[$client]['path']['frontend'] . $sheets[$i]['url']);
    +                            if (strrpos($sheets[$i]['url'], '/') > 0) {
    +                                $path = substr($sheets[$i]['url'], 0, (strrpos($sheets[$i]['url'], '/') + 1));
    +                            } else {
    +                                $path = '';
    +                            }
    +                            $p1 = strpos(strtolower($content), '@import url(');
    +                            while ($p1 !== false) {
    +                                $p2 = strpos($content, ');', $p1);
    +                                $url = str_replace(array('"', "'"), '', substr($content, ($p1 + 12), ($p2 - $p1 - 12)));
    +                                # Clean the url from unnessecary path information (just leave the folder name like "css/xxx.css")
    +                                $url = str_replace($cfgClient[$client]['path']['htmlpath'], '', $url);
    +                                $url = ((substr($url, 0, 1) == '/') ? substr($url, 1) : $url);
    +                                # Exclude files with complete URLs or parameters
    +                                if ((substr($url, 0, 7) != 'http://') && (substr($url, 0, 8) != 'https://') && (strpos($url, '?') === false)) {
    +                                    $files[] = $path . $url;
    +                                } else {
    +                                    # Files with absolute paths must be placed in the HTML head section
    +                                    $p1 = strpos($sCode, '');
    +                                    $sCode = substr($sCode, 0, $p1) . '' . "\n" . substr($sCode, $p1);
    +                                }
    +                                $content = substr($content, 0, $p1) . substr($content, ($p2 + 2));
    +                                $p1 = strpos(strtolower($content), '@import url(');
    +                            }
    +                            # Is there any content left in this file?
    +                            if (strlen(trim(str_replace(array("\r", "\n"), '', $content)))) {
    +                                # Yes, add it to the compressor, which will include it's remaining content in the compressed file
    +                                $files[] = $sheets[$i]['url'];
    +                            }
    +                        }
    +                    }
    +                    # Make the paths absolute for the compressor
    +                    for ($i = 0, $n = count($files); $i < $n; $i ++) {
    +                        $files[$i] = $cfgClient[$client]['path']['frontend'] . $files[$i];
    +                    }
    +                    # Compress the files into a single one
    +                    $compressed = Output_Compressor::generate($cfgClient[$client]['path']['frontend'] . 'cache/', $files, 'css', $cfgClient[$client]['path']['htmlpath']);
    +                    # Add the compressed file link to the end of the head section
    +                    $p1 = strpos($sCode, '');
    +                    $sCode = substr($sCode, 0, $p1) . '' . "\n" . substr($sCode, $p1);
    +                    # Remove the old links for this media type
    +                    for ($i = 0, $n = count($sheets); $i < $n; $i ++) {
    +                        if (strlen($sheets[$i]['url'])) {
    +                            $sCode = str_replace($sheets[$i]['old'], '', $sCode);
    +                        }
    +                    }
    +                }
    +            }
    +            # Add the conditional comment end tag to the end of the head section
    +            $p1 = strpos($sCode, '');
    +            $sCode = substr($sCode, 0, $p1) . '' . "\n" . substr($sCode, $p1);
    +        }
    +    }
    +    unset($IElinks);
    +    unset($condition);
    +    unset($links);
    +    unset($media);
    +    unset($sheets);
    +    unset($files);
    +    
    +    # Rebuild the code for the style blocks
    +    if (count($styles)) {
    +        for ($i = 0, $n = count($styles); $i < $n; $i ++) {
    +            $sCode = str_replace($styles[$i], '', $sCode);
    +            $p1 = strpos($sCode, '');
    +            $sCode = substr($sCode, 0, $p1) . $styles[$i] . "\n" . substr($sCode, $p1);
    +        }
    +    }
    +    unset($styles);
    +    
    +    # Rebuild the code for the IE-commented style blocks
    +    if (count($IEstyles)) {
    +        foreach ($IEstyles as $condition => $styles) {
    +            # Add the conditional comment start tag to the end of the head section
    +            $p1 = strpos($sCode, '');
    +            $sCode = substr($sCode, 0, $p1) . $condition . "\n" . substr($sCode, $p1);
    +            # Put the style blocks there
    +            for ($i = 0, $n = count($styles); $i < $n; $i ++) {
    +                $p1 = strpos($sCode, '');
    +                $sCode = substr($sCode, 0, $p1) . $styles[$i] . "\n" . substr($sCode, $p1);
    +            }
    +            # Add the conditional comment end tag to the end of the head section
    +            $p1 = strpos($sCode, '');
    +            $sCode = substr($sCode, 0, $p1) . '' . "\n" . substr($sCode, $p1);
    +        }
    +    }
    +    unset($IEstyles);
    +    unset($condition);
    +    unset($styles);
    +    
    +    # Find all script link tags and script blocks
    +    $scripts = array();
    +    $scriptblocks = array();
    +    $p1 = strpos($sCode, '', $p1);
    +        # Check if this is included code, or code directly in the page
    +        if (substr($sCode, $p2, 10) == '>') {
    +            # Script link
    +            $tmp = substr($sCode, $p1, (($p2 - $p1) + 10));
    +            # Check if this script tag has a type or language set
    +            $p3 = strpos($tmp, 'type=');
    +            if ($p3 !== false) {
    +                $p3 += 6;
    +                $char = substr($tmp, ($p3 - 1), 1);
    +                $p4 = strpos($tmp, $char, $p3);
    +                $type = substr($tmp, $p3, ($p4 - $p3));
    +                # If type isn't "text/javascript", leave the tag alone
    +                if (strtolower($type) != 'text/javascript') {
    +                    $p1 = strpos($sCode, ' $url, 'compress' => $compress, 'old' => $tmp);
    +        } else {
    +            # Script block
    +            $p3 = strpos($sCode, '');
    +            if ($p1 < $p3) {
    +                $p2 = strpos($sCode, '', $p1);
    +                $tmp = substr($sCode, $p1, (($p2 - $p1) + 9));
    +                $scriptblocks[] = $tmp;
    +            }
    +            $p1 = strpos($sCode, '';
    +                    # Add the link to the end of the head section
    +                    $p1 = strpos($sCode, '');
    +                    $sCode = substr($sCode, 0, $p1) . $tmp . "\n" . substr($sCode, $p1);
    +                    $files = array();
    +                }
    +                # Create the link code
    +                $tmp = '';
    +                # Add the link to the end of the head section
    +                $p1 = strpos($sCode, '');
    +                $sCode = substr($sCode, 0, $p1) . $tmp . "\n" . substr($sCode, $p1);
    +            } else {
    +                $files[] = $cfgClient[$client]['path']['frontend'] . $scripts[$i]['url'];
    +            }
    +        }
    +        if (count($files)) {
    +            # Compress the files into one single file
    +            $compressed = Output_Compressor::generate($cfgClient[$client]['path']['frontend'] . 'cache/', $files, 'js', $cfgClient[$client]['path']['htmlpath']);
    +            $tmp = '';
    +            # Add the link to the end of the head section
    +            $p1 = strpos($sCode, '');
    +            $sCode = substr($sCode, 0, $p1) . $tmp . "\n" . substr($sCode, $p1);
    +        }
    +    }
    +    unset($scripts);
    +    unset($type);
    +    unset($lang);
    +    unset($files);
    +    
    +    # Rebuild the code for the script blocks
    +    if (count($scriptblocks)) {
    +        for ($i = 0, $n = count($scriptblocks); $i < $n; $i ++) {
    +            $sCode = str_replace($scriptblocks[$i], '', $sCode);
    +            $p1 = strpos($sCode, '');
    +            $sCode = substr($sCode, 0, $p1) . $scriptblocks[$i] . "\n" . substr($sCode, $p1);
    +        }
    +    }
    +    unset($scriptblocks);
    +    
    +    # Rebuild the code for the IE-commented script links
    +    if (count($IEscripts)) {
    +        foreach ($IEscripts as $condition => $links) {
    +            # Add the conditional comment start tag to the end of the head section
    +            $p1 = strpos($sCode, '');
    +            $sCode = substr($sCode, 0, $p1) . $condition . "\n" . substr($sCode, $p1);
    +            # Put the links there
    +            # Call the compressor class and replace the old script links with the single new one
    +            $files = array();
    +            if (count($links)) {
    +                for ($i = 0, $n = count($links); $i < $n; $i ++) {
    +                    # Correct or compress?
    +                    if (($switch == 'correct') || ($links[$i]['compress'] == false)) {
    +                        # First, if we have files in our array, compress them and output them as a single file (needed to presave the loading order)
    +                        if (count($files)) {
    +                            $compressed = Output_Compressor::generate($cfgClient[$client]['path']['frontend'] . 'cache/', $files, 'js', $cfgClient[$client]['path']['htmlpath']);
    +                            $tmp = '';
    +                            # Add the link to the end of the head section
    +                            $p1 = strpos($sCode, '');
    +                            $sCode = substr($sCode, 0, $p1) . $tmp . "\n" . substr($sCode, $p1);
    +                            $files = array();
    +                        }
    +                        # Create the link code
    +                        $tmp = '';
    +                        # Add the link to the end of the head section
    +                        $p1 = strpos($sCode, '');
    +                        $sCode = substr($sCode, 0, $p1) . $tmp . "\n" . substr($sCode, $p1);
    +                    } else {
    +                        $files[] = $cfgClient[$client]['path']['frontend'] . $links[$i]['url'];
    +                    }
    +                }
    +                if (count($files)) {
    +                    # Compress the files into one single file
    +                    $compressed = Output_Compressor::generate($cfgClient[$client]['path']['frontend'] . 'cache/', $files, 'js', $cfgClient[$client]['path']['htmlpath']);
    +                    $tmp = '';
    +                    # Add the link to the end of the head section
    +                    $p1 = strpos($sCode, '');
    +                    $sCode = substr($sCode, 0, $p1) . $tmp . "\n" . substr($sCode, $p1);
    +                }
    +            }
    +            # Add the conditional comment end tag to the end of the head section
    +            $p1 = strpos($sCode, '');
    +            $sCode = substr($sCode, 0, $p1) . '' . "\n" . substr($sCode, $p1);
    +        }
    +    }
    +    unset($IEscripts);
    +    unset($condition);
    +    unset($links);
    +    
    +    # Rebuild the code for the IE-commented script blocks
    +    if (count($IEscriptblocks)) {
    +        foreach ($IEscriptblocks as $condition => $link) {
    +            # Add the conditional comment start tag to the end of the head section
    +            $p1 = strpos($sCode, '');
    +            $sCode = substr($sCode, 0, $p1) . $condition . "\n" . $link . "\n" . '' . "\n" . substr($sCode, $p1);
    +        }
    +    }
    +    unset($IEscriptblocks);
    +    unset($condition);
    +    unset($link);
    +    
    +    # Convert non unix type line breaks to unix type line breaks
    +    $sCode = str_replace(array("\r\n", "\r"), "\n", $sCode);
    +    
    +    if ($switch == 'full') {
    +        # Remove preceding and trailing spaces from each line
    +        $aCnt = explode("\n", $sCode);
    +        for ($i = 0, $n = count($aCnt); $i < $n; $i ++) {
    +            $aCnt[$i] = trim($aCnt[$i]);
    +        }
    +        $sCode = implode("\n", $aCnt);
    +    }
    +    
    +    # Remove blank lines
    +    $aLines = explode("\n", $sCode);
    +    $sCode = '';
    +    for ($i = 0, $n = count($aLines); $i < $n; $i ++) {
    +        if (strlen(trim($aLines[$i]))) {
    +            $sCode .= $aLines[$i] . "\n";
    +        }
    +    }
    +/*
    +    while (strpos($sCode, "\n\n") !== false) {
    +        $sCode = str_replace("\n\n", "\n", $sCode);
    +    }
    +*/
    +    
    +    # Do some more cleanup
    +    unset($tmp);
    +    unset($char);
    +    unset($url);
    +    unset($p1);
    +    unset($p2);
    +    unset($p3);
    +    unset($p4);
    +    unset($p5);
    +    
    +    # Compress the HTML code?
    +    if ((strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) && (extension_loaded('zlib')) && (!ini_get("zlib.output_compression"))) {
    +        header('Content-Encoding: gzip');
    +        $sCode = gzencode($sCode, 6, FORCE_GZIP);
    +    }
    +    
    +    # Return the new page code
    +    return $sCode;
    +}
    +?>
    \ No newline at end of file
    diff --git a/branches/conlite20/conlite/plugins/chains/includes/old.config.plugin.php b/branches/conlite20/conlite/plugins/chains/includes/old.config.plugin.php
    new file mode 100755
    index 0000000..9fe9472
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/chains/includes/old.config.plugin.php
    @@ -0,0 +1,44 @@
    +
    + * @license    http://www.contenido.org/license/LIZENZ.txt
    + * @link       http://www.4fb.de
    + * @link       http://www.contenido.org
    + * 
    + * {@internal 
    + *   created 
    + *
    + *   $Id: config.plugin.php 2 2011-07-20 12:00:48Z oldperl $: 
    + * }}
    + * 
    + */
    + 
    +if(!defined('CON_FRAMEWORK')) {
    +	die('Illegal call');
    +}
    +global $_cecRegistry, $cfg;
    +
    +#$cfg['plugins']['frontendlogic'][] = "category";
    +
    +cInclude("plugins", "chains/includes/include.chain.frontend.cat_backendaccess.php");
    +cInclude("plugins", "chains/includes/include.chain.frontend.cat_access.php");
    +//cInclude("plugins", "chains/includes/include.chain.content.createmetatags.php");
    +cInclude("plugins", "chains/includes/include.chain.frontend.createbasehref.php");
    +
    +$_cecRegistry->addChainFunction("Contenido.Frontend.CategoryAccess", "cecFrontendCategoryAccess");
    +$_cecRegistry->addChainFunction("Contenido.Frontend.CategoryAccess", "cecFrontendCategoryAccess_Backend");
    +//$_cecRegistry->addChainFunction("Contenido.Content.CreateMetatags", "cecCreateMetatags");
    +$_cecRegistry->addChainFunction("Contenido.Frontend.BaseHrefGeneration", "cecCreateBaseHref");
    +?>
    diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/cl_plugin.xml b/branches/conlite20/conlite/plugins/cl_newsletter/cl_plugin.xml
    new file mode 100644
    index 0000000..544ca80
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/cl_newsletter/cl_plugin.xml
    @@ -0,0 +1,82 @@
    +
    +
    +    
    +        ConLite Newsletter
    +        cl_newsletter
    +        45D7F1F3-41E9-57BC-8987-C0550B3B07B8
    +        ConLite Newsletter System
    +        ConLite Team
    +        ConLite Team
    +        cl_newsletter@conlite.org
    +        https://conlite.org
    +        1.0.0
    +    
    +    
    +        
    +    
    +    
    +        
    +            news
    +            news_edit            
    +            news_edittpl            
    +            news_editcontent
    +            news_jobs
    +            recipients
    +            recipients_import
    +            recipientgroups
    +        
    +        
    +            news_save
    +            news_create
    +            news_delete
    +            news_duplicate
    +            news_add_job
    +            news_send_test
    +            news_job_delete
    +            news_job_details
    +            news_job_detail_delete
    +            news_html_settings
    +            news_job_run
    +            recipients_save
    +            recipients_create
    +            recipients_delete
    +            recipientgroup_delete
    +            recipientgroup_create
    +            recipientgroup_recipient_delete
    +            recipientgroup_save_group
    +            recipients_purge
    +            recipients_import
    +            recipients_import_exec
    +        
    +        
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +            
    +        
    +        
    +            
    +            
    +            
    +        
    +    
    +
    \ No newline at end of file
    diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.groups.php b/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.groups.php
    new file mode 100644
    index 0000000..f91060f
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.groups.php
    @@ -0,0 +1,288 @@
    +
    + * @license    http://www.contenido.org/license/LIZENZ.txt
    + * @link       http://www.4fb.de
    + * @link       http://www.contenido.org
    + * @since      file available since contenido release <= 4.6
    + *
    + * {@internal
    + *   created  2004-08-01
    + *   modified 2008-06-30, Dominik Ziegler, add security fix
    + *   modified 2011-03-14, Murat Purc, adapted to new GenericDB, partly ported to PHP 5, formatting
    + *
    + *   $Id: class.newsletter.groups.php 312 2014-06-18 11:01:08Z oldperl $:
    + * }}
    + *
    + */
    +if (!defined('CON_FRAMEWORK')) {
    +    die('Illegal call');
    +}
    +
    +/**
    + * Recipient group management class
    + */
    +class RecipientGroupCollection extends ItemCollection {
    +
    +    /**
    +     * Constructor Function
    +     * @param none
    +     */
    +    public function __construct() {
    +        global $cfg;
    +        parent::__construct($cfg["tab"]["news_groups"], "idnewsgroup");
    +        $this->_setItemClass("RecipientGroup");
    +    }
    +
    +    /**
    +     * Creates a new group
    +     * @param $groupname string Specifies the groupname
    +     * @param $defaultgroup integer Specfies, if group is default group (optional)
    +     */
    +    public function create($groupname, $defaultgroup = 0) {
    +        global $client, $lang;
    +
    +        $client = Contenido_Security::toInteger($client);
    +        $lang = Contenido_Security::toInteger($lang);
    +
    +        $group = new RecipientGroup();
    +
    +        #$_arrInFilters = array('urlencode', 'clHtmlSpecialChars', 'addslashes');
    +
    +        $mangledGroupName = $group->_inFilter($groupname);
    +        $this->setWhere("idclient", $client);
    +        $this->setWhere("idlang", $lang);
    +        $this->setWhere("groupname", $mangledGroupName);
    +        $this->query();
    +
    +        if ($obj = $this->next()) {
    +            $groupname = $groupname . md5(rand());
    +        }
    +
    +        $item = parent::createNewItem();
    +
    +        $item->set("idclient", $client);
    +        $item->set("idlang", $lang);
    +        $item->set("groupname", $groupname);
    +        $item->set("defaultgroup", $defaultgroup);
    +        $item->store();
    +
    +        return $item;
    +    }
    +
    +    /**
    +     * Overridden delete method to remove groups from groupmember table
    +     * before deleting group
    +     *
    +     * @param $itemID int specifies the newsletter recipient group
    +     */
    +    public function delete($itemID) {
    +        $oAssociations = new RecipientGroupMemberCollection;
    +        $oAssociations->setWhere("idnewsgroup", $itemID);
    +        $oAssociations->query();
    +
    +        while ($oItem = $oAssociations->next()) {
    +            $oAssociations->delete($oItem->get("idnewsgroupmember"));
    +        }
    +        parent::delete($itemID);
    +    }
    +
    +}
    +
    +/**
    + * Single RecipientGroup Item
    + */
    +class RecipientGroup extends Item {
    +
    +    /**
    +     * Constructor Function
    +     * @param  mixed  $mId  Specifies the ID of item to load
    +     */
    +    public function __construct($mId = false) {
    +        global $cfg;
    +        parent::__construct($cfg["tab"]["news_groups"], "idnewsgroup");
    +        if ($mId !== false) {
    +            $this->loadByPrimaryKey($mId);
    +        }
    +    }
    +
    +    /**
    +     * Overriden store() method to ensure, that there is only one default group
    +     * */
    +    public function store() {
    +        global $client, $lang;
    +
    +        $client = Contenido_Security::toInteger($client);
    +        $lang = Contenido_Security::toInteger($lang);
    +
    +        if ($this->get("defaultgroup") == 1) {
    +            $oItems = new RecipientGroupCollection();
    +            $oItems->setWhere("idclient", $client);
    +            $oItems->setWhere("idlang", $lang);
    +            $oItems->setWhere("defaultgroup", 1);
    +            $oItems->setWhere("idnewsgroup", $this->get("idnewsgroup"), "<>");
    +            $oItems->query();
    +
    +            while ($oItem = $oItems->next()) {
    +                $oItem->set("defaultgroup", 0);
    +                $oItem->store();
    +            }
    +        }
    +        parent::store();
    +    }
    +
    +}
    +
    +/**
    + * Recipient group member management class
    + */
    +class RecipientGroupMemberCollection extends ItemCollection {
    +
    +    /**
    +     * Constructor Function
    +     * @param none
    +     */
    +    public function __construct() {
    +        global $cfg;
    +        parent::__construct($cfg["tab"]["news_groupmembers"], "idnewsgroupmember");
    +        $this->_setJoinPartner('RecipientGroupCollection');
    +        $this->_setJoinPartner('RecipientCollection');
    +        $this->_setItemClass("RecipientGroupMember");
    +    }
    +
    +    /**
    +     * Creates a new association
    +     * @param $idrecipientgroup int specifies the newsletter group
    +     * @param $idrecipient  int specifies the newsletter user
    +     */
    +    public function create($idrecipientgroup, $idrecipient) {
    +        $idrecipientgroup = Contenido_Security::toInteger($idrecipientgroup);
    +        $idrecipient = Contenido_Security::toInteger($idrecipient);
    +
    +        $this->setWhere("idnewsgroup", $idrecipientgroup);
    +        $this->setWhere("idnewsrcp", $idrecipient);
    +        $this->query();
    +
    +        if ($this->next()) {
    +            return false;
    +        }
    +
    +        $oItem = parent::create();
    +
    +        $oItem->set("idnewsrcp", $idrecipient);
    +        $oItem->set("idnewsgroup", $idrecipientgroup);
    +        $oItem->store();
    +
    +        return $oItem;
    +    }
    +
    +    /**
    +     * Removes an association
    +     * @param $idrecipientgroup int specifies the newsletter group
    +     * @param $idrecipient  int specifies the newsletter user
    +     */
    +    public function remove($idrecipientgroup, $idrecipient) {
    +        $idrecipientgroup = Contenido_Security::toInteger($idrecipientgroup);
    +        $idrecipient = Contenido_Security::toInteger($idrecipient);
    +
    +        $this->setWhere("idnewsgroup", $idrecipientgroup);
    +        $this->setWhere("idnewsrcp", $idrecipient);
    +        $this->query();
    +
    +        if ($oItem = $this->next()) {
    +            $this->delete($oItem->get("idnewsgroupmember"));
    +        }
    +    }
    +
    +    /**
    +     * Removes all associations from any newsletter group
    +     * @param $idrecipient  int specifies the newsletter recipient
    +     */
    +    public function removeRecipientFromGroups($idrecipient) {
    +        $idrecipient = Contenido_Security::toInteger($idrecipient);
    +
    +        $this->setWhere("idnewsrcp", $idrecipient);
    +        $this->query();
    +
    +        while ($oItem = $this->next()) {
    +            $this->delete($oItem->get("idnewsgroupmember"));
    +        }
    +    }
    +
    +    /**
    +     * Removes all associations of a newsletter group
    +     * @param $idgroup  int specifies the newsletter recipient group
    +     */
    +    public function removeGroup($idgroup) {
    +        $idgroup = Contenido_Security::toInteger($idgroup);
    +
    +        $this->setWhere("idnewsgroup", $idgroup);
    +        $this->query();
    +
    +        while ($oItem = $this->next()) {
    +            $this->delete($oItem->get("idnewsgroupmember"));
    +        }
    +    }
    +
    +    /**
    +     * Returns all recipients in a single group
    +     * @param $idrecipientgroup int specifies the newsletter group
    +     * @param $asObjects boolean specifies if the function should return objects
    +     * @return array RecipientRecipient items
    +     */
    +    public function getRecipientsInGroup($idrecipientgroup, $asObjects = true) {
    +        $idrecipientgroup = Contenido_Security::toInteger($idrecipientgroup);
    +
    +        $this->setWhere("idnewsgroup", $idrecipientgroup);
    +        $this->query();
    +
    +        $aObjects = array();
    +
    +        while ($oItem = $this->next()) {
    +            if ($asObjects) {
    +                $oRecipient = new Recipient();
    +                $oRecipient->loadByPrimaryKey($oItem->get("idnewsrcp"));
    +
    +                $aObjects[] = $oRecipient;
    +            } else {
    +                $aObjects[] = $oItem->get("idnewsrcp");
    +            }
    +        }
    +
    +        return ($aObjects);
    +    }
    +
    +}
    +
    +/**
    + * Single RecipientGroup Item
    + */
    +class RecipientGroupMember extends Item {
    +
    +    /**
    +     * Constructor Function
    +     * @param  mixed  $mId  Specifies the ID of item to load
    +     */
    +    public function __construct($mId = false) {
    +        global $cfg;
    +        parent::__construct($cfg["tab"]["news_groupmembers"], "idnewsgroupmember");
    +        if ($mId !== false) {
    +            $this->loadByPrimaryKey($mId);
    +        }
    +    }
    +
    +}
    diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.jobs.php b/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.jobs.php
    new file mode 100644
    index 0000000..dc08113
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.jobs.php
    @@ -0,0 +1,483 @@
    +
    + * @license    http://www.contenido.org/license/LIZENZ.txt
    + * @link       http://www.4fb.de
    + * @link       http://www.contenido.org
    + * @since      file available since contenido release <= 4.6
    + *
    + * {@internal
    + *   created  2004-08-01
    + *   modified 2008-06-30, Dominik Ziegler, add security fix
    + *   modified 2011-03-14, Murat Purc, adapted to new GenericDB, partly ported to PHP 5, formatting
    + *
    + *   $Id: class.newsletter.jobs.php 119 2012-08-07 17:35:39Z oldperl $:
    + * }}
    + *
    + */
    +if (!defined('CON_FRAMEWORK')) {
    +    die('Illegal call');
    +}
    +
    +/**
    + * Collection management class
    + */
    +class cNewsletterJobCollection extends ItemCollection {
    +
    +    /**
    +     * Constructor Function
    +     * @param none
    +     */
    +    public function __construct() {
    +        global $cfg;
    +        parent::__construct($cfg["tab"]["news_jobs"], "idnewsjob");
    +        $this->_setItemClass("cNewsletterJob");
    +    }
    +
    +    /**
    +     * Creates a newsletter job
    +     * @param $name        string    Specifies the name of the newsletter, the same name may be used more than once
    +     * @param $idnews    integer Newsletter id
    +     */
    +    public function create($iIDNews, $iIDCatArt, $sName = "") {
    +        global $client, $lang, $cfg, $cfgClient, $auth;
    +
    +        $oNewsletter = new Newsletter;
    +        if ($oNewsletter->loadByPrimaryKey($iIDNews)) {
    +            $iIDNews = Contenido_Security::toInteger($iIDNews);
    +            $iIDCatArt = Contenido_Security::toInteger($iIDCatArt);
    +            $lang = Contenido_Security::toInteger($lang);
    +            $client = Contenido_Security::toInteger($client);
    +            $sName = Contenido_Security::escapeDB($sName, null);
    +
    +            $oItem = parent::createNewItem();
    +
    +            $oItem->set("idnews", $iIDNews);
    +            $oItem->set("idclient", $client);
    +            $oItem->set("idlang", $lang);
    +
    +            if ($sName == "") {
    +                $oItem->set("name", $oNewsletter->get("name"));
    +            } else {
    +                $oItem->set("name", $sName);
    +            }
    +            $oItem->set("type", $oNewsletter->get("type"));
    +            $oItem->set("use_cronjob", $oNewsletter->get("use_cronjob"));
    +
    +            $oLang = new cApiLanguage($lang);
    +            $oItem->set("encoding", $oLang->get("encoding"));
    +            unset($oLang);
    +
    +            $oItem->set("idart", $oNewsletter->get("idart"));
    +            $oItem->set("subject", $oNewsletter->get("subject"));
    +
    +            // Precompile messages
    +            $sPath = $cfgClient[$client]["path"]["htmlpath"] . "front_content.php?changelang=" . $lang . "&idcatart=" . $iIDCatArt . "&";
    +
    +            $sMessageText = $oNewsletter->get("message");
    +
    +            // Preventing double lines in mail, you may wish to disable this function on windows servers
    +            if (!getSystemProperty("newsletter", "disable-rn-replacement")) {
    +                $sMessageText = str_replace("\r\n", "\n", $sMessageText);
    +            }
    +
    +            $oNewsletter->_replaceTag($sMessageText, false, "unsubscribe", $sPath . "unsubscribe={KEY}");
    +            $oNewsletter->_replaceTag($sMessageText, false, "change", $sPath . "change={KEY}");
    +            $oNewsletter->_replaceTag($sMessageText, false, "stop", $sPath . "stop={KEY}");
    +            $oNewsletter->_replaceTag($sMessageText, false, "goon", $sPath . "goon={KEY}");
    +
    +            $oItem->set("message_text", $sMessageText);
    +
    +            if ($oNewsletter->get("type") == "text") {
    +                // Text newsletter, no html message
    +                $sMessageHTML = "";
    +            } else {
    +                // HTML newsletter, get article content
    +                $sMessageHTML = $oNewsletter->getHTMLMessage();
    +
    +                if ($sMessageHTML) {
    +                    $oNewsletter->_replaceTag($sMessageHTML, true, "name", "MAIL_NAME");
    +                    $oNewsletter->_replaceTag($sMessageHTML, true, "number", "MAIL_NUMBER");
    +                    $oNewsletter->_replaceTag($sMessageHTML, true, "date", "MAIL_DATE");
    +                    $oNewsletter->_replaceTag($sMessageHTML, true, "time", "MAIL_TIME");
    +
    +                    $oNewsletter->_replaceTag($sMessageHTML, true, "unsubscribe", $sPath . "unsubscribe={KEY}");
    +                    $oNewsletter->_replaceTag($sMessageHTML, true, "change", $sPath . "change={KEY}");
    +                    $oNewsletter->_replaceTag($sMessageHTML, true, "stop", $sPath . "stop={KEY}");
    +                    $oNewsletter->_replaceTag($sMessageHTML, true, "goon", $sPath . "goon={KEY}");
    +
    +                    // Replace plugin tags by simple MAIL_ tags
    +                    if (getSystemProperty("newsletter", "newsletter-recipients-plugin") == "true") {
    +                        if (is_array($cfg['plugins']['recipients'])) {
    +                            foreach ($cfg['plugins']['recipients'] as $sPlugin) {
    +                                plugin_include("recipients", $sPlugin . "/" . $sPlugin . ".php");
    +                                if (function_exists("recipients_" . $sPlugin . "_wantedVariables")) {
    +                                    $aPluginVars = array();
    +                                    $aPluginVars = call_user_func("recipients_" . $sPlugin . "_wantedVariables");
    +
    +                                    foreach ($aPluginVars as $sPluginVar) {
    +                                        $oNewsletter->_replaceTag($sMessageHTML, true, $sPluginVar, "MAIL_" . strtoupper($sPluginVar));
    +                                    }
    +                                }
    +                            }
    +                        }
    +                    }
    +                } else {
    +                    // There was a problem getting html message (maybe article deleted)
    +                    // Cancel job generation
    +                    return false;
    +                }
    +            }
    +
    +            $oItem->set("message_html", $sMessageHTML);
    +
    +            $oItem->set("newsfrom", $oNewsletter->get("newsfrom"));
    +            if ($oNewsletter->get("newsfromname") == "") {
    +                $oItem->set("newsfromname", $oNewsletter->get("newsfrom"));
    +            } else {
    +                $oItem->set("newsfromname", $oNewsletter->get("newsfromname"));
    +            }
    +            $oItem->set("newsdate", date("Y-m-d H:i:s"), false); //$oNewsletter->get("newsdate"));
    +            $oItem->set("dispatch", $oNewsletter->get("dispatch"));
    +            $oItem->set("dispatch_count", $oNewsletter->get("dispatch_count"));
    +            $oItem->set("dispatch_delay", $oNewsletter->get("dispatch_delay"));
    +
    +            // Store "send to" info in serialized array (just info)
    +            $aSendInfo = array();
    +            $aSendInfo[] = $oNewsletter->get("send_to");
    +
    +            switch ($oNewsletter->get("send_to")) {
    +                case "selection":
    +                    $oGroups = new RecipientGroupCollection;
    +                    $oGroups->setWhere("idnewsgroup", unserialize($oNewsletter->get("send_ids")), "IN");
    +                    $oGroups->setOrder("groupname");
    +                    $oGroups->query();
    +                    #$oGroups->select("idnewsgroup IN ('" . implode("','", unserialize($oNewsletter->get("send_ids"))) . "')", "", "groupname");
    +
    +                    while ($oGroup = $oGroups->next()) {
    +                        $aSendInfo[] = $oGroup->get("groupname");
    +                    }
    +
    +                    unset($oGroup);
    +                    unset($oGroups);
    +                    break;
    +                case "single":
    +                    if (is_numeric($oNewsletter->get("send_ids"))) {
    +                        $oRcp = new Recipient($oNewsletter->get("send_ids"));
    +
    +                        if ($oRcp->get("name") == "") {
    +                            $aSendInfo[] = $oRcp->get("email");
    +                        } else {
    +                            $aSendInfo[] = $oRcp->get("name");
    +                        }
    +                        $aSendInfo[] = $oRcp->get("email");
    +
    +                        unset($oRcp);
    +                    }
    +                    break;
    +                default:
    +            }
    +            $oItem->set("send_to", serialize($aSendInfo), false);
    +
    +            $oItem->set("created", date("Y-m-d H:i:s"), false);
    +            $oItem->set("author", $auth->auth["uid"]);
    +            $oItem->set("authorname", $auth->auth["uname"]);
    +            unset($oNewsletter); // Not needed anymore
    +            // Adds log items for all recipients and returns recipient count
    +            $oLogs = new cNewsletterLogCollection();
    +            $iRecipientCount = $oLogs->initializeJob($oItem->get($oItem->primaryKey), $iIDNews);
    +            unset($oLogs);
    +
    +            $oItem->set("rcpcount", $iRecipientCount);
    +            $oItem->set("sendcount", 0);
    +            $oItem->set("status", 1); // Waiting for sending; note, that status will be set to 9, if $iRecipientCount = 0 in store() method
    +
    +            $oItem->store();
    +
    +            return $oItem;
    +        } else {
    +            return false;
    +        }
    +    }
    +
    +    /**
    +     * Overridden delete method to remove job details (logs) from newsletter logs table
    +     * before deleting newsletter job
    +     *
    +     * @param $iItemID int specifies the frontend user group
    +     */
    +    public function delete($iItemID) {
    +        $oLogs = new cNewsletterLogCollection();
    +        $oLogs->delete($iItemID);
    +
    +        parent::delete($iItemID);
    +    }
    +
    +}
    +
    +/**
    + * Single NewsletterJob Item
    + */
    +class cNewsletterJob extends Item {
    +
    +    /**
    +     * Constructor Function
    +     * @param  mixed  $mId  Specifies the ID of item to load
    +     */
    +    public function __construct($mId = false) {
    +        global $cfg;
    +        parent::__construct($cfg["tab"]["news_jobs"], "idnewsjob");
    +        if ($mId !== false) {
    +            $this->loadByPrimaryKey($mId);
    +        }
    +    }
    +
    +    public function runJob() {
    +        global $cfg, $recipient;
    +
    +        $iCount = 0;
    +        if ($this->get("status") == 2) {
    +            // Job is currently running, check start time and restart if
    +            // started 5 minutes ago
    +            $dStart = strtotime($this->get("started"));
    +            $dNow = time();
    +
    +            if (($dNow - $dStart) > (5 * 60)) {
    +                $this->set("status", 1);
    +                $this->set("started", "0000-00-00 00:00:00", false);
    +
    +                $oLogs = new cNewsletterLogCollection();
    +                $oLogs->setWhere("idnewsjob", $this->get($this->primaryKey));
    +                $oLogs->setWhere("status", "sending");
    +                $oLogs->query();
    +
    +                while ($oLog = $oLogs->next()) {
    +                    $oLog->set("status", "error (sending)");
    +                    $oLog->store();
    +                }
    +            }
    +        }
    +
    +        if ($this->get("status") == 1) {
    +            // Job waiting for sending
    +            $this->set("status", 2);
    +            $this->set("started", date("Y-m-d H:i:s"), false);
    +            $this->store();
    +
    +            // Initialization
    +            $aMessages = array();
    +
    +            $oLanguage = new cApiLanguage($this->get("idlang"));
    +            $sFormatDate = $oLanguage->getProperty("dateformat", "date");
    +            $sFormatTime = $oLanguage->getProperty("dateformat", "time");
    +            unset($oLanguage);
    +
    +            if ($sFormatDate == "") {
    +                $sFormatDate = "%d.%m.%Y";
    +            }
    +            if ($sFormatTime == "") {
    +                $sFormatTime = "%H:%M";
    +            }
    +
    +            // Get newsletter data
    +            $sFrom = $this->get("newsfrom");
    +            $sFromName = $this->get("newsfromname");
    +            $sSubject = $this->get("subject");
    +            $sMessageText = $this->get("message_text");
    +            $sMessageHTML = $this->get("message_html");
    +            $dNewsDate = strtotime($this->get("newsdate"));
    +            $sEncoding = $this->get("encoding");
    +            $bIsHTML = false;
    +            if ($this->get("type") == "html" && $sMessageHTML != "") {
    +                $bIsHTML = true;
    +            }
    +
    +            $bDispatch = false;
    +            if ($this->get("dispatch") == 1) {
    +                $bDispatch = true;
    +            }
    +
    +            // Single replacements
    +            // Replace message tags (text message)
    +            $sMessageText = str_replace("MAIL_DATE", strftime($sFormatDate, $dNewsDate), $sMessageText);
    +            $sMessageText = str_replace("MAIL_TIME", strftime($sFormatTime, $dNewsDate), $sMessageText);
    +            $sMessageText = str_replace("MAIL_NUMBER", $this->get("rcpcount"), $sMessageText);
    +
    +            // Replace message tags (html message)
    +            if ($bIsHTML) {
    +                $sMessageHTML = str_replace("MAIL_DATE", strftime($sFormatDate, $dNewsDate), $sMessageHTML);
    +                $sMessageHTML = str_replace("MAIL_TIME", strftime($sFormatTime, $dNewsDate), $sMessageHTML);
    +                $sMessageHTML = str_replace("MAIL_NUMBER", $this->get("rcpcount"), $sMessageHTML);
    +            }
    +
    +            // Enabling plugin interface
    +            $bPluginEnabled = false;
    +            if (getSystemProperty("newsletter", "newsletter-recipients-plugin") == "true") {
    +                $bPluginEnabled = true;
    +                $aPlugins = array();
    +
    +                if (is_array($cfg['plugins']['recipients'])) {
    +                    foreach ($cfg['plugins']['recipients'] as $sPlugin) {
    +                        plugin_include("recipients", $sPlugin . "/" . $sPlugin . ".php");
    +                        if (function_exists("recipients_" . $sPlugin . "_wantedVariables")) {
    +                            $aPlugins[$sPlugin] = call_user_func("recipients_" . $sPlugin . "_wantedVariables");
    +                        }
    +                    }
    +                }
    +            }
    +
    +            // Get recipients (from log table)
    +            if (!is_object($oLogs)) {
    +                $oLogs = new cNewsletterLogCollection;
    +            } else {
    +                $oLogs->resetQuery();
    +            }
    +            $oLogs->setWhere("idnewsjob", $this->get($this->primaryKey));
    +            $oLogs->setWhere("status", "pending");
    +
    +            if ($bDispatch) {
    +                $oLogs->setLimit(0, $this->get("dispatch_count"));
    +            }
    +
    +            $oLogs->query();
    +            while ($oLog = $oLogs->next()) {
    +                $iCount++;
    +                $oLog->set("status", "sending");
    +                $oLog->store();
    +
    +                $sRcpMsgText = $sMessageText;
    +                $sRcpMsgHTML = $sMessageHTML;
    +
    +                $sKey = $oLog->get("rcphash");
    +                $sEMail = $oLog->get("rcpemail");
    +                $bSendHTML = false;
    +                if ($oLog->get("rcpnewstype") == 1) {
    +                    $bSendHTML = true; // Recipient accepts html newsletter
    +                }
    +
    +                if (strlen($sKey) == 30) { // Prevents sending without having a key
    +                    $sRcpMsgText = str_replace("{KEY}", $sKey, $sRcpMsgText);
    +                    $sRcpMsgText = str_replace("MAIL_MAIL", $sEMail, $sRcpMsgText);
    +                    $sRcpMsgText = str_replace("MAIL_NAME", $oLog->get("rcpname"), $sRcpMsgText);
    +
    +                    // Replace message tags (html message)
    +                    if ($bIsHTML && $bSendHTML) {
    +                        $sRcpMsgHTML = str_replace("{KEY}", $sKey, $sRcpMsgHTML);
    +                        $sRcpMsgHTML = str_replace("MAIL_MAIL", $sEMail, $sRcpMsgHTML);
    +                        $sRcpMsgHTML = str_replace("MAIL_NAME", $oLog->get("rcpname"), $sRcpMsgHTML);
    +                    }
    +
    +                    if ($bPluginEnabled) {
    +                        // Don't change name of $recipient variable as it is used in plugins!
    +                        $recipient = new Recipient();
    +                        $recipient->loadByPrimaryKey($oLog->get("idnewsrcp"));
    +
    +                        foreach ($aPlugins as $sPlugin => $aPluginVar) {
    +                            foreach ($aPluginVar as $sPluginVar) {
    +                                // Replace tags in text message
    +                                $sRcpMsgText = str_replace("MAIL_" . strtoupper($sPluginVar), call_user_func("recipients_" . $sPlugin . "_getvalue", $sPluginVar), $sRcpMsgText);
    +
    +                                // Replace tags in html message
    +                                if ($bIsHTML && $bSendHTML) {
    +                                    $sRcpMsgHTML = str_replace("MAIL_" . strtoupper($sPluginVar), call_user_func("recipients_" . $sPlugin . "_getvalue", $sPluginVar), $sRcpMsgHTML);
    +                                }
    +                            }
    +                        }
    +                        unset($recipient);
    +                    }
    +
    +                    $oMail = new PHPMailer();
    +                    $oMail->CharSet = $sEncoding;
    +                    $oMail->IsHTML($bIsHTML && $bSendHTML);
    +                    $oMail->From = $sFrom;
    +                    $oMail->FromName = $sFromName;
    +                    $oMail->AddAddress($sEMail);
    +                    $oMail->Mailer = "mail";
    +                    $oMail->Subject = $sSubject;
    +
    +                    if ($bIsHTML && $bSendHTML) {
    +                        $oMail->Body = $sRcpMsgHTML;
    +                        $oMail->AltBody = $sRcpMsgText . "\n\n";
    +                    } else {
    +                        $oMail->Body = $sRcpMsgText . "\n\n";
    +                    }
    +
    +                    if ($oMail->Send()) {
    +                        $oLog->set("status", "successful");
    +                        $oLog->set("sent", date("Y-m-d H:i:s"), false);
    +                    } else {
    +                        $oLog->set("status", "error (sending)");
    +                    }
    +                } else {
    +                    $oLog->set("status", "error (key)");
    +                }
    +                $oLog->store();
    +            }
    +
    +            $this->set("sendcount", $this->get("sendcount") + $iCount);
    +
    +            if ($iCount == 0 || !$bDispatch) {
    +                // No recipients remaining, job finished
    +                $this->set("status", 9);
    +                $this->set("finished", date("Y-m-d H:i:s"), false);
    +            } else if ($bDispatch) {
    +                // Check, if there are recipients remaining - stops job faster
    +                $oLogs->resetQuery();
    +                $oLogs->setWhere("idnewsjob", $this->get($this->primaryKey));
    +                $oLogs->setWhere("status", "pending");
    +                $oLogs->setLimit(0, $this->get("dispatch_count"));
    +                $oLogs->query();
    +
    +                If ($oLogs->next()) {
    +                    // Remaining recipients found, set job back to pending
    +                    $this->set("status", 1);
    +                    $this->set("started", "0000-00-00 00:00:00", false);
    +                } else {
    +                    // No remaining recipients, job finished
    +                    $this->set("status", 9);
    +                    $this->set("finished", date("Y-m-d H:i:s"), false);
    +                }
    +            } else {
    +                // Set job back to pending
    +                $this->set("status", 1);
    +                $this->set("started", "0000-00-00 00:00:00", false);
    +            }
    +            $this->store();
    +        }
    +
    +        return $iCount;
    +    }
    +
    +    /**
    +     * Overriden store() method to set status to finished if rcpcount is 0
    +     */
    +    public function store() {
    +        if ($this->get("rcpcount") == 0) {
    +            // No recipients, job finished
    +            $this->set("status", 9);
    +            if ($this->get("started") == "0000-00-00 00:00:00") {
    +                $this->set("started", date("Y-m-d H:i:s"), false);
    +            }
    +            $this->set("finished", date("Y-m-d H:i:s"), false);
    +        }
    +
    +        parent::store();
    +    }
    +
    +}
    +
    +?>
    \ No newline at end of file
    diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.logs.php b/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.logs.php
    new file mode 100644
    index 0000000..354fc8a
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.logs.php
    @@ -0,0 +1,243 @@
    +
    + * @license    http://www.contenido.org/license/LIZENZ.txt
    + * @link       http://www.4fb.de
    + * @link       http://www.contenido.org
    + * @since      file available since contenido release <= 4.6
    + *
    + * {@internal
    + *   created  2004-08-01
    + *   modified 2008-06-30, Dominik Ziegler, add security fix
    + *   modified 2011-03-14, Murat Purc, adapted to new GenericDB, partly ported to PHP 5, formatting
    + *
    + *   $Id: class.newsletter.logs.php 119 2012-08-07 17:35:39Z oldperl $:
    + * }}
    + *
    + */
    +if (!defined('CON_FRAMEWORK')) {
    +    die('Illegal call');
    +}
    +
    +/**
    + * Collection management class
    + */
    +class cNewsletterLogCollection extends ItemCollection {
    +
    +    /**
    +     * Constructor Function
    +     * @param none
    +     */
    +    public function __construct() {
    +        global $cfg;
    +        parent::__construct($cfg["tab"]["news_log"], "idnewslog");
    +        $this->_setItemClass("cNewsletterLog");
    +    }
    +
    +    /**
    +     * Creates a single new log item
    +     * @param $idnewsjob    integer ID of corresponding newsletter send job
    +     * @param $idnewsrcp    integer ID of recipient
    +     * @param $rcp_name    string    Name of the recipient (-> recipient may be deleted)
    +     * @param $rcp_email    string    E-Mail of the recipient (-> recipient may be deleted)
    +     */
    +    public function create($idnewsjob, $idnewsrcp) {
    +        global $client, $lang, $auth;
    +
    +        $idnewsjob = Contenido_Security::toInteger($idnewsjob);
    +        $idnewsrcp = Contenido_Security::toInteger($idnewsrcp);
    +        $client = Contenido_Security::toInteger($client);
    +        $lang = Contenido_Security::toInteger($lang);
    +
    +        $this->resetQuery();
    +        $this->setWhere("idnewsjob", $idnewsjob);
    +        $this->setWhere("idnewsrcp", $idnewsrcp);
    +        $this->query();
    +
    +        if ($oItem = $this->next()) {
    +            return $oItem;
    +        }
    +
    +        $oRecipient = new Recipient;
    +        if ($oRecipient->loadByPrimaryKey($idnewsrcp)) {
    +            $oItem = parent::createNewItem();
    +
    +            $oItem->set("idnewsjob", $idnewsjob);
    +            $oItem->set("idnewsrcp", $idnewsrcp);
    +
    +            $sEMail = $oRecipient->get("email");
    +            $sName = $oRecipient->get("name");
    +
    +            if ($sName == "") {
    +                $oItem->set("rcpname", $sEMail);
    +            } else {
    +                $oItem->set("rcpname", $sName);
    +            }
    +
    +            $oItem->set("rcpemail", $sEMail);
    +            $oItem->set("rcphash", $oRecipient->get("hash"));
    +            $oItem->set("rcpnewstype", $oRecipient->get("news_type"));
    +            $oItem->set("status", "pending");
    +            $oItem->set("created", date("Y-m-d H:i:s"), false);
    +            $oItem->store();
    +
    +            return $oItem;
    +        } else {
    +            return false;
    +        }
    +    }
    +
    +    /**
    +     * Gets all active recipients as specified for the newsletter and adds for
    +     * every recipient a log item
    +     * @param integer    $idnewsjob    ID of corresponding newsletter dispatch job
    +     * @param integer    $idnews        ID of newsletter
    +     * @return integer    Recipient count
    +     */
    +    public function initializeJob($idnewsjob, $idnews) {
    +        global $cfg;
    +
    +        $idnewsjob = Contenido_Security::toInteger($idnewsjob);
    +        $idnews = Contenido_Security::toInteger($idnews);
    +
    +        $oNewsletter = new Newsletter();
    +        if ($oNewsletter->loadByPrimaryKey($idnews)) {
    +            $sDestination = $oNewsletter->get("send_to");
    +            $iIDClient = $oNewsletter->get("idclient");
    +            $iIDLang = $oNewsletter->get("idlang");
    +
    +            switch ($sDestination) {
    +                case "all" :
    +                    $sDistinct = "";
    +                    $sFrom = "";
    +                    $sSQL = "deactivated='0' AND confirmed='1' AND idclient='" . $iIDClient . "' AND idlang='" . $iIDLang . "'";
    +                    break;
    +                case "default" :
    +                    $sDistinct = "distinct";
    +                    $sFrom = $cfg["tab"]["news_groups"] . " AS groups, " . $cfg["tab"]["news_groupmembers"] . " AS groupmembers ";
    +                    $sSQL = "recipientcollection.idclient = '" . $iIDClient . "' AND " .
    +                            "recipientcollection.idlang = '" . $iIDLang . "' AND " .
    +                            "recipientcollection.deactivated = '0' AND " .
    +                            "recipientcollection.confirmed = '1' AND " .
    +                            "recipientcollection.idnewsrcp = groupmembers.idnewsrcp AND " .
    +                            "groupmembers.idnewsgroup = groups.idnewsgroup AND " .
    +                            "groups.defaultgroup = '1' AND groups.idclient = '" . $iIDClient . "' AND " .
    +                            "groups.idlang = '" . $iIDLang . "'";
    +                    break;
    +                case "selection" :
    +                    $aGroups = unserialize($oNewsletter->get("send_ids"));
    +
    +                    if (is_array($aGroups) && count($aGroups) > 0) {
    +                        $sGroups = "'" . implode("','", $aGroups) . "'";
    +
    +                        $sDistinct = "distinct";
    +                        $sFrom = $cfg["tab"]["news_groupmembers"] . " AS groupmembers ";
    +                        $sSQL = "recipientcollection.idclient = '" . $iIDClient . "' AND " .
    +                                "recipientcollection.idlang = '" . $iIDLang . "' AND " .
    +                                "recipientcollection.deactivated = '0' AND " .
    +                                "recipientcollection.confirmed = '1' AND " .
    +                                "recipientcollection.idnewsrcp = groupmembers.idnewsrcp AND " .
    +                                "groupmembers.idnewsgroup IN (" . $sGroups . ")";
    +                    } else {
    +                        $sDestination = "unknown";
    +                    }
    +                    break;
    +                case "single" :
    +                    $iID = $oNewsletter->get("send_ids");
    +                    if (is_numeric($iID)) {
    +                        $sDistinct = "";
    +                        $sFrom = "";
    +                        $sSQL = "idnewsrcp = '" . $iID . "'";
    +                    } else {
    +                        $sDestination = "unknown";
    +                    }
    +                    break;
    +                default:
    +                    $sDestination = "unknown";
    +            }
    +            unset($oNewsletter);
    +
    +            if ($sDestination == "unknown") {
    +                return 0;
    +            } else {
    +                $oRecipients = new RecipientCollection;
    +                $oRecipients->flexSelect($sDistinct, $sFrom, $sSQL, "", "", "");
    +
    +                $iRecipients = $oRecipients->count();
    +
    +                while ($oRecipient = $oRecipients->next()) {
    +                    $this->create($idnewsjob, $oRecipient->get($oRecipient->primaryKey));
    +                }
    +
    +                return $iRecipients;
    +            }
    +        } else {
    +            return 0;
    +        }
    +    }
    +
    +    /**
    +     * Overriden delete function to update recipient count if removing recipient from the list
    +     * @param integer $idnewslog ID
    +     */
    +    public function delete($idnewslog) {
    +        $idnewslog = Contenido_Security::toInteger($idnewslog);
    +
    +        $oLog = new cNewsletterLog($idnewslog);
    +        $iIDNewsJob = $oLog->get("idnewsjob");
    +        unset($oLog);
    +
    +        $oJob = new cNewsletterJob($iIDNewsJob);
    +        $oJob->set("rcpcount", $oJob->get("rcpcount") - 1);
    +        $oJob->store();
    +        unset($oJob);
    +
    +        parent::delete($idnewslog);
    +    }
    +
    +    public function deleteJob($idnewsjob) {
    +        $idnewsjob = Contenido_Security::toInteger($idnewsjob);
    +        $this->setWhere("idnewsjob", $idnewsjob);
    +        $this->query();
    +
    +        while ($oItem = $this->next()) {
    +            $this->delete($oItem->get($oItem->primaryKey));
    +        }
    +
    +        return true;
    +    }
    +
    +}
    +
    +/**
    + * Single NewsletterLog Item
    + */
    +class cNewsletterLog extends Item {
    +
    +    /**
    +     * Constructor Function
    +     * @param  mixed  $mId  Specifies the ID of item to load
    +     */
    +    public function __construct($mId = false) {
    +        global $cfg;
    +        parent::__construct($cfg["tab"]["news_log"], "idnewslog");
    +        if ($mId !== false) {
    +            $this->loadByPrimaryKey($mId);
    +        }
    +    }
    +
    +}
    diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.php b/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.php
    new file mode 100644
    index 0000000..b26ea6e
    --- /dev/null
    +++ b/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.php
    @@ -0,0 +1,998 @@
    +
    + * @license    http://www.contenido.org/license/LIZENZ.txt
    + * @link       http://www.4fb.de
    + * @link       http://www.contenido.org
    + * @since      file available since contenido release <= 4.6
    + * 
    + * {@internal 
    + *   created  2004-08-01
    + *   modified 2008-06-30, Dominik Ziegler, add security fix
    + *   modified 2011-03-14, Murat Purc, adapted to new GenericDB, partly ported to PHP 5, formatting
    + *
    + *   $Id: class.newsletter.php 312 2014-06-18 11:01:08Z oldperl $:
    + * }}
    + * 
    + */
    +if (!defined('CON_FRAMEWORK')) {
    +    die('Illegal call');
    +}
    +
    +/**
    + * Newsletter management class
    + */
    +class NewsletterCollection extends ItemCollection {
    +
    +    /**
    +     * Constructor Function
    +     * @param none
    +     */
    +    public function __construct() {
    +        global $cfg;
    +        parent::__construct($cfg["tab"]["news"], "idnews");
    +        $this->_setItemClass("Newsletter");
    +    }
    +
    +    /**
    +     * Creates a new newsletter
    +     * @param $name string specifies the newsletter name
    +     */
    +    public function create($sName) {
    +        global $client, $lang, $auth;
    +
    +        $sName = Contenido_Security::escapeDB($sName, null);
    +        $client = Contenido_Security::toInteger($client);
    +        $lang = Contenido_Security::toInteger($lang);
    +
    +        // Check if the newsletter name already exists
    +        $this->resetQuery;
    +        $this->setWhere("idclient", $client);
    +        $this->setWhere("idlang", $lang);
    +        $this->setWhere("name", $sName);
    +        $this->query();
    +
    +        if ($this->next()) {
    +            return $this->create($sName . "_" . substr(md5(rand()), 0, 10));
    +        }
    +
    +        $oItem = parent::createNewItem();
    +        $oItem->set("idclient", $client);
    +        $oItem->set("idlang", $lang);
    +        $oItem->set("name", $sName);
    +        $oItem->set("created", date("Y-m-d H:i:s"), false);
    +        $oItem->set("author", Contenido_Security::escapeDB($auth->auth["uid"], null));
    +
    +        $oItem->store();
    +
    +        return $oItem;
    +    }
    +
    +    /**
    +     * Duplicates the newsletter specified by $itemID
    +     * @param $itemID integer specifies the newsletter id
    +     */
    +    public function duplicate($iItemID) {
    +        global $client, $lang, $auth;
    +
    +        $client = Contenido_Security::toInteger($client);
    +        $lang = Contenido_Security::toInteger($lang);
    +
    +        cInclude("includes", "functions.con.php");
    +
    +        $oBaseItem = new Newsletter();
    +        $oBaseItem->loadByPrimaryKey($iItemID);
    +
    +        $oItem = parent::createNewItem();
    +        $oItem->set("name", $oBaseItem->get("name") . "_" . substr(md5(rand()), 0, 10));
    +
    +        $iIDArt = 0;
    +        if ($oBaseItem->get("type") == "html" && $oBaseItem->get("idart") > 0 && $oBaseItem->get("template_idart") > 0) {
    +            $oClientLang = new cApiClientLanguage(false, $client, $lang);
    +
    +            if ($oClientLang->getProperty("newsletter", "html_newsletter") == "true") {
    +                $iIDArt = conCopyArticle($oBaseItem->get("idart"),
    +                        $oClientLang->getProperty("newsletter", "html_newsletter_idcat"),
    +                        sprintf(i18n("Newsletter: %s", "cl_newsletter"), $oItem->get("name")));
    +                conMakeOnline($iIDArt, $lang); // Article has to be online for sending...
    +            }
    +            unset($oClientLang);
    +        }
    +        $oItem->set("idart", $iIDArt);
    +        $oItem->set("template_idart", $oBaseItem->get("template_idart"));
    +        $oItem->set("idclient", $client);
    +        $oItem->set("idlang", $lang);
    +        $oItem->set("welcome", 0);
    +        $oItem->set("type", $oBaseItem->get("type"));
    +        $oItem->set("subject", $oBaseItem->get("subject"));
    +        $oItem->set("message", $oBaseItem->get("message"));
    +        $oItem->set("newsfrom", $oBaseItem->get("newsfrom"));
    +        $oItem->set("newsfromname", $oBaseItem->get("newsfromname"));
    +        $oItem->set("newsdate", date("Y-m-d H:i:s"), false); // But more or less deprecated
    +        $oItem->set("use_cronjob", $oBaseItem->get("use_cronjob"));
    +        $oItem->set("send_to", $oBaseItem->get("send_to"));
    +        $oItem->set("send_ids", $oBaseItem->get("send_ids"));
    +        $oItem->set("dispatch", $oBaseItem->get("dispatch"));
    +        $oItem->set("dispatch_count", $oBaseItem->get("dispatch_count"));
    +        $oItem->set("dispatch_delay", $oBaseItem->get("dispatch_delay"));
    +        $oItem->set("author", $auth->auth["uid"]);
    +        $oItem->set("created", date("Y-m-d H:i:s"), false);
    +
    +        // Copy properties, runtime on-demand allocation of the properties object
    +        if (!is_object($this->properties)) {
    +            $this->properties = new PropertyCollection;
    +        }
    +        $this->properties->setWhere("idclient", $client);
    +        $this->properties->setWhere("itemtype", $this->primaryKey);
    +        $this->properties->setWhere("itemid", $iItemID);
    +        $this->properties->query();
    +
    +        while ($oPropertyItem = $this->properties->next()) {
    +            $oItem->setProperty($oPropertyItem->get("type"), $oPropertyItem->get("name"), $oPropertyItem->get("value"));
    +        }
    +
    +        $oItem->store();
    +
    +        return $oItem;
    +    }
    +
    +}
    +
    +/**
    + * Single Newsletter Item
    + */
    +class Newsletter extends Item {
    +
    +    /**
    +     * @var string Error storage
    +     * @access private
    +     */
    +    protected $_sError;
    +
    +    /**
    +     * Constructor Function
    +     * @param  mixed  $mId  Specifies the ID of item to load
    +     */
    +    public function __construct($mId = false) {
    +        global $cfg;
    +        parent::__construct($cfg["tab"]["news"], "idnews");
    +        $this->_sError = "";
    +        if ($mId !== false) {
    +            $this->loadByPrimaryKey($mId);
    +        }
    +    }
    +
    +    /**
    +     * Overriden store()-Method to set modified and modifiedby data and
    +     * to ensure, that there is only one welcome newsletter
    +     */
    +    public function store() {
    +        global $client, $lang, $auth;
    +
    +        $client = Contenido_Security::toInteger($client);
    +        $lang = Contenido_Security::toInteger($lang);
    +
    +        $this->set("modified", date("Y-m-d H:i:s"), false);
    +        $this->set("modifiedby", $auth->auth["uid"]);
    +
    +        if ($this->get("welcome") == 1) {
    +            $oItems = new NewsletterCollection();
    +            $oItems->setWhere("idclient", $client);
    +            $oItems->setWhere("idlang", $lang);
    +            $oItems->setWhere("welcome", 1);
    +            $oItems->setWhere("idnews", $this->get("idnews"), "<>");
    +            $oItems->query();
    +
    +            while ($oItem = $oItems->next()) {
    +                $oItem->set("welcome", 0);
    +                $oItem->store();
    +            }
    +            unset($oItem);
    +            unset($oItems);
    +        }
    +
    +        parent::store();
    +    }
    +
    +    /**
    +     * Replaces newsletter tag (e.g. MAIL_NAME) with data.
    +     * If code is just text using str_replace; if it is HTML by using regular expressions
    +     * @param string    sCode    Code, where the tags will be replaced (by reference)
    +     * @param bool        bIsHTML    Is code HTML?
    +     * @param string    sField    Field name, without MAIL_ (e.g. just "name")
    +     * @param string    sData    Data
    +     * @access private
    +     */
    +    public function _replaceTag(&$sCode, $bIsHTML, $sField, $sData) {
    +        if ($sCode && !$bIsHTML) {
    +            $sCode = str_replace("MAIL_" . strtoupper($sField), $sData, $sCode);
    +        } else if ($sCode) {
    +            // Extract certain tag
    +            $sRegExp = '/\[mail\s*([^]]+)\s*name=(?:"|")' . $sField . '(?:"|")\s*(.*?)\s*\]((?:.|\s)+?)\[\/mail\]/i';
    +            $aMatch = array();
    +            $iMatches = preg_match($sRegExp, $sCode, $aMatch);
    +
    +            if ($iMatches > 0) {
    +                // $aMatch contains parameter info from left [1] or right [2] to name="field"
    +                $sParameter = $aMatch[1] . $aMatch[2];
    +                $sMessage = $aMatch[3];
    +                $sRegExp = '/\s*(.*?)\s*=\s*(?:"|")(.*?)(?:"|")\s*/i';
    +                $aMatch = array();
    +
    +                if (preg_match_all($sRegExp, $sParameter, $aMatch) > 0) {
    +                    // Store parameter data as assoziative array
    +                    $aParameter = array_combine($aMatch[1], $aMatch[2]);
    +                    unset($aMatch); // $aMatch not needed anymore
    +
    +                    if (!array_key_exists("type", $aParameter)) {
    +                        $aParameter["type"] = "text";
    +                    }
    +
    +                    switch ($aParameter["type"]) {
    +                        case "link":
    +                            # TODO: Works everything fine?
    +                            # The current code makes it possible to do something like
    +                            # [mail ...]Some text here, then the link: [MAIL_STOP] and more text[/mail]
    +                            #
    +                            # If the other lines will be used, you don't need to
    +                            # set [MAIL_xy] and the message between the [mail]-tags will
    +                            # be used as link text (instead of using the tag parameter "text")
    +
    +                            $sText = $aParameter["text"];
    +
    +                            if ($sText == "") {
    +                                $sText = $sData;
    +                            }
    +                            if ($sMessage == "") {
    +                                $sMessage = $sData;
    +                            }
    +
    +                            // Remove not needed parameters from the parameters list
    +                            // everything else goes into the link as parameters
    +                            unset($aParameter["type"]);
    +                            unset($aParameter["text"]);
    +
    +                            $sParameter = "";
    +                            if (count($aParameter) > 0) {
    +                                foreach ($aParameter as $sKey => $sValue) {
    +                                    $sParameter .= ' ' . $sKey . '="' . $sValue . '"';
    +                                }
    +                            }
    +                            $sMessage = str_replace("MAIL_" . strtoupper($sField), '' . $sText . '', $sMessage);
    +                            #$sMessage    = ''.$sMessage.'';
    +                            break;
    +                        default:
    +                            $sMessage = str_replace("MAIL_" . strtoupper($sField), $sData, $sMessage);
    +                        #$sMessage    = $sData;
    +                    }
    +
    +                    $sRegExp = '/\[mail[^]]+name=(?:"|")' . $sField . '(?:"|").*?\].*?\[\/mail\]/is';
    +                    $sCode = preg_replace($sRegExp, $sMessage, $sCode, -1);
    +                    // Just to replace "text"-tags in HTML message also, just in case...
    +                    $sCode = str_replace("MAIL_" . strtoupper($sField), $sData, $sCode);
    +                }
    +            }
    +        }
    +    }
    +
    +    /**
    +     * Replaces relative URL for url, src or href with absolute client htmlpath
    +     * 
    +     * @author Ortwin Pinke 
    +     * @since CL 2.0
    +     * 
    +     * @global int $client
    +     * @global array $cfgClient
    +     * @param string $sUrl
    +     * @return string
    +     */
    +    protected function _callbackReplaceUrl($sUrl) {
    +        global $client, $cfgClient;
    +        $returnUrl = '';
    +        print_r($sUrl);
    +        if ($sUrl[1] == "url") {
    +            if (empty($sUrl[3])) {
    +                $returnUrl = $sUrl[1] . "(" . $sUrl[2];
    +                $returnUrl .= $cfgClient[$client]['path']['htmlpath'];
    +                $returnUrl .= ltrim(ltrim($sUrl[4], "."), "/");
    +                $returnUrl .= $sUrl[2] . ")";
    +            } else {
    +                $returnUrl = $sUrl[0];
    +            }
    +        } else if (empty($sUrl[2])) {
    +            $returnUrl = $sUrl[1] . '="';
    +            $returnUrl .= $cfgClient[$client]['path']['htmlpath'];
    +            $returnUrl .= ltrim(ltrim($sUrl[3], "."), "/") . '"';
    +        } else {
    +            $returnUrl = $sUrl[0];
    +        }
    +
    +        return $returnUrl;
    +    }
    +
    +    /* TODO: HerrB: Remove or insert some functionality */
    +
    +    protected function _getNewsletterTagData($sHTML, $sTag) {
    +        //$sRegExp = "/](.*?)>.*?<\/newsletter>/i";
    +        //$sRegExp = "/\[mail[^\]](.*?)>.*?\[\/mail\]/i";
    +        #\[mail[^\]]((name="(?P.*?)")|(type="(?P.*?)"))\](?P.*?)\[\/mail\]
    +        #\[mail[^\]]((name=(?P[^"]*.*?[^"]*))|(type="(?P.*?)"))\](?P.*?)\[\/mail\]
    +
    +        /* RegExp explanation:
    +         * Match the character "[" literally �\[�
    +         * Match the characters "mail" literally �mail�
    +         * Match "whitespace characters" (spaces, tabs, line breaks, etc.) after "mail" �\s*�
    +         * Match the regular expression below and capture its match into backreference number 1 �([^]]+)�
    +         * Match any character that is not a "]" �[^]]+�
    +         *       Between one and unlimited times, as many times as possible, giving back as needed (greedy) �+�
    +         * Match the character "]" literally �\]�
    +         * Match the regular expression below and capture its match into backreference number 2 �((?:.|\s)+?)�
    +         *    Match the regular expression below �(?:.|\s)+?�
    +         *       Between one and unlimited times, as few times as possible, expanding as needed (lazy) �+?�
    +         *       Match either the regular expression below (attempting the next alternative only if this one fails) �.�
    +         *          Match any single character that is not a line break character �.�
    +         *       Or match regular expression number 2 below (the entire group fails if this one fails to match) �\s�
    +         *          Match a single character that is a "whitespace character" (spaces, tabs, line breaks, etc.) �\s�
    +         * Match the character "[" literally �\[�
    +         * Match the characters "/mail" literally �/mail�
    +         * Match the character "]" literally �\]�
    +         * Ignore case (i), . includes new lines (s)
    +         * */
    +
    +        /*
    +          $sRegExp = '/\[mail\s*([^]]+)\]((?:.|\s)+?)\[\/mail\]/is';
    +          $aMatch = array ();
    +          preg_match_all($sRegExp, $sHTML, $aMatch, PREG_SET_ORDER);
    +          print_r ($aMatch);
    +
    +          // Auf bestimmten Typ matchen
    +          $sRegExp = '/\[mail.*?name="name".*?\]((?:.|\s)+?)\[\/mail\]/is';
    +          $aMatch = array ();
    +          preg_match_all($sRegExp, $sHTML, $aMatch, PREG_SET_ORDER);
    +          print_r ($aMatch); */
    +
    +        // Parameter auseinandernehmen (ohne PREG_SET_ORDER)
    +        #$sRegExp = '/\s*(.*?)\s*=\s*"(.*?)"\s*/i';
    +        #$aMatch = array ();
    +        #preg_match_all($sRegExp, $sHTML, $aMatch);
    +        #print_r ($aMatch);
    +    }
    +
    +    protected function _deChunkHTTPBody($sHeader, $sBody, $sEOL = "\r\n") {
    +        // Based on code from jbr at ya-right dot com, posted on http://www.php.net
    +        // as user comment on fsockopen documentation (2007-05-01)
    +        // Analyze header
    +        $aParts = preg_split("/\r?\n/", $sHeader, -1, PREG_SPLIT_NO_EMPTY);
    +
    +        $aHeader = array();
    +        for ($i = 0; $i < sizeof($aParts); $i++) {
    +            if ($i != 0) {
    +                $iPos = strpos($aParts[$i], ':');
    +                $sParameter = strtolower(str_replace(' ', '', substr($aParts[$i], 0, $iPos)));
    +                $sValue = trim(substr($aParts[$i], ($iPos + 1)));
    +            } else {
    +                $sField = 'status';
    +                $aParameters = explode(' ', $aParts[$i]);
    +                $sParameter = $aParameters[1];
    +            }
    +
    +            if ($sParameter == 'set-cookie') {
    +                $aHeader['cookies'][] = $sValue;
    +            } else if ($sParameter == 'content-type') {
    +                if (($iPos = strpos($sValue, ';')) !== false) {
    +                    $aHeader[$sParameter] = substr($sValue, 0, $iPos);
    +                } else {
    +                    $aHeader[$sParameter] = $sValue;
    +                }
    +            } else {
    +                $aHeader[$sParameter] = $sValue;
    +            }
    +        }
    +
    +        // Get dechunked and decompressed body
    +        $iEOLLen = strlen($sEOL);
    +
    +        $sBuffer = '';
    +        if (isset($aHeader['transfer-encoding']) && $aHeader['transfer-encoding'] == 'chunked') {
    +            do {
    +                $sBody = ltrim($sBody);
    +                $iPos = strpos($sBody, $sEOL);
    +                $iDataLen = hexdec(substr($sBody, 0, $iPos));
    +
    +                if (isset($aHeader['content-encoding'])) {
    +                    $sBuffer .= gzinflate(substr($sBody, ($iPos + $iEOLLen + 10), $iDataLen));
    +                } else {
    +                    $sBuffer .= substr($sBody, ($iPos + $iEOLLen), $iDataLen);
    +                }
    +
    +                $sBody = substr($sBody, ($iPos + $iDataLen + $iEOLLen));
    +                $sRemaining = trim($sBody);
    +            } while (!empty($sRemaining));
    +        } else if (isset($aHeader['content-encoding'])) {
    +            $sBuffer = gzinflate(substr($sBody, 10));
    +        } else {
    +            $sBuffer = $sBody; // Not chunked, not compressed
    +        }
    +
    +        return $sBuffer;
    +    }
    +
    +    /**
    +     * If newsletter is HTML newsletter and necessary data available
    +     * returns final HTML message
    +     * @return string HTML message
    +     */
    +    public function getHTMLMessage() {
    +        global $lang, $client, $cfgClient, $contenido;
    +
    +        if ($this->get("type") == "html" && $this->get("idart") > 0 && $this->htmlArticleExists()) {
    +
    +            // Article ID
    +            $iIDArt = $this->get("idart");
    +
    +            // Category ID
    +            $oClientLang = new cApiClientLanguage(false, $client, $lang);
    +            $iIDCat = $oClientLang->getProperty("newsletter", "html_newsletter_idcat");
    +            unset($oClientLang);
    +
    +            // Get http username and password, if frontend is protected
    +            $oClient = new cApiClient($client);
    +            $sHTTPUserName = $oClient->getProperty("newsletter", "html_username");
    +            $sHTTPPassword = $oClient->getProperty("newsletter", "html_password");
    +            unset($oClient);
    +
    +            // Get HTML
    +            if ($iIDArt > 0 && $iIDCat > 0) {
    +                // Check, if newsletter is online and set temporarely online, otherwise
    +                $bSetOffline = false;
    +                $oArticles = new cApiArticleLanguageCollection;
    +                $oArticles->setWhere("idlang", $this->get("idlang"));
    +                $oArticles->setWhere("idart", $this->get("idart"));
    +                $oArticles->query();
    +
    +                if ($oArticle = $oArticles->next()) {
    +                    if ($oArticle->get("online") == 0) {
    +                        $bSetOffline = true;
    +                        $oArticle->set("online", 1);
    +                        $oArticle->store();
    +                    }
    +                    unset($oArticle);
    +                }
    +                unset($oArticles);
    +
    +                $sFile = "front_content.php?client=$client&lang=$lang&idcat=$iIDCat&idart=$iIDArt&noex=1&send=1";
    +                $aURL = parse_url($cfgClient[$client]['path']['htmlpath']);
    +
    +                // TODO: Other schemes than http should be tested before use!
    +                if ($aURL["scheme"] == "https") {
    +                    $iPort = 443;
    +                    $sTarget = "ssl://" . $aURL["host"];
    +                } else {
    +                    $iPort = 80;
    +                    $sTarget = $aURL["host"];
    +                }
    +                if ($aURL["port"]) {
    +                    $iPort = $aURL["port"];
    +                }
    +
    +                $iErrorNo = 0;
    +                $sErrorMsg = "";
    +                if ($iHandler = fsockopen($sTarget, $iPort, $iErrorNo, $sErrorMsg, 30)) {
    +                    // If you use HTTP 1.1 you may get chunked data... you could solve
    +                    // this easily by using HTTP 1.0, but then you get a problem with
    +                    // virtual servers, as HTTP 1.0 doesn't use the host information...
    +                    fputs($iHandler, "GET " . $aURL["path"] . $sFile . " HTTP/1.1\r\n");
    +                    fputs($iHandler, "Host: " . $aURL["host"] . "\r\n");
    +
    +                    // Maybe the website has been protected using .htaccess, then login
    +                    if ($sHTTPUserName != "" && $sHTTPPassword != "") {
    +                        fputs($iHandler, "Authorization: Basic " . base64_encode("$sHTTPUserName:$sHTTPPassword") . "\r\n");
    +                    }
    +
    +                    fputs($iHandler, "Referer: http://" . $aURL["host"] . "\r\n");
    +                    fputs($iHandler, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n");
    +                    fputs($iHandler, "Connection: close\r\n\r\n");
    +
    +                    // Get the HTTP header and body separately
    +                    $sHTML = "";
    +                    $sHeader = "";
    +                    $bBody = false;
    +                    while (!feof($iHandler)) {
    +                        // $sLine = fgets($iHandler, 4096);
    +                        $sLine = fgets($iHandler, 1024);
    +                        if ($bBody) {
    +                            $sHTML .= $sLine;
    +                        } else if ($sLine == "\r\n") {
    +                            $bBody = true;
    +                        } else {
    +                            $sHeader .= $sLine;
    +                        }
    +                    }
    +                    fclose($iHandler);
    +
    +                    $sHTML = $this->_deChunkHTTPBody($sHeader, $sHTML);
    +
    +                    // If someone likes to use anchors in html newsletters (*sigh*)
    +                    // the base href tag has to be removed - that means, we have to fix
    +                    // all source paths manually...
    +                    if (getEffectiveSetting('newsletter', 'remove_base_tag', "false") == "true") {
    +                        // Remove base tag
    +                        $sHTML = preg_replace('//is', '', $sHTML, 1);
    +                        $sHTML = preg_replace_callback('/(url)\((\'|\")?(http:\/\/|https:\/\/|ftp:\/\/)?([A-Za-z0-9#\.?\-=_&\/]*)[\'|\"]?\)/', array($this, "_callbackReplaceUrl"), $sHTML);
    +                        $sHTML = preg_replace_callback('/\b(src|href|ftp)[ ]*=[ ]*"(http:\/\/|https:\/\/|ftp:\/\/)?([A-Za-z0-9#\.?\-=_&\/]*)"/', array($this, "_callbackReplaceUrl"), $sHTML);
    +                        // Now replace anchor tags to the newsletter article itself just by the anchor
    +                        $sHTML = str_replace($cfgClient[$client]['path']['htmlpath'] . "front_content.php?idart=" . $iIDArt . "#", "#", $sHTML);
    +                    }
    +
    +                    $sReturn = $sHTML;
    +                } else {
    +                    if ($contenido) { // Use i18n only in backend
    +                        $sErrorText = i18n("There was a problem getting the newsletter article using http. Error: %s (%s)", "cl_newsletter");
    +                    } else {
    +                        $sErrorText = "There was a problem getting the newsletter article using http. Error: %s (%s)";
    +                    }
    +
    +                    $this->_sError = sprintf($sErrorText, $sErrorMsg, $iErrorNo);
    +                    $sReturn = false;
    +                }
    +
    +                // Set previously offline article back to offline
    +                if ($bSetOffline) {
    +                    $oArticles = new cApiArticleLanguageCollection();
    +                    $oArticles->setWhere("idlang", $this->get("idlang"));
    +                    $oArticles->setWhere("idart", $this->get("idart"));
    +                    $oArticles->query();
    +
    +                    if ($oArticle = $oArticles->next()) {
    +                        $oArticle->set("online", 0);
    +                        $oArticle->store();
    +                    }
    +                    unset($oArticle);
    +                    unset($oArticles);
    +                }
    +
    +                return $sReturn;
    +            } else {
    +                return false;
    +            }
    +        } else {
    +            return false;
    +        }
    +    }
    +
    +    /**
    +     * Checks, if html newsletter article still exists
    +     * @return bool
    +     */
    +    public function htmlArticleExists() {
    +        if ($this->get("idart") > 0) {
    +            $oArticles = new cApiArticleLanguageCollection();
    +            $oArticles->setWhere("idlang", $this->get("idlang"));
    +            $oArticles->setWhere("idart", $this->get("idart"));
    +            $oArticles->query();
    +
    +            if ($oArticles->count() > 0) {
    +                $bReturn = true;
    +            } else {
    +                $bReturn = false;
    +            }
    +
    +            unset($oArticles);
    +        } else {
    +            $bReturn = false;
    +        }
    +
    +        return $bReturn;
    +    }
    +
    +    /**
    +     * Sends test newsletter directly to specified email address
    +     * @param integer  $iIDCatArt        idcatart of newsletter handler article
    +     * @param string   $sEMail           Recipient email address
    +     * @param string   $sName            Optional: Recipient name
    +     * @param bool     $bSimulatePlugin  If recipient plugin activated, include plugins
    +     *                                   and simulate values from plugins
    +     * @param string   $sEncoding        Message (and header) encoding, e.g. iso-8859-1
    +     */
    +    public function sendEMail($iIDCatArt, $sEMail, $sName = "", $bSimulatePlugins = true, $sEncoding = "iso-8859-1") {
    +        global $lang, $client, $cfg, $cfgClient, $contenido;
    +
    +        // Initialization
    +        if ($sName == "") {
    +            $sName = $sEMail;
    +        }
    +
    +        $oLanguage = new cApiLanguage($lang);
    +        $sFormatDate = $oLanguage->getProperty("dateformat", "date");
    +        $sFormatTime = $oLanguage->getProperty("dateformat", "time");
    +        unset($oLanguage);
    +
    +        if ($sFormatDate == "") {
    +            $sFormatDate = "%d.%m.%Y";
    +        }
    +        if ($sFormatTime == "") {
    +            $sFormatTime = "%H:%M";
    +        }
    +
    +        // Get newsletter data
    +        $sFrom = $this->get("newsfrom");
    +        $sFromName = $this->get("newsfromname");
    +        if ($sFromName == "") {
    +            $sFromName = $sFrom;
    +        }
    +        $sSubject = $this->get("subject");
    +        $sMessageText = $this->get("message");
    +
    +        $bIsHTML = false;
    +        if ($this->get("type") == "html") {
    +            $sMessageHTML = $this->getHTMLMessage();
    +
    +            if ($sMessageHTML === false) {
    +                // There was a problem getting the html message (maybe article
    +                // deleted). Exit with error instead of sending as text message only
    +
    +                if ($contenido) { // Use i18n only in backend
    +                    $sError = i18n("Newsletter to %s could not be sent: No html message available", "cl_newsletter");
    +                } else {
    +                    $sError = "Newsletter to %s could not be sent: No html message available";
    +                }
    +                $this->_sError = $sName . " (" . $sEMail . "): " . sprintf($sError, $sEMail);
    +                return false;
    +            } else {
    +                $bIsHTML = true;
    +            }
    +        }
    +
    +        // Preventing double lines in mail, you may wish to disable this function on windows servers
    +        if (!getSystemProperty("newsletter", "disable-rn-replacement")) {
    +            $sMessageText = str_replace("\r\n", "\n", $sMessageText);
    +        }
    +
    +        // Simulate key, an alphanumeric string of 30 characters
    +        $sKey = str_repeat("key", 10);
    +        $sPath = $cfgClient[$client]["path"]["htmlpath"] . "front_content.php?changelang=" . $lang . "&idcatart=" . $iIDCatArt . "&";
    +
    +        // Replace message tags (text message)
    +        $this->_replaceTag($sMessageText, false, "name", $sName);
    +        $this->_replaceTag($sMessageText, false, "number", 1);
    +        $this->_replaceTag($sMessageText, false, "date", strftime($sFormatDate));
    +        $this->_replaceTag($sMessageText, false, "time", strftime($sFormatTime));
    +        $this->_replaceTag($sMessageText, false, "unsubscribe", $sPath . "unsubscribe=" . $sKey);
    +        $this->_replaceTag($sMessageText, false, "change", $sPath . "change=" . $sKey);
    +        $this->_replaceTag($sMessageText, false, "stop", $sPath . "stop=" . $sKey);
    +        $this->_replaceTag($sMessageText, false, "goon", $sPath . "goon=" . $sKey);
    +
    +        // Replace message tags (html message)
    +        if ($bIsHTML) {
    +            $this->_replaceTag($sMessageHTML, true, "name", $sName);
    +            $this->_replaceTag($sMessageHTML, true, "number", 1);
    +            $this->_replaceTag($sMessageHTML, true, "date", strftime($sFormatDate));
    +            $this->_replaceTag($sMessageHTML, true, "time", strftime($sFormatTime));
    +            $this->_replaceTag($sMessageHTML, true, "unsubscribe", $sPath . "unsubscribe=" . $sKey);
    +            $this->_replaceTag($sMessageHTML, true, "change", $sPath . "change=" . $sKey);
    +            $this->_replaceTag($sMessageHTML, true, "stop", $sPath . "stop=" . $sKey);
    +            $this->_replaceTag($sMessageHTML, true, "goon", $sPath . "goon=" . $sKey);
    +        }
    +
    +        if ($bSimulatePlugins) {
    +            // Enabling plugin interface
    +            if (getSystemProperty("newsletter", "newsletter-recipients-plugin") == "true") {
    +                if (is_array($cfg['plugins']['recipients'])) {
    +                    foreach ($cfg['plugins']['recipients'] as $sPlugin) {
    +                        plugin_include("recipients", $sPlugin . "/" . $sPlugin . ".php");
    +                        if (function_exists("recipients_" . $sPlugin . "_wantedVariables")) {
    +                            $aPluginVars = array();
    +                            $aPluginVars = call_user_func("recipients_" . $sPlugin . "_wantedVariables");
    +
    +                            foreach ($aPluginVars as $sPluginVar) {
    +                                // Replace tags in text message
    +                                $this->_replaceTag($sMessageText, false, $sPluginVar, ":: " . $sPlugin . ": " . $sPluginVar . " ::");
    +                                // Replace tags in html message
    +                                if ($bIsHTML) {
    +                                    $this->_replaceTag($sMessageHTML, true, $sPluginVar, ":: " . $sPlugin . ": " . $sPluginVar . " ::");
    +                                }
    +                            }
    +                        }
    +                    }
    +                }
    +            } else {
    +                setSystemProperty("newsletter", "newsletter-recipients-plugin", "false");
    +            }
    +        }
    +
    +        if (!isValidMail($sEMail) || strtolower($sEMail) == "sysadmin@ihresite.de") {
    +            // No valid destination mail address specified
    +            if ($contenido) { // Use i18n only in backend
    +                $sError = i18n("Newsletter to %s could not be sent: No valid e-mail address", "cl_newsletter");
    +            } else {
    +                $sError = "Newsletter to %s could not be sent: No valid e-mail address";
    +            }
    +            $this->_sError = $sName . " (" . $sEMail . "): " . sprintf($sError, $sEMail);
    +            return false;
    +        } else {
    +            $oMail = new PHPMailer();
    +            $oMail->CharSet = $sEncoding;
    +            $oMail->IsHTML($bIsHTML);
    +            $oMail->From = $sFrom;
    +            $oMail->FromName = $sFromName;
    +            $oMail->AddAddress($sEMail);
    +            $oMail->Mailer = "mail";
    +            $oMail->Subject = $sSubject;
    +
    +            if ($bIsHTML) {
    +                $oMail->Body = $sMessageHTML;
    +                $oMail->AltBody = $sMessageText . "\n\n";
    +            } else {
    +                $oMail->Body = $sMessageText . "\n\n";
    +            }
    +
    +            if (!$oMail->Send()) {
    +                if ($contenido) { // Use i18n only in backend
    +                    $sError = i18n("Newsletter to %s could not be sent", "cl_newsletter");
    +                } else {
    +                    $sError = "Newsletter to %s could not be sent";
    +                }
    +                $this->_sError = $sName . " (" . $sEMail . "): " . sprintf($sError, $sEMail);
    +                return false;
    +            } else {
    +                return true;
    +            }
    +        }
    +    }
    +
    +    /**
    +     * Sends test newsletter directly to specified recipients (single or group)
    +     *
    +     * Note: Sending in chunks not supported! Only usable for tests and only a few
    +     * recipients.
    +     *
    +     * @param integer  $iIDCatArt     idcatart of newsletter handler article
    +     * @param integer  $iIDNewsRcp    If specified, newsletter recipient id, ignored, if group specified
    +     * @param integer  $iIDNewsGroup  If specified, newsletter recipient group id
    +     * @param array    $aSendRcps     As reference: Filled with a list of succesfull recipients
    +     * @param string   $sEncoding     Message (and header) encoding, e.g. iso-8859-1
    +     */
    +    public function sendDirect($iIDCatArt, $iIDNewsRcp = false, $iIDNewsGroup = false, &$aSendRcps, $sEncoding = "iso-8859-1") {
    +        global $lang, $client, $cfg, $cfgClient, $contenido, $recipient;
    +
    +        // Initialization
    +        $aMessages = array();
    +
    +        $oLanguage = new cApiLanguage($lang);
    +        $sFormatDate = $oLanguage->getProperty("dateformat", "date");
    +        $sFormatTime = $oLanguage->getProperty("dateformat", "time");
    +        unset($oLanguage);
    +
    +        if ($sFormatDate == "") {
    +            $sFormatDate = "%d.%m.%Y";
    +        }
    +        if ($sFormatTime == "") {
    +            $sFormatTime = "%H:%M";
    +        }
    +
    +        $sPath = $cfgClient[$client]["path"]["htmlpath"] . "front_content.php?changelang=" . $lang . "&idcatart=" . $iIDCatArt . "&";
    +
    +        // Get newsletter data
    +        $sFrom = $this->get("newsfrom");
    +        $sFromName = $this->get("newsfromname");
    +        if ($sFromName == "") {
    +            $sFromName = $sFrom;
    +        }
    +        $sSubject = $this->get("subject");
    +        $sMessageText = $this->get("message");
    +
    +        $bIsHTML = false;
    +        if ($this->get("type") == "html") {
    +            $sMessageHTML = $this->getHTMLMessage();
    +
    +            if ($sMessageHTML === false) {
    +                // There was a problem getting the html message (maybe article
    +                // deleted). Exit with error instead of sending as text message only
    +
    +                if ($contenido) { // Use i18n only in backend
    +                    $sError = i18n("Newsletter could not be sent: No html message available", "cl_newsletter");
    +                } else {
    +                    $sError = "Newsletter could not be sent: No html message available";
    +                }
    +                $this->_sError = $sError;
    +                return false;
    +            } else {
    +                $bIsHTML = true;
    +            }
    +        }
    +
    +        // Preventing double lines in mail, you may wish to disable this function on windows servers
    +        if (!getSystemProperty("newsletter", "disable-rn-replacement")) {
    +            $sMessageText = str_replace("\r\n", "\n", $sMessageText);
    +        }
    +
    +        // Single replacements
    +        // Replace message tags (text message)
    +        $this->_replaceTag($sMessageText, false, "date", strftime($sFormatDate));
    +        $this->_replaceTag($sMessageText, false, "time", strftime($sFormatTime));
    +
    +        // Replace message tags (html message)
    +        if ($bIsHTML) {
    +            $this->_replaceTag($sMessageHTML, true, "date", strftime($sFormatDate));
    +            $this->_replaceTag($sMessageHTML, true, "time", strftime($sFormatTime));
    +        }
    +
    +        // Enabling plugin interface
    +        if (getSystemProperty("newsletter", "newsletter-recipients-plugin") == "true") {
    +            $bPluginEnabled = true;
    +            $aPlugins = array();
    +
    +            if (is_array($cfg['plugins']['recipients'])) {
    +                foreach ($cfg['plugins']['recipients'] as $sPlugin) {
    +                    plugin_include("recipients", $sPlugin . "/" . $sPlugin . ".php");
    +                    if (function_exists("recipients_" . $sPlugin . "_wantedVariables")) {
    +                        $aPlugins[$sPlugin] = call_user_func("recipients_" . $sPlugin . "_wantedVariables");
    +                    }
    +                }
    +            }
    +        } else {
    +            setSystemProperty("newsletter", "newsletter-recipients-plugin", "false");
    +            $bPluginEnabled = false;
    +        }
    +
    +        $aRecipients = array();
    +        if ($iIDNewsGroup !== false) {
    +            $oGroupMembers = new RecipientGroupMemberCollection;
    +            $aRecipients = $oGroupMembers->getRecipientsInGroup($iIDNewsGroup, false);
    +        } else if ($iIDNewsRcp !== false) {
    +            $aRecipients[] = $iIDNewsRcp;
    +        }
    +
    +        $iCount = count($aRecipients);
    +        if ($iCount > 0) {
    +            $this->_replaceTag($sMessageText, false, "number", $iCount);
    +
    +            // Replace message tags (html message)
    +            if ($bIsHTML) {
    +                $this->_replaceTag($sMessageHTML, true, "number", $iCount);
    +            }
    +
    +            foreach ($aRecipients as $iID) {
    +                $sRcpMsgText = $sMessageText;
    +                $sRcpMsgHTML = $sMessageHTML;
    +
    +                // Don't change name of $recipient variable as it is used in plugins!
    +                $recipient = new Recipient;
    +                $recipient->loadByPrimaryKey($iID);
    +
    +                $sEMail = $recipient->get("email");
    +                $sName = $recipient->get("name");
    +                if (empty($sName)) {
    +                    $sName = $sEMail;
    +                }
    +                $sKey = $recipient->get("hash");
    +
    +                $bSendHTML = false;
    +                if ($recipient->get("news_type") == 1) {
    +                    $bSendHTML = true; // Recipient accepts html newsletter
    +                }
    +
    +                $this->_replaceTag($sRcpMsgText, false, "name", $sName);
    +                $this->_replaceTag($sRcpMsgText, false, "unsubscribe", $sPath . "unsubscribe=" . $sKey);
    +                $this->_replaceTag($sRcpMsgText, false, "change", $sPath . "change=" . $sKey);
    +                $this->_replaceTag($sRcpMsgText, false, "stop", $sPath . "stop=" . $sKey);
    +                $this->_replaceTag($sRcpMsgText, false, "goon", $sPath . "goon=" . $sKey);
    +
    +                // Replace message tags (html message)
    +                if ($bIsHTML && $bSendHTML) {
    +                    $this->_replaceTag($sRcpMsgHTML, true, "name", $sName);
    +                    $this->_replaceTag($sRcpMsgHTML, true, "unsubscribe", $sPath . "unsubscribe=" . $sKey);
    +                    $this->_replaceTag($sRcpMsgHTML, true, "change", $sPath . "change=" . $sKey);
    +                    $this->_replaceTag($sRcpMsgHTML, true, "stop", $sPath . "stop=" . $sKey);
    +                    $this->_replaceTag($sRcpMsgHTML, true, "goon", $sPath . "goon=" . $sKey);
    +                }
    +
    +                if ($bPluginEnabled) {
    +                    foreach ($aPlugins as $sPlugin => $aPluginVar) {
    +                        foreach ($aPluginVar as $sPluginVar) {
    +                            // Replace tags in text message
    +                            $this->_replaceTag($sRcpMsgText, false, $sPluginVar, call_user_func("recipients_" . $sPlugin . "_getvalue", $sPluginVar));
    +                            // Replace tags in html message
    +                            if ($bIsHTML && $bSendHTML) {
    +                                $this->_replaceTag($sRcpMsgHTML, true, $sPluginVar, call_user_func("recipients_" . $sPlugin . "_getvalue", $sPluginVar));
    +                            }
    +                        }
    +                    }
    +                }
    +
    +                if (strlen($sKey) != 30) { // Prevents sending without having a key
    +                    if ($contenido) { // Use i18n only in backend
    +                        $sError = i18n("Newsletter to %s could not be sent: Recipient has an incompatible or empty key", "cl_newsletter");
    +                    } else {
    +                        $sError = "Newsletter to %s could not be sent: Recipient has an incompatible or empty key";
    +                    }
    +                    $aMessages[] = $sName . " (" . $sEMail . "): " . sprintf($sError, $sEMail);
    +                } else if (!isValidMail($sEMail)) {
    +                    if ($contenido) { // Use i18n only in backend
    +                        $sError = i18n("Newsletter to %s could not be sent: No valid e-mail address specified", "cl_newsletter");
    +                    } else {
    +                        $sError = "Newsletter to %s could not be sent: No valid e-mail address specified";
    +                    }
    +                    $aMessages[] = $sName . " (" . $sEMail . "): " . sprintf($sError, $sEMail);
    +                } else {
    +                    $oMail = new PHPMailer();
    +                    $oMail->CharSet = $sEncoding;
    +                    $oMail->IsHTML($bIsHTML && $bSendHTML);
    +                    $oMail->From = $sFrom;
    +                    $oMail->FromName = $sFromName;
    +                    $oMail->AddAddress($sEMail);
    +                    $oMail->Mailer = "mail";
    +                    $oMail->Subject = $sSubject;
    +
    +                    if ($bIsHTML && $bSendHTML) {
    +                        $oMail->Body = $sRcpMsgHTML;
    +                        $oMail->AltBody = $sRcpMsgText . "\n\n";
    +                    } else {
    +                        $oMail->Body = $sRcpMsgText . "\n\n";
    +                    }
    +
    +                    if ($oMail->Send()) {
    +                        $aSendRcps[] = $sName . " (" . $sEMail . ")";
    +                    } else {
    +                        if ($contenido) { // Use i18n only in backend
    +                            $sError = i18n("Newsletter to %s could not be sent", "cl_newsletter");
    +                        } else {
    +                            $sError = "Newsletter to %s could not be sent";
    +                        }
    +                        $aMessages[] = $sName . " (" . $sEMail . "): " . sprintf($sError, $sEMail);
    +                    }
    +                }
    +            }
    +        } else {
    +            if ($contenido) { // Use i18n only in backend
    +                $sError = i18n("No recipient with specified recipient/group id %s/%s found", "cl_newsletter");
    +            } else {
    +                $sError = "No recipient with specified recpient/group id %s/%s found";
    +            }
    +            $aMessages[] = sprintf($sError, $iIDNewsRcp, $iIDNewsGroup);
    +        }
    +
    +        if (count($aMessages) > 0) {
    +            $this->_sError = implode("
    ", $aMessages); + return false; + } else { + return true; + } + } + + /** + * @deprecated >V4.6.15 - 21.05.2007 + * + * Sends a newsletter + * @param $idcatart integer specifies id of the 'BlackBox'-acrticle containing the 'BlackBox'-module for management + * @param $destination string specifies, who will receive the newsletter ("all", "default" = defaultgroup, + * "selection" = selected groups, "single" = one recepient [e.g. Welcome-Newsletter]) + * @param $to array specifies, which group of recipients shall receive the + * newsletter ("all", "default" = defaultgroup, "4,5,6" = group IDs) + * @param $iChunkSize integer specifies size of chunks when sending in chunks, 0 = don't send in chunks + * @param $iChunk integer specifies current chunk number when sending in chunks + * result array array of recipient names/e-mails + */ + public function send($idcatart, $destination = "other", $to = "", $iChunkSize = 0, $iChunk = 0, $sEncoding = "iso-8859-1") { + // What should we do with this deprecated method? + $aResult = array(); + $aResult[] = 0; + $aResult[] = "Newsletter->send() not supported anymore (class.newsletter.php)"; + return $aResult; + } + +} diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.recipients.php b/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.recipients.php new file mode 100644 index 0000000..a464bfd --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/classes/class.newsletter.recipients.php @@ -0,0 +1,248 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2004-08-01 + * modified 2008-06-30, Dominik Ziegler, add security fix + * modified 2011-03-14, Murat Purc, adapted to new GenericDB, partly ported to PHP 5, formatting + * + * $Id: class.newsletter.recipients.php 119 2012-08-07 17:35:39Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * Recipient management class + */ +class RecipientCollection extends ItemCollection { + + /** + * Constructor Function + * @param none + */ + public function __construct() { + global $cfg; + parent::__construct($cfg["tab"]["news_rcp"], "idnewsrcp"); + $this->_setItemClass("Recipient"); + } + + /** + * Creates a new recipient + * @param string $sEMail Specifies the e-mail adress + * @param string $sName Specifies the recipient name (optional) + * @param int $iConfirmed Specifies, if the recipient is confirmed (optional) + * @param string $sJoinID Specifies additional recipient group ids to join (optional, e.g. 47,12,...) + * @param int $iMessageType Specifies the message type for the recipient (0 = text, 1 = html) + */ + public function create($sEMail, $sName = "", $iConfirmed = 0, $sJoinID = "", $iMessageType = 0) { + global $client, $lang, $auth; + + $iConfirmed = (int) $iConfirmed; + $iMessageType = (int) $iMessageType; + + /* Check if the e-mail adress already exists */ + $email = strtolower($email); // e-mail always lower case + $this->setWhere("idclient", $client); + $this->setWhere("idlang", $lang); + $this->setWhere("email", $sEMail); + $this->query(); + + if ($this->next()) { + return $this->create($sEMail . "_" . substr(md5(rand()), 0, 10), $sName, 0, $sJoinID, $iMessageType); // 0: Deactivate 'confirmed' + } + $oItem = parent::createNewItem(); + $oItem->set("idclient", $client); + $oItem->set("idlang", $lang); + $oItem->set("name", $sName); + $oItem->set("email", $sEMail); + $oItem->set("hash", substr(md5(rand()), 0, 17) . uniqid("")); // Generating UID, 30 characters + $oItem->set("confirmed", $iConfirmed); + $oItem->set("news_type", $iMessageType); + + if ($iConfirmed) { + $oItem->set("confirmeddate", date("Y-m-d H:i:s"), false); + } + $oItem->set("deactivated", 0); + $oItem->set("created", date("Y-m-d H:i:s"), false); + $oItem->set("author", $auth->auth["uid"]); + $oItem->store(); + + $iIDRcp = $oItem->get("idnewsrcp"); // Getting internal id of new recipient + // Add this recipient to the default recipient group (if available) + $oGroups = new RecipientGroupCollection(); + $oGroupMembers = new RecipientGroupMemberCollection(); + + $oGroups->setWhere("idclient", $client); + $oGroups->setWhere("idlang", $lang); + $oGroups->setWhere("defaultgroup", 1); + $oGroups->query(); + + while ($oGroup = $oGroups->next()) { + $iIDGroup = $oGroup->get("idnewsgroup"); + $oGroupMembers->create($iIDGroup, $iIDRcp); + } + + // Add to other recipient groups as well? Do so! + if ($sJoinID != "") { + $aJoinID = explode(",", $sJoinID); + + if (count($aJoinID) > 0) { + foreach ($aJoinID as $iIDGroup) { + $oGroupMembers->create($iIDGroup, $iIDRcp); + } + } + } + + return $oItem; + } + + /** + * Overridden delete method to remove recipient from groupmember table + * before deleting recipient + * + * @param $itemID int specifies the recipient + */ + public function delete($itemID) { + $oAssociations = new RecipientGroupMemberCollection(); + $oAssociations->setWhere("idnewsrcp", $itemID); + $oAssociations->query(); + + While ($oItem = $oAssociations->next()) { + $oAssociations->delete($oItem->get("idnewsgroupmember")); + } + parent::delete($itemID); + } + + /** + * Purge method to delete recipients which hasn't been confirmed since over a month + * @param $timeframe int Days after creation a not confirmed recipient will be removed + * @return int Count of deleted recipients + */ + public function purge($timeframe) { + global $client, $lang; + + $oRecipientCollection = new RecipientCollection(); + + // DATEDIFF(created, NOW()) > 30 would be better, but it's only available in MySQL V4.1.1 and above + // Note, that, TO_DAYS or NOW may not be available in other database systems than MySQL + $oRecipientCollection->setWhere("idclient", $client); + $oRecipientCollection->setWhere("idlang", $lang); + $oRecipientCollection->setWhere("confirmed", 0); + $oRecipientCollection->setWhere("(TO_DAYS(NOW()) - TO_DAYS(created))", $timeframe, ">"); + $oRecipientCollection->query(); + + while ($oItem = $oRecipientCollection->next()) { + $oRecipientCollection->delete($oItem->get("idnewsrcp")); + } + return $oRecipientCollection->count(); + } + + /** + * checkEMail returns true, if there is no recipient with the same e-mail address; otherwise false + * @param $email string e-mail + * @return recpient item if item with e-mail exists, false otherwise + */ + public function emailExists($sEmail) { + global $client, $lang; + + $oRecipientCollection = new RecipientCollection(); + + $oRecipientCollection->setWhere("idclient", $client); + $oRecipientCollection->setWhere("idlang", $lang); + $oRecipientCollection->setWhere("email", strtolower($sEmail)); + $oRecipientCollection->query(); + + if ($oItem = $oRecipientCollection->next()) { + return $oItem; + } else { + return false; + } + } + + /** + * Sets a key for all recipients without key or an old key (len(key) <> 30) + * @param none + */ + public function updateKeys() { + $this->setWhere("LENGTH(hash)", 30, "<>"); + $this->query(); + + $iUpdated = $this->count(); + while ($oItem = $this->next()) { + $oItem->set("hash", substr(md5(rand()), 0, 17) . uniqid("")); /* Generating UID, 30 characters */ + $oItem->store(); + } + + return $iUpdated; + } + +} + +/** + * Single Recipient Item + */ +class Recipient extends Item { + + /** + * Constructor Function + * @param mixed $mId Specifies the ID of item to load + */ + public function __construct($mId = false) { + global $cfg; + parent::__construct($cfg["tab"]["news_rcp"], "idnewsrcp"); + if ($mId !== false) { + $this->loadByPrimaryKey($mId); + } + } + + public function store() { + global $auth; + + $this->set("lastmodified", date("Y-m-d H:i:s"), false); + $this->set("modifiedby", $auth->auth["uid"]); + parent::store(); + + // Update name, email and newsletter type for recipients in pending newsletter jobs + $sName = $this->get("name"); + $sEmail = $this->get("email"); + if ($sName == "") { + $sName = $sEmail; + } + $iNewsType = $this->get("news_type"); + + $oLogs = new cNewsletterLogCollection(); + $oLogs->setWhere("idnewsrcp", $this->get($this->primaryKey)); + $oLogs->setWhere("status", "pending"); + $oLogs->query(); + + while ($oLog = $oLogs->next()) { + $oLog->set("rcpname", $sName); + $oLog->set("rcpemail", $sEmail); + $oLog->set("rcpnewstype", $iNewsType); + $oLog->store(); + } + } + +} diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/config.autoloader.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/config.autoloader.php new file mode 100644 index 0000000..ee797c9 --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/config.autoloader.php @@ -0,0 +1,17 @@ + $sAutoloadClassPath.'class.newsletter.groups.php', + 'RecipientGroup' => $sAutoloadClassPath.'class.newsletter.groups.php', + 'RecipientGroupMemberCollection' => $sAutoloadClassPath.'class.newsletter.groups.php', + 'RecipientGroupMember' => $sAutoloadClassPath.'class.newsletter.groups.php', + 'cNewsletterJobCollection' => $sAutoloadClassPath.'class.newsletter.jobs.php', + 'cNewsletterJob' => $sAutoloadClassPath.'class.newsletter.jobs.php', + 'cNewsletterLogCollection' => $sAutoloadClassPath.'class.newsletter.logs.php', + 'cNewsletterLog' => $sAutoloadClassPath.'class.newsletter.logs.php', + 'NewsletterCollection' => $sAutoloadClassPath.'class.newsletter.php', + 'Newsletter' => $sAutoloadClassPath.'class.newsletter.php', + 'RecipientCollection' => $sAutoloadClassPath.'class.newsletter.recipients.php', + 'Recipient' => $sAutoloadClassPath.'class.newsletter.recipients.php' +); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/config.plugin.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/config.plugin.php new file mode 100644 index 0000000..2f5e760 --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/config.plugin.php @@ -0,0 +1,35 @@ + + * @copyright 2012 CL-Team + * @link http://www.conlite.org + * + * $Id: config.plugin.php 121 2012-08-08 11:34:33Z oldperl $ + */ + +// security check +defined('CON_FRAMEWORK') or die('Illegal call'); + +class nlHandler extends pluginHandlerAbstract { + +} + +/* +plugin_include(nlHandler::getName(), "includes/functions/demo1.php"); +plugin_include(nlHandler::getName(), "includes/functions/demo2.php"); + */ + + +$cfg["tab"]["news"] = $cfg['sql']['sqlprefix']."_pi_news"; +$cfg["tab"]["news_rcp"] = $cfg['sql']['sqlprefix']."_pi_news_rcp"; +$cfg["tab"]["news_groups"] = $cfg['sql']['sqlprefix']."_pi_news_groups"; +$cfg["tab"]["news_groupmembers"] = $cfg['sql']['sqlprefix']."_pi_news_groupmembers"; +$cfg["tab"]["news_jobs"] = $cfg['sql']['sqlprefix']."_pi_news_jobs"; +$cfg["tab"]["news_log"] = $cfg['sql']['sqlprefix']."_pi_news_log"; \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_edit.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_edit.php new file mode 100644 index 0000000..9da5e92 --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_edit.php @@ -0,0 +1,556 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2007-01-01, Bj�rn Behrens (HerrB) + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2010-12-14, Dominik Ziegler, newsletter encoding is ignored due to wrong parameter values [#CON-374] + * + * $Id: include.newsletter_edit.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +// Initialization +$oPage = new cPage(); +$oRcpGroups = new RecipientGroupCollection(); +$oClientLang = new cApiClientLanguage(false, $client, $lang); +$oNewsletters = new NewsletterCollection(); + +// Include plugins +if (is_array($cfg['plugins']['newsletters'])) { + foreach ($cfg['plugins']['newsletters'] as $plugin) { + plugin_include("newsletters", $plugin . "/" . $plugin . ".php"); + } +} + +if ($action == "news_create" && $perm->have_perm_area_action($area, "news_create")) { + // Create new newsletter + $oNewsletter = $oNewsletters->create(i18n("-- new newsletter --", "cl_newsletter")); + $idnewsletter = $oNewsletter->get("idnews"); + $oPage->setSubnav("idnewsletter=$idnewsletter", "news"); + $oPage->setReload(); + + // Populating default values + $oNewsletter->set("newsfrom", $oClientLang->getProperty("newsletter", "newsfrom")); + $oNewsletter->set("newsfromname", $oClientLang->getProperty("newsletter", "newsfromname")); + + $sValue = $oClientLang->getProperty("newsletter", "sendto"); + if ($sValue == "") { + $sValue = "all"; + } + $oNewsletter->set("send_to", $sValue); + + $oNewsletter->set("send_ids", $oClientLang->getProperty("newsletter", "sendids")); + + $iValue = $oClientLang->getProperty("newsletter", "use_cronjob"); + if (!is_numeric($iValue)) { + $iValue = 0; + } + $oNewsletter->set("use_cronjob", $iValue); + + $iValue = $oClientLang->getProperty("newsletter", "dispatch"); + if (!is_numeric($iValue)) { + $iValue = 0; + } + $oNewsletter->set("dispatch", $iValue); + + $iValue = $oClientLang->getProperty("newsletter", "dispatchcount"); + if (!is_numeric($iValue)) { + $iValue = 50; + } + $oNewsletter->set("dispatch_count", $iValue); + + $iValue = $oClientLang->getProperty("newsletter", "dispatchdelay"); + if (!is_numeric($iValue)) { + $iValue = 5; + } + $oNewsletter->set("dispatch_delay", $iValue); + $oNewsletter->store(); +} else if ($action == "news_duplicate" && $perm->have_perm_area_action($area, "news_create")) { + // Copy newsletter + $oNewsletter = $oNewsletters->duplicate($idnewsletter); + + // Update subnav with new ID + $oPage->setSubnav("idnewsletter=" . $oNewsletter->get("idnews"), "news"); + $oPage->setReload(); +} else if ($action == "news_delete" && $perm->have_perm_area_action($area, "news_delete")) { + // Delete newsletter + // If it is an html newsletter, delete html message article, also + $oNewsletter = new Newsletter($idnewsletter); + + if ($oNewsletter->get("type") == "html" && $oNewsletter->get("idart") > 0) { + conDeleteArt($oNewsletter->get("idart")); + } + + // Delete newsletter + $oNewsletters->delete($idnewsletter); + $oNewsletter = new Newsletter; // Generate empty newsletter object + // Setting blank subnav - "blank" doesn't mean anything special, it just can't be empty + // and must not contain "idnewsletter" as this is checked in the _subnav file. + $oPage->setSubnav("blank", "news"); + $oPage->setReload(); +} else if ($action == "news_add_job" && $perm->have_perm_area_action($area, "news_add_job")) { + // Create job + $oJobs = new cNewsletterJobCollection; + $oJob = $oJobs->create($idnewsletter, $oClientLang->getProperty("newsletter", "idcatart")); + unset($oJobs); + + if ($oJob) { + $notis = $notification->returnNotification("info", i18n("Newsletter dispatch job has been added for this newsletter", "cl_newsletter")) . "
    "; + } else { + $notis = $notification->returnNotification("error", i18n("Newsletter dispatch job has been not been added! Please check newsletter details", "cl_newsletter")) . "
    "; + } + + $oNewsletter = new Newsletter($idnewsletter); +} else if ($action == "news_send_test" && + ($perm->have_perm_area_action($area, "news_create") || + $perm->have_perm_area_action($area, "news_save") || + $perm->have_perm_area_action($area, "news_add_job"))) { + // Send test newsletter + $oUser = new cApiUser($auth->auth["uid"]); + + // Subnav gets not updated otherwise (no multilink from newsletter_menu) + $oPage->setSubnav("idnewsletter=" . $idnewsletter, "news"); + + // Get test destination + if ($perm->have_perm_area_action($area, "news_send_test")) { + $iTestIDNewsGroup = (int) $oUser->getProperty("newsletter", "test_idnewsgrp_lang" . $lang); + } else { + $iTestIDNewsGroup = 0; // If user doesn't have the news_send_test right, just send to himself + } + + // Get encoding + $oLang = new cApiLanguage($lang); + $sEncoding = $oLang->get("encoding"); + unset($oLang); + + // Send test newsletter + $oNewsletter = new Newsletter($idnewsletter); + $aRecipients = array(); + if ($iTestIDNewsGroup == 0) { + // Send test newsletter to current user email address + $sName = $oUser->get("realname"); + $sEMail = $oUser->get("email"); + + $bSend = $oNewsletter->sendEMail($oClientLang->getProperty("newsletter", "idcatart"), $sEMail, $sName, true, $sEncoding); + if ($bSend) { + $aRecipients[] = $sName . " (" . $sEMail . ")"; + } else { + $aRecipients[] = i18n("None", "cl_newsletter"); + } + } else { + $bSend = $oNewsletter->sendDirect($oClientLang->getProperty("newsletter", "idcatart"), 0, $iTestIDNewsGroup, $aRecipients, $sEncoding); + } + unset($oUser); + + if ($bSend) { + $notis = $notification->returnNotification("info", i18n("Test newsletter has been sent to:", "cl_newsletter") . "
    " . implode("
    ", $aRecipients) . "
    "); + } else { + $notis = $notification->returnNotification("warning", i18n("Test newsletter has not been sent (partly or completely):", "cl_newsletter") . "
    " . + i18n("Successful:", "cl_newsletter") . "
    " . implode("
    ", $aRecipients) . "
    " . + i18n("Error messages:", "cl_newsletter") . "
    " . $oNewsletter->_sError); + } +} else { + // No action, just get selected newsletter + $oNewsletter = new Newsletter($idnewsletter); +} + +if ($oNewsletter->virgin == false && $oNewsletter->get("idclient") == $client && $oNewsletter->get("idlang") == $lang) { + // Check and set values + if ($_REQUEST["optSendTo"] == "") { + $_REQUEST["optSendTo"] = $oNewsletter->get("send_to"); + } + + if (!is_numeric($_REQUEST["ckbWelcome"])) { + $_REQUEST["ckbWelcome"] = 0; + } + + if (!is_numeric($_REQUEST["txtDispatchCount"]) || $_REQUEST["txtDispatchCount"] <= 0) { + $_REQUEST["txtDispatchCount"] = $oNewsletter->get("dispatch_count"); + } + + // Note, that for DispatchDelay 0 is possible (= send chunks manually) + if (!is_numeric($_REQUEST["txtDispatchDelay"]) || $_REQUEST["txtDispatchDelay"] < 0) { + $_REQUEST["txtDispatchDelay"] = $oNewsletter->get("dispatch_delay"); + } + + // Only set template id to 0 if it has been specified (as something not useful). + // This prevents deleting of the template id, if type setting is changed to "text" + if (isset($_REQUEST["selTemplate"]) && !is_numeric($_REQUEST["selTemplate"])) { + $_REQUEST["selTemplate"] = 0; + } + + if ($action == "news_save" && $perm->have_perm_area_action($area, $action)) { + // Save changes + $aMessages = array(); + + // Changing e.g. \' back to ' (magic_quotes) + $sName = stripslashes($_REQUEST["txtName"]); + $sFromEMail = stripslashes($_REQUEST["txtFromEMail"]); + $sFromName = stripslashes($_REQUEST["txtFromName"]); + $sSubject = stripslashes($_REQUEST["txtSubject"]); + + if ($oNewsletter->get("name") != $sName || + $oNewsletter->get("welcome") != $_REQUEST["ckbWelcome"] || + !isValidMail($oNewsletter->get("newsfrom")) && isValidMail($sFromEMail)) { + // Only reload, if something visible has changed + $oPage->setReload(); + } + + if ($oNewsletter->get("name") != $sName) { + // Check, if item with same name exists + $oNewsletters->setWhere("name", $sName); + $oNewsletters->setWhere("idclient", $client); + $oNewsletters->setWhere("idlang", $lang); + $oNewsletters->setWhere($oNewsletter->primaryKey, $oNewsletter->get($oNewsletter->primaryKey), "!="); + $oNewsletters->query(); + + if ($oNewsletters->next()) { + $aMessages[] = i18n("Could not set new newsletter name: name already exists", "cl_newsletter"); + } else { + $oNewsletter->set("name", $sName); + if ($oNewsletter->get("idart") > 0) { + // Update also HTML newsletter article title, if newsletter name has been changed + $oArticles = new cApiArticleLanguageCollection; + $oArticles->setWhere("idlang", $lang); + $oArticles->setWhere("idart", $oNewsletter->get("idart")); + $oArticles->query(); + + if ($oArticle = $oArticles->next()) { + $oArticle->set("title", sprintf(i18n("Newsletter: %s", "cl_newsletter"), $oNewsletter->get("name"))); + $oArticle->store(); + } + unset($oArticle); + unset($oArticles); + } + } + } + if ($oClientLang->getProperty("newsletter", "html_newsletter") == "true") { + $oNewsletter->set("type", $selType); + } else { + $oNewsletter->set("type", "text"); + } + $oNewsletter->set("newsfrom", $sFromEMail); + $oNewsletter->set("newsfromname", $sFromName); + $oNewsletter->set("subject", $sSubject); + + // Options + $oNewsletter->set("welcome", $_REQUEST["ckbWelcome"]); + + // Check out if there are any plugins + if (is_array($cfg['plugins']['newsletters'])) { + foreach ($cfg['plugins']['newsletters'] as $plugin) { + if (function_exists("newsletters_" . $plugin . "_wantedVariables") && function_exists("newsletters_" . $plugin . "_store")) { + $wantVariables = call_user_func("newsletters_" . $plugin . "_wantedVariables"); + + if (is_array($wantVariables)) { + $varArray = array(); + + foreach ($wantVariables as $value) { + $varArray[$value] = stripslashes($GLOBALS[$value]); + } + } + $store = call_user_func("newsletters_" . $plugin . "_store", $varArray); + } + } + } + + // If "selected groups" have been selected and no group specified, set + // selection to "all" + if ($_REQUEST["optSendTo"] == "selection" && !is_array($_REQUEST["selGroup"])) { + $aMessages[] = i18n("'Send to recipients in selected groups' has been selected, but no group has been specified. Selection has been set to 'Send to all recipients'", "cl_newsletter"); + $_REQUEST["optSendTo"] = "all"; + } + $oNewsletter->set("send_to", $_REQUEST["optSendTo"]); + $oNewsletter->set("send_ids", serialize($_REQUEST["selGroup"])); + + if (getEffectiveSetting("newsletter", "option-cronjob-available", "false") == "true") { + // Only store changes, if cronjob option is available + if (isset($_REQUEST["ckbCronJob"])) { + $oNewsletter->set("use_cronjob", 1); + } else { + $oNewsletter->set("use_cronjob", 0); + } + } + + if (isset($_REQUEST["ckbDispatch"])) { + $oNewsletter->set("dispatch", 1); + } else { + $oNewsletter->set("dispatch", 0); + } + + $oNewsletter->set("dispatch_count", $_REQUEST["txtDispatchCount"]); + $oNewsletter->set("dispatch_delay", $_REQUEST["txtDispatchDelay"]); + + $oNewsletter->store(); // Note, that the properties are stored, anyway + // Storing from (e-mail), from (name) and options as default + if ($_REQUEST["ckbSetDefault"]) { + $oClientLang->setProperty("newsletter", "newsfrom", $sFromEMail); + $oClientLang->setProperty("newsletter", "newsfromname", $sFromName); + $oClientLang->setProperty("newsletter", "sendto", $_REQUEST["optSendTo"]); + $oClientLang->setProperty("newsletter", "sendgroups", serialize($_REQUEST["selGroup"])); + if (isset($_REQUEST["ckbCronJob"])) { + $oClientLang->setProperty("newsletter", "use_cronjob", "1"); + } else { + $oClientLang->setProperty("newsletter", "use_cronjob", "0"); + } + if (isset($_REQUEST["ckbDispatch"])) { + $oClientLang->setProperty("newsletter", "dispatch", "1"); + } else { + $oClientLang->setProperty("newsletter", "dispatch", "0"); + } + $oClientLang->setProperty("newsletter", "dispatchcount", $_REQUEST["txtDispatchCount"]); + $oClientLang->setProperty("newsletter", "dispatchdelay", $_REQUEST["txtDispatchDelay"]); + } + + if (count($aMessages) > 0) { + $notis .= $notification->returnNotification("warning", implode("
    ", $aMessages)) . "
    "; + } + } else { + $_REQUEST["selGroup"] = unserialize($oNewsletter->get("send_ids")); + if (!is_array($_REQUEST["selGroup"])) { + $_REQUEST["selGroup"] = unserialize($oClientLang->getProperty("newsletter", "sendgroups")); + if (!is_array($_REQUEST["selGroup"])) { + $_REQUEST["selGroup"] = array(); + } + } + + $_REQUEST["ckbDispatch"] = false; + if ($oNewsletter->get("dispatch") == 1) { + $_REQUEST["ckbDispatch"] = true; + } else if ($oNewsletter->get("dispatch") == "" && $oClientLang->getProperty("newsletter", "dispatch") == "true") { + $_REQUEST["ckbDispatch"] = true; + } + } + + $oForm = new UI_Table_Form("properties"); + $oForm->setVar("frame", $frame); + $oForm->setVar("area", $area); + $oForm->setVar("action", "news_save"); + $oForm->setVar("idnewsletter", $oNewsletter->get("idnews")); + + $oForm->addHeader(i18n("Edit newsletter", "cl_newsletter")); + + $oTxtName = new cHTMLTextbox("txtName", $oNewsletter->get("name"), 40); + $oForm->add(i18n("Name", "cl_newsletter"), $oTxtName->render()); + + $oSelType = new cHTMLSelectElement("selType"); + $aItems = array(); + $aItems[] = array("text", i18n("Text only", "cl_newsletter")); + if ($oClientLang->getProperty("newsletter", "html_newsletter") == "true") { + $aItems[] = array("html", i18n("HTML and text", "cl_newsletter")); + } else { + $oNewsletter->set("type", "text"); // just in case the global setting was switched off + // TODO: Should this setting be stored? + } + $oSelType->autoFill($aItems); + $oSelType->setDefault($oNewsletter->get("type")); + + $oForm->add(i18n("Type", "cl_newsletter"), $oSelType->render()); + + $oTxtFromEMail = new cHTMLTextbox("txtFromEMail", $oNewsletter->get("newsfrom"), 40); + $oTxtFromName = new cHTMLTextbox("txtFromName", $oNewsletter->get("newsfromname"), 40); + $oTxtSubject = new cHTMLTextarea("txtSubject", $oNewsletter->get("subject"), 80, 2); + + $oForm->add(i18n("From (E-Mail)", "cl_newsletter"), $oTxtFromEMail->render()); + $oForm->add(i18n("From (Name)", "cl_newsletter"), $oTxtFromName->render() . " " . i18n("optional", "cl_newsletter")); + $oForm->add(i18n("Subject", "cl_newsletter"), $oTxtSubject->render()); + + // Send options + $oSendToAll = new cHTMLRadiobutton("optSendTo", "all"); + $oSendToAll->setEvent("Click", "checkSelection(this.value)"); + $oSendToDefault = new cHTMLRadiobutton("optSendTo", "default"); + $oSendToDefault->setEvent("Click", "checkSelection(this.value)"); + $oSendToGroups = new cHTMLRadiobutton("optSendTo", "selection"); + $oSendToGroups->setEvent("Click", "checkSelection(this.value)"); + + $oRcpGroups->setWhere("idclient", $client); + $oRcpGroups->setWhere("idlang", $lang); + $oRcpGroups->setOrder("defaultgroup DESC, groupname ASC"); + $oRcpGroups->query(); + + $aItems = array(); + while ($oRcpGroup = $oRcpGroups->next()) { + $sGroupName = $oRcpGroup->get("groupname"); + if ($oRcpGroup->get("defaultgroup")) { + $sGroupName = $sGroupName . "*"; + } + $aItems[] = array($oRcpGroup->get("idnewsgroup"), $sGroupName); + } + + $oSelGroup = new cHTMLSelectElement("selGroup[]", "", "groupselect"); + $oSelGroup->setSize(10); + $oSelGroup->setStyle("width: 350px; margin-top: 5px; margin-bottom: 5px; margin-left: 25px;"); + $oSelGroup->setMultiSelect(); + $oSelGroup->setAlt(i18n("Note: Hold to select multiple items.", "cl_newsletter")); + $oSelGroup->autoFill($aItems); + + // No groups in the list, sendToGroups and group listbox disabled + if (count($aItems) == 0) { + $oSendToGroups->setDisabled(true); + if ($_REQUEST["optSendTo"] == "selection") { + $_REQUEST["optSendTo"] == "all"; + } + } else if (is_array($_REQUEST["selGroup"])) { + foreach ($_REQUEST["selGroup"] as $sValue) { + if (array_key_exists($sValue, $oSelGroup->_options)) { + // only select, if item still exists + $oSelGroup->_options[$sValue]->setSelected(true); + } + } + } + + switch ($_REQUEST["optSendTo"]) { + case "default": + $oSendToDefault->setChecked(true); + $oSelGroup->setDisabled(true); + break; + case "selection": + $oSendToGroups->setChecked(true); + break; + default: + $oSendToAll->setChecked(true); + $oSelGroup->setDisabled(true); + } + + // Recipients + $oForm->add(i18n("Recipients", "cl_newsletter"), $oSendToAll->toHTML(false) . " " . i18n("Send newsletter to all recipients", "cl_newsletter") . "
    " . chr(10) . + $oSendToDefault->toHTML(false) . " " . i18n("Send newsletter to the members of the default group", "cl_newsletter") . "
    " . chr(10) . + $oSendToGroups->toHTML(false) . " " . i18n("Send newsletter to the members of the selected group(s):", "cl_newsletter") . "
    " . chr(10) . + $oSelGroup->render()); + + /* TODO: Work in progress + // Files + $oSelFiles = new cHTMLSelectElement("selFiles[]", "", "fileselect"); + $oSelFiles->setSize(5); + //$oSelGroup->setStyle("width: 350px; margin-top: 5px; margin-bottom: 5px; margin-left: 25px;"); + $oSelFiles->setMultiSelect(); + $oSelFiles->setAlt(i18n("Note: Hold to select multiple items.")); + //$oSelGroup->autoFill($aItems); + $sFileSelScript = ''; + $oPage->addScript('selFile', $sFileSelScript); + $oForm->add(i18n("Attachments"), $oSelFiles->render().'
    Test'); + */ + + // Options + $ckbWelcome = new cHTMLCheckbox("ckbWelcome", "1"); + $ckbWelcome->setChecked($oNewsletter->get("welcome")); + + // Generate disabled cronjob element + // Provide only "Use cronjob" option, if it has been explicitely enabled + // (and the admin knows, what he is doing - like using a real cronjob, not a simulated one...) + // Note, that the run_newsletter_job.php file has not been added to the cronjob + // list in the cronjobs folder - as it may be used, but not via cronjob simulation + $ckbCronJob = new cHTMLCheckbox("ckbCronJob", "1", "", $oNewsletter->get("use_cronjob"), true); + + if (getEffectiveSetting("newsletter", "option-cronjob-available", "false") == "true") { + // Enable cronjob checkbox + $ckbCronJob->setDisabled(""); + } else { + // Give the user a hint + $ckbCronJob->setAlt(i18n("Option has to be enabled as client setting - see techref for details", "cl_newsletter")); + } + + $oCkbDispatch = new cHTMLCheckbox("ckbDispatch", "enabled"); + $oCkbDispatch->setChecked($oNewsletter->get("dispatch")); + $oTxtDispatchCount = new cHTMLTextbox("txtDispatchCount", $oNewsletter->get("dispatch_count"), 4); + $oTxtDispatchDelay = new cHTMLTextbox("txtDispatchDelay", $oNewsletter->get("dispatch_delay"), 4); + $oTxtDispatchDelay->setAlt(i18n("Note: Set to 0 to send chunks manually.", "cl_newsletter")); + $oCkbSaveAsDefault = new cHTMLCheckbox("ckbSetDefault", "1"); + + $oForm->add(i18n("Options", "cl_newsletter"), $ckbWelcome->toHTML(false) . " " . i18n("Welcome-Newsletter", "cl_newsletter") . "
    " . + $ckbCronJob->toHTML(false) . " " . i18n("Use cronjob", "cl_newsletter") . "
    " . + $oCkbDispatch->toHTML(false) . " " . i18n("Send in blocks:", "cl_newsletter") . "   " . + i18n("Recipients per block:", "cl_newsletter") . " " . $oTxtDispatchCount->render() . " " . + i18n("Delay between blocks:", "cl_newsletter") . " " . $oTxtDispatchDelay->render() . " " . i18n("sec.", "cl_newsletter") . "
    " . + $oCkbSaveAsDefault->toHTML(false) . " " . i18n("Save option settings as default", "cl_newsletter")); + + $oForm->add(i18n("Author", "cl_newsletter"), $classuser->getUserName($oNewsletter->get("author")) . " (" . $oNewsletter->get("created") . ")"); + $oForm->add(i18n("Last modified by", "cl_newsletter"), $classuser->getUserName($oNewsletter->get("modifiedby")) . " (" . $oNewsletter->get("modified") . ")"); + + $sExecScript = ' + '; + $oPage->addScript('exec', $sExecScript); + + $oPage->setContent($notis . $oForm->render(true)); +} else { + $oPage->setContent($notis . ""); +} + +$oPage->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_edit_message.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_edit_message.php new file mode 100644 index 0000000..0371e01 --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_edit_message.php @@ -0,0 +1,257 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2007-01-01, Bj�rn Behrens (HerrB) + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.newsletter_edit_message.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +cInclude("includes", "functions.con.php"); // For conDeleteArt and conCopyArt +// Initialization +$oPage = new cPage; +$oClientLang = new cApiClientLanguage(false, $client, $lang); + +// Include plugins +if (is_array($cfg['plugins']['newsletters'])) { + foreach ($cfg['plugins']['newsletters'] as $plugin) { + plugin_include("newsletters", $plugin . "/" . $plugin . ".php"); + } +} + +// Exec actions +$oNewsletter = new Newsletter; +$oNewsletter->loadByPrimaryKey($idnewsletter); + +if ($oNewsletter->virgin == false && $oNewsletter->get("idclient") == $client && $oNewsletter->get("idlang") == $lang) { + // Check and set values + if (!is_numeric($_REQUEST["selTemplate"])) { + $_REQUEST["selTemplate"] = 0; + } + + // Saving message changes; note, that if a user doesn't have the right to save the + // text message he may still have the right to change the html article. To prevent + // changing the html article, give the user only read access right for the newsletter + // article category - the article will be shown also, if he doesn't have any rights at all... + if ($action == "news_save" && $perm->have_perm_area_action("news", $action)) { // Don't use $area! + // Changing e.g. \' back to ' (magic_quotes) + $sMessage = Contenido_Security::unescapeDB($_REQUEST["txtMessage"]); + $oNewsletter->set("message", $sMessage); + + if ($oNewsletter->get("template_idart") != $_REQUEST["selTemplate"]) { + if ($oNewsletter->get("idart") > 0) { + // Template has been changed: Delete old article + // (this discards the current html content as it deletes the existing newsletter article) + conDeleteArt($oNewsletter->get("idart")); + $iIDArt = 0; + } + + if ($_REQUEST["selTemplate"] > 0) { + // Template has been changed, but specified: Store template article as new newsletter article + $iIDArt = conCopyArticle($_REQUEST["selTemplate"], $oClientLang->getProperty("newsletter", "html_newsletter_idcat"), sprintf(i18n("Newsletter: %s", "cl_newsletter"), $oNewsletter->get("name"))); + conMakeOnline($iIDArt, $lang); // Article has to be online for sending... + } + + $oNewsletter->set("idart", $iIDArt); + $oNewsletter->set("template_idart", $_REQUEST["selTemplate"]); + } + + $oNewsletter->store(); + } else if ($oNewsletter->get("idart") > 0) { + // Check, if html message article and template article are still available + $oArticles = new cApiArticleLanguageCollection; + $oArticles->setWhere("idlang", $lang); + $oArticles->setWhere("idart", $oNewsletter->get("idart")); + $oArticles->query(); + + if ($oArticles->count() == 0) { + // Ups, article lost, reset idart and template_idart for newsletter + $notis = $notification->returnNotification("error", sprintf(i18n("The html newsletter article has been deleted (idart: %s), the html message is lost", "cl_newsletter"), $oNewsletter->get("idart"))) . "
    "; + + $oNewsletter->set("idart", 0); + $oNewsletter->set("template_idart", 0); + $oNewsletter->store(); + } else { + $oArticles->resetQuery(); + $oArticles->setWhere("idlang", $lang); + $oArticles->setWhere("idart", $oNewsletter->get("template_idart")); + $oArticles->query(); + + if ($oArticles->count() == 0) { + // Ups, template has been deleted: Restore from current newsletter message article + $notis = $notification->returnNotification("warning", i18n("The html newsletter template article has been deleted, it has been restored using the html message article of this newsletter", "cl_newsletter")) . "
    "; + + $iIDArt = conCopyArticle($oNewsletter->get("idart"), $oClientLang->getProperty("newsletter", "html_template_idcat"), sprintf(i18n("%s (Template restored)", "cl_newsletter"), $oNewsletter->get("name"))); + $oNewsletter->set("template_idart", $iIDArt); + $oNewsletter->store(); + } + } + } + + $oForm = new UI_Table_Form("frmNewsletterMsg"); + $oForm->setVar("frame", $frame); + $oForm->setVar("area", $area); + $oForm->setVar("action", "news_save"); + $oForm->setVar("idnewsletter", $idnewsletter); + $oForm->setWidth("100%"); + + $oForm->addHeader(sprintf(i18n("Edit newsletter message (%s)", "cl_newsletter"), $oNewsletter->get("name"))); + $oForm->add(i18n("Subject"), $oNewsletter->get("subject")); + + $sTagInfoText = '' . i18n("Tag information", "cl_newsletter") . '' . + '"; + + $iTplIDArt = 0; // Used later for on change event + if ($oNewsletter->get("type") == "html") { + $iTplIDArt = $oNewsletter->get("template_idart"); + $oSelTemplate = new cHTMLSelectElement("selTemplate"); + $oSelTemplate->setEvent("change", "askSubmitOnTplChange(this);"); + $aOptions = array("idcat" => $oClientLang->getProperty("newsletter", "html_template_idcat"), + "start" => true, + "offline" => true, + "order" => "title"); + $oTemplateArticles = new ArticleCollection($aOptions); + + $aItems = array(); + $aItems[] = array(0, i18n("-- none --", "cl_newsletter")); + while ($oArticle = $oTemplateArticles->nextArticle()) { + $aItems[] = array($oArticle->get("idart"), $oArticle->get("title")); + } + + $oSelTemplate->autoFill($aItems); + $oSelTemplate->setDefault($iTplIDArt); + unset($aItems); + unset($oArticles); + unset($oTemplateArticles); + + $oForm->add(i18n("HTML Template", "cl_newsletter"), $oSelTemplate->render() . " " . i18n("Note, that changing the template discards the current html message content", "cl_newsletter")); + + if ($iTplIDArt != 0) { + $sFrameSrc = $cfgClient[$client]["path"]["htmlpath"] . "front_content.php?changeview=edit&action=con_editart&idart=" . $oNewsletter->get("idart") . "&idcat=" . $oClientLang->getProperty("newsletter", "html_newsletter_idcat") . "&lang=" . $lang . "&contenido=" . $sess->id; + $oForm->add(i18n("HTML Message", "cl_newsletter"), '
    ' . $sTagInfoHTML); + } else { + // Add a real note, that a template has to be specified + $notis .= $notification->returnNotification("warning", i18n("Newsletter type has been set to HTML/text, please remember to select an html template", "cl_newsletter")) . "
    "; + + $oForm->add(i18n("HTML Message", "cl_newsletter"), i18n("Please choose a template first", "cl_newsletter")); + } + } + + $oTxtMessage = new cHTMLTextarea("txtMessage", $oNewsletter->get("message"), 80, 20); + $oForm->add(i18n("Text Message", "cl_newsletter"), $oTxtMessage->render() . "
    " . $sTagInfoText); + + $sExecScript = ' + '; + $oPage->addScript('messagebox', ''); + $oPage->addScript('execscript', $sExecScript); + $oPage->setContent($notis . $oForm->render(true)); +} else { + $oPage->setContent($notis . ""); +} + +$oPage->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_jobs_details.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_jobs_details.php new file mode 100644 index 0000000..102c74d --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_jobs_details.php @@ -0,0 +1,379 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2007-01-01, Bj�rn Behrens (HerrB) + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.newsletter_jobs_details.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +// Initialization +$oPage = new cPage; + +if ($action == "news_job_run" && $perm->have_perm_area_action($area, $action) && is_numeric($_REQUEST["idnewsjob"])) { + // Run job + $oJob = new cNewsletterJob($_REQUEST["idnewsjob"]); + $iSendCount = $oJob->runJob(); + + if ($oJob->get("dispatch") == 1 && $oJob->get("sendcount") < $oJob->get("rcpcount")) { + // Send in chunks + $sPathNext = $sess->url("main.php?area=$area&action=news_job_run&frame=4&idnewsjob=" . $_REQUEST["idnewsjob"]); + + // Calculating some statistics + $iChunk = ceil($oJob->get("sendcount") / $oJob->get("dispatch_count")); + $iChunks = ceil($oJob->get("rcpcount") / $oJob->get("dispatch_count")); + + // Dispatch count > send/recipient count, set values to 1, at least + if ($iChunk == 0) { + $iChunk = 1; + } + if ($iChunks == 0) { + $iChunks = 1; + } + + if ($oJob->get("dispatch_delay") == 0) { + // Send manually + $oForm = new UI_Table_Form("properties", $sPathNext); + $oForm->addHeader(i18n("Report:", "cl_newsletter")); + $oForm->add("", ""); + + $oForm->add("", sprintf(i18n("Sending newsletter ... (chunk %s of %s, recipients: %s, sent: %s)", "cl_newsletter"), $iChunk, $iChunks, $oJob->get("rcpcount"), $oJob->get("sendcount"))); + + $oForm->setActionButton("cancel", $cfg['path']['contenido_fullhtml'] . "images/but_cancel.gif", i18n("Stop sending", "cl_newsletter"), "c"); + $oForm->setActionButton("submit", $cfg['path']['contenido_fullhtml'] . "images/but_ok.gif", i18n("Send next chunk", "cl_newsletter"), "s", "news_job_run"); + } else { + // Send automatically + $oForm = new UI_Table_Form("properties"); + $oForm->addHeader(i18n("Report:", "cl_newsletter")); + $oForm->add("", ""); + + $oForm->add("", sprintf(i18n("Sending newsletter ... (chunk %s of %s, recipients: %s, sent: %s)", "cl_newsletter"), $iChunk, $iChunks, $oJob->get("rcpcount"), $oJob->get("sendcount"))); + + $oPage->addScript("Refresh", ''); + $oForm->unsetActionButton("submit"); + $oForm->setActionButton("cancel", $cfg['path']['contenido_fullhtml'] . "images/but_cancel.gif", i18n("Stop sending", "cl_newsletter"), "c"); + } + } else { + // All newsletters should have been sent + $oForm = new UI_Table_Form("properties"); + $oForm->addHeader(i18n("Report:", "cl_newsletter")); + $oForm->add("", ""); + + $oForm->add("", sprintf(i18n("The newsletter has been sent to %s recipients", "cl_newsletter"), $oJob->get("sendcount"))); + $oPage->setReload(); + } + + $oPage->setContent($notis . $oForm->render(true)); +} else if ($action == "news_job_delete" && $perm->have_perm_area_action($area, $action) && is_numeric($_REQUEST["idnewsjob"])) { + $oJobs = new cNewsletterJobCollection; + $oJobs->delete($_REQUEST["idnewsjob"]); + + $oPage->setSubnav("blank", "news_jobs"); + $oPage->setReload(); + $oPage->setContent($notis); +} else if ($action == "news_job_details" || $action == "news_job_detail_delete") { + // Show job details (recipients) + + $oLogs = new cNewsletterLogCollection; + + // Remove recipient from a job + if ($action == "news_job_detail_delete" && is_numeric($_REQUEST["idnewslog"]) && $perm->have_perm_area_action($area, "news_job_detail_delete")) { + $oLogs->delete($_REQUEST["idnewslog"]); + } + + // Initialize + $iNextPage = Contenido_Security::toInteger($_GET['nextpage']); + if ($iNextPage <= 0) { + $iNextPage = 1; + } + + if ($_REQUEST["sortmode"] !== "DESC") { + $_REQUEST["sortmode"] = "ASC"; + } + + $sDateFormat = getEffectiveSetting("backend", "timeformat", "d.m.Y H:i"); + + // Set default values + $oUser = new cApiUser($auth->auth["uid"]); + if (!isset($_REQUEST["elemperpage"]) || !is_numeric($_REQUEST["elemperpage"]) || $_REQUEST["elemperpage"] < 0) { + $_REQUEST["elemperpage"] = $oUser->getProperty("itemsperpage", $area . "_job_details"); + } + if (!is_numeric($_REQUEST["elemperpage"])) { + $_REQUEST["elemperpage"] = 50; + } + if ($_REQUEST["elemperpage"] > 0) { + // - All - will not be saved + $oUser->setProperty("itemsperpage", $area . "_job_details", $_REQUEST["elemperpage"]); + } + + $oFrmOptions = new UI_Table_Form("frmOptions"); + $oFrmOptions->setVar("contenido", $sess->id); + $oFrmOptions->setVar("area", $area); + $oFrmOptions->setVar("action", $action); + $oFrmOptions->setVar("frame", $frame); + $oFrmOptions->setVar("sortmode", $_REQUEST["sortmode"]); + $oFrmOptions->setVar("sortby", $_REQUEST["sortby"]); + $oFrmOptions->setVar("idnewsjob", $_REQUEST["idnewsjob"]); + //$oFrmOptions->setVar("startpage", $startpage); + //$oFrmOptions->setVar("appendparameters", $appendparameters); + $oFrmOptions->addHeader(i18n("List options", "cl_newsletter")); + + $oSelElements = new cHTMLSelectElement("elemperpage"); + $oSelElements->setEvent("onchange", "document.forms.frmOptions.submit();"); + + $aData = Array("0" => i18n("-All-", "cl_newsletter"), + "50" => "50", + "100" => "100", + "250" => "250", + "500" => "500"); + + foreach ($aData as $sKey => $sValue) { + $oOption = new cHTMLOptionElement($sValue, $sKey); + $oSelElements->addOptionElement($sKey, $oOption); + } + + $oSelElements->setDefault($_REQUEST["elemperpage"]); + + //$oSelElements->setStyle('border:1px;border-style:solid;border-color:black;'); + $oFrmOptions->add(i18n("Items per page:", "cl_newsletter"), $oSelElements->render()); + + // Ouput data + $oList = new cScrollList(true, "news_job_details"); + $oList->setCustom("idnewsjob", $_REQUEST["idnewsjob"]); + $oList->setCustom("nextpage", $iNextPage); + $oList->setCustom("elemperpage", $_REQUEST["elemperpage"]); + + $aCols = array("rcpname", "rcpemail", "", "status", "sent"); + $oList->setHeader(i18n("Recipient", "cl_newsletter"), i18n("E-Mail", "cl_newsletter"), i18n("Type", "cl_newsletter"), i18n("Status", "cl_newsletter"), i18n("Sent", "cl_newsletter"), i18n("Actions", "cl_newsletter")); + $oList->setSortable(0, true); + $oList->setSortable(1, true); + $oList->setSortable(2, false); + $oList->setSortable(3, true); + $oList->setSortable(4, true); + + // Get data + $oLogs->resetQuery(); + $oLogs->setWhere("idnewsjob", $_REQUEST["idnewsjob"]); + + $sBrowseLinks = "1"; + if ($_REQUEST["elemperpage"] > 0) { + // First, get total data count + $oLogs->query(); + $iRecipients = $oLogs->count(); // Getting item count without limit (for page function) - better idea anybody (performance)? + + if ($iRecipients > 0 && $iRecipients > $_REQUEST["elemperpage"]) { + $sBrowseLinks = ""; + for ($i = 1; $i <= ceil($iRecipients / $_REQUEST["elemperpage"]); $i++) { + //$iNext = (($i - 1) * $_REQUEST["elemperpage"]) + 1; + if ($sBrowseLinks !== "") { + $sBrowseLinks .= " "; + } + if ($iNextPage == $i) { + $sBrowseLinks .= $i . "\n"; // I'm on the current page, no link + } else { + $sBrowseLinks .= '' . $i . '' . "\n"; + } + } + } + + $oLogs->setLimit($_REQUEST["elemperpage"] * ($iNextPage - 1), $_REQUEST["elemperpage"]); + } + + if (!array_key_exists($_REQUEST["sortby"], $aCols)) { + $_REQUEST["sortby"] = 0; // Sort by rcpname by default + } + $oLogs->setOrder($aCols[$_REQUEST["sortby"]] . " " . $_REQUEST["sortmode"]); + $oLogs->query(); + + $oImgDelete = new cHTMLImage("images/delete.gif"); + $oImgDelete->setAlt(i18n("Delete item", "cl_newsletter")); + $sImgDelete = $oImgDelete->render(); + unset($oImgDelete); + + $iCount = 0; + $aNewsType[] = array(); // Performance + $aNewsType[0] = i18n("Text only", "cl_newsletter"); + $aNewsType[1] = i18n("HTML/Text", "cl_newsletter"); + while ($oLog = $oLogs->next()) { + $sName = $oLog->get("rcpname"); + $sEMail = $oLog->get("rcpemail"); + + switch ($oLog->get("status")) { + case "pending": + $sStatus = i18n("Waiting for sending", "cl_newsletter"); + break; + case "sending": + $sStatus = i18n("Sending", "cl_newsletter"); + break; + case "successful": + $sStatus = i18n("Successful", "cl_newsletter"); + break; + default: + $sStatus = sprintf(i18n("Error: %s", "cl_newsletter"), $oLog->get("status")); + } + + if ($oLog->get("sent") == "0000-00-00 00:00:00") { + $sSent = "-"; + } else { + $sSent = date($sDateFormat, strtotime($oLog->get("sent"))); + } + + $sLnkRemove = ""; + if ($oLog->get("status") == "pending" && $perm->have_perm_area_action($area, "news_job_detail_delete")) { + $oLnkRemove = new cHTMLLink; + $oLnkRemove->setCLink("news_jobs", 4, "news_job_detail_delete"); + $oLnkRemove->setCustom("idnewsjob", $_REQUEST["idnewsjob"]); + $oLnkRemove->setCustom("idnewslog", $oLog->get($oLog->primaryKey)); + $oLnkRemove->setCustom("sortby", $_REQUEST["sortby"]); + $oLnkRemove->setCustom("sortmode", $_REQUEST["sortmode"]); + $oLnkRemove->setContent($sImgDelete); + + $sLnkRemove = $oLnkRemove->render(); + } + + $oList->setData($iCount, $sName, $sEMail, $aNewsType[$oLog->get("rcpnewstype")], $sStatus, $sSent, $sLnkRemove); + + $iCount++; + } + + // A little bit senseless, as the data is already sorted, but + // we need the sortmode in the header link + $oList->sort($_REQUEST["sortby"], $_REQUEST["sortmode"]); + + // HerrB: Hardcore UI for browsing elements ... sorry + $sBrowseHTML = ' + + + + + + +
    ' . + sprintf(i18n("Go to page: %s", "cl_newsletter"), $sBrowseLinks) . '
    '; + + $oPage->setContent($oFrmOptions->render() . "
    " . $oList->render() . $sBrowseHTML); +} else { + // Just show the job data + $oJob = new cNewsletterJob($_REQUEST["idnewsjob"]); + + $oForm = new UI_Table_Form("properties"); + $oForm->setVar("frame", $frame); + $oForm->setVar("area", $area); + $oForm->setVar("action", ""); + $oForm->setVar("idnewsjob", $idnewsjob); + + $oForm->addHeader(i18n("Newsletter Dispatch Job", "cl_newsletter")); + + $oForm->add(i18n("Name", "cl_newsletter"), $oJob->get("name")); + + $sDateFormat = getEffectiveSetting("backend", "timeformat", "d.m.Y H:i"); + switch ($oJob->get("status")) { + case 1: + $oForm->add(i18n("Status", "cl_newsletter"), i18n("Pending", "cl_newsletter")); + break; + case 2: + $oForm->add(i18n("Status", "cl_newsletter"), sprintf(i18n("Sending (started: %s)", "cl_newsletter"), date($sDateFormat, strtotime($oJob->get("started"))))); + break; + case 9: + $oForm->add(i18n("Status", "cl_newsletter"), sprintf(i18n("Finished (started: %s, finished: %s)", "cl_newsletter"), date($sDateFormat, strtotime($oJob->get("started"))), date($sDateFormat, strtotime($oJob->get("finished"))))); + break; + } + + $oForm->add(i18n("Statistics", "cl_newsletter"), sprintf(i18n("Planned: %s, Send: %s", "cl_newsletter"), $oJob->get("rcpcount"), $oJob->get("sendcount"))); + $oForm->add(i18n("From", "cl_newsletter"), $oJob->get("newsfrom") . " (" . $oJob->get("newsfromname") . ")"); + $oForm->add(i18n("Subject", "cl_newsletter"), $oJob->get("subject")); + + if ($oJob->get("type") == "html") { + $oForm->add(i18n("Type", "cl_newsletter"), i18n("HTML and text", "cl_newsletter")); + + $txtMessageHTML = new cHTMLTextarea("txtMessageHTML", $oJob->get("message_html"), 80, 20); + $txtMessageHTML->setDisabled("disabled"); + + $oForm->add(i18n("HTML Message", "cl_newsletter"), $txtMessageHTML->render()); + } else { + $oForm->add(i18n("Type", "cl_newsletter"), i18n("Text only", "cl_newsletter")); + } + $txtMessageText = new cHTMLTextarea("txtMessageText", $oJob->get("message_text"), 80, 20); + $txtMessageText->setDisabled("disabled"); + + $oForm->add(i18n("Text Message", "cl_newsletter"), $txtMessageText->render()); + + $aSendTo = unserialize($oJob->get("send_to")); + switch ($aSendTo[0]) { + case "all": + $sSendToInfo = i18n("Send newsletter to all recipients", "cl_newsletter"); + break; + case "default": + $sSendToInfo = i18n("Send newsletter to the members of the default group", "cl_newsletter"); + break; + case "selection": + $sSendToInfo = i18n("Send newsletter to the members of the selected group(s):", "cl_newsletter"); + + unset($aSendTo[0]); + foreach ($aSendTo as $sGroup) { + $sSendToInfo .= "
    " . $sGroup; + } + break; + case "single": + $sSendToInfo = i18n("Send newsletter to single recipient:", "cl_newsletter"); + $sSendToInfo .= "
    " . $aSendTo[1] . " (" . $aSendTo[2] . ")"; + break; + default: + } + unset($aSendTo); + + $oForm->add(i18n("Recipients", "cl_newsletter"), $sSendToInfo); + + if ($oJob->get("use_cronjob") == 1) { + $sOptionsInfo = i18n("Use cronjob: Enabled", "cl_newsletter"); + } else { + $sOptionsInfo = i18n("Use cronjob: Not enabled", "cl_newsletter"); + } + + if ($oJob->get("dispatch")) { + $sOptionsInfo .= "
    " . sprintf(i18n("Dispatch: Enabled (block size: %s, delay: %s sec.)", "cl_newsletter"), $oJob->get("dispatch_count"), $oJob->get("dispatch_delay")); + } else { + $sOptionsInfo .= "
    " . i18n("Dispatch: Disabled", "cl_newsletter"); + } + + $oForm->add(i18n("Options", "cl_newsletter"), $sOptionsInfo); + + $oForm->add(i18n("Author", "cl_newsletter"), $oJob->get("authorname")); + $oForm->add(i18n("Created", "cl_newsletter"), $oJob->get("created")); + + // Just remove the "save changes" message (as it is not possible to remove the image completely in ui_table_form) + $oForm->setActionButton("submit", $cfg['path']['contenido_fullhtml'] . "images/but_ok.gif", "", "s"); + + $oPage->setContent($oForm->render(true)); +} + +$oPage->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_jobs_menu.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_jobs_menu.php new file mode 100644 index 0000000..6f38761 --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_jobs_menu.php @@ -0,0 +1,344 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2007-01-01, Bj�rn Behrens (HerrB) + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.newsletter_jobs_menu.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +################################## +# Initialization +################################## +$oPage = new cPage; +$oMenu = new UI_Menu; +$oJobs = new cNewsletterJobCollection; +$oUser = new cApiUser($auth->auth["uid"]); + +// Specify fields for search, sort and validation. Design makes enhancements +// using plugins possible (currently not implemented). If you are changing things here, +// remember to update include.newsletter_left_top.php, also. +// field: Field name in the db +// caption: Shown field name (-> user) +// base: Elements from core code (other type may be: "plugin") +// sort: Element can be used to be sorted by +// search: Element can be used to search in +$aFields = array(); +$aFields["name"] = array("field" => "name", "caption" => i18n("Name", "cl_newsletter"), "type" => "base,sort,search"); +$aFields["created"] = array("field" => "created", "caption" => i18n("Created", "cl_newsletter"), "type" => "base,sort"); +$aFields["status"] = array("field" => "status", "caption" => i18n("Status", "cl_newsletter"), "type" => "base,sort"); +// Not needed, as no sort/search, but keep as memo: $aFields["cronjob"] = array("field" => "use_cronjob", "caption" => i18n("Use cronjob"), "type" => "base"); + +################################## +# Check external input +################################## +// Items per page (value stored per area in user property) +if (!isset($_REQUEST["elemperpage"]) || !is_numeric($_REQUEST["elemperpage"]) || $_REQUEST["elemperpage"] < 0) { + $_REQUEST["elemperpage"] = $oUser->getProperty("itemsperpage", $area); +} +if (!is_numeric($_REQUEST["elemperpage"])) { + // This is the case, if the user property has never been set (first time user) + $_REQUEST["elemperpage"] = 25; +} +if ($_REQUEST["elemperpage"] > 0) { + // -- All -- will not be stored, as it may be impossible to change this back to something more useful + $oUser->setProperty("itemsperpage", $area, $_REQUEST["elemperpage"]); +} +unset ($oUser); + +$_REQUEST["page"] = (int)$_REQUEST["page"]; +if ($_REQUEST["page"] <= 0 || $_REQUEST["elemperpage"] == 0) { + $_REQUEST["page"] = 1; +} +// Sort order +if ($_REQUEST["sortorder"] != "ASC") { + $_REQUEST["sortorder"] = "DESC"; // Note, default is DESC (as default sortby is "created" date) +} + +// Check sort by and search in criteria +$bSortByFound = false; +$bSearchInFound = false; +foreach ($aFields as $sKey => $aData) +{ + if ($aData["field"] == $_REQUEST["sortby"] && strpos($aData["type"], "sort") !== false) { + $bSortByFound = true; + } + if ($aData["field"] == $_REQUEST["searchin"] && strpos($aData["type"], "search") !== false) { + $bSearchInFound = true; + } +} + +if (!$bSortByFound) { + $_REQUEST["sortby"] = "created"; // Default sort by field, possible values see above +} +if (!$bSearchInFound) { + $_REQUEST["searchin"] = "--all--"; +} + +// Author +if ($_REQUEST["selAuthor"] == "") { + $_REQUEST["selAuthor"] = $auth->auth["uid"]; +} + +// Free memory +unset($oUser); + +################################## +# Get data +################################## + +$oJobs->setWhere("idclient", $client); +$oJobs->setWhere("idlang", $lang); +$oJobs->setWhere("author", $_REQUEST["selAuthor"]); + +if ($_REQUEST["filter"] != "") +{ + if ($_REQUEST["searchin"] == "--all--" || $_REQUEST["searchin"] == "") + { + foreach ($aFields as $sKey => $aData) + { + if (strpos($aData["type"], "search") !== false) { + $oJobs->setWhereGroup("filter", $aData["field"], $_REQUEST["filter"], "LIKE"); + } + } + $oJobs->setInnerGroupCondition("filter", "OR"); + } else { + $oJobs->setWhere($_REQUEST["searchin"], $_REQUEST["filter"], "LIKE"); + } +} + +if ($_REQUEST["elemperpage"] > 0) +{ + $oJobs->query(); + + // Getting item count without limit (for page function) - better idea anyone (performance)? + $iItemCount = $oJobs->count(); + + if ($_REQUEST["elemperpage"]*($_REQUEST["page"]) >= $iItemCount+$_REQUEST["elemperpage"] && $_REQUEST["page"] != 1) { + $_REQUEST["page"]--; + } + $oJobs->setLimit($_REQUEST["elemperpage"] * ($_REQUEST["page"] - 1), $_REQUEST["elemperpage"]); +} else { + $iItemCount = 0; +} + +$oJobs->setOrder($_REQUEST["sortby"] . " " . $_REQUEST["sortorder"]); +$oJobs->query(); + +// Output data +$oMenu = new UI_Menu; +$iMenu = 0; +$sDateFormat = getEffectiveSetting("backend", "timeformat", "d.m.Y H:i"); + +// Store messages for repeated use (speeds performance, as i18n translation is only needed once) +$aMsg = array(); +$aMsg["DelTitle"] = i18n("Delete dispatch job", "cl_newsletter"); +$aMsg["DelDescr"] = i18n("Do you really want to delete the following newsletter dispatch job:
    ", "cl_newsletter"); + +$aMsg["SendTitle"] = i18n("Run job", "cl_newsletter"); +$aMsg["SendDescr"] = i18n("Do you really want to run the following job:
    ", "cl_newsletter"); + +// Prepare "send link" template +$sTplSend = ''.$aMsg['; + +while ($oJob = $oJobs->next()) +{ + $iMenu++; + $iID = $oJob->get("idnewsjob"); + $sName = $oJob->get("name") . " (" . date($sDateFormat, strtotime($oJob->get("created"))) .")"; + + $oLnk = new cHTMLLink; + $oLnk->setMultiLink($area, "", $area, ""); + $oLnk->setCustom("idnewsjob", $iID); + + // Is at present redundant + // HerrB: No, it's just not used/set... + //$oMenu->setImage($iMenu, "images/newsletter_16.gif"); + $oMenu->setTitle($iMenu, $sName); + + switch ($oJob->get("status")) + { + case 1: + // Pending + if ($oJob->get("cronjob") == 0) + { + // Standard job can be run if user has the right to do so + if ($perm->have_perm_area_action($area, "news_job_run")) + { + $sLnkSend = str_replace('{ID}', $iID, $sTplSend); + $sLnkSend = str_replace('{NAME}', addslashes($sName), $sLnkSend); + + $oMenu->setActions($iMenu, 'send', $sLnkSend); + } + } else if ($oJob->get("cronjob") == 1) { + // It's a cronjob job - no manual sending, show it blue + $oLnk->updateAttributes(array("style" => "color:#0000FF")); + } + + if ($perm->have_perm_area_action($area, "news_job_delete")) { + // Job may be deleted, if user has the right to do so + $oMenu->setActions($iMenu, 'delete', ''.$aMsg['); + } + break; + case 2: + // Sending job + if ($perm->have_perm_area_action($area, "news_job_run")) + { + // User may try to start sending, again - if he has the right to do so + $sLnkSend = str_replace('{ID}', $iID, $sTplSend); + $sLnkSend = str_replace('{NAME}', addslashes($sName), $sLnkSend); + + $oMenu->setActions($iMenu, 'send', $sLnkSend); + } + + $oLnk->updateAttributes(array("style" => "color:#da8a00")); + + $sDelete = ''.$aMsg['; + break; + case 9: + // Job finished, don't do anything + $oLnk->updateAttributes(array("style" => "color:#808080")); + + if ($perm->have_perm_area_action($area, "news_job_delete")) { + // You have the right, but you can't delete the job after sending + $oMenu->setActions($iMenu, 'delete', ''.$aMsg['); + } + break; + } + + $oMenu->setLink($iMenu, $oLnk); +} + +$sExecScript = ' + '; + +$oPage->setMargin(0); +// Messagebox JS has to be included before ExecScript! +$oPage->addScript('messagebox', ''); +$oPage->addScript('exec', $sExecScript); +$oPage->addScript('parameterCollector.js', ''); + +//generate current content for Object Pager +$sPagerId = '0ed6d632-6adf-4f09-a0c6-1e38ab60e303'; +$oPagerLink = new cHTMLLink; +$oPagerLink->setLink("main.php"); +$oPagerLink->setTargetFrame('left_bottom'); +$oPagerLink->setCustom("selAuthor", $_REQUEST["selAuthor"]); +$oPagerLink->setCustom("elemperpage", $_REQUEST["elemperpage"]); +$oPagerLink->setCustom("filter", $_REQUEST["filter"]); +$oPagerLink->setCustom("restrictgroup", $_REQUEST["restrictgroup"]); +$oPagerLink->setCustom("sortby", $_REQUEST["sortby"]); +$oPagerLink->setCustom("sortorder", $_REQUEST["sortorder"]); +$oPagerLink->setCustom("searchin", $_REQUEST["searchin"]); +$oPagerLink->setCustom("frame", $frame); +$oPagerLink->setCustom("area", $area); +$oPagerLink->enableAutomaticParameterAppend(); +$oPagerLink->setCustom("contenido", $sess->id); +// Note, that after the "page" parameter no "pagerlink" parameter is specified - +// it is not used, as the JS below only uses the INNER html and the "pagerlink" parameter is +// set by ...left_top.html for the foldingrow itself +$oPager = new cObjectPager($sPagerId, $iItemCount, $_REQUEST["elemperpage"], $_REQUEST["page"], $oPagerLink, "page"); + +// Add slashes, to insert in javascript +$sPagerContent = $oPager->render(1); +$sPagerContent = str_replace('\\', '\\\\', $sPagerContent); +$sPagerContent = str_replace('\'', '\\\'', $sPagerContent); + +// Send new object pager to left_top +$oPage->addScript('setpager', ''); + +$sRefreshPager = ' + '; + +$oPage->addScript('refreshpager', $sRefreshPager); + +//$oPage->setContent(array('', $oListOptionRow, '
    ', $oMenu->render(false))); +$oPage->setContent($oMenu->render(false)); +$oPage->render(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_jobs_subnav.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_jobs_subnav.php new file mode 100644 index 0000000..b652da1 --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_jobs_subnav.php @@ -0,0 +1,67 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2007-01-01, Bj�rn Behrens (HerrB) + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.newsletter_jobs_subnav.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if (isset($_GET['idnewsjob']) && (int)$_GET['idnewsjob'] > 0) +{ + $sCaption = i18n("View", "cl_newsletter"); + $tmp_area = "foo2"; + + # Set template data + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", ''.$sCaption.''); + $tpl->next(); + + $sCaption = i18n("Details", "cl_newsletter"); + $tmp_area = "foo2"; + + # Set template data + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", ''.$sCaption.''); + $tpl->next(); + + $tpl->set('s', 'COLSPAN', ($tpl->dyn_cnt * 2) + 2); + + # Generate the third navigation layer + $tpl->generate($cfg["path"]["templates"] . $cfg["templates"]["subnav"]); +} else { + include ($cfg["path"]["contenido"].$cfg["path"]["templates"] . $cfg["templates"]["right_top_blank"]); +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_left_top.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_left_top.php new file mode 100644 index 0000000..aa52978 --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_left_top.php @@ -0,0 +1,960 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2007-01-01, Bj�rn Behrens (HerrB) + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2008-08-03, Bj�rn Behrens (HerrB), complete makeover to fix bugs and reduce memory waste + * + * $Id: include.newsletter_left_top.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +###################################### +# Initialization +###################################### +if (!is_object($oTpl)) { + $oTpl = new Template; +} +if (!is_object($oDB)) { + $oDB = new DB_ConLite; // We have really to send a special SQL statement - we need a DB object +} + +$oUser = new cApiUser($auth->auth["uid"]); +$oClient = new cApiClient($client); +$oClientLang = new cApiClientLanguage(false, $client, $lang); + +###################################### +# 0. BUTTONS +###################################### +// Newsletter +$sId = 'img_newsletter'; +$oTpl->set('s', 'INEWSLETTER', $sId); +if ($perm->have_perm_area_action('news')) { + $sButtonRow = ''; + $sButtonRow .= ''. i18n('; + $sButtonRow .= ''; +} + +// Job dispatch +$sId = 'img_dispatch'; +$oTpl->set('s', 'IDISPATCH', $sId); +if ($perm->have_perm_area_action('news_jobs')) { + $sButtonRow .= ''; + $sButtonRow .= ''.i18n('; + $sButtonRow .= ''; +} + +// Recipients +$sId = 'img_recipient'; +$oTpl->set('s', 'IRECIPIENTS', $sId); +if ($perm->have_perm_area_action('recipients')) { + $sButtonRow .= ''; + $sButtonRow .= ''.i18n('; + $sButtonRow .= ''; +} + +// Recipient groups +$sId = 'img_recipientgroup'; +$oTpl->set('s', 'IRECIPIENTGROUP', $sId); +if ($perm->have_perm_area_action('recipientgroups')) { + $sButtonRow .= ''; + $sButtonRow .= ''.i18n('; + $sButtonRow .= ''; +} + +$oTpl->set('s', 'BUTTONROW', $sButtonRow); +unset($sButtonRow); + +###################################### +# 1. NEWSLETTER +###################################### + +###################################### +# 1.1 Newsletter: Actions folding row +###################################### +$sLink = "actionlink"; // ID for HTML element +$oActionsRow = new cFoldingRow("28cf9b31-e6d7-4657-a9a7-db31478e7a5c",i18n("Actions", "cl_newsletter"), $sLink); +$oTpl->set('s', 'ACTIONLINK', $sLink); + +if ($perm->have_perm_area_action("news", "news_create")) +{ + // Create the link to add a newsletter + $sContent = '
    '."\n"; + + $oLink = new cHTMLLink; + $oLink->setMultiLink("news", "", "news", "news_create"); + $oLink->setContent(''.i18n("Create newsletter", "cl_newsletter")); + + $sContent .= $oLink->render() . '
    '."\n"; + $oActionsRow->setContentData($sContent); +} else { + $oActionsRow->setContentData(""); +} + +###################################### +# 1.2 Newsletter: Settings folding row +###################################### +$sLink = "settingslink"; +$oSettingsRow = new cFoldingRow("d64baf0a-aea9-47b3-8490-54a00fce02b5",i18n("Settings", "cl_newsletter"), $sLink); +$oTpl->set('s', 'SETTINGSLINK', $sLink); + +// HTML Newsletter: Template and newsletter category +// Note, that in PHP 5 it is not possible to have a truely working copy of an object +// so, we are filling two almost identical objects with the same data ("clone" may work, but is not available in PHP4 ...) +$oSelHTMLTemplateIDCat = new cHTMLSelectElement("selHTMLTemplateCat"); +$oSelHTMLTemplateIDCat->setStyle("width: 220px;"); + +$oSelHTMLNewsletterIDCat = new cHTMLSelectElement("selHTMLNewsletterCat"); +$oSelHTMLNewsletterIDCat->setStyle("width: 220px;"); + +$oOptionTemplate = new cHTMLOptionElement("--".i18n("Please select", "cl_newsletter")."--", 0); +$oSelHTMLTemplateIDCat->addOptionElement(0, $oOptionTemplate); +$oOptionNewsletter = new cHTMLOptionElement("--".i18n("Please select", "cl_newsletter")."--", 0); +$oSelHTMLNewsletterIDCat->addOptionElement(0, $oOptionNewsletter); + +$sSQL = "SELECT tblCat.idcat AS idcat, tblCatLang.name AS name, tblCatTree.level AS level, "; +$sSQL .= "tblCatLang.visible AS visible, tblCatLang.public AS public FROM "; +$sSQL .= $cfg["tab"]["cat"]." AS tblCat, ".$cfg["tab"]["cat_lang"]." AS tblCatLang, "; +$sSQL .= $cfg["tab"]["cat_tree"]." AS tblCatTree "; +$sSQL .= "WHERE tblCat.idclient = '".Contenido_Security::toInteger($client)."' AND tblCatLang.idlang = '".Contenido_Security::toInteger($lang)."' AND "; +$sSQL .= "tblCatLang.idcat = tblCat.idcat AND tblCatTree.idcat = tblCat.idcat "; +$sSQL .= "ORDER BY tblCatTree.idtree"; + +$oDB->query($sSQL); + +while ($oDB->next_record()) { + $sSpaces = "  "; + + for ($i = 0; $i < $oDB->f("level"); $i ++) { + $sSpaces .= "     "; + } + + $oOptionTemplate = new cHTMLOptionElement($sSpaces.$oDB->f("name"), $oDB->f("idcat")); + $oOptionNewsletter = new cHTMLOptionElement($sSpaces.$oDB->f("name"), $oDB->f("idcat")); + if ($oDB->f("visible") == 0 || $oDB->f("public") == 0) { + $oOptionTemplate->setStyle("color: #666666;"); + $oOptionNewsletter->setStyle("color: #666666;"); + } + + $oSelHTMLTemplateIDCat->addOptionElement($oDB->f("idcat"), $oOptionTemplate); + $oSelHTMLNewsletterIDCat->addOptionElement($oDB->f("idcat"), $oOptionNewsletter); +} + +// Get html template category +$iHTMLTemplateIDCat = (int)$oClientLang->getProperty("newsletter", "html_template_idcat"); +if ($iHTMLTemplateIDCat < 0) { + $iHTMLTemplateIDCat = 0; +} +$oSelHTMLTemplateIDCat->setDefault($iHTMLTemplateIDCat); + +// Get html newsletter article category +$iHTMLNewsletterIDCat = (int)$oClientLang->getProperty("newsletter", "html_newsletter_idcat"); +if ($iHTMLNewsletterIDCat < 0) { + $iHTMLNewsletterIDCat = 0; +} +$oSelHTMLNewsletterIDCat->setDefault($iHTMLNewsletterIDCat); + +// Global HTML newsletter option +$bHTMLNewsletter = false; +if ($iHTMLTemplateIDCat > 0 && $iHTMLNewsletterIDCat > 0 && $oClientLang->getProperty("newsletter", "html_newsletter") == "true") { + // If necessary idcats are not specified or the option is disabled, + // then HTML are not used + $bHTMLNewsletter = true; +} +$oCkbHTMLNewsletter = new cHTMLCheckbox("ckbHTMLNewsletter", "enabled", "", $bHTMLNewsletter); + +// Disable HTML options, if user has no rights +if (!$perm->have_perm_area_action($area, "news_html_settings")) +{ + $oSelHTMLTemplateIDCat->setDisabled("disabled"); + $oSelHTMLNewsletterIDCat->setDisabled("disabled"); + $oCkbHTMLNewsletter->setDisabled("disabled"); +} + +// Destination for sending test newsletter +$oSelTestDestination = new cHTMLSelectElement("selTestDestination"); +$oSelTestDestination->setStyle("width: 220px;"); + +$oOption = new cHTMLOptionElement(i18n("My mail address", "cl_newsletter"), 0); +$oSelTestDestination->addOptionElement(0, $oOption); + +$oRcpGroups = new RecipientGroupCollection; +$oRcpGroups->setWhere("idclient", (int)$client); +$oRcpGroups->setWhere("idlang", (int)$lang); +$oRcpGroups->setOrder("groupname"); +$oRcpGroups->query(); + +$bTestTargetFound = false; +// Get client and language specific test destination. As lang is client specific, lang is sufficient +$iTestDestination = (int)$oUser->getProperty("newsletter", "test_idnewsgrp_lang" . $lang); +while ($oRcpGroup = $oRcpGroups->next()) +{ + $iID = $oRcpGroup->get($oRcpGroup->primaryKey); + + if ($iTestDestination == $iID) { + $bTestTargetFound = true; + } + + $oOption = new cHTMLOptionElement($oRcpGroup->get("groupname"), $iID); + $oSelTestDestination->addOptionElement($iID, $oOption); +} +unset($oRcpGroups); + +if (!$bTestTargetFound) { + // Currently specified test target doesn't exist anymore, get back to "my mail" + $iTestDestination = 0; +} +if (!$perm->have_perm_area_action($area, "news_send_test")) +{ + // No right to send somewhere else than to yourself + $iTestDestination = 0; + $oSelTestDestination->setDisabled("disabled"); +} +$oSelTestDestination->setDefault($iTestDestination); + +$oBtnSave = new cHTMLButton("submit", i18n("Save", "cl_newsletter")); + +$sContent = '
    '."\n"; +$sContent .= '
    '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= '
    '.$oCkbHTMLNewsletter->toHTML(false).' '.i18n("Enable HTML Newsletter", "cl_newsletter").'
    '.i18n("HTML Template Category:", "cl_newsletter").'
    '.$oSelHTMLTemplateIDCat->render().'
    '.i18n("HTML Newsletter Category:", "cl_newsletter").'
    '.$oSelHTMLNewsletterIDCat->render().'
    '.i18n("Send test destination:", "cl_newsletter").'
    '.$oSelTestDestination->render().'
    '.$oBtnSave->render().'
    '."\n"; +$sContent .= '
    '."\n"; +$sContent .= '
    '."\n"; +$oSettingsRow->setContentData($sContent); + +###################################### +# 1.3 Newsletter: List options folding row +###################################### +// Items per Page +$iItemsPerPage = (int)$oUser->getProperty("itemsperpage", "news"); // Also used in query below +if ($iItemsPerPage == 0) { + $iItemsPerPage = 25; // All can't be saved +} + +$oSelItemsPerPage = new cHTMLSelectElement("elemperpage"); +$oSelItemsPerPage->autoFill(array(0 => i18n("-- All --", "cl_newsletter"), 25 => 25, 50 => 50, 75 => 75, 100 => 100)); +$oSelItemsPerPage->setDefault($iItemsPerPage); +// Sort By +$oSelSortBy = new cHTMLSelectElement("sortby"); +$oOption = new cHTMLOptionElement("Name", "name"); +$oSelSortBy->addOptionElement($sKey, $oOption); +$oSelSortBy->setDefault("name"); +// Sort Order +$oSelSortOrder = new cHTMLSelectElement("sortorder"); +$oSelSortOrder->autoFill(array("ASC" => i18n("Ascending", "cl_newsletter"), "DESC" => i18n("Descending", "cl_newsletter"))); +$oSelSortOrder->setDefault("ASC"); +// Search For +$oTextboxFilter = new cHTMLTextbox("filter", "", 16); +// Search In +$oSelSearchIn = new cHTMLSelectElement("searchin"); +$oOption = new cHTMLOptionElement(i18n("-- All fields --", "cl_newsletter"), "--all--"); +$oSelSearchIn->addOptionElement("all", $oOption); +$oOption = new cHTMLOptionElement("Name", "name"); +$oSelSearchIn->addOptionElement($sKey, $oOption); +$oSelSearchIn->setDefault("name"); +// Apply button +$oBtnApply = new cHTMLButton("submit", i18n("Apply", "cl_newsletter")); + +$sContent = '
    '."\n"; +$sContent .= '
    '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= '
    '. i18n("Items / page", "cl_newsletter").''.$oSelItemsPerPage->render().'
    '. i18n("Sort by", "cl_newsletter").''.$oSelSortBy->render().'
    '. i18n("Sort order", "cl_newsletter").''.$oSelSortOrder->render().'
    '. i18n("Search for", "cl_newsletter").''.$oTextboxFilter->render().'
    '. i18n("Search in", "cl_newsletter").''.$oSelSearchIn->render().'
     '.$oBtnApply->render().'
    '."\n"; +$sContent .= '
    '."\n"; +$sContent .= '
    '."\n"; + +// To template +$sLink = "listoption"; +$oListOptionsRow = new cFoldingRow("9d0968be-601d-44f8-a666-99d51c9c777d",i18n("List options", "cl_newsletter"), $sLink); +$oListOptionsRow->setContentData($sContent); +$oTpl->set('s', 'LISTOPTIONLINK', $sLink); + +###################################### +# 1.4 Newsletter: Paging folding row +###################################### + +// Add paging folding row (current page = 1) to get HTML paging container (later on updated by ...menu.php) +$oPagerLink = new cHTMLLink; +$oPagerLink->setLink("main.php"); +$oPagerLink->setTargetFrame("left_bottom"); +$oPagerLink->setCustom("elemperpage", $iItemsPerPage); +$oPagerLink->setCustom("filter", ""); +//$oPagerLink->setCustom("restrictgroup", $_REQUEST["restrictgroup"]); +$oPagerLink->setCustom("sortby", "name"); +$oPagerLink->setCustom("sortorder", "ASC"); +$oPagerLink->setCustom("searchin", "name"); +$oPagerLink->setCustom("frame", "2"); +$oPagerLink->setCustom("area", "news"); +$oPagerLink->enableAutomaticParameterAppend(); +$oPagerLink->setCustom("contenido", $sess->id); + +$sLink = "pagerlink"; +$oTpl->set('s', 'PAGINGLINK', $sLink); +//$oPagerRow = new cObjectPager("0ed6d632-6adf-4f09-a0c6-1e38ab60e302", $iItemCount, $iItemsPerPage, 1, $oPagerLink, 'page', $sLink); +$oPagerRow = new cObjectPager("0ed6d632-6adf-4f09-a0c6-1e38ab60e302", 0, 1, 1, $oPagerLink, 'page', $sLink); + +###################################### +# Newsletter: Container +###################################### +$sContainerId = 'cont_newsletter'; +$sContainer = '
    '; +$sContainer .= ''; +if ($perm->have_perm_area_action("news", "news_create")) { + $sContainer .= $oActionsRow->render(); +} +if ($perm->have_perm_area_action("news", "news_html_settings")) { + $sContainer .= $oSettingsRow->render(); +} +$sContainer .= $oListOptionsRow->render(); +$sContainer .= $oPagerRow->render(); +$sContainer .= '
    '; +$sContainer .= '
    '; +$oTpl->set('s', 'CNEWSLETTER', $sContainer); +$oTpl->set('s', 'ID_CNEWSLETTER', $sContainerId); + +###################################### +# 2. Job dispatch +###################################### +// Specify fields for search, sort and validation. Design makes enhancements +// using plugins possible (currently not implemented). If you are changing things here, +// remember to update include. ... menu.php, also. +// field: Field name in the db +// caption: Shown field name (-> user) +// base: Elements from core code (other type may be: "plugin") +// sort: Element can be used to be sorted by +// search: Element can be used to search in +$aFields = array(); +$aFields["name"] = array("field" => "name", "caption" => i18n("Name", "cl_newsletter"), "type" => "base,sort,search"); +$aFields["created"] = array("field" => "created", "caption" => i18n("Created", "cl_newsletter"), "type" => "base,sort"); +$aFields["status"] = array("field" => "status", "caption" => i18n("Status", "cl_newsletter"), "type" => "base,sort"); +$aFields["cronjob"] = array("field" => "use_cronjob", "caption" => i18n("Use cronjob", "cl_newsletter"), "type" => "base"); + +###################################### +# 2.1 Job dispatch: List options folding row +###################################### +// Author +$oSelAuthor = new cHTMLSelectElement("selAuthor"); + +// Get possible authors/users from available jobs +// For this query genericdb can't be used, as the class id is always included (distinct won't work) +$sSQL = "SELECT DISTINCT author, authorname FROM ".$cfg["tab"]["news_jobs"]." ORDER BY authorname"; +$oDB->query($sSQL); + +$aItems = array(); +$bUserInList = false; +while ($oDB->next_record()) +{ + if ($oDB->f("author") == $auth->auth["uid"]) { + $bUserInList = true; + } + $aItems[] = array($oDB->f("author"), urldecode($oDB->f("authorname"))); +} +$oSelAuthor->autoFill($aItems); + +if (!$bUserInList) { + // Current ser hasn't sent newsletter jobs, yet - add him to the list (it's the default author) + $oOption = new cHTMLOptionElement($auth->auth["uname"], $auth->auth["uid"]); + $oSelAuthor->addOptionElement($auth->auth["uid"], $oOption); +} +$oSelAuthor->setDefault($auth->auth["uid"]); + +// Items per page +$iItemsPerPage = (int)$oUser->getProperty("itemsperpage", "news_jobs"); // Used also below in query +if ($iItemsPerPage == 0) { + $iItemsPerPage = 25; // All can't be saved +} + +$oSelItemsPerPage = new cHTMLSelectElement("elemperpage"); +$oSelItemsPerPage->autoFill(array(0 => i18n("-- All --", "cl_newsletter"), 25 => 25, 50 => 50, 75 => 75, 100 => 100)); +$oSelItemsPerPage->setDefault($iItemsPerPage); + +// Sort by +$oSelSortBy = new cHTMLSelectElement("sortby"); +foreach ($aFields as $sKey => $aData) { + if (strpos($aData["type"], "sort") !== false) + { + $oOption = new cHTMLOptionElement($aData["caption"], $sKey); + $oSelSortBy->addOptionElement($sKey, $oOption); + } +} +$oSelSortBy->setDefault("created"); + +// Sort order +$oSelSortOrder = new cHTMLSelectElement("sortorder"); +$oSelSortOrder->autoFill(array("ASC" => i18n("Ascending", "cl_newsletter"), "DESC" => i18n("Descending", "cl_newsletter"))); +$oSelSortOrder->setDefault("DESC"); + +// Filter +$oTxtFilter = new cHTMLTextbox("filter", "", 16); + +//Search in +$oSelSearchIn = new cHTMLSelectElement("searchin"); +$oOption = new cHTMLOptionElement(i18n("-- All fields --", "cl_newsletter"), "--all--"); +$oSelSearchIn->addOptionElement("all", $oOption); + +foreach ($aFields as $sKey => $aData) +{ + if (strpos($aData["type"], "search") !== false) + { + $oOption = new cHTMLOptionElement($aData["caption"], $sKey); + $oSelSearchIn->addOptionElement($sKey, $oOption); + } +} +$oSelSearchIn->setDefault("--all--"); + +$oBtnApply = new cHTMLButton("submit", i18n("Apply", "cl_newsletter")); + +$sContent = '
    '."\n"; +$sContent .= '
    '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= '
    '. i18n("Author", "cl_newsletter").''.$oSelAuthor->render().'
    '. i18n("Items / page", "cl_newsletter").''.$oSelItemsPerPage->render().'
    '. i18n("Sort by", "cl_newsletter").''.$oSelSortBy->render().'
    '. i18n("Sort order", "cl_newsletter").''.$oSelSortOrder->render().'
    '. i18n("Search for", "cl_newsletter").''.$oTxtFilter->render().'
    '. i18n("Search in", "cl_newsletter").''.$oSelSearchIn->render().'
     '.$oBtnApply->render().'
    '."\n"; +$sContent .= '
    '."\n"; +$sContent .= '
    '."\n"; + +// To template +$sLink = "listoptiondisp"; +$oListOptionsRow = new cFoldingRow("dfa6cc00-0acf-11db-9cd8-0800200c9a66",i18n("List options", "cl_newsletter"), $sLink); +$oListOptionsRow->setContentData($sContent); +$oTpl->set('s', 'LISTOPTIONLINKDISP', $sLink); + +###################################### +# 2.2 Job dispatch: Paging folding row +###################################### +$oPagerLink = new cHTMLLink; +$oPagerLink->setLink("main.php"); +$oPagerLink->setTargetFrame('left_bottom'); +$oPagerLink->setCustom("selAuthor", $auth->auth["uid"]); +$oPagerLink->setCustom("elemperpage", $iItemsPerPage); +$oPagerLink->setCustom("filter", ""); +//$oPagerLink->setCustom("restrictgroup", $_REQUEST["restrictgroup"]); +$oPagerLink->setCustom("sortby", "created"); +$oPagerLink->setCustom("sortorder", "DESC"); +$oPagerLink->setCustom("searchin", "--all--"); +$oPagerLink->setCustom("frame", "2"); // HIER!!! Stimmt das? +$oPagerLink->setCustom("area", "news_jobs"); +$oPagerLink->enableAutomaticParameterAppend(); +$oPagerLink->setCustom("contenido", $sess->id); + +$sLink = "pagerlinkdisp"; +$oTpl->set('s', 'PAGINGLINKDISP', $sLink); +//$oPagerRow = new cObjectPager("0ed6d632-6adf-4f09-a0c6-1e38ab60e303", $iItemCount, $iItemsPerPage, 1, $oPagerLink, "page", $sLink); +$oPagerRow = new cObjectPager("0ed6d632-6adf-4f09-a0c6-1e38ab60e303", 0, 1, 1, $oPagerLink, 'page', $sLink); + +###################################### +# Job dispatch: Container +###################################### +$sContainerId = 'cont_dispatch'; +$sContainer = '
    '; +$sContainer .= ''; +$sContainer .= $oListOptionsRow->render(); +$sContainer .= $oPagerRow->render(); +$sContainer .= '
    '; +$sContainer .= '
    '; +$oTpl->set('s', 'CDISPATCH', $sContainer); +$oTpl->set('s', 'ID_CDISPATCH', $sContainerId); + +###################################### +# 3. Recipients +###################################### +// See comment at 2. Job dispatch +$aFields = array(); +$aFields["name"] = array("field" => "name", "caption" => i18n("Name", "cl_newsletter"),"type" => "base,sort,search"); +$aFields["email"] = array("field" => "email", "caption" => i18n("E-Mail", "cl_newsletter"),"type" => "base,sort,search"); +$aFields["confirmed"] = array("field" => "confirmed", "caption" => i18n("Confirmed", "cl_newsletter"), "type" => "base"); +$aFields["deactivated"] = array("field" => "deactivated", "caption" => i18n("Deactivated", "cl_newsletter"), "type" => "base"); + +###################################### +# 3.1 Recipients: Actions folding row +###################################### +$sContent = '
    '."\n"; + +// Create a link to add a recipient +if ($perm->have_perm_area_action("recipients", "recipients_create")) +{ + $oLink = new cHTMLLink; + $oLink->setMultiLink("recipients","","recipients","recipients_create"); + $oLink->setContent(''.i18n("Create recipient", "cl_newsletter").''); + + $sContent .= $oLink->render().'
    '."\n"; +} + +// Create a link to import recipients +if ($perm->have_perm_area_action("recipients", "recipients_create")) +{ + $oLink = new cHTMLLink; + $oLink->setMultiLink("recipients", "", "recipients_import", "recipients_import"); + $oLink->setContent(''.i18n("Import recipients", "cl_newsletter").''); + + $sContent .= $oLink->render().'
    '."\n"; +} + +// Create a link to purge subscribed but not confirmed recipients +$iTimeframe = (int)$oClient->getProperty("newsletter", "purgetimeframe"); +if ($iTimeframe <= 0) { + $iTimeframe = 30; +} + +if ($perm->have_perm_area_action("recipients", "recipients_delete")) +{ + $oLink = new cHTMLLink; + $oLink->setLink('javascript:showPurgeMsg("'.i18n('Purge recipients', "cl_newsletter").'", "'.sprintf(i18n("Do you really want to remove recipients, that have not been confirmed since %s days and over?", "cl_newsletter"), '"+purgetimeframe+"').'")'); + + $oLink->setContent(''.i18n("Purge recipients", "cl_newsletter").''); + + $sContent .= $oLink->render(); +} +$sContent .= '
    '."\n"; +$oTpl->set('s', 'VALUE_PURGETIMEFRAME', $iTimeframe); + +// To template +$sLink = "actionrec"; +$oListActionsRow = new cFoldingRow("f0d7bf80-e73e-11d9-8cd6-0800200c9a66", i18n("Actions", "cl_newsletter"), $sLink); +$oListActionsRow->setContentData($sContent); +$oTpl->set('s', 'ACTIONLINKREC', $sLink); + +###################################### +# 3.2 Recipients: Settings folding row +###################################### +$oTxtTimeframe = new cHTMLTextbox("txtPurgeTimeframe", $iTimeframe, 5); +$oBtnSave = new cHTMLButton("submit", i18n("Save", "cl_newsletter")); + +$sContent = '
    '."\n"; +$sContent .= '
    '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= '
    '. i18n("Purge timeframe", "cl_newsletter").':'.$oTxtTimeframe->render().' '.i18n("days", "cl_newsletter").'
     '.$oBtnSave->render().'
    '."\n"; +$sContent .= '
    '."\n"; +$sContent .= '
    '."\n"; + +// To template +$sLink = "settingsrec"; +$oSettingsRow = new cFoldingRow("5ddbe820-e6f1-11d9-8cd6-0800200c9a69",i18n("Settings", "cl_newsletter"), $sLink); +$oSettingsRow->setContentData($sContent); +$oTpl->set('s', 'SETTINGSLINKREC', $sLink); + +###################################### +# 3.3 Recipients: List options folding row +###################################### +$iItemsPerPage = (int)$oUser->getProperty("itemsperpage", "recipients"); +if ($iItemsPerPage == 0) { + $iItemsPerPage = 25; // All can't be saved +} + +$oSelItemsPerPage = new cHTMLSelectElement("elemperpage"); +$oSelItemsPerPage->autoFill(array(0 => i18n("-- All --", "cl_newsletter"), 25 => 25, 50 => 50, 75 => 75, 100 => 100)); +$oSelItemsPerPage->setDefault($iItemsPerPage); + +$oSelSortBy = new cHTMLSelectElement("sortby"); +foreach ($aFields as $sKey => $aData) +{ + if (strpos($aData["type"], "sort") !== false) { + $oOption = new cHTMLOptionElement($aData["caption"], $aData["field"]); + $oSelSortBy->addOptionElement($aData["field"], $oOption); + } +} +$oSelSortBy->setDefault("name"); + +$oSelSortOrder = new cHTMLSelectElement("sortorder"); +$oSelSortOrder->autoFill(array("ASC" => i18n("Ascending", "cl_newsletter"), "DESC" => i18n("Descending", "cl_newsletter"))); +$oSelSortOrder->setDefault("ASC"); + +$oSelRestrictGroup = new cHTMLSelectElement("restrictgroup"); +$oOption = new cHTMLOptionElement(i18n("-- All groups --", "cl_newsletter"), "--all--"); +$oSelRestrictGroup->addOptionElement("all", $oOption); + +// Fetch recipient groups +$oRGroups = new RecipientGroupCollection; +$oRGroups->setWhere("idclient", $client); +$oRGroups->setWhere("idlang", $lang); +$oRGroups->setOrder("defaultgroup DESC, groupname ASC"); +$oRGroups->query(); + +$i = 1; +while ($oRGroup = $oRGroups->next()) +{ + if ($oRGroup->get("defaultgroup") == 1) { + $sGroupname = $oRGroup->get("groupname") . "*"; + } else { + $sGroupname = $oRGroup->get("groupname"); + } + $oOption = new cHTMLOptionElement($sGroupname, $oRGroup->get("idnewsgroup")); + $oSelRestrictGroup->addOptionElement($i, $oOption); + $i++; +} + +$oSelRestrictGroup->setDefault("--all--"); + +$oTxtFilter = new cHTMLTextbox("filter", "", 16); + +$oSelSearchIn = new cHTMLSelectElement("searchin"); +$oOption = new cHTMLOptionElement(i18n("-- All fields --", "cl_newsletter"), "--all--"); +$oSelSearchIn->addOptionElement("all", $oOption); + +foreach ($aFields as $sKey => $aData) { + if (strpos($aData["type"], "search") !== false) { + $oOption = new cHTMLOptionElement($aData["caption"], $aData["field"]); + $oSelSearchIn->addOptionElement($aData["field"], $oOption); + } +} +$oSelSearchIn->setDefault("--all--"); + +$oBtnApply = new cHTMLButton("submit", i18n("Apply")); + +$sContent = '
    '."\n"; +$sContent .= '
    '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= '
    '. i18n("Items / page", "cl_newsletter").''.$oSelItemsPerPage->render().'
    '. i18n("Sort by", "cl_newsletter").''.$oSelSortBy->render().'
    '. i18n("Sort order", "cl_newsletter").''.$oSelSortOrder->render().'
    '. i18n("Show group", "cl_newsletter").''.$oSelRestrictGroup->render().'
    '. i18n("Search for", "cl_newsletter").''.$oTxtFilter->render().'
    '. i18n("Search in", "cl_newsletter").''.$oSelSearchIn->render().'
     '.$oBtnApply->render().'
    '."\n"; +$sContent .= '
    '."\n"; +$sContent .= '
    '."\n"; + +// To template +$sLink = "listoptionsrec"; +$oListOptionsRow = new cFoldingRow("5ddbe820-e6f1-11d9-8cd6-0800200c9a66",i18n("List options", "cl_newsletter"), $sLink); +$oListOptionsRow->setContentData($sContent); +$oTpl->set('s', 'LISTOPTIONLINKREC', $sLink); + +###################################### +# 3.4 Recipients: Paging +###################################### +$oPagerLink = new cHTMLLink; +$oPagerLink->setLink("main.php"); +$oPagerLink->setTargetFrame('left_bottom'); +$oPagerLink->setCustom("elemperpage", $iItemsPerPage); +$oPagerLink->setCustom("filter", ""); +$oPagerLink->setCustom("restrictgroup", "--all--"); +$oPagerLink->setCustom("sortby", "name"); +$oPagerLink->setCustom("sortorder", "ASC"); +$oPagerLink->setCustom("searchin", "--all--"); +$oPagerLink->setCustom("frame", "2"); +$oPagerLink->setCustom("area", "recipients"); +$oPagerLink->enableAutomaticParameterAppend(); +$oPagerLink->setCustom("contenido", $sess->id); + +// To template +$sLink = "pagingrec"; +$oTpl->set('s', 'PAGINGLINKREC', $sLink); +//$oPagerRow = new cObjectPager("0ed6d632-6adf-4f09-a0c6-1e38ab60e304", $iItemCount, $iItemsPerPage, 1, $oPagerLink, "page", $sLink); +$oPagerRow = new cObjectPager("0ed6d632-6adf-4f09-a0c6-1e38ab60e304", 0, 1, 1, $oPagerLink, 'page', $sLink); + +###################################### +# Recipients: Container +###################################### +$sContainerId = 'cont_recipients'; +$sContainer = '
    '; +$sContainer .= ''; +if ($perm->have_perm_area_action('recipients', "recipients_delete") || $perm->have_perm_area_action("recipients", "recipients_create")) { + $sContainer .= $oListActionsRow->render(); +} +$sContainer .= $oSettingsRow->render(); +$sContainer .= $oListOptionsRow->render(); +$sContainer .= $oPagerRow->render(); +$sContainer .= '
    '; +$sContainer .= '
    '; +$oTpl->set('s', 'CRECIPIENTS', $sContainer); +$oTpl->set('s', 'ID_CRECIPIENTS', $sContainerId); + +###################################### +# 4 Recipient groups +###################################### +// See comment at 2. Job dispatch +$aFields = array(); +$aFields["name"] = array("field" => "groupname", "caption" => i18n("Name", "cl_newsletter"), "type" => "base,sort,search"); + +###################################### +# 4.1 Recipient groups: Actions +###################################### +$sContent = '
    '."\n"; + +// Create a link to add a group +if ($perm->have_perm_area_action("recipientgroups", "recipientgroup_create")) +{ + $oLnk = new cHTMLLink; + $oLnk->setMultiLink("recipientgroups","","recipientgroups","recipientgroup_create"); + $oLnk->setContent(''.i18n("Create group", "cl_newsletter").''); + $sContent .= $oLnk->render().'
    '."\n"; +} + +$sContent .= '
    '."\n"; + +$sLink = "actiongroup"; +$oListActionsRow = new cFoldingRow("f0d7bf80-e73e-11d9-8cd6-0800200c9a67",i18n("Actions", "cl_newsletter"), $sLink); +$oListActionsRow->setContentData($sContent); +$oTpl->set('s', 'ACTIONLINKGROUP', $sLink); + +###################################### +# 4.2 Recipient groups: List Options +###################################### +$iItemsPerPage = (int)$oUser->getProperty("itemsperpage", "recipientgroups"); +if ($iItemsPerPage == 0) { + $iItemsPerPage = 25; // All can't be saved +} + +$oSelItemsPerPage = new cHTMLSelectElement("elemperpage"); +$oSelItemsPerPage->autoFill(array(0 => i18n("-- All --", "cl_newsletter"), 25 => 25, 50 => 50, 75 => 75, 100 => 100)); +$oSelItemsPerPage->setDefault($iItemsPerPage); + +$oSelSortBy = new cHTMLSelectElement("sortby"); +foreach ($aFields as $sKey => $aData) { + if (strpos($aData["type"], "sort") !== false) { + $oOption = new cHTMLOptionElement($aData["caption"], $aData["field"]); + $oSelSortBy->addOptionElement($aData["field"], $oOption); + } +} +$oSelSortBy->setDefault("name"); + +$oSelSortOrder = new cHTMLSelectElement("sortorder"); +$oSelSortOrder->autoFill(array("ASC" => i18n("Ascending", "cl_newsletter"), "DESC" => i18n("Descending", "cl_newsletter"))); +$oSelSortOrder->setDefault("ASC"); + +$oTxtFilter = new cHTMLTextbox("filter", "", 16); + +$oSelSearchIn = new cHTMLSelectElement("searchin"); +$oOption = new cHTMLOptionElement(i18n("-- All fields --", "cl_newsletter"), "--all--"); +$oSelSearchIn->addOptionElement("all", $oOption); + +foreach ($aFields as $sKey => $aData) { + if (strpos($aData["type"], "search") !== false) { + $oOption = new cHTMLOptionElement($aData["caption"], $aData["field"]); + $oSelSearchIn->addOptionElement($aData["field"], $oOption); + } +} +$oSelSearchIn->setDefault("--all--"); + +$oBtnApply = new cHTMLButton("submit", i18n("Apply", "cl_newsletter")); + +$sContent = '
    '."\n"; +$sContent .= '
    '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= ' '."\n"; +$sContent .= '
    '. i18n("Items / page", "cl_newsletter").''.$oSelItemsPerPage->render().'
    '. i18n("Sort by", "cl_newsletter").''.$oSelSortBy->render().'
    '. i18n("Sort order", "cl_newsletter").''.$oSelSortOrder->render().'
    '. i18n("Search for", "cl_newsletter").''.$oTxtFilter->render().'
    '. i18n("Search in", "cl_newsletter").''.$oSelSearchIn->render().'
     '.$oBtnApply->render().'
    '."\n"; +$sContent .= '
    '."\n"; +$sContent .= '
    '."\n"; + +// To template +$sLink = "listoptionsgroup"; +$oListOptionsRow = new cFoldingRow("79efc1fc-111d-11dc-8314-0800200c9a66",i18n("List options", "cl_newsletter"), $sLink); +$oListOptionsRow->setContentData($sContent); +$oTpl->set('s', 'LISTOPTIONLINKGROUP', $sLink); + +###################################### +# 4.3 Recipient groups: Paging +###################################### +$oPagerLink = new cHTMLLink; +$oPagerLink->setLink("main.php"); +$oPagerLink->setTargetFrame('left_bottom'); +$oPagerLink->setCustom("elemperpage", $iItemsPerPage); +$oPagerLink->setCustom("filter", ""); +$oPagerLink->setCustom("sortby", "name"); +$oPagerLink->setCustom("sortorder", "ASC"); +$oPagerLink->setCustom("searchin", "--all--"); +$oPagerLink->setCustom("frame", "2"); +$oPagerLink->setCustom("area", "recipientgroups"); +$oPagerLink->enableAutomaticParameterAppend(); +$oPagerLink->setCustom("contenido", $sess->id); + +// To template +$sLink = "paginggroup"; +$oTpl->set('s', 'PAGINGLINKGROUP', $sLink); +//$oPagerRow = new cObjectPager("0ed6d632-6adf-4f09-a0c6-1e38ab60e305", $iItemCount, $iItemsPerPage, 1, $oPagerLink, "page", $sLink); +$oPagerRow = new cObjectPager("0ed6d632-6adf-4f09-a0c6-1e38ab60e305", 0, 1, 1, $oPagerLink, 'page', $sLink); + +###################################### +# Recipient Groups: Container +###################################### +$sContainerId = 'cont_recipientgroup'; +$sContainer = '
    '; +$sContainer .= ''; +if ($perm->have_perm_area_action("recipientgroups", "recipientgroup_create")) { + $sContainer .= $oListActionsRow->render(); +} +$sContainer .= $oListOptionsRow->render(); +$sContainer .= $oPagerRow->render(); +$sContainer .= '
    '; +$sContainer .= '
    '; +$oTpl->set('s', 'CRECIPIENTGROUP', $sContainer); +$oTpl->set('s', 'ID_CRECIPIENTGROUP', $sContainerId); + +$oTpl->set('s', 'SESSID', $sess->id); +$oTpl->generate($cfg['path']['templates'] . $cfg['templates']['newsletter_left_top']); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_menu.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_menu.php new file mode 100644 index 0000000..33ea7ea --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_menu.php @@ -0,0 +1,367 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2007-01-01, Bj�rn Behrens (HerrB) + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.newsletter_menu.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +################################## +# Initialization +################################## +$oPage = new cPage; +$oUser = new cApiUser($auth->auth["uid"]); +$oClientLang = new cApiClientLanguage(false, $client, $lang); + +// Get idCatArt to check, if we may send a test newsletter +$lIDCatArt = (int) $oClientLang->getProperty("newsletter", "idcatart"); + +// Specify fields for search, sort and validation. Design makes enhancements +// using plugins possible (currently not implemented). If you are changing things here, +// remember to update include.newsletter_left_top.php, also. +// field: Field name in the db +// caption: Shown field name (-> user) +// base: Elements from core code (other type may be: "plugin") +// sort: Element can be used to be sorted by +// search: Element can be used to search in +$aFields = array(); +$aFields["name"] = array("field" => "name", "caption" => i18n("Name", "cl_newsletter"), "type" => "base,sort,search"); + +################################## +# Store settings/Get basic data +################################## +if (isset($_REQUEST['action_html']) && $_REQUEST['action_html'] == 'save_newsletter_properties' && $perm->have_perm_area_action($area, "news_html_settings")) { + // Storing settings + if (isset($_REQUEST["ckbHTMLNewsletter"])) { + $oClientLang->setProperty("newsletter", "html_newsletter", "true"); + } else { + $oClientLang->setProperty("newsletter", "html_newsletter", "false"); + } + $oClientLang->setProperty("newsletter", "html_template_idcat", (int) $_REQUEST["selHTMLTemplateCat"]); + $oClientLang->setProperty("newsletter", "html_newsletter_idcat", (int) $_REQUEST["selHTMLNewsletterCat"]); + $oUser->setProperty("newsletter", "test_idnewsgrp_lang" . $lang, (int) $_REQUEST["selTestDestination"]); +} else { + // No settings to be stored, get current settings (language sepcific, as lang is client specific, lang is sufficient) + $_REQUEST["selTestDestination"] = (int) $oUser->getProperty("newsletter", "test_idnewsgrp_lang" . $lang); +} +// Default value: Current user mail +$sSendTestTarget = $oUser->get("realname") . " (" . $oUser->get("email") . ")"; + +################################## +# Check external input +################################## +// Items per page (value stored per area in user property) +if (!isset($_REQUEST["elemperpage"]) || !is_numeric($_REQUEST["elemperpage"]) || $_REQUEST["elemperpage"] < 0) { + $_REQUEST["elemperpage"] = $oUser->getProperty("itemsperpage", $area); +} +if (!is_numeric($_REQUEST["elemperpage"])) { + // This is the case, if the user property has never been set (first time user) + $_REQUEST["elemperpage"] = 25; +} +if ($_REQUEST["elemperpage"] > 0) { + // -- All -- will not be stored, as it may be impossible to change this back to something more useful + $oUser->setProperty("itemsperpage", $area, $_REQUEST["elemperpage"]); +} +$_REQUEST["page"] = (int) $_REQUEST["page"]; +if ($_REQUEST["page"] <= 0 || $_REQUEST["elemperpage"] == 0) { + $_REQUEST["page"] = 1; +} +// Sort order +if ($_REQUEST["sortorder"] != "DESC") { + $_REQUEST["sortorder"] = "ASC"; +} + +// Check sort by and search in criteria +$bSortByFound = false; +$bSearchInFound = false; +foreach ($aFields as $sKey => $aData) { + if ($aData["field"] == $_REQUEST["sortby"] && strpos($aData["type"], "sort") !== false) { + $bSortByFound = true; + } + if ($aData["field"] == $_REQUEST["searchin"] && strpos($aData["type"], "search") !== false) { + $bSearchInFound = true; + } +} + +if (!$bSortByFound) { + $_REQUEST["sortby"] = "name"; // Default sort by field, possible values see above +} +if (!$bSearchInFound) { + $_REQUEST["searchin"] = "--all--"; +} + +// Free memory +unset($oClientLang); +unset($oUser); + +################################## +# Get data +################################## +$oNewsletters = new NewsletterCollection; +$oNewsletters->setWhere("idclient", $client); +$oNewsletters->setWhere("idlang", $lang); + +if ($_REQUEST["filter"] != "") { + if ($_REQUEST["searchin"] == "--all--" || $_REQUEST["searchin"] == "") { + foreach ($aFields as $sKey => $aData) { + if (strpos($aData["type"], "search") !== false) { + $oNewsletters->setWhereGroup("filter", $aData["field"], $_REQUEST["filter"], "LIKE"); + } + } + $oNewsletters->setInnerGroupCondition("filter", "OR"); + } else { + $oNewsletters->setWhere($_REQUEST["searchin"], $_REQUEST["filter"], "LIKE"); + } +} + +if ($_REQUEST["elemperpage"] > 0) { + // Getting item count without limit (for page function) - better idea anyone (performance)? + $oNewsletters->query(); + $iItemCount = $oNewsletters->count(); + + if ($_REQUEST["elemperpage"] * ($_REQUEST["page"]) >= $iItemCount + $_REQUEST["elemperpage"] && $_REQUEST["page"] != 1) { + $_REQUEST["page"] --; + } + + $oNewsletters->setLimit($_REQUEST["elemperpage"] * ($_REQUEST["page"] - 1), $_REQUEST["elemperpage"]); +} else { + $iItemCount = 0; +} + +$oNewsletters->setOrder("welcome DESC, " . $_REQUEST["sortby"] . " " . $_REQUEST["sortorder"]); +$oNewsletters->query(); + +// Output data +$oMenu = new UI_Menu; +$iMenu = 0; + +// Store messages for repeated use (speeds performance, as i18n translation is only needed once) +$aMsg = array(); +$aMsg["DelTitle"] = i18n("Delete newsletter", "cl_newsletter"); +$aMsg["DelDescr"] = i18n("Do you really want to delete the following newsletter:
    ", "cl_newsletter"); + +$aMsg["SendTestTitle"] = i18n("Send test newsletter", "cl_newsletter"); +$aMsg["SendTestTitleOff"] = i18n("Send test newsletter (disabled, check newsletter sender e-mail address and handler article selection)", "cl_newsletter"); +$aMsg["AddJobTitle"] = i18n("Add newsletter dispatch job", "cl_newsletter"); +$aMsg["AddJobTitleOff"] = i18n("Add newsletter dispatch job (disabled, check newsletter sender e-mail address and handler article selection)", "cl_newsletter"); +$aMsg["CopyTitle"] = i18n("Duplicate newsletter", "cl_newsletter"); + +while ($oNewsletter = $oNewsletters->next()) { + $idnewsletter = $oNewsletter->get("idnews"); + $iMenu++; + + $sName = $oNewsletter->get("name"); + if ($oNewsletter->get("welcome")) { + $sName = $sName . "*"; + } + + // Create the link to show/edit the newsletter + $oLnk = new cHTMLLink; + $oLnk->setMultiLink($area, "", $area, ""); + $oLnk->setCustom("idnewsletter", $idnewsletter); + + $oMenu->setTitle($iMenu, $sName); + $oMenu->setLink($iMenu, $oLnk); + + if ($perm->have_perm_area_action($area, "news_add_job") || + $perm->have_perm_area_action($area, "news_create") || + $perm->have_perm_area_action($area, "news_save")) { + // Rights: If you are able to add a job, you should be able to test it + // If you are able to add or change a newsletter, you should be able to test it + // Usability: If no e-mail has been specified, you can't send a test newsletter + if (isValidMail($oNewsletter->get("newsfrom")) && $lIDCatArt > 0) { + $sLnkSendTest = '' . $aMsg['; + } else { + $sLnkSendTest = '' . $aMsg['; + } + $oMenu->setActions($iMenu, 'test', $sLnkSendTest); + } + + if ($perm->have_perm_area_action($area, "news_add_job")) { + if (isValidMail($oNewsletter->get("newsfrom")) && $lIDCatArt > 0) { + $oLnkAddJob = new Link; + $oLnkAddJob->setMultiLink("news", "", "news", "news_add_job"); + $oLnkAddJob->setCustom("idnewsletter", $idnewsletter); + $oLnkAddJob->setAlt($aMsg["AddJobTitle"]); + $oLnkAddJob->setContent('' . $aMsg['); + + $sLnkAddJob = $oLnkAddJob->render(); + } else { + $sLnkAddJob = '' . $aMsg['; + } + + $oMenu->setActions($iMenu, 'dispatch', $sLnkAddJob); + } + + if ($perm->have_perm_area_action($area, "news_create")) { + $oLnkCopy = new Link; + $oLnkCopy->setMultiLink("news", "", "news", "news_duplicate"); + $oLnkCopy->setCustom("idnewsletter", $idnewsletter); + $oLnkCopy->setAlt($aMsg["CopyTitle"]); + $oLnkCopy->setContent('' . $aMsg['); + + $oMenu->setActions($iMenu, 'copy', $oLnkCopy->render()); + } + + if ($perm->have_perm_area_action($area, "news_delete")) { + $sDelete = '' . $aMsg['; + $oMenu->setActions($iMenu, 'delete', $sDelete); + } +} + +// Check destination for sending test newsletter +if ($_REQUEST["selTestDestination"] > 0 && $perm->have_perm_area_action($area, "news_send_test")) { + $oRcpGroups = new RecipientGroupCollection; + $oRcpGroups->setWhere("idclient", $client); + $oRcpGroups->setWhere("idlang", $lang); + $oRcpGroups->setWhere($oRcpGroups->primaryKey, $_REQUEST["selTestDestination"]); + $oRcpGroups->query(); + + if ($oRcpGroup = $oRcpGroups->next()) { + $sSendTestTarget = sprintf(i18n("Recipient group: %s", "cl_newsletter"), $oRcpGroup->get("groupname")); + } + unset($oRcpGroups); +} + +$aMsg["SendTestDescr"] = sprintf(i18n("Do you really want to send the newsletter to:
    %s", "cl_newsletter"), $sSendTestTarget); + +$sExecScript = ' + '; + +$oPage->setMargin(0); + +// Messagebox JS has to be included before ExecScript! +$oPage->addScript('messagebox', ''); +$oPage->addScript('exec', $sExecScript); +$oPage->addScript('parameterCollector.js', ''); + +// Generate current content for Object Pager +$sPagerId = "0ed6d632-6adf-4f09-a0c6-1e38ab60e302"; +$oPagerLink = new cHTMLLink; +$oPagerLink->setLink("main.php"); +$oPagerLink->setTargetFrame('left_bottom'); +$oPagerLink->setCustom("elemperpage", $_REQUEST["elemperpage"]); +$oPagerLink->setCustom("filter", $_REQUEST["filter"]); +$oPagerLink->setCustom("restrictgroup", $_REQUEST["restrictgroup"]); +$oPagerLink->setCustom("sortby", $_REQUEST["sortby"]); +$oPagerLink->setCustom("sortorder", $_REQUEST["sortorder"]); +$oPagerLink->setCustom("searchin", $_REQUEST["searchin"]); +$oPagerLink->setCustom("restrictgroup", $_REQUEST["restrictgroup"]); +$oPagerLink->setCustom("frame", 2); +$oPagerLink->setCustom("area", $area); +$oPagerLink->enableAutomaticParameterAppend(); +$oPagerLink->setCustom("contenido", $sess->id); +// Note, that after the "page" parameter no "pagerlink" parameter is specified - +// it is not used, as the JS below only uses the INNER html and the "pagerlink" parameter is +// set by ...left_top.html for the foldingrow itself +$oPager = new cObjectPager($sPagerId, $iItemCount, $_REQUEST["elemperpage"], $_REQUEST["page"], $oPagerLink, "page"); + +// Add slashes, to insert in javascript +$sPagerContent = $oPager->render(1); +$sPagerContent = str_replace('\\', '\\\\', $sPagerContent); +$sPagerContent = str_replace('\'', '\\\'', $sPagerContent); + +// Send new object pager to left_top +$oPage->addScript('setpager', ''); + +$sRefreshPager = ' + '; + +$oPage->addScript('refreshpager', $sRefreshPager); + +$oPage->setContent($oMenu->render(false)); +$oPage->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_subnav.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_subnav.php new file mode 100644 index 0000000..50000ef --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.newsletter_subnav.php @@ -0,0 +1,65 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2007-01-01, Bj�rn Behrens (HerrB) + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.newsletter_subnav.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if (isset($_GET['idnewsletter'])) +{ + # Set template data + $sCaption = i18n("Edit", "cl_newsletter"); + + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", ''.$sCaption.''); + $tpl->next(); + + # Set template data + $sCaption = i18n("Edit Message", "cl_newsletter"); + + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", ''.$sCaption.''); + $tpl->next(); + + $tpl->set('s', 'COLSPAN', ($tpl->dyn_cnt * 2) + 2); + + # Generate the third navigation layer + $tpl->generate($cfg["path"]["templates"] . $cfg["templates"]["subnav"]); +} else { + include ($cfg["path"]["contenido"].$cfg["path"]["templates"] . $cfg["templates"]["right_top_blank"]); +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients.group.subnav.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients.group.subnav.php new file mode 100644 index 0000000..da34db6 --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients.group.subnav.php @@ -0,0 +1,72 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2004-08-01, Bj�rn Behrens (HerrB) + * modified 2008-06-27, Dominik Ziegler, add security fix + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.recipients.group.subnav.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +if (isset($_GET['idrecipientgroup']) && (int) $_GET['idrecipientgroup'] > 0) { + $caption = i18n("Overview", "cl_newsletter"); + $tmp_area = "foo2"; + + # Set template data + $tpl->set("d", "ID", 'c_' . $tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", '' . $caption . ''); + $tpl->next(); + + if (is_array($cfg['plugins']['recipientslogic'])) { + foreach ($cfg['plugins']['recipientslogic'] as $plugin) { + cInclude("plugins", "recipientslogic/$plugin/" . $plugin . ".php"); + + $className = "recipientslogic_" . $plugin; + $class = new $className; + + $caption = $class->getFriendlyName(); + $tmp_area = "foo2"; + $tpl->set("d", "ID", 'c_' . $tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", '' . $caption . ''); + $tpl->next(); + } + } + + $tpl->set('s', 'COLSPAN', ($tpl->dyn_cnt * 2) + 2); + + # Generate the third navigation layer + $tpl->generate($cfg["path"]["templates"] . $cfg["templates"]["subnav"]); +} else { + include ($cfg["path"]["contenido"] . $cfg["path"]["templates"] . $cfg["templates"]["right_top_blank"]); +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients.group_edit.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients.group_edit.php new file mode 100644 index 0000000..2e745e2 --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients.group_edit.php @@ -0,0 +1,568 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2004-08-01, Bj�rn Behrens (HerrB) + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.recipients.group_edit.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +// Initialization +$oPage = new cPage; +$oRGroups = new RecipientGroupCollection; +$oRGroupMembers = new RecipientGroupMemberCollection; +$oRGroup = new RecipientGroup; + +$aFields = array(); +$aFields["name"] = array("field" => "name", "caption" => i18n("Name", "cl_newsletter"), "type" => "base,sort,search"); +$aFields["email"] = array("field" => "email", "caption" => i18n("E-Mail", "cl_newsletter"), "type" => "base,sort,search"); +$aFields["confirmed"] = array("field" => "confirmed", "caption" => i18n("Confirmed", "cl_newsletter"), "type" => "base"); +$aFields["deactivated"] = array("field" => "deactivated", "caption" => i18n("Deactivated", "cl_newsletter"), "type" => "base"); + +if ($action == "recipientgroup_create" && $perm->have_perm_area_action($area, $action)) { + $oRGroup = $oRGroups->create(" " . i18n("-- new group --", "cl_newsletter")); + $_REQUEST["idrecipientgroup"] = $oRGroup->get("idnewsgroup"); + $oPage->setReload(); + $sRefreshLeftTopScript = ''; + $oPage->addScript('refreshlefttop', $sRefreshLeftTopScript); +} elseif ($action == "recipientgroup_delete" && $perm->have_perm_area_action($area, $action)) { + $oRGroups->delete($_REQUEST["idrecipientgroup"]); + $sRefreshLeftTopScript = ''; + $oPage->addScript('refreshlefttop', $sRefreshLeftTopScript); + + $_REQUEST["idrecipientgroup"] = 0; + $oRGroup = new RecipientGroup; + $oPage->setReload(); +} else { + $oRGroup->loadByPrimaryKey($_REQUEST["idrecipientgroup"]); +} + +if ($oRGroup->virgin == false && $oRGroup->get("idclient") == $client && $oRGroup->get("idlang") == $lang) { + if ($action == "recipientgroup_save_group" && $perm->have_perm_area_action($area, $action)) { + // Saving changes + $aMessages = array(); + $bReload = false; + + $sGroupName = stripslashes($_REQUEST["groupname"]); + if ($oRGroup->get("groupname") != $sGroupName) { + $oRGroups->resetQuery(); + $oRGroups->setWhere("groupname", $sGroupName); + $oRGroups->setWhere("idclient", $client); + $oRGroups->setWhere("idlang", $lang); + $oRGroups->setWhere($oRGroup->primaryKey, $oRGroup->get($oRGroup->primaryKey), "!="); + $oRGroups->query(); + + if ($oRGroups->next()) { + $aMessages[] = i18n("Could not set new group name: Group already exists", "cl_newsletter"); + } else { + $bReload = true; + + $oRGroup->set("groupname", $sGroupName); + } + } + + if (count($_REQUEST["adduser"]) > 0) { + foreach ($_REQUEST["adduser"] as $iRcpID) { + if (is_numeric($iRcpID)) { + $oRGroupMembers->create($_REQUEST["idrecipientgroup"], $iRcpID); + } + } + } + + if ($oRGroup->get("defaultgroup") != (int) $_REQUEST["defaultgroup"]) { + $bReload = true; + $oRGroup->set("defaultgroup", $_REQUEST["defaultgroup"]); + } + + $oRGroup->store(); + + if ($bReload) { + $oPage->setReload(); + } + + // Removing users from group (if specified) + //print_r ($_REQUEST["deluser"]); + if ($perm->have_perm_area_action($area, "recipientgroup_recipient_delete") && is_array($_REQUEST["deluser"])) { + foreach ($_REQUEST["deluser"] as $iRcpID) { + if (is_numeric($iRcpID)) { + echo "yo: " . $iRcpID; + $oRGroupMembers->remove($_REQUEST["idrecipientgroup"], $iRcpID); + } + } + } + + $sRefreshLeftTopScript = ''; + $oPage->addScript('refreshlefttop', $sRefreshLeftTopScript); + } + + if (count($aMessages) > 0) { + $sNotis = $notification->returnNotification("warning", implode("
    ", $aMessages)) . "
    "; + } + + // Set default values + $oUser = new cApiUser($auth->auth["uid"]); + if (!isset($_REQUEST["member_elemperpage"]) || !is_numeric($_REQUEST["member_elemperpage"]) || $_REQUEST["member_elemperpage"] < 0) { + $_REQUEST["member_elemperpage"] = $oUser->getProperty("itemsperpage", $area . "_edit_member"); + } + if (!is_numeric($_REQUEST["member_elemperpage"])) { + $_REQUEST["member_elemperpage"] = 25; + } + if ($_REQUEST["member_elemperpage"] > 0) { + // -- All -- will not be stored, as it may be impossible to change this back to something more useful + $oUser->setProperty("itemsperpage", $area . "_edit_member", $_REQUEST["member_elemperpage"]); + } + + if (!isset($_REQUEST["outsider_elemperpage"]) || !is_numeric($_REQUEST["outsider_elemperpage"]) || $_REQUEST["outsider_elemperpage"] < 0) { + $_REQUEST["outsider_elemperpage"] = $oUser->getProperty("itemsperpage", $area . "_edit_outsider"); + } + if (!is_numeric($_REQUEST["outsider_elemperpage"])) { + $_REQUEST["outsider_elemperpage"] = 25; + } + if ($_REQUEST["outsider_elemperpage"] > 0) { + // -- All -- will not be stored, as it may be impossible to change this back to something more useful + $oUser->setProperty("itemsperpage", $area . "_edit_outsider", $_REQUEST["outsider_elemperpage"]); + } + unset($oUser); + + if (!isset($_REQUEST["member_page"]) || !is_numeric($_REQUEST["member_page"]) || $_REQUEST["member_page"] <= 0 || $_REQUEST["member_elemperpage"] == 0) { + $_REQUEST["member_page"] = 1; + } + if ($_REQUEST["member_sortorder"] != "DESC") { + $_REQUEST["member_sortorder"] = "ASC"; + } + if (!isset($_REQUEST["outsider_page"]) || !is_numeric($_REQUEST["outsider_page"]) || $_REQUEST["outsider_page"] <= 0 || $_REQUEST["outsider_elemperpage"] == 0) { + $_REQUEST["outsider_page"] = 1; + } + if ($_REQUEST["outsider_sortorder"] != "DESC") { + $_REQUEST["outsider_sortorder"] = "ASC"; + } + + // Output form + $oForm = new UI_Table_Form("properties", "main.php?1", "get"); // Use "get" for folding rows... + $oForm->setVar("frame", $frame); + $oForm->setVar("area", $area); + $oForm->setVar("action", "recipientgroup_save_group"); + $oForm->setVar("idrecipientgroup", $_REQUEST["idrecipientgroup"]); + $oForm->setSubmitJS("append_registered_parameters(this);"); + + $oForm->addHeader(i18n("Edit group", "cl_newsletter")); + + $oTxtGroupName = new cHTMLTextbox("groupname", $oRGroup->get("groupname"), 40); + $oForm->add(i18n("Group name", "cl_newsletter"), $oTxtGroupName->render()); + + $oCkbDefault = new cHTMLCheckbox("defaultgroup", "1"); + $oCkbDefault->setChecked($oRGroup->get("defaultgroup")); + $oForm->add(i18n("Default group", "cl_newsletter"), $oCkbDefault->toHTML(false)); + + // Member list options folding row + $oMemberListOptionRow = new cFoldingRow("a91f5540-52db-11db-b0de-0800200c9a66", i18n("Member list options", "cl_newsletter")); + + $oSelItemsPerPage = new cHTMLSelectElement("member_elemperpage"); + $oSelItemsPerPage->autoFill(array(0 => i18n("-- All --", "cl_newsletter"), 25 => 25, 50 => 50, 75 => 75, 100 => 100)); + $oSelItemsPerPage->setDefault($_REQUEST["member_elemperpage"]); + + $oSelSortBy = new cHTMLSelectElement("member_sortby"); + foreach ($aFields as $sKey => $aData) { + if (strpos($aData["type"], "sort") !== false) { + if ($_REQUEST["member_sortby"] == "") { + $_REQUEST["member_sortby"] = $aData["field"]; + } + $oOption = new cHTMLOptionElement($aData["caption"], $aData["field"]); + $oSelSortBy->addOptionElement($aData["field"], $oOption); + } + } + $oSelSortBy->setDefault($_REQUEST["member_sortby"]); + + $oSelSortOrder = new cHTMLSelectElement("member_sortorder"); + $oSelSortOrder->autoFill(array("ASC" => i18n("Ascending", "cl_newsletter"), "DESC" => i18n("Descending", "cl_newsletter"))); + $oSelSortOrder->setDefault($_REQUEST["member_sortorder"]); + + $oTxtFilter = new cHTMLTextbox("member_filter", $_REQUEST["member_filter"], 16); + + $oSelSearchIn = new cHTMLSelectElement("member_searchin"); + $oOption = new cHTMLOptionElement(i18n("-- All fields --", "cl_newsletter"), "--all--"); + $oSelSearchIn->addOptionElement("all", $oOption); + + foreach ($aFields as $sKey => $aData) { + if (strpos($aData["type"], "search") !== false) { + $oOption = new cHTMLOptionElement($aData["caption"], $aData["field"]); + $oSelSearchIn->addOptionElement($aData["field"], $oOption); + } + } + $oSelSearchIn->setDefault($_REQUEST["member_searchin"]); + + $oSubmit = new cHTMLButton("submit", i18n("Apply", "cl_newsletter")); + + $sContent = '
    ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= '
    ' . i18n("Items / page", "cl_newsletter") . '' . $oSelItemsPerPage->render() . '
    ' . i18n("Sort by", "cl_newsletter") . '' . $oSelSortBy->render() . '
    ' . i18n("Sort order", "cl_newsletter") . '' . $oSelSortOrder->render() . '
    ' . i18n("Search for", "cl_newsletter") . '' . $oTxtFilter->render() . '
    ' . i18n("Search in", "cl_newsletter") . '' . $oSelSearchIn->render() . '
     ' . $oSubmit->render() . '
    ' . chr(10); + $sContent .= '
    ' . chr(10); + $oMemberListOptionRow->setContentData($sContent); + + // Members + $oAddedRecipientList = new UI_List; + $oAddedRecipientList->setWidth("100%"); + $oAddedRecipientList->setBorder(1); + + $oAddedRecipientList->setCell(0, 1, "" . i18n("Name", "cl_newsletter") . ""); + $oImgDel = new cHTMLImage("images/but_invert_selection.gif"); + $sLnkDelIcon = '' . $oImgDel->render() . ''; + $oAddedRecipientList->setCell(0, 2, $sLnkDelIcon); + $oAddedRecipientList->setCellAlignment(0, 2, "right"); + + $oInsiders = new RecipientCollection; + + $oInsiders->link("RecipientGroupMemberCollection"); + $oInsiders->setWhere("recipientcollection.idclient", $client); + $oInsiders->setWhere("recipientcollection.idlang", $lang); + $oInsiders->setWhere("RecipientGroupMemberCollection.idnewsgroup", $_REQUEST["idrecipientgroup"]); + + // Get insiders for outsiders list (*sigh!*) + // TODO: Ask user to have at least mySQL 4.1... + $oInsiders->query(); + + $aInsiders = array(); + if ($oInsiders->count() > 0) { + while ($oInsider = $oInsiders->next()) { + $aInsiders[] = $oInsider->get($oInsider->primaryKey); + } + } + + // Filter + if ($_REQUEST["member_filter"] != "") { + if ($_REQUEST["member_searchin"] == "--all--" || $_REQUEST["member_searchin"] == "") { + foreach ($aFields as $sKey => $aData) { + if (strpos($aData["type"], "search") !== false) { + $oInsiders->setWhereGroup("filter", "recipientcollection." . $aData["field"], $_REQUEST["member_filter"], "LIKE"); + } + } + $oInsiders->setInnerGroupCondition("filter", "OR"); + } else { + $oInsiders->setWhere("recipientcollection." . $_REQUEST["member_searchin"], $_REQUEST["member_filter"], "LIKE"); + } + } + + // If elemperpage is something else than "all", get item count based on filters + if ($_REQUEST["member_elemperpage"] > 0) { + $oInsiders->query(); + $iMembers = $oInsiders->count(); // Getting item count without limit (for page function) - better idea anybody (performance)? + + $oInsiders->setLimit($_REQUEST["member_elemperpage"] * ($_REQUEST["member_page"] - 1), $_REQUEST["member_elemperpage"]); + } else { + $iMembers = 0; + } + + // Get data + $sSortSQL = "recipientcollection." . $_REQUEST["member_sortby"] . " " . $_REQUEST["member_sortorder"]; + if ($_REQUEST["member_sortby"] == "name") { + // Name field may be empty, add email as sort criteria + $sSortSQL .= ", email " . $_REQUEST["member_sortorder"]; + } + + $oInsiders->setOrder($sSortSQL); + $oInsiders->query(); + + $iItems = $oInsiders->count(); + if ($iItems == 0 && $_REQUEST["member_filter"] == "" && ($_REQUEST["member_elemperpage"] == 0 || $iMembers == 0)) { + $oAddedRecipientList->setCell(1, 1, i18n("No recipients are added to this group yet", "cl_newsletter")); + $oAddedRecipientList->setCell(1, 2, ' '); + } else if ($iItems == 0) { + $oAddedRecipientList->setCell(1, 1, i18n("No recipients found", "cl_newsletter")); + $oAddedRecipientList->setCell(1, 2, ' '); + } else { + while ($oRcp = $oInsiders->next()) { + $iID = $oRcp->get("idnewsrcp"); + + $sName = $oRcp->get("name"); + $sEMail = $oRcp->get("email"); + if (empty($sName)) { + $sName = $sEMail; + } + $oAddedRecipientList->setCell($iID, 1, $sName . " (" . $sEMail . ")"); + + if ($perm->have_perm_area_action($area, "recipientgroup_recipient_delete")) { + $oCkbDel = new cHTMLCheckbox("deluser[]", $iID); + $oAddedRecipientList->setCell($iID, 2, $oCkbDel->toHTML(false)); + } else { + $oAddedRecipientList->setCell($iID, 2, " "); + } + $oAddedRecipientList->setCellAlignment($iID, 2, "right"); + } + } + + // Member list pager (-> below data, as iMembers is needed) + $oPagerLink = new cHTMLLink; + $oPagerLink->setLink("main.php"); + $oPagerLink->setCustom("member_elemperpage", $_REQUEST["member_elemperpage"]); + $oPagerLink->setCustom("member_filter", $_REQUEST["member_filter"]); + $oPagerLink->setCustom("member_sortby", $_REQUEST["member_sortby"]); + $oPagerLink->setCustom("member_sortorder", $_REQUEST["member_sortorder"]); + $oPagerLink->setCustom("member_searchin", $_REQUEST["member_searchin"]); + $oPagerLink->setCustom("outsider_elemperpage", $_REQUEST["outsider_elemperpage"]); + $oPagerLink->setCustom("outsider_filter", $_REQUEST["outsider_filter"]); + $oPagerLink->setCustom("outsider_sortby", $_REQUEST["outsider_sortby"]); + $oPagerLink->setCustom("outsider_sortorder", $_REQUEST["outsider_sortorder"]); + $oPagerLink->setCustom("outsider_searchin", $_REQUEST["outsider_searchin"]); + $oPagerLink->setCustom("idrecipientgroup", $_REQUEST["idrecipientgroup"]); + $oPagerLink->setCustom("frame", $frame); + $oPagerLink->setCustom("area", $area); + #$oPagerLink->enableAutomaticParameterAppend(); + $oPagerLink->setCustom("contenido", $sess->id); + + $oMemberPager = new cObjectPager("d82a3ff0-52d9-11db-b0de-0800200c9a66", $iMembers, $_REQUEST["member_elemperpage"], $_REQUEST["member_page"], $oPagerLink, "member_page"); + $oMemberPager->setCaption(i18n("Member navigation", "cl_newsletter")); + + $oForm->add(i18n("Recipients in group", "cl_newsletter"), '' . + $oMemberListOptionRow->render() . + $oMemberPager->render() . + '
    ' . $oAddedRecipientList->render() . '
    '); + unset($oInsiders); + unset($oMemberListOptionRow); + unset($oMemberPager); + unset($oAddedRecipientList); + + // Outsiders + // Outsider list options folding row + $oOutsiderListOptionRow = new cFoldingRow("ca633b00-52e9-11db-b0de-0800200c9a66", i18n("Outsider list options", "cl_newsletter")); + + $oSelItemsPerPage = new cHTMLSelectElement("outsider_elemperpage"); + $oSelItemsPerPage->autoFill(array(0 => i18n("-- All --", "cl_newsletter"), 25 => 25, 50 => 50, 75 => 75, 100 => 100)); + $oSelItemsPerPage->setDefault($_REQUEST["outsider_elemperpage"]); + + $oSelSortBy = new cHTMLSelectElement("outsider_sortby"); + foreach ($aFields as $sKey => $aData) { + if (strpos($aData["type"], "sort") !== false) { + if ($_REQUEST["outsider_sortby"] == "") { + $_REQUEST["outsider_sortby"] = $aData["field"]; + } + $oOption = new cHTMLOptionElement($aData["caption"], $aData["field"]); + $oSelSortBy->addOptionElement($aData["field"], $oOption); + } + } + $oSelSortBy->setDefault($_REQUEST["outsider_sortby"]); + + $oSelSortOrder = new cHTMLSelectElement("outsider_sortorder"); + $oSelSortOrder->autoFill(array("ASC" => i18n("Ascending", "cl_newsletter"), "DESC" => i18n("Descending", "cl_newsletter"))); + $oSelSortOrder->setDefault($_REQUEST["outsider_sortorder"]); + + $oTxtFilter = new cHTMLTextbox("outsider_filter", $_REQUEST["outsider_filter"], 16); + + $oSelSearchIn = new cHTMLSelectElement("outsider_searchin"); + $oOption = new cHTMLOptionElement(i18n("-- All fields --", "cl_newsletter"), "--all--"); + $oSelSearchIn->addOptionElement("all", $oOption); + + foreach ($aFields as $sKey => $aData) { + if (strpos($aData["type"], "search") !== false) { + $oOption = new cHTMLOptionElement($aData["caption"], $aData["field"]); + $oSelSearchIn->addOptionElement($aData["field"], $oOption); + } + } + $oSelSearchIn->setDefault($_REQUEST["outsider_searchin"]); + + $oSubmit = new cHTMLButton("submit", i18n("Apply", "cl_newsletter")); + + $sContent = '
    ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= ' ' . chr(10); + $sContent .= '
    ' . i18n("Items / page", "cl_newsletter") . '' . $oSelItemsPerPage->render() . '
    ' . i18n("Sort by", "cl_newsletter") . '' . $oSelSortBy->render() . '
    ' . i18n("Sort order", "cl_newsletter") . '' . $oSelSortOrder->render() . '
    ' . i18n("Search for", "cl_newsletter") . '' . $oTxtFilter->render() . '
    ' . i18n("Search in", "cl_newsletter") . '' . $oSelSearchIn->render() . '
     ' . $oSubmit->render() . '
    ' . chr(10); + $sContent .= '
    ' . chr(10); + $oOutsiderListOptionRow->setContentData($sContent); + + // TODO: Try to enhance genericdb to get this working with the usual objects... + $oOutsiders = new RecipientCollection; + + # This requires mySQL V4.1, at least... + # TODO: Add mySQL server version switch + #$sSQL = "idclient = '".$client."' AND idlang = '".$lang."' AND ". + # "idnewsrcp NOT IN (SELECT idnewsrcp FROM ".$cfg["tab"]["news_groupmembers"]." WHERE idnewsgroup = '".$_REQUEST["idrecipientgroup"]."')"; + // TODO: This works with every mySQL version but may be problematic, if a group + // contains a lot of members (e.g. Oracle can't handle more than 1000 items in the brackets) + $sSQL = "idclient = '" . $client . "' AND idlang = '" . $lang . "' AND " . + "idnewsrcp NOT IN ('" . implode("','", $aInsiders) . "')"; + + if ($_REQUEST["outsider_filter"] != "") { + $sSQLSearchIn = ""; + if ($_REQUEST["outsider_searchin"] == "--all--" || $_REQUEST["outsider_searchin"] == "") { + foreach ($aFields as $sKey => $aData) { + if (strpos($aData["type"], "search") !== false) { + if ($sSQLSearchIn !== "") { + $sSQLSearchIn .= " OR "; + } + $sSQLSearchIn .= $aData["field"] . " LIKE '%" . urlencode($_REQUEST["outsider_filter"]) . "%'"; + } + } + } else { + $sSQLSearchIn .= urlencode($_REQUEST["outsider_searchin"]) . " LIKE '%" . urlencode($_REQUEST["outsider_filter"]) . "%'"; + } + $sSQL .= " AND (" . $sSQLSearchIn . ")"; + } + + // If elemperpage is something else than "all", get item count based on filters + if ($_REQUEST["outsider_elemperpage"] > 0) { + $oOutsiders->flexSelect("", "", $sSQL, ""); + $iOutsiders = $oOutsiders->count(); // Getting item count without limit (for page function) - better idea anyone (performance)? + + $sSQLLimit = " LIMIT " . $_REQUEST["outsider_elemperpage"] * ($_REQUEST["outsider_page"] - 1) . ", " . $_REQUEST["outsider_elemperpage"]; + } else { + $iMembers = 0; + $sSQLLimit = ""; + } + + // Get data + $sSQLSort = " ORDER BY " . urlencode($_REQUEST["outsider_sortby"]) . " " . $_REQUEST["outsider_sortorder"]; + if ($_REQUEST["outsider_sortby"] == "name") { + // Name field may be empty, add email as sort criteria + $sSQLSort .= ", email " . $_REQUEST["outsider_sortorder"]; + } + + $sSQL .= $sSQLSort . $sSQLLimit; + $oOutsiders->flexSelect("", "", $sSQL, ""); + + $aItems = array(); + while ($oRecipient = $oOutsiders->next()) { + $sName = $oRecipient->get("name"); + $sEMail = $oRecipient->get("email"); + + if (empty($sName)) { + $sName = $sEMail; + } + $aItems[] = array($oRecipient->get("idnewsrcp"), $sName . " (" . $sEMail . ")"); + } + + $oSelUser = new cHTMLSelectElement("adduser[]"); + $oSelUser->setSize(25); + $oSelUser->setStyle("width: 100%;"); + $oSelUser->setMultiSelect(); + $oSelUser->autoFill($aItems); + + // Outsider list pager (-> below data, as iOutsiders is needed) + $oPagerLink = new cHTMLLink; + $oPagerLink->setLink("main.php"); + $oPagerLink->setCustom("member_elemperpage", $_REQUEST["member_elemperpage"]); + $oPagerLink->setCustom("member_filter", $_REQUEST["member_filter"]); + $oPagerLink->setCustom("member_sortby", $_REQUEST["member_sortby"]); + $oPagerLink->setCustom("member_sortorder", $_REQUEST["member_sortorder"]); + $oPagerLink->setCustom("member_searchin", $_REQUEST["member_searchin"]); + $oPagerLink->setCustom("outsider_elemperpage", $_REQUEST["outsider_elemperpage"]); + $oPagerLink->setCustom("outsider_filter", $_REQUEST["outsider_filter"]); + $oPagerLink->setCustom("outsider_sortby", $_REQUEST["outsider_sortby"]); + $oPagerLink->setCustom("outsider_sortorder", $_REQUEST["outsider_sortorder"]); + $oPagerLink->setCustom("outsider_searchin", $_REQUEST["outsider_searchin"]); + $oPagerLink->setCustom("idrecipientgroup", $_REQUEST["idrecipientgroup"]); + $oPagerLink->setCustom("frame", $frame); + $oPagerLink->setCustom("area", $area); + #$oPagerLink->enableAutomaticParameterAppend(); + $oPagerLink->setCustom("contenido", $sess->id); + + $oOutsiderPager = new cObjectPager("4d3a7330-52eb-11db-b0de-0800200c9a66", $iOutsiders, $_REQUEST["outsider_elemperpage"], $_REQUEST["outsider_page"], $oPagerLink, "outsider_page"); + $oOutsiderPager->setCaption(i18n("Outsider navigation", "cl_newsletter")); + + $oForm->add(i18n("Add recipients", "cl_newsletter"), '' . + $oOutsiderListOptionRow->render() . + $oOutsiderPager->render() . + '
    ' . $oSelUser->render() . '
    ' . i18n("Note: Hold <Ctrl> to
    select multiple items.", "cl_newsletter") . '
    '); + unset($oOutsiders); + unset($oOutsiderListOptionRow); + unset($oOutsiderPager); + + $sDelMarkScript = ' '; + + $oPage->addScript('DelMarkScript', $sDelMarkScript); + $oPage->addScript('cfoldingrow.js', ''); + $oPage->addScript('parameterCollector.js', ''); + + $oPage->setContent($sNotis . $oForm->render(true)); +} else { + $oPage->setContent($sNotis . ""); +} +$oPage->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients.group_menu.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients.group_menu.php new file mode 100644 index 0000000..1e970aa --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients.group_menu.php @@ -0,0 +1,234 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2007-01-01, Bj�rn Behrens (HerrB) + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.recipients.group_menu.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +################################## +# Initialization +################################## +$oPage = new cPage; +$oMenu = new UI_Menu; +$oUser = new cApiUser($auth->auth["uid"]); + +// Specify fields for search, sort and validation. Design makes enhancements +// using plugins possible (currently not implemented). If you are changing things here, +// remember to update include.newsletter_left_top.php, also. +// field: Field name in the db +// caption: Shown field name (-> user) +// base: Elements from core code (other type may be: "plugin") +// sort: Element can be used to be sorted by +// search: Element can be used to search in +$aFields = array(); +$aFields["name"] = array("field" => "groupname", "caption" => i18n("Name", "cl_newsletter"), "type" => "base,sort,search"); + +################################## +# Check external input +################################## +// Items per page (value stored per area in user property) +if (!isset($_REQUEST["elemperpage"]) || !is_numeric($_REQUEST["elemperpage"]) || $_REQUEST["elemperpage"] < 0) { + $_REQUEST["elemperpage"] = $oUser->getProperty("itemsperpage", $area); +} +if (!is_numeric($_REQUEST["elemperpage"])) { + // This is the case, if the user property has never been set (first time user) + $_REQUEST["elemperpage"] = 25; +} +if ($_REQUEST["elemperpage"] > 0) { + // -- All -- will not be stored, as it may be impossible to change this back to something more useful + $oUser->setProperty("itemsperpage", $area, $_REQUEST["elemperpage"]); +} +$_REQUEST["page"] = (int) $_REQUEST["page"]; +if ($_REQUEST["page"] <= 0 || $_REQUEST["elemperpage"] == 0) { + $_REQUEST["page"] = 1; +} +// Sort order +if ($_REQUEST["sortorder"] != "DESC") { + $_REQUEST["sortorder"] = "ASC"; +} + +// Don't need to check sort by and search in criteria - just set it +$_REQUEST["sortby"] = "groupname"; // Default sort by field, possible values see above +$_REQUEST["searchin"] = "--all--"; + +// Free memory +unset($oUser); +unset($oClient); + +################################## +# Get data +################################## +$oRcpGroups = new RecipientGroupCollection; +$oRcpGroups->setWhere("idclient", $client); +$oRcpGroups->setWhere("idlang", $lang); + +if ($_REQUEST["filter"] != "") { + if ($_REQUEST["searchin"] == "--all--" || $_REQUEST["searchin"] == "") { + foreach ($aFields as $sKey => $aData) { + if (strpos($aData["type"], "search") !== false) { + $oRcpGroups->setWhereGroup("filter", $aData["field"], $_REQUEST["filter"], "LIKE"); + } + } + $oRcpGroups->setInnerGroupCondition("filter", "OR"); + } else { + $oRcpGroups->setWhere($_REQUEST["searchin"], $_REQUEST["filter"], "LIKE"); + } +} + +if ($_REQUEST["elemperpage"] > 0) { + // Getting item count without limit (for page function) - better idea anyone (performance)? + $oRcpGroups->query(); + $iItemCount = $oRcpGroups->count(); + + if ($_REQUEST["elemperpage"] * ($_REQUEST["page"]) >= $iItemCount + $_REQUEST["elemperpage"] && $_REQUEST["page"] != 1) { + $_REQUEST["page"] --; + } + + $oRcpGroups->setLimit($_REQUEST["elemperpage"] * ($_REQUEST["page"] - 1), $_REQUEST["elemperpage"]); +} else { + $iItemCount = 0; +} + +$oRcpGroups->setOrder("defaultgroup DESC, " . $_REQUEST["sortby"] . " " . $_REQUEST["sortorder"]); +$oRcpGroups->query(); + +// Output data +$oMenu = new UI_Menu; +$iMenu = 0; + +// Store messages for repeated use (speeds performance, as i18n translation is only needed once) +$aMsg = array(); +$aMsg["DelTitle"] = i18n("Delete recipient group", "cl_newsletter"); +$aMsg["DelDescr"] = i18n("Do you really want to delete the following newsletter recipient group:
    ", "cl_newsletter"); + +while ($oRcpGroup = $oRcpGroups->next()) { + $iMenu++; + $iIDGroup = $oRcpGroup->get("idnewsgroup"); + + $sName = $oRcpGroup->get("groupname"); + if ($oRcpGroup->get("defaultgroup")) { + $sName = $sName . "*"; + } + + // Create the link to show/edit the recipient group + $oLnk = new cHTMLLink; + $oLnk->setMultiLink("recipientgroups", "", "recipientgroups", ""); + $oLnk->setCustom("idrecipientgroup", $iIDGroup); + + #$oMenu->setImage($iMenu, $cfg["path"]["images"] . "groups.gif"); + $oMenu->setTitle($iMenu, $sName); + $oMenu->setLink($iMenu, $oLnk); + + if ($perm->have_perm_area_action($area, recipientgroup_delete)) { + $oMenu->setActions($iMenu, 'delete', '' . $aMsg['); + } +} + +$sExecScript = ' + '; + +$oPage->setMargin(0); +$oPage->addScript('messagebox', ''); +$oPage->addScript('delete', $sExecScript); +//$oPage->addScript('cfoldingrow.js', ''); +$oPage->addScript('parameterCollector.js', ''); + +// Generate current content for Object Pager +$sPagerId = "0ed6d632-6adf-4f09-a0c6-1e38ab60e305"; +$oPagerLink = new cHTMLLink; +$oPagerLink->setLink("main.php"); +$oPagerLink->setTargetFrame('left_bottom'); +$oPagerLink->setCustom("elemperpage", $_REQUEST["elemperpage"]); +$oPagerLink->setCustom("filter", $_REQUEST["filter"]); +$oPagerLink->setCustom("sortby", $_REQUEST["sortby"]); +$oPagerLink->setCustom("sortorder", $_REQUEST["sortorder"]); +$oPagerLink->setCustom("searchin", $_REQUEST["searchin"]); +$oPagerLink->setCustom("frame", $frame); +$oPagerLink->setCustom("area", $area); +$oPagerLink->enableAutomaticParameterAppend(); +$oPagerLink->setCustom("contenido", $sess->id); +// Note, that after the "page" parameter no "pagerlink" parameter is specified - +// it is not used, as the JS below only uses the INNER html and the "pagerlink" parameter is +// set by ...left_top.html for the foldingrow itself +$oPager = new cObjectPager($sPagerId, $iItemCount, $_REQUEST["elemperpage"], $_REQUEST["page"], $oPagerLink, "page"); + +// Add slashes, to insert in javascript +$sPagerContent = $oPager->render(1); +$sPagerContent = str_replace('\\', '\\\\', $sPagerContent); +$sPagerContent = str_replace('\'', '\\\'', $sPagerContent); + +// Send new object pager to left_top +// Send new object pager to left_top +$oPage->addScript('setpager', ''); + +$sRefreshPager = ' + '; + +$oPage->addScript('refreshpager', $sRefreshPager); + +//$oPage->setContent(array('', '
    ', $oMenu->render(false))); +$oPage->setContent($oMenu->render(false)); +$oPage->render(); +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients_edit.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients_edit.php new file mode 100644 index 0000000..afef3ea --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients_edit.php @@ -0,0 +1,246 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2007-01-01, Bj�rn Behrens (HerrB) + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.recipients_edit.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$oPage = new cPage; +$oRecipients = new RecipientCollection; + +if (is_array($cfg['plugins']['recipients'])) { + foreach ($cfg['plugins']['recipients'] as $plugin) { + plugin_include("recipients", $plugin . "/" . $plugin . ".php"); + } +} + +// Note, that the object name has to be $recipient for plugins +if ($action == "recipients_create" && $perm->have_perm_area_action($area, $action)) { + $recipient = $oRecipients->create("mail@domain.tld", " " . i18n("-- new recipient --", "cl_newsletter")); + $oPage->setReload(); +} elseif ($action == "recipients_delete" && $perm->have_perm_area_action($area, $action)) { + $oRecipients->delete($idrecipient); + $recipient = new Recipient; + $oPage->setReload(); +} elseif ($action == "recipients_purge" && $perm->have_perm_area_action($area, "recipients_delete")) { + $oClient = new cApiClient($client); + $timeframe = $oClient->getProperty("newsletter", "purgetimeframe"); + if (!$timeframe) { + $timeframe = 30; + } + $purgedrecipients = $oRecipients->purge($timeframe); + /* backslashdollar: There is a problem translating \$ - it is either not recognized or translated correctly (using poEdit) */ + if ($purgedrecipients > 0) { + $sNotis = $notification->messageBox("info", sprintf(str_replace("backslashdollar", "\$", i18n("%1backslashdollard recipients, which hasn't been confirmed since more than %2backslashdollard days has been removed.", "cl_newsletter")), $purgedrecipients, $timeframe), 0); + } else { + $sNotis = $notification->messageBox("info", sprintf(str_replace("backslashdollar", "\$", i18n("There are no recipients, which hasn't been confirmed since more than %2backslashdollard days has been removed.", "cl_newsletter")), 0, $timeframe), 0); + } + + $recipient = new Recipient; + $oPage->setReload(); +} else { + $recipient = new Recipient($idrecipient); +} + +if ($recipient->virgin == false && $recipient->get("idclient") == $client && $recipient->get("idlang") == $lang) { + if ($action == "recipients_save" && $perm->have_perm_area_action($area, $action)) { + $oPage->setReload(); + $aMessages = array(); + + $name = stripslashes($name); + $email = stripslashes($email); + $confirmed = (int) $confirmed; + $deactivated = (int) $deactivated; + $newstype = (int) $newstype; + + $recipient->set("name", $name); + + if (!isValidMail($email)) { + $aMessages[] = i18n("Please specify a valid e-mail address", "cl_newsletter"); + } else { + $email = strtolower($email); // e-mail always in lower case + if ($recipient->get("email") != $email) { + $oRecipients->resetQuery(); + $oRecipients->setWhere("email", $email); + $oRecipients->setWhere("idclient", $client); + $oRecipients->setWhere("idlang", $lang); + $oRecipients->setWhere($recipient->primaryKey, $recipient->get($recipient->primaryKey), "!="); + $oRecipients->query(); + + if ($oRecipients->next()) { + $aMessages[] = i18n("Could not set new e-mail adress: Other recipient with same e-mail address already exists", "cl_newsletter"); + } else { + $recipient->set("email", $email); + } + } + } + + if ($recipient->get("confirmed") != $confirmed && $confirmed) { + $recipient->set("confirmeddate", date("Y-m-d H:i:s"), false); + } elseif (!$confirmed) { + $recipient->set("confirmeddate", "0000-00-00 00:00:00", false); + } + $recipient->set("confirmed", $confirmed); + $recipient->set("deactivated", $deactivated); + $recipient->set("news_type", $newstype); + + // Check out if there are any plugins + if (is_array($cfg['plugins']['recipients'])) { + foreach ($cfg['plugins']['recipients'] as $plugin) { + if (function_exists("recipients_" . $plugin . "_wantedVariables") && function_exists("recipients_" . $plugin . "_store")) { + $wantVariables = call_user_func("recipients_" . $plugin . "_wantedVariables"); + + if (is_array($wantVariables)) { + $varArray = array(); + + foreach ($wantVariables as $value) { + $varArray[$value] = stripslashes($GLOBALS[$value]); + } + } + $store = call_user_func("recipients_" . $plugin . "_store", $varArray); + } + } + } + + $recipient->store(); + + // Remove group associations + if (isset($_REQUEST["ckbRemove"])) { + $oGroupMembers = new RecipientGroupMemberCollection; + + foreach ($_REQUEST["ckbRemove"] as $iGroupMemberID) { + if (is_numeric($iGroupMemberID)) { + $oGroupMembers->delete($iGroupMemberID); + } + } + } + } + + if (count($aMessages) > 0) { + $sNotis = $notification->returnNotification("warning", implode("
    ", $aMessages)) . "
    "; + } + + $oForm = new UI_Table_Form("properties"); + $oForm->setVar("frame", $frame); + $oForm->setVar("area", $area); + $oForm->setVar("action", "recipients_save"); + $oForm->setVar("idrecipient", $recipient->get("idnewsrcp")); + + $oForm->addHeader(i18n("Edit recipient", "cl_newsletter")); + + $oTxtName = new cHTMLTextbox("name", $recipient->get("name"), 40); + $oTxtEMail = new cHTMLTextbox("email", $recipient->get("email"), 40); + $oCkbConfirmed = new cHTMLCheckbox("confirmed", "1"); + $oCkbConfirmed->setChecked($recipient->get("confirmed")); + $oCkbDeactivated = new cHTMLCheckbox("deactivated", "1"); + $oCkbDeactivated->setChecked($recipient->get("deactivated")); + + $oSelNewsType = new cHTMLSelectElement("newstype"); + $oOption = new cHTMLOptionElement(i18n("Text only", "cl_newsletter"), "0"); + $oSelNewsType->addOptionElement(0, $oOption); + $oOption = new cHTMLOptionElement(i18n("HTML and text", "cl_newsletter"), "1"); + $oSelNewsType->addOptionElement(1, $oOption); + $oSelNewsType->setDefault($recipient->get("news_type")); + + $oForm->add(i18n("Name", "cl_newsletter"), $oTxtName->render()); + $oForm->add(i18n("E-Mail", "cl_newsletter"), $oTxtEMail->render()); + $oForm->add(i18n("Confirmed", "cl_newsletter"), $oCkbConfirmed->toHTML(false) . " (" . $recipient->get("confirmeddate") . ")"); + $oForm->add(i18n("Deactivated", "cl_newsletter"), $oCkbDeactivated->toHTML(false)); + $oForm->add(i18n("Message type", "cl_newsletter"), $oSelNewsType->render()); + + $aPluginOrder = trim_array(explode(",", getSystemProperty("plugin", "recipients-pluginorder"))); + + // Check out if there are any plugins + if (is_array($aPluginOrder)) { + foreach ($aPluginOrder as $sPlugin) { + if (function_exists("recipients_" . $sPlugin . "_getTitle") && + function_exists("recipients_" . $sPlugin . "_display")) { + $aPluginTitle = call_user_func("recipients_" . $sPlugin . "_getTitle"); + $aPluginDisplay = call_user_func("recipients_" . $sPlugin . "_display", $recipient); + + if (is_array($aPluginTitle) && is_array($aPluginDisplay)) { + foreach ($aPluginTitle as $sKey => $sValue) { + $oForm->add($sValue, $aPluginDisplay[$sKey]); + } + } else { + if (is_array($aPluginTitle) || is_array($aPluginDisplay)) { + $oForm->add(i18n("WARNING", "cl_newsletter"), sprintf(i18n("The plugin %s delivered an array for the displayed titles, but did not return an array for the contents.", "cl_newsletter"), $sPlugin)); + } else { + $oForm->add($aPluginTitle, $aPluginDisplay); + } + } + } + } + } + + $oGroupList = new UI_List; + $oGroupList->setWidth("100%"); + $oGroupList->setBorder(1); + + $oAssocGroups = new RecipientGroupMemberCollection; + $oAssocGroups->link("RecipientGroupCollection"); + $oAssocGroups->setWhere("recipientgroupmembercollection.idnewsrcp", $recipient->get("idnewsrcp")); + $oAssocGroups->setOrder("recipientgroupcollection.groupname"); + $oAssocGroups->query(); + + if ($oAssocGroups->count() == 0) { + $oGroupList->setCell(0, 1, i18n("Recipient is not member of any group", "cl_newsletter")); + } else { + // Headline + $oGroupList->setCell(0, 1, "" . i18n("Groupname", "cl_newsletter") . ""); + $oImgDel = new cHTMLImage("images/delete.gif"); + $oGroupList->setCell(0, 2, $oImgDel->render()); + $oGroupList->setCellAlignment(0, 2, "right"); + + // Data + while ($oAssocGroup = $oAssocGroups->next()) { + $oGroup = $oAssocGroups->fetchObject("RecipientGroupCollection"); + + $oCkbRemove = new cHTMLCheckbox("ckbRemove[]", $oAssocGroup->get("idnewsgroupmember")); + echo ($oGroup->get("idnewsgroupmember")); + $oGroupList->setCell($oAssocGroup->get("idnewsgroupmember"), 1, $oGroup->get("groupname")); + $oGroupList->setCell($oAssocGroup->get("idnewsgroupmember"), 2, $oCkbRemove->toHTML(false)); + $oGroupList->setCellAlignment($oAssocGroup->get("idnewsgroupmember"), 2, "right"); + } + } + + $oForm->add(i18n("Associated Groups", "cl_newsletter"), $oGroupList->render()); + + $oForm->add(i18n("Author", "cl_newsletter"), $classuser->getUserName($recipient->get("author")) . " (" . $recipient->get("created") . ")"); + $oForm->add(i18n("Last modified by", "cl_newsletter"), $classuser->getUserName($recipient->get("modifiedby")) . " (" . $recipient->get("lastmodified") . ")"); + + $oPage->setContent($sNotis . $oForm->render(true)); +} else { + $oPage->setContent($sNotis . ""); +} + +$oPage->render(); +?> diff --git a/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients_import.php b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients_import.php new file mode 100644 index 0000000..a6b51ae --- /dev/null +++ b/branches/conlite20/conlite/plugins/cl_newsletter/includes/include.recipients_import.php @@ -0,0 +1,360 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.6 + * + * {@internal + * created 2007-01-01, Bj�rn Behrens (HerrB) + * modified 2008-06-27, Dominik Ziegler, add security fix + * + * $Id: include.recipients_import.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$oPage = new cPage; +$oRecipients = new RecipientCollection; + +if (is_array($cfg['plugins']['recipients'])) { + foreach ($cfg['plugins']['recipients'] as $plugin) { + plugin_include("recipients", $plugin . "/" . $plugin . ".php"); + } +} + +// Check form data +if ($_REQUEST["selDelimiter"] == "") { + $_REQUEST["selDelimiter"] = "tab"; +} + +$aFields = array(); +$aFieldDetails = array(); +$aFields["name"] = strtolower(i18n("Name", "cl_newsletter")); +$aFieldDetails["name"]["fieldtype"] = "field"; // field, plugin or group +$aFieldDetails["name"]["mandatory"] = false; // true or false +$aFieldDetails["name"]["type"] = "string"; // string, boolean or date +$aFieldDetails["name"]["link"] = false; // plugin name for plugins, recipient group id for groups +$aFieldDetails["name"]["col"] = -1; // Stores column index where this field has been found +$aFields["email"] = strtolower(i18n("Mail", "cl_newsletter")); +$aFieldDetails["email"]["fieldtype"] = "field"; +$aFieldDetails["email"]["mandatory"] = true; +$aFieldDetails["email"]["type"] = "string"; +$aFieldDetails["email"]["link"] = false; +$aFieldDetails["email"]["col"] = -1; +$aFields["deactivated"] = strtolower(i18n("Deactivated", "cl_newsletter")); +$aFieldDetails["deactivated"]["fieldtype"] = "field"; +$aFieldDetails["deactivated"]["mandatory"] = false; +$aFieldDetails["deactivated"]["type"] = "boolean"; +$aFieldDetails["deactivated"]["link"] = false; +$aFieldDetails["deactivated"]["col"] = -1; +$aFields["confirmed"] = strtolower(i18n("Confirmed", "cl_newsletter")); +$aFieldDetails["confirmed"]["fieldtype"] = "field"; +$aFieldDetails["confirmed"]["mandatory"] = false; +$aFieldDetails["confirmed"]["type"] = "boolean"; +$aFieldDetails["confirmed"]["link"] = false; +$aFieldDetails["confirmed"]["col"] = -1; +$aFields["confirmeddate"] = strtolower(i18n("Confirmed Date", "cl_newsletter")); +$aFieldDetails["confirmeddate"]["fieldtype"] = "field"; +$aFieldDetails["confirmeddate"]["mandatory"] = false; +$aFieldDetails["confirmeddate"]["type"] = "date"; +$aFieldDetails["confirmeddate"]["link"] = false; +$aFieldDetails["confirmeddate"]["col"] = -1; +$aFields["news_type"] = strtolower(i18n("Message type", "cl_newsletter")); +$aFieldDetails["news_type"]["fieldtype"] = "field"; +$aFieldDetails["news_type"]["mandatory"] = false; +$aFieldDetails["news_type"]["type"] = "boolean"; +$aFieldDetails["news_type"]["link"] = false; +$aFieldDetails["news_type"]["col"] = -1; + +// Check out if there are any plugins +if (is_array($cfg['plugins']['recipients'])) { + foreach ($cfg['plugins']['recipients'] as $sPlugin) { + if (function_exists("recipients_" . $sPlugin . "_wantedVariables") && function_exists("recipients_" . $sPlugin . "_canonicalVariables")) { + $aPluginTitles = call_user_func("recipients_" . $sPlugin . "_canonicalVariables"); + $aPluginFields = call_user_func("recipients_" . $sPlugin . "_wantedVariables"); + foreach ($aPluginFields as $sField) { + //if ($_REQUEST["ckb".$sField]) { + $aFields[$sField] = strtolower(str_replace(" ", "", $aPluginTitles[$sField])); + $aFieldDetails[$sField]["fieldtype"] = "plugin"; + $aFieldDetails[$sField]["mandatory"] = false; + $aFieldDetails[$sField]["type"] = "string"; + $aFieldDetails[$sField]["link"] = $sPlugin; + $aFieldDetails[$sField]["col"] = -1; + //} + } + } + } +} + +// Get groups +$oRcpGroups = new RecipientGroupCollection; +$oRcpGroups->setWhere("idclient", $client); +$oRcpGroups->setWhere("idlang", $lang); +$oRcpGroups->setOrder("groupname"); +$oRcpGroups->query(); + +while ($oRcpGroup = $oRcpGroups->next()) { + $sField = "g" . $oRcpGroup->get($oRcpGroup->primaryKey); + + $sGroupName = $oRcpGroup->get("groupname"); + $sGroupName = str_replace(" ", "", $sGroupName); + $sGroupName = str_replace("\t", "", $sGroupName); + $sGroupName = str_replace("\n", "", $sGroupName); + $sGroupName = str_replace("\r", "", $sGroupName); + $sGroupName = str_replace("\0", "", $sGroupName); + $sGroupName = str_replace("\x0B;", "", $sGroupName); + + // Only PHP5! + //$sGroupName = str_replace(str_split(" \t\n\r\0\x0B;"), "", $oRcpGroup->get("groupname")); + + $aFields[$sField] = strtolower(clHtmlEntities(trim(i18n("Group", "cl_newsletter") . "_" . $sGroupName))); + $aFieldDetails[$sField]["fieldtype"] = "group"; + $aFieldDetails[$sField]["mandatory"] = false; + $aFieldDetails[$sField]["type"] = "string"; + $aFieldDetails[$sField]["link"] = $oRcpGroup->get($oRcpGroup->primaryKey); + $aFieldDetails[$sField]["col"] = -1; +} + +if ($action == "recipients_import_exec" && $perm->have_perm_area_action("recipients", "recipients_create")) { + $_REQUEST["txtData"] = trim(stripslashes($_REQUEST["txtData"])); + + if ($_REQUEST["txtData"]) { + switch ($_REQUEST["selDelimiter"]) { + case "semicolon": + $sDelimiter = ";"; + break; + default: + $sDelimiter = "\t"; //chr(9); + } + + //echo "
    ".nl2br(stripslashes($_REQUEST["txtData"]))."
    "; + $aLines = explode("\n", stripslashes($_REQUEST["txtData"])); + $iAdded = 0; + $iDublettes = 0; + $iInvalid = 0; + $iRow = 0; + $iCol = 0; + $bStop = false; + $sMessage = ""; + $aMessage = array(); + $aInvalidLines = array(); + $oGroupMembers = new RecipientGroupMemberCollection; + + foreach ($aLines as $sLine) { + $iRow++; + + $aParts = explode($sDelimiter, trim($sLine)); + + if ($iRow == 1) { + $aInvalidLines[] = $sLine; + + foreach ($aParts as $sHeader) { + $sKey = array_search(strtolower(clHtmlEntities(trim($sHeader))), $aFields); + if ($sKey === false) { + $aMessage[] = sprintf(i18n("Given column header '%s' unknown, column ignored", "cl_newsletter"), $sHeader); + } else { + $aFieldDetails[$sKey]["col"] = $iCol; + $iCol++; + } + } + foreach ($aFieldDetails as $sKey => $aDetails) { + if ($aDetails["mandatory"] && $aDetails["col"] == -1) { + $aMessage[] = sprintf(i18n("Mandatory column '%s' wasn't found, import stopped", "cl_newsletter"), $aDetails[$sKey]); + $bStop = true; + } + } + if ($bStop) { + exit; + } else { + $_REQUEST["txtData"] = ""; + } + } else { + $sEMail = trim($aParts[$aFieldDetails["email"]["col"]]); + if ($aFieldDetails["name"]["col"] > -1) { + $sName = trim($aParts[$aFieldDetails["name"]["col"]]); + if ($sName == "") { + $sName = $sEMail; + } + } else { + $sName = $sEMail; + } + if ($sEMail == "") { + $aMessage[] = sprintf(i18n("Item with empty mail address found, item ignored (name: %s, row: %s)", "cl_newsletter"), $sName, $iRow); + $aInvalidLines[] = $sLine; + $iInvalid++; + } else if (!isValidMail($sEMail)) { + $aMessage[] = sprintf(i18n("Mail address '%s' is invalid, item ignored (row: %s)", "cl_newsletter"), $sEMail, $iRow); + $aInvalidLines[] = $sLine; + $iInvalid++; + } else if ($oRecipients->emailExists($sEMail)) { + $aMessage[] = sprintf(i18n("Recipient with mail address '%s' already exists, item skipped (row: %s)", "cl_newsletter"), $sEMail, $iRow); + $aInvalidLines[] = $sLine; + $iDublettes++; + } else { + unset($sLine); + + // Must be $recipient for plugins + if ($recipient = $oRecipients->create($sEMail, $sName)) { + $iID = $recipient->get($recipient->primaryKey); + $iAdded++; + + unset($aPluginValue); + $aPluginValue = array(); + + foreach ($aFieldDetails as $sKey => $aDetails) { + if ($aDetails["col"] > -1) { + switch ($aDetails["fieldtype"]) { + case "field": + switch ($aDetails["type"]) { + case "boolean": + $sValue = strtolower(trim($aParts[$aDetails["col"]])); + + // html is only treated as "true", to get html messages for recipients + // - quick and dirty... + if ($sValue == "yes" || $sValue == i18n("yes", "cl_newsletter") || $sValue == "true" || + (is_numeric($sValue) && $sValue > 0) || + $sValue == "html") { + $recipient->set($sKey, 1); + + if ($sKey == "confirmed") { + // Ensure, that if a recipient is confirmed, a confirmed date + // is available. As "confirmeddate" will be set after "confirmed" + // a specified confirmeddate will overwrite this default + $recipient->set("confirmeddate", date("Y-m-d H:i:s"), false); + } + } else { + $recipient->set($sKey, 0); + } + break; + case "date": + // TODO: Check conversion: Result may be unpredictable... + $sValue = trim($aParts[$aDetails["col"]]); + $recipient->set($sKey, date("Y-m-d H:i:s", strtotime($sValue)), false); + break; + default: + $sValue = trim($aParts[$aDetails["col"]]); + $recipient->set($sKey, $sValue); + } + break; + case "plugin": + // type may be mentioned here, also, but as plugins currently can't + // specify the type, just treat everything as string + // There may be plugins which store more than one value per plugin_store- + // function. As the plugin_store parameter is an array of values, collect + // all values in an array for later storing... unfortunately, that means, + // that we have to go through the fields array second time per item *sigh* + $aPluginValue[$aDetails["link"]][$sKey] = trim($aParts[$aDetails["col"]]); + break; + case "group": + // Add recipient to group + $sValue = strtolower(trim($aParts[$aDetails["col"]])); + + if ($sValue == "yes" || $sValue == i18n("yes", "cl_newsletter") || + $sValue == "true" || (is_numeric($sValue) && $sValue > 0)) { + $oGroupMembers->create($aDetails["link"], $iID); + } + break; + } + } + } + // Store all base data + $recipient->store(); + + // Store plugin data (to store plugin data, only, where the column has been found in the data + // should be faster than going through all plugins and store mostly empty arrays) + $sCurrentPlugin = ""; + foreach ($aFieldDetails as $sKey => $aDetails) { + if ($aDetails["col"] > -1 && + $aDetails["fieldtype"] == "plugin" && + $aDetails["link"] !== $sCurrentPlugin) { + $sCurrentPlugin = $aDetails["link"]; + + call_user_func("recipients_" . $sCurrentPlugin . "_store", $aPluginValue[$sCurrentPlugin]); + } + } + } + } + } + } + if (count($aInvalidLines) > 1) { + $_REQUEST["txtData"] = implode("\n", $aInvalidLines); + } + if (count($aMessage) > 0) { + $sMessage = $notification->returnNotification("warning", implode("
    ", $aMessage)) . "
    "; + } + $sMessage .= $notification->returnNotification("info", sprintf(i18n("%d recipients added, %d recipients skipped (email already exists) and %d invalid recipients/e-mail adresses ignored. Invalid recipients are shown (if any).", "cl_newsletter"), $iAdded, $iDublettes, $iInvalid)); + if ($iAdded > 0) { + $oPage->setReload(); + } + } +} + +$oForm = new UI_Table_Form("properties"); +$oForm->setVar("frame", $frame); +$oForm->setVar("area", $area); +$oForm->setVar("action", "recipients_import_exec"); + +$oForm->addHeader(i18n("Import recipients", "cl_newsletter")); + +$oSelDelimiter = new cHTMLSelectElement("selDelimiter"); +$aItems = array(); +$aItems[] = array("tab", i18n("Tab", "cl_newsletter")); +$aItems[] = array("semicolon", i18n("Semicolon", "cl_newsletter")); +$oSelDelimiter->autoFill($aItems); +$oSelDelimiter->setDefault($_REQUEST["selDelimiter"]); +$oForm->add(i18n("Delimiter", "cl_newsletter"), $oSelDelimiter->render()); + +$oAreaData = new cHTMLTextarea("txtData", $_REQUEST["txtData"], 80, 20); + +$sInfo = '' . i18n("Import information", "cl_newsletter") . '' . + '
    \n"; + } + + return $status; + } +} diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_undefined.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_undefined.php new file mode 100644 index 0000000..d6f4bf6 --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_internal_undefined.php @@ -0,0 +1,68 @@ +class = $class; + } + + /** + * Wrapper for obsolete class Smarty_Internal_Runtime_ValidateCompiled + * + * @param \Smarty_Internal_Template $tpl + * @param array $properties special template properties + * @param bool $cache flag if called from cache file + * + * @return bool false + */ + public function decodeProperties(Smarty_Internal_Template $tpl, $properties, $cache = false) + { + if ($cache) { + $tpl->cached->valid = false; + } else { + $tpl->mustCompile = true; + } + return false; + } + + /** + * Call error handler for undefined method + * + * @param string $name unknown method-name + * @param array $args argument array + * + * @return mixed + * @throws SmartyException + */ + public function __call($name, $args) + { + if (isset($this->class)) { + throw new SmartyException("undefined extension class '{$this->class}'"); + } else { + throw new SmartyException(get_class($args[ 0 ]) . "->{$name}() undefined method"); + } + } +} \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource.php new file mode 100644 index 0000000..ea673ea --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource.php @@ -0,0 +1,254 @@ + 'smarty_internal_resource_file.php', + 'string' => 'smarty_internal_resource_string.php', + 'extends' => 'smarty_internal_resource_extends.php', + 'stream' => 'smarty_internal_resource_stream.php', + 'eval' => 'smarty_internal_resource_eval.php', + 'php' => 'smarty_internal_resource_php.php'); + + /** + * Flag if resource does implement populateCompiledFilepath() method + * + * @var bool + */ + public $hasCompiledHandler = false; + + /** + * Load template's source into current template object + * + * @param Smarty_Template_Source $source source object + * + * @return string template source + * @throws SmartyException if source cannot be loaded + */ + abstract public function getContent(Smarty_Template_Source $source); + + /** + * populate Source Object with meta data from Resource + * + * @param Smarty_Template_Source $source source object + * @param Smarty_Internal_Template $_template template object + */ + abstract public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null); + + /** + * populate Source Object with timestamp and exists from Resource + * + * @param Smarty_Template_Source $source source object + */ + public function populateTimestamp(Smarty_Template_Source $source) + { + // intentionally left blank + } + + /** + * modify resource_name according to resource handlers specifications + * + * @param Smarty $smarty Smarty instance + * @param string $resource_name resource_name to make unique + * @param boolean $isConfig flag for config resource + * + * @return string unique resource name + */ + public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false) + { + if ($isConfig) { + if (!isset($smarty->_joined_config_dir)) { + $smarty->getTemplateDir(null, true); + } + return get_class($this) . '#' . $smarty->_joined_config_dir . '#' . $resource_name; + } else { + if (!isset($smarty->_joined_template_dir)) { + $smarty->getTemplateDir(); + } + return get_class($this) . '#' . $smarty->_joined_template_dir . '#' . $resource_name; + } + } + + /** + * Determine basename for compiled filename + * + * @param Smarty_Template_Source $source source object + * + * @return string resource's basename + */ + public function getBasename(Smarty_Template_Source $source) + { + return basename(preg_replace('![^\w]+!', '_', $source->name)); + } + + /** + * Load Resource Handler + * + * @param Smarty $smarty smarty object + * @param string $type name of the resource + * + * @throws SmartyException + * @return Smarty_Resource Resource Handler + */ + public static function load(Smarty $smarty, $type) + { + // try smarty's cache + if (isset($smarty->_cache[ 'resource_handlers' ][ $type ])) { + return $smarty->_cache[ 'resource_handlers' ][ $type ]; + } + + // try registered resource + if (isset($smarty->registered_resources[ $type ])) { + return $smarty->_cache[ 'resource_handlers' ][ $type ] = + $smarty->registered_resources[ $type ] instanceof Smarty_Resource ? + $smarty->registered_resources[ $type ] : new Smarty_Internal_Resource_Registered(); + } + + // try sysplugins dir + if (isset(self::$sysplugins[ $type ])) { + $_resource_class = 'Smarty_Internal_Resource_' . ucfirst($type); + return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class(); + } + + // try plugins dir + $_resource_class = 'Smarty_Resource_' . ucfirst($type); + if ($smarty->loadPlugin($_resource_class)) { + if (class_exists($_resource_class, false)) { + return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class(); + } else { + $smarty->registerResource($type, + array("smarty_resource_{$type}_source", "smarty_resource_{$type}_timestamp", + "smarty_resource_{$type}_secure", "smarty_resource_{$type}_trusted")); + // give it another try, now that the resource is registered properly + return self::load($smarty, $type); + } + } + + // try streams + $_known_stream = stream_get_wrappers(); + if (in_array($type, $_known_stream)) { + // is known stream + if (is_object($smarty->security_policy)) { + $smarty->security_policy->isTrustedStream($type); + } + return $smarty->_cache[ 'resource_handlers' ][ $type ] = new Smarty_Internal_Resource_Stream(); + } + + // TODO: try default_(template|config)_handler + + // give up + throw new SmartyException("Unknown resource type '{$type}'"); + } + + /** + * extract resource_type and resource_name from template_resource and config_resource + * @note "C:/foo.tpl" was forced to file resource up till Smarty 3.1.3 (including). + * + * @param string $resource_name template_resource or config_resource to parse + * @param string $default_resource the default resource_type defined in $smarty + * + * @return array with parsed resource name and type + */ + public static function parseResourceName($resource_name, $default_resource) + { + if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]/', $resource_name, $match)) { + $type = $match[ 1 ]; + $name = substr($resource_name, strlen($match[ 0 ])); + } else { + // no resource given, use default + // or single character before the colon is not a resource type, but part of the filepath + $type = $default_resource; + $name = $resource_name; + } + return array($name, $type); + } + + /** + * modify template_resource according to resource handlers specifications + * + * @param \Smarty_Internal_Template|\Smarty $obj Smarty instance + * @param string $template_resource template_resource to extract resource handler and name of + * + * @return string unique resource name + */ + public static function getUniqueTemplateName($obj, $template_resource) + { + $smarty = $obj->_getSmartyObj(); + list($name, $type) = self::parseResourceName($template_resource, $smarty->default_resource_type); + // TODO: optimize for Smarty's internal resource types + $resource = Smarty_Resource::load($smarty, $type); + // go relative to a given template? + $_file_is_dotted = $name[ 0 ] == '.' && ($name[ 1 ] == '.' || $name[ 1 ] == '/'); + if ($obj->_isTplObj() && $_file_is_dotted && + ($obj->source->type == 'file' || $obj->parent->source->type == 'extends') + ) { + $name = $smarty->_realpath(dirname($obj->parent->source->filepath) . $smarty->ds . $name); + } + return $resource->buildUniqueResourceName($smarty, $name); + } + + /* + * Check if resource must check time stamps when when loading complied or cached templates. + * Resources like 'extends' which use source components my disable timestamp checks on own resource. + * + * @return bool + */ + public function checkTimestamps() + { + return true; + } + + /** + * initialize Source Object for given resource + * wrapper for backward compatibility to versions < 3.1.22 + * Either [$_template] or [$smarty, $template_resource] must be specified + * + * @param Smarty_Internal_Template $_template template object + * @param Smarty $smarty smarty object + * @param string $template_resource resource identifier + * + * @return Smarty_Template_Source Source Object + */ + public static function source(Smarty_Internal_Template $_template = null, Smarty $smarty = null, + $template_resource = null) + { + return Smarty_Template_Source::load($_template, $smarty, $template_resource); + } +} + diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource_custom.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource_custom.php new file mode 100644 index 0000000..77f619e --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource_custom.php @@ -0,0 +1,95 @@ +filepath = $source->type . ':' . substr(preg_replace('/[^A-Za-z0-9.]/','',$source->name),0,25); + $source->uid = sha1($source->type . ':' . $source->name); + + $mtime = $this->fetchTimestamp($source->name); + if ($mtime !== null) { + $source->timestamp = $mtime; + } else { + $this->fetch($source->name, $content, $timestamp); + $source->timestamp = isset($timestamp) ? $timestamp : false; + if (isset($content)) { + $source->content = $content; + } + } + $source->exists = !!$source->timestamp; + } + + /** + * Load template's source into current template object + * + * @param Smarty_Template_Source $source source object + * + * @return string template source + * @throws SmartyException if source cannot be loaded + */ + public function getContent(Smarty_Template_Source $source) + { + $this->fetch($source->name, $content, $timestamp); + if (isset($content)) { + return $content; + } + + throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); + } + + /** + * Determine basename for compiled filename + * + * @param Smarty_Template_Source $source source object + * + * @return string resource's basename + */ + public function getBasename(Smarty_Template_Source $source) + { + return basename(substr(preg_replace('/[^A-Za-z0-9.]/','',$source->name),0,25)); + } +} diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource_recompiled.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource_recompiled.php new file mode 100644 index 0000000..7e51d1b --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource_recompiled.php @@ -0,0 +1,92 @@ +compiled; + $compiled->file_dependency = array(); + $compiled->includes = array(); + $compiled->nocache_hash = null; + $compiled->unifunc = null; + $level = ob_get_level(); + ob_start(); + $_smarty_tpl->loadCompiler(); + // call compiler + try { + eval("?>" . $_smarty_tpl->compiler->compileTemplate($_smarty_tpl)); + } + catch (Exception $e) { + unset($_smarty_tpl->compiler); + while (ob_get_level() > $level) { + ob_end_clean(); + } + throw $e; + } + // release compiler object to free memory + unset($_smarty_tpl->compiler); + ob_get_clean(); + $compiled->timestamp = time(); + $compiled->exists = true; + } + + /** + * populate Compiled Object with compiled filepath + * + * @param Smarty_Template_Compiled $compiled compiled object + * @param Smarty_Internal_Template $_template template object + * + * @return void + */ + public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template) + { + $compiled->filepath = false; + $compiled->timestamp = false; + $compiled->exists = false; + } + + /* + * Disable timestamp checks for recompiled resource. + * + * @return bool + */ + public function checkTimestamps() + { + return false; + } +} diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource_uncompiled.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource_uncompiled.php new file mode 100644 index 0000000..554f3ae --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_resource_uncompiled.php @@ -0,0 +1,49 @@ +filepath = $_template->source->filepath; + $compiled->timestamp = $_template->source->timestamp; + $compiled->exists = $_template->source->exists; + if ($_template->smarty->merge_compiled_includes || $_template->source->handler->checkTimestamps()) { + $compiled->file_dependency[ $_template->source->uid ] = + array($compiled->filepath, $compiled->timestamp, $_template->source->type,); + } + } +} diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_security.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_security.php new file mode 100644 index 0000000..4f75f75 --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_security.php @@ -0,0 +1,730 @@ +" tags in templates. + * possible values: + *
      + *
    • Smarty::PHP_PASSTHRU -> echo PHP tags as they are
    • + *
    • Smarty::PHP_QUOTE -> escape tags as entities
    • + *
    • Smarty::PHP_REMOVE -> remove php tags
    • + *
    • Smarty::PHP_ALLOW -> execute php tags
    • + *
    + * + * @var integer + */ + public $php_handling = Smarty::PHP_PASSTHRU; + + /** + * This is the list of template directories that are considered secure. + * $template_dir is in this list implicitly. + * + * @var array + */ + public $secure_dir = array(); + + /** + * This is an array of directories where trusted php scripts reside. + * {@link $security} is disabled during their inclusion/execution. + * + * @var array + */ + public $trusted_dir = array(); + + /** + * List of regular expressions (PCRE) that include trusted URIs + * + * @var array + */ + public $trusted_uri = array(); + + /** + * List of trusted constants names + * + * @var array + */ + public $trusted_constants = array(); + + /** + * This is an array of trusted static classes. + * If empty access to all static classes is allowed. + * If set to 'none' none is allowed. + * + * @var array + */ + public $static_classes = array(); + + /** + * This is an nested array of trusted classes and static methods. + * If empty access to all static classes and methods is allowed. + * Format: + * array ( + * 'class_1' => array('method_1', 'method_2'), // allowed methods listed + * 'class_2' => array(), // all methods of class allowed + * ) + * If set to null none is allowed. + * + * @var array + */ + public $trusted_static_methods = array(); + + /** + * This is an array of trusted static properties. + * If empty access to all static classes and properties is allowed. + * Format: + * array ( + * 'class_1' => array('prop_1', 'prop_2'), // allowed properties listed + * 'class_2' => array(), // all properties of class allowed + * ) + * If set to null none is allowed. + * + * @var array + */ + public $trusted_static_properties = array(); + + /** + * This is an array of trusted PHP functions. + * If empty all functions are allowed. + * To disable all PHP functions set $php_functions = null. + * + * @var array + */ + public $php_functions = array('isset', 'empty', 'count', 'sizeof', 'in_array', 'is_array', 'time',); + + /** + * This is an array of trusted PHP modifiers. + * If empty all modifiers are allowed. + * To disable all modifier set $php_modifiers = null. + * + * @var array + */ + public $php_modifiers = array('escape', 'count', 'nl2br',); + + /** + * This is an array of allowed tags. + * If empty no restriction by allowed_tags. + * + * @var array + */ + public $allowed_tags = array(); + + /** + * This is an array of disabled tags. + * If empty no restriction by disabled_tags. + * + * @var array + */ + public $disabled_tags = array(); + + /** + * This is an array of allowed modifier plugins. + * If empty no restriction by allowed_modifiers. + * + * @var array + */ + public $allowed_modifiers = array(); + + /** + * This is an array of disabled modifier plugins. + * If empty no restriction by disabled_modifiers. + * + * @var array + */ + public $disabled_modifiers = array(); + + /** + * This is an array of disabled special $smarty variables. + * + * @var array + */ + public $disabled_special_smarty_vars = array(); + + /** + * This is an array of trusted streams. + * If empty all streams are allowed. + * To disable all streams set $streams = null. + * + * @var array + */ + public $streams = array('file'); + + /** + * + flag if constants can be accessed from template + * + * @var boolean + */ + public $allow_constants = true; + + /** + * + flag if super globals can be accessed from template + * + * @var boolean + */ + public $allow_super_globals = true; + + /** + * max template nesting level + * + * @var int + */ + public $max_template_nesting = 0; + + /** + * current template nesting level + * + * @var int + */ + private $_current_template_nesting = 0; + + /** + * Cache for $resource_dir lookup + * + * @var array + */ + protected $_resource_dir = array(); + + /** + * Cache for $template_dir lookup + * + * @var array + */ + protected $_template_dir = array(); + + /** + * Cache for $config_dir lookup + * + * @var array + */ + protected $_config_dir = array(); + + /** + * Cache for $secure_dir lookup + * + * @var array + */ + protected $_secure_dir = array(); + + /** + * Cache for $php_resource_dir lookup + * + * @var array + */ + protected $_php_resource_dir = null; + + /** + * Cache for $trusted_dir lookup + * + * @var array + */ + protected $_trusted_dir = null; + + /** + * Cache for include path status + * + * @var bool + */ + protected $_include_path_status = false; + + /** + * Cache for $_include_array lookup + * + * @var array + */ + protected $_include_dir = array(); + + /** + * @param Smarty $smarty + */ + public function __construct($smarty) + { + $this->smarty = $smarty; + $this->smarty->_cache[ 'template_dir_new' ] = true; + $this->smarty->_cache[ 'config_dir_new' ] = true; + } + + /** + * Check if PHP function is trusted. + * + * @param string $function_name + * @param object $compiler compiler object + * + * @return boolean true if function is trusted + * @throws SmartyCompilerException if php function is not trusted + */ + public function isTrustedPhpFunction($function_name, $compiler) + { + if (isset($this->php_functions) && + (empty($this->php_functions) || in_array($function_name, $this->php_functions)) + ) { + return true; + } + + $compiler->trigger_template_error("PHP function '{$function_name}' not allowed by security setting"); + + return false; // should not, but who knows what happens to the compiler in the future? + } + + /** + * Check if static class is trusted. + * + * @param string $class_name + * @param object $compiler compiler object + * + * @return boolean true if class is trusted + * @throws SmartyCompilerException if static class is not trusted + */ + public function isTrustedStaticClass($class_name, $compiler) + { + if (isset($this->static_classes) && + (empty($this->static_classes) || in_array($class_name, $this->static_classes)) + ) { + return true; + } + + $compiler->trigger_template_error("access to static class '{$class_name}' not allowed by security setting"); + + return false; // should not, but who knows what happens to the compiler in the future? + } + + /** + * Check if static class method/property is trusted. + * + * @param string $class_name + * @param string $params + * @param object $compiler compiler object + * + * @return boolean true if class method is trusted + * @throws SmartyCompilerException if static class method is not trusted + */ + public function isTrustedStaticClassAccess($class_name, $params, $compiler) + { + if (!isset($params[ 2 ])) { + // fall back + return $this->isTrustedStaticClass($class_name, $compiler); + } + if ($params[ 2 ] == 'method') { + $allowed = $this->trusted_static_methods; + $name = substr($params[ 0 ], 0, strpos($params[ 0 ], '(')); + } else { + $allowed = $this->trusted_static_properties; + // strip '$' + $name = substr($params[ 0 ], 1); + } + if (isset($allowed)) { + if (empty($allowed)) { + // fall back + return $this->isTrustedStaticClass($class_name, $compiler); + } + if (isset($allowed[ $class_name ]) && + (empty($allowed[ $class_name ]) || in_array($name, $allowed[ $class_name ])) + ) { + return true; + } + } + $compiler->trigger_template_error("access to static class '{$class_name}' {$params[2]} '{$name}' not allowed by security setting"); + return false; // should not, but who knows what happens to the compiler in the future? + } + + /** + * Check if PHP modifier is trusted. + * + * @param string $modifier_name + * @param object $compiler compiler object + * + * @return boolean true if modifier is trusted + * @throws SmartyCompilerException if modifier is not trusted + */ + public function isTrustedPhpModifier($modifier_name, $compiler) + { + if (isset($this->php_modifiers) && + (empty($this->php_modifiers) || in_array($modifier_name, $this->php_modifiers)) + ) { + return true; + } + + $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting"); + + return false; // should not, but who knows what happens to the compiler in the future? + } + + /** + * Check if tag is trusted. + * + * @param string $tag_name + * @param object $compiler compiler object + * + * @return boolean true if tag is trusted + * @throws SmartyCompilerException if modifier is not trusted + */ + public function isTrustedTag($tag_name, $compiler) + { + // check for internal always required tags + if (in_array($tag_name, + array('assign', 'call', 'private_filter', 'private_block_plugin', 'private_function_plugin', + 'private_object_block_function', 'private_object_function', 'private_registered_function', + 'private_registered_block', 'private_special_variable', 'private_print_expression', + 'private_modifier'))) { + return true; + } + // check security settings + if (empty($this->allowed_tags)) { + if (empty($this->disabled_tags) || !in_array($tag_name, $this->disabled_tags)) { + return true; + } else { + $compiler->trigger_template_error("tag '{$tag_name}' disabled by security setting", null, true); + } + } elseif (in_array($tag_name, $this->allowed_tags) && !in_array($tag_name, $this->disabled_tags)) { + return true; + } else { + $compiler->trigger_template_error("tag '{$tag_name}' not allowed by security setting", null, true); + } + + return false; // should not, but who knows what happens to the compiler in the future? + } + + /** + * Check if special $smarty variable is trusted. + * + * @param string $var_name + * @param object $compiler compiler object + * + * @return boolean true if tag is trusted + * @throws SmartyCompilerException if modifier is not trusted + */ + public function isTrustedSpecialSmartyVar($var_name, $compiler) + { + if (!in_array($var_name, $this->disabled_special_smarty_vars)) { + return true; + } else { + $compiler->trigger_template_error("special variable '\$smarty.{$var_name}' not allowed by security setting", + null, true); + } + + return false; // should not, but who knows what happens to the compiler in the future? + } + + /** + * Check if modifier plugin is trusted. + * + * @param string $modifier_name + * @param object $compiler compiler object + * + * @return boolean true if tag is trusted + * @throws SmartyCompilerException if modifier is not trusted + */ + public function isTrustedModifier($modifier_name, $compiler) + { + // check for internal always allowed modifier + if (in_array($modifier_name, array('default'))) { + return true; + } + // check security settings + if (empty($this->allowed_modifiers)) { + if (empty($this->disabled_modifiers) || !in_array($modifier_name, $this->disabled_modifiers)) { + return true; + } else { + $compiler->trigger_template_error("modifier '{$modifier_name}' disabled by security setting", null, + true); + } + } elseif (in_array($modifier_name, $this->allowed_modifiers) && + !in_array($modifier_name, $this->disabled_modifiers) + ) { + return true; + } else { + $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting", null, + true); + } + + return false; // should not, but who knows what happens to the compiler in the future? + } + + /** + * Check if constants are enabled or trusted + * + * @param string $const constant name + * @param object $compiler compiler object + * + * @return bool + */ + public function isTrustedConstant($const, $compiler) + { + if (in_array($const, array('true', 'false', 'null'))) { + return true; + } + if (!empty($this->trusted_constants)) { + if (!in_array(strtolower($const), $this->trusted_constants)) { + $compiler->trigger_template_error("Security: access to constant '{$const}' not permitted"); + return false; + } + return true; + } + if ($this->allow_constants) { + return true; + } + $compiler->trigger_template_error("Security: access to constants not permitted"); + return false; + } + + /** + * Check if stream is trusted. + * + * @param string $stream_name + * + * @return boolean true if stream is trusted + * @throws SmartyException if stream is not trusted + */ + public function isTrustedStream($stream_name) + { + if (isset($this->streams) && (empty($this->streams) || in_array($stream_name, $this->streams))) { + return true; + } + + throw new SmartyException("stream '{$stream_name}' not allowed by security setting"); + } + + /** + * Check if directory of file resource is trusted. + * + * @param string $filepath + * @param null|bool $isConfig + * + * @return bool true if directory is trusted + * @throws \SmartyException if directory is not trusted + */ + public function isTrustedResourceDir($filepath, $isConfig = null) + { + if ($this->_include_path_status !== $this->smarty->use_include_path) { + foreach ($this->_include_dir as $directory) { + unset($this->_resource_dir[ $directory ]); + } + if ($this->smarty->use_include_path) { + $this->_include_dir = array(); + $_dirs = $this->smarty->ext->_getIncludePath->getIncludePathDirs($this->smarty); + foreach ($_dirs as $directory) { + $this->_include_dir[] = $directory; + $this->_resource_dir[ $directory ] = true; + } + } + $this->_include_path_status = $this->smarty->use_include_path; + } + if ($isConfig !== true && + (!isset($this->smarty->_cache[ 'template_dir_new' ]) || $this->smarty->_cache[ 'template_dir_new' ]) + ) { + $_dir = $this->smarty->getTemplateDir(); + if ($this->_template_dir !== $_dir) { + foreach ($this->_template_dir as $directory) { + unset($this->_resource_dir[ $directory ]); + } + foreach ($_dir as $directory) { + $this->_resource_dir[ $directory ] = true; + } + $this->_template_dir = $_dir; + } + $this->smarty->_cache[ 'template_dir_new' ] = false; + } + if ($isConfig !== false && + (!isset($this->smarty->_cache[ 'config_dir_new' ]) || $this->smarty->_cache[ 'config_dir_new' ]) + ) { + $_dir = $this->smarty->getConfigDir(); + if ($this->_config_dir !== $_dir) { + foreach ($this->_config_dir as $directory) { + unset($this->_resource_dir[ $directory ]); + } + foreach ($_dir as $directory) { + $this->_resource_dir[ $directory ] = true; + } + $this->_config_dir = $_dir; + } + $this->smarty->_cache[ 'config_dir_new' ] = false; + } + if ($this->_secure_dir !== (array) $this->secure_dir) { + foreach ($this->_secure_dir as $directory) { + unset($this->_resource_dir[ $directory ]); + } + foreach ((array) $this->secure_dir as $directory) { + $directory = $this->smarty->_realpath($directory . DIRECTORY_SEPARATOR, true); + $this->_resource_dir[ $directory ] = true; + } + $this->_secure_dir = (array) $this->secure_dir; + } + $this->_resource_dir = $this->_checkDir($filepath, $this->_resource_dir); + return true; + } + + /** + * Check if URI (e.g. {fetch} or {html_image}) is trusted + * To simplify things, isTrustedUri() resolves all input to "{$PROTOCOL}://{$HOSTNAME}". + * So "http://username:password@hello.world.example.org:8080/some-path?some=query-string" + * is reduced to "http://hello.world.example.org" prior to applying the patters from {@link $trusted_uri}. + * + * @param string $uri + * + * @return boolean true if URI is trusted + * @throws SmartyException if URI is not trusted + * @uses $trusted_uri for list of patterns to match against $uri + */ + public function isTrustedUri($uri) + { + $_uri = parse_url($uri); + if (!empty($_uri[ 'scheme' ]) && !empty($_uri[ 'host' ])) { + $_uri = $_uri[ 'scheme' ] . '://' . $_uri[ 'host' ]; + foreach ($this->trusted_uri as $pattern) { + if (preg_match($pattern, $_uri)) { + return true; + } + } + } + + throw new SmartyException("URI '{$uri}' not allowed by security setting"); + } + + /** + * Check if directory of file resource is trusted. + * + * @param string $filepath + * + * @return boolean true if directory is trusted + * @throws SmartyException if PHP directory is not trusted + */ + public function isTrustedPHPDir($filepath) + { + if (empty($this->trusted_dir)) { + throw new SmartyException("directory '{$filepath}' not allowed by security setting (no trusted_dir specified)"); + } + + // check if index is outdated + if (!$this->_trusted_dir || $this->_trusted_dir !== $this->trusted_dir) { + $this->_php_resource_dir = array(); + + $this->_trusted_dir = $this->trusted_dir; + foreach ((array) $this->trusted_dir as $directory) { + $directory = $this->smarty->_realpath($directory . DIRECTORY_SEPARATOR, true); + $this->_php_resource_dir[ $directory ] = true; + } + } + + $this->_php_resource_dir = + $this->_checkDir($this->smarty->_realpath($filepath, true), $this->_php_resource_dir); + return true; + } + + /** + * Check if file is inside a valid directory + * + * @param string $filepath + * @param array $dirs valid directories + * + * @return array + * @throws \SmartyException + */ + private function _checkDir($filepath, $dirs) + { + $directory = dirname($filepath) . DIRECTORY_SEPARATOR; + $_directory = array(); + while (true) { + // remember the directory to add it to _resource_dir in case we're successful + $_directory[ $directory ] = true; + // test if the directory is trusted + if (isset($dirs[ $directory ])) { + // merge sub directories of current $directory into _resource_dir to speed up subsequent lookup + $dirs = array_merge($dirs, $_directory); + + return $dirs; + } + // abort if we've reached root + if (!preg_match('#[\\\/][^\\\/]+[\\\/]$#', $directory)) { + break; + } + // bubble up one level + $directory = preg_replace('#[\\\/][^\\\/]+[\\\/]$#', DIRECTORY_SEPARATOR, $directory); + } + + // give up + throw new SmartyException("directory '{$filepath}' not allowed by security setting"); + } + + /** + * Loads security class and enables security + * + * @param \Smarty $smarty + * @param string|Smarty_Security $security_class if a string is used, it must be class-name + * + * @return \Smarty current Smarty instance for chaining + * @throws \SmartyException when an invalid class name is provided + */ + public static function enableSecurity(Smarty $smarty, $security_class) + { + if ($security_class instanceof Smarty_Security) { + $smarty->security_policy = $security_class; + return; + } elseif (is_object($security_class)) { + throw new SmartyException("Class '" . get_class($security_class) . "' must extend Smarty_Security."); + } + if ($security_class == null) { + $security_class = $smarty->security_class; + } + if (!class_exists($security_class)) { + throw new SmartyException("Security class '$security_class' is not defined"); + } elseif ($security_class !== 'Smarty_Security' && !is_subclass_of($security_class, 'Smarty_Security')) { + throw new SmartyException("Class '$security_class' must extend Smarty_Security."); + } else { + $smarty->security_policy = new $security_class($smarty); + } + return; + } + /** + * Start template processing + * + * @param $template + * + * @throws SmartyException + */ + public function startTemplate($template) + { + if ($this->max_template_nesting > 0 && $this->_current_template_nesting ++ >= $this->max_template_nesting) { + throw new SmartyException("maximum template nesting level of '{$this->max_template_nesting}' exceeded when calling '{$template->template_resource}'"); + } + } + + /** + * Exit template processing + * + */ + public function endTemplate() + { + if ($this->max_template_nesting > 0) { + $this->_current_template_nesting --; + } + } + + /** + * Register callback functions call at start/end of template rendering + * + * @param \Smarty_Internal_Template $template + */ + public function registerCallBacks(Smarty_Internal_Template $template) + { + $template->startRenderCallbacks[] = array($this, 'startTemplate'); + $template->endRenderCallbacks[] = array($this, 'endTemplate'); + } +} diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_cached.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_cached.php new file mode 100644 index 0000000..58f0daf --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_cached.php @@ -0,0 +1,256 @@ +compile_id = $_template->compile_id; + $this->cache_id = $_template->cache_id; + $this->source = $_template->source; + if (!class_exists('Smarty_CacheResource', false)) { + require SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php'; + } + $this->handler = Smarty_CacheResource::load($_template->smarty); + } + + /** + * @param Smarty_Internal_Template $_template + * + * @return Smarty_Template_Cached + */ + static function load(Smarty_Internal_Template $_template) + { + $_template->cached = new Smarty_Template_Cached($_template); + $_template->cached->handler->populate($_template->cached, $_template); + // caching enabled ? + if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || + $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || $_template->source->handler->recompiled + ) { + $_template->cached->valid = false; + } + return $_template->cached; + } + + /** + * Render cache template + * + * @param \Smarty_Internal_Template $_template + * @param bool $no_output_filter + * + * @throws \Exception + */ + public function render(Smarty_Internal_Template $_template, $no_output_filter = true) + { + if ($this->isCached($_template)) { + if ($_template->smarty->debugging) { + if (!isset($_template->smarty->_debug)) { + $_template->smarty->_debug = new Smarty_Internal_Debug(); + } + $_template->smarty->_debug->start_cache($_template); + } + if (!$this->processed) { + $this->process($_template); + } + $this->getRenderedTemplateCode($_template); + if ($_template->smarty->debugging) { + $_template->smarty->_debug->end_cache($_template); + } + return; + } else { + $_template->smarty->ext->_updateCache->updateCache($this, $_template, $no_output_filter); + } + } + + /** + * Check if cache is valid, lock cache if required + * + * @param \Smarty_Internal_Template $_template + * + * @return bool flag true if cache is valid + */ + public function isCached(Smarty_Internal_Template $_template) + { + if ($this->valid !== null) { + return $this->valid; + } + while (true) { + while (true) { + if ($this->exists === false || $_template->smarty->force_compile || $_template->smarty->force_cache) { + $this->valid = false; + } else { + $this->valid = true; + } + if ($this->valid && $_template->caching == Smarty::CACHING_LIFETIME_CURRENT && + $_template->cache_lifetime >= 0 && time() > ($this->timestamp + $_template->cache_lifetime) + ) { + // lifetime expired + $this->valid = false; + } + if ($this->valid && $_template->smarty->compile_check == 1 && + $_template->source->getTimeStamp() > $this->timestamp + ) { + $this->valid = false; + } + if ($this->valid || !$_template->smarty->cache_locking) { + break; + } + if (!$this->handler->locked($_template->smarty, $this)) { + $this->handler->acquireLock($_template->smarty, $this); + break 2; + } + $this->handler->populate($this, $_template); + } + if ($this->valid) { + if (!$_template->smarty->cache_locking || $this->handler->locked($_template->smarty, $this) === null) { + // load cache file for the following checks + if ($_template->smarty->debugging) { + $_template->smarty->_debug->start_cache($_template); + } + if ($this->handler->process($_template, $this) === false) { + $this->valid = false; + } else { + $this->processed = true; + } + if ($_template->smarty->debugging) { + $_template->smarty->_debug->end_cache($_template); + } + } else { + $this->is_locked = true; + continue; + } + } else { + return $this->valid; + } + if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED && + $_template->cached->cache_lifetime >= 0 && + (time() > ($_template->cached->timestamp + $_template->cached->cache_lifetime)) + ) { + $this->valid = false; + } + if ($_template->smarty->cache_locking) { + if (!$this->valid) { + $this->handler->acquireLock($_template->smarty, $this); + } elseif ($this->is_locked) { + $this->handler->releaseLock($_template->smarty, $this); + } + } + return $this->valid; + } + return $this->valid; + } + + /** + * Process cached template + * + * @param Smarty_Internal_Template $_template template object + * @param bool $update flag if called because cache update + */ + public function process(Smarty_Internal_Template $_template, $update = false) + { + if ($this->handler->process($_template, $this, $update) === false) { + $this->valid = false; + } + if ($this->valid) { + $this->processed = true; + } else { + $this->processed = false; + } + } + + /** + * Read cache content from handler + * + * @param Smarty_Internal_Template $_template template object + * + * @return string|false content + */ + public function read(Smarty_Internal_Template $_template) + { + if (!$_template->source->handler->recompiled) { + return $this->handler->readCachedContent($_template); + } + return false; + } +} diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_compiled.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_compiled.php new file mode 100644 index 0000000..1cd4d29 --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_compiled.php @@ -0,0 +1,257 @@ +source->handler->hasCompiledHandler) { + $_template->source->handler->populateCompiledFilepath($compiled, $_template); + } else { + $compiled->populateCompiledFilepath($_template); + } + return $compiled; + } + + /** + * populate Compiled Object with compiled filepath + * + * @param Smarty_Internal_Template $_template template object + **/ + public function populateCompiledFilepath(Smarty_Internal_Template $_template) + { + $source = &$_template->source; + $smarty = &$_template->smarty; + $this->filepath = $smarty->getCompileDir(); + if (isset($_template->compile_id)) { + $this->filepath .= preg_replace('![^\w]+!', '_', $_template->compile_id) . + ($smarty->use_sub_dirs ? $smarty->ds : '^'); + } + // if use_sub_dirs, break file into directories + if ($smarty->use_sub_dirs) { + $this->filepath .= $source->uid[ 0 ] . $source->uid[ 1 ] . $smarty->ds . $source->uid[ 2 ] . + $source->uid[ 3 ] . $smarty->ds . $source->uid[ 4 ] . $source->uid[ 5 ] . $smarty->ds; + } + $this->filepath .= $source->uid . '_'; + if ($source->isConfig) { + $this->filepath .= (int) $smarty->config_read_hidden + (int) $smarty->config_booleanize * 2 + + (int) $smarty->config_overwrite * 4; + } else { + $this->filepath .= (int) $smarty->merge_compiled_includes + (int) $smarty->escape_html * 2 + + (($smarty->merge_compiled_includes && $source->type === 'extends') ? + (int) $smarty->extends_recursion * 4 : 0); + } + $this->filepath .= '.' . $source->type; + $basename = $source->handler->getBasename($source); + if (!empty($basename)) { + $this->filepath .= '.' . $basename; + } + if ($_template->caching) { + $this->filepath .= '.cache'; + } + $this->filepath .= '.php'; + $this->timestamp = $this->exists = is_file($this->filepath); + if ($this->exists) { + $this->timestamp = filemtime($this->filepath); + } + } + + /** + * render compiled template code + * + * @param Smarty_Internal_Template $_template + * + * @return string + * @throws Exception + */ + public function render(Smarty_Internal_Template $_template) + { + // checks if template exists + if (!$_template->source->exists) { + $type = $_template->source->isConfig ? 'config' : 'template'; + throw new SmartyException("Unable to load {$type} '{$_template->source->type}:{$_template->source->name}'"); + } + if ($_template->smarty->debugging) { + if (!isset($_template->smarty->_debug)) { + $_template->smarty->_debug = new Smarty_Internal_Debug(); + } + $_template->smarty->_debug->start_render($_template); + } + if (!$this->processed) { + $this->process($_template); + } + if (isset($_template->cached)) { + $_template->cached->file_dependency = + array_merge($_template->cached->file_dependency, $this->file_dependency); + } + if ($_template->source->handler->uncompiled) { + $_template->source->handler->renderUncompiled($_template->source, $_template); + } else { + $this->getRenderedTemplateCode($_template); + } + if ($_template->caching && $this->has_nocache_code) { + $_template->cached->hashes[ $this->nocache_hash ] = true; + } + if ($_template->smarty->debugging) { + $_template->smarty->_debug->end_render($_template); + } + } + + /** + * load compiled template or compile from source + * + * @param Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template + * + * @throws Exception + */ + public function process(Smarty_Internal_Template $_smarty_tpl) + { + $source = &$_smarty_tpl->source; + $smarty = &$_smarty_tpl->smarty; + if ($source->handler->recompiled) { + $source->handler->process($_smarty_tpl); + } elseif (!$source->handler->uncompiled) { + if (!$this->exists || $smarty->force_compile || + ($smarty->compile_check && $source->getTimeStamp() > $this->getTimeStamp()) + ) { + $this->compileTemplateSource($_smarty_tpl); + $compileCheck = $smarty->compile_check; + $smarty->compile_check = false; + $this->loadCompiledTemplate($_smarty_tpl); + $smarty->compile_check = $compileCheck; + } else { + $_smarty_tpl->mustCompile = true; + @include($this->filepath); + if ($_smarty_tpl->mustCompile) { + $this->compileTemplateSource($_smarty_tpl); + $compileCheck = $smarty->compile_check; + $smarty->compile_check = false; + $this->loadCompiledTemplate($_smarty_tpl); + $smarty->compile_check = $compileCheck; + } + } + $_smarty_tpl->_subTemplateRegister(); + $this->processed = true; + } + } + + /** + * compile template from source + * + * @param Smarty_Internal_Template $_template + * + * @throws Exception + */ + public function compileTemplateSource(Smarty_Internal_Template $_template) + { + $this->file_dependency = array(); + $this->includes = array(); + $this->nocache_hash = null; + $this->unifunc = null; + // compile locking + if ($saved_timestamp = (!$_template->source->handler->recompiled && is_file($this->filepath))) { + $saved_timestamp = $this->getTimeStamp(); + touch($this->filepath); + } + // compile locking + try { + // call compiler + $_template->loadCompiler(); + $this->write($_template, $_template->compiler->compileTemplate($_template)); + } + catch (Exception $e) { + // restore old timestamp in case of error + if ($saved_timestamp && is_file($this->filepath)) { + touch($this->filepath, $saved_timestamp); + } + unset($_template->compiler); + throw $e; + } + // release compiler object to free memory + unset($_template->compiler); + } + + /** + * Write compiled code by handler + * + * @param Smarty_Internal_Template $_template template object + * @param string $code compiled code + * + * @return boolean success + */ + public function write(Smarty_Internal_Template $_template, $code) + { + if (!$_template->source->handler->recompiled) { + if ($_template->smarty->ext->_writeFile->writeFile($this->filepath, $code, $_template->smarty) === true) { + $this->timestamp = $this->exists = is_file($this->filepath); + if ($this->exists) { + $this->timestamp = filemtime($this->filepath); + return true; + } + } + return false; + } + return true; + } + + /** + * Load fresh compiled template by including the PHP file + * HHVM requires a work around because of a PHP incompatibility + * + * @param \Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template + */ + private function loadCompiledTemplate(Smarty_Internal_Template $_smarty_tpl) + { + if (function_exists('opcache_invalidate') + && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1) + ) { + opcache_invalidate($this->filepath, true); + } elseif (function_exists('apc_compile_file')) { + apc_compile_file($this->filepath); + } + if (defined('HHVM_VERSION')) { + eval("?>" . file_get_contents($this->filepath)); + } else { + include($this->filepath); + } + } + + /** + * Read compiled content from handler + * + * @param Smarty_Internal_Template $_template template object + * + * @return string content + */ + public function read(Smarty_Internal_Template $_template) + { + if (!$_template->source->handler->recompiled) { + return file_get_contents($this->filepath); + } + return isset($this->content) ? $this->content : false; + } +} diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_config.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_config.php new file mode 100644 index 0000000..44cdba6 --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_config.php @@ -0,0 +1,99 @@ + true, 'php' => true); + if ($_template) { + $smarty = $_template->smarty; + $template_resource = $_template->template_resource; + } + if (empty($template_resource)) { + throw new SmartyException('Source: Missing name'); + } + // parse resource_name, load resource handler + list($name, $type) = Smarty_Resource::parseResourceName($template_resource, $smarty->default_config_type); + // make sure configs are not loaded via anything smarty can't handle + if (isset($_incompatible_resources[ $type ])) { + throw new SmartyException ("Unable to use resource '{$type}' for config"); + } + $source = new Smarty_Template_Config($smarty, $template_resource, $type, $name); + $source->handler->populate($source, $_template); + if (!$source->exists && isset($smarty->default_config_handler_func)) { + Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source); + $source->handler->populate($source, $_template); + } + return $source; + } +} diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_resource_base.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_resource_base.php new file mode 100644 index 0000000..6cc008a --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_resource_base.php @@ -0,0 +1,158 @@ +smarty; + $_template->isRenderingCache = $this->isCache; + $level = ob_get_level(); + try { + if (!isset($unifunc)) { + $unifunc = $this->unifunc; + } + if (empty($unifunc) || !function_exists($unifunc)) { + throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'"); + } + if ($_template->startRenderCallbacks) { + foreach ($_template->startRenderCallbacks as $callback) { + call_user_func($callback, $_template); + } + } + $unifunc($_template); + foreach ($_template->endRenderCallbacks as $callback) { + call_user_func($callback, $_template); + } + $_template->isRenderingCache = false; + } + catch (Exception $e) { + $_template->isRenderingCache = false; + while (ob_get_level() > $level) { + ob_end_clean(); + } + if (isset($smarty->security_policy)) { + $smarty->security_policy->endTemplate(); + } + throw $e; + } + } + + /** + * Get compiled time stamp + * + * @return int + */ + public function getTimeStamp() + { + if ($this->exists && !$this->timestamp) { + $this->timestamp = filemtime($this->filepath); + } + return $this->timestamp; + } +} diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_source.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_source.php new file mode 100644 index 0000000..fdb3dea --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_template_source.php @@ -0,0 +1,210 @@ +handler = + isset($smarty->_cache[ 'resource_handlers' ][ $type ]) ? $smarty->_cache[ 'resource_handlers' ][ $type ] : + Smarty_Resource::load($smarty, $type); + $this->smarty = $smarty; + $this->resource = $resource; + $this->type = $type; + $this->name = $name; + } + + /** + * initialize Source Object for given resource + * Either [$_template] or [$smarty, $template_resource] must be specified + * + * @param Smarty_Internal_Template $_template template object + * @param Smarty $smarty smarty object + * @param string $template_resource resource identifier + * + * @return Smarty_Template_Source Source Object + * @throws SmartyException + */ + public static function load(Smarty_Internal_Template $_template = null, Smarty $smarty = null, + $template_resource = null) + { + if ($_template) { + $smarty = $_template->smarty; + $template_resource = $_template->template_resource; + } + if (empty($template_resource)) { + throw new SmartyException('Source: Missing name'); + } + // parse resource_name, load resource handler, identify unique resource name + if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]([\s\S]*)$/', $template_resource, $match)) { + $type = $match[ 1 ]; + $name = $match[ 2 ]; + } else { + // no resource given, use default + // or single character before the colon is not a resource type, but part of the filepath + $type = $smarty->default_resource_type; + $name = $template_resource; + } + // create new source object + $source = new Smarty_Template_Source($smarty, $template_resource, $type, $name); + $source->handler->populate($source, $_template); + if (!$source->exists && isset($_template->smarty->default_template_handler_func)) { + Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source); + $source->handler->populate($source, $_template); + } + return $source; + } + + /** + * Get source time stamp + * + * @return int + */ + public function getTimeStamp() + { + if (!isset($this->timestamp)) { + $this->handler->populateTimestamp($this); + } + return $this->timestamp; + } + + /** + * Get source content + * + * @return string + */ + public function getContent() + { + return isset($this->content) ? $this->content : $this->handler->getContent($this); + } +} diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_undefined_variable.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_undefined_variable.php new file mode 100644 index 0000000..88bc6f6 --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smarty_undefined_variable.php @@ -0,0 +1,37 @@ +value = $value; + $this->nocache = $nocache; + } + + /** + * <> String conversion + * + * @return string + */ + public function __toString() + { + return (string) $this->value; + } +} + diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smartycompilerexception.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smartycompilerexception.php new file mode 100644 index 0000000..763bab1 --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smartycompilerexception.php @@ -0,0 +1,42 @@ + Smarty Compiler: ' . $this->message . ' <-- '; + } + + /** + * The line number of the template error + * + * @type int|null + */ + public $line = null; + + /** + * The template source snippet relating to the error + * + * @type string|null + */ + public $source = null; + + /** + * The raw text of the error message + * + * @type string|null + */ + public $desc = null; + + /** + * The resource identifier or template name + * + * @type string|null + */ + public $template = null; +} diff --git a/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smartyexception.php b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smartyexception.php new file mode 100644 index 0000000..431d8f8 --- /dev/null +++ b/branches/conlite20/conlite/plugins/smarty/libs/sysplugins/smartyexception.php @@ -0,0 +1,16 @@ + Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- '; + } +} diff --git a/branches/conlite20/conlite/plugins/workflow/classes/class.workflow.php b/branches/conlite20/conlite/plugins/workflow/classes/class.workflow.php new file mode 100644 index 0000000..1b04ac4 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/classes/class.workflow.php @@ -0,0 +1,180 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2003-07-18 + * + * $Id: class.workflow.php 306 2014-03-13 23:03:26Z oldperl $ + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$cfg["tab"]["workflow"] = $cfg['sql']['sqlprefix'] . "_piwf_workflow"; +$cfg["tab"]["workflow_allocation"] = $cfg['sql']['sqlprefix'] . "_piwf_allocation"; +$cfg["tab"]["workflow_art_allocation"] = $cfg['sql']['sqlprefix'] . "_piwf_art_allocation"; +$cfg["tab"]["workflow_items"] = $cfg['sql']['sqlprefix'] . "_piwf_items"; +$cfg["tab"]["workflow_user_sequences"] = $cfg['sql']['sqlprefix'] . "_piwf_user_sequences"; +$cfg["tab"]["workflow_actions"] = $cfg['sql']['sqlprefix'] . "_piwf_actions"; + +plugin_include('workflow', 'classes/class.workflowactions.php'); +plugin_include('workflow', 'classes/class.workflowallocation.php'); +plugin_include('workflow', 'classes/class.workflowartallocation.php'); +plugin_include('workflow', 'classes/class.workflowitems.php'); +plugin_include('workflow', 'classes/class.workflowusersequence.php'); + +/** + * Class Workflows + * Class for workflow management + * @author Timo A. Hummel + * @version 0.2 + * @copyright four for business 2003 + */ +class Workflows extends ItemCollection { + + /** + * Constructor Function + * @param none + */ + function __construct() { + global $cfg; + parent::__construct($cfg["tab"]["workflow"], "idworkflow"); + $this->_setItemClass("Workflow"); + } + + function create() { + global $auth, $client, $lang; + $newitem = parent::createNewItem(); + $newitem->setField("created", date("Y-m-d H-i-s")); + $newitem->setField("idauthor", $auth->auth["uid"]); + $newitem->setField("idclient", $client); + $newitem->setField("idlang", $lang); + $newitem->store(); + + return ($newitem); + } + + /** + * Deletes all corresponding informations to this workflow and delegate call to parent + * @param integer $idWorkflow - id of workflow to delete + */ + function delete($idWorkflow) { + global $cfg; + $oDb = new DB_ConLite(); + + $aItemIdsDelete = array(); + $sSql = 'SELECT idworkflowitem FROM ' . $cfg["tab"]["workflow_items"] . ' WHERE idworkflow = ' . Contenido_Security::toInteger($idWorkflow) . ';'; + $oDb->query($sSql); + while ($oDb->next_record()) { + array_push($aItemIdsDelete, Contenido_Security::escapeDB($oDb->f('idworkflowitem'), $oDb)); + } + + $aUserSequencesDelete = array(); + $sSql = 'SELECT idusersequence FROM ' . $cfg["tab"]["workflow_user_sequences"] . ' WHERE idworkflowitem in (' . implode(',', $aItemIdsDelete) . ');'; + $oDb->query($sSql); + while ($oDb->next_record()) { + array_push($aUserSequencesDelete, Contenido_Security::escapeDB($oDb->f('idusersequence'), $oDb)); + } + + $sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_user_sequences"] . ' WHERE idworkflowitem in (' . implode(',', $aItemIdsDelete) . ');'; + $oDb->query($sSql); + + $sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_actions"] . ' WHERE idworkflowitem in (' . implode(',', $aItemIdsDelete) . ');'; + $oDb->query($sSql); + + $sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_items"] . ' WHERE idworkflow = ' . Contenido_Security::toInteger($idWorkflow) . ';'; + $oDb->query($sSql); + + $sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_allocation"] . ' WHERE idworkflow = ' . Contenido_Security::toInteger($idWorkflow) . ';'; + $oDb->query($sSql); + + $sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_art_allocation"] . ' WHERE idusersequence in (' . implode(',', $aUserSequencesDelete) . ');'; + $oDb->query($sSql); + + parent::delete($idWorkflow); + } + +} + +/** + * Class Workflow + * Class for a single workflow item + * @author Timo A. Hummel + * @version 0.1 + * @copyright four for business 2003 + */ +class Workflow extends Item { + + /** + * Constructor + * + * @global array $cfg + */ + function __construct() { + global $cfg; + parent::__construct($cfg["tab"]["workflow"], "idworkflow"); + } + +} + +/* Helper functions */ + +function getWorkflowForCat($idcat) { + global $lang, $cfg; + + $idcatlang = getCatLang($idcat, $lang); + $workflows = new WorkflowAllocations; + $workflows->select("idcatlang = '$idcatlang'"); + if ($obj = $workflows->next()) { + /* Sanity: Check if the workflow still exists */ + $workflow = new Workflow; + + $res = $workflow->loadByPrimaryKey($obj->get("idworkflow")); + + if ($res == false) { + return 0; + } else { + return $obj->get("idworkflow"); + } + } +} + +function getCatLang($idcat, $idlang) { + global $lang, $cfg; + $db = new DB_ConLite; + + /* Get the idcatlang */ + $sql = "SELECT idcatlang FROM " + . $cfg["tab"]["cat_lang"] . + " WHERE idlang = '" . Contenido_Security::escapeDB($idlang, $db) . "' AND + idcat = '" . Contenido_Security::escapeDB($idcat, $db) . "'"; + + $db->query($sql); + + if ($db->next_record()) { + return ($db->f("idcatlang")); + } +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/workflow/classes/class.workflowactions.php b/branches/conlite20/conlite/plugins/workflow/classes/class.workflowactions.php new file mode 100644 index 0000000..991589b --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/classes/class.workflowactions.php @@ -0,0 +1,132 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2003-07-18 + * + * $Id: class.workflowactions.php 75 2012-05-25 10:51:00Z oldperl $ + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * Class WorkflowActions + * Class for workflow action collections + * @author Timo A. Hummel + * @version 0.2 + * @copyright four for business 2003 + */ +class WorkflowActions extends ItemCollection { + + /** + * Constructor Function + * @param string $table The table to use as information source + */ + function __construct() + { + global $cfg; + parent::__construct($cfg["tab"]["workflow_actions"], "idworkflowaction"); + $this->_setItemClass("WorkflowAction"); + } + + /** + * + * @param type $idworkflowitem + * @param type $action + * @return boolean + */ + function get($idworkflowitem, $action) + { + $this->select("idworkflowitem = '".Contenido_Security::escapeDB($idworkflowitem, NULL)."' AND action = '".Contenido_Security::escapeDB($action, NULL)."'"); + if ($this->next()) + { + return true; + } else { + return false; + } + } + + function getAvailableWorkflowActions () + { + $availableWorkflowActions = array ( + "publish" => i18n("Publish article", "workflow"), + "lock" => i18n("Lock article", "workflow"), + "last" => i18n("Move back to last editor", "workflow"), + "reject" => i18n("Reject article", "workflow"), + "articleedit" => i18n("Edit article content", "workflow"), + "propertyedit" => i18n("Edit article properties", "workflow"), + "templateedit" => i18n("Edit template", "workflow"), + "revise" => i18n("Revise article", "workflow")); + + return($availableWorkflowActions); + } + + function set ($idworkflowitem, $action) + { + $this->select("idworkflowitem = '".Contenido_Security::escapeDB($idworkflowitem, NULL)."' AND action = '".Contenido_Security::escapeDB($action, NULL)."'"); + if (!$this->next()) + { + $newitem = parent::createNewItem(); + $newitem->setField("idworkflowitem",$idworkflowitem); + $newitem->setField("action",$action); + $newitem->store(); + } + } + + function remove ($idworkflowitem, $action) + { + $this->select("idworkflowitem = '$idworkflowitem' AND action = '$action'"); + if ($item = $this->next()) + { + $this->delete($item->getField("idworkflowaction")); + } + } + + function select ($where = "", $group_by = "", $order_by = "", $limit = "") + { + global $client; + + return parent::select($where, $group_by, $order_by, $limit); + } +} + +/** + * Class WorkflowAction + * Class for a single workflow action + * @author Timo A. Hummel + * @version 0.1 + * @copyright four for business 2003 + */ +class WorkflowAction extends Item { + + /** + * Constructor + * @global type $cfg + */ + function __construct() { + global $cfg; + parent::__construct($cfg["tab"]["workflow_actions"], "idworkflowaction"); + } +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/workflow/classes/class.workflowallocation.php b/branches/conlite20/conlite/plugins/workflow/classes/class.workflowallocation.php new file mode 100644 index 0000000..773514b --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/classes/class.workflowallocation.php @@ -0,0 +1,242 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2003-07-18 + * + * $Id: class.workflowallocation.php 306 2014-03-13 23:03:26Z oldperl $ + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +/** + * Class WorkflowAllocations + * Class for workflow allocation management + * @author Timo A. Hummel + * @version 0.2 + * @copyright four for business 2003 + */ +class WorkflowAllocations extends ItemCollection { + + /** + * Constructor Function + * @param string $table The table to use as information source + */ + function __construct() + { + global $cfg; + parent::__construct($cfg["tab"]["workflow_allocation"], "idallocation"); + $this->_setItemClass("WorkflowAllocation"); + } + + /** @deprecated [2011-03-15] Old constructor function for downwards compatibility */ + function WorkflowAllocations() + { + cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()"); + $this->__construct(); + } + + function delete ($idallocation) + { + global $cfg, $lang; + + $obj = new WorkflowAllocation; + $obj->loadByPrimaryKey($idallocation); + + $idcatlang = $obj->get("idcatlang"); + + $db = new DB_ConLite; + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat_lang"]." WHERE idcatlang = '".Contenido_Security::toInteger($idcatlang)."'"; + $db->query($sql); + $db->next_record(); + $idcat = $db->f("idcat"); + + $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat = '".Contenido_Security::toInteger($idcat)."'"; + $db->query($sql); + + while ($db->next_record()) + { + $idarts[] = $db->f("idart"); + } + + $idartlangs = array(); + + if (is_array($idarts)) + { + foreach ($idarts as $idart) + { + $sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' and idlang = '".Contenido_Security::toInteger($lang)."'"; + $db->query($sql); + if ($db->next_record()) + { + $idartlangs[] = $db->f("idartlang"); + } + } + } + + $workflowArtAllocation = new WorkflowArtAllocation; + $workflowArtAllocations = new WorkflowArtAllocations; + + foreach ($idartlangs as $idartlang) + { + $workflowArtAllocation->loadBy("idartlang", $idartlang); + $workflowArtAllocations->delete($workflowArtAllocation->get("idartallocation")); + } + + parent::delete($idallocation); + } + + function create ($idworkflow, $idcatlang) + { + $this->select("idcatlang = '$idcatlang'"); + + if ($this->next() !== false) + { + $this->lasterror = i18n("Category already has a workflow assigned", "workflow"); + return false; + } + + $workflows = new Workflows; + $workflows->select("idworkflow = '$idworkflow'"); + + if ($workflows->next() === false) + { + $this->lasterror = i18n("Workflow doesn't exist", "workflow"); + return false; + } + $newitem = parent::createNewItem(); + if (!$newitem->setWorkflow($idworkflow)) + { + $this->lasterror = $newitem->lasterror; + $workflows->delete($newitem->getField("idallocation")); + return false; + } + + if (!$newitem->setCatLang($idcatlang)) + { + $this->lasterror = $newitem->lasterror; + $workflows->delete($newitem->getField("idallocation")); + return false; + } + + $newitem->store(); + + return ($newitem); + } +} + +/** + * Class WorkflowAllocation + * Class for a single workflow allocation item + * @author Timo A. Hummel + * @version 0.1 + * @copyright four for business 2003 + */ +class WorkflowAllocation extends Item { + + /** + * Constructor Function + * @param string $table The table to use as information source + */ + function __construct() + { + global $cfg; + + parent::__construct($cfg["tab"]["workflow_allocation"], "idallocation"); + } + + /** @deprecated [2011-03-15] Old constructor function for downwards compatibility */ + function WorkflowAllocation() + { + cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()"); + $this->__construct(); + } + + /** + * Overridden setField function. Users should only use setWorkflow. + * @param string $field Void field since we override the usual setField function + * @param string $value Void field since we override the usual setField function + */ + function setField($field, $value, $bSafe = true) + { + die("Don't use setField for WorkflowAllocation items! Use setWorkflow instead!"); + } + + /** + * setWorkflow sets the workflow for the current item. + * @param int $idworkflow Workflow-ID to set the item to + */ + function setWorkflow ($idworkflow) + { + $workflows = new Workflows; + + $workflows->select("idworkflow = '$idworkflow'"); + + if ($workflows->next() === false) + { + $this->lasterror = i18n("Workflow doesn't exist", "workflow"); + return false; + } + + parent::setField("idworkflow", $idworkflow); + parent::store(); + return true; + } + + /** + * setCatLang sets the idcatlang for the current item. Should + * only be called by the create function. + * @param int $idcatlang idcatlang to set. + */ + function setCatLang ($idcatlang) + { + global $cfg; + + $allocations = new WorkflowAllocations; + + $allocations->select("idcatlang = '$idcatlang'"); + + if ($allocations->next() !== false) + { + $this->lasterror = i18n("Category already has a workflow assigned", "workflow"); + return false; + } + + $db = new DB_ConLite; + $sql = "SELECT idcatlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcatlang = '".Contenido_Security::toInteger($idcatlang)."'"; + $db->query($sql); + + if (!$db->next_record()) + { + $this->lasterror = i18n("Category doesn't exist, assignment failed", "workflow"); + return false; + } + + parent::setField("idcatlang", $idcatlang); + parent::store(); + return true; + } +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/workflow/classes/class.workflowartallocation.php b/branches/conlite20/conlite/plugins/workflow/classes/class.workflowartallocation.php new file mode 100644 index 0000000..425a2cf --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/classes/class.workflowartallocation.php @@ -0,0 +1,361 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2003-07-18 + * modified : 2008-06-25 - use php mailer class instead of mail() + * + * $Id: class.workflowartallocation.php 306 2014-03-13 23:03:26Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +/** + * Class WorkflowArtAllocations + * Class for workflow art allocation management + * @author Timo A. Hummel + * @version 0.2 + * @copyright four for business 2003 + */ +class WorkflowArtAllocations extends ItemCollection { + + /** + * Constructor Function + * @param string $table The table to use as information source + */ + function __construct() + { + global $cfg; + parent::__construct($cfg["tab"]["workflow_art_allocation"], "idartallocation"); + $this->_setItemClass("WorkflowArtAllocation"); + } + + /** @deprecated [2011-03-15] Old constructor function for downwards compatibility */ + function WorkflowArtAllocations() + { + cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()"); + $this->__construct(); + } + + function create ($idartlang) + { + global $cfg; + + $sql = "SELECT idartlang FROM " .$cfg["tab"]["art_lang"]. + " WHERE idartlang = '".Contenido_Security::escapeDB($idartlang, $this->db)."'"; + + $this->db->query($sql); + if (!$this->db->next_record()) + { + $this->lasterror = i18n("Article doesn't exist", "workflow"); + return false; + } + + $this->select("idartlang = '$idartlang'"); + + if ($this->next() !== false) + { + $this->lasterror = i18n("Article is already assigned to a usersequence step.", "workflow"); + return false; + } + + $newitem = parent::createNewItem(); + $newitem->setField("idartlang",$idartlang); + $newitem->store(); + + return ($newitem); + } +} + +/** + * Class WorkflowArtAllocation + * Class for a single workflow allocation item + * @author Timo A. Hummel + * @version 0.1 + * @copyright four for business 2003 + */ +class WorkflowArtAllocation extends Item { + + /** + * Constructor Function + * @param string $table The table to use as information source + */ + function __construct() + { + global $cfg; + + parent::__construct($cfg["tab"]["workflow_art_allocation"], "idartallocation"); + } + + /** @deprecated [2011-03-15] Old constructor function for downwards compatibility */ + function WorkflowArtAllocation() + { + cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()"); + $this->__construct(); + } + + function getWorkflowItem () + { + $userSequence = new WorkflowUserSequence; + $userSequence->loadByPrimaryKey($this->values["idusersequence"]); + + return ($userSequence->getWorkflowItem()); + } + + /** + * Returns the current item position + * @param string $field Void field since we override the usual setField function + * @param string $value Void field since we override the usual setField function + */ + function currentItemPosition() + { + $idworkflowitem = $this->get("idworkflowitem"); + + $workflowItems = new WorkflowItems; + $workflowItems->select("idworkflowitem = '$idworkflowitem'"); + + if ($item = $workflowItems->next()) + { + return ($item->get("position")); + } + } + + /** + * Returns the current user position + * @param string $field Void field since we override the usual setField function + * @param string $value Void field since we override the usual setField function + */ + function currentUserPosition() + { + return ($this->get("position")); + } + + /** + * Overriden store function to send mails + * @param none + */ + function store() + { + global $cfg; + + $sMailhost = getSystemProperty('system', 'mail_host'); + if ($sMailhost == '') { + $sMailhost = 'localhost'; + } + + //modified : 2008-06-25 - use php mailer class instead of mail() + $oMail = new PHPMailer(); + $oMail->Host = $sMailhost; + $oMail->IsHTML(0); + $oMail->WordWrap = 1000; + $oMail->IsMail(); + + if (array_key_exists("idusersequence",$this->modifiedValues)) + { + $usersequence = new WorkflowUserSequence; + $usersequence->loadByPrimaryKey($this->values["idusersequence"]); + + $email = $usersequence->get("emailnoti"); + $escal = $usersequence->get("escalationnoti"); + + if ($email == 1 || $escal == 1) + { + /* Grab the required informations */ + $curEditor = getGroupOrUserName($usersequence->get("iduser")); + $idartlang = $this->get("idartlang"); + $timeunit = $usersequence->get("timeunit"); + $timelimit = $usersequence->get("timelimit"); + + $db = new DB_ConLite; + $sql = "SELECT author, title, idart FROM ".$cfg["tab"]["art_lang"]." WHERE idartlang = '".Contenido_Security::escapeDB($idartlang, $db)."'"; + + $db->query($sql); + + if ($db->next_record()) + { + $idart = $db->f("idart"); + $title = $db->f("title"); + $author = $db->f("author"); + } + + /* Extract category */ + $sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::escapeDB($idart, $db)."'"; + $db->query($sql); + + if ($db->next_record()) + { + $idcat = $db->f("idcat"); + } + + $sql = "SELECT name FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat = '".Contenido_Security::escapeDB($idcat, $db)."'"; + $db->query($sql); + + if ($db->next_record()) + { + $catname = $db->f("name"); + } + + $starttime = $this->get("starttime"); + + + $starttime = strtotime (substr_replace (substr (substr ($starttime,0,2).chunk_split (substr ($starttime,2,6),2,"-").chunk_split (substr ($starttime,8),2,":"),0,19)," ",10,1)); + + switch ($timeunit) + { + case "Seconds": + $maxtime = $starttime + $timelimit; + break; + case "Minutes": + $maxtime = $starttime + ($timelimit * 60); + break; + case "Hours": + $maxtime = $starttime + ($timelimit * 3600); + break; + case "Days": + $maxtime = $starttime + ($timelimit * 86400); + break; + case "Weeks": + $maxtime = $starttime + ($timelimit * 604800); + break; + case "Months": + $maxtime = $starttime + ($timelimit * 2678400); + break; + case "Years": + $maxtime = $starttime + ($timelimit * 31536000); + break; + default: + $maxtime = $starttime + $timelimit; + } + + if ($email == 1) + { + $email = "Hello %s,\n\n". + "you are assigned as the next editor for the Article %s.\n\n". + "More informations:\n". + "Article: %s\n". + "Category: %s\n". + "Editor: %s\n". + "Author: %s\n". + "Editable from: %s\n". + "Editable to: %s\n"; + + $filledMail = sprintf( $email, + $curEditor, + $title, + $title, + $catname, + $curEditor, + $author, + date("Y-m-d H:i:s", $starttime), + date("Y-m-d H:i:s", $maxtime)); + $user = new User; + + if (isGroup($usersequence->get("iduser"))) + { + $sql = "select idgroupuser, user_id FROM ". $cfg["tab"]["groupmembers"] ." WHERE + group_id = '".Contenido_Security::escapeDB($usersequence->get("iduser"), $db)."'"; + $db->query($sql); + + while ($db->next_record()) + { + $user->loadUserByUserID($db->f("user_id")); + //modified : 2008-06-25 - use php mailer class instead of mail() + $oMail->AddAddress($user->getField("email"), ""); + $oMail->Subject = stripslashes (i18n('Workflow notification')); + $oMail->Body = $filledMail; + $oMail->Send(); + } + + } else { + $user->loadUserByUserID($usersequence->get("iduser")); + //modified : 2008-06-25 - use php mailer class instead of mail() + $oMail->AddAddress($user->getField("email"), ""); + $oMail->Subject = stripslashes (i18n('Workflow notification')); + $oMail->Body = $filledMail; + $oMail->Send(); + } + + } else { + $email = "Hello %s,\n\n". + "you are assigned as the escalator for the Article %s.\n\n". + "More informations:\n". + "Article: %s\n". + "Category: %s\n". + "Editor: %s\n". + "Author: %s\n". + "Editable from: %s\n". + "Editable to: %s\n"; + + $filledMail = sprintf( $email, + $curEditor, + $title, + $title, + $catname, + $curEditor, + $author, + date("Y-m-d H:i:s", $starttime), + date("Y-m-d H:i:s", $maxtime)); + + $user = new User; + + if (isGroup($usersequence->get("iduser"))) + { + + $sql = "select idgroupuser, user_id FROM ". $cfg["tab"]["groupmembers"] ." WHERE + group_id = '".Contenido_Security::escapeDB($usersequence->get("iduser"), $db)."'"; + $db->query($sql); + + while ($db->next_record()) + { + $user->loadUserByUserID($db->f("user_id")); + echo "mail to ".$user->getField("email")."
    "; + //modified : 2008-06-25 - use php mailer class instead of mail() + $oMail->AddAddress($user->getField("email"), ""); + $oMail->Subject = stripslashes (i18n('Workflow escalation')); + $oMail->Body = $filledMail; + $oMail->Send(); + } + + } else { + $user->loadUserByUserID($usersequence->get("iduser")); + echo "mail to ".$user->getField("email")."
    "; + //modified : 2008-06-25 - use php mailer class instead of mail() + $oMail->AddAddress($user->getField("email"), ""); + $oMail->Subject = stripslashes (i18n('Workflow escalation')); + $oMail->Body = $filledMail; + $oMail->Send(); + } + } + + + + } + + + } + return parent::store(); + } +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/workflow/classes/class.workflowitems.php b/branches/conlite20/conlite/plugins/workflow/classes/class.workflowitems.php new file mode 100644 index 0000000..9e8fbfa --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/classes/class.workflowitems.php @@ -0,0 +1,304 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2003-07-18 + * + * $Id: class.workflowitems.php 306 2014-03-13 23:03:26Z oldperl $ + * }} + * + */ +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + +/** + * Class WorkflowItems + * Class for workflow item management + * @author Timo A. Hummel + * @version 0.2 + * @copyright four for business 2003 + */ +class WorkflowItems extends ItemCollection { + + /** + * Constructor Function + * @param string $table The table to use as information source + */ + function __construct() { + global $cfg; + parent::__construct($cfg["tab"]["workflow_items"], "idworkflowitem"); + $this->_setItemClass("WorkflowItem"); + } + + /** @deprecated [2011-03-15] Old constructor function for downwards compatibility */ + function WorkflowItems() { + cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()"); + $this->__construct(); + } + + function delete($id) { + global $cfg; + $item = new WorkflowItem; + $item->loadByPrimaryKey($id); + $pos = $item->get("position"); + $idworkflow = $item->get("idworkflow"); + $oDb = new DB_ConLite(); + + $this->select("position > $pos AND idworkflow = '" . Contenido_Security::escapeDB($idworkflow, $oDb) . "'"); + while ($obj = $this->next()) { + $obj->setPosition($obj->get("position") - 1); + $obj->store(); + } + + $aUserSequencesDelete = array(); + $sSql = 'SELECT idusersequence FROM ' . $cfg["tab"]["workflow_user_sequences"] . ' WHERE idworkflowitem = ' . $id . ';'; + $oDb->query($sSql); + while ($oDb->next_record()) { + array_push($aUserSequencesDelete, Contenido_Security::escapeDB($oDb->f('idusersequence'), $oDb)); + } + + $sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_actions"] . ' WHERE idworkflowitem = ' . Contenido_Security::escapeDB($id, $oDb) . ';'; + $oDb->query($sSql); + + $this->updateArtAllocation($id, 1); + + if (count($aUserSequencesDelete) > 0) { + $sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_user_sequences"] . ' WHERE idusersequence in (' . implode(',', $aUserSequencesDelete) . ');'; + $oDb->query($sSql); + } + } + + function updateArtAllocation($idworkflowitem, $delete = false) { + global $idworkflow, $cfg; + $oDb = new DB_ConLite(); + + $aUserSequences = array(); + $sSql = 'SELECT idusersequence FROM ' . $cfg["tab"]["workflow_user_sequences"] . ' WHERE idworkflowitem = ' . Contenido_Security::escapeDB($idworkflowitem, $oDb) . ';'; + + $oDb->query($sSql); + while ($oDb->next_record()) { + array_push($aUserSequences, Contenido_Security::escapeDB($oDb->f('idusersequence'), $oDb)); + } + + $aIdArtLang = array(); + if (count($aUserSequences) > 0) { + $sSql = 'SELECT idartlang FROM ' . $cfg["tab"]["workflow_art_allocation"] . ' WHERE idusersequence in (' . implode(',', $aUserSequences) . ');'; + $oDb->query($sSql); + while ($oDb->next_record()) { + array_push($aIdArtLang, $oDb->f('idartlang')); + } + $sSql = 'DELETE FROM ' . $cfg["tab"]["workflow_art_allocation"] . ' WHERE idusersequence in (' . implode(',', $aUserSequences) . ');'; + $oDb->query($sSql); + } + + if ($delete) { + parent::delete($idworkflowitem); + } + + foreach ($aIdArtLang as $iIdArtLang) { + setUserSequence($iIdArtLang, $idworkflow); + } + } + + function swap($idworkflow, $pos1, $pos2) { + $this->select("idworkflow = '$idworkflow' AND position = '$pos1'"); + if (($item = $this->next()) === false) { + $this->lasterror = i18n("Swapping items failed: Item doesn't exist", "workflow"); + return false; + } + + $pos1ID = $item->getField("idworkflowitem"); + + $this->select("idworkflow = '$idworkflow' AND position = '$pos2'"); + if (($item = $this->next()) === false) { + $this->lasterror = i18n("Swapping items failed: Item doesn't exist", "workflow"); + return false; + } + + $pos2ID = $item->getField("idworkflowitem"); + + $item = new WorkflowItem(); + $item->loadByPrimaryKey($pos1ID); + $item->setPosition($pos2); + $item->store(); + $item->loadByPrimaryKey($pos2ID); + $item->setPosition($pos1); + $item->store(); + + $this->updateArtAllocation($pos1ID); + $this->updateArtAllocation($pos2ID); + return (true); + } + + function create($idworkflow) { + $workflows = new Workflows; + + $workflows->select("idworkflow = '$idworkflow'"); + + if ($workflows->next() === false) { + $this->lasterror = i18n("Can't add item to workflow: Workflow doesn't exist", "workflow"); + return false; + } + + $this->select("idworkflow = '$idworkflow'", "", "position DESC", "1"); + + $item = $this->next(); + + if ($item === false) { + $lastPos = 1; + } else { + $lastPos = $item->getField("position") + 1; + } + + $newItem = parent::createNewItem(); + if ($newItem->init($idworkflow, $lastPos) === false) { + $this->delete($newItem->getField("idworkflowitem")); + $this->lasterror = $newItem->lasterror; + return false; + } + + if ($item === false) { + $this->updateArtAllocation(0); + } + + return ($newItem); + } + +} + +/** + * Class WorkflowItem + * Class for a single workflow item + * @author Timo A. Hummel + * @version 0.1 + * @copyright four for business 2003 + */ +class WorkflowItem extends Item { + + /** + * Constructor Function + * @param string $table The table to use as information source + */ + function __construct() { + global $cfg; + + parent::__construct($cfg["tab"]["workflow_items"], "idworkflowitem"); + } + + /** @deprecated [2011-03-15] Old constructor function for downwards compatibility */ + function WorkflowItem() { + cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()"); + $this->__construct(); + } + + function getStepRights() { + $idwfi = $this->values["idworkflowitem"]; + $workflowActions = new WorkflowActions; + + $actions = WorkflowActions::getAvailableWorkflowActions(); + + foreach ($actions as $key => $value) { + $rights[$key] = $workflowActions->get($idwfi, $key); + } + + return $rights; + } + + /** + * Overridden setField function. + * @param string $field Void field since we override the usual setField function + * @param string $value Void field since we override the usual setField function + */ + function setField($field, $value, $bSafe = TRUE) { + if ($this->virgin == true) { + $this->lasterror = i18n("No item loaded", "workflow"); + return false; + } + + if ($field == "idsequence") { + die("You can't set the idsequence field using this method. Use 'create' in the WorkflowItems class."); + } + + if ($field == "idworkflow") { + die("You can't set the workflow ID using this method. Use 'create' in the WorkflowItems class!"); + } + + if ($field == "position") { + die("You can't set the position ID using this method. Use 'create' or 'swap' to create or move items!"); + } + + if ($field == "idtask" && $value != 0) { + $taskCollection = new WorkflowTasks; + $taskCollection->select("idtask = '$value'"); + if ($taskCollection->next() === false) { + $this->lasterror = i18n("Requested task doesn't exist, can't assign", "workflow"); + return false; + } + } + + parent::setField($field, $value, $bSafe); + } + + /** + * init initializes a new wf_items entry. Should + * only be called by the create function. + * @param int $idworkflow The workflow to set the item to + */ + function init($idworkflow, $idposition) { + global $cfg; + + $workflows = new Workflows; + + $workflows->select("idworkflow = '$idworkflow'"); + + if ($workflows->next() === false) { + $this->lasterror = i18n("Workflow doesn't exist", "workflow"); + return false; + } + + $workflowItems = new WorkflowItems; + $workflowItems->select("position = '$idposition' AND idworkflow = '$idworkflow'"); + if ($workflowItems->next()) { + $this->lasterror = i18n("Position in this workflow already exists.", "workflow"); + return false; + } + + parent::setField("idworkflow", $idworkflow); + parent::setField("position", $idposition); + parent::store(); + return true; + } + + /** + * setPosition Sets the position for an item. Should only be + * called by the "swap" function + * @param int $idposition The new position ID + */ + function setPosition($idposition) { + parent::setField("position", $idposition); + parent::store(); + return true; + } + +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/workflow/classes/class.workflowtasks.php b/branches/conlite20/conlite/plugins/workflow/classes/class.workflowtasks.php new file mode 100644 index 0000000..c336c73 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/classes/class.workflowtasks.php @@ -0,0 +1,106 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2003-07-18 + * + * $Id: class.workflowtasks.php 2 2011-07-20 12:00:48Z oldperl $ + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +/** + * Class WorkflowTasks + * Class for workflow task collections + * @author Timo A. Hummel + * @version 0.2 + * @copyright four for business 2003 + */ +class WorkflowTasks extends ItemCollection { + + /** + * Constructor Function + * @param string $table The table to use as information source + */ + function __construct() + { + global $cfg; + parent::__construct($cfg["tab"]["tasks"], "idtask"); + $this->_setItemClass("WorkflowTask"); + } + + /** @deprecated [2011-03-15] Old constructor function for downwards compatibility */ + function WorkflowTasks() + { + cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()"); + $this->__construct(); + } + + function create () + { + $newitem = parent::createNewItem(); + return ($newitem); + } + + function select ($where = "", $group_by = "", $order_by = "", $limit = "") + { + global $client; + + if ($where != "") + { + $where = $where . " AND idclient = '".Contenido_Security::escapeDB($client, NULL)."'"; + } + return parent::select($where, $group_by, $order_by, $limit); + } +} + +/** + * Class WorkflowTask + * Class for a single workflow task item + * @author Timo A. Hummel + * @version 0.1 + * @copyright four for business 2003 + */ +class WorkflowTask extends Item { + + /** + * Constructor Function + * @param string $table The table to use as information source + */ + function __construct() + { + global $cfg; + parent::__construct($cfg["tab"]["tasks"], "idtask"); + } + + /** @deprecated [2011-03-15] Old constructor function for downwards compatibility */ + function WorkflowTask() + { + cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()"); + $this->__construct(); + } +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/workflow/classes/class.workflowusersequence.php b/branches/conlite20/conlite/plugins/workflow/classes/class.workflowusersequence.php new file mode 100644 index 0000000..6224850 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/classes/class.workflowusersequence.php @@ -0,0 +1,278 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2003-07-18 + * + * $Id: class.workflowusersequence.php 306 2014-03-13 23:03:26Z oldperl $ + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +/** + * Class WorkflowUserSequences + * Class for workflow user sequence management + * @author Timo A. Hummel + * @version 0.2 + * @copyright four for business 2003 + */ +class WorkflowUserSequences extends ItemCollection { + + /** + * Constructor Function + * @param string $table The table to use as information source + */ + function __construct() + { + global $cfg; + parent::__construct($cfg["tab"]["workflow_user_sequences"], "idusersequence"); + $this->_setItemClass("WorkflowUserSequence"); + } + + /** @deprecated [2011-03-15] Old constructor function for downwards compatibility */ + function WorkflowUserSequences() + { + cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()"); + $this->__construct(); + } + + function delete ($id) + { + global $cfg, $idworkflow; + + $item = new WorkflowUserSequence; + $item->loadByPrimaryKey($id); + + $pos = $item->get("position"); + $idworkflowitem = $item->get("idworkflowitem"); + $this->select("position > $pos AND idworkflowitem = '".Contenido_Security::escapeDB($idworkflowitem, NULL)."'"); + while ($obj = $this->next()) + { + $pos = $obj->get("position") -1; + $obj->setPosition($pos); + $obj->store(); + } + + parent::delete($id); + + $this->updateArtAllocation($id); + } + + function updateArtAllocation ($idusersequence) { + global $idworkflow, $cfg; + $oDb = new DB_ConLite(); + + $aIdArtLang = array(); + $sSql = 'SELECT idartlang FROM '.$cfg["tab"]["workflow_art_allocation"].' WHERE idusersequence = '.Contenido_Security::escapeDB($idusersequence, $oDb).';'; + $oDb->query($sSql); + while ($oDb->next_record()) { + array_push($aIdArtLang, $oDb->f('idartlang')); + } + + $sSql = 'DELETE FROM '.$cfg["tab"]["workflow_art_allocation"].' WHERE idusersequence = '.Contenido_Security::escapeDB($idusersequence, $oDb).';'; + $oDb->query($sSql); + + + foreach ($aIdArtLang as $iIdArtLang) { + setUserSequence($iIdArtLang, $idworkflow); + } + } + + function create ($idworkflowitem) + { + global $auth, $client, $idworkflow; + $newitem = parent::createNewItem(); + + $workflowitems = new WorkflowItems; + if (!$workflowitems->exists($idworkflowitem)) + { + $this->delete($newitem->getField("idusersequence")); + $this->lasterror = i18n("Workflow item doesn't exist. Can't create entry.", "workflow"); + return false; + } + + $this->select("idworkflowitem = '".Contenido_Security::escapeDB($idworkflowitem, NULL)."'","","position DESC","1"); + + $item = $this->next(); + + if ($item === false) + { + $lastPos = 1; + } else { + $lastPos = $item->getField("position") + 1; + } + + $newitem->setWorkflowItem($idworkflowitem); + $newitem->setPosition($lastPos); + $newitem->store(); + + return ($newitem); + } + + function swap ($idworkflowitem, $pos1, $pos2) + { + $this->select("idworkflowitem = '$idworkflowitem' AND position = '".Contenido_Security::escapeDB($pos1, NULL)."'"); + if (($item = $this->next()) === false) + { + $this->lasterror = i18n("Swapping items failed: Item doesn't exist", "workflow"); + return false; + } + + $pos1ID = $item->getField("idusersequence"); + + $this->select("idworkflowitem = '$idworkflowitem' AND position = '".Contenido_Security::escapeDB($pos2, NULL)."'"); + if (($item = $this->next()) === false) + { + $this->lasterror(i18n("Swapping items failed: Item doesn't exist", "workflow")); + return false; + } + + $pos2ID = $item->getField("idusersequence"); + + $item = new WorkflowUserSequence(); + $item->loadByPrimaryKey($pos1ID); + $item->setPosition($pos2); + $item->store(); + $item->loadByPrimaryKey($pos2ID); + $item->setPosition($pos1); + $item->store(); + + $this->updateArtAllocation($pos2ID); + $this->updateArtAllocation($pos1ID); + + return (true); + } +} + +/** + * Class WorkflowUserSequence + * Class for a single workflow item + * @author Timo A. Hummel + * @version 0.1 + * @copyright four for business 2003 + */ +class WorkflowUserSequence extends Item { + + /** + * Constructor Function + * @param string $table The table to use as information source + */ + function __construct() + { + global $cfg; + parent::__construct($cfg["tab"]["workflow_user_sequences"], "idusersequence"); + } + + /** @deprecated [2011-03-15] Old constructor function for downwards compatibility */ + function WorkflowUserSequence() + { + cWarning(__FILE__, __LINE__, "Deprecated method call, use __construct()"); + $this->__construct(); + } + + /** + * Override setField Function to prevent that somebody modifies + * idsequence. + * @param string $field Field to set + * @param string $valie Value to set + */ + function setField($field, $value, $bSafe = true) + { + global $cfg; + + switch ($field) + { + case "idworkflowitem": + die("Please use create to modify idsequence. Direct modifications are not allowed"); + case "idusersequence": + die("Please use create to modify idsequence. Direct modifications are not allowed"); + case "position": + die("Please use create and swap to set the position. Direct modifications are not allowed"); + case "iduser": + if ($value != 0) + { + $db = new DB_ConLite; + $sql = "SELECT user_id FROM " . $cfg["tab"]["phplib_auth_user_md5"] . + " WHERE user_id = '".Contenido_Security::escapeDB($value, $db)."'"; + $db->query($sql); + + if (!$db->next_record()) + { + $sql = "SELECT group_id FROM " . $cfg["tab"]["groups"] . + " WHERE group_id = '".Contenido_Security::escapeDB($value, $db)."'"; + + $db->query($sql); + if (!$db->next_record()) + { + $this->lasterror = i18n("Can't set user_id: User or group doesn't exist", "workflow"); + return false; + } + } + $idusersquence = parent::getField('idusersequence'); + } + + } + + parent::setField($field, $value, $bSafe); + if ($idusersquence) { + WorkflowUserSequences::updateArtAllocation(0); + } + } + + /** + * Returns the associated workflowItem for this user sequence + * @param none + */ + function getWorkflowItem () + { + if (!$this->virgin) + { + $workflowItem = new WorkflowItem; + $workflowItem->loadByPrimaryKey($this->values["idworkflowitem"]); + return ($workflowItem); + } else { + return false; + } + } + + /** + * Interface to set idworkflowitem. Should only be called by "create". + * @param string $value The value to set + */ + function setWorkflowItem($value) + { + parent::setField("idworkflowitem", $value); + } + + /** + * Interface to set idworkflowitem. Should only be called by "create". + * @param string $value The value to set + */ + function setPosition($value) + { + parent::setField("position", $value); + } +} +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/workflow/cronjobs/advance_workflow.php b/branches/conlite20/conlite/plugins/workflow/cronjobs/advance_workflow.php new file mode 100644 index 0000000..96ab9e8 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/cronjobs/advance_workflow.php @@ -0,0 +1,114 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2003-05-26 + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: advance_workflow.php 2 2011-07-20 12:00:48Z oldperl $ + * }} + * + */ + +define('CON_FRAMEWORK', true); + + +// Contenido startup process +include_once ('../../../includes/startup.php'); + +cInclude("includes", "cfg_language_de.inc.php"); +cInclude("includes", "functions.con.php"); + +plugin_include('workflow', 'classes/class.workflow.php'); +plugin_include('workflow', 'includes/functions.workflow.php'); + +$workflowartallocations = new WorkflowArtAllocations; +$workflowusersequences = new WorkflowUserSequences; + +$workflowartallocations->select(); + +while ($obj = $workflowartallocations->next()) +{ + $starttime = $obj->get("starttime"); + $idartlang = $obj->get("idartlang"); + $lastidusersequence = $obj->get("lastusersequence"); + + $usersequence = getCurrentUserSequence($idartlang,0); + + if ($usersequence != $lastidusersequence) + { + + $workflowusersequences->select("idusersequence = '$usersequence'"); + + if ($wfobj = $workflowusersequences->next()) + { + $wfitem = $wfobj->get("idworkflowitem"); + $pos = $wfobj->get("position"); + $timeunit = $wfobj->get("timeunit"); + $timelimit = $wfobj->get("timelimit"); + } + + $starttime = strtotime (substr_replace (substr (substr ($starttime,0,2).chunk_split (substr ($starttime,2,6),2,"-").chunk_split (substr ($starttime,8),2,":"),0,19)," ",10,1)); + switch ($timeunit) + { + case "Seconds": + $maxtime = $starttime + $timelimit; + break; + case "Minutes": + $maxtime = $starttime + ($timelimit * 60); + break; + case "Hours": + $maxtime = $starttime + ($timelimit * 3600); + break; + case "Days": + $maxtime = $starttime + ($timelimit * 86400); + break; + case "Weeks": + $maxtime = $starttime + ($timelimit * 604800); + break; + case "Months": + $maxtime = $starttime + ($timelimit * 2678400); + break; + case "Years": + $maxtime = $starttime + ($timelimit * 31536000); + break; + default: + $maxtime = $starttime + $timelimit; + } + + + + if ($maxtime < time()) + { + $pos = $pos + 1; + $workflowusersequences->select("idworkflowitem = '$wfitem' AND position = '".Contenido_Security::escapeDB($pos, NULL)."'"); + + if ($wfobj = $workflowusersequences->next()) + { + $obj->set("idusersequence", $wfobj->get("idusersequence")); + $obj->store(); + + } + } + + } +} + +?> diff --git a/branches/conlite20/conlite/plugins/workflow/images/no_verschieben.gif b/branches/conlite20/conlite/plugins/workflow/images/no_verschieben.gif new file mode 100644 index 0000000000000000000000000000000000000000..dbbc5e909f487ae3acd918ddd911d70045f3ae69 GIT binary patch literal 121 zcmZ?wbhEHb6krfw*v!emkg)Op|NpVG&T^)0x%%|e{KJp5s`h>R`RDVG-wfD*;!hSv z1_n+B9grl*30OKazXTURL5$It7d-eW$$lG1S&Bx GSOWmbE+)YM literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/plugins/workflow/images/nu_verschieben.gif b/branches/conlite20/conlite/plugins/workflow/images/nu_verschieben.gif new file mode 100644 index 0000000000000000000000000000000000000000..00e6a36a5d7a2ac6d964970fd5f76c6cf1988b9c GIT binary patch literal 121 zcmZ?wbhEHb6krfw*v!emkg)Op|NpVG&T^)0x%%|e{KJp5s`h>R`RDVG-wfD*;!hSv z1_n+B9grl*3ig*ufl5pa F)&R!I3sSOWm9kQ&SY literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/plugins/workflow/images/workflow_step.gif b/branches/conlite20/conlite/plugins/workflow/images/workflow_step.gif new file mode 100644 index 0000000000000000000000000000000000000000..d9745a1d6d72803eeca15fc604819e05957a07b3 GIT binary patch literal 61 zcmZ?wbhEHbe#0(&D1}3qPzRUw}pDQ&Ov%0D7t1ADW M8kG>?#mHa{0OO7j_5c6? literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/plugins/workflow/images/workflow_step_delete.gif b/branches/conlite20/conlite/plugins/workflow/images/workflow_step_delete.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7251de2aa2b794c5650312624330e8c6c49f083 GIT binary patch literal 195 zcmZ?wbhEHb6krfwI3mn&-AM5N|NkGiuYOvU`euIrkK0!tBzfNP(*1H`|F0(x?#DX+ z`||sK=CIFBLjmlgAPbJ$W8`UhX*V@DUn@i ztEM?_=*!jF{mf?hwl&X8?kP-Yce%J)lBLD*VL*!Pe#0(&D1}3qPzRUw}pDQ&Ov%0D7t1ADW M8kG>?#mHa{0OO7j_5c6? literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/plugins/workflow/images/workflow_step_new.gif b/branches/conlite20/conlite/plugins/workflow/images/workflow_step_new.gif new file mode 100644 index 0000000000000000000000000000000000000000..0472fdc878dc9817fffa313fd47ec8e064adc858 GIT binary patch literal 74 zcmZ?wbhEHb6krfwn8?Jykg)Op|NjhNp!k!8k%57UK?lSG$ulrXi}cN0_Lg6n$5APZ Xzi-R;=arYzCMHi^y6Wf#Rt9STlu8vk literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/plugins/workflow/images/workflow_user.gif b/branches/conlite20/conlite/plugins/workflow/images/workflow_user.gif new file mode 100644 index 0000000000000000000000000000000000000000..0256151664e39fa920942cf3a944c8ba50c46f77 GIT binary patch literal 113 zcmZ?wbhEHb+|z`(|!1LAD KG5;tFgEatVE+o?c literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/plugins/workflow/includes/config.plugin.php b/branches/conlite20/conlite/plugins/workflow/includes/config.plugin.php new file mode 100644 index 0000000..2bdf534 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/includes/config.plugin.php @@ -0,0 +1,453 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * @todo move functions to own file and add autoloader (Ortwin) + * + * $Id: config.plugin.php 293 2014-01-20 14:48:39Z oldperl $ + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +plugin_include('workflow', 'classes/class.workflow.php'); +plugin_include('workflow', 'includes/functions.workflow.php'); + +global $lngAct, $modidartlang; + +$lngAct["workflow"]["workflow_delete"] = i18n("Delete workflow", "workflow"); +$lngAct["con_workflow"]["workflow_task_user_select"] = i18n("Select workflow task", "workflow"); +$lngAct["workflow_common"]["workflow_show"] = i18n("Show workflow", "workflow"); +$lngAct["workflow_common"]["workflow_create"] = i18n("Create workflow", "workflow"); +$lngAct["workflow_common"]["workflow_save"] = i18n("Edit workflow", "workflow"); +$lngAct["con"]["workflow_do_action"] = i18n("Process workflow step", "workflow"); +$lngAct["str"]["workflow_inherit_down"] = i18n("Inherit workflow down", "workflow"); +$lngAct["str"]["workflow_inherit_down"] = i18n("Inherit workflow down", "workflow"); +$lngAct["workflow_steps"]["workflow_step_edit"] = i18n("Edit workflow step", "workflow"); +$lngAct["workflow_steps"]["workflow_step_up"] = i18n("Move workflowstep up", "workflow"); +$lngAct["workflow_steps"]["workflow_step_down"] = i18n("Move workflowstep down", "workflow"); +$lngAct["workflow_steps"]["workflow_save_step"] = i18n("Save Workflowstep", "workflow"); +$lngAct["workflow_steps"]["workflow_create_step"] = i18n("Create workflowstep", "workflow"); +$lngAct["workflow_steps"]["workflow_step_delete"] = i18n("Delete workflowstep", "workflow"); +$lngAct["workflow_steps"]["workflow_user_up"] = i18n("Move workflowstepuser up", "workflow"); +$lngAct["workflow_steps"]["workflow_user_down"] = i18n("Move workflowstepuser down", "workflow"); +$lngAct["workflow_steps"]["workflow_create_user"] = i18n("Create Workflowstepuser", "workflow"); +$lngAct["workflow_steps"]["workflow_user_delete"] = i18n("Delete Workflowstepuser", "workflow"); +$lngAct["str"]["workflow_cat_assign"] = i18n("Associate workflow with category", "workflow"); + +$_cecRegistry->addChainFunction("Contenido.ArticleCategoryList.ListItems", "piworkflowCreateTasksFolder"); +$_cecRegistry->addChainFunction("Contenido.ArticleList.Columns", "piworkflowProcessArticleColumns"); +$_cecRegistry->addChainFunction("Contenido.ArticleList.Actions", "piworkflowProcessActions"); +$_cecRegistry->addChainFunction("Contenido.ArticleList.RenderColumn", "piworkflowRenderColumn"); +$_cecRegistry->addChainFunction("Contenido.ArticleList.RenderAction", "piworkflowRenderAction"); +$_cecRegistry->addChainFunction("Contenido.CategoryList.Columns", "piworkflowCategoryColumns"); +$_cecRegistry->addChainFunction("Contenido.CategoryList.RenderColumn", "piworkflowCategoryRenderColumn"); +$_cecRegistry->addChainFunction("Contenido.Frontend.AllowEdit", "piworkflowAllowArticleEdit"); + +function prepareWorkflowItems () +{ + + global $action, $lang, $modidcat, $workflowSelectBox, $workflowworkflows, $client, $tpl, $cfg; + + $workflowworkflows = new Workflows; + + if ($action === 'workflow_inherit_down') + { + $tmp = strDeeperCategoriesArray($modidcat); + $asworkflow = getWorkflowForCat($modidcat); + + $wfa = new WorkflowAllocations; + + foreach ($tmp as $tmp_cat) + { + $idcatlang = getCatLang ($tmp_cat, $lang); + + if ($asworkflow == 0) + { + $wfa->select("idcatlang = '$idcatlang'"); + + if ($item = $wfa->next()) + { + $wfa->delete($item->get("idallocation")); + # delete user sequences for listing in tasklist for each included article + $oArticles = new ArticleCollection(array('idcat' => $idcatlang, 'start' => true, 'offline' => true)); + while ($oArticle = $oArticles->nextArticle()) { + setUserSequence($oArticle->getField('idartlang'), -1); + } + } + } else { + $wfa->select("idcatlang = '$idcatlang'"); + + if ($item = $wfa->next()) + { + $item->setWorkflow($asworkflow); + $item->store(); + } else { + $wfa->create($asworkflow, $idcatlang); + # generate user sequences for listing in tasklist for each included article + $oArticles = new ArticleCollection(array('idcat' => $tmp_cat, 'start' => true, 'offline' => true)); + while ($oArticle = $oArticles->nextArticle()) { + setUserSequence($oArticle->getField('idartlang'), $asworkflow); + } + } + } + } + } + if ($action == "workflow_cat_assign") + { + $seltpl = "wfselect".$modidcat; + + $wfa = new WorkflowAllocations; + $idcatlang = getCatLang($modidcat, $lang); + + #associate workflow with category + if ($GLOBALS[$seltpl] != 0) + { + $wfa->select("idcatlang = '$idcatlang'"); + if ($item = $wfa->next()) + { + $item->setWorkflow($GLOBALS[$seltpl]); + $item->store(); + } else { + $wfa->create($GLOBALS[$seltpl], $idcatlang); + } + + # generate user sequences for listing in tasklist for each included article + $oArticles = new ArticleCollection(array('idcat' => $modidcat, 'start' => true, 'offline' => true)); + while ($oArticle = $oArticles->nextArticle()) { + setUserSequence($oArticle->getField('idartlang'), $GLOBALS[$seltpl]); + } + #unlink workflow with category + } else { + $wfa->select("idcatlang = '$idcatlang'"); + + if ($item = $wfa->next()) + { + $alloc = $item->get("idallocation"); + } + $wfa->delete($alloc); + + # delete user sequences for listing in tasklist for each included article + $oArticles = new ArticleCollection(array('idcat' => $modidcat, 'start' => true, 'offline' => true)); + while ($oArticle = $oArticles->nextArticle()) { + setUserSequence($oArticle->getField('idartlang'), -1); + } + + } + } + + $workflowSelectBox = new cHTMLSelectElement("foo"); + $workflowSelectBox->setClass("text_medium"); + $workflowworkflows->select("idclient = '$client' AND idlang = '".Contenido_Security::escapeDB($lang, null)."'"); + + $workflowOption = new cHTMLOptionElement("--- ".i18n("None", "workflow")." ---", 0); + $workflowSelectBox->addOptionElement(0,$workflowOption); + + while ($workflow = $workflowworkflows->next()) + { + $workflowOption = new cHTMLOptionElement($workflow->get("name"), $workflow->get("idworkflow")); + $workflowSelectBox->addOptionElement($workflow->get("idworkflow"),$workflowOption); + } + + $workflowSelectBox->updateAttributes(array("id" => "wfselect{IDCAT}")); + $workflowSelectBox->updateAttributes(array("name" => "wfselect{IDCAT}")); + + $tpl->set('s', 'PLUGIN_WORKFLOW', $workflowSelectBox->render().''); + $tpl->set('s', 'PLUGIN_WORKFLOW_TRANSLATION', i18n("Inherit workflow down", "workflow")); +} + +function piworkflowCategoryRenderColumn ($idcat, $type) +{ + + switch ($type) + { + case "workflow": + $value = workflowInherit($idcat).''; + break; + } + + return ($value); +} + +function piworkflowCategoryColumns ($array) +{ + prepareWorkflowItems(); + $myarray = array("workflow" => i18n("Workflow", "workflow")); + + return ($myarray); +} + +function piworkflowProcessActions ($array) +{ + global $idcat; + $defaultidworkflow = getWorkflowForCat($idcat); + + if ($defaultidworkflow != 0) + { + $narray = array("todo", + "wfartconf", + "wftplconf", + "wfonline", + "wflocked", + "duplicate", + "delete", + "usetime"); + } else { + $narray = $array; + } + + return ($narray); +} + +function piworkflowRenderAction ($idcat, $idart, $idartlang, $type) +{ + global $area, $frame, $idtpl, $cfg, $alttitle, $tmp_articletitle; + global $tmp_artconf, $onlinelink, $lockedlink, $tplconf_link; + + $defaultidworkflow = getWorkflowForCat($idcat); + + $idusersequence = getCurrentUserSequence($idartlang,$defaultidworkflow); + $associatedUserSequence = new WorkflowUserSequence; + $associatedUserSequence->loadByPrimaryKey($idusersequence); + + $currentEditor = $associatedUserSequence->get("iduser"); + $workflowItem = $associatedUserSequence->getWorkflowItem(); + + if (isCurrentEditor($associatedUserSequence->get("iduser"))) + { + /* Query rights for this user */ + $wfRights = $workflowItem->getStepRights(); + $mayEdit = true; + } else { + $wfRights = ""; + $mayEdit = false; + } + + switch ($type) + { + case "wfartconf": + if ($wfRights["propertyedit"] == true) + { + return $tmp_artconf; + } + break; + case "wfonline": + if ($wfRights["publish"] == true) + { + return $onlinelink; + } + break; + case "wflocked": + if ($wfRights["lock"] == true) + { + return $lockedlink; + } + break; + case "wftplconf": + if ($wfRights["templateedit"] == true) + { + return $tplconf_link; + } + default: + break; + } + + return ""; +} +function piworkflowProcessArticleColumns ($array) +{ + global $idcat, $action, $modidartlang; + + if ($action == "workflow_do_action") + { + $selectedAction = "wfselect".$modidartlang; + doWorkflowAction($modidartlang, $GLOBALS[$selectedAction]); + + } + + $defaultidworkflow = getWorkflowForCat($idcat); + + if ($defaultidworkflow != 0) + { + $narray = array(); + $bInserted = false; + foreach ($array as $sKey => $sValue) { + $narray[$sKey] = $sValue; + if ($sKey == 'title' && !$bInserted) { + $narray["wftitle"] = $array["title"]; + $narray["wfstep"] = i18n("Workflow Step", "workflow"); + $narray["wfaction"] = i18n("Workflow Action", "workflow"); + $narray["wfeditor"] = i18n("Workflow Editor", "workflow"); + $narray["wflaststatus"] = i18n("Last status", "workflow"); + $bInserted = true; + } + } + unset ($narray['title']); + unset ($narray['changeddate']); + unset ($narray['publisheddate']); + unset ($narray['sortorder']); + } else { + $narray = $array; + } + + return ($narray); +} + +function piworkflowAllowArticleEdit ($idlang, $idcat, $idart, $user) +{ + $defaultidworkflow = getWorkflowForCat($idcat); + + if ($defaultidworkflow == 0) + { + return true; + } + + $idartlang = getArtLang($idart, $idlang); + $idusersequence = getCurrentUserSequence($idartlang,$defaultidworkflow); + $associatedUserSequence = new WorkflowUserSequence; + $associatedUserSequence->loadByPrimaryKey($idusersequence); + + $currentEditor = $associatedUserSequence->get("iduser"); + + $workflowItem = $associatedUserSequence->getWorkflowItem(); + + if (isCurrentEditor($associatedUserSequence->get("iduser"))) + { + $wfRights = $workflowItem->getStepRights(); + $mayEdit = true; + } else { + $wfRights = ""; + $mayEdit = false; + } + + if ($wfRights["articleedit"] == true) + { + return true; + } else { + return false; + } + +} +function piworkflowRenderColumn ($idcat, $idart, $idartlang, $column) +{ + global $area, $frame, $idtpl, $cfg, $alttitle, $tmp_articletitle; + $defaultidworkflow = getWorkflowForCat($idcat); + + $idusersequence = getCurrentUserSequence($idartlang,$defaultidworkflow); + $associatedUserSequence = new WorkflowUserSequence; + $associatedUserSequence->loadByPrimaryKey($idusersequence); + + $currentEditor = $associatedUserSequence->get("iduser"); + + $workflowItem = $associatedUserSequence->getWorkflowItem(); + + if (isCurrentEditor($associatedUserSequence->get("iduser"))) + { + $wfRights = $workflowItem->getStepRights(); + $mayEdit = true; + } else { + $wfRights = ""; + $mayEdit = false; + } + + switch ($column) + { + case "wftitle": + if ($wfRights["articleedit"] == true) + { + $mtitle = $tmp_articletitle; + } else { + $mtitle = strip_tags($tmp_articletitle); + } + return ($mtitle); + case "wfstep": + if ($workflowItem === false) + { + return "nobody"; + } + + return ($workflowItem->get("position").".) ".$workflowItem->get("name")); + case "wfeditor": + $sEditor = getGroupOrUserName($currentEditor); + if (!$sEditor) { + $sEditor = "nobody"; + } + return $sEditor; + case "wfaction": + $defaultidworkflow = getWorkflowForCat($idcat); + $idusersequence = getCurrentUserSequence($idartlang,$defaultidworkflow); + + $sActionSelect = getActionSelect($idartlang, $idusersequence); + if (!$sActionSelect) { + $mayEdit = false; + } + + $form = new UI_Form("wfaction".$idartlang, "main.php", "get"); + $form->setVar("area",$area); + $form->setVar("action","workflow_do_action"); + $form->setVar("frame", $frame); + $form->setVar("idcat", $idcat); + $form->setVar("modidartlang", $idartlang); + $form->setVar("idtpl", $idtpl); + $form->add("select", '
    '.$sActionSelect.''); + $form->add("button", '
    '); + + if ($mayEdit == true) + { + return ($form->render(true)); + } else { + return '--- ' . i18n("None") . ' ---'; + } + + case "wflaststatus": + $sStatus = getLastWorkflowStatus($idartlang); + if (!$sStatus) { + $sStatus = '--- ' . i18n("None") . ' ---'; + } + return $sStatus; + + } +} + +function piworkflowCreateTasksFolder () +{ + global $sess, $cfg; + + $item = array(); + /* Create workflow tasks folder */ + $tmp_mstr = '%s'; + + $mstr = sprintf($tmp_mstr, 'right_bottom', + $sess->url("main.php?area=con_workflow&frame=4"), + 'right_top', + $sess->url("main.php?area=con_workflow&frame=3"), + 'Workflow / Todo'); + + $item["image"] = ''; + $item["title"] = $mstr; + + + return ($item); +} + + + +?> diff --git a/branches/conlite20/conlite/plugins/workflow/includes/functions.workflow.php b/branches/conlite20/conlite/plugins/workflow/includes/functions.workflow.php new file mode 100644 index 0000000..6f4c88a --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/includes/functions.workflow.php @@ -0,0 +1,552 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2003-07-28 + * modified 2009-11-06, Murat Purc, replaced deprecated functions (PHP 5.3 ready) + * + * $Id: functions.workflow.php 306 2014-03-13 23:03:26Z oldperl $ + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +cInclude("includes", "functions.con.php"); + +plugin_include('workflow', 'classes/class.workflowitems.php'); + +function getUsers ($listid, $default) +{ + global $idclient, $cfg, $auth; + + $userlist = new Users; + $users = $userlist->getAccessibleUsers(explode(',', $auth->auth['perm'])); + $grouplist = new Groups; + $groups = $grouplist->getAccessibleGroups(explode(',', $auth->auth['perm'])); + + $tpl2 = new Template; + $tpl2->set('s', 'NAME', 'user'.$listid); + $tpl2->set('s', 'CLASS', 'text_small'); + $tpl2->set('s', 'OPTIONS', 'size=1'); + + $tpl2->set('d', 'VALUE', 0); + $tpl2->set('d', 'CAPTION', '--- '.i18n("None", "workflow").' ---'); + if ($default == 0) + { + $tpl2->set('d', 'SELECTED', 'SELECTED'); + } else { + $tpl2->set('d', 'SELECTED', ''); + } + $tpl2->next(); + + if ( is_array($users) ) + { + + foreach ($users as $key => $value) + { + + $tpl2->set('d', 'VALUE', $key); + $tpl2->set('d', 'CAPTION', $value["realname"] . " (".$value["username"].")"); + + if ($default == $key) + { + $tpl2->set('d', 'SELECTED', 'SELECTED'); + } else { + $tpl2->set('d', 'SELECTED', ''); + } + + $tpl2->next(); + } + } + + $tpl2->set('d', 'VALUE', '0'); + $tpl2->set('d', 'CAPTION', '------------------------------------'); + $tpl2->set('d', 'SELECTED', 'disabled'); + $tpl2->next(); + + if ( is_array($groups) ) + { + + foreach ($groups as $key => $value) + { + + $tpl2->set('d', 'VALUE', $key); + $tpl2->set('d', 'CAPTION', $value["groupname"]); + + if ($default == $key) + { + $tpl2->set('d', 'SELECTED', 'SELECTED'); + } else { + $tpl2->set('d', 'SELECTED', ''); + } + + $tpl2->next(); + } + + } + + return $tpl2->generate($cfg['path']['templates'].$cfg['templates']['generic_select'], true); + +} + +function isCurrentEditor ($uid) +{ + global $auth, $cfg; + + /* Check if the UID is a group. If yes, check if we are in it */ + $user = new User; + if ($user->loadUserByUserID($uid) == false) + { + $db2 = new DB_ConLite; + + /* Yes, it's a group. Let's try to load the group members! */ + $sql = "SELECT user_id FROM " + .$cfg["tab"]["groupmembers"]." + WHERE group_id = '".Contenido_Security::escapeDB($uid,$db2)."'"; + + $db2->query($sql); + + while ($db2->next_record()) + { + if ($db2->f("user_id") == $auth->auth["uid"]) + { + return true; + } + } + } else { + if ($uid == $auth->auth["uid"]) + { + return true; + } + } + + return false; +} + +function getActionSelect ($idartlang, $idusersequence) +{ + global $cfg; + + $workflowActions = new WorkflowActions; + + $allActions = $workflowActions->getAvailableWorkflowActions(); + + $wfSelect = new Template; + $wfSelect->set('s', 'NAME', 'wfselect'.$idartlang); + $wfSelect->set('s', 'CLASS', 'text_medium'); + + $userSequence = new WorkflowUserSequence; + $userSequence->loadByPrimaryKey($idusersequence); + + $workflowItem = $userSequence->getWorkflowItem(); + + if ($workflowItem === false) + { + return; + } + + $wfRights = $workflowItem->getStepRights(); + + $artAllocation = new WorkflowArtAllocations; + $artAllocation->select("idartlang = '$idartlang'"); + + if ($obj = $artAllocation->next()) + { + $laststep = $obj->get("lastusersequence"); + } + + $bExistOption = false; + if ($laststep != $idusersequence) + { + $wfSelect->set('d', 'VALUE', 'next'); + $wfSelect->set('d', 'CAPTION', i18n("Confirm", "workflow")); + $wfSelect->set('d', 'SELECTED', 'SELECTED'); + $wfSelect->next(); + $bExistOption = true; + } + + if ($wfRights["last"] == true) + { + $wfSelect->set('d', 'VALUE', 'last'); + $wfSelect->set('d', 'CAPTION', i18n("Back to last editor", "workflow")); + $wfSelect->set('d', 'SELECTED', ''); + $wfSelect->next(); + $bExistOption = true; + } + + if ($wfRights["reject"] == true) + { + $wfSelect->set('d', 'VALUE', 'reject'); + $wfSelect->set('d', 'CAPTION', i18n("Reject article", "workflow")); + $wfSelect->set('d', 'SELECTED', ''); + $wfSelect->next(); + $bExistOption = true; + } + + if ($wfRights["revise"] == true) + { + $wfSelect->set('d', 'VALUE', 'revise'); + $wfSelect->set('d', 'CAPTION', i18n("Revise article", "workflow")); + $wfSelect->set('d', 'SELECTED', ''); + $wfSelect->next(); + $bExistOption = true; + } + + if ($bExistOption) + return ($wfSelect->generate($cfg['path']['templates'].$cfg['templates']['generic_select'], true)); + else { + return false; + } +} + +#function for inserting todos in wokflow_art_allocation used, when a workflow is associated with a category in content->category +function setUserSequence ($idartlang, $defaultidworkflow) { + $wfaa = new WorkflowArtAllocations; + $wfaa->select("idartlang = '$idartlang'"); + $idusersequence = 0; + + if ($associatedUserSequence = $wfaa->next()) + { + $idartallocation = $associatedUserSequence->get("idartallocation"); + $wfaa->delete($idartallocation); + } + + if ($defaultidworkflow != -1) { + $newObj = $wfaa->create($idartlang); + + if (!$newObj) + { + /* Try to load */ + $newObj = new WorkflowArtAllocation; + + echo $wfaa->lasterror; + return false; + } + + /* Get the first idusersequence for the new item */ + $workflowItems = new WorkflowItems; + $workflowItems->select("idworkflow = '$defaultidworkflow' AND position = '1'"); + + if ($obj = $workflowItems->next()) + { + $firstitem = $obj->get("idworkflowitem"); + } + + $workflowUserSequences = new WorkflowUserSequences; + $workflowUserSequences->select("idworkflowitem = '$firstitem' AND position = '1'"); + + if ($obj = $workflowUserSequences->next()) + { + $firstIDUserSequence = $obj->get("idusersequence"); + } + + $newObj->set("idusersequence", $firstIDUserSequence); + $newObj->store(); + + $idusersequence = $newObj->get("idusersequence"); + $associatedUserSequence = $newObj; + } +} + +function getCurrentUserSequence ($idartlang, $defaultidworkflow) +{ + $wfaa = new WorkflowArtAllocations; + $wfaa->select("idartlang = '$idartlang'"); + $idusersequence = 0; + + if ($associatedUserSequence = $wfaa->next()) + { + $idusersequence = $associatedUserSequence->get("idusersequence"); + } + + if ($idusersequence == 0) + { + if ($associatedUserSequence != false) + { + $newObj = $associatedUserSequence; + } else { + $newObj = $wfaa->create($idartlang); + + if (!$newObj) + { + /* Try to load */ + $newObj = new WorkflowArtAllocation; + + echo $wfaa->lasterror; + return false; + } + } + + /* Get the first idusersequence for the new item */ + $workflowItems = new WorkflowItems; + $workflowItems->select("idworkflow = '$defaultidworkflow' AND position = '1'"); + + if ($obj = $workflowItems->next()) + { + $firstitem = $obj->get("idworkflowitem"); + } + + $workflowUserSequences = new WorkflowUserSequences; + $workflowUserSequences->select("idworkflowitem = '$firstitem' AND position = '1'"); + + if ($obj = $workflowUserSequences->next()) + { + $firstIDUserSequence = $obj->get("idusersequence"); + } + + $newObj->set("idusersequence", $firstIDUserSequence); + $newObj->store(); + + $idusersequence = $newObj->get("idusersequence"); + $associatedUserSequence = $newObj; + } + + return ($idusersequence); +} + +function getLastWorkflowStatus ($idartlang) +{ + $wfaa = new WorkflowArtAllocations; + + $wfaa->select("idartlang = '$idartlang'"); + + if ($associatedUserSequence = $wfaa->next()) + { + $laststatus = $associatedUserSequence->get("laststatus"); + } else { + return false; + } + + switch ($laststatus) + { + case "reject": + return (i18n("Rejected", "workflow")); + break; + case "revise": + return (i18n("Revised", "workflow")); + break; + case "last": + return (i18n("Last", "workflow")); + break; + case "confirm": + return (i18n("Confirmed", "workflow")); + break; + default: + return (i18n("None", "workflow")); + break; + } + return (""); +} + +function doWorkflowAction ($idartlang, $action) +{ + global $cfg, $idcat; + + switch ($action) + { + case "last": + $artAllocations = new WorkflowArtAllocations; + $artAllocations->select("idartlang = '$idartlang'"); + + if ($obj = $artAllocations->next()) + { + $usersequence = new WorkflowUserSequence; + $usersequence->loadByPrimaryKey($obj->get("idusersequence")); + + $workflowitem = $usersequence->getWorkflowItem(); + + $idworkflow = $workflowitem->get("idworkflow"); + $newpos = $workflowitem->get("position") - 1; + + if ($newpos < 1) + { + $newpos = 1; + } + + $workflowitems = new WorkflowItems; + $workflowitems->select("idworkflow = '$idworkflow' AND position = '".Contenido_Security::escapeDB($newpos, NULL)."'"); + + if ($nextObj = $workflowitems->next()) + { + $userSequences = new WorkflowUserSequences; + $idworkflowitem = $nextObj->get("idworkflowitem"); + $userSequences->select("idworkflowitem = '$idworkflowitem'"); + + if ($nextSeqObj = $userSequences->next()) + { + $obj->set("lastusersequence", $obj->get("idusersequence")); + $obj->set("idusersequence",$nextSeqObj->get("idusersequence")); + $obj->set("laststatus", "last"); + $obj->store(); + } + } + } + break; + case "next": + $artAllocations = new WorkflowArtAllocations; + $artAllocations->select("idartlang = '$idartlang'"); + + if ($obj = $artAllocations->next()) + { + $usersequence = new WorkflowUserSequence; + $usersequence->loadByPrimaryKey($obj->get("idusersequence")); + + $workflowitem = $usersequence->getWorkflowItem(); + + $idworkflow = $workflowitem->get("idworkflow"); + $newpos = $workflowitem->get("position") + 1; + + $workflowitems = new WorkflowItems; + $workflowitems->select("idworkflow = '$idworkflow' AND position = '".Contenido_Security::escapeDB($newpos, NULL)."'"); + + if ($nextObj = $workflowitems->next()) + { + $userSequences = new WorkflowUserSequences; + $idworkflowitem = $nextObj->get("idworkflowitem"); + $userSequences->select("idworkflowitem = '$idworkflowitem'"); + + if ($nextSeqObj = $userSequences->next()) + { + $obj->set("lastusersequence", '10'); + $obj->set("idusersequence",$nextSeqObj->get("idusersequence")); + $obj->set("laststatus", "confirm"); + $obj->store(); + } + } else { + $workflowitems->select("idworkflow = '$idworkflow' AND position = '".Contenido_Security::escapeDB($workflowitem->get("position"), NULL)."'"); + if ($nextObj = $workflowitems->next()) + { + $userSequences = new WorkflowUserSequences; + $idworkflowitem = $nextObj->get("idworkflowitem"); + $userSequences->select("idworkflowitem = '$idworkflowitem'"); + + if ($nextSeqObj = $userSequences->next()) + { + $obj->set("lastusersequence", $obj->get("idusersequence")); + $obj->set("idusersequence",$nextSeqObj->get("idusersequence")); + $obj->set("laststatus", "confirm"); + $obj->store(); + } + } + } + + } + break; + case "reject": + $artAllocations = new WorkflowArtAllocations; + $artAllocations->select("idartlang = '$idartlang'"); + + if ($obj = $artAllocations->next()) + { + $usersequence = new WorkflowUserSequence; + $usersequence->loadByPrimaryKey($obj->get("idusersequence")); + + $workflowitem = $usersequence->getWorkflowItem(); + + $idworkflow = $workflowitem->get("idworkflow"); + $newpos = 1; + + $workflowitems = new WorkflowItems; + $workflowitems->select("idworkflow = '$idworkflow' AND position = '".Contenido_Security::escapeDB($newpos, NULL)."'"); + + if ($nextObj = $workflowitems->next()) + { + $userSequences = new WorkflowUserSequences; + $idworkflowitem = $nextObj->get("idworkflowitem"); + $userSequences->select("idworkflowitem = '$idworkflowitem'"); + + if ($nextSeqObj = $userSequences->next()) + { + $obj->set("lastusersequence", $obj->get("idusersequence")); + $obj->set("idusersequence",$nextSeqObj->get("idusersequence")); + $obj->set("laststatus", "reject"); + $obj->store(); + } + } + } + break; + + case "revise": + $db = new DB_ConLite; + $sql = "SELECT idart, idlang FROM ".$cfg["tab"]["art_lang"] ." WHERE idartlang = '".Contenido_Security::escapeDB($idartlang, $db)."'"; + $db->query($sql); + $db->next_record(); + $idart = $db->f("idart"); + $idlang = $db->f("idlang"); + + $newidart = conCopyArticle($idart,$idcat, "foo"); + + break; + default: + } +} + +function getWorkflowForUserSequence ($usersequence) +{ + $usersequences = new WorkflowUserSequences; + $workflowitems = new WorkflowItems; + $usersequences->select("idusersequence = '$usersequence'"); + + if ($obj = $usersequences->next()) + { + $idworkflowitem = $obj->get("idworkflowitem"); + } else { + return false; + } + + $workflowitems->select("idworkflowitem = '$idworkflowitem'"); + if ($obj = $workflowitems->next()) + { + return $obj->get("idworkflow"); + } else { + return false; + } +} + +function workflowSelect ($listid, $default, $idcat) +{ + global $idclient, $cfg, $frame, $area, $workflowworkflows, $client, $lang, $wfcache, $workflowSelectBox; + + $oSelectBox = new cHTMLSelectElement('workflow'); + $oSelectBox = $workflowSelectBox; + + $default = (int) $default; + $workflowSelectBox->updateAttributes(array("id" => "wfselect" . $idcat)); + $workflowSelectBox->updateAttributes(array("name" => "wfselect" . $idcat)); + $workflowSelectBox->setDefault($default); + + $sButton =''; + + return $workflowSelectBox->render().$sButton; +} + +function workflowInherit ($idcat) +{ + global $idclient, $cfg, $frame, $area, $workflowworkflows, $sess; + $sUrl = $sess->url("main.php?area=$area&frame=$frame&modidcat=$idcat&action=workflow_inherit_down"); + $sButton =''; + return $sButton; +} + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_edit.php b/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_edit.php new file mode 100644 index 0000000..ae3fa08 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_edit.php @@ -0,0 +1,109 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2003-05-20 + * + * $Id: include.workflow_edit.php 312 2014-06-18 11:01:08Z oldperl $ + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +plugin_include('workflow', 'classes/class.workflow.php'); + +$form = new UI_Table_Form("workflow_edit"); +$userclass = new User; +$workflows = new Workflows; + +$workflow = $workflows->loadItem($idworkflow); + +if ($action == "workflow_save") +{ + if ($idworkflow == "-1") + { + $workflow = $workflows->create(); + } + + $workflow->set("name",clHtmlSpecialChars($wfname)); + $workflow->set("description",clHtmlSpecialChars($wfdescription)); + $idworkflow = $workflow->get("idworkflow"); + $workflow->store(); +} + +if ((int) $idworkflow == 0) { + $idworkflow = $_GET['idworkflow']; +} + +if ($idworkflow) { + $sReloadScript = ""; +} else { + $sReloadScript = ''; +} + + +//function formGenerateField ($type, $name, $initvalue, $width, $maxlen) +$form->setVar("area",$area); +$form->setVar("action","workflow_save"); +$form->setVar("idworkflow", $idworkflow); +$form->setVar("frame", $frame); + +if ($workflow->virgin) +{ + $name = i18n("New Workflow", "workflow"); + $header = i18n("Create new workflow", "workflow"); +} else { + $header = i18n("Edit workflow", "workflow"); + $description = $workflow->get("description"); + $name = $workflow->get("name"); + $created = $workflow->get("created"); + $author = $userclass->getRealname($workflow->get("idauthor")); +} + +$form->addHeader($header); +$form->add(i18n("Workflow name", "workflow"),formGenerateField("text","wfname",$name,40,255)); +$form->add(i18n("Description", "workflow"),formGenerateField("textbox","wfdescription",$description,50,10)); +$form->add(i18n("Author", "workflow"),$author); +$form->add(i18n("Created", "workflow"),$created); + +$page = new UI_Page; +$page->setContent($form->render(true)); +$page->addScript('reload', $sReloadScript); + +$page->render(); + + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_left_top.php b/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_left_top.php new file mode 100644 index 0000000..9364f7e --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_left_top.php @@ -0,0 +1,48 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2003-07-18 + * + * $Id: include.workflow_left_top.php 2 2011-07-20 12:00:48Z oldperl $ + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$create = new Link; +$create->setMultiLink("workflow","","workflow_common","workflow_create"); +//$create->setCLink("workflow_common",4,"workflow_create"); +$create->setContent(i18n("Create workflow", "workflow")); +$create->setCustom("idworkflow","-1"); + +$aAttributes = array(); +$aAttributes['class'] = "addfunction"; +$create->updateAttributes($aAttributes); + +$ui = new UI_Left_Top; +$ui->setLink($create); +$ui->render(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_list.php b/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_list.php new file mode 100644 index 0000000..3e8f2c6 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_list.php @@ -0,0 +1,129 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2006-01-13 + * + * $Id: include.workflow_list.php 2 2011-07-20 12:00:48Z oldperl $ + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +$iIdMarked = (int) $_GET['idworkflow']; + +plugin_include('workflow', 'classes/class.workflow.php'); + +$workflows = new Workflows; +$sScript = ''; +if ($action == "workflow_delete") +{ + $workflows->delete($idworkflow); + $sScript = ''; +} + +$ui = new UI_Menu; +$workflows->select("idclient = '$client' AND idlang = '$lang'"); + +while ($workflow = $workflows->next()) +{ + $wfid = $workflow->getField("idworkflow"); + $wfname = $workflow->getField("name"); + $wfdescription = $workflow->getField("description"); + + /* Create the link to show/edit the workflow */ + $link = new Link; + $link->setMultiLink("workflow","","workflow_common","workflow_show"); + $link->setAlt($wfdescription); + $link->setCustom("idworkflow",$wfid); + + $delTitle = i18n("Delete workflow", "workflow"); + $delDescr = sprintf(i18n("Do you really want to delete the following workflow:

    %s
    ", "workflow"),$wfname); + $delete = ''.$delTitle.''; + + $ui->setTitle($wfid, $wfname); + $ui->setLink($wfid, $link); + + $ui->setActions($wfid, 'delete', $delete); + + if ($wfid == $iIdMarked) { + $ui->setExtra ($wfid, 'id="marked" '); + } + +} +$content = $ui->render(false); + +$delScript = ' + '; + +$sInitRowMark = ""; + +$msgboxInclude = ' '; +$page = new UI_Page; +$page->addScript('include', $msgboxInclude); +$page->addScript('del',$delScript); +$page->addScript('refresh', $sScript); +$page->setMargin(0); +$page->setContent($content.$sInitRowMark); +$page->render(); + +?> \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_steps.php b/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_steps.php new file mode 100644 index 0000000..10170a9 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_steps.php @@ -0,0 +1,405 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * @modified 2008-12-05 Andreas Lindner, make select box values for time unit selection language independent + + * {@internal + * created + * + * $Id: include.workflow_steps.php 312 2014-06-18 11:01:08Z oldperl $: + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +plugin_include('workflow', 'classes/class.workflow.php'); +plugin_include('workflow', 'includes/functions.workflow.php'); +cInclude("includes", "functions.encoding.php"); + +$iIdMarked = (int) $_GET['idworkflowitem']; + +$availableWorkflowActions= WorkflowActions :: getAvailableWorkflowActions(); + +$sCurrentEncoding = getEncodingByLanguage ($db, $lang, $cfg); + +if (clHtmlEntities($adduser, ENT_COMPAT, $sCurrentEncoding) == i18n("Add User", "workflow")) { + $action= "workflow_create_user"; +} + +/* Function: Move step up */ +if ($action == "workflow_step_up") { + $workflowitems= new WorkflowItems; + $workflowitems->swap($idworkflow, $position, $position -1); +} + +/* Function: Move step down */ +if ($action == "workflow_step_down") { + $workflowitems= new WorkflowItems; + $workflowitems->swap($idworkflow, $position, $position +1); +} + +/* Function: Move user up */ +if ($action == "workflow_user_up") { + $workflowitems= new WorkflowUserSequences; + $workflowitems->swap($idworkflowitem, $position, $position -1); +} + +/* Function: Move step down */ +if ($action == "workflow_user_down") { + $workflowitems= new WorkflowUserSequences; + $workflowitems->swap($idworkflowitem, $position, $position +1); +} + +/* Function: Create new step */ +if ($action == "workflow_create_step") { + $workflowitems= new WorkflowItems; + $item= $workflowitems->create($idworkflow); + $item->set("name", i18n("New Workflow Step", "workflow")); + $item->store(); + $idworkflowitem= $item->get("idworkflowitem"); +} + +/* Function: Delete step */ +if ($action == "workflow_step_delete") { + $workflowitems= new WorkflowItems; + $workflowitems->delete($idworkflowitem); +} + +/* Function: Add user */ +if ($action == "workflow_create_user") { + $workflowusers= new WorkflowUserSequences; + $new= $workflowusers->create($idworkflowitem); +} + +/* Function: Remove user */ +if ($action == "workflow_user_delete") { + $workflowusers= new WorkflowUserSequences; + $workflowusers->delete($idusersequence); +} + +/* Function: Save step */ +if ($action == "workflow_save_step" || $action == "workflow_create_user") { + $workflowactions= new WorkflowActions; + + foreach ($availableWorkflowActions as $key => $value) { + if ($wfactions[$key] == 1) { + $workflowactions->set($idworkflowitem, $key); + } else { + $workflowactions->remove($idworkflowitem, $key); + } + } + + $workflowitem= new WorkflowItem; + $workflowitem->loadByPrimaryKey($idworkflowitem); + $workflowitem->setField('idtask', $wftaskselect); + $workflowitem->setField('name', $wfstepname); + $workflowitem->setField('description', $wfstepdescription); + $workflowitem->store(); + + $usersequences= new WorkflowUserSequences; + $usersequences->select("idworkflowitem = '$idworkflowitem'"); + + while ($usersequence= $usersequences->next()) { + $wftime= "time" . $usersequence->get("idusersequence"); + $wfuser= "user" . $usersequence->get("idusersequence"); + + $wftimelimit= "wftimelimit" . $usersequence->get("idusersequence"); + $usersequence->set("timeunit", $$wftime); + $usersequence->set("iduser", $$wfuser); + $usersequence->set("timelimit", $$wftimelimit); + $usersequence->set("emailnoti", $wfemailnoti[$usersequence->get("idusersequence")]); + $usersequence->set("escalationnoti", $wfescalnoti[$usersequence->get("idusersequence")]); + $usersequence->store(); + + } +} + +function getTimeUnitSelector($listid, $default) { + global $idclient, $cfg, $auth; + + $timeunits = array (); + $timeunits['Seconds'] = i18n("Seconds", "workflow"); + $timeunits['Minutes'] = i18n("Minutes", "workflow"); + $timeunits['Hours'] = i18n("Hours", "workflow"); + $timeunits['Days'] = i18n("Days", "workflow"); + $timeunits['Weeks'] = i18n("Weeks", "workflow"); + $timeunits['Months'] = i18n("Months", "workflow"); + $timeunits['Years'] = i18n("Years", "workflow"); + + $tpl2= new Template; + $tpl2->set('s', 'NAME', 'time' . $listid); + $tpl2->set('s', 'CLASS', 'text_small'); + $tpl2->set('s', 'OPTIONS', 'size=1'); + + foreach ($timeunits as $key => $value) { + + $tpl2->set('d', 'VALUE', $key); + $tpl2->set('d', 'CAPTION', $value); + + if ($default == $key) { + $tpl2->set('d', 'SELECTED', 'SELECTED'); + } else { + $tpl2->set('d', 'SELECTED', ''); + } + + $tpl2->next(); + } + + return $tpl2->generate($cfg['path']['templates'] . $cfg['templates']['generic_select'], true); + +} + +function getWorkflowList() { + global $idworkflow, $cfg; + + $ui= new UI_Menu; + $workflowitems= new WorkflowItems; + + $workflowitems->select("idworkflow = '$idworkflow'", "", "position ASC"); + + while ($workflowitem= $workflowitems->next()) { + $pos= $workflowitem->get("position"); + $name= $workflowitem->get("name"); + $id= $workflowitem->get("idworkflowitem"); + + $edititem= new Link; + $edititem->setCLink("workflow_steps", 4, "workflow_step_edit"); + $edititem->setCustom("idworkflowitem", $id); + $edititem->setCustom("idworkflow", $idworkflow); + + + $moveup= new Link; + $moveup->setCLink("workflow_steps", 4, "workflow_step_up"); + $moveup->setCustom("idworkflowitem", $id); + $moveup->setCustom("idworkflow", $idworkflow); + $moveup->setCustom("position", $pos); + $moveup->setAlt(i18n("Move step up", "workflow")); + $moveup->setContent(''); + + $movedown= new Link; + $movedown->setCLink("workflow_steps", 4, "workflow_step_down"); + $movedown->setCustom("idworkflowitem", $id); + $movedown->setCustom("idworkflow", $idworkflow); + $movedown->setCustom("position", $pos); + $movedown->setAlt(i18n("Move step down", "workflow")); + $movedown->setContent(''); + + + + $deletestep= new Link; + $deletestep->setCLink("workflow_steps", 4, "workflow_step_delete"); + $deletestep->setCustom("idworkflowitem", $id); + $deletestep->setCustom("idworkflow", $idworkflow); + $deletestep->setCustom("position", $pos); + $deletestep->setAlt(i18n("Delete step", "workflow")); + $deletestep->setContent(''); + + $ui->setTitle($id, "$pos. $name"); + $ui->setLink($id, $edititem); + + if ($pos > 1) { + $ui->setActions($id, "moveup", $moveup->render()); + } else { + $ui->setActions($id, "moveup", ''); + } + + if ($pos < $workflowitems->count()) { + $ui->setActions($id, "movedown", $movedown->render()); + } else { + $ui->setActions($id, "movedown", ''); + } + + $ui->setActions($id, "delete", $deletestep->render()); + + if ($_GET['idworkflowitem'] == $id) { + $ui->setExtra ($id, 'id="marked" '); + } + } + + + $content= $ui->render(false); + + return ($content); +} + +function createNewWorkflow() { + global $idworkflow, $cfg; + $content= ""; + $ui= new UI_Menu; + $rowmark = false; + + $createstep= new Link; + $createstep->setCLink("workflow_steps", 4, "workflow_create_step"); + $createstep->setCustom("idworkflow", $idworkflow); + + #$ui->setLink("spacer", NULL); + $ui->setTitle("create", i18n("Create new step", "workflow")); + $ui->setImage("create", $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["plugins"] . "workflow/images/workflow_step_new.gif"); + $ui->setLink("create", $createstep); + $ui->setRowmark ($rowmark); + $ui->setBgColor("create", $cfg['color']['table_header']); + + $content= $ui->render(false); + return $content; + +} + +function editWorkflowStep($idworkflowitem) { + global $area, $idworkflow, $idworkflowitem, $frame, $availableWorkflowActions; + global $notification; + $workflowitem= new WorkflowItem; + + if ($workflowitem->loadByPrimaryKey($idworkflowitem) == false) { + return " "; + } + + $workflowactions= new WorkflowActions; + + $stepname= $workflowitem->get("name"); + $stepdescription= $workflowitem->get("description"); + $id= $workflowitem->get("idworkflowitem"); + $task= $workflowitem->get("idtask"); + + $form= new UI_Table_Form("workflow_edit"); + + $form->setVar("area", $area); + $form->setVar("action", "workflow_save_step"); + $form->setVar("idworkflow", $idworkflow); + $form->setVar("idworkflowitem", $idworkflowitem); + $form->setVar("frame", $frame); + + $form->addHeader(i18n("Edit workflow step", "workflow")); + $form->add(i18n("Step name", "workflow"), formGenerateField("text", "wfstepname", $stepname, 40, 255)); + $form->add(i18n("Step description", "workflow"), formGenerateField("textbox", "wfstepdescription", $stepdescription, 60, 10)); + + foreach ($availableWorkflowActions as $key => $value) { + $actions .= formGenerateCheckbox("wfactions[" . $key . "]", "1", $workflowactions->get($id, $key)) . '' . "
    "; + } + + $form->add(i18n("Actions", "workflow"), $actions); + $form->add(i18n("Assigned users", "workflow"), getWorkflowUsers($idworkflowitem)); + + return $form->render(true); +} + +function getWorkflowUsers($idworkflowitem) { + global $idworkflow, $cfg; + + $ui= new UI_Menu; + $workflowusers= new WorkflowUserSequences; + + $workflowusers->select("idworkflowitem = '$idworkflowitem'", "", "position ASC"); + + while ($workflowitem= $workflowusers->next()) { + $pos= $workflowitem->get("position"); + $iduser= $workflowitem->get("iduser"); + $timelimit= $workflowitem->get("timelimit"); + $timeunit= $workflowitem->get("timeunit"); + $email= $workflowitem->get("emailnoti"); + $escalation= $workflowitem->get("escalationnoti"); + $timeunit= $workflowitem->get("timeunit"); + $id= $workflowitem->get("idusersequence"); + + $moveup= new Link; + $moveup->setCLink("workflow_steps", 4, "workflow_user_up"); + $moveup->setCustom("idworkflowitem", $idworkflowitem); + $moveup->setCustom("idworkflow", $idworkflow); + $moveup->setCustom("position", $pos); + $moveup->setAlt(i18n("Move user up", "workflow")); + #$moveup->setContent(''); + $moveup->setContent(''); + + $movedown= new Link; + $movedown->setCLink("workflow_steps", 4, "workflow_user_down"); + $movedown->setCustom("idworkflowitem", $idworkflowitem); + $movedown->setCustom("idworkflow", $idworkflow); + $movedown->setCustom("position", $pos); + $movedown->setAlt(i18n("Move user down", "workflow")); + $movedown->setContent(''); + + + + $deletestep= new Link; + $deletestep->setCLink("workflow_steps", 4, "workflow_user_delete"); + $deletestep->setCustom("idworkflowitem", $idworkflowitem); + $deletestep->setCustom("idworkflow", $idworkflow); + $deletestep->setCustom("position", $pos); + $deletestep->setCustom("idusersequence", $id); + $deletestep->setAlt(i18n("Delete user", "workflow")); + $deletestep->setContent(''); + + $title= "$pos. " . getUsers($id, $iduser); + $title .= formGenerateField("text", "wftimelimit" . $id, $timelimit, 3, 6); + $title .= getTimeUnitSelector($id, $timeunit); + $altmail= i18n("Notify this user via E-Mail", "workflow"); + $altnoti= i18n("Escalate to this user via E-Mail", "workflow"); + $title .= formGenerateCheckbox("wfemailnoti[" . $id . "]", "1", $email) . ''; + $title .= formGenerateCheckbox("wfescalnoti[" . $id . "]", "1", $escalation) . ''; + + $ui->setTitle($id, $title); + $ui->setLink($id, NULL); + + if ($pos > 1) { + $ui->setActions($id, "moveup", $moveup->render()); + } else { + $ui->setActions($id, "moveup", ''); + } + + if ($pos < $workflowusers->count()) { + $ui->setActions($id, "movedown", $movedown->render()); + } else { + $ui->setActions($id, "movedown", ''); + } + + $ui->setActions($id, "delete", $deletestep->render()); + + $ui->setImage($id, $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["plugins"] . "workflow/images/workflow_user.gif"); + + } + + $createstep= new Link; + $createstep->setCLink("workflow_steps", 4, "workflow_create_user"); + $createstep->setCustom("idworkflow", $idworkflow); + $createstep->setCustom("idworkflowitem", $idworkflowitem); + + $ui->setLink("spacer", NULL); + + $ui->setTitle("create", ''); + $ui->setLink("create", NULL); + $content= $ui->render(false); + + return ($content); +} + +$tpl= new Template; +$tpl->set('s', 'NEW', createNewWorkflow()); +$tpl->set('s', 'STEPS', getWorkflowList()); +$tpl->set('s', 'EDITSTEP', editWorkflowStep($idworkflowitem)); +$tpl->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]); +$frame= $tpl->generate($cfg["path"]["contenido"] . $cfg["path"]["plugins"] . "workflow/templates/template.workflow_steps.html", true); + +$page= new UI_Page; +$page->setContent($frame); +$page->render(); +?> diff --git a/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_subnav.php b/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_subnav.php new file mode 100644 index 0000000..c45108b --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_subnav.php @@ -0,0 +1,113 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2003-05-20 + * modified 2010-05-20, Murat Purc, removed request check during processing ticket [#CON-307] + * + * $Id: include.workflow_subnav.php 2 2011-07-20 12:00:48Z oldperl $ + * }} + * + */ + +if (!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + + $nav = new Contenido_Navigation; + + $parentarea = getParentAreaID($area); + $sql = "SELECT + idarea + FROM + ".$cfg["tab"]["area"]." AS a + WHERE + a.name = '".Contenido_Security::escapeDB($parentarea, $db)."' OR + a.parent_id = '".Contenido_Security::escapeDB($parentarea, $db)."' + ORDER BY + idarea"; + + $db->query($sql); + + $in_str = ""; + + while ( $db->next_record() ) { + $in_str .= $db->f('idarea') . ','; + } + + $len = strlen($in_str)-1; + $in_str = substr($in_str, 0, $len); + $in_str = '('.$in_str.')'; + + $sql = "SELECT + b.location AS location, + a.name AS name + FROM + ".$cfg["tab"]["area"]." AS a, + ".$cfg["tab"]["nav_sub"]." AS b + WHERE + b.idarea IN ".Contenido_Security::escapeDB($in_str, $db)." AND + b.idarea = a.idarea AND + b.level = 1 + ORDER BY + b.idnavs"; + + $db->query($sql); + + while ( $db->next_record() ) { + + # Extract caption from + # the xml language file + $caption = $nav->getName($db->f("location")); + + $tmp_area = $db->f("name"); + + # Set template data + $tpl->set("d", "ID", 'c_'.$tpl->dyn_cnt); + $tpl->set("d", "CLASS", ''); + $tpl->set("d", "OPTIONS", ''); + $tpl->set("d", "CAPTION", ''.$caption.''); + if ($area == $tmp_area) + { + $tpl->set('s', 'DEFAULT', markSubMenuItem($tpl->dyn_cnt,true)); + } + $tpl->next(); + + } + + $tpl->set('s', 'COLSPAN', ($tpl->dyn_cnt * 2) + 2); + $tpl->set('s', 'IDCAT', $idcat); + $tpl->set('s', 'SESSID', $sess->id); + $tpl->set('s', 'CLIENT', $client); + $tpl->set('s', 'LANG', $lang); + + + # Generate the third + # navigation layer + if ($idworkflow <= 0) + { + $tpl->generate($cfg["path"]["templates"].$cfg["templates"]["subnav_blank"]); + } else { + $tpl->generate($cfg["path"]["templates"] . $cfg["templates"]["subnav"]); + } + + +?> diff --git a/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_tasks.php b/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_tasks.php new file mode 100644 index 0000000..79412f5 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/includes/include.workflow_tasks.php @@ -0,0 +1,274 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * + * {@internal + * created 2003-07-30 + * + * $Id: include.workflow_tasks.php 312 2014-06-18 11:01:08Z oldperl $ + * }} + * + */ + +if(!defined('CON_FRAMEWORK')) { + die('Illegal call'); +} + + +plugin_include('workflow', 'classes/class.workflow.php'); +plugin_include('workflow', 'includes/functions.workflow.php'); + +global $sess; +$sSession = $sess->id; + +$wfa = new WorkflowArtAllocations; +$wfu = new WorkflowUserSequences; +$users = new User; +$db2 = new DB_ConLite; + +ob_start(); + +if ($usershow == "") +{ + $usershow = $auth->auth["uid"]; +} + +if (!$perm->have_perm_area_action($area, "workflow_task_user_select")) +{ + $usershow = $auth->auth["uid"]; +} + +if ($action == "workflow_do_action") +{ + $selectedAction = "wfselect".$modidartlang; + doWorkflowAction($modidartlang, $GLOBALS[$selectedAction]); +} + +$wfa->select(); + +while ($wfaitem = $wfa->next()) +{ + $wfaid = $wfaitem->get("idartallocation"); + $usersequence[$wfaid] = $wfaitem->get("idusersequence"); + $lastusersequence[$wfaid] = $wfaitem->get("lastusersequence"); + $article[$wfaid] = $wfaitem->get("idartlang"); +} + + +if (is_array($usersequence)) +{ +foreach ($usersequence as $key => $value) +{ + $wfu->select("idusersequence = '$value'"); + if ($obj = $wfu->next()) + { + $userids[$key] = $obj->get("iduser"); + } +} +} + +if (is_array($userids)) +{ +foreach ($userids as $key=>$value) +{ + $isCurrent[$key] = false; + + if ($usershow == $value) + { + $isCurrent[$key] = true; + } + + if ($users->loadUserByUserID($value) == false) + { + /* Yes, it's a group. Let's try to load the group members! */ + $sql = "SELECT user_id FROM " + .$cfg["tab"]["groupmembers"]." + WHERE group_id = '".$value."'"; + $db2->query(Contenido_Security::escapeDB($sql, $db2)); + + while ($db2->next_record()) + { + if ($db2->f("user_id") == $usershow) + { + $isCurrent[$key] = true; + } + } + } else { + if ($value == $usershow) + { + $isCurrent[$key] = true; + } + } + + if ($lastusersequence[$key] == $usersequence[$key]) + { + $isCurrent[$key] = false; + } +} +} + +$tpl->reset(); +$tpl->setEncoding('iso-8859-1'); +$tpl->set('s', 'SESSID', $sSession); +$tpl->set('s', 'SESSNAME', $sess->name); +$iIDCat = 0; +$iIDTpl = 0; + +if ($perm->have_perm_area_action($area, "workflow_task_user_select")) +{ + $form = new UI_Form("showusers", $sess->url("main.php?area=$area&frame=$frame")); + $form->setVar("area",$area); + $form->setEvent("submit", "setUsershow();"); + $form->setVar("frame", $frame); + $form->setVar("action", "workflow_task_user_select"); + $form->add("select",i18n("Show users").": ".getUsers("show",$usershow)); + $form->add("button", ''); + + $tpl->set('s', 'USERSELECT', $form->render(true)); +} else { + $tpl->set('s', 'USERSELECT', ''); +} + +$pageTitle = i18n('Search results').' - '.i18n('Workflow tasks', 'workflow'); +$tpl->set('s', 'PAGE_TITLE', $pageTitle); + +$tpl->set('s', 'TH_START', i18n("Article")); +$tpl->set('s', 'TH_TEMPLATE', i18n("Template")); +$tpl->set('s', 'TH_ACTIONS', i18n("Actions")); +$tpl->set('s', 'TH_TITLE', i18n("Title")); +$tpl->set('s', 'TH_CHANGED', i18n("Changed")); +$tpl->set('s', 'TH_PUBLISHED', i18n("Published")); +$tpl->set('s', 'TH_WORKFLOW_STEP', i18n("Workflow Step", 'workflow')); +$tpl->set('s', 'TH_WORKFLOW_ACTION', i18n("Workflow Action", 'workflow')); +$tpl->set('s', 'TH_WORKFLOW_EDITOR', i18n("Workflow Editor")); +$tpl->set('s', 'TH_LAST_STATUS', i18n("Last status", 'workflow')); + +$currentUserSequence = new WorkflowUserSequence; + +if (is_array($isCurrent)) +{ + +foreach ($isCurrent as $key => $value) +{ + if ($value == true) + { + $idartlang = Contenido_Security::toInteger($article[$key]); + $lang = Contenido_Security::toInteger($lang); + $client = Contenido_Security::toInteger($client); + + $sql = "SELECT B.idcat AS idcat, A.title AS title, A.created AS created, A.lastmodified AS changed, + A.idart as idart, E.name as tpl_name, A.idartlang as idartlang, F.idcatlang as idcatlang, + B.idcatart as idcatart, A.idlang as art_lang, F.startidartlang as startidartlang + FROM (".$cfg["tab"]["art_lang"]." AS A, + ".$cfg["tab"]["cat_art"]." AS B, + ".$cfg["tab"]["art"]." AS C) + LEFT JOIN ".$cfg['tab']['tpl_conf']." as D ON A.idtplcfg = D.idtplcfg + LEFT JOIN ".$cfg['tab']['tpl']." as E ON D.idtpl = E.`idtpl` + LEFT JOIN ".$cfg['tab']['cat_lang']." as F ON B.idcat = F.`idcat` + WHERE A.idartlang = '$idartlang' AND + A.idart = B.idart AND + A.idart = C.idart AND + A.idlang = '$lang' AND + C.idclient = '$client';"; + + $db->query($sql); + + if ($db->next_record()) + { + global $area; + //$area = "con"; + $idcat = $db->f("idcat"); + $idart = $db->f("idart"); + + # create javascript multilink + $tmp_mstr = '%s'; + + $mstr = sprintf($tmp_mstr, 'right_top', + $sess->url("main.php?area=con&frame=3&idcat=$idcat&idtpl=$idtpl"), + 'right_bottom', + $sess->url("main.php?area=con_editart&action=con_edit&frame=4&idcat=$idcat&idtpl=$idtpl&idart=$idart"), + $db->f("title")); + + $laststatus = getLastWorkflowStatus($idartlang); + $username = getGroupOrUserName($userids[$key]); + $actionSelect = piworkflowRenderColumn($idcat, $idart, $db->f('idartlang'), 'wfaction'); + + $currentUserSequence->loadByPrimaryKey($usersequence[$key]); + $workflowItem = $currentUserSequence->getWorkflowItem(); + $step = $workflowItem->get("name"); + $description = $workflowItem->get("description"); + + $sRowId = $db->f('idart').'-'.$db->f('idartlang').'-'.$db->f('idcat').'-'.$db->f('idcatlang').'-'.$db->f('idcatart').'-'.$db->f('art_lang'); + + if( $db->f('startidartlang') == $db->f('idartlang') ) { + $makeStartarticle = "\"{$sFlagTitle}\""; + } else { + $makeStartarticle = "\"{$sFlagTitle}\""; + } + + $todoListeSubject = i18n("Reminder"); + $sReminder = i18n("Set reminder / add to todo list"); + $sReminderHtml = "\"$sReminder\""; + + $templatename = $db->f('tpl_name'); + if (!empty($templatename)) { + $templatename = clHtmlEntities($templatename); + } else { + $templatename = '--- ' . i18n("None") . ' ---'; + } + + if ($i == 0) { + $iIDCat = $db->f("idcat"); + $iIDTpl = $idtpl; + $tpl->set('s', 'FIRST_ROWID', $sRowId); + } + + $tpl->set('d', 'START', $makeStartarticle); + $tpl->set('d', 'TITLE', $mstr); + $tpl->set('d', 'LAST_STATUS', $laststatus); + $tpl->set('d', 'WORKFLOW_EDITOR', $username); + $tpl->set('d', 'WORKFLOW_STEP', $step); + $tpl->set('d', 'WORKFLOW_ACTION', $actionSelect); + $tpl->set('d', 'TEMPLATE', $templatename); + $tpl->set('d', 'BGCOLOR', $cfg['color']['table_dark_offline']); + $tpl->set('d', 'ROWID', $sRowId); + $tpl->set('d', 'ACTIONS', $sReminderHtml); + $tpl->next(); + $i++; + } + } +} +} + +if ($i > 0) { + $tpl->set('s', 'NO_ARTICLES_ROW'); +} else { + $sRow = '' . i18n("No article found.") . ''; + $tpl->set('s', 'NO_ARTICLES_ROW', $sRow); +} + +$sLoadSubnavi = 'parent.parent.frames["right"].frames["right_top"].location.href = \'main.php?area=con&frame=3&idcat=' . $iIDCat . '&idtpl=' . $iIDTpl . '&contenido=' . $sSession . "';"; +$tpl->set('s', 'SUBNAVI', $sLoadSubnavi); + +$frame = ob_get_contents(); +ob_end_clean(); + +$tpl->generate($cfg["path"]['contenido'] . $cfg["path"]["plugins"] . "workflow/templates/template.workflow_tasks.html"); + +?> diff --git a/branches/conlite20/conlite/plugins/workflow/locale/de_DE/LC_MESSAGES/workflow.mo b/branches/conlite20/conlite/plugins/workflow/locale/de_DE/LC_MESSAGES/workflow.mo new file mode 100644 index 0000000000000000000000000000000000000000..c7808d53e6b92a4d02d0681a1bfe9c613cef3db0 GIT binary patch literal 6472 zcma)=TaX-88OM)+iUAel1w@b|m~hK%b`y~>gv)Mr31N4WH9I5_w#438pjH50)0Fl;w+Bmij=0IoC{wp>#xA~Q~x{M3(uwV zU2s3Na2CD|2JpQwfqUTR;TU`pUIkxe~9)s_OA=G*gmGy_q z`qv?%m>`$Sdw!)ybN9mF@-q@`7=lPxd46&YTuJka@`NL?-Nk= z{7%Uql<_e}g*Db5UX(UINuW52f!tkUw*hAFcmc_>H%qFVw!* zAe8L67fQdmvfhHbsrRAu`YM!O--lY~S$H{o4lcmg;0&C@IMVB3xEKByN}j($>G2;Z zdESLHeFR<#rN=EW_jjoN5PlFo2qov2q0aR&_)+)-lw7}n(({ic{|Ob(=V26%##{w& zgV#an`2dt2k3#;;4@>?W%3of9SHV}I>~T4pXuWHo>Ib3ZI|8N8C(HH_%D+!R+2uj_ zVfYx79zTWJ_xZB@Rk)M-MF_tG-U7#3hF$533Xo2L&+uKm{1Bl7Z15omQ0rF=aFWaAlH&Oo; zl>Fzj8743nL+v*Xwf+>uz4J9ssGm|j()R|+BIPWK&RMp+i-Nf37)8(R6v?Rb)}#Gc zHh=cN&)V{N@(Q zeA#$5RLtqoS?JvNP(DVvjv{*>p&X+IwoS5jsv2Ph4S9zxRGO_9HFe7Rqdrt|!GDcnWTa~nmztVd@$ zoxc_Fewg=r%6bL)xt?n&x9UaDWIOevFfo&zj=eK+v6+lhza6-WwiCG|yfU@!K0it8 zRzI;`5Ie84ZoMS&yP@mYG_sz}SR-*KGZ(g_M+HKdF@rL8F&f1cl?yL1D-_jkkwCJU%k~DO?$jrZB*i7O5)O7 zw0r$dGuP8bvF*lDHrS%zfl`WEy`G1v^)|J(h*F3->gD*P9s2{hkeQC`dX!mI3W9aJ=3xNNr&H{j_MBab0uI{`yR|i&`0P%%a0FJ7OSNYTdLUjVS{QVeIZaQOVt+4rxs3bFoLZli8WC*J`$r zp^24YH02GU*LP-d%^M69HA;C&nN*tgkP_f%s%urj(DG9<_;Ke}6I1C@zt|$>59^SmxGF+eKmEhivGeh|&#>ThtWl*YXwAKfRnY#PZ z-DEXCywSFM=O8tH`*30^R7c32etm}vOCL}<@acQ{BtXp4;;!ZM$?>4PJ zu`e9<6=AW!CXMlC?a15A}r=??EEyb)oMw*M|w`}M%HzR7COeCsNY>ZZs=qinVseMxmx%xWZs%1 z?vWys)1S!VLNL<#M%K4{A~!e+mhs|cHYTT>$h1#J01}^e#>a=fZjz54x~>Gb{hd*+ zqYS+1K9XmG*+i!M_Oya zPTN{)J30l+prrGc@fYNg@^;bZs_VzAatnMY)I|vG^>*4Fw%&@$aPY&P7bqY~&#VK< z=}g$xTao8(>aV^Bo7?IgH;t>?D%))8n+$D-+ZGGgHsS(iU4Cb>E?M;gTw8Wcv)nK1 z#X=8tGbJ{AiV=hp_ozI););A~^4nAu@Ci$6t>QwZ8&asd-J1x~O7hW7F^ccB??`t< z3np1}g)5g?>I^e$t@HkTD%#WwSK88$r=>Hja@t}4Z!yFy66l*-baeO|7FP%kV=a%! zVYLcPGwb-Gl{wCKUBHcxR70bgKC>6FGiMzu2j=Oaz5ovMO_j!3J$I*m?fRRp1Jx;Y z_zv~T4+g*an~(}zOI+6 zqw& zD)nu?tQLVc95nQ~eA{6MH)>1}7m2z2kB2RT$7+#R^^Gp%F26Qh^<7LfZ1Pu`X1IR- TPa=PH%k{N9wb0z*;mYQJ58dn) literal 0 HcmV?d00001 diff --git a/branches/conlite20/conlite/plugins/workflow/locale/de_DE/LC_MESSAGES/workflow.po b/branches/conlite20/conlite/plugins/workflow/locale/de_DE/LC_MESSAGES/workflow.po new file mode 100644 index 0000000..611d4a1 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/locale/de_DE/LC_MESSAGES/workflow.po @@ -0,0 +1,453 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-05-18 11:03+0200\n" +"PO-Revision-Date: 2011-05-18 11:17+0100\n" +"Last-Translator: Ortwin Pinke \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Basepath: M:\\Projekte_Persoenlich\\timo.hummel\\plugin_sources\\\n" +"X-Poedit-KeywordsList: i18n\n" +"X-Poedit-SearchPath-0: workflow\n" + +#: includes/config.plugin.php:40 +#: includes/include.workflow_list.php:71 +msgid "Delete workflow" +msgstr "Workflow löschen" + +#: includes/config.plugin.php:41 +msgid "Select workflow task" +msgstr "Workflow-Aufgabe auswählen" + +#: includes/config.plugin.php:42 +msgid "Show workflow" +msgstr "Workflow zeigen" + +#: includes/config.plugin.php:43 +#: includes/include.workflow_left_top.php:37 +msgid "Create workflow" +msgstr "Neuer Workflow" + +#: includes/config.plugin.php:44 +#: includes/include.workflow_edit.php:89 +msgid "Edit workflow" +msgstr "Workflow bearbeiten" + +#: includes/config.plugin.php:45 +msgid "Process workflow step" +msgstr "Workflow Schritt durchführen" + +#: includes/config.plugin.php:46 +#: includes/config.plugin.php:47 +#: includes/config.plugin.php:178 +msgid "Inherit workflow down" +msgstr "Workflow nach unten vererben" + +#: includes/config.plugin.php:48 +#: includes/include.workflow_steps.php:292 +msgid "Edit workflow step" +msgstr "Workflow Schritt bearbeiten" + +#: includes/config.plugin.php:49 +msgid "Move workflowstep up" +msgstr "Workflowschritt nach oben verschieben" + +#: includes/config.plugin.php:50 +msgid "Move workflowstep down" +msgstr "Workflowschritt nach unten verschieben" + +#: includes/config.plugin.php:51 +msgid "Save Workflowstep" +msgstr "Workflowschritt speichen" + +#: includes/config.plugin.php:52 +msgid "Create workflowstep" +msgstr "Workflowschritt erstellen" + +#: includes/config.plugin.php:53 +msgid "Delete workflowstep" +msgstr "Workflowschritt löschen" + +#: includes/config.plugin.php:54 +msgid "Move workflowstepuser up" +msgstr "Workflowschrittbenutzer nach oben verschieben" + +#: includes/config.plugin.php:55 +msgid "Move workflowstepuser down" +msgstr "Workflowschrittbenutzer nach unten verschieben" + +#: includes/config.plugin.php:56 +msgid "Create Workflowstepuser" +msgstr "Workflowschrittbenutzer erstellen" + +#: includes/config.plugin.php:57 +msgid "Delete Workflowstepuser" +msgstr "Workflowschrittbenutzer löschen" + +#: includes/config.plugin.php:58 +msgid "Associate workflow with category" +msgstr "Workflow zu Kategorien zuweisen" + +#: includes/config.plugin.php:165 +#: includes/config.plugin.php:421 +#: includes/config.plugin.php:427 +#: includes/include.workflow_tasks.php:233 +#: includes/functions.workflow.php:54 +#: includes/functions.workflow.php:356 +msgid "None" +msgstr "Kein" + +#: includes/config.plugin.php:197 +msgid "Workflow" +msgstr "Workflow" + +#: includes/config.plugin.php:300 +#: includes/include.workflow_tasks.php:157 +msgid "Workflow Step" +msgstr "Workflow Schritt" + +#: includes/config.plugin.php:301 +#: includes/include.workflow_tasks.php:158 +msgid "Workflow Action" +msgstr "Workflow Aktion" + +#: includes/config.plugin.php:302 +#: includes/include.workflow_tasks.php:159 +msgid "Workflow Editor" +msgstr "Workflow Bearbeiter" + +#: includes/config.plugin.php:303 +#: includes/include.workflow_tasks.php:160 +msgid "Last status" +msgstr "Letzter Status" + +#: includes/include.workflow_tasks.php:140 +msgid "Show users" +msgstr "Zeige Benutzer" + +#: includes/include.workflow_tasks.php:148 +msgid "Search results" +msgstr "Suchergebnis" + +#: includes/include.workflow_tasks.php:148 +msgid "Workflow tasks" +msgstr "Workflow Aufgaben" + +#: includes/include.workflow_tasks.php:151 +msgid "Article" +msgstr "Artikel" + +#: includes/include.workflow_tasks.php:152 +msgid "Template" +msgstr "Template" + +#: includes/include.workflow_tasks.php:153 +#: includes/include.workflow_steps.php:300 +msgid "Actions" +msgstr "Aktionen" + +#: includes/include.workflow_tasks.php:154 +msgid "Title" +msgstr "Titel" + +#: includes/include.workflow_tasks.php:155 +msgid "Changed" +msgstr "Geändert" + +#: includes/include.workflow_tasks.php:156 +msgid "Published" +msgstr "Veröffentlichen" + +#: includes/include.workflow_tasks.php:225 +msgid "Reminder" +msgstr "Wiedervorlage" + +#: includes/include.workflow_tasks.php:226 +msgid "Set reminder / add to todo list" +msgstr "Wiedervorlage / zur Todoliste hinzuf&uegen" + +#: includes/include.workflow_tasks.php:262 +#, fuzzy +msgid "No article found." +msgstr "Kein Artikel gefunden" + +#: includes/include.workflow_edit.php:86 +msgid "New Workflow" +msgstr "Neuer Workflow" + +#: includes/include.workflow_edit.php:87 +msgid "Create new workflow" +msgstr "Neuer Workflow erzeugen" + +#: includes/include.workflow_edit.php:97 +msgid "Workflow name" +msgstr "Workflow Name" + +#: includes/include.workflow_edit.php:98 +msgid "Description" +msgstr "Beschreibung" + +#: includes/include.workflow_edit.php:99 +msgid "Author" +msgstr "Autor" + +#: includes/include.workflow_edit.php:100 +msgid "Created" +msgstr "Erstellt" + +#: includes/include.workflow_list.php:72 +#, php-format +msgid "Do you really want to delete the following workflow:

    %s
    " +msgstr "Wollen Sie wirklich den folgenden Workflow löschen:

    %s
    " + +#: includes/include.workflow_steps.php:46 +#: includes/include.workflow_steps.php:388 +msgid "Add User" +msgstr "Benutzer hinzufügen" + +#: includes/include.workflow_steps.php:78 +msgid "New Workflow Step" +msgstr "Neuer Workflow Schritt" + +#: includes/include.workflow_steps.php:142 +msgid "Seconds" +msgstr "Sekunden" + +#: includes/include.workflow_steps.php:143 +msgid "Minutes" +msgstr "Minuten" + +#: includes/include.workflow_steps.php:144 +msgid "Hours" +msgstr "Stunden" + +#: includes/include.workflow_steps.php:145 +msgid "Days" +msgstr "Tage" + +#: includes/include.workflow_steps.php:146 +msgid "Weeks" +msgstr "Wochen" + +#: includes/include.workflow_steps.php:147 +msgid "Months" +msgstr "Monate" + +#: includes/include.workflow_steps.php:148 +msgid "Years" +msgstr "Jahre" + +#: includes/include.workflow_steps.php:197 +msgid "Move step up" +msgstr "Schritt nach oben bewegen" + +#: includes/include.workflow_steps.php:205 +msgid "Move step down" +msgstr "Schritt nach unten verschieben" + +#: includes/include.workflow_steps.php:215 +msgid "Delete step" +msgstr "Schritt löschen" + +#: includes/include.workflow_steps.php:257 +msgid "Create new step" +msgstr "Neuen Schritt erzeugen" + +#: includes/include.workflow_steps.php:293 +msgid "Step name" +msgstr "Name des Schritts" + +#: includes/include.workflow_steps.php:294 +msgid "Step description" +msgstr "Beschreibung des Schritts" + +#: includes/include.workflow_steps.php:301 +msgid "Assigned users" +msgstr "Zugeordnete Benutzer" + +#: includes/include.workflow_steps.php:329 +msgid "Move user up" +msgstr "Benutzer nach oben verschieben" + +#: includes/include.workflow_steps.php:338 +msgid "Move user down" +msgstr "Benutzer nach unten verschieben" + +#: includes/include.workflow_steps.php:349 +msgid "Delete user" +msgstr "Benutzer löschen" + +#: includes/include.workflow_steps.php:355 +msgid "Notify this user via E-Mail" +msgstr "Diesen Benutzer per e-Mail benachrichtigen" + +#: includes/include.workflow_steps.php:356 +msgid "Escalate to this user via E-Mail" +msgstr "An diesen Benutzer per e-Mail eskalieren" + +#: includes/functions.workflow.php:183 +msgid "Confirm" +msgstr "Bestätigen" + +#: includes/functions.workflow.php:192 +msgid "Back to last editor" +msgstr "Zurück zum letzten Bearbeiter" + +#: includes/functions.workflow.php:201 +#: classes/class.workflowactions.php:77 +msgid "Reject article" +msgstr "Artikel ablehnen" + +#: includes/functions.workflow.php:210 +#: classes/class.workflowactions.php:81 +msgid "Revise article" +msgstr "Artikel überarbeiten" + +#: includes/functions.workflow.php:344 +msgid "Rejected" +msgstr "Abgelehnt" + +#: includes/functions.workflow.php:347 +msgid "Revised" +msgstr "überarbeitet" + +#: includes/functions.workflow.php:350 +msgid "Last" +msgstr "Letzter" + +#: includes/functions.workflow.php:353 +msgid "Confirmed" +msgstr "Bestätigt" + +#: classes/class.workflowartallocation.php:72 +msgid "Article doesn't exist" +msgstr "Artikel existiert nicht." + +#: classes/class.workflowartallocation.php:80 +msgid "Article is already assigned to a usersequence step." +msgstr "Artikel ist bereits Benutzerschritt zugeordnet." + +#: classes/class.workflowartallocation.php:286 +#: classes/class.workflowartallocation.php:295 +msgid "Workflow notification" +msgstr "Workflow Notifikation" + +#: classes/class.workflowartallocation.php:336 +#: classes/class.workflowartallocation.php:346 +msgid "Workflow escalation" +msgstr "Workflow Steigerung" + +#: classes/class.workflowallocation.php:117 +#: classes/class.workflowallocation.php:223 +msgid "Category already has a workflow assigned" +msgstr "Kategorie ist bereits Workflow zugeordnet" + +#: classes/class.workflowallocation.php:126 +#: classes/class.workflowallocation.php:199 +#: classes/class.workflowitems.php:299 +msgid "Workflow doesn't exist" +msgstr "Workflow existiert nicht" + +#: classes/class.workflowallocation.php:233 +msgid "Category doesn't exist, assignment failed" +msgstr "Kategorie existiert nicht, Zuordnung fehlgeschlagen" + +#: classes/class.workflowitems.php:133 +#: classes/class.workflowitems.php:142 +#: classes/class.workflowusersequence.php:139 +#: classes/class.workflowusersequence.php:148 +msgid "Swapping items failed: Item doesn't exist" +msgstr "Tausch der Einträge fehlgeschlagen: Eintrag nicht vorhanden" + +#: classes/class.workflowitems.php:169 +msgid "Can't add item to workflow: Workflow doesn't exist" +msgstr "Zuordnung des Eintrags zum Workflow nicht möglich: Workflow existiert nicht" + +#: classes/class.workflowitems.php:251 +msgid "No item loaded" +msgstr "Kein Eintrag geladen" + +#: classes/class.workflowitems.php:276 +msgid "Requested task doesn't exist, can't assign" +msgstr "Gewünschte Aufgabe existiert nicht, Zuordnung nicht möglich" + +#: classes/class.workflowitems.php:307 +msgid "Position in this workflow already exists." +msgstr "Position existiert bereits in diesem Workflow." + +#: classes/class.workflowactions.php:74 +msgid "Publish article" +msgstr "Artikel veröffentlichen" + +#: classes/class.workflowactions.php:75 +msgid "Lock article" +msgstr "Artikel sperren" + +#: classes/class.workflowactions.php:76 +msgid "Move back to last editor" +msgstr "Zurück zum letzten Bearbeiter" + +#: classes/class.workflowactions.php:78 +msgid "Edit article content" +msgstr "Artikelinhalt bearbeiten" + +#: classes/class.workflowactions.php:79 +msgid "Edit article properties" +msgstr "Artikeleigenschaften bearbeiten" + +#: classes/class.workflowactions.php:80 +msgid "Edit template" +msgstr "Template bearbeiten" + +#: classes/class.workflowusersequence.php:112 +msgid "Workflow item doesn't exist. Can't create entry." +msgstr "Workflow existiert nicht. Eintrag kann nicht erstellt werden." + +#: classes/class.workflowusersequence.php:229 +msgid "Can't set user_id: User or group doesn't exist" +msgstr "Kann Benutzer-Id nicht zuweisen: Benutzer oder Gruppe nicht vorhanden" + +#~ msgid "Recently edited articles" +#~ msgstr "Zuletzt bearbeitete Artikel" + +#~ msgid "Change client" +#~ msgstr "Mandanten wechseln" + +#~ msgid "Welcome" +#~ msgstr "Willkommen" + +#~ msgid "You are logged in as" +#~ msgstr "Sie sind angemeldet als" + +#~ msgid "Last login" +#~ msgstr "Letzter Login" + +#~ msgid "Article is online" +#~ msgstr "Artikel ist online" + +#~ msgid "Article is offline" +#~ msgstr "Artikel ist offline" + +#~ msgid "Current workflow tasks" +#~ msgstr "Aktuelle Workflow Aufgaben" + +#~ msgid "Client" +#~ msgstr "Mandant" + +#~ msgid "Language" +#~ msgstr "Sprache" + +#~ msgid "No tasks found" +#~ msgstr "Keine Aufgabe gefunden" + +#~ msgid "Status" +#~ msgstr "Status" + +#~ msgid "Step" +#~ msgstr "Schritt" + +#~ msgid "Assign workflow to category" +#~ msgstr "Workflow einer Kategorie zuordnen" diff --git a/branches/conlite20/conlite/plugins/workflow/locale/potfiles.txt b/branches/conlite20/conlite/plugins/workflow/locale/potfiles.txt new file mode 100644 index 0000000..bdb342d --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/locale/potfiles.txt @@ -0,0 +1,18 @@ +./includes/include.workflow_subnav.php +./includes/config.plugin.php +./includes/include.workflow_tasks.php +./includes/include.workflow_edit.php +./includes/include.workflow_left_top.php +./includes/include.workflow_list.php +./includes/include.workflow_steps.php +./includes/functions.workflow.php +./cronjobs/advance_workflow.php +./templates/template.workflow_steps.html +./templates/template.workflow_tasks.html +./classes/class.workflowartallocation.php +./classes/class.workflowallocation.php +./classes/class.workflowitems.php +./classes/class.workflowactions.php +./classes/class.workflowtasks.php +./classes/class.workflowusersequence.php +./classes/class.workflow.php diff --git a/branches/conlite20/conlite/plugins/workflow/locale/workflow.pot b/branches/conlite20/conlite/plugins/workflow/locale/workflow.pot new file mode 100644 index 0000000..fee7346 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/locale/workflow.pot @@ -0,0 +1,398 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-05-18 11:03+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: includes/config.plugin.php:40 includes/include.workflow_list.php:71 +msgid "Delete workflow" +msgstr "" + +#: includes/config.plugin.php:41 +msgid "Select workflow task" +msgstr "" + +#: includes/config.plugin.php:42 +msgid "Show workflow" +msgstr "" + +#: includes/config.plugin.php:43 includes/include.workflow_left_top.php:37 +msgid "Create workflow" +msgstr "" + +#: includes/config.plugin.php:44 includes/include.workflow_edit.php:89 +msgid "Edit workflow" +msgstr "" + +#: includes/config.plugin.php:45 +msgid "Process workflow step" +msgstr "" + +#: includes/config.plugin.php:46 includes/config.plugin.php:47 +#: includes/config.plugin.php:178 +msgid "Inherit workflow down" +msgstr "" + +#: includes/config.plugin.php:48 includes/include.workflow_steps.php:292 +msgid "Edit workflow step" +msgstr "" + +#: includes/config.plugin.php:49 +msgid "Move workflowstep up" +msgstr "" + +#: includes/config.plugin.php:50 +msgid "Move workflowstep down" +msgstr "" + +#: includes/config.plugin.php:51 +msgid "Save Workflowstep" +msgstr "" + +#: includes/config.plugin.php:52 +msgid "Create workflowstep" +msgstr "" + +#: includes/config.plugin.php:53 +msgid "Delete workflowstep" +msgstr "" + +#: includes/config.plugin.php:54 +msgid "Move workflowstepuser up" +msgstr "" + +#: includes/config.plugin.php:55 +msgid "Move workflowstepuser down" +msgstr "" + +#: includes/config.plugin.php:56 +msgid "Create Workflowstepuser" +msgstr "" + +#: includes/config.plugin.php:57 +msgid "Delete Workflowstepuser" +msgstr "" + +#: includes/config.plugin.php:58 +msgid "Associate workflow with category" +msgstr "" + +#: includes/config.plugin.php:165 includes/config.plugin.php:421 +#: includes/config.plugin.php:427 includes/include.workflow_tasks.php:233 +#: includes/functions.workflow.php:54 includes/functions.workflow.php:356 +msgid "None" +msgstr "" + +#: includes/config.plugin.php:197 +msgid "Workflow" +msgstr "" + +#: includes/config.plugin.php:300 includes/include.workflow_tasks.php:157 +msgid "Workflow Step" +msgstr "" + +#: includes/config.plugin.php:301 includes/include.workflow_tasks.php:158 +msgid "Workflow Action" +msgstr "" + +#: includes/config.plugin.php:302 includes/include.workflow_tasks.php:159 +msgid "Workflow Editor" +msgstr "" + +#: includes/config.plugin.php:303 includes/include.workflow_tasks.php:160 +msgid "Last status" +msgstr "" + +#: includes/include.workflow_tasks.php:140 +msgid "Show users" +msgstr "" + +#: includes/include.workflow_tasks.php:148 +msgid "Search results" +msgstr "" + +#: includes/include.workflow_tasks.php:148 +msgid "Workflow tasks" +msgstr "" + +#: includes/include.workflow_tasks.php:151 +msgid "Article" +msgstr "" + +#: includes/include.workflow_tasks.php:152 +msgid "Template" +msgstr "" + +#: includes/include.workflow_tasks.php:153 +#: includes/include.workflow_steps.php:300 +msgid "Actions" +msgstr "" + +#: includes/include.workflow_tasks.php:154 +msgid "Title" +msgstr "" + +#: includes/include.workflow_tasks.php:155 +msgid "Changed" +msgstr "" + +#: includes/include.workflow_tasks.php:156 +msgid "Published" +msgstr "" + +#: includes/include.workflow_tasks.php:225 +msgid "Reminder" +msgstr "" + +#: includes/include.workflow_tasks.php:226 +msgid "Set reminder / add to todo list" +msgstr "" + +#: includes/include.workflow_tasks.php:262 +msgid "No article found." +msgstr "" + +#: includes/include.workflow_edit.php:86 +msgid "New Workflow" +msgstr "" + +#: includes/include.workflow_edit.php:87 +msgid "Create new workflow" +msgstr "" + +#: includes/include.workflow_edit.php:97 +msgid "Workflow name" +msgstr "" + +#: includes/include.workflow_edit.php:98 +msgid "Description" +msgstr "" + +#: includes/include.workflow_edit.php:99 +msgid "Author" +msgstr "" + +#: includes/include.workflow_edit.php:100 +msgid "Created" +msgstr "" + +#: includes/include.workflow_list.php:72 +#, php-format +msgid "Do you really want to delete the following workflow:

    %s
    " +msgstr "" + +#: includes/include.workflow_steps.php:46 +#: includes/include.workflow_steps.php:388 +msgid "Add User" +msgstr "" + +#: includes/include.workflow_steps.php:78 +msgid "New Workflow Step" +msgstr "" + +#: includes/include.workflow_steps.php:142 +msgid "Seconds" +msgstr "" + +#: includes/include.workflow_steps.php:143 +msgid "Minutes" +msgstr "" + +#: includes/include.workflow_steps.php:144 +msgid "Hours" +msgstr "" + +#: includes/include.workflow_steps.php:145 +msgid "Days" +msgstr "" + +#: includes/include.workflow_steps.php:146 +msgid "Weeks" +msgstr "" + +#: includes/include.workflow_steps.php:147 +msgid "Months" +msgstr "" + +#: includes/include.workflow_steps.php:148 +msgid "Years" +msgstr "" + +#: includes/include.workflow_steps.php:197 +msgid "Move step up" +msgstr "" + +#: includes/include.workflow_steps.php:205 +msgid "Move step down" +msgstr "" + +#: includes/include.workflow_steps.php:215 +msgid "Delete step" +msgstr "" + +#: includes/include.workflow_steps.php:257 +msgid "Create new step" +msgstr "" + +#: includes/include.workflow_steps.php:293 +msgid "Step name" +msgstr "" + +#: includes/include.workflow_steps.php:294 +msgid "Step description" +msgstr "" + +#: includes/include.workflow_steps.php:301 +msgid "Assigned users" +msgstr "" + +#: includes/include.workflow_steps.php:329 +msgid "Move user up" +msgstr "" + +#: includes/include.workflow_steps.php:338 +msgid "Move user down" +msgstr "" + +#: includes/include.workflow_steps.php:349 +msgid "Delete user" +msgstr "" + +#: includes/include.workflow_steps.php:355 +msgid "Notify this user via E-Mail" +msgstr "" + +#: includes/include.workflow_steps.php:356 +msgid "Escalate to this user via E-Mail" +msgstr "" + +#: includes/functions.workflow.php:183 +msgid "Confirm" +msgstr "" + +#: includes/functions.workflow.php:192 +msgid "Back to last editor" +msgstr "" + +#: includes/functions.workflow.php:201 classes/class.workflowactions.php:77 +msgid "Reject article" +msgstr "" + +#: includes/functions.workflow.php:210 classes/class.workflowactions.php:81 +msgid "Revise article" +msgstr "" + +#: includes/functions.workflow.php:344 +msgid "Rejected" +msgstr "" + +#: includes/functions.workflow.php:347 +msgid "Revised" +msgstr "" + +#: includes/functions.workflow.php:350 +msgid "Last" +msgstr "" + +#: includes/functions.workflow.php:353 +msgid "Confirmed" +msgstr "" + +#: classes/class.workflowartallocation.php:72 +msgid "Article doesn't exist" +msgstr "" + +#: classes/class.workflowartallocation.php:80 +msgid "Article is already assigned to a usersequence step." +msgstr "" + +#: classes/class.workflowartallocation.php:286 +#: classes/class.workflowartallocation.php:295 +msgid "Workflow notification" +msgstr "" + +#: classes/class.workflowartallocation.php:336 +#: classes/class.workflowartallocation.php:346 +msgid "Workflow escalation" +msgstr "" + +#: classes/class.workflowallocation.php:117 +#: classes/class.workflowallocation.php:223 +msgid "Category already has a workflow assigned" +msgstr "" + +#: classes/class.workflowallocation.php:126 +#: classes/class.workflowallocation.php:199 +#: classes/class.workflowitems.php:299 +msgid "Workflow doesn't exist" +msgstr "" + +#: classes/class.workflowallocation.php:233 +msgid "Category doesn't exist, assignment failed" +msgstr "" + +#: classes/class.workflowitems.php:133 classes/class.workflowitems.php:142 +#: classes/class.workflowusersequence.php:139 +#: classes/class.workflowusersequence.php:148 +msgid "Swapping items failed: Item doesn't exist" +msgstr "" + +#: classes/class.workflowitems.php:169 +msgid "Can't add item to workflow: Workflow doesn't exist" +msgstr "" + +#: classes/class.workflowitems.php:251 +msgid "No item loaded" +msgstr "" + +#: classes/class.workflowitems.php:276 +msgid "Requested task doesn't exist, can't assign" +msgstr "" + +#: classes/class.workflowitems.php:307 +msgid "Position in this workflow already exists." +msgstr "" + +#: classes/class.workflowactions.php:74 +msgid "Publish article" +msgstr "" + +#: classes/class.workflowactions.php:75 +msgid "Lock article" +msgstr "" + +#: classes/class.workflowactions.php:76 +msgid "Move back to last editor" +msgstr "" + +#: classes/class.workflowactions.php:78 +msgid "Edit article content" +msgstr "" + +#: classes/class.workflowactions.php:79 +msgid "Edit article properties" +msgstr "" + +#: classes/class.workflowactions.php:80 +msgid "Edit template" +msgstr "" + +#: classes/class.workflowusersequence.php:112 +msgid "Workflow item doesn't exist. Can't create entry." +msgstr "" + +#: classes/class.workflowusersequence.php:229 +msgid "Can't set user_id: User or group doesn't exist" +msgstr "" diff --git a/branches/conlite20/conlite/plugins/workflow/templates/template.workflow_steps.html b/branches/conlite20/conlite/plugins/workflow/templates/template.workflow_steps.html new file mode 100644 index 0000000..a064aeb --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/templates/template.workflow_steps.html @@ -0,0 +1,13 @@ +
    +{NEW} +
    + +
    + {STEPS} +
    +
    + {EDITSTEP} +
    +
    + i18n('Warning: Changes will reset active Workflows') +
    \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/workflow/templates/template.workflow_tasks.html b/branches/conlite20/conlite/plugins/workflow/templates/template.workflow_tasks.html new file mode 100644 index 0000000..0170f66 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/templates/template.workflow_tasks.html @@ -0,0 +1,157 @@ + + + + {TITLE} + + + + + + + + + + + + +
    +
    {USERSELECT}
    + {PAGE_TITLE} +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {NO_ARTICLES_ROW} + +
    {TH_START}{TH_TITLE}{TH_WORKFLOW_STEP}{TH_WORKFLOW_ACTION}{TH_WORKFLOW_EDITOR}{TH_LAST_STATUS}{TH_TEMPLATE}{TH_ACTIONS}
    {START}{TITLE}{WORKFLOW_STEP}{WORKFLOW_ACTION}{WORKFLOW_EDITOR}{LAST_STATUS}{TEMPLATE}{ACTIONS}
    + + + + + diff --git a/branches/conlite20/conlite/plugins/workflow/xml/lang_de_DE.xml b/branches/conlite20/conlite/plugins/workflow/xml/lang_de_DE.xml new file mode 100644 index 0000000..05962e4 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/xml/lang_de_DE.xml @@ -0,0 +1,17 @@ + + + + + + + +
    Workflow
    + Workflow-Einstellungen + Schritte +
    +
    + +
    + + +
    diff --git a/branches/conlite20/conlite/plugins/workflow/xml/lang_en_EN.xml b/branches/conlite20/conlite/plugins/workflow/xml/lang_en_EN.xml new file mode 100644 index 0000000..5e4dfc9 --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/xml/lang_en_EN.xml @@ -0,0 +1,17 @@ + + + + + + + +
    Workflow
    + Workflow-Properties + Steps +
    +
    + +
    + + +
    \ No newline at end of file diff --git a/branches/conlite20/conlite/plugins/workflow/xml/lang_en_US.xml b/branches/conlite20/conlite/plugins/workflow/xml/lang_en_US.xml new file mode 100644 index 0000000..5590ceb --- /dev/null +++ b/branches/conlite20/conlite/plugins/workflow/xml/lang_en_US.xml @@ -0,0 +1,17 @@ + + + + + + + +
    Workflow
    + Workflow-Properties + Steps +
    +
    + +
    + + +
    diff --git a/branches/conlite20/conlite/scripts/HTMLObj.js.php b/branches/conlite20/conlite/scripts/HTMLObj.js.php new file mode 100644 index 0000000..a6e3dd7 --- /dev/null +++ b/branches/conlite20/conlite/scripts/HTMLObj.js.php @@ -0,0 +1,401 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release 4.8.7 + * + * {@internal + * created 2004-04-24 + * modified 2008-06-25, Frederic Schneider, add security fix + * modified 2008-07-02, Frederic Schneider, include security_class + * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307] + * + * $Id: HTMLObj.js.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +// Contenido startup process +include_once ('../includes/startup.php'); + +header("Content-Type: text/javascript"); + +page_open(array('sess' => 'Contenido_Session', + 'auth' => 'Contenido_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); + +i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang); +page_close(); +?> + +/** + * HTMLObj Class + * + * Object of an HTML Element. + * + * @author Jan Lengowski + * @copyright four for business AG + */ +function HTMLObj(objId) { + + this.objId = objId; + this.obj = document.getElementById( this.objId ); + this.type = this.getElementType(); + this.id = null; + this.status = 0; /* status for images / other elements.. + 0 - normal + 1 - out + 2 - locked */ + +} // end function + +/** + * Defines the HTML Element Type + * and calls the setMethods() method + * to add the corresponding methods + * to the HTMLObj instance. + * + * @return type string Type of the HTML Element ('image'/'select') + */ +HTMLObj.prototype.getElementType = function () { + + var type = 'undefined'; + + switch ( this.obj.tagName ) { + + case 'IMG': + type = 'image'; + break; + + case 'SELECT': + type = 'select'; + break; + } + + if ( 'undefined' != type ) { + this.setMethods( type ); + } + + return type; + +} // end function + +/** + * Set methods depending on + * the HTML Element type + */ +HTMLObj.prototype.setMethods = function(type) { + + switch ( type ) { + + case 'image': + + /* .over() method */ + this.over = function() { + if ( '' != this.oImgSrc ) { + this.obj.src = this.oImgSrc; + this.status = "over"; + /* If there is a corresponding label, show it */ + if (document.getElementById(this.objId+'_label')) { + document.getElementById(this.objId+'_label').style.display = 'block'; + } + } + } + + /* .out() method */ + this.out = function() { + if ( '' != this.nImgSrc ) { + this.obj.src = this.nImgSrc + this.status = "out"; + /* If there is a corresponding label, show it */ + if (document.getElementById(this.objId+'_label')) { + document.getElementById(this.objId+'_label').style.display = 'block'; + } + } + } + + /* Set image sources */ + this.setImgSrc = function( nImgSrc, oImgSrc ) { + this.nImgSrc = nImgSrc; + this.oImgSrc = oImgSrc; + } + + /* Set the intance id */ + this.setId = function(id) { + /* JS Object */ + this.id = id; + /* HTML Object */ + this.obj.id = id; + } + + /* Lock the image */ + this.lock = function() { + this.obj.src = "images/spacer.gif"; + /* If there is a corresponding label, hide it */ + if (document.getElementById(this.objId+'_label')) { + document.getElementById(this.objId+'_label').style.display = 'none'; + } + } + + /* ATTENTION HARDCODED EVENTS =/ */ + /* + this.obj.onmouseover = showAction; + this.obj.onmouseout = hideAction; + + + */ + + this.obj.onclick = doAction; + + //Also make corresponding Labels clickable + this.obj.parentNode.nextSibling.onclick = doAction; + this.obj.parentNode.nextSibling.onmouseover = showAction; + this.obj.parentNode.nextSibling.onmouseout = hideAction; + + + break; + + case 'select': + + /** + * Select an entry + * @param string value of the entry + * @return void + */ + this.select = function( selectedValue ) { + + var options = this.obj.getElementsByTagName( 'option' ); + var index = 0; + + for (i = 0; i < options.length; i ++) { + if ( selectedValue == options[i].value ) { + index = i; + } + } + + this.obj.selectedIndex = index; + + } + + /** + * Return value of the + * select + */ + this.getValue = function() { + return this.obj.value; + } + + /** + * Return 'object HTMLCollection' for 'options' + * @return object HTMLCollection All 'option' objects + */ + this.getCollection = function() { + return this.obj.getElementsByTagName( 'option' ); + } + + break; + + } // end switch + +} // end function + +/** + * Controls the actions of + * the infoBox class + * + * @return void + * @author Jan Lengowski + * @copyright four for business AG + */ +function showAction() { + //alert("this is the JS function showAction() located in the file HTMLObj.js.php. This should not have been called as it is old style Contenido") + /* + var str = this.src; + //if Label is clicked, get src from previous image + if (!str) { + var str = this.previousSibling.firstChild.src; + } + + if ( str.indexOf('setoffline') != -1 ) { + box.show( '' ); + + } else if ( str.indexOf('online.gif') != -1 ) { + box.show(''); + + } else if ( str.indexOf('offline.gif') != -1 ) { + box.show(''); + + } else if ( str.indexOf('folder_delock.gif') != -1 ) { + box.show(''); + + } else if ( str.indexOf('folder_lock.gif') != -1 ) { + box.show(''); + + } else { + box.show(''); + } + */ +} + +/** + * Controls the execution of + * the actions depending on + * the cfg properties + * + * @return void + * @author Jan Lengowski + * @copyright four for business AG + */ +function doAction() { + var str = this.src; + + //if Label is clicked, get src from previous image + if (!str) { + var str = this.previousSibling.firstChild.src; + } + + // Set Category Offline + if ( str.indexOf('online.gif') != -1 ) + { + str = ""; + str += "main.php?area=con"; + str += "&action=con_makecatonline"; + str += "&frame=2"; + str += "&idcat=" + cfg.catId; + str += "&online=" + 0; + str += "&contenido=" + sid; + + if (cfg.catId != 0 && cfg.hasRight['online'] ) + { + cfg.setAction(str); + + /* change image source */ + if ( this.status == "out" ) + { + cfg.objRef[1].over() + cfg.isOnline = ( cfg.isOnline == 0 ) ? 1 : 0; + } + else + { + cfg.objRef[1].out() + cfg.isOnline = ( cfg.isOnline == 0 ) ? 1 : 0; + } + } + } + // Set Category Online + else if ( str.indexOf('offline.gif') != -1 ) + { + str = ""; + str += "main.php?area=con"; + str += "&action=con_makecatonline"; + str += "&frame=2"; + str += "&idcat=" + cfg.catId; + str += "&online=" + 1; + str += "&contenido=" + sid; + + if (cfg.catId != 0 && cfg.hasRight['online'] ) + { + cfg.setAction(str); + + /* change image source */ + if ( this.status == "out" ) + { + cfg.objRef[1].over() + cfg.isOnline = ( cfg.isOnline == 0 ) ? 1 : 0; + } + else + { + cfg.objRef[1].out() + cfg.isOnline = ( cfg.isOnline == 0 ) ? 1 : 0; + } + } + } + // + else if ( str.indexOf('folder_delock.gif') != -1 ) + { + str = ""; + str += "main.php?area=con"; + str += "&action=con_makepublic"; + str += "&frame=2"; + str += "&idcat=" + cfg.catId; + str += "&public=" + 0; + str += "&contenido=" + sid; + + if (cfg.catId != 0 && cfg.hasRight['public'] ) + { + cfg.setAction(str); + + /* change image source */ + if ( this.status == "out" ) + { + cfg.objRef[2].over() + cfg.isPublic = ( cfg.isPublic == 0 ) ? 1 : 0; + } + else + { + cfg.objRef[2].out() + cfg.isPublic = ( cfg.isPublic == 0 ) ? 1 : 0; + } + } + } + // Set C + else if ( str.indexOf('folder_lock.gif') != -1 ) + { + str = ""; + str += "main.php?area=con"; + str += "&action=con_makepublic"; + str += "&frame=2"; + str += "&idcat=" + cfg.catId; + str += "&public=" + 1; + str += "&contenido=" + sid; + + if (cfg.catId != 0 && cfg.hasRight['public'] ) { + + cfg.setAction(str); + + /* change image source */ + if ( this.status == "out" ) + { + cfg.objRef[2].over(); + cfg.isPublic = ( cfg.isPublic == 0 ) ? 1 : 0; + } + else + { + cfg.objRef[2].out(); + cfg.isPublic = ( cfg.isPublic == 0 ) ? 1 : 0; + } + } + } +} + +/** + * Show the default text + * in the infoBox + * + * @return void + * @author Jan Lengowski + * @copyright four for business AG + */ +function hideAction() { + //box.show(); + //alert("this is the JS function hideAction() located in the file HTMLObj.js.php. This should not have been called as it is old style Contenido") +} diff --git a/branches/conlite20/conlite/scripts/addImageTags.js b/branches/conlite20/conlite/scripts/addImageTags.js new file mode 100644 index 0000000..025b856 --- /dev/null +++ b/branches/conlite20/conlite/scripts/addImageTags.js @@ -0,0 +1,61 @@ +/***************************************** +* +* $Id: addImageTags.js 2 2011-07-20 12:00:48Z oldperl $ +* +* File : $RCSfile: addImageTags.js,v $ +* Project : Contenido +* Descr : File contains functions vor adding label tags to images + by javascript for smaller html documents +* +* Author : $Author: timo.trautmann$ +* Modified : $Date: 2011-07-20 14:00:48 +0200 (Wed, 20 Jul 2011) $ +* +* four for business AG, www.4fb.de +******************************************/ + +/** + * Function sets alt and title tag of a html image tag + * + * @param object oImg - reference to corresponding image tag + * @param string sName - labeltext to append + * + */ +function setImgAltTitle (oImg, sName) { + if (!oImg.title) { + oImg.title = sName; + } + + if (!oImg.alt) { + oImg.alt = sName; + } +} + +/** + * Function sets alt and title tag for all image tags in actual document + * + * @param array aImageTitles - assocaiative array, which contains a label for image + aImageTitles['test.gif'] = 'This is a test' + * + */ +function setImageTags (aImageTitles) { + //get all images + var images = document.getElementsByTagName('img'); + + for (var i = 0; i < images.length; i++) { + var sImgSrc = images[i].src; + if (sImgSrc != '') { + //seperate imagepath and name + var iPos = sImgSrc.lastIndexOf('/'); + if (iPos > 0) { + var sImgName = sImgSrc.slice(iPos+1, sImgSrc.length); + } else { + var sImgName = sImgSrc; + } + + //if there is a imagetitle for actual image, set it + if (aImageTitles[sImgName]) { + setImgAltTitle(images[i], aImageTitles[sImgName]); + } + } + } +} \ No newline at end of file diff --git a/branches/conlite20/conlite/scripts/articleObject.js.php b/branches/conlite20/conlite/scripts/articleObject.js.php new file mode 100644 index 0000000..0fa4905 --- /dev/null +++ b/branches/conlite20/conlite/scripts/articleObject.js.php @@ -0,0 +1,475 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release 4.8.7 + * + * {@internal + * created 2003-05-23 + * modified 2008-06-25, Frederic Schneider, add security fix + * modified 2008-07-02, Frederic Schneider, include_security class + * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307] + * + * $Id: articleObject.js.php 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +if (!defined("CON_FRAMEWORK")) { + define("CON_FRAMEWORK", true); +} + +// Contenido startup process +include_once ('../includes/startup.php'); + +header("Content-Type: text/javascript"); + +page_open(array('sess' => 'Contenido_Session', + 'auth' => 'Contenido_Challenge_Crypt_Auth', + 'perm' => 'Contenido_Perm')); + +i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang); +require($cfg["path"]["contenido"].'includes/functions.includePluginConf.php'); +page_close(); + + +/* Fetch chains */ +$iterator = $_cecRegistry->getIterator("Contenido.Article.RegisterCustomTab"); + +echo "//itsameA"; + +$aTabs = array(); +while ($chainEntry = $iterator->next()) +{ + $aTmpArray = $chainEntry->execute(); + + if (is_array($aTmpArray)) + { + echo "//itsame"; + $aTabs = array_merge($aTabs, $aTmpArray); + } +} +?> + +/** + * Object of an article + * + * @author Jan Lengowski + * @copyright four for business AG + */ +function articleObject(actionFrameName, frameNumber) +{ + /* Name of the Actionframe. + Defaults to 'right_bottom' */ + this.actionFrameName = actionFrameName || 'right_bottom'; + + /* Reference to the Actionframe */ + this.actionFrame = parent.parent.frames["right"].frames[this.actionFrameName]; + + /* Frame-number. + Defaults to '4' */ + this.frame = frameNumber || 4; + + /* Filename of the contenido + main file - defaults to 'main.php' */ + this.filename = "main.php?" + + /* Contenido session name - + defaults to 'contenido' */ + this.sessionName = "contenido" + + /* Current page selection (first shown article number) */ + this.next = 0; + + /* Global Vars */ + this.sessid = 0; + this.client = 0; + this.lang = 0; + + /* Article Properties*/ + this.idart = 0; + this.idartlang = 0; + this.idcat = 0; + this.idcatlang = 0; + this.idcatart = 0; + this.idlang = 0; + + /* Menu visible / invisible */ + this.vis = 1; + + this.customTabs = new Array(); + + /* Href of OverviewPage */ + this.hrefOverview = null; + + "); var_Dump($aTabs ); print("
    */"); + + foreach ($aTabs as $key => $sTab) + { + echo 'this.customTabs[\''.$sTab.'\'] = new Object();'."\n"; + + $iterator = $_cecRegistry->getIterator("Contenido.Article.GetCustomTabProperties"); + + $aTabs = array(); + while ($chainEntry = $iterator->next()) + { + $aTmpArray = $chainEntry->execute($sTab); + + if (is_array($aTmpArray)) + { + break; + } + } + echo 'this.customTabs[\''.$sTab.'\'][\'area\'] = "'.$aTmpArray[0].'";'."\n"; + echo 'this.customTabs[\''.$sTab.'\'][\'action\'] = "'.$aTmpArray[1].'";'."\n"; + echo 'this.customTabs[\''.$sTab.'\'][\'custom\'] = "'.$aTmpArray[2].'";'."\n"; + } + ?> +} + +/** + * Define required global variables + * + * @return void + * @author Jan Lengowski + * @copyright four for business AG + */ +articleObject.prototype.setGlobalVars = function(sessid, client, lang) +{ + this.sessid = sessid; + this.client = client; + this.lang = lang; +} + +/** + * Sets href to overview page, which was last visited + * + * @return void + * @author Timo Trautmann + * @copyright four for business AG + */ +articleObject.prototype.setHrefOverview = function(href) +{ + /*copy url - cut all actions*/ + if (href.match(/backend_search.php$/g)) { + + this.hrefOverview = 'javascript:top.content.left.left_top.document.getElementById(\'backend_search\').submit.click();'; + } else if (href.match(/backend_search/g) || href.match(/area=con_workflow/g)) { + this.hrefOverview = href.replace(/action=([^&]*)&?/g, ''); + } else { + this.hrefOverview = null; + } +} + +/** + * Reset properties + * + * @return void + * @author Jan Lengowski + * @copyright four for business AG + */ +articleObject.prototype.reset = function() +{ + this.idart = 0; + this.idartlang = 0; + this.idcatlang = 0; + this.idcatart = 0; + this.idlang = 0; +} + +/** + * Define required global variables + * + * @return string with attached frame & session parameters + * @author Jan Lengowski + * @copyright four for business AG + */ +articleObject.prototype.sessUrl = function(str) +{ + var tmp_str = str; + tmp_str += '&frame=' + this.frame; + tmp_str += '&'+this.sessionName+'='+this.sessid; + return tmp_str; +} + +/** + * Execute an action + * + * @return bool Action executes Yes/No + * @author Jan Lengowski + * @copyright four for business AG + */ +articleObject.prototype.doAction = function(str) +{ + + /* Flag if action will be executed. */ + var doAction = false; + + /* create messageBox instance */ + var box = new messageBox("", "", "", 0, 0); + + /* Notify Headline */ + var headline = ""; + + /* Default error string */ + var err_str = ""; + + switch (str) + { + /* Article overview mask */ + case 'con': + /* Check if required parameters are set */ + if (this.hrefOverview) { + url_str = this.hrefOverview; + doAction = true; + } else { + if ( 0 != this.idcat ) { + url_str = this.sessUrl(this.filename + "area=" + str + "&idcat=" + this.idcat + "&next=" + this.next); + doAction = true; + } else { + /* This ERROR should never happen, i.e. the property idcat will not + be reseted once set. */ + err_str = ""; + } + } + break; + + /* Edit article properties */ + case 'con_editart': + if (this.lang != 0 && this.idlang != 0 && this.lang != this.idlang) + { + err_str = "".i18n("Can't edit articles in foreign languages."); ?>"; + + if (parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0")) + { + menuItem = parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0"); + parent.parent.frames["right"].frames["right_top"].sub.click(menuItem); + } + } else { + /* Check if required parameters are set */ + if ( 0 != this.idart && 0 != this.idcat ) { + url_str = this.sessUrl(this.filename + "area=" + str + "&action=con_edit&idart=" + this.idart + "&idcat=" + this.idcat); + doAction = true; + } else { + /* There is no selected article, + we do not have the neccessary + data to display the Article- + properties mask */ + err_str = "".i18n("No article was selected"); ?>"; + + if ( parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0") ) { + menuItem = parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0"); + parent.parent.frames["right"].frames["right_top"].sub.click(menuItem); + } + } + } + break; + + /* Template configuration */ + case 'con_tplcfg': + + /* Check if required parameters are set */ + if (this.lang != 0 && this.idlang != 0 && this.lang != this.idlang) + { + err_str = "".i18n("Can't edit articles in foreign languages."); ?>"; + + if ( parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0") ) { + menuItem = parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0"); + parent.parent.frames["right"].frames["right_top"].sub.click(menuItem); + } + } else { + if ( 0 != this.idart && 0 != this.idcat ) { + url_str = this.sessUrl(this.filename + "area=" + str + "&action=tplcfg_edit&idart=" + this.idart + "&idcat=" + this.idcat); + doAction = true; + } else { + /* There is no selected article, + we do not have the neccessary + data to display the Template- + configuration mask */ + err_str = "".i18n("No article was selected"); ?>"; + + if ( parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0") ) { + menuItem = parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0"); + parent.parent.frames["right"].frames["right_top"].sub.click(menuItem); + } + } + } + break; + + /* Edit article */ + case 'con_editcontent': + if (this.lang != 0 && this.idlang != 0 && this.lang != this.idlang) + { + err_str = "".i18n("Can't edit articles in foreign languages."); ?>"; + + if ( parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0") ) { + menuItem = parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0"); + parent.parent.frames["right"].frames["right_top"].sub.click(menuItem); + } + } else { + + /* Check if required parameters are set */ + if ( 0 != this.idart && 0 != this.idartlang && 0 != this.idcat ) { + url_str = this.sessUrl(this.filename + "area=" + str + "&action=con_editart&changeview=edit&idart=" + this.idart + "&idartlang=" + this.idartlang + "&idcat=" + this.idcat); + doAction = true; + } else { + /* There is no selected article, + we do not have the neccessary + data to display the Editor */ + err_str = "".i18n("No article was selected"); ?>"; + + if ( parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0") ) { + menuItem = parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0"); + parent.parent.frames["right"].frames["right_top"].sub.click(menuItem); + } + } + } + break; + + /* Preview article */ + case 'con_preview': + + /* Check if required parameters are set */ + if ( 0 != this.idart && 0 != this.idartlang && 0 != this.idcat ) { + url_str = this.sessUrl(this.filename + "area=con_editcontent&action=con_editart&changeview=prev&idart=" + this.idart + "&idartlang=" + this.idartlang + "&idcat=" + this.idcat + "&tmpchangelang="+ this.idlang); + doAction = true; + } else { + /* There is no selected article, + we do not have the neccessary + data to display the Editor */ + if ( parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0") ) { + menuItem = parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0"); + parent.parent.frames["right"].frames["right_top"].sub.click(menuItem); + } + err_str = "".i18n("No article was selected"); ?>"; + } + break; + + default: + if (this.customTabs[str]) + { + var obj = this.customTabs[str]; + if ( 0 != this.idart && 0 != this.idartlang && 0 != this.idcat ) { + url_str = this.sessUrl(this.filename + "area=" + obj["area"] + "&action=" + obj["action"] + "&idart=" + this.idart + "&idartlang=" + this.idartlang + "&idcat=" + this.idcat + "&tmpchangelang="+ this.idlang + "&" + obj["custom"]); + doAction = true; + } else { + /* There is no selected article, + we do not have the neccessary + data to display the Editor */ + if ( parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0") ) { + menuItem = parent.parent.frames["right"].frames["right_top"].document.getElementById("c_0"); + parent.parent.frames["right"].frames["right_top"].sub.click(menuItem); + } + err_str = "".i18n("No article was selected"); ?>"; + } + } + break; + } + + if (doAction) { + this.actionFrame.location.href = url_str; + return true; + } else { + box.notify(headline, err_str); + } + + return false; +} + +/** + * Define article and category related properties + * + * @return void + * @author Jan Lengowski + * @copyright four for business AG + */ +articleObject.prototype.setProperties = function() +{ + this.idart = arguments[0]; + this.idartlang = arguments[1]; + this.idcat = arguments[2]; + this.idcatlang = arguments[3]; + this.idcatart = arguments[4]; + this.idlang = arguments[5]; +} + +/** + * Disables the navigation + * + * @param none + * @return void + */ +articleObject.prototype.disable = function() +{ + var oRef = []; + + oRef[0] = parent.parent.frames["right"].frames["right_top"].document.getElementById( "c_0" ); + oRef[1] = parent.parent.frames["right"].frames["right_top"].document.getElementById( "c_1" ); + oRef[2] = parent.parent.frames["right"].frames["right_top"].document.getElementById( "c_2" ); + oRef[3] = parent.parent.frames["right"].frames["right_top"].document.getElementById( "c_3" ); + oRef[4] = parent.parent.frames["right"].frames["right_top"].document.getElementById( "c_4" ); + oRef[5] = parent.parent.frames["right"].frames["right_top"].document.getElementById( "c_5" ); + + if (this.vis == 1) + { + for (i=1; i + * @copyright four for business AG + * @version 0.9 + */ +function browserCheck() +{ + var agent = navigator.userAgent.toLowerCase(); + + this.IE = false; + this.NS = false; + + if (agent.indexOf("msie") >= 0) + { + this.IE = true; + this.version = parseInt(agent.appVersion); + return; + } + + if (agent.indexOf("netscape") >= 0 || agent.indexOf("mozilla") >= 0) + { + this.NS = true; + this.version = parseInt(agent.appVersion); + return; + } + +} // browserCheck + +is = new browserCheck(); diff --git a/branches/conlite20/conlite/scripts/cfoldingrow.js b/branches/conlite20/conlite/scripts/cfoldingrow.js new file mode 100644 index 0000000..55c2d31 --- /dev/null +++ b/branches/conlite20/conlite/scripts/cfoldingrow.js @@ -0,0 +1,38 @@ +/** + * + * @version $Rev: 301 $ + * + * $Id: cfoldingrow.js 301 2014-02-03 22:30:20Z oldperl $ + */ +/***************************************** +* Project : Contenido +* Descr : cFoldingRow JavaScript helpers +* +* four for business AG, www.4fb.de +*/ + +/** + * + * @param {type} image + * @param {type} row + * @param {type} hidden + * @param {type} uuid + * @returns void + */ +function cFoldingRow_expandCollapse (image, row, hidden, uuid) +{ + if (document.getElementById(image).getAttribute("data-folding-row") == "collapsed") + { + document.getElementById(row).style.display = ''; + document.getElementById(image).setAttribute("src", "images/widgets/foldingrow/expanded.gif"); + document.getElementById(image).setAttribute("data-folding-row", "expanded"); + document.getElementById(hidden).setAttribute("value", "expanded"); + register_parameter("u_register[expandstate]["+uuid+"]", "true"); + } else { + document.getElementById(row).style.display = 'none'; + document.getElementById(image).setAttribute("src", "images/widgets/foldingrow/collapsed.gif"); + document.getElementById(image).setAttribute("data-folding-row", "collapsed"); + document.getElementById(hidden).setAttribute("value", "collapsed"); + register_parameter("u_register[expandstate]["+uuid+"]", "false"); + } +} \ No newline at end of file diff --git a/branches/conlite20/conlite/scripts/cmsDate.js b/branches/conlite20/conlite/scripts/cmsDate.js new file mode 100644 index 0000000..7b82462 --- /dev/null +++ b/branches/conlite20/conlite/scripts/cmsDate.js @@ -0,0 +1,177 @@ +/** + * Project: + * Contenido Content Management System + * + * Description: + * Contenido js class for handling DHTML Calendar in class cms_date for corresponding + * cms type. It extends DHTML Calender. A select box is added, which allows users to select + * the format in which the selected date is displayed. For this functionality there are some + * modifications in DHTML Calender (calender.js) which were commented in this file + * js calendar class CmsDate.js + * + * Requirements: + * + * + * @package Contenido Backend + * @version 1.0.0 + * @author Bilal Arslan, Timo Trautmann + * @copyright four for business AG + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release <= 4.8.7 + * + * {@internal + * created 2007-07-14 Bilal Arslan, Timo Trautmann + * $Id + * }} + * + */ + + +var cal_is_open = false; + +/** + * + * + * @param {Object} cal is the current calendar object + * @param {string} date format, what will be change + */ + +// This function gets called when the end-user clicks on some date. +function selected(cal, date){ + //aEditdata is global variable defines in include.con_editcontent.php for storage + cal.sel.innerHTML = date; // just update the date in the input field. + aEditdata[cal.sel.id] = date; + if (cal.dateClicked) { + cal.callCloseHandler(); + } +} + +/** + * Destroy or close the calendar + * + * @param {Object} cal is the current calendar object + */ +function closeHandler(cal){ + cal.hide(); // hide the calendar + cal.sel2.style.display = "none"; + cal.destroy(); + cal_is_open = false; +} +/** + * The CmsDate object constructor. + * + * @param {string} id, if of input field + * @param {date_string} format, like "b%,m%,y%" + * @param {integer} showsTime, 12 or 24 + * @param {boolean} showsOtherMonths, true or false + * @param {string} sDivSelectId, div id from select-box + * @param {string} sConPath, contenido path + * @param {string} sSelectId, select id from select-box + */ +CmsDate = function(id, format, showsTime, showsOtherMonths, sDivSelectId, sConPath, sSelectId){ + // first-time call, create the calendar. + this.cal = new Calendar(1, null, selected, closeHandler); + + // inform it what input field we use (el) + this.cal.sel = document.getElementById(id); + // get the div element from select box + this.cal.sel2 = document.getElementById(sDivSelectId); + // get the select box + this.cal.sel3 = document.getElementById(sSelectId); + this.format = format; + this.showsTime = showsTime; + this.showsOtherMonths = showsOtherMonths; + this.cal.contenido_path = sConPath; + this.cal.contenido_call_handler = this; +} + +/** + * This function creats a Calendar. + */ +CmsDate.prototype.showCalendar = function(){ + if (cal_is_open == false) { + cal_is_open = true; + // uncomment the following line to hide the week numbers + // cal.weekNumbers = false; + if (typeof this.showsTime == "string") { + this.cal.showsTime = true; + this.cal.time24 = (this.showsTime == "24"); + } + if (this.showsOtherMonths) { + this.cal.showsOtherMonths = true; + } + + this.cal.setRange(1900, 2070); // min/max year allowed. + if (this.cal.sel3.value != "" && this.cal.sel3.value != 0) { + this.cal.setDateFormat(this.cal.sel3.value); // set the specified date format + }else{ + this.cal.setDateFormat(this.format); // set the specified date format + } + this.cal.create(); + + this.cal.showAtElement(this.cal.sel); // show the calendar + // thats important! if do not this, you can not edit html in body, all thinks is disabled + window._dynarch_popupCalendar = null; + + //Select box name + this.see(); + } + return false; +} + +/** + * This function returns position information for current Element + * + * @param {Object} oElement is the current node or elemen, what is required. + */ +CmsDate.prototype.getElementPostion = function(oElement){ + var iHeigth = oElement.offsetHeight; + var iWidth = oElement.offsetWidth; + var iTop = 0, iLeft = 0; + while (oElement) { + iTop += oElement.offsetTop || 0; + iLeft += oElement.offsetLeft || 0; + oElement = oElement.offsetParent; + }; + return [iLeft, iTop, iHeigth, iWidth]; +} + +/** + * This function is for select box. It styles (to dock) in right position below the calendar. + * + * @param {string} that is the id of select box + */ +CmsDate.prototype.see = function(){ + var idCal = null; + var aDivs = document.getElementsByTagName('div'); + for (var i = 0; i < aDivs.length; i++) { + if (aDivs[i].className == 'calendar') { + idCal = aDivs[i]; + break; + } + } + + if (idCal) { + var pos = this.getElementPostion(idCal); + + // Get the id of current select box + var iId = this.cal.sel2; + iId.style.position = "absolute"; + iId.style.left = pos[0] + "px"; + iId.style.top = pos[1] + pos[2] + "px"; + iId.style.display = "block"; + } +} + +/** + * Changes the specified date format, of currently calendar object. + * + * @param {string} format + */ +CmsDate.prototype.changeFormat = function(format){ + this.cal.setDateFormat(format); // set the specified date format + this.cal.refresh(); +} + diff --git a/branches/conlite20/conlite/scripts/cmsFileList.js b/branches/conlite20/conlite/scripts/cmsFileList.js new file mode 100644 index 0000000..5f3a266 --- /dev/null +++ b/branches/conlite20/conlite/scripts/cmsFileList.js @@ -0,0 +1,426 @@ +/** + * Project: + * Contenido Content Management System + * + * Description: + * JavaScript CMS Type File List + * + * + * @package Contenido Content Types + * @version 1.0.0 + * @author Dominik Ziegler + * @copyright four for business AG + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release 4.8.13 + * + * {@internal + * created 2009-10-01 + * + * $Id: cmsFileList.js 33 2012-01-09 17:43:55Z oldperl $: + * }} + * + */ + +/** @var $ jQuery */ + +/** + * Initial function which adds all javascript events to FileList edit box and coresponding + * input elements + * + * @param string sFrameId + * @param string sImageId + * @param string sPath + * @param string sSession + * @param integer iFileListIdArtLang + * @param integer iFileListId + */ +function addFileListEvents(sFrameId, sImageId, sPath, sSession, iFileListIdArtLang, iFileListId, aFileListData, bIgnoreState) { + cmsFileList_initialize(sFrameId); + cmsFileList_loadExternalScripts(sFrameId, sPath, iFileListId); + cmsFileList_addTabbingEvents(sFrameId); + cmsFileList_addFrameShowEvent(sFrameId, sImageId); + cmsFileList_addSaveEvent(sFrameId, iFileListIdArtLang, iFileListId, aFileListData); + cmsFileList_addFrameCloseEvents(sFrameId); + cmsFileList_addManualFileListEvent(sFrameId); + cmsFileList_addClickEvent(sFrameId, iFileListId); + cmsFileList_setIgnoreExtensions(sFrameId, bIgnoreState); +} + +/** + * Appends the passed node to the end of body tag. This is necessary to have more + * control during positioning. + * + * @param string sFrameId + */ +function cmsFileList_initialize(sFrameId) { + $(sFrameId).appendTo($('body')); +} + + +/** + * Function extracts an value from FileList form an adds it as hidden to editform for submitting to Contenido + * Function is called in store proccess of FileList + * + * @param string sName + * @param string sValue + */ +function cmsFileList_appendFileListValue(sName, sValue) { + $("form[name='editcontent']").append(''); +} + +/** + * Function adds event which fades edit form to visible when editbutton is clicked + * + * @param string sFrameId + * @param string sImageId + */ +function cmsFileList_addFrameShowEvent(sFrameId, sImageId) { + $(sImageId).css('cursor', 'pointer'); + $(sImageId).click(function () { + $(sFrameId).fadeIn("normal"); + $(sFrameId).css('top', $(sImageId).offset().top); + $(sFrameId).css('left', $(sImageId).offset().left+$(sImageId).width()+3); + }); +} + +/** + * Function adds tabbling events to menubar of FileList edit form + * which switchs between the tree tabbing views + * + * @param string sFrameId + */ +function cmsFileList_addTabbingEvents(sFrameId) { + $(sFrameId+" .menu li").css('cursor', 'pointer'); + //add layer click events + $(sFrameId+" .menu li").click(function(){ + var curAction = $(this); + + $(sFrameId+" .menu li").css('font-weight', 'normal'); + + $(sFrameId+" #manual").css("display", "none"); + $(sFrameId+" #general").css("display", "none"); + $(sFrameId+" #directories").css("display", "none"); + $(sFrameId+" #filter").css("display", "none"); + //add smooth animation + curAction.css('font-weight', 'bold'); + + if (curAction.attr('class') == 'manual') { + $(sFrameId).animate({ + height: "450px", + }, 250 , 'linear', function () { + $(sFrameId+" #"+curAction.attr('class')).css('height', '386px'); + $(sFrameId+" #"+curAction.attr('class')).fadeIn("normal"); + }); + } else { + $(sFrameId).animate({ + height: "320px", + }, 250 , 'linear', function () { + $(sFrameId+" #"+curAction.attr('class')).css('height', '256px'); + $(sFrameId+" #"+curAction.attr('class')).fadeIn("normal"); + }); + } + }); +} + +/** + * Function adds save event to save button of FileListedit form + * + * @param string sFrameId + * @param integer iFileListIdArtLang + * @param integer iFileListId + */ +function cmsFileList_addSaveEvent(sFrameId, iFileListIdArtLang, iFileListId, aFileListData) { + $(sFrameId+' .save_settings').css('cursor', 'pointer'); + $(sFrameId+' .save_settings').click(function() { + cmsFileList_addManualFileListEntry(sFrameId); + + var sValue = ''; + //iterate over all FileList properties + for (var i = 0; i < aFileListData.length; i++) { + if (aFileListData[i] == 'filelist_incl_subdirectories' || aFileListData[i] == 'filelist_manual' || aFileListData[i] == 'filelist_incl_metadata' ) { + //special behaviour for checkboxes + sValue = $(sFrameId+' #'+aFileListData[i]).attr('checked'); + } else if (aFileListData[i] == 'filelist_extensions') { + //in case of manual arts implode them use , as separator + sValue = ''; + $(sFrameId+' #filelist_extensions option').each(function() { + if ( $(this).attr("selected") != "" ) { + if (sValue == '') { + sValue = $(this).attr('value'); + } else { + sValue = sValue+';'+$(this).attr('value'); + } + } + }); + } else if (aFileListData[i] == 'filelist_manual_files') { + sValue = ''; + $(sFrameId+' #filelist_manual_files option').each(function() { + if (sValue == '') { + sValue = $(this).attr('value'); + } else { + sValue = sValue+';'+$(this).attr('value'); + } + }); + } else { + //default value for select boxes and text boxes + sValue = $(sFrameId + ' #'+aFileListData[i]).attr('value'); + } + cmsFileList_appendFileListValue(aFileListData[i], sValue); + } + + sValue = ''; + $(sFrameId + ' #directories #directoryList div[class="active"]').each(function () { + sValue = sValue+';'+$(this).find('a[class="on"]').attr('title'); + }); + cmsFileList_appendFileListValue('filelist_directories', sValue); + + if ( $(sFrameId + ' #filelist_extensions').attr("disabled") == true ) { + cmsFileList_appendFileListValue('filelist_ignore_extensions', 'on'); + } else { + cmsFileList_appendFileListValue('filelist_ignore_extensions', 'off'); + } + + cmsFileList_appendFileListValue('filelist_action', 'store'); + cmsFileList_appendFileListValue('filelist_id', iFileListId); + setcontent(iFileListIdArtLang,'0'); + }); +} + +/** + * Function adds event for closing FileList edit window and fades box out + * + * @param string sFrameId + */ +function cmsFileList_addFrameCloseEvents(sFrameId) { + //add cancel image event + $(sFrameId+' .close').css('cursor', 'pointer'); + $(sFrameId+' .close').click(function () { + $(sFrameId).fadeOut("normal"); + }); + + //add cancel button event + $(sFrameId+' .filelist_cancel').css('cursor', 'pointer'); + $(sFrameId+' .filelist_cancel').click(function () { + $(sFrameId).fadeOut("normal"); + }); +} + +/** + * Function loads external styles and jquery ui scripts for FileList dynamically so this scripts were only + * loaded into contenido whren this FileList is really used in this article + * + * @param string sFrameId + * @param string sPath + */ +function cmsFileList_loadExternalScripts(sFrameId, sPath, iFileListId) { + $('head').append(''); + /* + $('head').append(''); + + $.getScript(sPath+'scripts/jscalendar/calendar.js', function() { + $.getScript(sPath+'scripts/jscalendar/lang/calendar-de.js', function() { + $.getScript(sPath+'scripts/jscalendar/calendar-setup.js', function() { + for (i = 0; i < dateFields.length; i++) { + Calendar.setup({ + inputField : dateFields[i], + ifFormat : "%d.%m.%Y", + weekNumbers : true, + firstDay : 1, + showsTime : false, + contenidoPath : sPath + }); + } + }); + }); + }); + */ + + $.getScript(sPath+'scripts/jquery/jquery-ui.js', function() { + $(sFrameId).draggable({ + handle: '.head' + }); + $(sFrameId+' .head').css('cursor', 'move'); + }); +} + +/** + * Function adds event to add new article to multiple select box for articles + * Function also checks if article is already in that list + * + * @param string sFrameId + */ +function cmsFileList_addManualFileListEvent(sFrameId) { + $(sFrameId+' #add_file').css('cursor', 'pointer').click(function() { + cmsFileList_addManualFileListEntry(sFrameId); + }); + $(sFrameId+' #rm_file').css('cursor', 'pointer').click(function() { + cmsFileList_removeManualFileListEntry(sFrameId); + }); +} + +/** + * Function adds new article to multiple select box for articles + * Function also checks if article is already in that list + * + * @param string sFrameId + */ +function cmsFileList_addManualFileListEntry(sFrameId) { + var oArt = $(sFrameId+' #filelist_filename'); + var sFilename = oArt.attr('value'); + var sName = ''; + var bExists = 0; + + if (sFilename != '') { + $(sFrameId+' #filelist_manual_files option').each(function() { + if (sFilename == $(this).attr('value')) { + bExists = 1; + } + }); + + $(sFrameId+' #filelist_filename option').each(function() { + if (sFilename == $(this).attr('value')) { + sName = $(this).html(); + } + }); + + if (bExists == 0) { + $(sFrameId+' #filelist_manual_files').prepend(''); + } + } +} + +function cmsFileList_removeManualFileListEntry(sFrameId) { + $(sFrameId+' #filelist_manual_files').find('option:selected').remove(); +} + +function cmsFileList_addNaviActions(sFrameId, iFileListId) { + $(sFrameId+' #manual #directoryList a[class="on"]').parent('div').unbind('click'); + $(sFrameId+' #manual #directoryList a[class="on"]').parent('div').click(function () { + var dirname = $(this).children('a[class="on"]').attr('title'); + $.ajax({ + type: "POST", + url: sPath+"ajaxmain.php", + data: "ajax=filelist&dir=" + dirname + "&id=" + iFileListId + "&idartlang=" + iIdArtLang + "&contenido="+sSession, + success: function(msg){ + $(sFrameId+' #manual #filelist_filename').replaceWith(msg); + } + }); + + return false; + }); + + $(sFrameId+' #directories #directoryList a[class="on"]').parent('div').unbind('click'); + $(sFrameId+' #directories #directoryList a[class="on"]').parent('div').click(function () { + if ($(this).hasClass('active')) { + $(this).removeClass('active'); + } else { + $(this).addClass('active'); + } + + return false; + }); + + $(sFrameId+' #directoryList em a').unbind('click'); + $(sFrameId+' #directoryList em a').click(function () { + var divContainer = $(this).parent().parent(); + var dirname = $(this).parent('em').parent().find('a[class="on"]').attr('title'); + + if(divContainer.next('ul').length > 0) { + divContainer.next('ul').toggle(function () { + if (divContainer.next('ul').css('display') == 'none') { + divContainer.parent().addClass('collapsed'); + } else { + divContainer.parent().removeClass('collapsed'); + } + }); + + } else { + $.ajax({ + type: "POST", + url: sPath+"ajaxmain.php", + data: "ajax=dirlist&dir=" + dirname + "&id=" + iFileListId + "&idartlang=" + iIdArtLang + "&contenido="+sSession, + success: function(msg){ + divContainer.after(msg); + divContainer.parent('li').removeClass('collapsed'); + cmsFileList_addNaviActions(sFrameId, iFileListId); + } + }); + } + + return false; + }); +} + +/** + * Function adds double click events to all current listed articles for manual FileList + * in case of a double click this selected article is removed from list + * + * @param string sFrameId + */ +function cmsFileList_addClickEvent(sFrameId, iFileListId) { + cmsFileList_addNaviActions(sFrameId, iFileListId); + cmsFileList_addExtensionActions(sFrameId, iFileListId); + + if ( $(sFrameId+' #filelist_manual').attr('checked') == true ) { + $(sFrameId+' #manual_filelist_setting').css("display", "block"); + } else { + $(sFrameId+' #manual_filelist_setting').css("display", "none"); + } + + $(sFrameId+' #filelist_manual').click(function () { + $(sFrameId+' #manual_filelist_setting').slideToggle(); + }); + + if ( $(sFrameId+' #filelist_incl_metadata').attr('checked') == true ) { + $(sFrameId+' #metaDataList').css("display", "block"); + } else { + $(sFrameId+' #metaDataList').css("display", "none"); + } + + $(sFrameId+' #filelist_incl_metadata').click(function () { + $(sFrameId+' #metaDataList').slideToggle(); + }); + + $(sFrameId+' #filelist_manual_files').dblclick(function() { + $(sFrameId+' #filelist_manual_files option').each(function() { + if($(this).attr('selected')) { + $(this).remove(); + }; + }); + }); +} + +function cmsFileList_addExtensionActions(sFrameId, iFileListId) { + $(sFrameId+' #filelist_all_extensions').css('cursor', 'pointer'); + $(sFrameId+' #filelist_ignore_extensions').css('cursor', 'pointer'); + + $(sFrameId+' #filelist_ignore_extensions').click(function () { + if ( $(sFrameId+' #filelist_extensions').attr("disabled") == true ) { + cmsFileList_setIgnoreExtensions( sFrameId, 'false' ); + } else { + cmsFileList_setIgnoreExtensions( sFrameId, 'true' ); + } + + return false; + }); + + $(sFrameId+' #filelist_all_extensions').click(function () { + if ( $(sFrameId+' #filelist_extensions').attr("disabled") == false ) { + $(sFrameId+' #filelist_extensions option').each(function() { + $(this).attr("selected", "selected"); + }); + } + }); +} + +function cmsFileList_setIgnoreExtensions(sFrameId, bIgnoreState) { + if ( bIgnoreState == 'false' ) { + $(sFrameId+' #filelist_extensions').removeAttr("disabled"); + $(sFrameId+' #filelist_ignore_extensions').css("font-weight", "normal").html(sLabelIgnoreExtensionsOff); + } else { + $(sFrameId+' #filelist_extensions').attr("disabled", "disabled"); + $(sFrameId+' #filelist_ignore_extensions').css("font-weight", "bold").html(sLabelIgnoreExtensionsOn); + } +} \ No newline at end of file diff --git a/branches/conlite20/conlite/scripts/cmsTeaser.js b/branches/conlite20/conlite/scripts/cmsTeaser.js new file mode 100644 index 0000000..4832b32 --- /dev/null +++ b/branches/conlite20/conlite/scripts/cmsTeaser.js @@ -0,0 +1,268 @@ +/** + * Project: + * Contenido Content Management System + * + * Description: + * JavaScript CMS Type Teaser + * + * + * @package Contenido Content Types + * @version 1.0.0 + * @author Timo Trautmann + * @copyright four for business AG + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release 4.8.12 + * + * {@internal + * created 2009-04-08 + * + * $Id: cmsTeaser.js 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + + +/** + * Initial function which adds all javascript events to teaser edit box and coresponding + * input elements + * + * @param string sFrameId + * @param string sImageId + * @param string sPath + * @param string sSession + * @param integer iIdArtLang + * @param integer iId + */ +function addTeaserEvents(sFrameId, sImageId, sPath, sSession, iIdArtLang, iId) { + cmsTeaser_initialize(sFrameId); + cmsTeaser_loadExternalScripts(sFrameId, sPath); + cmsTeaser_addTabbingEvents(sFrameId); + cmsTeaser_addFrameShowEvent(sFrameId, sImageId); + cmsTeaser_addSaveEvent(sFrameId, iIdArtLang, iId); + cmsTeaser_addFrameCloseEvents(sFrameId); + cmsTeaser_addAjaxGetArticleListEvent(sFrameId, sPath, sSession); + cmsTeaser_addManualTeaserEvent(sFrameId); + cmsTeaser_addClickEvent(sFrameId); +} + +/** + * Appends the passed node to the end of body tag. This is necessary to have more + * control during positioninig. + * + * @param string sFrameId + */ +function cmsTeaser_initialize(sFrameId) { + $(sFrameId).appendTo($('body')); +} + +/** + * Function extracts an value from teaser form an adds it as hidden to editform for submitting to Contenido + * Function is called in store proccess of teaser + * + * @param string sName + * @param string sValue + */ +function cmsTeaser_appendTeaserValue(sName, sValue) { + $("form[name='editcontent']").append(''); +} + +/** + * Function adds event which fades edit form to visible when editbutton is clicked + * + * @param string sFrameId + * @param string sImageId + */ +function cmsTeaser_addFrameShowEvent(sFrameId, sImageId) { + $(sImageId).css('cursor', 'pointer'); + $(sImageId).click(function () { + $(sFrameId).fadeIn("normal"); + $(sFrameId).css('top', $(sImageId).offset().top); + $(sFrameId).css('left', $(sImageId).offset().left+$(sImageId).width()+3); + }); +} + +/** + * Function adds tabbling events to menubar of teaser edit form + * which switchs between the tree tabbing views + * + * @param string sFrameId + */ +function cmsTeaser_addTabbingEvents(sFrameId) { + $(sFrameId+" .menu li").css('cursor', 'pointer'); + //add layer click events + $(sFrameId+" .menu li").click(function(){ + $(sFrameId+" .menu li").css('font-weight', 'normal'); + + $(sFrameId+" #manual").css("display", "none"); + $(sFrameId+" #advanced").css("display", "none"); + $(sFrameId+" #general").css("display", "none"); + //add smooth animation + $(sFrameId+" #"+$(this).attr('class')).fadeIn("normal"); + $(this).css('font-weight', 'bold'); + }); +} + +/** + * Function adds save event to save button of teaseredit form + * + * @param string sFrameId + * @param integer iIdArtLang + * @param integer iId + */ +function cmsTeaser_addSaveEvent(sFrameId, iIdArtLang, iId) { + $(sFrameId+' .save_settings').css('cursor', 'pointer'); + $(sFrameId+' .save_settings').click(function() { + cmsTeaser_addManualTeaserEntry(sFrameId); + var sValue = ''; + //iterate over all teaser properties + for (var i = 0; i < aData.length; i++) { + if (aData[i] == 'teaser_start' || aData[i] == 'teaser_manual') { + //special behaviour for checkboxes + sValue = $(sFrameId+' #'+aData[i]).attr('checked'); + } else if (aData[i] == 'teaser_manual_art') { + //in case of manual arts implode them use , as separator + sValue = ''; + $(sFrameId+' #teaser_manual_art option').each(function() { + if (sValue == '') { + sValue = $(this).attr('value'); + } else { + sValue = sValue+';'+$(this).attr('value'); + } + }); + } else { + //default value for select boxes and text boxes + sValue = $(sFrameId+' #'+aData[i]).attr('value'); + } + cmsTeaser_appendTeaserValue(aData[i], sValue); + } + cmsTeaser_appendTeaserValue('teaser_action', 'store'); + cmsTeaser_appendTeaserValue('teaser_id', iId); + setcontent(iIdArtLang,'0'); + }); +} + +/** + * Function adds event for closing teaser edit window and fades box out + * + * @param string sFrameId + */ +function cmsTeaser_addFrameCloseEvents(sFrameId) { + //add cancel image event + $(sFrameId+' .close').css('cursor', 'pointer'); + $(sFrameId+' .close').click(function () { + $(sFrameId).fadeOut("normal"); + }); + + //add cancel button event + $(sFrameId+' .teaser_cancel').css('cursor', 'pointer'); + $(sFrameId+' .teaser_cancel').click(function () { + $(sFrameId).fadeOut("normal"); + }); +} + +/** + * Function gets new list of articles from contenido via ajax + * is used in manual teaser when base category for article select + * is changed + * + * @param string sFrameId + * @param string sPath + * @param string sSession + */ +function cmsTeaser_addAjaxGetArticleListEvent(sFrameId, sPath, sSession) { + $(sFrameId+' #teaser_cat').change(function() { + //get new article select and replace it with default value + $.ajax({ + type: "POST", + url: sPath+"ajaxmain.php", + data: "ajax=artsel&name=teaser_art&contenido="+sSession+"&idcat="+$(this).attr('value'), + success: function(msg){ + $(sFrameId+' #teaser_art').replaceWith(msg); + } + }); + }); +} + +/** + * Function loads external styles and jquery ui scripts for teaser dynamically so this scripts were only + * loaded into contenido whren this teaser is really used in this article + * + * @param string sFrameId + * @param string sPath + */ +function cmsTeaser_loadExternalScripts(sFrameId, sPath) { + $('head').append(''); + + $.getScript(sPath+'scripts/jquery/jquery-ui.js', function() { + $(sFrameId).draggable({handle: '.head'}); + $(sFrameId+' .head').css('cursor', 'move'); + }); +} + +/** + * Function adds event to add new article to multiple select box for articles + * Function also checks if article is already in that list + * + * @param string sFrameId + */ +function cmsTeaser_addManualTeaserEvent(sFrameId) { + $(sFrameId+' #add_art').css('cursor', 'pointer'); + $(sFrameId+' #add_art').click(function() { + //call internal add function + cmsTeaser_addManualTeaserEntry(sFrameId); + }); +} + +/** + * Function adds new article to multiple select box for articles + * Function also checks if article is already in that list + * + * @param string sFrameId + */ +function cmsTeaser_addManualTeaserEntry(sFrameId) { + var oArt = $(sFrameId+' #teaser_art'); + var iIdArt = oArt.attr('value'); + var sName = ''; + var bExists = 0; + + //if an article was selected + if (iIdArt > 0) { + //check if article already exists in view list + $(sFrameId+' #teaser_manual_art option').each(function() { + if (iIdArt == $(this).attr('value')) { + bExists = 1; + } + }); + + //get name of selected article + $(sFrameId+' #teaser_art option').each(function() { + if (iIdArt == $(this).attr('value')) { + sName = $(this).html(); + } + }); + + //if it is not in list, add article to list + if (bExists == 0) { + $(sFrameId+' #teaser_manual_art').append(''); + } + } +} + +/** + * Function adds double click events to all current listed articles for manual teaser + * in case of a double click this selected article is removed from list + * + * @param string sFrameId + */ +function cmsTeaser_addClickEvent(sFrameId) { + $(sFrameId+' #teaser_manual_art').dblclick(function() { + $(sFrameId+' #teaser_manual_art option').each(function() { + if($(this).attr('selected')) { + $(this).remove(); + }; + }); + }); + +} \ No newline at end of file diff --git a/branches/conlite20/conlite/scripts/conFrameResize.js b/branches/conlite20/conlite/scripts/conFrameResize.js new file mode 100644 index 0000000..54408a5 --- /dev/null +++ b/branches/conlite20/conlite/scripts/conFrameResize.js @@ -0,0 +1,352 @@ +/** + * conFrameResize Class $Id: conFrameResize.js 2 2011-07-20 12:00:48Z oldperl $ + * + * Controls the Contenido frame toggling and resizing + * + * @author Jan Lengowski + * @copyright four for business AG + * @version 0.9 + * + * $Author: oldperl $ $Date: 2011-07-20 14:00:48 +0200 (Wed, 20 Jul 2011) $ + * $RCSfile: conFrameResize.js,v $ + */ +function conFrameResize(parentFrameId, frameOne, frameTwo, frameThree, frameFour) +{ + /* Class correctly initialized */ + this.ok = false; + + /* Is the user dragging the frame */ + this.drag = false; + + /* Mouse cursor position */ + this.x = 0; + + /* Cursor offset */ + this.dragDiff = 15; + + /* Actual size of the frame */ + this.size = 200; + + /* Default frame size */ + this.defaultSize = 200; + + /* Optimal size (Without scrollbars) */ + this.optimalSize = 200; + + /* Id of the frameset, contenido default + is 'contentFrame' */ + this.frameSetId = parentFrameId || 'contentFrame'; + + /* Object reference main frameset */ + this.frameSet = ''; + + /* References to the 4 Contenido frames */ + this.frames = []; + + /* Name of the frames + LeftTop, LeftBottom, RightTop, RightBottom */ + this.frameNames = []; + this.frameNames[1] = frameOne || 'left_top'; + this.frameNames[2] = frameTwo || 'left_bottom'; + this.frameNames[3] = frameThree || 'right_top'; + this.frameNames[4] = frameFour || 'right_bottom'; + + /* Object reference to the left image */ + this.imgLeft = document.getElementById( 'toggleImage' ); + + /* Left image source */ + this.imgLeftSrc = 'images/toggle_frame_left.gif'; + + /* Right image source */ + this.imgRightSrc = 'images/toggle_frame_right.gif'; + + /* Neutral image src */ + this.spacerImage = 'images/spacer.gif' + + /* Object reference to the right image */ + this.imgRight = ''; + + /* Status of the frame 'hidden', 'normal' or 'drag' */ + this.status = 'normal'; + + /* Value of the col attribute in normal pos */ + this.colValHidden = '*,100%'; + + /* Value of the col attribute in hidden pos */ + this.colValNormal = '200,100%'; + + /* Value of the col attribute in resizable pos */ + this.colValDrag = ',100%'; + + /* Value of the col attribute in resizable pos */ + this.colValPrevious = ''; + + /* Number of frames initialized */ + this.count = 0; + + /* Drag cell id - defaults to 'dragcell' */ + this.dragCellId = 'dragcell'; + + /* Object reference to the drag cell */ + this.dragObj = false; +} + +/** + * Toggle the status of the frame 'show', 'hidden' + * + * @param none + * @return none + */ +conFrameResize.prototype.toggle = function() +{ + if (this.ok) + { + if (this.status == 'normal') + { + this.size = 0; + this.colValPrevious = this.frameSet.cols; + this.frameSet.cols = this.colValHidden; + this.imgRight.src = this.imgRightSrc; + this.imgRight.style.cursor = "pointer"; + this.status = 'hidden'; + } + else if (this.status == 'hidden') + { + /* Change image sources */ + this.imgRight.src = this.spacerImage; + + /* Cursor style */ + this.imgRight.style.cursor = "default"; + + /* Resize frameset */ + this.frameSet.cols = this.colValPrevious; + + /* Set status to normal */ + this.status = 'normal'; + + /* Resetting drag size */ + this.dragSize = this.defaultSize; + } + else if (this.status == 'dragged') + { + /* Change image sources */ + this.imgRight.src = this.spacerImage; + + /* Cursor style */ + this.imgRight.style.cursor = "default"; + + /* Resize frameset */ + this.frameSet.cols = this.colValNormal; + + /* Set status to normal */ + this.status = 'normal'; + + /* Resetting drag size */ + this.size = this.defaultSize; + } + } +} + +/** + * Initialize the Class + * + * @param none + * @return void + */ +conFrameResize.prototype.init = function() +{ + /* Create reference to other frames with this + init method because of different load times */ + this.frameSet = document.getElementById(this.frameSetId); + + /* Reference to the "show" image */ + this.imgRight = window.frames["right"][this.frameNames[3]].document.getElementById('toggleimage'); + + // Class is correcty initialized + this.ok = true; +} + +/** + * Init a frame with all events + * @param none + * @return none + */ +conFrameResize.prototype.initFrame = function() +{ + this.count ++; + + if (this.count == 4) + { + for (i=2; i 0) + { + this.optimalSize = refs[0].offsetWidth; + } +} + + +/** + * Resize the layer while 'dragging' + * + * @param int Resize by this value in pixels + * @return void + */ +conFrameResize.prototype.dragTo = function(px) +{ + this.size = px; + this.status = 'dragged'; + + if (this.size < this.defaultSize) + { // Smallest size is default size + this.size = this.defaultSize; + } + + this.frameSet.cols = this.size + this.colValDrag; +} + +/** + * Set mouse position capturing for + * netscape and mozilla. + * + * @param none + * @return none + */ +conFrameResize.prototype.captureMousePosition = function() +{ + with (this.frames[1]) + { + // Capture events + document.captureEvents(Event.MOUSEMOVE); + + // Capture mouse position + document.onmousemove = function(e) + { + frameResize.x = e.pageX; + + if (frameResize.drag) + { + frameResize.dragTo(frameResize.dragDiff + frameResize.x); + } + + return true; + } + + // Leave drag mode + document.onmouseup = function() + { + frameResize.drag = false; + frameResize.dragPosX = 0; + } + } +} +/** + * Set the Drag events + * + * @param string Id of the Drag Element + * @return true + */ +conFrameResize.prototype.setDragEvents = function(id) +{ + if (is.NS) + { + this.dragObj = this.frames[1].document.getElementById(id); + + this.dragObj.onmouseover = function() + { + this.style.cursor = 'hand'; + } + + this.dragObj.onmousedown = function() + { + this.style.cursor = 'move'; + + frameResize.drag = true; + frameResize.dragPosX = frameResize.x; + frameResize.dragDiff = frameResize.size - frameResize.dragPosX; + } + + this.dragObj.onmouseup = function() + { + this.style.cursor = 'default'; + + frameResize.drag = false; + + if (frameResize.x == frameResize.dragPosX) + { + frameResize.toggle(); + } + } + } + + if (is.IE) + { + this.dragObj = window.frames[this.frameNames[1]].document.getElementById(id); + + this.dragObj.onmouseover = function() + { + this.style.cursor = 'hand'; + } + + this.dragObj.onclick = function() + { + frameResize.toggle(); + } + } +} + +/** + * Leave drag mode + * @param none + * @access private + */ +conFrameResize.prototype.stopDrag = function() +{ + this.drag = false; +} + +/** + * Calc total height of given objects + * + **/ +conFrameResize.prototype.totalHeight = function(elements) + { + var sum=0; + for(var i=0; i + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + * @since file available since contenido release 4.8.9 + * + * {@internal + * created 2008-09-05 + * modified 2009-01-23, Ortwin Pinke, BUG-Fix in setFocus first parameter for execInstanceCommand has to be the Id of Tinyobject, not the object itself + * + * $Id: con_tiny.js 2 2011-07-20 12:00:48Z oldperl $: + * }} + * + */ + +var first = true; + +function myCustomSetupContent(editor_id, body, doc) { + tinyMCE.get(editor_id).setContent(tinyMCE.get(editor_id).getContent()); + //body.innerHTML = "my new content" + body.innerHTML; +} + + +/** + * Callback function for tiny which gets a selected image in Contenido + * image browser, close browser and set this selected image in tiny + */ +function updateImageFilebrowser () +{ + //error handling + if (!fb_handle.left) + { + return; + } + + if (!fb_handle.left.left_top) + { + return; + } + + if (!fb_handle.left.left_top.document.getElementById("selectedfile")) + { + return; + } + + + if (fb_handle.left.left_top.document.getElementById("selectedfile").value != "") + { + //get selected image from popup and close it + fb_win.document.forms[0].elements[fb_fieldname].value = fb_handle.left.left_top.document.getElementById("selectedfile").value; + + fb_handle.close(); + window.clearInterval(fb_intervalhandle); + + //set this selected image in tiny + if (fb_win.ImageDialog != null && fb_win.ImageDialog.showPreviewImage) + { + fb_win.ImageDialog.showPreviewImage(fb_win.document.forms[0].elements[fb_fieldname].value); + } + } +} + +/** + * Function converts a givenn url for use in contenido (callback of tiny) + * + * @param string url - url which should be converted + * @param object node - corresponding node object + * @param object on_save - event handler + * + * @return string - converted url + */ +function CustomURLConverter(url, node, on_save) { + var src = url; + + if (!src.match(/^https?:\/\//g)) { + url = frontend_path+src; + } + + return url; +} + +/** + * Function converts a given content string (callback of tiny) + * + * @param string type - type of content + * @param string value - string of content + * + * @return string - converted content + */ +function CustomCleanupContent(type, value) { + switch (type) { + case "get_from_editor": + case "insert_to_editor": + // Remove xhtml styled tags + value = value.replace(/[\s]*\/>/g,'>'); + break; + } + + return value; +} + +/** + * Function stores content of current opened tiny into global var aEditdata + * this content is later stored by submitting setcontent() + * Notice: Global js vars were defined in include.con_editcontent.php + */ +function storeCurrentTinyContent() { + //store last tiny changes if tiny is still open + if (tinyMCE.getInstanceById(active_object)) { + var content = tinyMCE.get(active_object).getContent(); + content = content.replace(frontend_path, ''); + aEditdata[active_id] = content; + } +} + +/** + * Function gets all content stored in aEditdata and sends it as string to server + * for storage it into database + * Notice: Global js vars were defined in include.con_editcontent.php + * + * @param integer idartlang - idartlang of article which is currently edited + * @param string act - actionurl of form (optional) + */ +function setcontent(idartlang, act) { + //do not ask user for storage + bCheckLeave = false; + //check if there is still a tiny open and get its content + storeCurrentTinyContent(); + + var str = ''; + //forach content in js array aEditdata + for (var sId in aEditdata) { + //check if content has changed, if it has serialize it to string + if (aEditdataOrig[sId] != aEditdata[sId]) { + var data = sId.split("_"); + + // data[0] is the fieldname * needed + // data[1] is the idtype + // data[2] is the typeid * needed + + // build the string which will be send + str += buildDataEntry(idartlang , data[0] , data[2] , prepareString(aEditdata[sId])); + } + } + + // set the string + document.forms.editcontent.data.value = str + document.forms.editcontent.data.value; + + // set the action string + if ( act != 0 ) { + document.forms.editcontent.action = act; + } + + // submit the form + document.forms.editcontent.submit(); +} + +/** + * Function escapes chars in content for inserting into submit string. + * An empty content   is replaced by %$%EMPTY%$% + * | were seperators in string and were replaced by %$%SEPERATOR%$% + * + * @param string aContent - content which should be escaped + * @return string - string with escaped chars + */ +function prepareString(aContent) { + if ( aContent == " " || aContent == "" ) { + aContent = "%$%EMPTY%$%"; + } else { + // if there is an | in the text set a replacement chr because we use it later as isolator + while( aContent.search(/\|/) != -1 ) { + aContent = aContent.replace(/\|/,"%$%SEPERATOR%$%"); + } + } + + return aContent; +} + +/** + * Function serializes given args to string and return it. Seperator is | + * + * @param integer idartlang - idartlang of article which is currently edited + * @param string type - type name of content (CMS_HTML) + * @param integer typeid - id of content (CMS_HTML[4] => 4) + * @param string value - value of content + * @return string - serialized vars + */ +function buildDataEntry(idartlang, type, typeid, value) { + return idartlang +'|'+ type +'|'+ typeid +'|'+ value +'||'; +} + +/** + * Function adds a custom content type to submit strings, adds all other content + * information and submits it to server using setcontent() + * + * @param integer idartlang - idartlang of article which is currently edited + * @param string type - type name of content (CMS_HTML) + * @param integer typeid - id of content (CMS_HTML[4] => 4) + * @param string value - value of content + */ +function addDataEntry(idartlang, type, typeid, value) { + document.forms.editcontent.data.value = (buildDataEntry(idartlang, type, typeid, prepareString(value) ) ); + + setcontent(idartlang,'0'); +} + +/** + * Function closses currently opened tiny + * + */ +function closeTiny() { + //check if tiny is currently open + if (tinyMCE.getInstanceById(active_object)) { + //save current tiny content to js var + storeCurrentTinyContent(); + + //if content was empty set div height. Empty divs were ignored by most browsers + if (aEditdata[active_id] == '') { + document.getElementById(active_id).style.height = '15px'; + } + //close current open tiny and set active vars to null + tinyMCE.execCommand('mceRemoveControl', false, active_object); + active_id = null; + active_object = null; + } +} + +/** + * Function swaps tiny to a content editable div. If tiny is already open on + * another div, this tiny was swapped to current div by closing it first + * tiny swaps on click + * Notice: Global js vars were defined in include.con_editcontent.php + * + * @param object obj - div object which was clicked + */ +function swapTiny(obj) { + //check if tiny is currently open + closeTiny(); + + //rest tinymce configs defined in include.con_editcontent.php + tinyMCE.settings = tinymceConfigs; + //set clicked object as active object + active_id = obj.id; + active_object = obj; + + //show thiny and focus it + tinyMCE.execCommand('mceAddControl', true, obj); + setFocus(); + + //remove height information of clicked div + document.getElementById(active_id).style.height = ''; +} + +/** + * Function sets focus on toggled editor if its loading proccess was completed + * + */ +function setFocus() { + var activeTinyId = tinyMCE.getInstanceById(active_object); + if (!activeTinyId) { + window.setTimeout('setFocus()', 50); + } else { + tinyMCE.execInstanceCommand(activeTinyId, 'mceFocus', false); + } +} + +/** + * Callback function of Tiny which opens contenido file browser in popup + * Notice: Global js vars were defined in include.con_editcontent.php + * (image_url, file_url, flash_url, media_url) + * + * @param string field_name - Name of relevant HTML field + * @param string url - Tiny default but not used in function + * @param string type - Type of content to add (image, file, ..) + * @param Object win - Corresponding window object + */ +function myCustomFileBrowser(field_name, url, type, win) { + switch (type) + { + case "image": + fb_handle = window.open(image_url, "filebrowser", "dialog=yes,resizable=yes"); + fb_fieldname = field_name; + fb_win = win; + fb_intervalhandle = window.setInterval("updateImageFilebrowser()", 250); + break; + case "file": + fb_handle = window.open(file_url, "filebrowser", "dialog=yes,resizable=yes"); + fb_fieldname = field_name; + fb_win = win; + fb_intervalhandle = window.setInterval("updateImageFilebrowser()", 250); + break; + case "flash": + fb_handle = window.open(flash_url, "filebrowser", "dialog=yes,resizable=yes"); + fb_fieldname = field_name; + fb_win = win; + fb_intervalhandle = window.setInterval("updateImageFilebrowser()", 250); + break; + case "media": + fb_handle = window.open(media_url, "filebrowser", "dialog=yes,resizable=yes"); + fb_fieldname = field_name; + fb_win = win; + fb_intervalhandle = window.setInterval("updateImageFilebrowser()", 250); + break; + default: + alert(type); + break; + } +} + +/** + * Function like storeCurrentTinyContent() which stores original content to + * global array aEditdataOrig for a later decision if content has changed + * + * @param string sContent - original content string + */ +function updateContent(sContent) { + //if original content was already set do not overwrite + //this happens if tiny is reopened on same content + if (aEditdataOrig[active_id] == undefined) { + sContent = sContent.replace(frontend_path, ''); + aEditdataOrig[active_id] = sContent; + } +} + +/** + * Function checks if content has changed if user leaves page. + * Then he has the possiblity to save this content. So there is no + * guess, that changes get lost. + * Notice: Global js vars were defined in include.con_editcontent.php + * (aEditdata, aEditdataOrig, sQuestion, iIdartlang) + */ +function leave_check() { + //If tiny is still open store its content + storeCurrentTinyContent(); + + //Check if any content in aEditdata was changed + var bAsk = false; + for (var sId in aEditdata) { + if (aEditdataOrig[sId] != aEditdata[sId]) { + bAsk = true; + } + } + + //If content was changed and global var bCheckLeave is set to true + //ask user if he wants to save content + //ex bCheckLeave is false when user clicks save button. This is also + //a case in which he leaves this page but by pressing save button he + //also saves all changes + if (bAsk && bCheckLeave) { + check = confirm(sQuestion); + //If he wants to save content call function setcontent(); + if (check == true) { + setcontent(iIdartlang, '0'); + } + } +} diff --git a/branches/conlite20/conlite/scripts/contenidoConfig.js b/branches/conlite20/conlite/scripts/contenidoConfig.js new file mode 100644 index 0000000..6fa38f2 --- /dev/null +++ b/branches/conlite20/conlite/scripts/contenidoConfig.js @@ -0,0 +1,305 @@ +/***************************************** +* +* $Id: contenidoConfig.js 2 2011-07-20 12:00:48Z oldperl $ +* +* File : $RCSfile: contenidoConfig.js,v $ +* Project : +* Descr : +* +* Author : $Author: oldperl $ +* Modified : $Date: 2011-07-20 14:00:48 +0200 (Wed, 20 Jul 2011) $ +* +* four for business AG, www.4fb.de +******************************************/ + +/** + * ContenidoConfig Class + * + * Contenido configuration object + * + * @author Jan Lengowski + * @copyright four for business AG + */ +function contenidoConfig( instanceName ,actionFrameName ) { + + /* Name of the Instance for external calls + or CallBacks. Defaults to 'cfg' */ + this.instanceName = instanceName || 'cfg'; + + /* Name of the Actionframe. Defaults to 'left_bottom' */ + this.actionFrameName = actionFrameName || 'left_bottom'; + + /* Reference to the Actionframe */ + this.actionFrame = parent.frames[this.actionFrameName]; + + /* Element references Array */ + this.objRef = []; + + /* Userright properties Array */ + this.hasRight = []; + this.hasRight['template'] = 0; + this.hasRight['template_cfg'] = 0; + this.hasRight['online'] = 0; + this.hasRight['public'] = 0; + this.hasRight['syncable'] = 0; + + /* Actionstatus */ + this.action = ''; + + /* Status */ + this.status = false; + + /* Template ID */ + this.tplId = 0; + + /* New template id */ + this.nTplId = null; + + /* Online flag */ + this.isOnline = 0; + + /* Public flag */ + this.isPublic = 0; + + /* Category ID */ + this.catId = 0; + + /* idString */ + this.idString = 0; + +} // end function + +/** + * Initializes the class. + * This method should be overwritten if the + * class is used in an other area beside 'con'. + * Stuff is HARDCODED for 'con' ATM + * + * @param string Id of the On-/offline image + * @param string Id of the Lock/Unlock image + * @param string Id of the Template select + */ +contenidoConfig.prototype.init = function( imgOnlineId, imgPublicId, imgSelectId, imgTemplateCfgId) { + + this.objRef = this.createRefs( imgOnlineId, imgPublicId, imgSelectId, imgTemplateCfgId); + + if ( this.objRef.length == 4 ) { + + this.status = true; + /* Set the object ID's */ + this.objRef[1].setId('online'); + this.objRef[2].setId('lock'); + this.objRef[3].setId('template_cfg'); + + // HARDCODED STUFF + this.objRef[1].setImgSrc( 'images/online.gif', 'images/offline.gif' ); + this.objRef[2].setImgSrc( 'images/folder_delock.gif', 'images/folder_lock.gif'); + this.objRef[3].setImgSrc( 'images/but_cat_conf2.gif', 'images/but_cat_conf2.gif' ); + return true; + } + +} // end function + +/** + * Loads a configuration and calls + * the updateScreen method + * + * @param int Contenido Template Id + * @param int Contenido Online flag + * @param int Contenido Public flag + */ +contenidoConfig.prototype.load = function( Idcat, Idtpl, Online, Public, RightTpl, RightOn, RightPublic, RightTemplateCfg, RightIsSyncable, idString ) { + this.catId = Idcat; + this.tplId = Idtpl; + this.isOnline = Online; + this.isPublic = Public; + this.idString = idString; + + this.hasRight['template'] = RightTpl; + this.hasRight['template_cfg'] = RightTemplateCfg; + this.hasRight['online'] = RightOn; + this.hasRight['public'] = RightPublic; + this.hasRight['syncable'] = RightIsSyncable; + + this.updateScreen(); + +} // end function + +/** + * Creates objects of class HTMLObj + * + * @param args string ID's of the objects + * @return array Array storing the objects + */ +contenidoConfig.prototype.createRefs = function() { + + var objects = new Array; + + for ( i = 0; i < arguments.length; i ++ ) { + objects[i] = new HTMLObj( arguments[i] ); + } + + return objects; + +} // end function + +/** + * Updates the screen with the + * given class cfg information + * @return void + */ +contenidoConfig.prototype.updateScreen = function() { + if ( this.status ) { + /* Template select dropdown */ + if ( this.hasRight['template'] == 1 ) { + + /* User has right to change + the template, enable dropdown, select template */ + this.objRef[0].obj.removeAttribute( "disabled" ); + this.objRef[0].select(this.tplId); + + } else { + + /* User has NO right to change + the template, disable the dropdown */ + this.objRef[0].obj.setAttribute( "disabled", "true" ); + this.objRef[0].select(this.tplId); + } + + /* On-/Offline */ + if ( 0 == this.isOnline && this.hasRight['online'] == 1 ) { + this.objRef[1].over(); + + } else if ( 1 == this.isOnline && this.hasRight['online'] == 1 ) { + this.objRef[1].out(); + + } else if ( 0 == this.hasRight['online'] ) { + this.objRef[1].lock(); + } + + /* Public / Non-Public */ + if ( 0 == this.isPublic && 1 == this.hasRight['public'] ) { + this.objRef[2].over(); + } else if ( 1 == this.isPublic && 1 == this.hasRight['public'] ) { + this.objRef[2].out() ; + } else { + this.objRef[2].lock(); + } + + /* Template Config button */ + if (this.hasRight['template_cfg'] == 1) { + this.objRef[3].out(); + } else { + this.objRef[3].lock(); + } + + } // end if this.status + +} // end function + +/** + * Set the action property and + * execute it + * @param string action + */ +contenidoConfig.prototype.setAction = function(action) { + + //this.actionFrame.location.href = action; + +} // end function + +/** + * Change template for a marked category + * + * @return void + * @author Jan Lengowski + * @copyright four for business AG + */ +contenidoConfig.prototype.changeTemplate = function() { + + if ( this.catId && this.hasRight['template'] == 1 ) { + + /* create action string */ + str = ""; + str += "main.php?area=con"; + str += "&action=con_changetemplate"; // action + str += "&frame=2"; // frame 2 + str += "&idcat=" + cfg.catId; // idcat of marked category + str += "&idtpl=" + this.objRef[0].getValue(); // id of selected template + str += "&contenido=" + sid; // contenido session id + + /* execute action */ + this.setAction(str); + + /* set flag for changed template */ + this.nTplId = this.objRef[0].getValue(); + this.tplId = this.objRef[0].getValue(); + } +} + +/** + * Return template changed status + * + * @return bool has template changed? + */ +contenidoConfig.prototype.templateChanged = function () { + + return ( this.nTplId != null ) ? true : false; + +} // end function + + + +/** + * Return the rowId String + * @return String RowId String + */ +contenidoConfig.prototype.getRowId = function() { + + /* Build the data string. + 0 -> category id + 1 -> category template id + 2 -> category online + 3 -> category public + 4 -> has right for: template + 5 -> has right for: online + 6 -> has right for: public + 7-> has right for template_cfg + 8-> category is syncable*/ + + var sRowId = ""; + + sRowId += this.catId + "-"; + sRowId += this.tplId + "-"; + sRowId += this.isOnline + "-"; + sRowId += this.isPublic + "-"; + sRowId += this.hasRight['template'] + "-"; + sRowId += this.hasRight['online'] + "-"; + sRowId += this.hasRight['public'] + "-"; + sRowId += this.hasRight['template_cfg'] + "-"; + sRowId += this.hasRight['syncable']; + + return sRowId; + +} // end function + +/** + * Reset the config object -> load default values; + * @return String RowId String + */ +contenidoConfig.prototype.reset = function() { + + this.catId = 0; + this.tplId = 0; + this.isOnline = 0; + this.isPublic = 0; + + this.hasRight['template_cfg'] = 0; + this.hasRight['template'] = 0; + this.hasRight['online'] = 0; + this.hasRight['public'] = 0; + + this.updateScreen(); + +} // end function + diff --git a/branches/conlite20/conlite/scripts/contextMenu.remove.js b/branches/conlite20/conlite/scripts/contextMenu.remove.js new file mode 100644 index 0000000..10e1cd5 --- /dev/null +++ b/branches/conlite20/conlite/scripts/contextMenu.remove.js @@ -0,0 +1,106 @@ +var display_url; + function createMenu (menuname, items, links) + { + document.writeln(''); + document.getElementById(menuname).style.display = ''; + } + +var ie5 = document.all && document.getElementById + var ns6 = document.getElementById && !document.all + if (ie5 || ns6) +//var menuobj=document.getElementById("ie5menu") + + function showmenuie5(e){ + + if (ie5) + { + menuobj = document.getElementById(window.event.srcElement.getAttribute("helpid")); + } else + { + menuobj = document.getElementById(e.target.getAttribute("helpid")); + } + + +//Find out how close the mouse is to the corner of the window + var rightedge = ie5? document.body.clientWidth - event.clientX : window.innerWidth - e.clientX + var bottomedge = ie5? document.body.clientHeight - event.clientY : window.innerHeight - e.clientY + +//if the horizontal distance isn't enough to accomodate the width of the context menu + if (rightedge < menuobj.offsetWidth) +//move the horizontal position of the menu to the left by it's width + menuobj.style.left = ie5? document.body.scrollLeft + event.clientX - menuobj.offsetWidth : window.pageXOffset + e.clientX - menuobj.offsetWidth + else +//position the horizontal position of the menu where the mouse was clicked + menuobj.style.left = ie5? document.body.scrollLeft + event.clientX : window.pageXOffset + e.clientX + +//same concept with the vertical position + if (bottomedge < menuobj.offsetHeight) + menuobj.style.top = ie5? document.body.scrollTop + event.clientY - menuobj.offsetHeight : window.pageYOffset + e.clientY - menuobj.offsetHeight + else + menuobj.style.top = ie5? document.body.scrollTop + event.clientY : window.pageYOffset + e.clientY + + menuobj.style.visibility = "visible" + + + return false; + + } + +function hidemenuie5(e){ +if (typeof menuobj == "object") +{ +menuobj.style.visibility = "hidden" +} +} + +function highlightie5(e){ +var firingobj = ie5? event.srcElement : e.target + if (firingobj.className == "menuitems" || ns6 && firingobj.parentNode.className == "menuitems"){ +if (ns6 && firingobj.parentNode.className == "menuitems") firingobj = firingobj.parentNode //up one node + firingobj.style.backgroundColor = "#F4F8BD" + firingobj.style.color = "black" + firingobj.style.cursor = "pointer" + if (display_url == 1) + window.status = event.srcElement.url +} +} + +function lowlightie5(e){ +var firingobj = ie5? event.srcElement : e.target + if (firingobj.className == "menuitems" || ns6 && firingobj.parentNode.className == "menuitems"){ +if (ns6 && firingobj.parentNode.className == "menuitems") firingobj = firingobj.parentNode //up one node + firingobj.style.backgroundColor = "" + firingobj.style.color = "black" + window.status = '' +} +} + +function jumptoie5(e){ +var firingobj = ie5? event.srcElement : e.target + if (firingobj.className == "menuitems" || ns6 && firingobj.parentNode.className == "menuitems"){ +if (ns6 && firingobj.parentNode.className == "menuitems") firingobj = firingobj.parentNode + if (firingobj.getAttribute("target")) + window.open(firingobj.getAttribute("url"), firingobj.getAttribute("target")) + else + window.location = firingobj.getAttribute("url") +} +} + +var menuobj; + if (ie5 || ns6){ +//menuobj.style.display='' +document.oncontextmenu = showmenuie5 + document.onclick = hidemenuie5 +} \ No newline at end of file diff --git a/branches/conlite20/conlite/scripts/expandCollapse.js b/branches/conlite20/conlite/scripts/expandCollapse.js new file mode 100644 index 0000000..1da10fd --- /dev/null +++ b/branches/conlite20/conlite/scripts/expandCollapse.js @@ -0,0 +1,94 @@ +var bMsie = (document.all) ? true : false; + +var sExpandString = ''; +var sCollapseString = ''; +var sCollapseButton = './images/close_all.gif'; +var sExpandButton = './images/open_all.gif'; + +function init(transOpen, transClose) { + sCollapseString = transClose; + sExpandString = transOpen; + + var aStatrows = document.getElementsByTagName('tr'); + var sDisplay = ''; + + if (bMsie) { + sDisplay = 'block'; + } else { + sDisplay = 'table-row'; + } + var preButton = null; + var preAIds = null; + var level = 1; + + for (var i = 0; i < aStatrows.length; i++) { + if (aStatrows[i].id) { + aStatrows[i].style.display = sDisplay; + + var oButton = aStatrows[i].getElementsByTagName('img')[1]; + var aIds = aStatrows[i].id.split('_'); + + if (oButton && oButton.id == aStatrows[i].id+'_img') { + if (aIds.length > level ) { + preButton.src = sCollapseButton; + preButton.title = sCollapseString; + preButton.alt = sCollapseString; + preButton.parentNode.href = 'javascript:changeVisibility(\''+aStatrows[(i-1)].id+'\', '+(preAIds.length-1)+', '+aIds[preAIds.length-1]+');'; + } + preButton = oButton; + preAIds = aIds; + level = aIds.length; + } + } + } +} + +function changeVisibility (sIdClicked, iLevel, iIdCat) { + var sDisplay = ''; + var aIdsClicked = sIdClicked.split('_'); + + var oButton = document.getElementById (sIdClicked+'_img'); + + if (oButton.src.match(/open_all.gif/)) { + oButton.src = sCollapseButton; + oButton.title = sCollapseString; + oButton.alt = sCollapseString; + if (bMsie) { + sDisplay = 'block'; + } else { + sDisplay = 'table-row'; + } + } else { + oButton.src = sExpandButton; + oButton.title = sExpandString; + oButton.alt = sExpandString; + sDisplay = 'none'; + } + + var preButton = null; + var level = iLevel; + var aStatrows = document.getElementsByTagName('tr'); + + for (var i = 0; i < aStatrows.length; i++) { + var aIds = aStatrows[i].id.split('_'); + + if (aIds[iLevel] == iIdCat) { + if (sDisplay == 'none' && aIds.length > aIdsClicked.length) { + aStatrows[i].style.display = sDisplay; + + var oButton = aStatrows[i].getElementsByTagName('img')[1]; + if (oButton && oButton.id == aStatrows[i].id+'_img') { + if (aIds.length > level && preButton) { + preButton.src = sExpandButton; + preButton.title = sExpandString; + preButton.alt = sExpandString; + } + preButton = oButton; + level = aIds.length; + } + } else if ((aIdsClicked.length+1) == aIds.length) { + aStatrows[i].style.display = sDisplay; + } + } + } +} \ No newline at end of file diff --git a/branches/conlite20/conlite/scripts/general.js b/branches/conlite20/conlite/scripts/general.js new file mode 100644 index 0000000..7cec836 --- /dev/null +++ b/branches/conlite20/conlite/scripts/general.js @@ -0,0 +1,68 @@ +/****************************************** +* File : general.js +* Project : Contenido +* Descr : Defines general required +* javascript functions +* +* Author : Jan Lengowski +* Created : 25.03.2003 +* Modified : $Date: 2011-07-20 14:00:48 +0200 (Wed, 20 Jul 2011) $ +* +* $Id: general.js 2 2011-07-20 12:00:48Z oldperl $ + +* four for business AG +******************************************/ + +/** + * Javascript Multilink + * + * Example: + * + * conMultiLink ( + * "frame", + * "link", + * "frame", + * "link", + * ..., + * "simpleFrame" + * ) + * + * + * @param [arguments*] optional amount of arguments used pairwise for assigning URLs to frame names in Contenido. + * The last argument is optional but must (!) be "simpleFrame" if used to specify that the complete frame structure is not available. + * @return void + * + * @author Jan Lengowski + * @author Marco Jahn + * @author Frederic Schneider + * @copryright four for business AG + */ +function conMultiLink() +{ + // get last argument + var tmp = arguments[arguments.length-1]; + // check by last argument if reduced frame structure is used + var simpleFrame = (tmp == "simpleFrame") ? true : false ; + // change for-loop counter if last parameter is used to identify simple frame multilinks + var len = (simpleFrame) ? arguments.length - 1 : arguments.length; + + for (var i = 0; i < len; i += 2) { + f = arguments[i]; + l = arguments[i + 1]; + + if (f == "left_bottom" || f == "left_top") { + parent.parent.frames["left"].frames[f].location.href = l; + } else { + if (simpleFrame) { // use simple frame + parent.frames[f].location.href = l; + } else { // use classic multilink structure + parent.parent.frames["right"].frames[f].location.href = l; + } + } + } +} + +function handleErrors() { + + return true; +} \ No newline at end of file diff --git a/branches/conlite20/conlite/scripts/group_association.js b/branches/conlite20/conlite/scripts/group_association.js new file mode 100644 index 0000000..dc77b0f --- /dev/null +++ b/branches/conlite20/conlite/scripts/group_association.js @@ -0,0 +1,144 @@ +/***************************************** +* +* $Id: group_association.js 2 2011-07-20 12:00:48Z oldperl $ +* +* File : $RCSfile: group_association.js,v $ +* Project : Contenido +* Descr : File contains java script functions for filtering users in select areas, handling short keys and submitting form +* This functions are used in template template.grouprights_memberselect.html +* +* Author : $Author: timo.trautmann$ +* Modified : $Date: 2011-07-20 14:00:48 +0200 (Wed, 20 Jul 2011) $ +* +* four for business AG, www.4fb.de +******************************************/ + + +var keycode = 0; //last pressed key +var addAction = ''; //contenidoaction for adding user to group - (different fpr frontentgroups and backendgroups) +var deleteAction = ''; //contenidoaction for removing user from group - (different fpr frontentgroups and backendgroups) + +/** + * Initialization of previous defined variables + * + * @param string add - adding user contenido action + * @param string del - removing user contenido action + * + */ +function init(add, del) { + addAction = add; + deleteAction = del; +} + +/** + * Function submits form when users were added to group or removed from group + * + * @param string isAdded - contenido action string + * + */ +function setAction(isAdded) { + var selectId = null; + //case of adding new members + if (isAdded == addAction) { + selectId = 'newmember'; + document.group_properties.action.value = addAction; + //case of removing existing members + } else { + selectId = 'user_in_group'; + document.group_properties.action.value = deleteAction; + } + + var sSelectBox = document.getElementById(selectId); + //only submit form, if a user is selected + if (sSelectBox.selectedIndex != -1) { + document.group_properties.submit(); + } +} + +/** + * Function filters entries in select box and shows only relevant users for selection + * + * @param string id - id of textbox, which contains the search string + * + */ +function filter (id) { + //get search string ans buid regular expression + var sFilterValue = document.getElementById(id).value; + var oReg = new RegExp(sFilterValue,"gi"); + + //build id of corresponding select box + var sSelectId = id.replace(/_filter_value/, ''); + + //get select box and corresponding options + var sSelectBox = document.getElementById(sSelectId); + var oOptions = sSelectBox.getElementsByTagName('option'); + + //remove all options + var iLen = oOptions.length; + for (var i=0; i