aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore19
-rw-r--r--LICENSE.txt339
-rw-r--r--README.md52
-rw-r--r--about.php2
-rw-r--r--action.php37
-rw-r--r--admin.php15
-rw-r--r--admin/album.php2
-rw-r--r--admin/album_notification.php219
-rw-r--r--admin/batch_manager.php27
-rw-r--r--admin/batch_manager_global.php4
-rw-r--r--admin/batch_manager_unit.php2
-rw-r--r--admin/cat_list.php2
-rw-r--r--admin/cat_modify.php35
-rw-r--r--admin/cat_move.php2
-rw-r--r--admin/cat_options.php2
-rw-r--r--admin/cat_perm.php2
-rw-r--r--admin/comments.php2
-rw-r--r--admin/configuration.php5
-rw-r--r--admin/element_set_ranks.php34
-rw-r--r--admin/extend_for_templates.php2
-rw-r--r--admin/group_list.php2
-rw-r--r--admin/group_perm.php2
-rw-r--r--admin/help.php2
-rw-r--r--admin/history.php2
-rw-r--r--admin/include/add_core_tabs.inc.php2
-rw-r--r--admin/include/albums_tab.inc.php2
-rw-r--r--admin/include/c13y_internal.class.php4
-rw-r--r--admin/include/check_integrity.class.php4
-rw-r--r--admin/include/configuration_sizes_process.inc.php2
-rw-r--r--admin/include/configuration_watermark_process.inc.php4
-rw-r--r--admin/include/functions.php106
-rw-r--r--admin/include/functions_history.inc.php2
-rw-r--r--admin/include/functions_install.inc.php2
-rw-r--r--admin/include/functions_metadata.php2
-rw-r--r--admin/include/functions_notification_by_mail.inc.php16
-rw-r--r--admin/include/functions_permalinks.php2
-rw-r--r--admin/include/functions_plugins.inc.php2
-rw-r--r--admin/include/functions_upgrade.php9
-rw-r--r--admin/include/functions_upload.inc.php271
-rw-r--r--admin/include/image.class.php2
-rw-r--r--admin/include/index.php2
-rw-r--r--admin/include/languages.class.php6
-rw-r--r--admin/include/mysqldump.php4
-rw-r--r--admin/include/pclzip.lib.php2
-rw-r--r--admin/include/photos_add_direct_prepare.inc.php5
-rw-r--r--admin/include/plugins.class.php6
-rw-r--r--admin/include/tabsheet.class.php4
-rw-r--r--admin/include/themes.class.php6
-rw-r--r--admin/include/updates.class.php24
-rw-r--r--admin/index.php2
-rw-r--r--admin/intro.php2
-rw-r--r--admin/languages.php2
-rw-r--r--admin/languages_installed.php2
-rw-r--r--admin/languages_new.php2
-rw-r--r--admin/maintenance.php2
-rw-r--r--admin/menubar.php2
-rw-r--r--admin/notification_by_mail.php34
-rw-r--r--admin/permalinks.php2
-rw-r--r--admin/photo.php2
-rw-r--r--admin/photos_add.php2
-rw-r--r--admin/photos_add_applications.php2
-rw-r--r--admin/photos_add_direct.php2
-rw-r--r--admin/photos_add_ftp.php2
-rw-r--r--admin/picture_coi.php2
-rw-r--r--admin/picture_modify.php21
-rw-r--r--admin/plugin.php2
-rw-r--r--admin/plugins.php2
-rw-r--r--admin/plugins_installed.php2
-rw-r--r--admin/plugins_new.php2
-rw-r--r--admin/popuphelp.php2
-rw-r--r--admin/profile.php2
-rw-r--r--admin/rating.php2
-rw-r--r--admin/rating_user.php2
-rw-r--r--admin/site_manager.php2
-rw-r--r--admin/site_reader_local.php33
-rw-r--r--admin/site_update.php135
-rw-r--r--admin/stats.php2
-rw-r--r--admin/tags.php2
-rw-r--r--admin/theme.php2
-rw-r--r--admin/themes.php2
-rw-r--r--admin/themes/clear/icon/index.php2
-rw-r--r--admin/themes/clear/index.php2
-rw-r--r--admin/themes/default/fontello/README.txt24
-rw-r--r--admin/themes/default/fontello/config.json6
-rw-r--r--admin/themes/default/fontello/css/fontello-codes.css1
-rw-r--r--admin/themes/default/fontello/css/fontello-embedded.css13
-rw-r--r--admin/themes/default/fontello/css/fontello-ie7-codes.css1
-rw-r--r--admin/themes/default/fontello/css/fontello-ie7.css1
-rw-r--r--admin/themes/default/fontello/css/fontello.css19
-rw-r--r--admin/themes/default/fontello/demo.html183
-rw-r--r--admin/themes/default/fontello/font/fontello.eotbin19028 -> 19304 bytes
-rw-r--r--admin/themes/default/fontello/font/fontello.svg91
-rw-r--r--admin/themes/default/fontello/font/fontello.ttfbin18860 -> 19136 bytes
-rw-r--r--admin/themes/default/fontello/font/fontello.woffbin12100 -> 12360 bytes
-rw-r--r--admin/themes/default/icon/index.php2
-rw-r--r--admin/themes/default/index.php2
-rw-r--r--admin/themes/default/template/admin.tpl3
-rw-r--r--admin/themes/default/template/album_notification.tpl108
-rw-r--r--admin/themes/default/template/batch_manager_global.tpl8
-rw-r--r--admin/themes/default/template/cat_modify.tpl80
-rw-r--r--admin/themes/default/template/configuration_watermark.tpl7
-rw-r--r--admin/themes/default/template/notification_by_mail.tpl10
-rw-r--r--admin/themes/default/template/photos_add_direct.tpl2
-rw-r--r--admin/themes/default/template/picture_modify.tpl1
-rw-r--r--admin/themes/default/template/user_list.tpl90
-rw-r--r--admin/themes/default/theme.css22
-rw-r--r--admin/themes/roma/index.php2
-rw-r--r--admin/themes_installed.php2
-rw-r--r--admin/themes_new.php2
-rw-r--r--admin/updates.php2
-rw-r--r--admin/updates_ext.php2
-rw-r--r--admin/updates_pwg.php2
-rw-r--r--admin/user_list.php2
-rw-r--r--admin/user_list_backend.php2
-rw-r--r--admin/user_perm.php2
-rw-r--r--comments.php2
-rw-r--r--doc/index.php2
-rw-r--r--feed.php2
-rw-r--r--galleries/index.php2
-rw-r--r--i.php26
-rw-r--r--identification.php2
-rw-r--r--include/Logger.class.php2
-rw-r--r--include/block.class.php2
-rw-r--r--include/cache.class.php2
-rw-r--r--include/calendar_base.class.php4
-rw-r--r--include/calendar_monthly.class.php2
-rw-r--r--include/calendar_weekly.class.php2
-rw-r--r--include/category_cats.inc.php2
-rw-r--r--include/category_default.inc.php2
-rw-r--r--include/common.inc.php14
-rw-r--r--include/config_default.inc.php19
-rw-r--r--include/constants.php8
-rw-r--r--include/dblayer/functions_mysql.inc.php4
-rw-r--r--include/dblayer/functions_mysqli.inc.php8
-rw-r--r--include/derivative.inc.php2
-rw-r--r--include/derivative_params.inc.php2
-rw-r--r--include/derivative_std_params.inc.php4
-rw-r--r--include/filter.inc.php2
-rw-r--r--include/functions.inc.php52
-rw-r--r--include/functions_calendar.inc.php2
-rw-r--r--include/functions_category.inc.php8
-rw-r--r--include/functions_comment.inc.php2
-rw-r--r--include/functions_cookie.inc.php2
-rw-r--r--include/functions_filter.inc.php2
-rw-r--r--include/functions_html.inc.php18
-rw-r--r--include/functions_mail.inc.php51
-rw-r--r--include/functions_metadata.inc.php2
-rw-r--r--include/functions_notification.inc.php69
-rw-r--r--include/functions_picture.inc.php2
-rw-r--r--include/functions_plugins.inc.php2
-rw-r--r--include/functions_rate.inc.php2
-rw-r--r--include/functions_search.inc.php2
-rw-r--r--include/functions_session.inc.php6
-rw-r--r--include/functions_tag.inc.php2
-rw-r--r--include/functions_url.inc.php25
-rw-r--r--include/functions_user.inc.php137
-rw-r--r--include/index.php2
-rw-r--r--include/inflectors/en.php2
-rw-r--r--include/inflectors/fr.php2
-rw-r--r--include/menubar.inc.php2
-rw-r--r--include/no_photo_yet.inc.php2
-rw-r--r--include/page_header.php2
-rw-r--r--include/page_tail.php2
-rw-r--r--include/passwordhash.class.php57
-rw-r--r--include/php_compat/index.php2
-rw-r--r--include/picture_comment.inc.php2
-rw-r--r--include/picture_metadata.inc.php2
-rw-r--r--include/picture_rate.inc.php2
-rw-r--r--include/section_init.inc.php2
-rw-r--r--include/smarty/.gitattributes22
-rw-r--r--include/smarty/.gitignore221
-rw-r--r--include/smarty/.travis.yml25
-rw-r--r--include/smarty/COMPOSER_RELEASE_NOTES.txt29
-rw-r--r--include/smarty/INHERITANCE_RELEASE_NOTES.txt67
-rw-r--r--include/smarty/NEW_FEATURES.txt133
-rw-r--r--include/smarty/README13
-rw-r--r--include/smarty/README.md65
-rw-r--r--include/smarty/SMARTY_3.1_NOTES.txt2
-rw-r--r--include/smarty/change_log.txt733
-rw-r--r--include/smarty/composer.json43
-rw-r--r--include/smarty/lexer/smarty_internal_configfilelexer.plex318
-rw-r--r--include/smarty/lexer/smarty_internal_configfileparser.y362
-rw-r--r--include/smarty/lexer/smarty_internal_templatelexer.plex672
-rw-r--r--include/smarty/lexer/smarty_internal_templateparser.y1352
-rw-r--r--include/smarty/libs/Autoloader.php124
-rw-r--r--include/smarty/libs/Smarty.class.php1344
-rw-r--r--include/smarty/libs/SmartyBC.class.php115
-rw-r--r--include/smarty/libs/debug.tpl281
-rw-r--r--include/smarty/libs/plugins/block.textformat.php21
-rw-r--r--include/smarty/libs/plugins/function.counter.php38
-rw-r--r--include/smarty/libs/plugins/function.cycle.php47
-rw-r--r--include/smarty/libs/plugins/function.fetch.php117
-rw-r--r--include/smarty/libs/plugins/function.html_checkboxes.php78
-rw-r--r--include/smarty/libs/plugins/function.html_image.php68
-rw-r--r--include/smarty/libs/plugins/function.html_options.php81
-rw-r--r--include/smarty/libs/plugins/function.html_radios.php74
-rw-r--r--include/smarty/libs/plugins/function.html_select_date.php157
-rw-r--r--include/smarty/libs/plugins/function.html_select_time.php72
-rw-r--r--include/smarty/libs/plugins/function.html_table.php45
-rw-r--r--include/smarty/libs/plugins/function.mailto.php45
-rw-r--r--include/smarty/libs/plugins/function.math.php54
-rw-r--r--include/smarty/libs/plugins/modifier.capitalize.php59
-rw-r--r--include/smarty/libs/plugins/modifier.date_format.php36
-rw-r--r--include/smarty/libs/plugins/modifier.debug_print_var.php75
-rw-r--r--include/smarty/libs/plugins/modifier.escape.php32
-rw-r--r--include/smarty/libs/plugins/modifier.regex_replace.php35
-rw-r--r--include/smarty/libs/plugins/modifier.replace.php23
-rw-r--r--include/smarty/libs/plugins/modifier.spacify.php18
-rw-r--r--include/smarty/libs/plugins/modifier.truncate.php33
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.cat.php15
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.count_characters.php11
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.count_paragraphs.php13
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.count_sentences.php13
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.count_words.php13
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.default.php14
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.escape.php75
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.from_charset.php9
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.indent.php13
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.lower.php14
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.noprint.php8
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.string_format.php11
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.strip.php12
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.strip_tags.php16
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.to_charset.php9
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.unescape.php9
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.upper.php19
-rw-r--r--include/smarty/libs/plugins/modifiercompiler.wordwrap.php31
-rw-r--r--include/smarty/libs/plugins/outputfilter.trimwhitespace.php38
-rw-r--r--include/smarty/libs/plugins/shared.escape_special_chars.php26
-rw-r--r--include/smarty/libs/plugins/shared.literal_compiler_param.php8
-rw-r--r--include/smarty/libs/plugins/shared.make_timestamp.php19
-rw-r--r--include/smarty/libs/plugins/shared.mb_str_replace.php20
-rw-r--r--include/smarty/libs/plugins/shared.mb_unicode.php22
-rw-r--r--include/smarty/libs/plugins/shared.mb_wordwrap.php60
-rw-r--r--include/smarty/libs/plugins/variablefilter.htmlspecialchars.php10
-rw-r--r--include/smarty/libs/sysplugins/smarty_cacheresource.php450
-rw-r--r--include/smarty/libs/sysplugins/smarty_cacheresource_custom.php218
-rw-r--r--include/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php300
-rw-r--r--include/smarty/libs/sysplugins/smarty_config_source.php95
-rw-r--r--include/smarty/libs/sysplugins/smarty_data.php68
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php207
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_append.php23
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_assign.php82
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_block.php440
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_break.php40
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_call.php77
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_capture.php61
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_config_load.php73
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_continue.php39
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_debug.php22
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_eval.php26
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_extends.php213
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_for.php120
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_foreach.php354
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_function.php230
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_if.php247
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_include.php421
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_include_php.php49
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_insert.php59
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php27
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_nocache.php52
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php46
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php220
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php29
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php59
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php43
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php61
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_private_php.php209
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php136
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php84
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php44
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php175
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php26
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_section.php435
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php48
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php46
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compile_while.php78
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_compilebase.php62
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_config.php302
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php120
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_configfilelexer.php703
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_configfileparser.php973
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_data.php564
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_debug.php386
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_extension_clear.php126
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_extension_handler.php157
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_filter_handler.php70
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_function_call_handler.php55
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_get_include_path.php48
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php51
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php42
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_append.php74
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php50
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php36
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php43
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php37
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php40
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_clearassign.php44
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_clearcache.php43
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php124
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php41
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php32
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php111
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_configload.php182
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_createdata.php44
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php37
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php58
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php35
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php35
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php44
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php51
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_gettags.php62
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php114
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php77
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php111
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php49
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php39
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_registerclass.php46
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php42
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php43
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php72
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php88
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_registerobject.php71
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php50
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_registerresource.php44
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php70
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php41
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php38
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php42
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php40
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php42
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php40
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php41
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php40
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_nocache_insert.php32
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_parsetree.php375
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_parsetree_code.php42
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php88
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php42
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php69
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_parsetree_template.php128
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_parsetree_text.php40
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_resource_eval.php56
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_resource_extends.php188
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_resource_file.php155
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_resource_php.php102
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_resource_registered.php52
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_resource_stream.php83
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_resource_string.php57
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php67
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php94
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php73
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php47
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php180
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_hhvm.php30
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php233
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_subtemplate.php203
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php97
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php170
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php55
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_validatecompiled.php86
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_var.php33
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php (renamed from include/smarty/libs/sysplugins/smarty_internal_write_file.php)54
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php132
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_template.php700
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_templatebase.php903
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php994
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_templatelexer.php1506
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_templateparser.php5257
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_testinstall.php604
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_undefined.php48
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_utility.php830
-rw-r--r--include/smarty/libs/sysplugins/smarty_resource.php809
-rw-r--r--include/smarty/libs/sysplugins/smarty_resource_custom.php41
-rw-r--r--include/smarty/libs/sysplugins/smarty_resource_recompiled.php31
-rw-r--r--include/smarty/libs/sysplugins/smarty_resource_uncompiled.php57
-rw-r--r--include/smarty/libs/sysplugins/smarty_security.php560
-rw-r--r--include/smarty/libs/sysplugins/smarty_template_cached.php246
-rw-r--r--include/smarty/libs/sysplugins/smarty_template_compiled.php297
-rw-r--r--include/smarty/libs/sysplugins/smarty_template_config.php97
-rw-r--r--include/smarty/libs/sysplugins/smarty_template_resource_base.php155
-rw-r--r--include/smarty/libs/sysplugins/smarty_template_source.php267
-rw-r--r--include/smarty/libs/sysplugins/smarty_undefined_variable.php37
-rw-r--r--include/smarty/libs/sysplugins/smarty_variable.php47
-rw-r--r--include/smarty/libs/sysplugins/smartycompilerexception.php39
-rw-r--r--include/smarty/libs/sysplugins/smartyexception.php15
-rw-r--r--include/template.class.php4
-rw-r--r--include/user.inc.php8
-rw-r--r--include/ws_core.inc.php12
-rw-r--r--include/ws_functions.inc.php2
-rw-r--r--include/ws_functions/index.php2
-rw-r--r--include/ws_functions/pwg.categories.php94
-rw-r--r--include/ws_functions/pwg.extensions.php2
-rw-r--r--include/ws_functions/pwg.groups.php2
-rw-r--r--include/ws_functions/pwg.images.php37
-rw-r--r--include/ws_functions/pwg.permissions.php2
-rw-r--r--include/ws_functions/pwg.php4
-rw-r--r--include/ws_functions/pwg.tags.php2
-rw-r--r--include/ws_functions/pwg.users.php2
-rw-r--r--include/ws_protocols/index.php2
-rw-r--r--include/ws_protocols/json_encoder.php2
-rw-r--r--include/ws_protocols/php_encoder.php2
-rw-r--r--include/ws_protocols/rest_encoder.php4
-rw-r--r--include/ws_protocols/rest_handler.php2
-rw-r--r--include/ws_protocols/xmlrpc_encoder.php2
-rw-r--r--index.php2
-rw-r--r--install.php7
-rw-r--r--install/db/100-database.php2
-rw-r--r--install/db/101-database.php2
-rw-r--r--install/db/102-database.php2
-rw-r--r--install/db/103-database.php2
-rw-r--r--install/db/104-database.php2
-rw-r--r--install/db/105-database.php2
-rw-r--r--install/db/106-database.php2
-rw-r--r--install/db/107-database.php2
-rw-r--r--install/db/108-database.php2
-rw-r--r--install/db/109-database.php2
-rw-r--r--install/db/110-database.php2
-rw-r--r--install/db/111-database.php2
-rw-r--r--install/db/112-database.php2
-rw-r--r--install/db/113-database.php2
-rw-r--r--install/db/114-database.php2
-rw-r--r--install/db/115-database.php2
-rw-r--r--install/db/116-database.php2
-rw-r--r--install/db/117-database.php2
-rw-r--r--install/db/118-database.php2
-rw-r--r--install/db/119-database.php2
-rw-r--r--install/db/120-database.php2
-rw-r--r--install/db/121-database.php2
-rw-r--r--install/db/122-database.php2
-rw-r--r--install/db/123-database.php2
-rw-r--r--install/db/124-database.php2
-rw-r--r--install/db/125-database.php2
-rw-r--r--install/db/126-database.php2
-rw-r--r--install/db/127-database.php2
-rw-r--r--install/db/128-database.php2
-rw-r--r--install/db/129-database.php2
-rw-r--r--install/db/130-database.php2
-rw-r--r--install/db/131-database.php2
-rw-r--r--install/db/132-database.php2
-rw-r--r--install/db/133-database.php2
-rw-r--r--install/db/134-database.php2
-rw-r--r--install/db/135-database.php2
-rw-r--r--install/db/136-database.php2
-rw-r--r--install/db/137-database.php2
-rw-r--r--install/db/138-database.php2
-rw-r--r--install/db/139-database.php2
-rw-r--r--install/db/140-database.php2
-rw-r--r--install/db/141-database.php2
-rw-r--r--install/db/142-database.php2
-rw-r--r--install/db/143-database.php2
-rw-r--r--install/db/144-database.php2
-rw-r--r--install/db/145-database.php (renamed from plugins/LocalFilesEditor/index.php)28
-rw-r--r--install/db/146-database.php (renamed from plugins/LocalFilesEditor/maintain.inc.php)21
-rw-r--r--install/db/147-database.php (renamed from plugins/LocalFilesEditor/language/cs_CZ/index.php)30
-rw-r--r--install/db/148-database.php (renamed from plugins/LocalFilesEditor/language/ar_SA/index.php)23
-rw-r--r--install/db/61-database.php2
-rw-r--r--install/db/62-database.php2
-rw-r--r--install/db/63-database.php2
-rw-r--r--install/db/64-database.php2
-rw-r--r--install/db/65-database.php2
-rw-r--r--install/db/66-database.php2
-rw-r--r--install/db/67-database.php2
-rw-r--r--install/db/68-database.php2
-rw-r--r--install/db/69-database.php2
-rw-r--r--install/db/70-database.php2
-rw-r--r--install/db/71-database.php2
-rw-r--r--install/db/72-database.php2
-rw-r--r--install/db/73-database.php2
-rw-r--r--install/db/74-database.php2
-rw-r--r--install/db/75-database.php2
-rw-r--r--install/db/76-database.php2
-rw-r--r--install/db/77-database.php2
-rw-r--r--install/db/78-database.php2
-rw-r--r--install/db/79-database.php2
-rw-r--r--install/db/80-database.php2
-rw-r--r--install/db/81-database.php2
-rw-r--r--install/db/82-database.php2
-rw-r--r--install/db/83-database.php2
-rw-r--r--install/db/84-database.php2
-rw-r--r--install/db/85-database.php2
-rw-r--r--install/db/86-database.php2
-rw-r--r--install/db/87-database.php2
-rw-r--r--install/db/88-database.php2
-rw-r--r--install/db/89-database.php2
-rw-r--r--install/db/90-database.php2
-rw-r--r--install/db/91-database.php2
-rw-r--r--install/db/92-database.php2
-rw-r--r--install/db/93-database.php2
-rw-r--r--install/db/94-database.php2
-rw-r--r--install/db/95-database.php2
-rw-r--r--install/db/96-database.php2
-rw-r--r--install/db/97-database.php2
-rw-r--r--install/db/98-database.php2
-rw-r--r--install/db/99-database.php2
-rw-r--r--install/db/index.php2
-rw-r--r--install/hosting.php2
-rw-r--r--install/index.php2
-rw-r--r--install/php5_apache_configuration.php2
-rw-r--r--install/piwigo_structure-mysql.sql28
-rw-r--r--install/upgrade_1.3.0.php2
-rw-r--r--install/upgrade_1.3.1.php2
-rw-r--r--install/upgrade_1.4.0.php2
-rw-r--r--install/upgrade_1.5.0.php2
-rw-r--r--install/upgrade_1.6.0.php2
-rw-r--r--install/upgrade_1.6.2.php2
-rw-r--r--install/upgrade_1.7.0.php2
-rw-r--r--install/upgrade_2.0.0.php2
-rw-r--r--install/upgrade_2.1.0.php2
-rw-r--r--install/upgrade_2.2.0.php2
-rw-r--r--install/upgrade_2.3.0.php2
-rw-r--r--install/upgrade_2.4.0.php2
-rw-r--r--install/upgrade_2.5.0.php2
-rw-r--r--install/upgrade_2.6.0.php2
-rw-r--r--language/af_ZA/admin.lang.php2
-rw-r--r--language/af_ZA/common.lang.php2
-rw-r--r--language/af_ZA/index.php2
-rw-r--r--language/af_ZA/install.lang.php2
-rw-r--r--language/af_ZA/upgrade.lang.php2
-rw-r--r--language/ar_EG/common.lang.php2
-rw-r--r--language/ar_EG/index.php2
-rwxr-xr-xlanguage/ar_EG/install.lang.php2
-rw-r--r--language/ar_MA/common.lang.php2
-rw-r--r--language/ar_MA/index.php2
-rw-r--r--language/ar_SA/admin.lang.php2
-rw-r--r--language/ar_SA/common.lang.php2
-rw-r--r--language/ar_SA/index.php2
-rw-r--r--language/ar_SA/install.lang.php2
-rw-r--r--language/ar_SA/upgrade.lang.php2
-rw-r--r--language/az_AZ/common.lang.php2
-rw-r--r--language/bg_BG/admin.lang.php2
-rw-r--r--language/bg_BG/common.lang.php2
-rw-r--r--language/bg_BG/install.lang.php2
-rw-r--r--language/bg_BG/upgrade.lang.php2
-rw-r--r--language/bn_IN/common.lang.php2
-rwxr-xr-xlanguage/br_FR/admin.lang.php2
-rw-r--r--language/br_FR/common.lang.php2
-rwxr-xr-xlanguage/br_FR/install.lang.php2
-rwxr-xr-xlanguage/br_FR/upgrade.lang.php2
-rw-r--r--language/ca_ES/admin.lang.php2
-rw-r--r--language/ca_ES/common.lang.php2
-rw-r--r--language/ca_ES/install.lang.php2
-rw-r--r--language/ca_ES/upgrade.lang.php2
-rw-r--r--language/cs_CZ/admin.lang.php2
-rw-r--r--language/cs_CZ/common.lang.php2
-rw-r--r--language/cs_CZ/help/index.php2
-rw-r--r--language/cs_CZ/index.php2
-rw-r--r--language/cs_CZ/install.lang.php2
-rw-r--r--language/cs_CZ/upgrade.lang.php2
-rw-r--r--language/da_DK/admin.lang.php2
-rw-r--r--language/da_DK/common.lang.php2
-rw-r--r--language/da_DK/index.php2
-rw-r--r--language/da_DK/install.lang.php2
-rw-r--r--language/da_DK/upgrade.lang.php2
-rw-r--r--language/de_DE/admin.lang.php2
-rw-r--r--language/de_DE/common.lang.php2
-rw-r--r--language/de_DE/help/index.php2
-rw-r--r--language/de_DE/index.php2
-rw-r--r--language/de_DE/install.lang.php2
-rw-r--r--language/de_DE/upgrade.lang.php2
-rw-r--r--language/dv_MV/common.lang.php2
-rw-r--r--language/dv_MV/index.php2
-rw-r--r--language/el_GR/admin.lang.php2
-rw-r--r--language/el_GR/index.php2
-rw-r--r--language/el_GR/install.lang.php2
-rwxr-xr-xlanguage/el_GR/upgrade.lang.php2
-rw-r--r--language/en_GB/admin.lang.php2
-rw-r--r--language/en_GB/common.lang.php2
-rw-r--r--language/en_GB/index.php2
-rwxr-xr-xlanguage/en_GB/install.lang.php2
-rw-r--r--language/en_UK/admin.lang.php13
-rw-r--r--language/en_UK/common.lang.php3
-rw-r--r--language/en_UK/help/index.php2
-rw-r--r--language/en_UK/index.php2
-rw-r--r--language/en_UK/install.lang.php2
-rw-r--r--language/en_UK/upgrade.lang.php2
-rwxr-xr-xlanguage/en_US/admin.lang.php2
-rw-r--r--language/en_US/common.lang.php2
-rw-r--r--language/en_US/index.php2
-rw-r--r--language/eo_EO/admin.lang.php2
-rw-r--r--language/eo_EO/common.lang.php2
-rwxr-xr-xlanguage/eo_EO/install.lang.php2
-rwxr-xr-xlanguage/eo_EO/upgrade.lang.php2
-rw-r--r--language/es_AR/common.lang.php2
-rw-r--r--language/es_AR/index.php2
-rw-r--r--language/es_ES/admin.lang.php2
-rw-r--r--language/es_ES/common.lang.php2
-rw-r--r--language/es_ES/help/index.php2
-rw-r--r--language/es_ES/index.php2
-rw-r--r--language/es_ES/install.lang.php2
-rw-r--r--language/es_ES/upgrade.lang.php2
-rw-r--r--language/es_MX/common.lang.php2
-rwxr-xr-xlanguage/es_MX/install.lang.php2
-rw-r--r--language/et_EE/admin.lang.php2
-rw-r--r--language/et_EE/common.lang.php2
-rwxr-xr-xlanguage/et_EE/install.lang.php2
-rwxr-xr-xlanguage/et_EE/upgrade.lang.php2
-rw-r--r--language/eu_ES/common.lang.php2
-rw-r--r--language/fa_IR/admin.lang.php2
-rw-r--r--language/fa_IR/common.lang.php2
-rw-r--r--language/fa_IR/index.php2
-rw-r--r--language/fa_IR/install.lang.php2
-rw-r--r--language/fa_IR/upgrade.lang.php2
-rwxr-xr-xlanguage/fi_FI/admin.lang.php2
-rw-r--r--language/fi_FI/common.lang.php2
-rwxr-xr-xlanguage/fi_FI/install.lang.php2
-rwxr-xr-xlanguage/fi_FI/upgrade.lang.php2
-rw-r--r--language/fr_CA/admin.lang.php2
-rw-r--r--language/fr_CA/common.lang.php2
-rw-r--r--language/fr_CA/help/index.php2
-rw-r--r--language/fr_CA/index.php2
-rw-r--r--language/fr_CA/install.lang.php2
-rw-r--r--language/fr_CA/upgrade.lang.php2
-rw-r--r--language/fr_FR/admin.lang.php12
-rw-r--r--language/fr_FR/common.lang.php5
-rw-r--r--language/fr_FR/help/index.php2
-rw-r--r--language/fr_FR/index.php2
-rw-r--r--language/fr_FR/install.lang.php2
-rw-r--r--language/fr_FR/upgrade.lang.php2
-rw-r--r--language/ga_IE/common.lang.php2
-rwxr-xr-xlanguage/gl_ES/admin.lang.php2
-rw-r--r--language/gl_ES/common.lang.php2
-rwxr-xr-xlanguage/gl_ES/install.lang.php2
-rwxr-xr-xlanguage/gl_ES/upgrade.lang.php2
-rw-r--r--language/gu_IN/common.lang.php2
-rw-r--r--language/he_IL/admin.lang.php2
-rw-r--r--language/he_IL/common.lang.php2
-rw-r--r--language/he_IL/install.lang.php2
-rw-r--r--language/he_IL/upgrade.lang.php2
-rw-r--r--language/hr_HR/admin.lang.php2
-rw-r--r--language/hr_HR/common.lang.php2
-rw-r--r--language/hr_HR/help/index.php2
-rw-r--r--language/hr_HR/index.php2
-rw-r--r--language/hr_HR/install.lang.php2
-rw-r--r--language/hr_HR/upgrade.lang.php2
-rw-r--r--language/hu_HU/admin.lang.php2
-rw-r--r--language/hu_HU/common.lang.php2
-rw-r--r--language/hu_HU/help/index.php2
-rw-r--r--language/hu_HU/index.php2
-rw-r--r--language/hu_HU/install.lang.php2
-rw-r--r--language/hu_HU/upgrade.lang.php2
-rw-r--r--language/id_ID/common.lang.php2
-rw-r--r--language/id_ID/index.php2
-rw-r--r--language/index.php2
-rw-r--r--language/is_IS/common.lang.php2
-rw-r--r--language/is_IS/index.php2
-rw-r--r--language/it_IT/admin.lang.php2
-rw-r--r--language/it_IT/common.lang.php2
-rw-r--r--language/it_IT/help/index.php2
-rw-r--r--language/it_IT/index.php2
-rw-r--r--language/it_IT/install.lang.php2
-rw-r--r--language/it_IT/upgrade.lang.php2
-rw-r--r--language/ja_JP/admin.lang.php2
-rw-r--r--language/ja_JP/common.lang.php2
-rw-r--r--language/ja_JP/index.php2
-rw-r--r--language/ja_JP/install.lang.php2
-rw-r--r--language/ja_JP/upgrade.lang.php2
-rw-r--r--language/ka_GE/admin.lang.php2
-rw-r--r--language/ka_GE/common.lang.php2
-rw-r--r--language/ka_GE/index.php2
-rw-r--r--language/ka_GE/install.lang.php2
-rw-r--r--language/ka_GE/upgrade.lang.php2
-rw-r--r--language/km_KH/admin.lang.php2
-rw-r--r--language/km_KH/common.lang.php2
-rw-r--r--language/km_KH/index.php2
-rwxr-xr-xlanguage/km_KH/install.lang.php2
-rwxr-xr-xlanguage/km_KH/upgrade.lang.php2
-rwxr-xr-xlanguage/kn_IN/admin.lang.php2
-rw-r--r--language/kn_IN/common.lang.php2
-rwxr-xr-xlanguage/kn_IN/install.lang.php2
-rwxr-xr-xlanguage/kn_IN/upgrade.lang.php2
-rwxr-xr-xlanguage/ko_KR/admin.lang.php2
-rwxr-xr-xlanguage/ko_KR/install.lang.php2
-rwxr-xr-xlanguage/ko_KR/upgrade.lang.php2
-rw-r--r--language/kok_IN/common.lang.php2
-rw-r--r--language/lb_LU/common.lang.php2
-rwxr-xr-xlanguage/lt_LT/admin.lang.php2
-rw-r--r--language/lt_LT/common.lang.php2
-rwxr-xr-xlanguage/lt_LT/install.lang.php2
-rwxr-xr-xlanguage/lt_LT/upgrade.lang.php2
-rw-r--r--language/lv_LV/admin.lang.php2
-rw-r--r--language/lv_LV/common.lang.php2
-rw-r--r--language/lv_LV/index.php2
-rw-r--r--language/lv_LV/install.lang.php2
-rw-r--r--language/lv_LV/upgrade.lang.php2
-rw-r--r--language/mk_MK/admin.lang.php2
-rw-r--r--language/mk_MK/common.lang.php2
-rw-r--r--language/mk_MK/index.php2
-rwxr-xr-xlanguage/mk_MK/install.lang.php2
-rwxr-xr-xlanguage/mn_MN/admin.lang.php2
-rw-r--r--language/mn_MN/common.lang.php2
-rwxr-xr-xlanguage/mn_MN/install.lang.php2
-rwxr-xr-xlanguage/mn_MN/upgrade.lang.php2
-rw-r--r--language/ms_MY/common.lang.php2
-rw-r--r--language/nb_NO/admin.lang.php2
-rw-r--r--language/nb_NO/common.lang.php2
-rw-r--r--language/nb_NO/index.php2
-rw-r--r--language/nb_NO/install.lang.php2
-rw-r--r--language/nb_NO/upgrade.lang.php2
-rw-r--r--language/nl_NL/admin.lang.php2
-rw-r--r--language/nl_NL/common.lang.php2
-rw-r--r--language/nl_NL/help/index.php2
-rw-r--r--language/nl_NL/index.php2
-rw-r--r--language/nl_NL/install.lang.php2
-rw-r--r--language/nl_NL/upgrade.lang.php2
-rwxr-xr-xlanguage/nn_NO/admin.lang.php2
-rw-r--r--language/nn_NO/common.lang.php2
-rwxr-xr-xlanguage/nn_NO/install.lang.php2
-rwxr-xr-xlanguage/nn_NO/upgrade.lang.php2
-rw-r--r--language/pl_PL/admin.lang.php2
-rw-r--r--language/pl_PL/common.lang.php2
-rw-r--r--language/pl_PL/index.php2
-rw-r--r--language/pl_PL/install.lang.php2
-rw-r--r--language/pl_PL/upgrade.lang.php2
-rw-r--r--language/pt_BR/admin.lang.php2
-rw-r--r--language/pt_BR/common.lang.php2
-rw-r--r--language/pt_BR/index.php2
-rw-r--r--language/pt_BR/install.lang.php2
-rw-r--r--language/pt_BR/upgrade.lang.php2
-rw-r--r--language/pt_PT/admin.lang.php2
-rw-r--r--language/pt_PT/common.lang.php2
-rw-r--r--language/pt_PT/index.php2
-rw-r--r--language/pt_PT/install.lang.php2
-rw-r--r--language/pt_PT/upgrade.lang.php2
-rw-r--r--language/ro_RO/admin.lang.php2
-rw-r--r--language/ro_RO/common.lang.php2
-rw-r--r--language/ro_RO/index.php2
-rwxr-xr-xlanguage/ro_RO/install.lang.php2
-rwxr-xr-xlanguage/ro_RO/upgrade.lang.php2
-rw-r--r--language/ru_RU/admin.lang.php2
-rw-r--r--language/ru_RU/common.lang.php2
-rw-r--r--language/ru_RU/index.php2
-rw-r--r--language/ru_RU/install.lang.php2
-rw-r--r--language/ru_RU/upgrade.lang.php2
-rw-r--r--language/sh_RS/admin.lang.php2
-rw-r--r--language/sh_RS/common.lang.php2
-rw-r--r--language/sh_RS/help/index.php2
-rw-r--r--language/sh_RS/index.php2
-rw-r--r--language/sh_RS/install.lang.php2
-rw-r--r--language/sh_RS/upgrade.lang.php2
-rw-r--r--language/sk_SK/admin.lang.php2
-rw-r--r--language/sk_SK/common.lang.php2
-rw-r--r--language/sk_SK/help/index.php2
-rw-r--r--language/sk_SK/index.php2
-rw-r--r--language/sk_SK/install.lang.php2
-rw-r--r--language/sk_SK/upgrade.lang.php2
-rw-r--r--language/sl_SI/admin.lang.php2
-rw-r--r--language/sl_SI/common.lang.php2
-rwxr-xr-xlanguage/sl_SI/install.lang.php2
-rwxr-xr-xlanguage/sl_SI/upgrade.lang.php2
-rw-r--r--language/sr_RS/admin.lang.php2
-rw-r--r--language/sr_RS/common.lang.php2
-rw-r--r--language/sr_RS/index.php2
-rw-r--r--language/sr_RS/install.lang.php2
-rw-r--r--language/sr_RS/upgrade.lang.php2
-rw-r--r--language/sv_SE/admin.lang.php2
-rw-r--r--language/sv_SE/common.lang.php2
-rw-r--r--language/sv_SE/help/index.php2
-rw-r--r--language/sv_SE/install.lang.php2
-rw-r--r--language/sv_SE/upgrade.lang.php2
-rwxr-xr-xlanguage/ta_IN/admin.lang.php2
-rw-r--r--language/ta_IN/common.lang.php2
-rwxr-xr-xlanguage/ta_IN/install.lang.php2
-rwxr-xr-xlanguage/ta_IN/upgrade.lang.php2
-rw-r--r--language/th_TH/admin.lang.php2
-rw-r--r--language/th_TH/common.lang.php2
-rw-r--r--language/th_TH/install.lang.php2
-rw-r--r--language/th_TH/upgrade.lang.php2
-rw-r--r--language/tr_TR/admin.lang.php2
-rw-r--r--language/tr_TR/common.lang.php2
-rw-r--r--language/tr_TR/install.lang.php2
-rw-r--r--language/tr_TR/upgrade.lang.php2
-rw-r--r--language/uk_UA/admin.lang.php2
-rw-r--r--language/uk_UA/common.lang.php2
-rw-r--r--language/uk_UA/install.lang.php2
-rw-r--r--language/uk_UA/upgrade.lang.php2
-rw-r--r--language/vi_VN/admin.lang.php2
-rw-r--r--language/vi_VN/common.lang.php2
-rw-r--r--language/vi_VN/help/index.php2
-rw-r--r--language/vi_VN/install.lang.php2
-rw-r--r--language/vi_VN/upgrade.lang.php2
-rw-r--r--language/wo_SN/common.lang.php2
-rw-r--r--language/zh_CN/admin.lang.php2
-rw-r--r--language/zh_CN/common.lang.php2
-rw-r--r--language/zh_CN/install.lang.php2
-rw-r--r--language/zh_CN/upgrade.lang.php2
-rwxr-xr-xlanguage/zh_HK/admin.lang.php2
-rw-r--r--language/zh_HK/common.lang.php2
-rw-r--r--language/zh_HK/index.php2
-rwxr-xr-xlanguage/zh_HK/install.lang.php2
-rwxr-xr-xlanguage/zh_HK/upgrade.lang.php2
-rw-r--r--language/zh_TW/admin.lang.php2
-rw-r--r--language/zh_TW/common.lang.php2
-rw-r--r--language/zh_TW/install.lang.php2
-rw-r--r--language/zh_TW/upgrade.lang.php2
-rw-r--r--local/config/index.php2
-rw-r--r--local/css/index.php2
-rw-r--r--local/index.php2
-rw-r--r--local/language/index.php2
-rw-r--r--nbm.php2
-rw-r--r--notification.php2
-rw-r--r--password.php2
-rw-r--r--picture.php42
-rw-r--r--plugins/AdminTools/admin.php23
-rw-r--r--plugins/AdminTools/include/MultiView.class.php338
-rw-r--r--plugins/AdminTools/include/events.inc.php360
-rw-r--r--plugins/AdminTools/include/index.php7
-rw-r--r--plugins/AdminTools/index.php7
-rwxr-xr-xplugins/AdminTools/language/ar_SA/description.txt1
-rw-r--r--plugins/AdminTools/language/ar_SA/index.php7
-rwxr-xr-xplugins/AdminTools/language/ar_SA/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/bg_BG/description.txt1
-rw-r--r--plugins/AdminTools/language/bg_BG/index.php7
-rwxr-xr-xplugins/AdminTools/language/bg_BG/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/br_FR/description.txt1
-rw-r--r--plugins/AdminTools/language/br_FR/index.php7
-rwxr-xr-xplugins/AdminTools/language/br_FR/plugin.lang.php39
-rwxr-xr-xplugins/AdminTools/language/ca_ES/description.txt1
-rw-r--r--plugins/AdminTools/language/ca_ES/index.php7
-rwxr-xr-xplugins/AdminTools/language/ca_ES/plugin.lang.php39
-rw-r--r--plugins/AdminTools/language/cs_CZ/description.txt1
-rw-r--r--plugins/AdminTools/language/cs_CZ/index.php7
-rw-r--r--plugins/AdminTools/language/cs_CZ/plugin.lang.php20
-rwxr-xr-xplugins/AdminTools/language/da_DK/description.txt1
-rw-r--r--plugins/AdminTools/language/da_DK/index.php7
-rwxr-xr-xplugins/AdminTools/language/da_DK/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/de_DE/description.txt1
-rw-r--r--plugins/AdminTools/language/de_DE/index.php7
-rwxr-xr-xplugins/AdminTools/language/de_DE/plugin.lang.php39
-rwxr-xr-xplugins/AdminTools/language/el_GR/description.txt1
-rw-r--r--plugins/AdminTools/language/el_GR/index.php7
-rwxr-xr-xplugins/AdminTools/language/el_GR/plugin.lang.php40
-rw-r--r--plugins/AdminTools/language/en_UK/description.txt1
-rw-r--r--plugins/AdminTools/language/en_UK/index.php7
-rw-r--r--plugins/AdminTools/language/en_UK/plugin.lang.php21
-rw-r--r--plugins/AdminTools/language/en_US/index.php7
-rwxr-xr-xplugins/AdminTools/language/en_US/plugin.lang.php39
-rwxr-xr-xplugins/AdminTools/language/eo_EO/description.txt1
-rw-r--r--plugins/AdminTools/language/eo_EO/index.php7
-rwxr-xr-xplugins/AdminTools/language/eo_EO/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/es_ES/description.txt1
-rw-r--r--plugins/AdminTools/language/es_ES/index.php7
-rwxr-xr-xplugins/AdminTools/language/es_ES/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/et_EE/description.txt1
-rw-r--r--plugins/AdminTools/language/et_EE/index.php7
-rwxr-xr-xplugins/AdminTools/language/et_EE/plugin.lang.php39
-rwxr-xr-xplugins/AdminTools/language/fa_IR/description.txt1
-rw-r--r--plugins/AdminTools/language/fa_IR/index.php7
-rwxr-xr-xplugins/AdminTools/language/fa_IR/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/fi_FI/description.txt1
-rw-r--r--plugins/AdminTools/language/fi_FI/index.php7
-rwxr-xr-xplugins/AdminTools/language/fi_FI/plugin.lang.php40
-rw-r--r--plugins/AdminTools/language/fr_CA/description.txt1
-rw-r--r--plugins/AdminTools/language/fr_CA/index.php7
-rw-r--r--plugins/AdminTools/language/fr_CA/plugin.lang.php21
-rw-r--r--plugins/AdminTools/language/fr_FR/description.txt1
-rw-r--r--plugins/AdminTools/language/fr_FR/index.php7
-rw-r--r--plugins/AdminTools/language/fr_FR/plugin.lang.php21
-rwxr-xr-xplugins/AdminTools/language/gl_ES/description.txt1
-rw-r--r--plugins/AdminTools/language/gl_ES/index.php7
-rwxr-xr-xplugins/AdminTools/language/gl_ES/plugin.lang.php39
-rwxr-xr-xplugins/AdminTools/language/he_IL/description.txt1
-rw-r--r--plugins/AdminTools/language/he_IL/index.php7
-rwxr-xr-xplugins/AdminTools/language/he_IL/plugin.lang.php39
-rwxr-xr-xplugins/AdminTools/language/hu_HU/description.txt1
-rw-r--r--plugins/AdminTools/language/hu_HU/index.php7
-rwxr-xr-xplugins/AdminTools/language/hu_HU/plugin.lang.php39
-rw-r--r--plugins/AdminTools/language/index.php7
-rwxr-xr-xplugins/AdminTools/language/it_IT/description.txt1
-rw-r--r--plugins/AdminTools/language/it_IT/index.php7
-rwxr-xr-xplugins/AdminTools/language/it_IT/plugin.lang.php40
-rw-r--r--plugins/AdminTools/language/ja_JP/index.php7
-rwxr-xr-xplugins/AdminTools/language/ja_JP/plugin.lang.php31
-rwxr-xr-xplugins/AdminTools/language/km_KH/description.txt1
-rw-r--r--plugins/AdminTools/language/km_KH/index.php7
-rwxr-xr-xplugins/AdminTools/language/km_KH/plugin.lang.php39
-rwxr-xr-xplugins/AdminTools/language/lt_LT/description.txt1
-rw-r--r--plugins/AdminTools/language/lt_LT/index.php7
-rwxr-xr-xplugins/AdminTools/language/lt_LT/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/lv_LV/description.txt1
-rw-r--r--plugins/AdminTools/language/lv_LV/index.php7
-rwxr-xr-xplugins/AdminTools/language/lv_LV/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/mn_MN/description.txt1
-rw-r--r--plugins/AdminTools/language/mn_MN/index.php7
-rwxr-xr-xplugins/AdminTools/language/mn_MN/plugin.lang.php33
-rwxr-xr-xplugins/AdminTools/language/nb_NO/description.txt1
-rw-r--r--plugins/AdminTools/language/nb_NO/index.php7
-rwxr-xr-xplugins/AdminTools/language/nb_NO/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/nl_NL/description.txt1
-rw-r--r--plugins/AdminTools/language/nl_NL/index.php7
-rwxr-xr-xplugins/AdminTools/language/nl_NL/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/pl_PL/description.txt1
-rw-r--r--plugins/AdminTools/language/pl_PL/index.php7
-rwxr-xr-xplugins/AdminTools/language/pl_PL/plugin.lang.php39
-rwxr-xr-xplugins/AdminTools/language/pt_BR/description.txt1
-rw-r--r--plugins/AdminTools/language/pt_BR/index.php7
-rwxr-xr-xplugins/AdminTools/language/pt_BR/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/pt_PT/description.txt1
-rw-r--r--plugins/AdminTools/language/pt_PT/index.php7
-rwxr-xr-xplugins/AdminTools/language/pt_PT/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/ro_RO/description.txt1
-rw-r--r--plugins/AdminTools/language/ro_RO/index.php7
-rwxr-xr-xplugins/AdminTools/language/ro_RO/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/ru_RU/description.txt1
-rw-r--r--plugins/AdminTools/language/ru_RU/index.php7
-rwxr-xr-xplugins/AdminTools/language/ru_RU/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/sh_RS/description.txt1
-rw-r--r--plugins/AdminTools/language/sh_RS/index.php7
-rwxr-xr-xplugins/AdminTools/language/sh_RS/plugin.lang.php39
-rwxr-xr-xplugins/AdminTools/language/sk_SK/description.txt1
-rw-r--r--plugins/AdminTools/language/sk_SK/index.php7
-rwxr-xr-xplugins/AdminTools/language/sk_SK/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/sl_SI/description.txt1
-rw-r--r--plugins/AdminTools/language/sl_SI/index.php7
-rwxr-xr-xplugins/AdminTools/language/sl_SI/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/sr_RS/description.txt1
-rw-r--r--plugins/AdminTools/language/sr_RS/index.php7
-rwxr-xr-xplugins/AdminTools/language/sr_RS/plugin.lang.php39
-rwxr-xr-xplugins/AdminTools/language/sv_SE/description.txt1
-rw-r--r--plugins/AdminTools/language/sv_SE/index.php7
-rwxr-xr-xplugins/AdminTools/language/sv_SE/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/ta_IN/description.txt1
-rw-r--r--plugins/AdminTools/language/ta_IN/index.php7
-rwxr-xr-xplugins/AdminTools/language/ta_IN/plugin.lang.php24
-rwxr-xr-xplugins/AdminTools/language/tr_TR/description.txt1
-rw-r--r--plugins/AdminTools/language/tr_TR/index.php7
-rwxr-xr-xplugins/AdminTools/language/tr_TR/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/uk_UA/description.txt1
-rw-r--r--plugins/AdminTools/language/uk_UA/index.php7
-rwxr-xr-xplugins/AdminTools/language/uk_UA/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/vi_VN/description.txt2
-rw-r--r--plugins/AdminTools/language/vi_VN/index.php7
-rwxr-xr-xplugins/AdminTools/language/vi_VN/plugin.lang.php39
-rwxr-xr-xplugins/AdminTools/language/zh_CN/description.txt1
-rw-r--r--plugins/AdminTools/language/zh_CN/index.php7
-rwxr-xr-xplugins/AdminTools/language/zh_CN/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/zh_HK/description.txt1
-rw-r--r--plugins/AdminTools/language/zh_HK/index.php7
-rwxr-xr-xplugins/AdminTools/language/zh_HK/plugin.lang.php40
-rwxr-xr-xplugins/AdminTools/language/zh_TW/description.txt1
-rw-r--r--plugins/AdminTools/language/zh_TW/index.php7
-rwxr-xr-xplugins/AdminTools/language/zh_TW/plugin.lang.php40
-rw-r--r--plugins/AdminTools/main.inc.php63
-rw-r--r--plugins/AdminTools/maintain.class.php31
-rw-r--r--plugins/AdminTools/template/admin.tpl60
-rw-r--r--plugins/AdminTools/template/admin_controller.js118
-rw-r--r--plugins/AdminTools/template/admin_controller.tpl39
-rw-r--r--plugins/AdminTools/template/admin_style.css68
-rw-r--r--plugins/AdminTools/template/fontello/LICENSE.txt39
-rw-r--r--plugins/AdminTools/template/fontello/README.txt75
-rw-r--r--plugins/AdminTools/template/fontello/config.json40
-rw-r--r--plugins/AdminTools/template/fontello/css/animation.css85
-rw-r--r--plugins/AdminTools/template/fontello/css/fontello-ato-codes.css6
-rw-r--r--plugins/AdminTools/template/fontello/css/fontello-ato-embedded.css59
-rw-r--r--plugins/AdminTools/template/fontello/css/fontello-ato-ie7-codes.css6
-rw-r--r--plugins/AdminTools/template/fontello/css/fontello-ato-ie7.css17
-rw-r--r--plugins/AdminTools/template/fontello/css/fontello-ato.css57
-rw-r--r--plugins/AdminTools/template/fontello/demo.html275
-rw-r--r--plugins/AdminTools/template/fontello/font/fontello-ato.eotbin5248 -> 0 bytes
-rw-r--r--plugins/AdminTools/template/fontello/font/fontello-ato.svg16
-rw-r--r--plugins/AdminTools/template/fontello/font/fontello-ato.ttfbin5064 -> 0 bytes
-rw-r--r--plugins/AdminTools/template/fontello/font/fontello-ato.woffbin3148 -> 0 bytes
-rw-r--r--plugins/AdminTools/template/index.php7
-rw-r--r--plugins/AdminTools/template/mousetrap.min.js9
-rw-r--r--plugins/AdminTools/template/public_controller.js331
-rw-r--r--plugins/AdminTools/template/public_controller.tpl191
-rw-r--r--plugins/AdminTools/template/public_style.css251
-rw-r--r--plugins/LocalFilesEditor/admin.php151
-rw-r--r--plugins/LocalFilesEditor/codemirror/lib/codemirror.css53
-rw-r--r--plugins/LocalFilesEditor/codemirror/lib/codemirror.js1915
-rw-r--r--plugins/LocalFilesEditor/codemirror/lib/overlay.js51
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/clike/clike.css6
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/clike/clike.js181
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/clike/index.html101
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/css/css.css9
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/css/css.js124
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/css/index.html56
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/diff/diff.css3
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/diff/diff.js13
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/diff/index.html99
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/haskell/haskell.css25
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/haskell/haskell.js242
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/haskell/index.html59
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/htmlmixed/htmlmixed.js66
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/htmlmixed/index.html54
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/javascript/index.html78
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/javascript/javascript.css6
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/javascript/javascript.js348
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/php/index.html52
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/php/php.js83
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/stex/index.html96
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/stex/stex.css20
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/stex/stex.js167
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/xml/index.html42
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/xml/xml.css7
-rw-r--r--plugins/LocalFilesEditor/codemirror/mode/xml/xml.js206
-rw-r--r--plugins/LocalFilesEditor/include/css.inc.php150
-rw-r--r--plugins/LocalFilesEditor/include/functions.inc.php114
-rw-r--r--plugins/LocalFilesEditor/include/lang.inc.php69
-rw-r--r--plugins/LocalFilesEditor/include/localconf.inc.php26
-rw-r--r--plugins/LocalFilesEditor/include/plug.inc.php25
-rw-r--r--plugins/LocalFilesEditor/include/tpl.inc.php157
-rwxr-xr-xplugins/LocalFilesEditor/language/af_ZA/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/af_ZA/index.php7
-rwxr-xr-xplugins/LocalFilesEditor/language/af_ZA/plugin.lang.php52
-rw-r--r--plugins/LocalFilesEditor/language/ar_SA/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/ar_SA/plugin.lang.php53
-rwxr-xr-xplugins/LocalFilesEditor/language/bg_BG/description.txt2
-rw-r--r--plugins/LocalFilesEditor/language/bg_BG/index.php7
-rwxr-xr-xplugins/LocalFilesEditor/language/bg_BG/plugin.lang.php52
-rwxr-xr-xplugins/LocalFilesEditor/language/br_FR/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/br_FR/index.php7
-rwxr-xr-xplugins/LocalFilesEditor/language/br_FR/plugin.lang.php53
-rwxr-xr-xplugins/LocalFilesEditor/language/ca_ES/description.txt1
-rwxr-xr-xplugins/LocalFilesEditor/language/ca_ES/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/cs_CZ/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/cs_CZ/plugin.lang.php54
-rwxr-xr-xplugins/LocalFilesEditor/language/da_DK/description.txt1
-rwxr-xr-xplugins/LocalFilesEditor/language/da_DK/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/de_DE/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/de_DE/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/de_DE/plugin.lang.php53
-rwxr-xr-xplugins/LocalFilesEditor/language/el_GR/description.txt1
-rwxr-xr-xplugins/LocalFilesEditor/language/el_GR/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/en_UK/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/en_UK/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/en_UK/plugin.lang.php55
-rwxr-xr-xplugins/LocalFilesEditor/language/eo_EO/description.txt1
-rwxr-xr-xplugins/LocalFilesEditor/language/eo_EO/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/es_ES/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/es_ES/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/es_ES/plugin.lang.php54
-rwxr-xr-xplugins/LocalFilesEditor/language/et_EE/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/et_EE/index.php7
-rwxr-xr-xplugins/LocalFilesEditor/language/et_EE/plugin.lang.php53
-rwxr-xr-xplugins/LocalFilesEditor/language/fa_IR/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/fa_IR/index.php7
-rwxr-xr-xplugins/LocalFilesEditor/language/fa_IR/plugin.lang.php54
-rwxr-xr-xplugins/LocalFilesEditor/language/fi_FI/description.txt1
-rwxr-xr-xplugins/LocalFilesEditor/language/fi_FI/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/fr_CA/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/fr_CA/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/fr_CA/plugin.lang.php55
-rw-r--r--plugins/LocalFilesEditor/language/fr_FR/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/fr_FR/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/fr_FR/plugin.lang.php54
-rwxr-xr-xplugins/LocalFilesEditor/language/gl_ES/description.txt1
-rwxr-xr-xplugins/LocalFilesEditor/language/gl_ES/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/he_IL/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/he_IL/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/he_IL/plugin.lang.php54
-rw-r--r--plugins/LocalFilesEditor/language/hr_HR/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/hr_HR/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/hr_HR/plugin.lang.php52
-rw-r--r--plugins/LocalFilesEditor/language/hu_HU/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/hu_HU/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/hu_HU/plugin.lang.php54
-rw-r--r--plugins/LocalFilesEditor/language/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/it_IT/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/it_IT/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/it_IT/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/ja_JP/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/ja_JP/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/ja_JP/plugin.lang.php54
-rw-r--r--plugins/LocalFilesEditor/language/ka_GE/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/ka_GE/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/ka_GE/plugin.lang.php54
-rwxr-xr-xplugins/LocalFilesEditor/language/km_KH/plugin.lang.php25
-rwxr-xr-xplugins/LocalFilesEditor/language/kn_IN/description.txt1
-rwxr-xr-xplugins/LocalFilesEditor/language/kn_IN/plugin.lang.php52
-rwxr-xr-xplugins/LocalFilesEditor/language/lt_LT/description.txt1
-rwxr-xr-xplugins/LocalFilesEditor/language/lt_LT/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/lv_LV/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/lv_LV/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/lv_LV/plugin.lang.php54
-rwxr-xr-xplugins/LocalFilesEditor/language/mn_MN/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/mn_MN/index.php7
-rwxr-xr-xplugins/LocalFilesEditor/language/mn_MN/plugin.lang.php52
-rw-r--r--plugins/LocalFilesEditor/language/nb_NO/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/nb_NO/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/nb_NO/plugin.lang.php51
-rw-r--r--plugins/LocalFilesEditor/language/nl_NL/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/nl_NL/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/nl_NL/plugin.lang.php54
-rwxr-xr-xplugins/LocalFilesEditor/language/nn_NO/description.txt1
-rwxr-xr-xplugins/LocalFilesEditor/language/nn_NO/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/pl_PL/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/pl_PL/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/pl_PL/plugin.lang.php55
-rwxr-xr-xplugins/LocalFilesEditor/language/pt_BR/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/pt_BR/index.php7
-rwxr-xr-xplugins/LocalFilesEditor/language/pt_BR/plugin.lang.php52
-rw-r--r--plugins/LocalFilesEditor/language/pt_PT/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/pt_PT/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/pt_PT/plugin.lang.php54
-rwxr-xr-xplugins/LocalFilesEditor/language/ro_RO/description.txt1
-rwxr-xr-xplugins/LocalFilesEditor/language/ro_RO/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/ru_RU/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/ru_RU/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/ru_RU/plugin.lang.php53
-rwxr-xr-xplugins/LocalFilesEditor/language/sh_RS/description.txt1
-rwxr-xr-xplugins/LocalFilesEditor/language/sh_RS/plugin.lang.php52
-rw-r--r--plugins/LocalFilesEditor/language/sk_SK/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/sk_SK/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/sk_SK/plugin.lang.php54
-rwxr-xr-xplugins/LocalFilesEditor/language/sl_SI/description.txt1
-rwxr-xr-xplugins/LocalFilesEditor/language/sl_SI/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/sr_RS/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/sr_RS/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/sr_RS/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/sv_SE/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/sv_SE/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/sv_SE/plugin.lang.php53
-rwxr-xr-xplugins/LocalFilesEditor/language/ta_IN/description.txt3
-rwxr-xr-xplugins/LocalFilesEditor/language/ta_IN/plugin.lang.php55
-rw-r--r--plugins/LocalFilesEditor/language/th_TH/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/th_TH/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/th_TH/plugin.lang.php54
-rwxr-xr-xplugins/LocalFilesEditor/language/tr_TR/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/tr_TR/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/tr_TR/plugin.lang.php55
-rw-r--r--plugins/LocalFilesEditor/language/uk_UA/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/uk_UA/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/vi_VN/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/vi_VN/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/vi_VN/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/zh_CN/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/zh_CN/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/zh_CN/plugin.lang.php53
-rwxr-xr-xplugins/LocalFilesEditor/language/zh_HK/description.txt1
-rwxr-xr-xplugins/LocalFilesEditor/language/zh_HK/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/language/zh_TW/description.txt1
-rw-r--r--plugins/LocalFilesEditor/language/zh_TW/index.php30
-rw-r--r--plugins/LocalFilesEditor/language/zh_TW/plugin.lang.php53
-rw-r--r--plugins/LocalFilesEditor/main.inc.php70
-rw-r--r--plugins/LocalFilesEditor/show_default.php59
-rw-r--r--plugins/LocalFilesEditor/template/admin.tpl113
-rw-r--r--plugins/LocalFilesEditor/template/locfiledit.css32
-rw-r--r--plugins/LocalFilesEditor/template/show_default.tpl37
-rw-r--r--plugins/TakeATour/admin.php27
-rw-r--r--plugins/TakeATour/css/admin.css13
-rw-r--r--plugins/TakeATour/css/bootstrap-tour-standalone.css728
-rw-r--r--plugins/TakeATour/css/clear.css3
-rw-r--r--plugins/TakeATour/css/roma.css109
-rw-r--r--plugins/TakeATour/js/custom-bootstrap-tour-standalone.js1388
-rw-r--r--plugins/TakeATour/js/custom.patch43
-rwxr-xr-xplugins/TakeATour/language/bg_BG/description.txt1
-rw-r--r--plugins/TakeATour/language/bg_BG/index.php7
-rwxr-xr-xplugins/TakeATour/language/bg_BG/plugin.lang.php36
-rwxr-xr-xplugins/TakeATour/language/bg_BG/tour_2_7_0.lang.php45
-rwxr-xr-xplugins/TakeATour/language/ca_ES/description.txt1
-rw-r--r--plugins/TakeATour/language/ca_ES/index.php7
-rwxr-xr-xplugins/TakeATour/language/ca_ES/plugin.lang.php36
-rwxr-xr-xplugins/TakeATour/language/ca_ES/tour_2_7_0.lang.php44
-rw-r--r--plugins/TakeATour/language/ca_ES/tour_first_contact.lang.php57
-rw-r--r--plugins/TakeATour/language/ca_ES/tour_privacy.lang.php17
-rw-r--r--plugins/TakeATour/language/cs_CZ/description.txt1
-rw-r--r--plugins/TakeATour/language/cs_CZ/index.php33
-rw-r--r--plugins/TakeATour/language/cs_CZ/plugin.lang.php15
-rw-r--r--plugins/TakeATour/language/cs_CZ/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/cs_CZ/tour_first_contact.lang.php76
-rwxr-xr-xplugins/TakeATour/language/cs_CZ/tour_privacy.lang.php66
-rwxr-xr-xplugins/TakeATour/language/da_DK/description.txt1
-rw-r--r--plugins/TakeATour/language/da_DK/index.php7
-rwxr-xr-xplugins/TakeATour/language/da_DK/plugin.lang.php39
-rw-r--r--plugins/TakeATour/language/da_DK/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/da_DK/tour_first_contact.lang.php76
-rw-r--r--plugins/TakeATour/language/da_DK/tour_privacy.lang.php49
-rwxr-xr-xplugins/TakeATour/language/de_DE/description.txt1
-rw-r--r--plugins/TakeATour/language/de_DE/index.php7
-rwxr-xr-xplugins/TakeATour/language/de_DE/plugin.lang.php39
-rw-r--r--plugins/TakeATour/language/de_DE/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/de_DE/tour_first_contact.lang.php76
-rw-r--r--plugins/TakeATour/language/de_DE/tour_privacy.lang.php46
-rwxr-xr-xplugins/TakeATour/language/el_GR/description.txt1
-rw-r--r--plugins/TakeATour/language/el_GR/index.php7
-rwxr-xr-xplugins/TakeATour/language/el_GR/plugin.lang.php40
-rw-r--r--plugins/TakeATour/language/el_GR/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/el_GR/tour_first_contact.lang.php77
-rw-r--r--plugins/TakeATour/language/el_GR/tour_privacy.lang.php46
-rw-r--r--plugins/TakeATour/language/en_UK/description.txt1
-rw-r--r--plugins/TakeATour/language/en_UK/index.php33
-rw-r--r--plugins/TakeATour/language/en_UK/plugin.lang.php15
-rw-r--r--plugins/TakeATour/language/en_UK/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/en_UK/tour_first_contact.lang.php76
-rw-r--r--plugins/TakeATour/language/en_UK/tour_privacy.lang.php49
-rwxr-xr-xplugins/TakeATour/language/eo_EO/description.txt1
-rw-r--r--plugins/TakeATour/language/eo_EO/index.php7
-rwxr-xr-xplugins/TakeATour/language/eo_EO/plugin.lang.php37
-rw-r--r--plugins/TakeATour/language/eo_EO/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/eo_EO/tour_first_contact.lang.php66
-rwxr-xr-xplugins/TakeATour/language/es_ES/description.txt1
-rw-r--r--plugins/TakeATour/language/es_ES/index.php7
-rwxr-xr-xplugins/TakeATour/language/es_ES/plugin.lang.php40
-rw-r--r--plugins/TakeATour/language/es_ES/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/es_ES/tour_first_contact.lang.php77
-rw-r--r--plugins/TakeATour/language/es_ES/tour_privacy.lang.php46
-rwxr-xr-xplugins/TakeATour/language/et_EE/description.txt1
-rw-r--r--plugins/TakeATour/language/et_EE/index.php7
-rwxr-xr-xplugins/TakeATour/language/et_EE/plugin.lang.php36
-rwxr-xr-xplugins/TakeATour/language/et_EE/tour_2_7_0.lang.php41
-rwxr-xr-xplugins/TakeATour/language/fi_FI/description.txt1
-rw-r--r--plugins/TakeATour/language/fi_FI/index.php7
-rwxr-xr-xplugins/TakeATour/language/fi_FI/plugin.lang.php36
-rwxr-xr-xplugins/TakeATour/language/fi_FI/tour_2_7_0.lang.php44
-rwxr-xr-xplugins/TakeATour/language/fi_FI/tour_first_contact.lang.php28
-rw-r--r--plugins/TakeATour/language/fr_CA/index.php33
-rw-r--r--plugins/TakeATour/language/fr_CA/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/fr_FR/description.txt1
-rw-r--r--plugins/TakeATour/language/fr_FR/index.php33
-rw-r--r--plugins/TakeATour/language/fr_FR/plugin.lang.php18
-rw-r--r--plugins/TakeATour/language/fr_FR/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/fr_FR/tour_first_contact.lang.php76
-rw-r--r--plugins/TakeATour/language/fr_FR/tour_privacy.lang.php46
-rwxr-xr-xplugins/TakeATour/language/he_IL/plugin.lang.php34
-rw-r--r--plugins/TakeATour/language/hu_HU/index.php7
-rwxr-xr-xplugins/TakeATour/language/hu_HU/plugin.lang.php29
-rw-r--r--plugins/TakeATour/language/index.php7
-rwxr-xr-xplugins/TakeATour/language/it_IT/description.txt1
-rw-r--r--plugins/TakeATour/language/it_IT/index.php7
-rwxr-xr-xplugins/TakeATour/language/it_IT/plugin.lang.php39
-rw-r--r--plugins/TakeATour/language/it_IT/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/it_IT/tour_first_contact.lang.php76
-rw-r--r--plugins/TakeATour/language/it_IT/tour_privacy.lang.php46
-rwxr-xr-xplugins/TakeATour/language/lv_LV/description.txt1
-rw-r--r--plugins/TakeATour/language/lv_LV/index.php7
-rwxr-xr-xplugins/TakeATour/language/lv_LV/plugin.lang.php39
-rw-r--r--plugins/TakeATour/language/lv_LV/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/lv_LV/tour_first_contact.lang.php76
-rw-r--r--plugins/TakeATour/language/lv_LV/tour_privacy.lang.php46
-rwxr-xr-xplugins/TakeATour/language/nb_NO/description.txt1
-rw-r--r--plugins/TakeATour/language/nb_NO/index.php7
-rwxr-xr-xplugins/TakeATour/language/nb_NO/plugin.lang.php36
-rwxr-xr-xplugins/TakeATour/language/nb_NO/tour_2_7_0.lang.php44
-rwxr-xr-xplugins/TakeATour/language/nb_NO/tour_first_contact.lang.php80
-rwxr-xr-xplugins/TakeATour/language/nb_NO/tour_privacy.lang.php66
-rwxr-xr-xplugins/TakeATour/language/nl_NL/description.txt1
-rw-r--r--plugins/TakeATour/language/nl_NL/index.php7
-rwxr-xr-xplugins/TakeATour/language/nl_NL/plugin.lang.php39
-rw-r--r--plugins/TakeATour/language/nl_NL/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/nl_NL/tour_first_contact.lang.php74
-rw-r--r--plugins/TakeATour/language/nl_NL/tour_privacy.lang.php46
-rwxr-xr-xplugins/TakeATour/language/pl_PL/description.txt1
-rw-r--r--plugins/TakeATour/language/pl_PL/index.php7
-rwxr-xr-xplugins/TakeATour/language/pl_PL/plugin.lang.php38
-rw-r--r--plugins/TakeATour/language/pl_PL/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/pl_PL/tour_first_contact.lang.php56
-rw-r--r--plugins/TakeATour/language/pl_PL/tour_privacy.lang.php3
-rwxr-xr-xplugins/TakeATour/language/pt_BR/description.txt1
-rw-r--r--plugins/TakeATour/language/pt_BR/index.php7
-rwxr-xr-xplugins/TakeATour/language/pt_BR/plugin.lang.php39
-rw-r--r--plugins/TakeATour/language/pt_BR/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/pt_BR/tour_first_contact.lang.php76
-rw-r--r--plugins/TakeATour/language/pt_BR/tour_privacy.lang.php46
-rwxr-xr-xplugins/TakeATour/language/pt_PT/description.txt1
-rw-r--r--plugins/TakeATour/language/pt_PT/index.php7
-rwxr-xr-xplugins/TakeATour/language/pt_PT/plugin.lang.php38
-rw-r--r--plugins/TakeATour/language/pt_PT/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/pt_PT/tour_first_contact.lang.php76
-rwxr-xr-xplugins/TakeATour/language/pt_PT/tour_privacy.lang.php35
-rw-r--r--plugins/TakeATour/language/ro_RO/index.php7
-rwxr-xr-xplugins/TakeATour/language/ro_RO/plugin.lang.php37
-rw-r--r--plugins/TakeATour/language/ro_RO/tour_2_7_0.lang.php12
-rw-r--r--plugins/TakeATour/language/ro_RO/tour_first_contact.lang.php22
-rw-r--r--plugins/TakeATour/language/ro_RO/tour_privacy.lang.php18
-rwxr-xr-xplugins/TakeATour/language/ru_RU/description.txt2
-rw-r--r--plugins/TakeATour/language/ru_RU/index.php7
-rwxr-xr-xplugins/TakeATour/language/ru_RU/plugin.lang.php18
-rw-r--r--plugins/TakeATour/language/ru_RU/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/ru_RU/tour_first_contact.lang.php76
-rw-r--r--plugins/TakeATour/language/ru_RU/tour_privacy.lang.php47
-rwxr-xr-xplugins/TakeATour/language/sk_SK/description.txt1
-rw-r--r--plugins/TakeATour/language/sk_SK/index.php7
-rwxr-xr-xplugins/TakeATour/language/sk_SK/plugin.lang.php36
-rwxr-xr-xplugins/TakeATour/language/sk_SK/tour_2_7_0.lang.php44
-rwxr-xr-xplugins/TakeATour/language/sk_SK/tour_first_contact.lang.php59
-rwxr-xr-xplugins/TakeATour/language/sl_SI/description.txt1
-rw-r--r--plugins/TakeATour/language/sl_SI/index.php7
-rwxr-xr-xplugins/TakeATour/language/sl_SI/plugin.lang.php39
-rw-r--r--plugins/TakeATour/language/sl_SI/tour_2_7_0.lang.php24
-rw-r--r--plugins/TakeATour/language/sl_SI/tour_first_contact.lang.php18
-rwxr-xr-xplugins/TakeATour/language/sr_RS/description.txt1
-rw-r--r--plugins/TakeATour/language/sr_RS/index.php7
-rwxr-xr-xplugins/TakeATour/language/sr_RS/plugin.lang.php36
-rwxr-xr-xplugins/TakeATour/language/sr_RS/tour_2_7_0.lang.php44
-rwxr-xr-xplugins/TakeATour/language/sv_SE/description.txt2
-rw-r--r--plugins/TakeATour/language/sv_SE/index.php7
-rwxr-xr-xplugins/TakeATour/language/sv_SE/plugin.lang.php37
-rw-r--r--plugins/TakeATour/language/sv_SE/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/sv_SE/tour_first_contact.lang.php19
-rwxr-xr-xplugins/TakeATour/language/tr_TR/description.txt1
-rw-r--r--plugins/TakeATour/language/tr_TR/index.php7
-rwxr-xr-xplugins/TakeATour/language/tr_TR/plugin.lang.php37
-rwxr-xr-xplugins/TakeATour/language/tr_TR/tour_2_7_0.lang.php44
-rwxr-xr-xplugins/TakeATour/language/tr_TR/tour_first_contact.lang.php46
-rwxr-xr-xplugins/TakeATour/language/tr_TR/tour_privacy.lang.php41
-rwxr-xr-xplugins/TakeATour/language/uk_UA/description.txt1
-rw-r--r--plugins/TakeATour/language/uk_UA/index.php7
-rwxr-xr-xplugins/TakeATour/language/uk_UA/plugin.lang.php38
-rw-r--r--plugins/TakeATour/language/uk_UA/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/uk_UA/tour_first_contact.lang.php76
-rwxr-xr-xplugins/TakeATour/language/uk_UA/tour_privacy.lang.php66
-rwxr-xr-xplugins/TakeATour/language/vi_VN/description.txt3
-rw-r--r--plugins/TakeATour/language/vi_VN/index.php7
-rwxr-xr-xplugins/TakeATour/language/vi_VN/plugin.lang.php37
-rw-r--r--plugins/TakeATour/language/vi_VN/tour_2_7_0.lang.php23
-rwxr-xr-xplugins/TakeATour/language/vi_VN/tour_first_contact.lang.php81
-rwxr-xr-xplugins/TakeATour/language/zh_CN/description.txt1
-rw-r--r--plugins/TakeATour/language/zh_CN/index.php7
-rwxr-xr-xplugins/TakeATour/language/zh_CN/plugin.lang.php39
-rw-r--r--plugins/TakeATour/language/zh_CN/tour_2_7_0.lang.php23
-rw-r--r--plugins/TakeATour/language/zh_CN/tour_first_contact.lang.php76
-rw-r--r--plugins/TakeATour/language/zh_CN/tour_privacy.lang.php46
-rw-r--r--plugins/TakeATour/language/zh_TW/index.php7
-rwxr-xr-xplugins/TakeATour/language/zh_TW/tour_2_7_0.lang.php26
-rw-r--r--plugins/TakeATour/main.inc.php122
-rw-r--r--plugins/TakeATour/tours/2_7_0/config.inc.php42
-rw-r--r--plugins/TakeATour/tours/2_7_0/tour.tpl98
-rw-r--r--plugins/TakeATour/tours/first_contact/config.inc.php175
-rw-r--r--plugins/TakeATour/tours/first_contact/tour.tpl310
-rw-r--r--plugins/TakeATour/tours/first_contact/tour.tpl.bak347
-rw-r--r--plugins/TakeATour/tours/privacy/config.inc.php71
-rw-r--r--plugins/TakeATour/tours/privacy/tour.tpl195
-rw-r--r--plugins/TakeATour/tours/scaling/scaling.tpl89
-rw-r--r--plugins/TakeATour/tpl/admin.tpl39
-rw-r--r--plugins/TakeATour/tpl/js_css.tpl4
-rw-r--r--plugins/index.php2
-rw-r--r--plugins/language_switch/flag_sprite.jpgbin120557 -> 0 bytes
-rw-r--r--plugins/language_switch/flag_sprite_original.pngbin147350 -> 0 bytes
-rw-r--r--plugins/language_switch/flags.tpl33
-rw-r--r--plugins/language_switch/index.php30
-rwxr-xr-xplugins/language_switch/language/af_ZA/description.txt1
-rw-r--r--plugins/language_switch/language/af_ZA/index.php7
-rw-r--r--plugins/language_switch/language/ar_SA/description.txt1
-rw-r--r--plugins/language_switch/language/ar_SA/index.php30
-rwxr-xr-xplugins/language_switch/language/bg_BG/description.txt2
-rw-r--r--plugins/language_switch/language/bg_BG/index.php7
-rwxr-xr-xplugins/language_switch/language/br_FR/description.txt1
-rwxr-xr-xplugins/language_switch/language/ca_ES/description.txt1
-rw-r--r--plugins/language_switch/language/cs_CZ/description.txt1
-rw-r--r--plugins/language_switch/language/cs_CZ/index.php30
-rwxr-xr-xplugins/language_switch/language/da_DK/description.txt1
-rw-r--r--plugins/language_switch/language/de_DE/description.txt1
-rw-r--r--plugins/language_switch/language/de_DE/index.php30
-rwxr-xr-xplugins/language_switch/language/el_GR/description.txt1
-rw-r--r--plugins/language_switch/language/en_UK/description.txt1
-rw-r--r--plugins/language_switch/language/en_UK/index.php30
-rwxr-xr-xplugins/language_switch/language/eo_EO/description.txt1
-rw-r--r--plugins/language_switch/language/es_ES/description.txt1
-rw-r--r--plugins/language_switch/language/es_ES/index.php30
-rwxr-xr-xplugins/language_switch/language/et_EE/description.txt1
-rw-r--r--plugins/language_switch/language/et_EE/index.php7
-rwxr-xr-xplugins/language_switch/language/fa_IR/description.txt1
-rw-r--r--plugins/language_switch/language/fa_IR/index.php7
-rwxr-xr-xplugins/language_switch/language/fi_FI/description.txt1
-rw-r--r--plugins/language_switch/language/fr_CA/description.txt1
-rw-r--r--plugins/language_switch/language/fr_CA/index.php30
-rw-r--r--plugins/language_switch/language/fr_FR/description.txt1
-rw-r--r--plugins/language_switch/language/fr_FR/index.php30
-rwxr-xr-xplugins/language_switch/language/gl_ES/description.txt1
-rw-r--r--plugins/language_switch/language/he_IL/description.txt1
-rw-r--r--plugins/language_switch/language/he_IL/index.php30
-rw-r--r--plugins/language_switch/language/hr_HR/description.txt1
-rw-r--r--plugins/language_switch/language/hr_HR/index.php30
-rw-r--r--plugins/language_switch/language/hu_HU/description.txt1
-rw-r--r--plugins/language_switch/language/hu_HU/index.php30
-rw-r--r--plugins/language_switch/language/index.php30
-rw-r--r--plugins/language_switch/language/it_IT/description.txt1
-rw-r--r--plugins/language_switch/language/it_IT/index.php30
-rw-r--r--plugins/language_switch/language/ja_JP/description.txt1
-rw-r--r--plugins/language_switch/language/ja_JP/index.php30
-rw-r--r--plugins/language_switch/language/ka_GE/description.txt1
-rw-r--r--plugins/language_switch/language/ka_GE/index.php30
-rwxr-xr-xplugins/language_switch/language/km_KH/description.txt1
-rw-r--r--plugins/language_switch/language/km_KH/index.php7
-rwxr-xr-xplugins/language_switch/language/kn_IN/description.txt1
-rwxr-xr-xplugins/language_switch/language/lt_LT/description.txt1
-rw-r--r--plugins/language_switch/language/lv_LV/description.txt1
-rw-r--r--plugins/language_switch/language/lv_LV/index.php30
-rwxr-xr-xplugins/language_switch/language/mn_MN/description.txt1
-rw-r--r--plugins/language_switch/language/mn_MN/index.php7
-rw-r--r--plugins/language_switch/language/nb_NO/description.txt1
-rw-r--r--plugins/language_switch/language/nb_NO/index.php30
-rw-r--r--plugins/language_switch/language/nl_NL/description.txt1
-rw-r--r--plugins/language_switch/language/nl_NL/index.php30
-rwxr-xr-xplugins/language_switch/language/nn_NO/description.txt1
-rw-r--r--plugins/language_switch/language/pl_PL/description.txt1
-rw-r--r--plugins/language_switch/language/pl_PL/index.php30
-rwxr-xr-xplugins/language_switch/language/pt_BR/description.txt1
-rw-r--r--plugins/language_switch/language/pt_BR/index.php7
-rw-r--r--plugins/language_switch/language/pt_PT/description.txt1
-rw-r--r--plugins/language_switch/language/pt_PT/index.php30
-rwxr-xr-xplugins/language_switch/language/ro_RO/description.txt1
-rw-r--r--plugins/language_switch/language/ru_RU/description.txt1
-rw-r--r--plugins/language_switch/language/ru_RU/index.php30
-rwxr-xr-xplugins/language_switch/language/sh_RS/description.txt1
-rw-r--r--plugins/language_switch/language/sk_SK/description.txt1
-rw-r--r--plugins/language_switch/language/sk_SK/index.php30
-rwxr-xr-xplugins/language_switch/language/sl_SI/description.txt1
-rw-r--r--plugins/language_switch/language/sr_RS/description.txt1
-rw-r--r--plugins/language_switch/language/sr_RS/index.php30
-rw-r--r--plugins/language_switch/language/sv_SE/description.txt1
-rw-r--r--plugins/language_switch/language/sv_SE/index.php30
-rwxr-xr-xplugins/language_switch/language/ta_IN/description.txt1
-rw-r--r--plugins/language_switch/language/th_TH/description.txt1
-rw-r--r--plugins/language_switch/language/th_TH/index.php30
-rw-r--r--plugins/language_switch/language/tr_TR/description.txt1
-rw-r--r--plugins/language_switch/language/tr_TR/index.php30
-rw-r--r--plugins/language_switch/language/uk_UA/description.txt1
-rw-r--r--plugins/language_switch/language/vi_VN/description.txt1
-rw-r--r--plugins/language_switch/language/vi_VN/index.php30
-rw-r--r--plugins/language_switch/language/zh_CN/description.txt1
-rw-r--r--plugins/language_switch/language/zh_CN/index.php30
-rwxr-xr-xplugins/language_switch/language/zh_HK/description.txt1
-rw-r--r--plugins/language_switch/language/zh_TW/description.txt1
-rw-r--r--plugins/language_switch/language/zh_TW/index.php30
-rw-r--r--plugins/language_switch/language_switch.css275
-rw-r--r--plugins/language_switch/language_switch.inc.php140
-rw-r--r--plugins/language_switch/main.inc.php42
-rw-r--r--plugins/language_switch/style.css29
-rw-r--r--popuphelp.php2
-rw-r--r--profile.php2
-rw-r--r--qsearch.php2
-rw-r--r--random.php2
-rw-r--r--register.php2
-rw-r--r--search.php6
-rw-r--r--search_rules.php2
-rw-r--r--tags.php2
-rw-r--r--template-extension/index.php2
-rw-r--r--template-extension/yoga/index.php2
-rw-r--r--template-extension/yoga/local/index.php2
-rw-r--r--themes/Sylvia/icon/index.php2
-rw-r--r--themes/Sylvia/icon/mimetypes/index.php2
-rw-r--r--themes/Sylvia/index.php2
-rw-r--r--themes/clear/index.php2
-rw-r--r--themes/dark/images/index.php2
-rw-r--r--themes/dark/index.php2
-rw-r--r--themes/default/icon/index.php2
-rw-r--r--themes/default/icon/mimetypes/index.php2
-rw-r--r--themes/default/images/index.php2
-rw-r--r--themes/default/index.php2
-rw-r--r--themes/default/js/jquery.js195
-rw-r--r--themes/default/js/jquery.min.js9
-rw-r--r--themes/default/template/mail/index.php2
-rw-r--r--themes/default/template/mail/text/html/cat_group_info.tpl2
-rw-r--r--themes/default/template/mail/text/html/global-mail-css.tpl2
-rw-r--r--themes/default/template/mail/text/html/index.php2
-rw-r--r--themes/default/template/mail/text/html/mail-css-clear.tpl2
-rw-r--r--themes/default/template/mail/text/html/mail-css-dark.tpl2
-rw-r--r--themes/default/template/mail/text/index.php2
-rw-r--r--themes/default/template/mail/text/plain/index.php2
-rw-r--r--themes/default/template/picture.tpl21
-rw-r--r--themes/default/template/slideshow.tpl2
-rw-r--r--themes/default/theme.css6
-rw-r--r--themes/elegant/admin/index.php2
-rw-r--r--themes/elegant/index.php2
-rwxr-xr-xthemes/elegant/language/ar_SA/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/bg_BG/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/br_FR/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/ca_ES/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/da_DK/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/de_DE/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/el_GR/theme.lang.php2
-rw-r--r--themes/elegant/language/en_UK/index.php2
-rwxr-xr-xthemes/elegant/language/eo_EO/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/es_ES/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/et_EE/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/fa_IR/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/fi_FI/theme.lang.php2
-rw-r--r--themes/elegant/language/fr_CA/index.php2
-rw-r--r--themes/elegant/language/fr_FR/index.php2
-rwxr-xr-xthemes/elegant/language/gl_ES/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/he_IL/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/hu_HU/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/it_IT/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/ja_JP/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/km_KH/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/kn_IN/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/ko_KR/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/lt_LT/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/lv_LV/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/mn_MN/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/nb_NO/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/nl_NL/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/nn_NO/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/pl_PL/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/pt_BR/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/pt_PT/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/ro_RO/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/ru_RU/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/sk_SK/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/sl_SI/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/sr_RS/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/sv_SE/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/ta_IN/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/th_TH/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/tr_TR/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/uk_UA/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/vi_VN/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/zh_CN/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/zh_HK/theme.lang.php2
-rwxr-xr-xthemes/elegant/language/zh_TW/theme.lang.php2
-rw-r--r--themes/index.php2
-rw-r--r--themes/smartpocket/admin/index.php2
-rwxr-xr-xthemes/smartpocket/language/ar_SA/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/bg_BG/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/br_FR/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/ca_ES/theme.lang.php2
-rw-r--r--themes/smartpocket/language/cs_CZ/index.php2
-rwxr-xr-xthemes/smartpocket/language/da_DK/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/de_DE/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/el_GR/theme.lang.php2
-rw-r--r--themes/smartpocket/language/en_UK/index.php2
-rwxr-xr-xthemes/smartpocket/language/eo_EO/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/es_ES/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/es_MX/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/et_EE/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/fa_IR/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/fi_FI/theme.lang.php2
-rw-r--r--themes/smartpocket/language/fr_CA/index.php2
-rw-r--r--themes/smartpocket/language/fr_FR/index.php2
-rwxr-xr-xthemes/smartpocket/language/gl_ES/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/he_IL/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/hu_HU/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/it_IT/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/ja_JP/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/km_KH/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/lt_LT/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/lv_LV/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/mn_MN/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/nb_NO/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/nl_NL/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/nn_NO/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/pl_PL/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/pt_BR/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/pt_PT/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/ro_RO/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/ru_RU/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/sh_RS/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/sk_SK/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/sl_SI/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/sr_RS/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/sv_SE/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/ta_IN/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/th_TH/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/tr_TR/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/uk_UA/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/vi_VN/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/zh_CN/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/zh_HK/theme.lang.php2
-rwxr-xr-xthemes/smartpocket/language/zh_TW/theme.lang.php2
-rw-r--r--tools/index.php2
-rw-r--r--tools/metadata.php2
-rwxr-xr-xtools/pwg_rel_create.sh32
-rw-r--r--tools/translation_analysis.php2
-rw-r--r--tools/triggers_list.php10
-rw-r--r--tools/ws.htm10
-rw-r--r--upgrade.php3
-rw-r--r--upgrade_feed.php2
-rw-r--r--ws.php37
1560 files changed, 25895 insertions, 38273 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..85a9ffbca
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,19 @@
+# Piwigo specific directories
+/_data
+/plugins/*
+!/plugins/index.php
+/upload
+/galleries/*
+!/galleries/index.php
+/local/*
+!/local/**/index.php
+
+# IntelliJ
+.idea
+*.iml
+*.ipr
+*.iws
+
+# Eclipse
+.settings
+.project \ No newline at end of file
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 000000000..d159169d1
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/README.md b/README.md
new file mode 100644
index 000000000..673fc966a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,52 @@
+[![Piwigo](http://piwigo.org/screenshots/logos/piwigo@280.png)](http://piwigo.org)
+---------
+
+Piwigo is photo gallery software for the web, built by an active community of users and developers.
+
+Extensions make Piwigo easily customizable. Icing on the cake, Piwigo is free and open source.
+
+![screenshot](http://piwigo.org/screenshots/github-screenshot.jpg)
+
+ * [piwigo.org](http://piwigo.org)
+ * [Demo](http://piwigo.org/demo)
+ * [Downloads](http://piwigo.org/basics/downloads)
+ * [User guide](http://piwigo.org/doc)
+ * [Plugins and themes](http://piwigo.org/ext)
+ * [Forum](http://piwigo.org/forum)
+ * [News](http://piwigo.org/news)
+
+## Requirements
+
+ * A webserver (Apache or nginx recommended)
+ * PHP 5.2 or greater
+ * MySQL 5 or greater or MariaDB equivalent
+ * ImageMagick (recommended) or PHP GD
+
+## Quick start install
+
+### NetInstall
+
+ * Download the [NetInstall script](http://piwigo.org/download/dlcounter.php?code=netinstall)
+ * Transfer the script to your web space with any FTP client
+ * Open the script in you web browser (for example http://example.com/piwigo-netinstall.php) and follow the steps
+
+[More information](http://piwigo.org/basics/installation_netinstall)
+
+### Manual
+
+ * Download the [latest stable version](http://piwigo.org/download/dlcounter.php?code=latest) and unzip it
+ * Transfer everything to your web space with any FTP client
+ * Open your website (for example http://example.com/piwigo) and follow the steps
+
+[More information](http://piwigo.org/basics/installation_manual)
+
+If you do not have your own server, consider the [piwigo.com](http://piwigo.com/) hosting solution.
+
+## Contributing
+
+Piwigo is widely driven by its community; if you want to improve the code, fork this repo and submit your changes to the `master` branch.
+
+## License
+
+Piwigo is released under the GPL v2 license.
+
diff --git a/about.php b/about.php
index 9f6318d16..6bd853a02 100644
--- a/about.php
+++ b/about.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/action.php b/action.php
index 4b92e056c..33ae408ed 100644
--- a/action.php
+++ b/action.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -57,11 +57,34 @@ function do_error( $code, $str )
exit();
}
+if ($conf['enable_formats'] and isset($_GET['format']))
+{
+ check_input_parameter('format', $_GET, false, PATTERN_ID);
+
+ $query = '
+SELECT
+ *
+ FROM '.IMAGE_FORMAT_TABLE.'
+ WHERE format_id = '.$_GET['format'].'
+;';
+ $formats = query2array($query);
+
+ if (count($formats) == 0)
+ {
+ do_error(400, 'Invalid request - format');
+ }
+
+ $format = $formats[0];
+
+ $_GET['id'] = $format['image_id'];
+ $_GET['part'] = 'f'; // "f" for "format"
+}
+
if (!isset($_GET['id'])
or !is_numeric($_GET['id'])
or !isset($_GET['part'])
- or !in_array($_GET['part'], array('e','r') ) )
+ or !in_array($_GET['part'], array('e','r','f') ) )
{
do_error(400, 'Invalid request - id/part');
}
@@ -116,6 +139,10 @@ switch ($_GET['part'])
case 'r':
$file = original_to_representative( get_element_path($element_info), $element_info['representative_ext'] );
break;
+ case 'f' :
+ $file = original_to_format(get_element_path($element_info), $format['ext']);
+ $element_info['file'] = get_filename_wo_extension($element_info['file']).'.'.$format['ext'];
+ break;
}
if ( empty($file) )
@@ -130,6 +157,10 @@ else if ($_GET['part'] == 'e')
{
pwg_log($_GET['id'], 'other');
}
+else if ($_GET['part'] == 'f')
+{
+ pwg_log($_GET['id'], 'high', $format['format_id']);
+}
$http_headers = array();
@@ -155,7 +186,7 @@ if (!url_is_remote($file))
// HTTP/1.1 only
$http_headers[] = 'Cache-Control: private, must-revalidate, max-age='.$max_age;*/
- if ( isset( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) )
+ if ('f' != $_GET['part'] and isset( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) )
{
set_status_header(304);
foreach ($http_headers as $header)
diff --git a/admin.php b/admin.php
index 213f33b75..ac89babdd 100644
--- a/admin.php
+++ b/admin.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -240,6 +240,19 @@ if ($nb_photos_in_caddie > 0)
);
}
+// any orphan photo?
+$nb_orphans = count(get_orphans());
+
+if ($nb_orphans > 0)
+{
+ $template->assign(
+ array(
+ 'NB_ORPHANS' => $nb_orphans,
+ 'U_ORPHANS' => $link_start.'batch_manager&amp;filter=prefilter-no_album',
+ )
+ );
+}
+
// +-----------------------------------------------------------------------+
// | Plugin menu |
// +-----------------------------------------------------------------------+
diff --git a/admin/album.php b/admin/album.php
index d1186aae1..f5e692a9f 100644
--- a/admin/album.php
+++ b/admin/album.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/album_notification.php b/admin/album_notification.php
index cafaad170..fb2a1b027 100644
--- a/admin/album_notification.php
+++ b/admin/album_notification.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -46,7 +46,7 @@ $page['cat'] = $category['id'];
// +-----------------------------------------------------------------------+
// info by email to an access granted group of category informations
-if (isset($_POST['submitEmail']) and !empty($_POST['group']))
+if (isset($_POST['submitEmail']))
{
set_make_full_url();
@@ -54,6 +54,8 @@ if (isset($_POST['submitEmail']) and !empty($_POST['group']))
is empty find child representative_picture_id */
if (!empty($category['representative_picture_id']))
{
+ $img = array();
+
$query = '
SELECT id, file, path, representative_ext
FROM '.IMAGES_TABLE.'
@@ -65,56 +67,124 @@ SELECT id, file, path, representative_ext
{
$element = pwg_db_fetch_assoc($result);
- $img_url = '<a href="'.
- make_picture_url(array(
- 'image_id' => $element['id'],
- 'image_file' => $element['file'],
- 'category' => $category
- ))
- .'" class="thumblnk"><img src="'.DerivativeImage::url(IMG_THUMB, $element).'"></a>';
+ $img = array(
+ 'link' => make_picture_url(
+ array(
+ 'image_id' => $element['id'],
+ 'image_file' => $element['file'],
+ 'category' => $category
+ )
+ ),
+ 'src' => DerivativeImage::url(IMG_THUMB, $element),
+ );
}
}
- if (!isset($img_url))
- {
- $img_url = '';
- }
-
- pwg_mail_group(
- $_POST['group'],
- array(
- 'subject' => l10n('[%s] Visit album %s', $conf['gallery_title'], trigger_change('render_category_name', $category['name'], 'admin_cat_list')),
- // TODO : change this language variable to 'Visit album %s'
- // TODO : 'language_selected' => ....
- ),
- array(
- 'filename' => 'cat_group_info',
- 'assign' => array(
- 'IMG_URL' => $img_url,
- 'CAT_NAME' => trigger_change('render_category_name', $category['name'], 'admin_cat_list'),
- 'LINK' => make_index_url(array(
- 'category' => array(
- 'id' => $category['id'],
- 'name' => trigger_change('render_category_name', $category['name'], 'admin_cat_list'),
- 'permalink' => $category['permalink']
- )
- )),
- 'CPL_CONTENT' => empty($_POST['mail_content']) ? '' : stripslashes($_POST['mail_content']),
- )
+ $args = array(
+ 'subject' => l10n('[%s] Visit album %s', $conf['gallery_title'], trigger_change('render_category_name', $category['name'], 'admin_cat_list')),
+ // TODO : change this language variable to 'Visit album %s'
+ // TODO : 'language_selected' => ....
+ );
+
+ $tpl = array(
+ 'filename' => 'cat_group_info',
+ 'assign' => array(
+ 'IMG' => $img,
+ 'CAT_NAME' => trigger_change('render_category_name', $category['name'], 'admin_cat_list'),
+ 'LINK' => make_index_url(
+ array(
+ 'category' => array(
+ 'id' => $category['id'],
+ 'name' => trigger_change('render_category_name', $category['name'], 'admin_cat_list'),
+ 'permalink' => $category['permalink']
+ )
+ )
+ ),
+ 'CPL_CONTENT' => empty($_POST['mail_content']) ? '' : stripslashes($_POST['mail_content']),
)
);
- unset_make_full_url();
+ if ('users' == $_POST['who'] and isset($_POST['users']) and count($_POST['users']) > 0)
+ {
+ check_input_parameter('users', $_POST, true, PATTERN_ID);
- $query = '
+ // TODO code very similar to function pwg_mail_group. We'd better create
+ // a function pwg_mail_users that could be called from here and from
+ // pwg_mail_group
+
+ // TODO to make checks even better, we should check that theses users
+ // have access to this album. No real privacy issue here, even if we
+ // send the email to a user without permission.
+
+ $query = '
+SELECT
+ ui.user_id,
+ ui.status,
+ ui.language,
+ u.'.$conf['user_fields']['email'].' AS email,
+ u.'.$conf['user_fields']['username'].' AS username
+ FROM '.USER_INFOS_TABLE.' AS ui
+ JOIN '.USERS_TABLE.' AS u ON u.'.$conf['user_fields']['id'].' = ui.user_id
+ WHERE ui.user_id IN ('.implode(',', $_POST['users']).')
+;';
+ $users = query2array($query);
+ $usernames = array();
+
+ foreach ($users as $u)
+ {
+ $usernames[] = $u['username'];
+
+ $authkey = create_user_auth_key($u['user_id'], $u['status']);
+
+ $user_tpl = $tpl;
+
+ if ($authkey !== false)
+ {
+ $user_tpl['assign']['LINK'] = add_url_params($tpl['assign']['LINK'], array('auth' => $authkey['auth_key']));
+
+ if (isset($user_tpl['assign']['IMG']['link']))
+ {
+ $user_tpl['assign']['IMG']['link'] = add_url_params(
+ $user_tpl['assign']['IMG']['link'],
+ array('auth' => $authkey['auth_key'])
+ );
+ }
+ }
+
+ $user_args = $args;
+ if (isset($authkey))
+ {
+ $user_args['auth_key'] = $authkey['auth_key'];
+ }
+
+ switch_lang_to($u['language']);
+ pwg_mail($u['email'], $user_args, $user_tpl);
+ switch_lang_back();
+ }
+
+ $message = l10n_dec('%d mail was sent.', '%d mails were sent.', count($users));
+ $message.= ' ('.implode(', ', $usernames).')';
+
+ $page['infos'][] = $message;
+ }
+ elseif ('group' == $_POST['who'] and !empty($_POST['group']))
+ {
+ check_input_parameter('group', $_POST, false, PATTERN_ID);
+
+ pwg_mail_group($_POST['group'], $args, $tpl);
+
+ $query = '
SELECT
name
FROM '.GROUPS_TABLE.'
WHERE id = '.$_POST['group'].'
;';
- list($group_name) = pwg_db_fetch_row(pwg_query($query));
+ list($group_name) = pwg_db_fetch_row(pwg_query($query));
- $page['infos'][] = l10n('An information email was sent to group "%s"', $group_name);
+ $page['infos'][] = l10n('An information email was sent to group "%s"', $group_name);
+ }
+
+ unset_make_full_url();
}
// +-----------------------------------------------------------------------+
@@ -135,6 +205,19 @@ $template->assign(
)
);
+if ($conf['auth_key_duration'] > 0)
+{
+ $template->assign(
+ 'auth_key_duration',
+ time_since(
+ strtotime('now -'.$conf['auth_key_duration'].' second'),
+ 'second',
+ null,
+ false
+ )
+ );
+}
+
// +-----------------------------------------------------------------------+
// | form construction |
// +-----------------------------------------------------------------------+
@@ -189,6 +272,64 @@ SELECT
}
}
+// all users with status != guest and permitted to this this album (for a
+// perfect search, we should also check that album is not only filled with
+// private photos)
+$query = '
+SELECT
+ user_id
+ FROM '.USER_INFOS_TABLE.'
+ WHERE status != \'guest\'
+;';
+$all_user_ids = query2array($query, null, 'user_id');
+
+if ('private' == $category['status'])
+{
+ $user_ids_access_indirect = array();
+
+ if (isset($group_ids) and count($group_ids) > 0)
+ {
+ $query = '
+SELECT
+ user_id
+ FROM '.USER_GROUP_TABLE.'
+ WHERE group_id IN ('.implode(',', $group_ids).')
+';
+ $user_ids_access_indirect = query2array($query, null, 'user_id');
+ }
+
+ $query = '
+SELECT
+ user_id
+ FROM '.USER_ACCESS_TABLE.'
+ WHERE cat_id = '.$category['id'].'
+;';
+ $user_ids_access_direct = query2array($query, null, 'user_id');
+
+ $user_ids_access = array_unique(array_merge($user_ids_access_direct, $user_ids_access_indirect));
+
+ $user_ids = array_intersect($user_ids_access, $all_user_ids);
+}
+else
+{
+ $user_ids = $all_user_ids;
+}
+
+if (count($user_ids) > 0)
+{
+ $query = '
+SELECT
+ '.$conf['user_fields']['id'].' AS id,
+ '.$conf['user_fields']['username'].' AS username
+ FROM '.USERS_TABLE.'
+ WHERE id IN ('.implode(',', $user_ids).')
+;';
+
+ $users = query2array($query, 'id', 'username');
+
+ $template->assign('user_options', $users);
+}
+
// +-----------------------------------------------------------------------+
// | sending html code |
// +-----------------------------------------------------------------------+
diff --git a/admin/batch_manager.php b/admin/batch_manager.php
index 257b11bb9..e81c59f0a 100644
--- a/admin/batch_manager.php
+++ b/admin/batch_manager.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -63,6 +63,21 @@ DELETE FROM '.CADDIE_TABLE.'
redirect(get_root_url().'admin.php?page='.$_GET['page']);
}
+
+ if ('delete_orphans' == $_GET['action'])
+ {
+ $deleted_count = delete_elements(get_orphans(), true);
+
+ if ($deleted_count > 0)
+ {
+ $_SESSION['page_infos'][] = l10n_dec(
+ '%d photo was deleted', '%d photos were deleted',
+ $deleted_count
+ );
+
+ redirect(get_root_url().'admin.php?page='.$_GET['page']);
+ }
+ }
}
// +-----------------------------------------------------------------------+
@@ -323,15 +338,7 @@ SELECT id
break;
case 'no_album':
- $query = '
-SELECT
- id
- FROM '.IMAGES_TABLE.'
- LEFT JOIN '.IMAGE_CATEGORY_TABLE.' ON id = image_id
- WHERE category_id is null
-;';
- $filter_sets[] = query2array($query, null, 'id');
-
+ $filter_sets[] = get_orphans();
break;
case 'no_tag':
diff --git a/admin/batch_manager_global.php b/admin/batch_manager_global.php
index 4179ed284..ba3944abe 100644
--- a/admin/batch_manager_global.php
+++ b/admin/batch_manager_global.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -430,7 +430,7 @@ $prefilters = array(
array('ID' => 'caddie', 'NAME' => l10n('Caddie')),
array('ID' => 'favorites', 'NAME' => l10n('Your favorites')),
array('ID' => 'last_import', 'NAME' => l10n('Last import')),
- array('ID' => 'no_album', 'NAME' => l10n('With no album')),
+ array('ID' => 'no_album', 'NAME' => l10n('With no album').' ('.l10n('Orphans').')'),
array('ID' => 'no_tag', 'NAME' => l10n('With no tag')),
array('ID' => 'duplicates', 'NAME' => l10n('Duplicates')),
array('ID' => 'all_photos', 'NAME' => l10n('All'))
diff --git a/admin/batch_manager_unit.php b/admin/batch_manager_unit.php
index bed0cdc1c..f4d69d572 100644
--- a/admin/batch_manager_unit.php
+++ b/admin/batch_manager_unit.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/cat_list.php b/admin/cat_list.php
index d69bb4957..81e7c1804 100644
--- a/admin/cat_list.php
+++ b/admin/cat_list.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/cat_modify.php b/admin/cat_modify.php
index 3cf8239c1..3e50d8ff5 100644
--- a/admin/cat_modify.php
+++ b/admin/cat_modify.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -172,21 +172,6 @@ UPDATE '.CATEGORIES_TABLE.'
$_SESSION['page_infos'][] = l10n('Album updated successfully');
$redirect = true;
}
-elseif (isset($_POST['set_random_representant']))
-{
- set_random_representant(array($_GET['cat_id']));
- $redirect = true;
-}
-elseif (isset($_POST['delete_representant']))
-{
- $query = '
-UPDATE '.CATEGORIES_TABLE.'
- SET representative_picture_id = NULL
- WHERE id = '.$_GET['cat_id'].'
-;';
- pwg_query($query);
- $redirect = true;
-}
if (isset($redirect))
{
@@ -336,8 +321,7 @@ else
}
// representant management
-if ($category['has_images']
- or !empty($category['representative_picture_id']))
+if ($category['has_images'] or !empty($category['representative_picture_id']))
{
$tpl_representant = array();
@@ -345,20 +329,7 @@ if ($category['has_images']
// representant ?
if (!empty($category['representative_picture_id']))
{
- $query = '
-SELECT id,representative_ext,path
- FROM '.IMAGES_TABLE.'
- WHERE id = '.$category['representative_picture_id'].'
-;';
- $row = pwg_db_fetch_assoc(pwg_query($query));
- $src = DerivativeImage::thumb_url($row);
- $url = get_root_url().'admin.php?page=photo-'.$category['representative_picture_id'];
-
- $tpl_representant['picture'] =
- array(
- 'SRC' => $src,
- 'URL' => $url
- );
+ $tpl_representant['picture'] = get_category_representant_properties($category['representative_picture_id']);
}
// can the admin choose to set a new random representant ?
diff --git a/admin/cat_move.php b/admin/cat_move.php
index d596d4e67..9e7e0b897 100644
--- a/admin/cat_move.php
+++ b/admin/cat_move.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/cat_options.php b/admin/cat_options.php
index f191095b6..41d5cd732 100644
--- a/admin/cat_options.php
+++ b/admin/cat_options.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/cat_perm.php b/admin/cat_perm.php
index c42b3eaa2..eb55f3e4a 100644
--- a/admin/cat_perm.php
+++ b/admin/cat_perm.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/comments.php b/admin/comments.php
index 0f09faf9f..580f03b90 100644
--- a/admin/comments.php
+++ b/admin/comments.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/configuration.php b/admin/configuration.php
index e7e6033c8..4a9c3c359 100644
--- a/admin/configuration.php
+++ b/admin/configuration.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -578,7 +578,7 @@ switch ($page['section'])
$position = 'bottomright';
}
- if ($wm->xrepeat != 0)
+ if ($wm->xrepeat != 0 || $wm->yrepeat != 0)
{
$position = 'custom';
}
@@ -592,6 +592,7 @@ switch ($page['section'])
'xpos' => $wm->xpos,
'ypos' => $wm->ypos,
'xrepeat' => $wm->xrepeat,
+ 'yrepeat' => $wm->yrepeat,
'opacity' => $wm->opacity,
'position' => $position,
)
diff --git a/admin/element_set_ranks.php b/admin/element_set_ranks.php
index 8b68ce649..7ff57faee 100644
--- a/admin/element_set_ranks.php
+++ b/admin/element_set_ranks.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -46,38 +46,6 @@ if (!isset($_GET['cat_id']) or !is_numeric($_GET['cat_id']))
$page['category_id'] = $_GET['cat_id'];
// +-----------------------------------------------------------------------+
-// | functions |
-// +-----------------------------------------------------------------------+
-
-/**
- * save the rank depending on given images order
- *
- * The list of ordered images id is supposed to be in the same parent
- * category
- *
- * @param array categories
- * @return void
- */
-function save_images_order($category_id, $images)
-{
- $current_rank = 0;
- $datas = array();
- foreach ($images as $id)
- {
- $datas[] = array(
- 'category_id' => $category_id,
- 'image_id' => $id,
- 'rank' => ++$current_rank,
- );
- }
- $fields = array(
- 'primary' => array('image_id', 'category_id'),
- 'update' => array('rank')
- );
- mass_updates(IMAGE_CATEGORY_TABLE, $fields, $datas);
-}
-
-// +-----------------------------------------------------------------------+
// | global mode form submission |
// +-----------------------------------------------------------------------+
diff --git a/admin/extend_for_templates.php b/admin/extend_for_templates.php
index 0bab1215e..66b8009da 100644
--- a/admin/extend_for_templates.php
+++ b/admin/extend_for_templates.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/group_list.php b/admin/group_list.php
index 5c53a8b1f..9691f4913 100644
--- a/admin/group_list.php
+++ b/admin/group_list.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/group_perm.php b/admin/group_perm.php
index 28ea48111..d4311e09d 100644
--- a/admin/group_perm.php
+++ b/admin/group_perm.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/help.php b/admin/help.php
index 0625ea61e..cdc3bdf53 100644
--- a/admin/help.php
+++ b/admin/help.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/history.php b/admin/history.php
index 26855bb40..c2d3ecb9a 100644
--- a/admin/history.php
+++ b/admin/history.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/include/add_core_tabs.inc.php b/admin/include/add_core_tabs.inc.php
index 28cf1ce9e..9cef0f064 100644
--- a/admin/include/add_core_tabs.inc.php
+++ b/admin/include/add_core_tabs.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/include/albums_tab.inc.php b/admin/include/albums_tab.inc.php
index 399778d01..8bccb5378 100644
--- a/admin/include/albums_tab.inc.php
+++ b/admin/include/albums_tab.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/include/c13y_internal.class.php b/admin/include/c13y_internal.class.php
index 10375095a..acf4a32b6 100644
--- a/admin/include/c13y_internal.class.php
+++ b/admin/include/c13y_internal.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -23,7 +23,7 @@
class c13y_internal
{
- function c13y_internal()
+ function __construct()
{
add_event_handler('list_check_integrity', array(&$this, 'c13y_version'));
add_event_handler('list_check_integrity', array(&$this, 'c13y_exif'));
diff --git a/admin/include/check_integrity.class.php b/admin/include/check_integrity.class.php
index 66ff1db8f..bf2104175 100644
--- a/admin/include/check_integrity.class.php
+++ b/admin/include/check_integrity.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -27,7 +27,7 @@ class check_integrity
var $retrieve_list;
var $build_ignore_list;
- function check_integrity()
+ function __construct()
{
$this->ignore_list = array();
$this->retrieve_list = array();
diff --git a/admin/include/configuration_sizes_process.inc.php b/admin/include/configuration_sizes_process.inc.php
index a731aa55f..92d746d4b 100644
--- a/admin/include/configuration_sizes_process.inc.php
+++ b/admin/include/configuration_sizes_process.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/include/configuration_watermark_process.inc.php b/admin/include/configuration_watermark_process.inc.php
index ad23d92a2..bc1451791 100644
--- a/admin/include/configuration_watermark_process.inc.php
+++ b/admin/include/configuration_watermark_process.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -126,6 +126,7 @@ if (count($errors) == 0)
$watermark->xpos = intval($pwatermark['xpos']);
$watermark->ypos = intval($pwatermark['ypos']);
$watermark->xrepeat = intval($pwatermark['xrepeat']);
+ $watermark->yrepeat = intval($pwatermark['yrepeat']);
$watermark->opacity = intval($pwatermark['opacity']);
$watermark->min_size = array(intval($pwatermark['minw']),intval($pwatermark['minh']));
@@ -135,6 +136,7 @@ if (count($errors) == 0)
|| $watermark->xpos != $old_watermark->xpos
|| $watermark->ypos != $old_watermark->ypos
|| $watermark->xrepeat != $old_watermark->xrepeat
+ || $watermark->yrepeat != $old_watermark->yrepeat
|| $watermark->opacity != $old_watermark->opacity;
// save the new watermark configuration
diff --git a/admin/include/functions.php b/admin/include/functions.php
index 7d29f5734..4d3ccebe6 100644
--- a/admin/include/functions.php
+++ b/admin/include/functions.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -180,6 +180,25 @@ function delete_element_files($ids)
}
$new_ids = array();
+ $formats_of = array();
+
+ $query = '
+SELECT
+ image_id,
+ ext
+ FROM '.IMAGE_FORMAT_TABLE.'
+ WHERE image_id IN ('.implode(',', $ids).')
+;';
+ $result = pwg_query($query);
+ while ($row = pwg_db_fetch_assoc($result))
+ {
+ if (!isset($formats_of[ $row['image_id'] ]))
+ {
+ $formats_of[ $row['image_id'] ] = array();
+ }
+
+ $formats_of[ $row['image_id'] ][] = $row['ext'];
+ }
$query = '
SELECT
@@ -205,6 +224,14 @@ SELECT
$files[] = original_to_representative( $files[0], $row['representative_ext']);
}
+ if (isset($formats_of[ $row['id'] ]))
+ {
+ foreach ($formats_of[ $row['id'] ] as $format_ext)
+ {
+ $files[] = original_to_format($files[0], $format_ext);
+ }
+ }
+
$ok = true;
if (!isset($conf['never_delete_originals']))
{
@@ -277,6 +304,13 @@ DELETE FROM '.IMAGE_CATEGORY_TABLE.'
;';
pwg_query($query);
+ // destruction of the formats
+ $query = '
+DELETE FROM '.IMAGE_FORMAT_TABLE.'
+ WHERE image_id IN ('. $ids_str .')
+;';
+ pwg_query($query);
+
// destruction of the links between images and tags
$query = '
DELETE FROM '.IMAGE_TAG_TABLE.'
@@ -358,6 +392,7 @@ function delete_user($user_id)
CADDIE_TABLE,
// deletion of piwigo specific informations
USER_INFOS_TABLE,
+ USER_AUTH_KEYS_TABLE
);
foreach ($tables as $table)
@@ -540,6 +575,7 @@ function get_fs_directories($path, $recursive = true)
'.', '..', '.svn',
'thumbnail', 'pwg_high',
'pwg_representative',
+ 'pwg_format',
)
);
$exclude_folders = array_flip($exclude_folders);
@@ -887,6 +923,25 @@ SELECT uppercats
}
/**
+ */
+function get_category_representant_properties($image_id)
+{
+ $query = '
+SELECT id,representative_ext,path
+ FROM '.IMAGES_TABLE.'
+ WHERE id = '.$image_id.'
+;';
+ $row = pwg_db_fetch_assoc(pwg_query($query));
+ $src = DerivativeImage::thumb_url($row);
+ $url = get_root_url().'admin.php?page=photo-'.$image_id;
+
+ return array(
+ 'src' => $src,
+ 'url' => $url
+ );
+}
+
+/**
* Set a new random representant to the categories.
*
* @param int[] $categories
@@ -2775,4 +2830,51 @@ SELECT CONCAT(
}
return $keys;
-} \ No newline at end of file
+}
+
+/**
+ * Return the list of image ids associated to no album
+ *
+ * @return int[] $image_ids
+ */
+function get_orphans()
+{
+ $query = '
+SELECT
+ id
+ FROM '.IMAGES_TABLE.'
+ LEFT JOIN '.IMAGE_CATEGORY_TABLE.' ON id = image_id
+ WHERE category_id is null
+;';
+
+ return query2array($query, null, 'id');
+}
+
+/**
+ * save the rank depending on given images order
+ *
+ * The list of ordered images id is supposed to be in the same parent
+ * category
+ *
+ * @param int category_id
+ * @param int[] images
+ * @return void
+ */
+function save_images_order($category_id, $images)
+{
+ $current_rank = 0;
+ $datas = array();
+ foreach ($images as $id)
+ {
+ $datas[] = array(
+ 'category_id' => $category_id,
+ 'image_id' => $id,
+ 'rank' => ++$current_rank,
+ );
+ }
+ $fields = array(
+ 'primary' => array('image_id', 'category_id'),
+ 'update' => array('rank')
+ );
+ mass_updates(IMAGE_CATEGORY_TABLE, $fields, $datas);
+}
diff --git a/admin/include/functions_history.inc.php b/admin/include/functions_history.inc.php
index e2bcc4d62..55783fd74 100644
--- a/admin/include/functions_history.inc.php
+++ b/admin/include/functions_history.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/include/functions_install.inc.php b/admin/include/functions_install.inc.php
index a97835583..5a68964f8 100644
--- a/admin/include/functions_install.inc.php
+++ b/admin/include/functions_install.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/include/functions_metadata.php b/admin/include/functions_metadata.php
index da0703774..1b5b5bb73 100644
--- a/admin/include/functions_metadata.php
+++ b/admin/include/functions_metadata.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/include/functions_notification_by_mail.inc.php b/admin/include/functions_notification_by_mail.inc.php
index 8d0fe2621..204be5c33 100644
--- a/admin/include/functions_notification_by_mail.inc.php
+++ b/admin/include/functions_notification_by_mail.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -125,12 +125,12 @@ select
U.'.$conf['user_fields']['username'].' as username,
U.'.$conf['user_fields']['email'].' as mail_address,
N.enabled,
- N.last_send
-from
- '.USER_MAIL_NOTIFICATION_TABLE.' as N,
- '.USERS_TABLE.' as U
-where
- N.user_id = U.'.$conf['user_fields']['id'];
+ N.last_send,
+ UI.status
+from '.USER_MAIL_NOTIFICATION_TABLE.' as N
+ JOIN '.USERS_TABLE.' as U on N.user_id = U.'.$conf['user_fields']['id'].'
+ JOIN '.USER_INFOS_TABLE.' as UI on UI.user_id = N.user_id
+where 1=1';
if ($action == 'send')
{
@@ -159,7 +159,7 @@ order by';
else
{
$query .= '
- username;';
+ username';
}
$query .= ';';
diff --git a/admin/include/functions_permalinks.php b/admin/include/functions_permalinks.php
index 6c8ae4aac..db0679661 100644
--- a/admin/include/functions_permalinks.php
+++ b/admin/include/functions_permalinks.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/include/functions_plugins.inc.php b/admin/include/functions_plugins.inc.php
index fb98c799c..8605f1ff2 100644
--- a/admin/include/functions_plugins.inc.php
+++ b/admin/include/functions_plugins.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/include/functions_upgrade.php b/admin/include/functions_upgrade.php
index b7a8763c5..bf6ef2b88 100644
--- a/admin/include/functions_upgrade.php
+++ b/admin/include/functions_upgrade.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -174,10 +174,7 @@ UPDATE '.PREFIX_TABLE.'user_infos
// Deactivate all templates
function deactivate_templates()
{
- $query = '
- UPDATE '.PREFIX_TABLE.'config
- SET value = \''. array() .'\'
- WHERE param = \'extents_for_templates\';';
+ conf_update_param('extents_for_templates', array());
}
// Check access rights
@@ -322,4 +319,4 @@ function upgrade_db_connect()
my_error(l10n($e->getMessage()), true);
}
}
-?> \ No newline at end of file
+?>
diff --git a/admin/include/functions_upload.inc.php b/admin/include/functions_upload.inc.php
index d0ef6e67d..17e78a200 100644
--- a/admin/include/functions_upload.inc.php
+++ b/admin/include/functions_upload.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -268,104 +268,19 @@ SELECT
}
@chmod($file_path, 0644);
- if ($is_tiff and pwg_image::get_library() == 'ext_imagick')
- {
- // move the uploaded file to pwg_representative sub-directory
- $representative_file_path = dirname($file_path).'/pwg_representative/';
- $representative_file_path.= get_filename_wo_extension(basename($file_path)).'.';
-
- $representative_ext = $conf['tiff_representative_ext'];
- $representative_file_path.= $representative_ext;
-
- prepare_directory(dirname($representative_file_path));
-
- $exec = $conf['ext_imagick_dir'].'convert';
-
- if ('jpg' == $conf['tiff_representative_ext'])
- {
- $exec .= ' -quality 98';
- }
-
- $exec .= ' "'.realpath($file_path).'"';
-
- $dest = pathinfo($representative_file_path);
- $exec .= ' "'.realpath($dest['dirname']).'/'.$dest['basename'].'"';
-
- $exec .= ' 2>&1';
- @exec($exec, $returnarray);
-
- // sometimes ImageMagick creates file-0.jpg (full size) + file-1.jpg
- // (thumbnail). I don't know how to avoid it.
- $representative_file_abspath = realpath($dest['dirname']).'/'.$dest['basename'];
- if (!file_exists($representative_file_abspath))
- {
- $first_file_abspath = preg_replace(
- '/\.'.$representative_ext.'$/',
- '-0.'.$representative_ext,
- $representative_file_abspath
- );
-
- if (file_exists($first_file_abspath))
- {
- rename($first_file_abspath, $representative_file_abspath);
- }
- }
- }
+ // handle the uploaded file type by potentially making a
+ // pwg_representative file.
+ $representative_ext = trigger_change('upload_file', null, $file_path);
- //
- // generate pwg_representative in case of video
- //
- $ffmpeg_video_exts = array( // extensions tested with FFmpeg
- 'wmv','mov','mkv','mp4','mpg','flv','asf','xvid','divx','mpeg',
- 'avi','rm',
- );
+ global $logger;
+ $logger->info("Handling " . (string)$file_path . " got " . (string)$representative_ext);
- if (isset($original_extension) and in_array($original_extension, $ffmpeg_video_exts))
- {
- $representative_file_path = dirname($file_path).'/pwg_representative/';
- $representative_file_path.= get_filename_wo_extension(basename($file_path)).'.';
-
- $representative_ext = 'jpg';
- $representative_file_path.= $representative_ext;
-
- prepare_directory(dirname($representative_file_path));
-
- $second = 1;
-
- $ffmpeg = $conf['ffmpeg_dir'].'ffmpeg';
- $ffmpeg.= ' -i "'.$file_path.'"';
- $ffmpeg.= ' -an -ss '.$second;
- $ffmpeg.= ' -t 1 -r 1 -y -vcodec mjpeg -f mjpeg';
- $ffmpeg.= ' "'.$representative_file_path.'"';
-
- // file_put_contents('/tmp/ffmpeg.log', "\n==== ".date('c')."\n".__FUNCTION__.' : '.$ffmpeg."\n", FILE_APPEND);
-
- @exec($ffmpeg);
-
- if (!file_exists($representative_file_path))
- {
- $representative_ext = null;
- }
- }
-
- if (isset($original_extension) and 'pdf' == $original_extension and pwg_image::get_library() == 'ext_imagick')
- {
- $representative_file_path = dirname($file_path).'/pwg_representative/';
- $representative_file_path.= get_filename_wo_extension(basename($file_path)).'.';
-
- $representative_ext = 'jpg';
- $representative_file_path.= $representative_ext;
-
- prepare_directory(dirname($representative_file_path));
-
- $exec = $conf['ext_imagick_dir'].'convert';
- $exec.= ' -quality 98';
- $exec.= ' "'.realpath($file_path).'"[0]';
-
- $dest = pathinfo($representative_file_path);
- $exec.= ' "'.realpath($dest['dirname']).'/'.$dest['basename'].'"';
- $exec.= ' 2>&1';
- @exec($exec, $returnarray);
+ // If it is set to either true (the file didn't need a
+ // representative generated) or false (the generation of the
+ // representative failed), set it to null because we have no
+ // representative file.
+ if (is_bool($representative_ext)) {
+ $representative_ext = null;
}
if (pwg_image::get_library() != 'gd')
@@ -492,6 +407,168 @@ SELECT
return $image_id;
}
+add_event_handler('upload_file', 'upload_file_pdf');
+function upload_file_pdf($representative_ext, $file_path)
+{
+ global $logger, $conf;
+
+ $logger->info(__FUNCTION__.', $file_path = '.$file_path.', $representative_ext = '.$representative_ext);
+
+ if (isset($representative_ext))
+ {
+ return $representative_ext;
+ }
+
+ if (pwg_image::get_library() != 'ext_imagick')
+ {
+ return $representative_ext;
+ }
+
+ if (!in_array(strtolower(get_extension($file_path)), array('pdf')))
+ {
+ return $representative_ext;
+ }
+
+ $ext = conf_get_param('pdf_representative_ext', 'jpg');
+ $jpg_quality = conf_get_param('pdf_jpg_quality', 90);
+
+ // move the uploaded file to pwg_representative sub-directory
+ $representative_file_path = original_to_representative($file_path, $ext);
+ prepare_directory(dirname($representative_file_path));
+
+ $exec = $conf['ext_imagick_dir'].'convert';
+ if ('jpg' == $ext)
+ {
+ $exec.= ' -quality '.$jpg_quality;
+ }
+ $exec.= ' "'.realpath($file_path).'"[0]';
+ $exec.= ' "'.$representative_file_path.'"';
+ $exec.= ' 2>&1';
+ @exec($exec, $returnarray);
+
+ // Return the extension (if successful) or false (if failed)
+ if (file_exists($representative_file_path))
+ {
+ $representative_ext = $ext;
+ }
+
+ return $representative_ext;
+}
+
+add_event_handler('upload_file', 'upload_file_tiff');
+function upload_file_tiff($representative_ext, $file_path)
+{
+ global $logger, $conf;
+
+ $logger->info(__FUNCTION__.', $file_path = '.$file_path.', $representative_ext = '.$representative_ext);
+
+ if (isset($representative_ext))
+ {
+ return $representative_ext;
+ }
+
+ if (pwg_image::get_library() != 'ext_imagick')
+ {
+ return $representative_ext;
+ }
+
+ if (!in_array(strtolower(get_extension($file_path)), array('tif', 'tiff')))
+ {
+ return $representative_ext;
+ }
+
+ // move the uploaded file to pwg_representative sub-directory
+ $representative_file_path = dirname($file_path).'/pwg_representative/';
+ $representative_file_path.= get_filename_wo_extension(basename($file_path)).'.';
+
+ $representative_ext = $conf['tiff_representative_ext'];
+ $representative_file_path.= $representative_ext;
+
+ prepare_directory(dirname($representative_file_path));
+
+ $exec = $conf['ext_imagick_dir'].'convert';
+
+ if ('jpg' == $conf['tiff_representative_ext'])
+ {
+ $exec .= ' -quality 98';
+ }
+
+ $exec .= ' "'.realpath($file_path).'"';
+
+ $dest = pathinfo($representative_file_path);
+ $exec .= ' "'.realpath($dest['dirname']).'/'.$dest['basename'].'"';
+
+ $exec .= ' 2>&1';
+ @exec($exec, $returnarray);
+
+ // sometimes ImageMagick creates file-0.jpg (full size) + file-1.jpg
+ // (thumbnail). I don't know how to avoid it.
+ $representative_file_abspath = realpath($dest['dirname']).'/'.$dest['basename'];
+ if (!file_exists($representative_file_abspath))
+ {
+ $first_file_abspath = preg_replace(
+ '/\.'.$representative_ext.'$/',
+ '-0.'.$representative_ext,
+ $representative_file_abspath
+ );
+
+ if (file_exists($first_file_abspath))
+ {
+ rename($first_file_abspath, $representative_file_abspath);
+ }
+ }
+
+ return get_extension($representative_file_abspath);
+}
+
+add_event_handler('upload_file', 'upload_file_video');
+function upload_file_video($representative_ext, $file_path)
+{
+ global $logger, $conf;
+
+ $logger->info(__FUNCTION__.', $file_path = '.$file_path.', $representative_ext = '.$representative_ext);
+
+ if (isset($representative_ext))
+ {
+ return $representative_ext;
+ }
+
+ $ffmpeg_video_exts = array( // extensions tested with FFmpeg
+ 'wmv','mov','mkv','mp4','mpg','flv','asf','xvid','divx','mpeg',
+ 'avi','rm',
+ );
+
+ if (!in_array(strtolower(get_extension($file_path)), $ffmpeg_video_exts))
+ {
+ return $representative_ext;
+ }
+
+ $representative_file_path = dirname($file_path).'/pwg_representative/';
+ $representative_file_path.= get_filename_wo_extension(basename($file_path)).'.';
+
+ $representative_ext = 'jpg';
+ $representative_file_path.= $representative_ext;
+
+ prepare_directory(dirname($representative_file_path));
+
+ $second = 1;
+
+ $ffmpeg = $conf['ffmpeg_dir'].'ffmpeg';
+ $ffmpeg.= ' -i "'.$file_path.'"';
+ $ffmpeg.= ' -an -ss '.$second;
+ $ffmpeg.= ' -t 1 -r 1 -y -vcodec mjpeg -f mjpeg';
+ $ffmpeg.= ' "'.$representative_file_path.'"';
+
+ @exec($ffmpeg);
+
+ if (!file_exists($representative_file_path))
+ {
+ return null;
+ }
+
+ return $representative_ext;
+}
+
function prepare_directory($directory)
{
if (!is_dir($directory)) {
diff --git a/admin/include/image.class.php b/admin/include/image.class.php
index ee9b9bb12..e713a84c9 100644
--- a/admin/include/image.class.php
+++ b/admin/include/image.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/include/index.php b/admin/include/index.php
index c8de97f60..0b96c3efa 100644
--- a/admin/include/index.php
+++ b/admin/include/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/include/languages.class.php b/admin/include/languages.class.php
index 351e36d53..6f6780592 100644
--- a/admin/include/languages.class.php
+++ b/admin/include/languages.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -30,7 +30,7 @@ class languages
/**
* Initialize $fs_languages and $db_languages
*/
- function languages($target_charset = null)
+ function __construct($target_charset = null)
{
$this->get_fs_languages($target_charset);
}
@@ -408,4 +408,4 @@ UPDATE '.USER_INFOS_TABLE.'
return strcmp(strtolower($a['extension_name']), strtolower($b['extension_name']));
}
}
-?> \ No newline at end of file
+?>
diff --git a/admin/include/mysqldump.php b/admin/include/mysqldump.php
index 515d86ae9..1432675c8 100644
--- a/admin/include/mysqldump.php
+++ b/admin/include/mysqldump.php
@@ -59,7 +59,7 @@ class MySQLDump {
* @param boolean $compress It defines if the output file is compress (gzip) or not
* @param boolean $hexValue It defines if the outup values are base-16 or not
*/
- function MYSQLDump($db = null, $filepath = 'dump.sql', $compress = false, $hexValue = false){
+ function __construct($db = null, $filepath = 'dump.sql', $compress = false, $hexValue = false){
$this->compress = $compress;
if ( !$this->setOutputFile($filepath) )
return false;
@@ -418,4 +418,4 @@ class MySQLDump {
@fclose($file);
}
}
-?> \ No newline at end of file
+?>
diff --git a/admin/include/pclzip.lib.php b/admin/include/pclzip.lib.php
index e7facc1ea..c2d09a50c 100644
--- a/admin/include/pclzip.lib.php
+++ b/admin/include/pclzip.lib.php
@@ -212,7 +212,7 @@
// Note that no real action is taken, if the archive does not exist it is not
// created. Use create() for that.
// --------------------------------------------------------------------------------
- function PclZip($p_zipname)
+ function __construct($p_zipname)
{
// ----- Tests the zlib
diff --git a/admin/include/photos_add_direct_prepare.inc.php b/admin/include/photos_add_direct_prepare.inc.php
index 34b025f13..4d852fee4 100644
--- a/admin/include/photos_add_direct_prepare.inc.php
+++ b/admin/include/photos_add_direct_prepare.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -44,6 +44,7 @@ $template->assign(
'F_ADD_ACTION'=> PHOTOS_ADD_BASE_URL,
'upload_max_filesize' => $upload_max_filesize,
'upload_max_filesize_shorthand' => $upload_max_filesize_shorthand,
+ 'chunk_size' => $conf['upload_form_chunk_size'],
)
);
@@ -229,4 +230,4 @@ if (!isset($_SESSION['upload_hide_warnings']))
);
}
-?> \ No newline at end of file
+?>
diff --git a/admin/include/plugins.class.php b/admin/include/plugins.class.php
index 71093a6c1..8b4b82b75 100644
--- a/admin/include/plugins.class.php
+++ b/admin/include/plugins.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -69,7 +69,7 @@ class plugins
/**
* Initialize $fs_plugins and $db_plugins_by_id
*/
- function plugins()
+ function __construct()
{
$this->get_fs_plugins();
@@ -716,4 +716,4 @@ DELETE FROM '. PLUGINS_TABLE .'
$this->fs_plugins = $active_plugins + $inactive_plugins + $not_installed;
}
}
-?> \ No newline at end of file
+?>
diff --git a/admin/include/tabsheet.class.php b/admin/include/tabsheet.class.php
index c7681b611..cb89886fe 100644
--- a/admin/include/tabsheet.class.php
+++ b/admin/include/tabsheet.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -33,7 +33,7 @@ class tabsheet
$name is the tabsheet's name inside the template .tpl file
$titlename in the template is affected by $titlename value
*/
- function tabsheet($name = 'TABSHEET', $titlename = 'TABSHEET_TITLE')
+ function __construct($name = 'TABSHEET', $titlename = 'TABSHEET_TITLE')
{
$this->sheets = array();
$this->uniqid = null;
diff --git a/admin/include/themes.class.php b/admin/include/themes.class.php
index df0e29e66..6d55e11bd 100644
--- a/admin/include/themes.class.php
+++ b/admin/include/themes.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -60,7 +60,7 @@ class themes
/**
* Initialize $fs_themes and $db_themes_by_id
*/
- function themes()
+ function __construct()
{
$this->get_fs_themes();
@@ -736,4 +736,4 @@ SELECT
}
}
-?> \ No newline at end of file
+?>
diff --git a/admin/include/updates.class.php b/admin/include/updates.class.php
index 17a3b2578..d4e178f8a 100644
--- a/admin/include/updates.class.php
+++ b/admin/include/updates.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -135,15 +135,33 @@ class updates
{
return false;
}
+
+ $servers = array();
+
foreach ($pem_exts as $ext)
{
if (isset($ext_to_check[$ext['extension_id']]))
{
- $server = 'server_'.$ext_to_check[$ext['extension_id']];
- $this->$ext_to_check[$ext['extension_id']]->$server += array($ext['extension_id'] => $ext);
+ $type = $ext_to_check[$ext['extension_id']];
+
+ if (!isset($servers[$type]))
+ {
+ $servers[$type] = array();
+ }
+
+ $servers[$type][ $ext['extension_id'] ] = $ext;
+
unset($ext_to_check[$ext['extension_id']]);
}
}
+
+ foreach ($servers as $server_type => $extension_list)
+ {
+ $server_string = 'server_'.$server_type;
+
+ $this->$server_type->$server_string = $extension_list;
+ }
+
$this->check_missing_extensions($ext_to_check);
return true;
}
diff --git a/admin/index.php b/admin/index.php
index c8de97f60..0b96c3efa 100644
--- a/admin/index.php
+++ b/admin/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/intro.php b/admin/intro.php
index ee0149841..96b07d2a8 100644
--- a/admin/intro.php
+++ b/admin/intro.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/languages.php b/admin/languages.php
index c901d923c..0ea4c17df 100644
--- a/admin/languages.php
+++ b/admin/languages.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/languages_installed.php b/admin/languages_installed.php
index eb0a89578..16d9df651 100644
--- a/admin/languages_installed.php
+++ b/admin/languages_installed.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/languages_new.php b/admin/languages_new.php
index bf46cbb71..afa756c56 100644
--- a/admin/languages_new.php
+++ b/admin/languages_new.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/maintenance.php b/admin/maintenance.php
index 5c933461e..9befd5032 100644
--- a/admin/maintenance.php
+++ b/admin/maintenance.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/menubar.php b/admin/menubar.php
index 69e363ccc..e884fab56 100644
--- a/admin/menubar.php
+++ b/admin/menubar.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/notification_by_mail.php b/admin/notification_by_mail.php
index 38cadff6c..ca3d4127c 100644
--- a/admin/notification_by_mail.php
+++ b/admin/notification_by_mail.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -289,13 +289,24 @@ function do_action_send_mail_notification($action = 'list_to_send', $check_key_l
if ($is_action_send)
{
+ $auth = null;
+ $add_url_params = array();
+
+ $auth_key = create_user_auth_key($nbm_user['user_id'], $nbm_user['status']);
+
+ if ($auth_key !== false)
+ {
+ $auth = $auth_key['auth_key'];
+ $add_url_params['auth'] = $auth;
+ }
+
set_make_full_url();
// Fill return list of "treated" check_key for 'send'
$return_list[] = $nbm_user['check_key'];
if ($conf['nbm_send_detailed_content'])
{
- $news = news($nbm_user['last_send'], $dbnow, false, $conf['nbm_send_html_mail']);
+ $news = news($nbm_user['last_send'], $dbnow, false, $conf['nbm_send_html_mail'], $auth);
$exist_data = count($news) > 0;
}
else
@@ -362,7 +373,7 @@ function do_action_send_mail_notification($action = 'list_to_send', $check_key_l
array
(
'TITLE' => get_title_recent_post_date($date_detail),
- 'HTML_DATA' => get_html_description_recent_post_date($date_detail)
+ 'HTML_DATA' => get_html_description_recent_post_date($date_detail, $auth)
)
);
}
@@ -373,7 +384,7 @@ function do_action_send_mail_notification($action = 'list_to_send', $check_key_l
array
(
'GOTO_GALLERY_TITLE' => $conf['gallery_title'],
- 'GOTO_GALLERY_URL' => get_gallery_home_url(),
+ 'GOTO_GALLERY_URL' => add_url_params(get_gallery_home_url(), $add_url_params),
'SEND_AS_NAME' => $env_nbm['send_as_name'],
)
);
@@ -389,6 +400,7 @@ function do_action_send_mail_notification($action = 'list_to_send', $check_key_l
'email_format' => $env_nbm['email_format'],
'content' => $env_nbm['mail_template']->parse('notification_by_mail', true),
'content_format' => $env_nbm['email_format'],
+ 'auth_key' => $auth,
)
);
@@ -707,6 +719,20 @@ switch ($page['mode'])
}
}
$template->assign($page['mode'], $tpl_var);
+
+ if ($conf['auth_key_duration'] > 0)
+ {
+ $template->assign(
+ 'auth_key_duration',
+ time_since(
+ strtotime('now -'.$conf['auth_key_duration'].' second'),
+ 'second',
+ null,
+ false
+ )
+ );
+ }
+
break;
}
}
diff --git a/admin/permalinks.php b/admin/permalinks.php
index 72f951322..e09a2130b 100644
--- a/admin/permalinks.php
+++ b/admin/permalinks.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/photo.php b/admin/photo.php
index b99a76cfd..c1d0687a9 100644
--- a/admin/photo.php
+++ b/admin/photo.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/photos_add.php b/admin/photos_add.php
index 72bf99158..457e28150 100644
--- a/admin/photos_add.php
+++ b/admin/photos_add.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/photos_add_applications.php b/admin/photos_add_applications.php
index 82c95fddf..1cb35e939 100644
--- a/admin/photos_add_applications.php
+++ b/admin/photos_add_applications.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/photos_add_direct.php b/admin/photos_add_direct.php
index 9f3e88866..fd4efe5f7 100644
--- a/admin/photos_add_direct.php
+++ b/admin/photos_add_direct.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/photos_add_ftp.php b/admin/photos_add_ftp.php
index 5655d0f6e..e48a23754 100644
--- a/admin/photos_add_ftp.php
+++ b/admin/photos_add_ftp.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/picture_coi.php b/admin/picture_coi.php
index 6ad8fa98c..26540d63e 100644
--- a/admin/picture_coi.php
+++ b/admin/picture_coi.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/picture_modify.php b/admin/picture_modify.php
index bf0e458e6..ab62c5624 100644
--- a/admin/picture_modify.php
+++ b/admin/picture_modify.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -306,6 +306,25 @@ SELECT
$intro_vars['stats'].= ', '.sprintf(l10n('Rated %d times, score : %.2f'), $row['nb_rates'], $row['rating_score']);
}
+$query = '
+SELECT *
+ FROM '.IMAGE_FORMAT_TABLE.'
+ WHERE image_id = '.$row['id'].'
+;';
+$formats = query2array($query);
+
+if (!empty($formats))
+{
+ $format_strings = array();
+
+ foreach ($formats as $format)
+ {
+ $format_strings[] = sprintf('%s (%.2fMB)', $format['ext'], $format['filesize']/1024);
+ }
+
+ $intro_vars['formats'] = l10n('Formats: %s', implode(', ', $format_strings));
+}
+
$template->assign('INTRO', $intro_vars);
diff --git a/admin/plugin.php b/admin/plugin.php
index dd6d989e9..68e0c50d7 100644
--- a/admin/plugin.php
+++ b/admin/plugin.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/plugins.php b/admin/plugins.php
index efe3bd833..9377affdb 100644
--- a/admin/plugins.php
+++ b/admin/plugins.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/plugins_installed.php b/admin/plugins_installed.php
index a804e21ce..b87921c02 100644
--- a/admin/plugins_installed.php
+++ b/admin/plugins_installed.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/plugins_new.php b/admin/plugins_new.php
index a8df9359c..2ef02f1bb 100644
--- a/admin/plugins_new.php
+++ b/admin/plugins_new.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/popuphelp.php b/admin/popuphelp.php
index 7d0a0cf8b..51820fe0f 100644
--- a/admin/popuphelp.php
+++ b/admin/popuphelp.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/profile.php b/admin/profile.php
index 5554fe1cd..71a929950 100644
--- a/admin/profile.php
+++ b/admin/profile.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/rating.php b/admin/rating.php
index 1592125c6..3525cbdd1 100644
--- a/admin/rating.php
+++ b/admin/rating.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/rating_user.php b/admin/rating_user.php
index e6eea9ee9..e7789932d 100644
--- a/admin/rating_user.php
+++ b/admin/rating_user.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/site_manager.php b/admin/site_manager.php
index 21fdebd40..0712da3ea 100644
--- a/admin/site_manager.php
+++ b/admin/site_manager.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/site_reader_local.php b/admin/site_reader_local.php
index 7e618ca17..c157b38c7 100644
--- a/admin/site_reader_local.php
+++ b/admin/site_reader_local.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -100,14 +100,19 @@ function get_elements($path)
{
$representative_ext = $this->get_representative_ext($path, $filename_wo_ext);
}
- $fs[ $path.'/'.$node ] = array(
- 'representative_ext' => $representative_ext,
- );
+
+ $fs[ $path.'/'.$node ] = array('representative_ext' => $representative_ext);
+
+ if ($conf['enable_formats'])
+ {
+ $fs[ $path.'/'.$node ]['formats'] = $this->get_formats($path, $filename_wo_ext);
+ }
}
}
else if (is_dir($path.'/'.$node)
and $node != 'pwg_high'
and $node != 'pwg_representative'
+ and $node != 'pwg_format'
and $node != 'thumbnail' )
{
$subdirs[] = $node;
@@ -182,6 +187,26 @@ function get_representative_ext($path, $filename_wo_ext)
return null;
}
+function get_formats($path, $filename_wo_ext)
+{
+ global $conf;
+
+ $formats = array();
+
+ $base_test = $path.'/pwg_format/'.$filename_wo_ext.'.';
+
+ foreach ($conf['format_ext'] as $ext)
+ {
+ $test = $base_test.$ext;
+
+ if (is_file($test))
+ {
+ $formats[$ext] = floor(filesize($test) / 1024);
+ }
+ }
+
+ return $formats;
+}
}
?> \ No newline at end of file
diff --git a/admin/site_update.php b/admin/site_update.php
index 5bcaea12a..ad3ccba19 100644
--- a/admin/site_update.php
+++ b/admin/site_update.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -457,6 +457,7 @@ if (isset($_POST['submit']) and $_POST['sync'] == 'files'
$start= $start_files;
$fs = $site_reader->get_elements($basedir);
+
$template->append('footer_elements', '<!-- get_elements: '
. get_elapsed_time($start, get_moment())
. ' -->' );
@@ -486,6 +487,8 @@ SELECT id, path
$inserts = array();
$insert_links = array();
+ $insert_formats = array();
+ $formats_to_delete = array();
foreach (array_diff(array_keys($fs), $db_elements) as $path)
{
@@ -535,20 +538,119 @@ SELECT id, path
'info' => l10n('added')
);
+ if ($conf['enable_formats'])
+ {
+ foreach ($fs[$path]['formats'] as $ext => $filesize)
+ {
+ $insert_formats[] = array(
+ 'image_id' => $insert['id'],
+ 'ext' => $ext,
+ 'filesize' => $filesize,
+ );
+
+ $infos[] = array(
+ 'path' => $insert['path'],
+ 'info' => l10n('format %s added', $ext)
+ );
+ }
+ }
+
$caddiables[] = $insert['id'];
}
- if (count($inserts) > 0)
+ // search new/removed formats on photos already registered in database
+ if ($conf['enable_formats'])
{
- if (!$simulate)
+ $db_elements_flip = array_flip($db_elements);
+
+ $existing_ids = array();
+
+ foreach (array_intersect_key($fs, $db_elements_flip) as $path => $existing)
+ {
+ $existing_ids[] = $db_elements_flip[$path];
+ }
+
+ $logger->debug('existing_ids', 'sync', $existing_ids);
+
+ if (count($existing_ids) > 0)
+ {
+ $db_formats = array();
+
+ // find formats for existing photos (already in database)
+ $query = '
+SELECT *
+ FROM '.IMAGE_FORMAT_TABLE.'
+ WHERE image_id IN ('.implode(',', $existing_ids).')
+;';
+ $result = pwg_query($query);
+ while ($row = pwg_db_fetch_assoc($result))
+ {
+ if (!isset($db_formats[$row['image_id']]))
+ {
+ $db_formats[$row['image_id']] = array();
+ }
+
+ $db_formats[$row['image_id']][$row['ext']] = $row['format_id'];
+ }
+
+ // first we search the formats that were removed
+ foreach ($db_formats as $image_id => $formats)
+ {
+ $image_formats_to_delete = array_diff_key($formats, $fs[ $db_elements[$image_id] ]['formats']);
+ $logger->debug('image_formats_to_delete', 'sync', $image_formats_to_delete);
+ foreach ($image_formats_to_delete as $ext => $format_id)
+ {
+ $formats_to_delete[] = $format_id;
+
+ $infos[] = array(
+ 'path' => $db_elements[$image_id],
+ 'info' => l10n('format %s removed', $ext)
+ );
+ }
+ }
+
+ // then we search for new formats on existing photos
+ foreach ($existing_ids as $image_id)
+ {
+ $path = $db_elements[$image_id];
+
+ $formats = array();
+ if (isset($db_formats[$image_id]))
+ {
+ $formats = $db_formats[$image_id];
+ }
+
+ $image_formats_to_insert = array_diff_key($fs[$path]['formats'], $formats);
+ $logger->debug('image_formats_to_insert', 'sync', $image_formats_to_insert);
+ foreach ($image_formats_to_insert as $ext => $filesize)
+ {
+ $insert_formats[] = array(
+ 'image_id' => $image_id,
+ 'ext' => $ext,
+ 'filesize' => $filesize,
+ );
+
+ $infos[] = array(
+ 'path' => $db_elements[$image_id],
+ 'info' => l10n('format %s added', $ext)
+ );
+ }
+ }
+ }
+ }
+
+
+ if (!$simulate)
+ {
+ // inserts all new elements
+ if (count($inserts) > 0)
{
- // inserts all new elements
mass_inserts(
IMAGES_TABLE,
array_keys($inserts[0]),
$inserts
);
-
+
// inserts all links between new elements and their storage category
mass_inserts(
IMAGE_CATEGORY_TABLE,
@@ -562,9 +664,30 @@ SELECT id, path
fill_caddie($caddiables);
}
}
- $counts['new_elements'] = count($inserts);
+
+ // inserts all formats
+ if (count($insert_formats) > 0)
+ {
+ mass_inserts(
+ IMAGE_FORMAT_TABLE,
+ array_keys($insert_formats[0]),
+ $insert_formats
+ );
+ }
+
+ if (count($formats_to_delete) > 0)
+ {
+ $query = '
+DELETE
+ FROM '.IMAGE_FORMAT_TABLE.'
+ WHERE format_id IN ('.implode(',', $formats_to_delete).')
+;';
+ pwg_query($query);
+ }
}
+ $counts['new_elements'] = count($inserts);
+
// delete elements that are in database but not in the filesystem
$to_delete_elements = array();
foreach (array_diff($db_elements, array_keys($fs)) as $path)
diff --git a/admin/stats.php b/admin/stats.php
index e103c2ea9..5398d0b26 100644
--- a/admin/stats.php
+++ b/admin/stats.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/tags.php b/admin/tags.php
index c643391c9..ce503ba67 100644
--- a/admin/tags.php
+++ b/admin/tags.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/theme.php b/admin/theme.php
index 984ac451b..eef3fb199 100644
--- a/admin/theme.php
+++ b/admin/theme.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/themes.php b/admin/themes.php
index 5359974f4..a903ddb8f 100644
--- a/admin/themes.php
+++ b/admin/themes.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/themes/clear/icon/index.php b/admin/themes/clear/icon/index.php
index e3365959c..6a7aa65b4 100644
--- a/admin/themes/clear/icon/index.php
+++ b/admin/themes/clear/icon/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/themes/clear/index.php b/admin/themes/clear/index.php
index d959f2c09..f08fc4442 100644
--- a/admin/themes/clear/index.php
+++ b/admin/themes/clear/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/themes/default/fontello/README.txt b/admin/themes/default/fontello/README.txt
index 43e23f283..a91438a9a 100644
--- a/admin/themes/default/fontello/README.txt
+++ b/admin/themes/default/fontello/README.txt
@@ -11,7 +11,7 @@ webfont pack. Details available in LICENSE.txt file.
- If your project is open-source, usually, it will be ok to make LICENSE.txt
file publically available in your repository.
-- Fonts, used in Fontello, don't require to make clickable links on your site.
+- Fonts, used in Fontello, don't require a clickable link on your site.
But any kind of additional authors crediting is welcome.
================================================================================
@@ -29,8 +29,8 @@ Comments on archive content
- LICENSE.txt - license info about source fonts, used to build your one.
-- config.json - keeps your settings. You can import it back to fontello anytime,
- to continue your work
+- config.json - keeps your settings. You can import it back into fontello
+ anytime, to continue your work
Why so many CSS files ?
@@ -38,17 +38,17 @@ Why so many CSS files ?
Because we like to fit all your needs :)
-- basic file, <your_font_name>.css - is usually enougth, in contains @font-face
- and character codes definition
+- basic file, <your_font_name>.css - is usually enough, it contains @font-face
+ and character code definitions
- *-ie7.css - if you need IE7 support, but still don't wish to put char codes
directly into html
- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face
- rules, but still wish to benefit of css generation. That can be very
- convenient for automated assets build systems. When you need to update font -
- no needs to manually edit files, just override old version with archive
- content. See fontello source codes for example.
+ rules, but still wish to benefit from css generation. That can be very
+ convenient for automated asset build systems. When you need to update font -
+ no need to manually edit files, just override old version with archive
+ content. See fontello source code for examples.
- *-embedded.css - basic css file, but with embedded WOFF font, to avoid
CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain.
@@ -63,11 +63,11 @@ Because we like to fit all your needs :)
Attention for server setup
--------------------------
-You MUST setup server to reply with proper `mime-types` for font files. In other
-case, some browsers will fail to show fonts.
+You MUST setup server to reply with proper `mime-types` for font files -
+otherwise some browsers will fail to show fonts.
Usually, `apache` already has necessary settings, but `nginx` and other
-webservers should be tuned. Here is list of mime types for our file extentions:
+webservers should be tuned. Here is list of mime types for our file extensions:
- `application/vnd.ms-fontobject` - eot
- `application/x-font-woff` - woff
diff --git a/admin/themes/default/fontello/config.json b/admin/themes/default/fontello/config.json
index 16b7c6070..20c3fe735 100644
--- a/admin/themes/default/fontello/config.json
+++ b/admin/themes/default/fontello/config.json
@@ -385,6 +385,12 @@
"src": "iconic"
},
{
+ "uid": "862129f833b09f3d34ae39acf8484a7b",
+ "css": "heart-broken",
+ "code": 59429,
+ "src": "mfglabs"
+ },
+ {
"uid": "05ef9b5e8742971aa85b23cfcbe71594",
"css": "users",
"code": 59394,
diff --git a/admin/themes/default/fontello/css/fontello-codes.css b/admin/themes/default/fontello/css/fontello-codes.css
index b569e79a5..d31cf3433 100644
--- a/admin/themes/default/fontello/css/fontello-codes.css
+++ b/admin/themes/default/fontello/css/fontello-codes.css
@@ -52,6 +52,7 @@
.icon-cancel:before { content: '\e822'; } /* '' */
.icon-plus:before { content: '\e823'; } /* '' */
.icon-ok-circled:before { content: '\e824'; } /* '' */
+.icon-heart-broken:before { content: '\e825'; } /* '' */
.icon-zoom-in:before { content: '\e827'; } /* '' */
.icon-zoom-out:before { content: '\e828'; } /* '' */
.icon-tasks:before { content: '\f0ae'; } /* '' */
diff --git a/admin/themes/default/fontello/css/fontello-embedded.css b/admin/themes/default/fontello/css/fontello-embedded.css
index c30c9f768..e17d676a8 100644
--- a/admin/themes/default/fontello/css/fontello-embedded.css
+++ b/admin/themes/default/fontello/css/fontello-embedded.css
@@ -2,16 +2,16 @@
@font-face {
font-family: 'fontello';
- src: url('../font/fontello.eot?76878460');
- src: url('../font/fontello.eot?76878460#iefix') format('embedded-opentype'),
- url('../font/fontello.svg?76878460#fontello') format('svg');
+ src: url('../font/fontello.eot?37675340');
+ src: url('../font/fontello.eot?37675340#iefix') format('embedded-opentype'),
+ url('../font/fontello.svg?37675340#fontello') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'fontello';
- src: url('data:application/octet-stream;base64,d09GRgABAAAAAC9EAA4AAAAASawAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWfC1hKmNtYXAAAAGIAAABRwAAA1ads+uKY3Z0IAAAAtAAAAAKAAAACgAAAABmcGdtAAAC3AAABZQAAAtwiJCQWWdhc3AAAAhwAAAACAAAAAgAAAAQZ2x5ZgAACHgAACG5AAAxnDpVppxoZWFkAAAqNAAAADYAAAA2BEQWa2hoZWEAACpsAAAAHgAAACQIYARFaG10eAAAKowAAABmAAABDPAzAABsb2NhAAAq9AAAAIgAAACIuQfFQm1heHAAACt8AAAAIAAAACAA+gx1bmFtZQAAK5wAAAF3AAACzcydGhxwb3N0AAAtFAAAAcYAAAKSmuQ80nByZXAAAC7cAAAAZQAAAHvdawOFeJxjYGSexjiBgZWBg6mKaQ8DA0MPhGZ8wGDIyMTAwMTAysyAFQSkuaYwOKix/v/PHPQ/iyGKOYJhGlCYESQHAPboDCp4nN3Su0oDQRQG4H/IRROTDAjBacQUm50ELMX7ensDwSJgayVWvoS+QIo8gySkSu0jWGa7BYUZtMgGL1hE4pk5aVII2jrwzT+HPbM7sAMgCyBDAgi48USV8HUGRUA8U8c91euo0aoEhPmwE450QVd0O+maoimbmmmayAxsYBtpL+2nSWrH9enUvS7M/dgNq+e740l8GVeHk+Hn8HrtXE3Vl3pRj+pBtZRUZXkrb2RLnsrq7KS/HiL/t/5/OUpuElezanX+YZhz/9U1UHaYuxXhiLlbogsM1KsrDLRHtxkWgKTLsAiYIgPtMWXmbpSpMSxRNpk7nYkYXO+Agb5hKWxAk6TUpEHrDSDtMWxS9hm2KBOGbUrLsAOM6wy7EK9ZD9iDeLvwgH2Id3hARLnsAQeUKx5wSKk94IjyzAOOIT7uPODkGz4IhX8AAAAAAAAAAAAAAAAAeJytVmlzE0cQndVhyzY+gg8SNoFZxnKMdlaYywgQxuxKFuAc8pXsQo5dS3bui0/8Bv2aXpFUkW/8tLweHdhgJ1VUKEr9pvftTPfrnl6T0JLEXliPpNx8Kaa2Nmlk50lIN2xajuJD2dkLKVNM/i6Igmi11L7tOCQiEoGqdYUlgtj3yNIk40OPMlq2Jb1qUm7pSXfZGg/qrfr209BRjt0JJTWboUPrkS2pwqgSRTLtkZI2LcPVX0la4ecrzHzVDCWC6CSSxpthDI/kZ+OMVhmtxnYcRZFNlhtFikQzPIgij7JaYp9cMUFA+aAZUl75NKJ8hB+RFXuU0wpxyXaa3/clP+kdzr8k4nqLsiUH/kB2ZAd7pyv5ItLaCuOmnWxHoYrwdH0nxCObk+qf7FFe02jgdkWmJ80IlspXkFj5CWX2D8lq4XzKlzwa1ZKDnAhaL3NiX/IOtB5HTIlrJsiC7o5OiKDul5yh2GP6uPjjvV0sFyEEyDiW9Y5KuBBGKWGzmiRtBDmIkrJFldR6R0yc8jot4i1hv07t6EtntEmoOzGerYeOrZyo5Hg0qdNMpk7tpObRlAZRSjoTPObXAZQf0SSvtrGaxMqjaWwzYySRUKCFc2kqiGUnljQF0Tya0Zu7YZpr16JFmjxQzz16T29uhZs7PaftwD9r/Gd1KqaDvTCdng7ISnyadrlJ0bp+eoZ/JvFD1gIqkS02w5TFQ7Z+B+XlY0uOwmsDbPee8yvoffZEyKSB+BvwHi/VKQVMhZhVUAvdtNa1LMvUalaLVGTquyFNK1/WaQJNOQ59Y1/GOP6vmRlLTAnf78Tp2RGXnrn2Jcg0h9xmXY/mdWqxXYDObM/pNMv2fZ3m2H6g0zzb8zodYWvrdJTthzotsP1Ip2NsL2hBk+47BHIRgVzABhKBsHUQCNtLCIStQiBsFxEI2yICYbuEQNh+jEDYLiMQtpe1rJp+KmkcOxPLAEWIA6M57shlbipXU8mlEq6LRqc25Clyq6SieFb9KwP94pE3rIG1QLpE1vyKSa58VJXjj65oedPEuQKOVX97c1yfEw9lv1j4U/C/2pqqpFeseWRyFXkj0JPjRNcmFY+u6fK5qkfX/4uKDmuBfgOlEAtFWZYNvpmQ8FGn01ANXOUQMxszD9f1umXNz+H8mxghC+h+/DcUGgvcg05ZSVntYK/V149lubcH5bAnWJJivszrW+GLjMxK+0VmKXs+8nnAFTAqlWGrDVyt4M17EvOQ6U3yTBC3FWWDpI3HmSCxgWMeMG++kyAkTF21gdopnLCBvGDMKdjvhENUb5TlcHuhfR6NlH9rV+zIGRVNEPht9kbY67NQ8lusgYQnv9TXQFUhTcW4qYBLI+WGavBhXK3bRjJOoK+o2A3LsooPH0fcd0qOZSD5SBGrR0c/rb1CndS5/coobt87/QiCQWli/va+meKglHe1kmVWbQNTtxqVU9eaw8WrDt3No+57x9knctY03XRP3PS+plW3g4O5WRDt2xyUpUwuqOvDDhuoy82l0OplXJLedg8wLDCg36EVG/9X93H4PFeqCqPjSL2dqB+jz2IM8g84f0f1BejnMUy5hpTne5cTn27cw9kyXcVdrJ/i38CsteZm6RpwQ9MNmIesWh26yg18pwY6PdLcjvQQ8LHuCvEAYBPAYvCJ7lrG8ymA8XzGHB/gc+YwaDKHwRZzGGwzZw1ghzkMdpnDYI85DL5gzjrAl8xhEDKHQcQcBk+YEwA8ZQ6Dr5jD4GvmMPiGOfcBvmUOg5g5DBLmMNjXdGsoc4sXdBeobVAV6MD0Exb3sDjUVBmyv+OFYX9vELN/MIipP2q6PaT+xAtD/dkgpv5iEFN/1XRnSP2NF4b6u0FM/cMgpj7TL8ZymcFfRr5LhQPKLjaf8/fE+wfCGkC2AAEAAf//AA94nI16DXQc1ZVmvVfVVdXVperq7uqqVqu71L/V7Xar1e5f0ZbbQmpkRZaFEEIYYYTXEUaRNcYxisZLbI9jc8CwjOXxMB7icACzhvESYMGGkGRYkyVkzh6HM8chE5IdMnvYJJsx+SHZbE7WYa3y3lfVsmUDZyJ1v6r33q3qV+/d+93v3lcUoqhLZ+njdA8VodjTigN1rPSUqslqpdCOHKpfcSMflBLqRBwbM8qlqi9ltKPAXldE3IMCEfd380j0i//voxa/iPLfldAHfkfa1DQz7fCL7u+YHzC8S0bc/fdzXoHhkfYdN0VReNlvZij+1RVxrwN/4u/GY1f/LlfVUlVoumYEmnBlBF/86orvf3/FV38587lPGEto+UjUZ355zz2/fCb+gx80x/QyPUEL1J3UNIxp65Z+jYypXKqsRZWqkTJK1ToqwugqVfhfjQpqO1I1GK+maioMF6o64vwK60YsR5o4CaVg+CwH/ysRPEPKSMGzpJq3qhqdKIeSilqo5FCMFRzTvKQlWYd7pIXjNwSCTp727OZE5A6pIw43N6AwzGrJuZUTEM9NCy5f2hblNrQGnRwj7+ZFuU27kZXZfpVx8GnBzW/leBQemx/DI/eNoCi5l9wajHRwIqeMOLpb+KGQm+fvdordDkdfyCGxG0JtbiRylqDuD61iZcY/gmxJWeDudrpWO9i17SApFtyWbGP1GNx/DKaPYmH+djKd9Ges+TtBvU99QP2O8vRIv/3Vv/70H1/6q7mtW9Zp7J84oWT5YRLJjIbRVTMa/8QZLV+Z0CqZ0JIRYxE0ws+US/BrxQLcWIPfte5N7gW3hbuQCmvdMpaSEGffCUbmueZaGNOnXmykrIsvX+uzV1RCvqWl5R3jnMvXzjBiQ2DZHl+A5eiWaVZALT6119HiuIkJePgW9hYHD5KsSCRbel2so8evshxDJFt8Wi/Two4wjgTfwoHgu2Ta58fQCzdzQpguyYjJ8B5PSGNwHw45uZtvZoUQbiCHP+wSXVyWRg06LEDzFWlRED8unuEtccaWXsjUsijblUVLx5V3w6Aln9aWZEWH3MsUBL472MKzt7CuVQyz3u1w6P6WNp+IeW6ZJOMBSRfb3WZJigVbks+KAbUF8TVbhcx9w06n3LJWwlh3lkSE0hpKYSytbZGdzmEn75ZIV7otiZCrhNKkR3Lz+AbounIVCFy+ioernPZVKXI/sZSyL3Iu/j6cgSfCaRzWM5nVmQxFX7oEtn8ef5tyUyuoz1DCa/3FgFek6Y6VZU+pUowWVL9HYblozAD1gmql6iFKKGGihZ0IVj1VVgAHdKZaLNRp0J06WgOQabCpaIwtJelKslRKXjybqAyILF0BG/b6/+a2UKK7DQfrntzGo37v6OwcE/FGAiJ2BXVFd8zN6iVM0wx78SwnuPCd5AaLx5MlVEnwgsCj5xXPzsFAKBiUjMGdHuX05PVjm+iQpIhIUEUdbxoLjEYkyeHAtEgxFrZtwJfgzEW1UnGqpUeIh5QWgcMU07HSX0Ywb0V/sZriqkqxUEWVcike4xCLLDwm8IbOnTfzxwe6CweKd7Y4GNRJiw7G/B6Dhu9QVqsHFOWOGz8gMp0L64oHijeLDMoxsPbmOwz6xia//4Ba899BXcbZTbSLEqk84GzK76Qt7K+jgo4kHLNMuFr0K6pWhIkuQ7EGlQwuXi4ZqXiM5fxQaHNvfvitXezs2z/5x+kXFPeCKq1zK2hBUlXpyjlCk194a27urV+Q4iaoL0A7CCjugeUVimIuLV56k/4BjagOqkpdT60n8/OZxtpaOb8Cw/z4jApgEUsWGFULVbVShWMdATikyiqcaGCnEg1gEDVStqzKwlmd+ASleaYBeBkpxBglZxnwTOcK6c622JbWto1hUaYdGAXjq3YZUSa6ZjzfyPo7zKfH/L1spcb7mUxB3IW7exi+q4YeY3priHXUCgx+PRlR274ejusvlrpRMsWkkny7HPFHxZAhxDp6WwP9SuvO7bvbvewOdKwjHUh8b0VWMlD7Cj0SvbA6llmBqJUBI2p2GulOiqJhXf4INrCHkqkYVQAb6EwGfKKDtvxyJYsYAsAsE0mkDHj8CEFwQEDbN7MawTpA9iLBXi7GuoYRjwzED7tcw+YF85/NC8OudevfR8z762/ZFzty7khs34uyKjfyLll29U+hmk/Zdww/sVcxfF86duxLPt/Ogwd33n99rW/6yJHpvtr13UQu34BL0JQ91v/CJECHfFTIGmsqHNQkhrbdS5VANigtR2Ddcgk6qiNDQskrHQS3UaVEujPhD8IDfrSgKOaH6mrF/Lxf35bpTuNsVw5F9lhdfj90hZWgjFg4/bx/AL13PpxBOjlfDX1+IjNwTLcuYmN/daVD9sAlq0m3buv+SxbOJABl+Fev75SX6b5C+EKK4AoMrmyUKuW1uJKq1nE1h5BKbKGOUqUUCLKcjkDH2mmLYxD0geeZeeXdV2ZmXtmWL/Tf4m/DrIgwYmgagWeXmBuG0a0Rz8SJ3huGUMvA2EjDIfJtTsbB0AgLfJv/lv5C/m/RM8P3Dw3d//j+YeQsqA5GYDHDIJrFGOmOgFdOz5n/ky50lh4YXJlJ7XpwPiWpQtRFOwDqMS8gxqGtclo84GXaC2sTpzqptdQ66lbqbsIDPnv7zesbPauLuVTQ2eQBq4kVkdVqBx5AvCp4dcDZOOBsygOT4IOFA7Sto7In6vOULI5AgJigrq8Ijx1nuWvbq9fUBf75lDOrnlKzfOoFgpyVUtLMA46WeWGB5zE6h3neFNcJvIWrUFQ+amMcL7NM/UrTApScIHBwivuhuMMfQrpyh9W3+JtcozeHfcLi/xIVQVBE7DF70fXkSvMNKLF0vQMhx+I3lrXxy84pW59foo/jt4ANF6lu0OdaZVVHGFu2VwEY1Ol2tOSEHMQOoQJcKEqMD2aHJnNVqoAOscAol04A3JwSD6tH4yck1SstfoNFLRi5Vez1LH5HUkV1y0638oMlVf9D8wQ/6VYRK8qSU1Il8yctKmoEHZ6gGgJs5UMGRm8ri59retD25hGeAYEPPYufxf+buhHiiHoY4gigPoDkhWpF1fzNxQGMAGrGga9kU8QEQQk01QKNVIxjjaqlFIUK4VKVgsoB4KjVpmqkDDyYrFSSqj+oonz7AgzQ39jSQC0eQVmIZpFXDbQZlYrh9wcDKBdZ8IkeqX9zP/ILsnuhPa8oAXSksXkAt3hE7+H2nFdtDRqlkqGqcLtc+2FZEpTGVA8mt7s9mlPalADpDrb6FZSL3k66KQes00/oj/A/U9dZXuKz1FbK3SNundo8sq53zeo07YCHBl8AhNIgxirRqZxNQ4Egpkpg1JVitZQqgYcthIFZVgA2/aob+eERHWqV2L4C9p4ywMPFk6pXVWDSykTLrZOKj0wOXaTpH+sjkwKOYGa8npFzA1NdpZ7uQg9+RGQEzDKPYz7HCk+wPOYZ/iVxfLf5bCjGxILZk6FunU90Yx6bdWF8hBlnCy/lMTvOCM9ifrOw//AAKoy+3osNlun+epcxNJbj2f7aWE9BngpgFlcYzIS2M3DbaRV+KANffevA+6z4rhjK7lcDG/tZLz4VMj+8wDLPngDs8GKVN19HPPH7DgsXzgMuuKl2CxluJHO3vm91cWW8zecic+e3l7+JBLEldbhS/zds/eO2v42YGRTvXjn9ocDNEluG4t1PFFizdCLwpy8XqNcy2DOkxAFSLp4nJV0h5cWzliETfH+IeZkuUKuouwDfb7ourwK+l62AB5CuRLDajhKgVtDxUhTBsYTu6Bj4hV+LoqbEsn4Ja7aAH2hQDoNapcCUbOZpKOkbwv5kGrX7pA7JwTjqM9etHKvHaIaROtyeSNoI752SvQq6eAT/V9GBmcLGTeMlBjxEQnQ7AbhjuqfQ7zZZXhW17lVtDp52Si3JVZw76HL5BlNtSX/KW1vpTa2szoAbrY9mqm2+TM27wpdsSw363Lm019MNHvD7MTkS79jYhUubVsYjciwvRT0CQGKkW3YqAe5BF2fEMmKr4Y1lBUFmBXdMpgj3+ujSMfr/0EFqJXCvcWqScK/bNw6sra4K8oR7SUiJkxmybQr4KJk6clItaAXSQeJvYFQwJ+DbyQkyYL6TKgeQ4UbgQOFCCDBVIgui1k1UVNWsW34FANLjZmSx39WCIwyb0aFBMtQHSvcFRWVXZCQbY3hhSGIytQvomFfJq7K5hecHRFyQI4XpruxooxGQYC73iSIjxiTGqBlsGjPeiyfNoT8o3pyKPuJDqruFkbxDoogDDBvKs5IuT7CYLwW6ajkMNsYz+UDBTKhyRvKiH/Finf/WdH1jUMwOD/cHagNqVxfrZSF6LITSdbEGdrfYuDD+O0XOeZt8+nbL3/aDzhVTbYRTLJkSxM7gQwuXQ+wwIjG0FTYbvjKJv62QW+WaCA2qStBnKcJWpY8kFTs3pKeqg/tTrOYQwS4SP/vyTY91D7hCqpD4+ZdvOkZOA1iRbdHRHettyXs4kYMmNeTakEwP1oWuFpFljn6zft2AS0VvL51JTZENtgSFwY98m/4Avwxxyip4nkzMzxAbIqE4GX7UHisXJQUBWkIkilHiL+xABR5sDQLP6DjtcAs0xUFAxC9SAs9ypxxgr5QgwYnVuQidB3kHad4GH4jKyJc95UBVeEr4QJcMkiK7zR7XH5lWmGcVYkT+1WRIIfNc9ixBVNQqYqwb8FuD0dYJdSEDsh31YPF0cRB1FgfNfHln/HWMUMbzemA8ie/06d6/D4wbi8d9oXkcKA4OFr2DxYnSin+hOccmj/IvobQU95ESxnDx0l76R/Qg1QIYyr/arvAIxlCtWEjBVkkWBKkUObdYoaX31LwxOSomxg+NMWwpQM8GzRPzxjjPe/VITOZ70vPorediwshkYswrBhm2+zl8Mmg25oxeVorpEbDTMWMOjVsx5DfxPhpTWapM1YHXgZ32ra1Vip1BGewUKSQEgs/loMBjO3HAL3+FsFi76ljKz/jsg6KipRO8b5DNDtdymUwpwPT3T/UPDJAivaVWKlj1xVfSXZlMV7oRImUaPW8f8cMjem28FJAkOZJP6COF/v7CcAzdFxsiZ0Oxt3Xdq3bnIlY1lE7X0unFflLW0nijfbQ52AV6AjiY7Z+E17LELZGYAsLPSrWpdxDPGzRhLZ9SJzkCVaI9wKEU+eJvrBjzU2vhdVbLOtKAOkhQaoemULHaZKvfHts3GBV/k/JTSWo1jK3aGW31kLH5ShCsNzVfs9Uf8A9BxGmlI2mSuCWccC3ECZYJLQVGYDmtLHB2mQmx7HvvsSzJAJoXWTR3jha5OMfT57DExngW9Tvee8/hCLESEXeAiASyqMY7EEOukpkfv2c1kbr5n/A5uARIL7vYCfdw0uJejn3vx3Bv+BnzItgTFHAzC7ceBz4QodJUieBWR4DYU5IYUZl4SxLug5sj2ULQZNAcN1L9RMUQ+Mpk0R8HVxgvF8tFPPvKxfcTucn+HE84CcPwDLvpZ5sAcLEkSVjIDaDG0aNT8NnXU5s5K4mx/m61lBeDeVkBZ2hU5uYqG/lYSGdEMVdRu/s/JLJHLU5rArbeBja/CjhtB2PlxuvYxszLrMRCTAnrtB2iWfNOkok53Jh7/LbRx9YMyB0AjprPA9hYmxnKM+mxLfXe+RWMhx1yYLb7xTtvfWrHAJq89Ym5BmCi1xcATOyQN2zIDc3MzQzlamUWOTYwEjs4ghpzT1j6AMV5/DXAojxYovDa9eWOqCLYukrmq2S5R1azUqf+eEwD/MQQCTcNEvQlDB1RCCwrKSJJGu28ZtyiFd6v9uJ4stweWTUgtuzMMztb31Afuy6ZQ5v2TQyvORLA8cWfSgr6741ce3zVivj1J71t84Xt7pkHguxIalNX5wrs27PDxVe1NQutJ9uE/pA2XhyanR2aKen9QtvJJIMD6LaZPT68ckV9dNWIoD4QwQvXtZV5mPOLl96mD+LfUUGY8wCPLEpN4kIJQRkncWGZFETvNXqXLKhjWJLffvvNkDSmCjI6LGdlNCKr5llJElHFPKsoqKLK6IgsU81Y60l6gdYpBTSPxFrX5ZJBmeQ5kqBTiuU+QK8A16tg0h7kj3ssQPMQZYNoC8zc0WxLeSxBaPN7cE81lo11dcX8gRhCD1Qj+UhXVySXwItfrkY6Iwgq+chvdvydFotpf7cD/d+AjiKa6UQ37jAF0ob+sONkQMcx9eSOe8x/b7U8eA8KWE3meYtbwuAX8AuAxE6wFyeHKbAXlCxH/SjpiXrQ98219B6zgV6/eABtf+fP/sw8/Y65Hn2tmXN7k47hX1AemFX+1YAiMpatgXZ0WrkQuRIhKpBcAmea0QO5ROTM4Oi+M68g6ls5M3Dwpb3wGY6FcpHImcwZRH3tzL6Ng89tPLj31AN7wVbgN2bAnkepBqxb0WPZStNnF8vwE1aFABUspr94jb+OkxDIqoDyEY9atpYCKq4FQVd+CKjoWnCF4KtKAz9UdNchF3yWOgRdWNaBJt3CnyK3rMMFc3TpwqWv0b+ieYoFJsW/qrbQ1vw64kTnwKaXHHknoZdFjmxcRAmnShXR7xFz4syz+EdeLxtiEurFc2qCCQmZJ7Y8d4pn0iib5plTz22h+d9fgmkyTwlZ7zElGFSO5QOz+/nt2/n9lDV/lk2foMJE7wnWAK0gk1UupjiAO5jBSrGgGVaWTdUq+MLUI49MnZl56cXpC4OzM0MSix/fPvFIIIQ+PPjWwTM///mZ6SPTWAzOPjY9ypDn++jSDjpIjwOv6iC8KhwQsR2usik3JkBBHq1qgS1hy5UcIIRkwRl8MVBumlU2b+3tme+fliJDooJlXkE4IHkP7Zw5Nat7x6Z0nqcdWOX6ZCkgKTKemvsHryi8KT4bYiRGlrboQbS/0D/ztKLsfz07U1eyouqUOcWxSuRlLFEUBIqXjtCP0RnwwW1UCuKBXmqYuoP6HOXv8d41ecuNG26od+fTRjSgAHsG5xfjDIAvVYPwSWM5g7NKoB7Qgqw+mDBo8RkkWiKSEHlDn0boMMuRZATE3MZSB7JjLcKcKmtQhVa15hZPqvK+quSzlcFN3SxTr8jblW6lt2DkeDQSUmtdY8O7tg+NB2ee2s9IRndQlwKTaXnekGuF3C4WHz2zc6IhNoDzq4fQ5qNMT2+gJz8lTAWJfxqfrVW2owtCaWgwa2RlmZXzXcyWWHDn/Mz+7ZvrhQDKS5mQXpcSQbMU2KgIgVA2p/Cz90tHpRwjHRnPF4TE0OaXEoOH92NpC3rn4Ntq1st2MUfmFVXILP5K4L2xkZ6M+JSlXoCth+ljdBZm2gcsVnhNVySnAwH2oQrlBWTBlBZj/SxJyZRLNPgzklkEwyUhgQazCVqC/uEMklnzD+b95ocsEn+XyeFYxMi9os+WvPmAJGSCeX2+Sy6popgI0hlsXrAlBbQbeY/mg6FINlJbfLFUCiSMpzbXcsFY7LFpClac4Mdx+mawvhTEgiRD0Ae+bT11I3WzlUPcRt1D3UvFeyI7d2yfnZn+7MT42OjI8NDgQH+jt2d1IZfNpI1EO++G4Mci5WUrdWbBj32mEZDRmgnGatFiD9bX2nAgew3NHQbfsj7fx+XIdgSR8y/vy4QHSslEsvRuJRFPltC6cAZlQxc/DGfWHbf+FkQ2AdGFXVZOWX/vnrb+jgt8nGQRoCjbwjfi74YzlUQFlZKV5iETXiyHM5nw8cSpxPFtVlRz3Lrfxa9bTYtvfVrPEracwI8Bf2RPe5yI8EYbjpuYbKfKjYZ7CLznCbQdyiG324zA0fyFGw2p8pAsP4PukWUiYEbcQMbkq/RJhfUCXtp2rT4BzS9XDJIL5BRV8xGbi8fAyogLaO71cgR83Na2rt0KQ7tGy17XDWzoOARl6GRwZrQn3WC2y/KwKMu8qAqC38VKzCzDqqHctSq3qBsh3UjAF6OBWHZ4KJiZZphgKKAoAa8q8m6O9zh5pcYzoqzI3ljTX/6R3oa/DZq4FrCyK59YHuv5Sb5BQpaqeKxtKh0320jqvmptQUBxeROCOLiYMdl3ihcQQhjx/ClrI+8VFrN4qaVv8l0IhiEURp0ul/k9iK6BBR5DB/smBd7lZFs4Hq4wd8GFDOYZl9MhORk0+fi7ECIcJ4G3eQ7cGxSK+7hq+xPwZwdpL6wMrLlI/AmguoRzGBQ8TgNT1ekKPSPJ/OaDY/VaY35kYurrmyZ2D3Q1Jk7iaVYSHz6qB/ORdK/5FD4X603HGoMFAfjZHy99kb5Ab4RIhD0NCgQ8gk2kDGznVTQgv7CQWFMTJANqJLhyhdFUiE/pW//WnHl0QfoS7xFCPa0qL7HC59i770NdsyMd+T7zZ0++htYNl1bcLDv/Unrkb9D9Twhe1sNpge6QKMyb/2P28+H5yd/MH72vgFY//MJfmBdn1CU+N4PzwDvagM9tAR3cUDAiAcKFyY6KYr9BQJYAeFoph0gwB0voIHkjAP0KSbb6gNSDzpWrYASa0k6rhhpXJAxe0WDLbBjVcblU8MOtgEZ3Yus1A5zfvGXL5ud/9Dw5vPhPL5q6l+E37b5/o6Rvntl1mA+JreFNeOr3U8xEh8/jEXURCywvut04NsHPNUq997GbVnpbHCLH4O3Z6cnuTVtz87Hh4dh8buum7snp7HxkeDjCSjxbKghKxRz06gkpENqkFyqVQmRipc/vx3nB65UEtyzjGJqI9DJGPqbrsbzB9OqbVvgkXhHVJV1+CmKYHDAz/tWergzT1GWIaTXCa4iHMwATbW2OWgBnvfhgRQQWWn4CXABZmOxD5+K6k+baWA7TLaK1r1JJoHPJkiPBcjTjmuwz832TC9IaKSH9NfpcS0Kqt7SY18Hxt9IxdK53EkmMj4STdHNXppL4S94RZzEjvtw3OYmGfS1wAbmyhdzCrEnSb1uaz+Rr5pL5V4MQp195JiDtTYi3nwaa7acjw+3djOwxrbPH2fxZeyybryc9k32Xn6KUvGq/muSj4p6P7VeDyiC1sBbibygqED5VSWHE3KD/ULDQzbHLNqzfcRUE3XXXXWCvRUGAIxx0OLp0oeCCdtfyfWun22U3wiFMjuFr6k1b/w3+J/wAlQCbbCP4Xr0S8bdf2cTXljg2Z63fGvnECRvR4Wgh/okTbveVurxDczfPbEl3jkjk3Jcl7d++0NzvY08HSbzmWQJAApaW07VDZZIusfARioh6Xte2gfqdVyNwHlG3qRF0HupD1zTCKdK185Fr3x2IwVq0fnwtqtZaVNHVK7Bs8h8UzsJkE4wtuELiT/dCURCWT/iMGyRAQGgnqwECsFoWd7pk8RORClBR6gbAme5MpE2298frtI41EkFbL8qBPeUwKF8dIm5WKze5yFWTkYovn4z6zOGnD22v4Rve8Ge6lTemvjhyZLrn8JFzh5nH/tux9SK7x9p+RHvItsUewiBEco72jxye7cY9048Of3HqDX93GvnfuKE+/eiNdz+KD79ziD32BbhoDyEWewTOvoZwgz3CNc+yCp6lI/mnPksx2nyC6L89btRLRmye+RPHao9SsN8lu7Bsr6gIkcBqsodc66qUCvlsvE1x0aydmCOJN21ZIq56Tb3YrJPEnCNajvrIF/iaKtFPWdm3i5vttNyn1qZw9+Jb76Kt5rGFH/4wfMhKzB2yU3bNd0jslJ399glp+dU68ysD6PfrKCuH9EfQ2QBwCQXsw0X8pc8aFIc8zZfPjLIHGbQzgM9qPo/5a5XjIIAVzF978Qtqh2z+2tyiCTREr27Aah9JYuDL7yu1UhUSy4VUZOGfSl5RweQdJLI/Uqk2X1ryNacBasCzJAyKl0PgyFI51Np+dihiNNpwqDfdfudrkYD9mhLKraQrCYDBFe+UymIs4sKinnCV/3qzN97tQn8f8j9UDQRDKBjSGrvVNvMGgpj4z1fWSsnsSPhIPOX0wkIqfOquXkkbtTDC3vu7BeZghRfZ+xOaRcyj5eZGsG0glm1YydRi4fK+sbXQxXJ0eVuqfKVtKRUXUcsZcPhlgJCIesoqyygczqJmC4GVsvnTq/qhSpqh1noasGYbSG/TtdOkzapn9Kuqn1S5zEPApkiusAT6Cly4XCzEPfTSqw6X9zKjZL8FcNizHBjtp4w2c1tOBHrqIbZK9iHRew85ZMHxcNOWSZOp88S0ITYfMl9pRUPoEjTa+PCwwyWxD5lJS27pEvQTwXwOZL+Chqw9N9AfprNpXwZYWEuP0JFJRIJekWGuONJrXnpLLTlSX7mqIc1PGJWqsDkIT+g91gtuB+wX3GyguXgA7H7g1AQKf3Dxw/pEHT4u/KzlWxcnLr/Ihp+1NlMXtp2+DYXPf4S+l63j3rEG030Z74mfbwdux7+airVx1l5Q3aEVSEoCA/V2cEsUhbz3ICGDEb26UYs6jOzQ4GA+xsW60iFFYNFonxnoGz29+5X7mP3P39+rd/VWumJBHNAD8FGNUq3eHeobHsbl2/buPbUb77PX9Nugtz1UF8Sh98Cabh7u7S4FmnsCsJx1TKKVuqP6sYRWTMLWvm3T3gxbCUg6IpWjSQOqVMnrgh+7jgV66YBFa8skFNkTDImJRK7Sk164sm+10JaNBEVvqxxIeFdolV7DXuX/MBFbqfB6MKcSzXgyulKU9WA2sOzCvK4HUy25QDqYGAXl8EYSrfE19WBPPhuR0VX7XXIs0Rpbkyw0/J3BgAqB1EWiTKW7VshGEJisua801apnFAVfdRXGNBIEVTWWYih8ANZOszgaxFt8k6NZdr9k4UsQFYXAUEJaRPU8+vZR7LVsc/EDTT9lvcIMjLsXDG5266OPbp3VNfOMCv3okdnVY3hkjbVO36Qfoz9DRag11ASs02DvdUnF3h9ZSjty2pWJJknGaso6NglDKocJnhRIsmuJO7CoSezsBk4jnWTXMUcco7NztPOBzp2dq1blH+yc68yP5h7M3Ztr1rbJc+6cR6MFRteckkRrXve9wKNGZXRQvtfdIY+63XNyTlZpEeEIhEISo/rwxr7caK5zLncwv2oV3OOB3E2d+Xs7H7RrfSrcEu4oSU6YCEagNU9Ovld2j7rNf6e559zum+Qs3NOr0jLrhpEyAqN6mrg0b/F/EaJ/y9e3Km6evNuqlaoAIBpqzoPt45GV97aIop+89Gy/hmNtGpdFP9qtjlXNA/6autp/QIl4sRoKoMiR6Uh/q9P5H2dxZn3ULSCxbf+N00e4sIp2V8dU84CirFF6yXtHMZkJoH+9+wh4UNbLTe7pxq0diuBUjcHJR7faY13id60QrwivZWKa7KTpazmeDiFZjpaQdjWy2jC6jOz9+ejDJw+Cijxy4tDwkzYPIqZC4vBljO8LNz8MMoeePjSCxx5+CCTeIkIfcfa7WZfMS/+ZnqBbKNl6c1Z4Ld7m94mMPSZc0GkIqemqolm7QMgHQWUdp0qpxs6nXnxirhf373j6uRPbB/6igJ5Zv+nmR0YeGpqo7xgpoDzafOtTOxtE7OkdA0zPrmO33z6EnimMHDZfKhRGdtYnBv8//BM8YwAAAAABAAAAAQAAUr3Oyl8PPPUACwPoAAAAANA+BYIAAAAA0D3NQv/4/2oEsQNYAAAACAACAAAAAAAAeJxjYGRgYA76n8UQxbKRgeH/MyAJFEEBzgCGNwWtAAB4nGN+wcDAvACKIxkYWPSB9AsIG4wvQ/hwcUGIWqZlQPolVG4jkh6Y2kNANQ1YzATRLUh2ikLFYJgHiGdA8QKoGIzdAuEzGUD5glAzBZHYC5D0CSKZuwDqDqgYUxOqv0EYAORBJf8AAAAAAAAAOgCEASQCggLyAzgDggQEBFoEtgUoBcIGJAaWBzQHpghACOAJSAmUCdYKFAqECtILPAuOC9oMSAx4DNQM8g0kDYQNxA30DkYO9g9ED/IQHhCKEOwRGBFgEfASWhKQEuITIBNWE5QT+hRKFLAU2hUyFaQV+hZOFo4XLBdiF/AYRhiQGM4AAQAAAEMA8wAPAAAAAAACAAAAEABzAAAANAtwAAAAAHicdZDLasJAFIb/8dKLQlta6LazKkppvGA3giBYdNNupLgtMcYkEjMyGQVfo+/Qh+lL9Fn6m4ylKE2YzHe+OXPmZABc4xsC+fPEkbPAGaOcCzhFz3KR/tlyifxiuYwq3iyf0L9bruABgeUqbvDBCqJ0zmiBT8sCV+LScgEX4s5ykf7Rconcs1zGrXi1fELvWa5gIlLLVdyLr4FabXUUhEbWBnXZbrY6crqViipK3Fi6axMqncq+nKvE+HGsHE8t9zz2g3Xs6n24nye+TiOVyJbT3KuRn/jaNf5sVz3dBG1j5nKu1VIObYZcabXwPeOExqy6jcbf8zCAwgpbaES8qhAGEjXaOuc2mmihQ5oyQzIzz4qQwEVM42LNHWG2kjLuc8wZJbQ+M2KyA4/f5ZEfkwLuj1lFH60exhPS7owo85J9OezuMGtESrJMN7Oz395TbHham9Zw165LnXUlMTyoIXkfu7UFjUfvZLdiaLto8P3n/34A3V+ESwB4nG1R587bMAz0JfLIaLr33tNt0/F1z+9JFJkeMG25Gk2Tp6+dIP1VAjxCJHgij8Eo2Ns0+L8dBwFGGEMgRIQYCSaYYoY5TmCBkziF0ziDsziH87iAi7iEy7iCq7iG67iBm7iF27iDu7iH+3iAh3iEx3iCp3iGFM/xAi+xxCu8xhu8xRHe4T0+4CM+4TO+4Cu+4Tt+4CeOhXXSTAdIqencZqx0EfeeSnaikRVHHbWq4nnH3qaqMoopG0vLY9qQcLKwQpXShc5IW0YraWtyUee3W6aEZVt4WVBkq6KVHHpLxoZOa7YTaYxe94TrhP70BG1Bs1xzRibV/YfhynhbznLW63RlZKtK0VDrhdIZJQNNKrNspNZhYbTvRKkbmtAvL7nakomGsdNlZEmaoVH/psh3rGU234dUsfbZuKZN3JJba1MvqjbXh+3SZaIkU5tJM9L1vCTuDqWIdaG9EznLIrRd1R5NSu1NwdLaUJWk6tkO91ouVD858b/m/VMMSk51fUjHW62btGqTXezZQ9eraKO8Ykcm2S3THyO2laNGdkIZ3cVdpZw3JAYtYlv6PGcSrFUtuGrraG36o5WhGjLhasAg+AuKkLcEAAB4nGPw3sFwIihiIyNjX+QGxp0cDBwMyQUbGVidNjIwaEFoDhR6JwMDAycyi5nBZaMKY0dgxAaHjoiNzCkuG9VAvF0cDQyMLA4dySERICWRQLCRgUdrB+P/1g0svRuZGFwAB9MiuAAAAA==') format('woff'),
- url('data:application/octet-stream;base64,AAEAAAAOAIAAAwBgT1MvMnwtYSoAAADsAAAAVmNtYXCds+uKAAABRAAAA1ZjdnQgAAAAAAAAPbQAAAAKZnBnbYiQkFkAAD3AAAALcGdhc3AAAAAQAAA9rAAAAAhnbHlmOlWmnAAABJwAADGcaGVhZAREFmsAADY4AAAANmhoZWEIYARFAAA2cAAAACRobXR48DMAAAAANpQAAAEMbG9jYbkHxUIAADegAAAAiG1heHAA+gx1AAA4KAAAACBuYW1lzJ0aHAAAOEgAAALNcG9zdJrkPNIAADsYAAACknByZXDdawOFAABJMAAAAHsAAQOWAZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABAJgX//wNS/2oAWgNYAJYAAAABAAAAAAAAAAAABAAAAAMAAAAkAAEAAAAAAOQAAwABAAAAJAADAAoAAAHqAAQAwAAAACwAIAAEAAwAACYGJpkm7ycJJw4nleCt5wrnDecg5ynnPee26CToKPCu8LDw4PDo8SX//wAAAAAmBSaZJu8nCScOJ5XgrecK5w3nIOcp5z3ntugA6CfwrvCw8ODw6PEl//8AANn82WrZFdj82PjYch9bGP8Y/RjrGOMY0BhYGA8YDQ+ID4cPWA9RDxUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAFsAAAAAAAAAB0AAAAAAAAAAAAAAAAAACYFAAAmBgAAAAEAACaZAAAmmQAAAAMAACbvAAAm7wAAAAQAACcJAAAnCQAAAAUAACcOAAAnDgAAAAYAACeVAAAnlQAAAAcAAOCtAADgrQAAAAgAAOcKAADnCgAAAAkAAOcNAADnDQAAAAoAAOcgAADnIAAAAAsAAOcpAADnKQAAAAwAAOc9AADnPQAAAA0AAOe2AADntgAAAA4AAOgAAADoJAAAAA8AAOgnAADoKAAAADQAAPCuAADwrgAAADYAAPCwAADwsAAAADcAAPDgAADw4AAAADgAAPDoAADw6AAAADkAAPElAADxJQAAADoAAfMEAAHzBAAAADsAAfRkAAH0ZAAAADwAAfUAAAH1AAAAAD0AAfUSAAH1EgAAAD4AAfUXAAH1FwAAAD8AAfUnAAH1JwAAAEAAAfVUAAH1VAAAAEEAAfarAAH2qwAAAEIAAAABAAD/ygOhA0AAIAAGsxQFAS0rETQ3JTc2Mh8BBRYVFA8BExYVFA4BLwEHBiImNTQ3EycmHwEYfgsgDH0BGCAPyzABDBUM+/oNFQwBMMsOAekVBSj+Fxf+KAUVDA/F/ukECAsQAQeEhAcSCgQIARfFDwAAAAIAAP/KA6EDQAAgACoACLUpIxIFAi0rETQ3JTc2Mh8BBRYVFA8BExYVFCMiLwEHBiImNTQ3EycmHwEHNxcnNy8BBx8BGH4LIAx9ARggD8swARcKDPv6DRUMATDLDnurKdPTKavramkB6RUFKP4XF/4oBRUMD8X+6QQIHAeEhAcSCgQIARfFDxal629v66Uj1dUAAAACAAD/sQNaAwoAXwBoAAi1ZmJGFwItKxE1NDY/ATY3JicmNDc+ATMyHwE2NzY3NjsBMhYfARYXNzYyFxYXFhQPARYfAR4BBxUUBg8BBgcWFxYUBw4BJyIvAQYHBgcGKwEiJjUnJicHBiInJicmNDc+ATcmLwEuASUUFjI2LgEiBgoFaAgOFyUGBQ9QDQcITRgaCQgDEXwHDAEPHBZQBQ8HSBQEBDsOCWYHCgEIB2gKCxMoBgUPUA0HB00ZGgkHBBB8CAwQGxdPBhAGRhYEBQgoCg8IZgcIAR1UdlQCUHpQASF8BwwBEBkaIC0HDAcUUAU8DQhMHA8ICGcJDDwFBUMcBQ4GTRwbDwEMB3wHDAEQHhUcMQYQBBVQAQU8DQhMHBAKB2cJCzsFBj8fBQ4GDDIPHBsPAQxEO1RUdlRUAAAAAAYAAP9yBC8DSQBfAGgApADgAOkA8gARQA7w7OfjzrCRdGZiRxcGLSsRNTQ2PwE2NyYnJjQ3PgEzMh8BNjc2NzY7ATIWHwEWFzc2MhcWFRQPAQYHFh8BHgEdARQGDwEGBxYXFhQHDgEjIi8BBgcGBwYrASImNScmJwcGIicmNTQ3PgE3Ji8BLgE3FBYyNjQmIgYBNTQ3NjcmNTQ/ATYzMhYXNxc2PwEyFxYVFAcWFxYdARQHBgcWFRQHBiMiLwEGIicOAQciJyY1NDcmJyYRNTQ3NjcmNTQ/ATYzMhYXNjIXNj8BMhcWFRQHFhcWHQEUBwYHFhUUBwYjIiYnBiInDgEiJyY1NDcmJyYTFBYyNi4BDgETFBYyNi4BIgYIBVYHCxMfBAQMRAoGBkATGAYHAw1oBgoBDRMWQgUNBVEEGBEIDQZVBQgIBVYGDBMfBAQNQgsGBUAVFgYHBA1oBgoNExdCBA0GUAQFJAgNB1UFCNZUdlRUdlQBrVMHCh0DNBABBCoIEREcFwQCQwIcCQdTUwYKHAJEAQUVHQsMCwcsAwFEAx0KB1NTBwodAzQQAQQqCAwKDBwXBAJDAhwJB1NTBgocAkQBBSoICwwLBywERAMdCgdTjyo6LAEsOCwBKjosASw4LAErZwYKAQ4TFxslBgwFEEIEMgoIPBoNCAZVBgsxBARLDwUFHhUNGxMMAggHZwYKAQ4TFxslBgwEEUIEMgsGPBsNCAZVBgwyBARLDwUFCCwMGBYNAQg6O1RUdlRU/oBOCQkQDT8OAgIeCTQMAQEoFwEnAgIOPw0QCQlOCQgPDj8OAgIoGyUBAQs0ASgCAg4/Dg8IAkVOCQgQDT8OAgIeCTQMAgIoFwEnAgIOPw0QCAlOCQkPDj8OAgInNAwBAQw0JwICDj8ODwn99B0qKjosAigCHR4qKjsqKgAD////sQPoAsMADwApAEkACrdGMxgSDAMDLSs1ETQ2MyEyFhURFAYHISImNxQWMyEyNjcRBgcGBw4CKwEiJi8BJicmJzUUFxYXHgQ3MzI+Azc2Nz4BPQEvASYGJyEiBjQlAzYlNDQl/MokNkgMBgM2BwoBEhWVWRwkPBsCGj4RLliWFRJSbHQEIBIgGAwCCxoeFB4FdGweNAIDAwQG/MoHCgsCXyU0NCX9oSU0ATYkCAoKCAGsFBFyShgcGhoOJkpyERSzXkFUXAMcDhQMAQoWDB4CXFQYUiAODgUFAgMMAAQAAP+xA00C/wAEAAsAGQAjAA1ACiMcFA0KBwIABC0rFTUBFwEnMxUzNycHNxQzMjcBNjU0IyIHAQYBNzYyHwEWFA8BAdDo/jChSDwygzNfDQUEAS8DDAUE/tEEAU5dFDsWgxQUXU/pAdDo/i+PRzODM1MMBAEuBAYMBP7SBAG5XBUVgxY6FV0AAAAAAgAA/7EDXAMLAAwAMAAItScVCQMCLSsRND4BMh4BDgIiLgE3FBY3MxUUFhczMjY3NTMyNj0BNCYHIzU0JicjIgYHFSMiBhd0wu7AeAZszOLOaK0UD48WDkcPFAGPDhYWDo8WDkcPFAGPDhYBAV51xHR0xOrEdHTEUQ4WAY8PFAEWDo8UD0gOFgGPDxQBFg6PFA8AAAT//f/CA9UDAQAtADcAQQBLAA1ACklEPzo1MCkCBC0rEyY2Fh8BBhcWFx4BNzI3FjY3HgE3PgE/ATYnNRY3PgEXFgYHDgMHBiMhJicTJjYWHwEWBiYnEz4BFh8BFAYmJxM+ARYXBw4BJicBBCY0CTUPAQYeBzIoLxsiYhkbWB0MEAMFAgEaIzF4JiEEIT1WMEQsFS3+olQVQgY2OggVBCoyDHgCPEAECDg6AZgEQjoBBgU6MgQCvCUgFhu4HSMerjQ8ASUnBCclCB8QIBUhDBwmCiItQhkYRhQZcm58HxIGcAGaLSgYJNEpLA4mAR8pHiAh+DsiKikBACsYJiH+LyYoLwAAAwAA//kD6AJ9ABAAIgAyAAq3LyUYEwwFAy0rETQ3NiwBBBcWFAcGBCAkJyY3HgEgNjcmJxYVFAYiJjU0NwYXFBYyNjU0NjMyNjQmByIGC04BCAEmAQhOCwtO/vj+2v74TgtHS+ABBOBLVYAiktCSIoCuEBYQRDALEBALRmQBOhMUgJoCnn4UJhOBmpqBExNyiIhyhEE6Q2iSkmhDOkE8CxAQCzBEEBYQAWQAAAMAAP+9BCQDCwATABwAMgAKtycdGhcOBAMtKxE1NDY3MzIWFwEWFAcBBiInAS4BNxQeAT4BJg4BJTMyFhcBFhQHAQYjIiYnATY0JwEuASod6R1IFQGPFBT+7hY7FP5xFR5rKjwoAiw4LgEgfR1IFQGPFRX+7hYdFBoQAQYVFf5xFUgB2+gdKgEeFf5xFTsV/u4VFQGPFUiaHigCLDguBiKRHhX+cRU7Ff7uFRARAQYVOxUBjxUeAAACAAD/sAPoAsMAJABJAAi1QS8QAwItKxE0PgEyHgEUDgEnIicGBwYHIyImNSY0NjU/AjYnNz4CNy4BARYzMjY3PgEnNCceARQGBx4BHwEWHwMUBw4BJyYnJicGIyJqtNa0amq0azAyRlUVGwIGDAECAQQDAwEcBQ4OBEVOAVcgEVqkQkVMAQ1IVFBEBQwIGwkEBQQDAQIKCBsVVUYyMJcBpU6ETEyEnIJOAQkyFgUECgYCBAQBAwYCAgEeBRgSECh0/uEDMi80hkorKid4h3YnDhYKIQsDBQYKAQIICgEEBRcxCQAGAAD/sQMSAwsAIwAvAD8ARwBXAGcAEUAOY1tTS0RAOzMuJxoJBi0rETU0NjsBNz4BNzMyFh8BMzIWHQEUBisBERQGIyEiJicRIyImExQeATMhMj4BNREhExE0NjsBMhYVERQGKwEiJhMzJyYnIwYHExE0NjsBMhYVERQGKwEiJjcRNDY7ATIWFREUBisBIiYKCKwnCSwWshYsCCetCAoKCDY0Jf4wJTQBNQgKjwgIAgHQAggI/gxHCggkCAoKCCQICjb6GwQFsQYEPgoIJAgKCggkCAqPCggkBwoKByQICgJGJAgKXRUcAR4UXQoIJAgK/e8uREIuAhMK/eUMFAoKFAwCEf5CAUEICgoI/r8ICgoCDkEFAQEF/bkBQQgKCgj+vwgKCggBQQgKCgj+vwgKCgAAAAMAAP+wA6ECxAAqADMAPAAKtzo2MS0dAgMtKxE0NhczMh4DHwEhMhYVERQGBwUXFhQHITIWDgEjISImNTQ+ATUDIyImEzQ2Mh4BBi4BJTQ2Mh4BBi4BFg6PCQ4IBgICAwKeDhYSDv25BgENAgEPFgISEf3FDhYMFmJyDxTVKjwoAiw4LgH2KjwoAiw4LgKfDxYBBgwQDgkOFg7+4g0WAUQaBREaFhwWFg4IHCYCAcwU/WkdKio6LAIoHx0qKjosAigAAAAB////ygKmAvEATwAGsz4dAS0rASIGFBY3Mjc2FhcVFAYrASImNzY1NCYiBgcUFxYGJyMiJic1NDYXFjMyNjQmJyIHBiY3NTQ2OwEyNicmNTQ2MhYHFAcGFjczMhYdARQGJyYCSiU2NiUWFRoWATAfjxAOCRVEYkQBDREKFI8hLAESFhgbJjY2JhUVGhgBLiCPEwwRDkZgRgEVChAPjx8wFBQYAZJEYEgCDREMEpAfLhIWGRomNDQmFhYaFgEuH5AQDgoURGRAAg0RChRbIS4UGxQYJjQ0JhoZFRQBLiFbEA4KFAAFAAD/4gP6AtoAOQBBAEsAYwBmAA9ADGZkYFBHQj07KAMFLSsBFgYHIi8BJjc+AScOAycuATU0NzY3Jw4BJzQmNSY2Mzc0JzQzMjcyHQE2MzYXFBYVFg8BFTMyFgUWNycGBwYUNz4CJyYjIgYjJRYSFhQrASI1JyMGBxQrASI1NhM2OwEyAzMDA9weUF4KAiACBFY+KhAuSGQ4NEA8MkACjAwECgIGBJwCCC4GCp4GCAIIBAiwDFZ8/qYcIgQiGiyoHDweCCQ8AggC/j4KVlAEVgYysDACBlYECqYCCGAKgpBIATJSvEICJgYEPLg4JkxULggGRjpUQDIQZBgCBgI2BAIEHG4ECAIIaBYECgIqBAoCHmZI4AYM1gwcLIIWGFhGBhICshz+7vgGBKakAgQEEgIWCP68AQgAAAAABQAA/7ED6AMLAA8AHwAvAD8ATwAPQAxLQzszKyMbEwsDBS0rFTU0NjsBMhYdARQGKwEiJjc1NDY7ATIWHQEUBisBIiY3ETQ2OwEyFhURFAYrASImNxE0NjsBMhYVERQGKwEiJjcRNDY7ATIWFREUBisBIiYKCGsICgoIawgK1goIawgKCghrCArXCgdsBwoKB2wHCtYKCGsICgoIawgK1goIawgKCghrCAo9awgKCghrCAoKCLMICgoIswgKCggBQggKCgj+vggKCggCGAgKCgj96AgKCggDNggKCgj8yggKCgAAAgAA/4kEsQMyADEAZQAItVE5MBYCLSs1Nj8BNjc+ATc0JyYnJjU0NyYnJj4BNzIeAgcGBxYVFAcGBwYVFBYXHgIXHgEVFyEBNDcmJyY+AR4CBwYHFhUUBwYHDgIXFBYXHgIXFSM1NC4CJy4BJzY1NC8BJicmJyYUKEUdFSUoAR8TDi0OBQQFPmo5K1Q+IgMEBA4tDxEgKCYdfmQQEhQB/JICwQwFAgQyWFxWNAQCBgwkDA8JCAoBIh4RMkYP/gYIFgwXPDEbBQgDCQ4NJTEHDxoLCxNKJxslFScSOisSJys3aj4BJj5SKjcbEyo6EikTJRsnShMPLigSETwVFQHTIhAgIy1YOAI0XCsjIBAiMA4hEQoMFAogPBAJFBgHhwsHJiIqDBkmEiIsCgoQBgoPIhAAAAAE//r/mgPzAxoAKwA3AFYAXgANQApbWEg/NzEaCAQtKxMOARQjBwYHBi8BJjc+ATc2Mj4BNzI+ATc2NzIXMgcGBwYXFhcWDwEGJy4BFwEWDwEGJwEmPwE2JRYHBicmDwEnNz4BJjc2NzYWBwYHBhYXFjc+ATc2FgE3FwcGLwEmmwgGAhEPBBAMRgsNAiAEBioeCAYCDiYWhjR6GgwUeCBQLCIECApMDgQqOvgBmhIUMBYQ/mIICEgMAjIQIDJoOCxSREQYDgIGDIAMDAQMIg4EJjomBigCBBL8qP5M9hQSLhYB+ggcFg8NBA4STAwMAhgEBhwwBg4eEFoGAgg0GDg6LgIIBkYIBDAYMv4kFhAqDhIB2AgMPgjAaD5YGgwsTk5GGDpIFjg4BhIGDEQKMhwoPgw6BAoC/UT4VvIUEC4SAAIAAP+xA1sDCwAjAEYACLUzJxsDAi0rFTU0NjsBMhYGDwEeATMyNjc2NzY7ATIWHQEOASMiJicHBiImEzU+ATMyFhc3NjIWBxUUBisBIiY2PwEmIyIGBwYHBisBIiYWDvoOFgIJTShkN0qCJwYXBQxrCAok5JlRmDxICxwWCiTmmVGaPEgLHBgCFBD6DhYCCU1ScEuCJwYXBQxvBwwH+g4WFhwLTSUoSj4KOA0MBgSWuj45SAsWAcwElro+OUgLFg76DhYWHAtNTUo+CjgNDAAC////wwPpArEAGQAxAAi1KiIVBAItKzU0PwE2MhYdASEyFgcVFAYHIRUUBgciLwEmETU0NjMhNTQ2Mh8BFhQPAQYiJj0BISImBbMFDwoDAAcMAQoI/QAKCAYHsgUKCAMACg4HsgUFswUPCv0ABwyICAWyBQoIawoIawcKAWsHCgEGsgUBN2sICmsICgWyBRAFswUMBmsMAAL////5BBkDCwAWACkACLUlHBQDAi0rNRE0NjsBMhYdASEyFh0BISIGDwInJhc0PwE+ATMhMhYUDwEOASMhIiZKM7MzSgEvM0r+MDVyI7wCAQEqEbwYViUCXxMeErsYVib9oRMcdgIYM0pKMxJKM1o0Kd0DBwVcERTdHCgOIxPdHCgOAAL//P9+A9gDSgANAB8ACLUfFAgBAi0rNzYeAgcGBwY3NDc+AQEWAAcGBwYnJicmJyY3Njc2AHYmXlIMJFaOVAQGNBgDbBr+pHYmVggIEh4gIhAIQCh2AcSqIgpQXiRUEgwaBAY8qgKoGv5EdCZCBg4iHiAQBgpUJnQBVgAEAAD/ugKAAwIALAA1AD4ARwANQApDPzo2My8aEAQtKwEUBw4DBw4DBxYVFAYiJjU0NxEmNTQ2MhYVFAcVNjc+AjcmNTQ2MhYFFBYyNjQmIgYTMjY0JiIGFBYBMjY0JiIGFBYCgEoGLE46LioqNBgERkZkRkhIRmRGSChiOjQyBEZGZEb9tCg4Kio4KEQcKio4KCgBrBwqKjgoKAKKUB46VjQYDg4QIDAkHlAyRkYyTiIBeiJMMkZGMkwizB4eEhY8LiBMMkZGMhwoKDooKP1GKDooKDooAlgoOigoOigAAAMAAP/4A1oCxAAPAB8ALwAKtywjGxMLBAMtKz0BNDY3ITIWBxUUBichIiYDNTQ2FyEyFgcVFAYnISImAzU0NhchMhYHFRQGByEiJhYOAxEPFgEUEPzvDxQBFg4DEQ8WARQQ/O8PFAEWDgMRDxYBFBD87w8UHUcPFAEWDkcPFgEUAS1IDhYBFA9IDhYBFAEtRw8WARQQRw8UARYAAAMAAP+5BBYCugAVACUAOwAKtzcvIRkRBAMtKxM0NwE2Mh8BFhQPARcWFA8BBiInASYBEz4BHwEeAQcDDgEvAS4BJTQ/AScmND8BNjIXARYUBwEGIi8BJhkGAQQFEAQcBgbb2wYGHAUOBv78BgF00AMMByMHCAPQAg4GIggGAUYF29sFBRwGDgYBBAUF/vwGDgYcBQE6CAUBBAYGHAUQBNzbBg4GHAUFAQQG/qkC0AgGAQoCDgb9LwcIAwkDDH4HBtvcBQ4GHAYG/vwFEAX+/AUFHAYAAgAA/5wD6AMgACgANAAItTMtGAMCLSslFh0BITU2Nz4BNTQmJy4BJzQ2PwEmJyY2MhYPARYVDgMHDgEVFBYlMxUjFSM1IzUzNTMCbLT84CQuXkYuCAIqBAoEBAgEBlzkXAQOEgIODg4CCi5IAUSWlmSWlmSAQDpqyg4MIkY8FjQwDBowEBQCBDImNnR0NlgIIhweBAwMLjYWPEbuZJaWZJYAAAAB//7/sQNZAwsAMQAGsy0EAS0rETQ+AjMyFhc3NhYdARQGKwEiJj8BJiMiDgIeAzMyNjc+AR8BHgEHDgEHIi4CRHScWVKYPUgQLRQQ+hcTEU1ScDpqTDAEKFRiPkJ2KQQRBkwFAgY8rl9XoHBIAV5XnnREPjlIEhMY+g4WLRBNTS5ManRqTC46NQYBBU0EDgZKUAFEdJ4AAAMAAAAAA+gCtgAWADAARwAKt0E1LSEUCgMtKz0BND8BJic0NzY3MhcGFwYPAQYHFSMiFzU0PwIuATc0NjIWFRQHHwEWHQEGByEuAQE2JzY3MhcWFRQHFxYdARQHIzU0LwEmEqtCAiMlNR8gMUgMDXIwBHIZvxaYOSUuAVyAWk49khgCI/3jDhQB2UQuHyMxKSNBqBIbdjJuD2qGGgZQJ1w4LykCE31wCwg3Fz2PGagbCkYcF1YzTGxsTGo0HkYKG6glBAIYAVlqfRMCKyk+UjFQChaGIAKPORs1CAAB//z/zAOIAvIAGgAGsxgIAS0rARYGKwERFA4BKwERIxEjIiY1ESMiJjcBNjIXA3gQChZUAg4QzMzCHA5UFgoQAZAQLBABUBAW/soODgwBNv7KFBQBNhYQAZIQEAAAAAADAAD/nwOPAx4AFAAoADwACrc5LiUaEAUDLSslFSMVFAYiJj0BIzUzETQ2NzIWBxEBFSMRFAYiJjURIzUzNTQ+ARYHFQUVIxEUBiImJxEjNTMRND4BFhURAkA3IiwiODgiFRgiAQGGNyAwIDg4IC4kAv2ZNyAvIAE4OCAwIO9wpxciIhencAH3GB4BIBf+CQFPcP4KFyIiFwH2cKgYHgIiFqhwb/55FyIiFwGHbwEYGB4CIhb+6AAAAgAAAAADjwKtAAQACQAItQkHAgACLSsBJTUhFQElESERAdP+PwN9/kQBvPyDAW7SbW3+s9L+SwG2AAAAAgAA/8IDIgLqABEAGgAItRgUDAQCLSslFg8BBi8BBiMiJhA2IBYVFAclFBYyNjQmIgYDBB4YLiQgvkpSgL60AQDALv4YiLB+iLB+TiIcLiAgviq+AQC2voBYSqpYiH6yhn4AAAEAAP9qA+gDUgBEAAazMxEBLSsRND8BNjIWHQEzNSMiJjQ/ATYyHwEWFAYrARUzNTQ2Mh8BFhQPAQYiJj0BIxUzMhYUDwEGIi8BJjQ2OwE1IxUUBiIvASYLjwoeFNdIDhYLjwscC48LFg5I1xQeC44LC44LHhTXSA4WC48KHgqPCxYOSNcUHguOCwFeDwqPCxYOSNcUHguOCwuOCx4U10gOFguPCh4KjwsWDkjXFB4LjgsLjgseFNdIDhYLjwsAAAL/+P+2A+wDCAAGACMACLUWDQMAAi0rAQUjESMRIwEeAQ8BDgEjISImLwEmPwEzBzMyHwEhNzY7ASczAfQBBKS+pgLYEhIGHAQkFvzQFiQEHAoqnmKqsggEKAEsKAgEsqpiAwj0/wABAP6yCiwSmhQaGhSaMBhsgghubgiCAAAAAQAAAAAD6AKkAB0ABrMYBAEtKwEyFhQGKwE1MycHMxUjIiY0NjMyFyY1NDYzMhYXNgL4ZIyMZL5qsK5o+EpsakwOBgKcblqMGBwB7ojEiL7m5r5okmgCDBpsmGhSBAAAAv/6/3ADGgNWABkALQAItSodGAwCLSsBFgYHBicPAgYPAQYmLwEmNwEmJyY2NzYWBzYuAQYHDgEfAR4BHwEeAjI+AQMGFGBmQkB2RmgOIEwMFAIQCBQBAhgOEo5yarJsHhJUZB4ICAMFAhYHQxAOGA4UEAJkdMYSDArCDKYcBA4EEA5iHhoBgjJGaqIUFIK8LGo+FCwMFgkQBxQFMQwIEAIOAAAIAAD/kgOYAyoADwAbACcANwBCAE4AXQBpABVAEmVeVU9NRT48MCgmIRgUBgIILSsTIgcmJzY3FhcGFRQXBgcmBxQXBgcmNTQ3FhcGASIHJic2MzIXBgcmEyYnNjU0JzY3FjMyNxYXBhc2NzY3Bgc2NTQmJwYHJic2NxYzMjcWARYVFAcGByYnJic2PQE2AxYXFhUUBwYjIic24BYUMCw2Slw8BgQ+NhBuFDwUQjImLggBUBwWOjhUTnhuTFYaaqCCBA4mPBoeDhheKBB2JhA6Mi54BgKWvnJaRAxEBg4eFo4BYJYEQEIYQDBkCmQaDhICDlZsOjZuAfgKNExKLCYsEBAGEDA4BGIiGnJ2aoJuYD4yGAEwDiocHj4OJBr+NBhYFAoYHCwuFAhshA6WDi4EDpJWMDIKJExgsCRKkIICDmIB0ojMFiwSBjgEknYUFgoq/ewKCBIiUEAqDKAAAAAAA//8/5ADmgMsAAgAEwApAAq3HhQOCQUBAy0rATYAEgAEAAIAFyIGFQYWMzI2NTQDMjY3JwYjIj8BNiMiBgcXNjMyDwEGAca+ARAG/vb+hP7uBgEM8iouAiIgJi60Hmw0EjAYDgoqGjAedjgQNBYMDCQaAyoC/vj+hP7uBgEKAXwBEpYwGhwgLCA6/a40NBgkJqBgOi4aIiKYaAAADwAA/2oDoQNTACMAJwArAC8APwBDAEcASwBPAFMAVwBnAGsAbwBzACNAIHJwbmxqaGNaVlRSUE5MSkhGREJAOzIuLCooJiQfCA8tKxURNDY7ATU0NhczMhYdATM1NDYXMzIWFxUzMhYXERQGIyEiJjczNSM1MzUjNTM1IzcUFjczMjY3NTQmJyMiBgcTMzUjNTM1IzUzNSMTMzUjNTM1IzUzNSM3FBY3MzI2PQE0JicjIgYVEzM1IzUzNSM1MzUjKh1INCUkJTTWNiQjJTQBRx0qASwc/O4dKkehoaGhoaGPDAYkBwoBDAYkBwoBNrKysrKystazs7Ozs7OhCggjCAoKCCMICjWhoaGhoaFPAssdKjYkNgE0JTY2JDYBNCU2Kh39NR0qKh2hJLIkoWsHDAEKCKEHCgEMBvy4oSSyJKH9xKEksiShawcMAQoIoQcKAQwG/LihJLIkoQAAAQAAAAADpAKYABUABrMRCQEtKxM0PwE2Mh8BATYyHwEWFAcBBiInASZED0wQLBCkAW4QLBBMDw/+IBAsEP7qDwFMFhBMEBClAW8QEEwQLBD+IA8PARYQAAP//P+QA5oDLAAIABYAPwAKtzcbDgkFAQMtKwE2ABIABAACABMyNjU2JisBIgYHFBYXEzY1NCYjIgcGBxUzNTQ3NjIXFhUUBwYPAQYPAQYHBgcVMzU0NzY/ATYBxr4BEAb+9v6E/u4GAQy8HiYCJh4CHCYCJhyoGmpSQChEBG4QEE4MEBAIDBYKChULBg4EbAQGFhwuAyoC/vj+hP7uBgEKAXwBEv0eJhweJiQcHiYCAUgiLE5MGipoBAQaHBgUFBgSFgwIDwcIEQkIFDoIBAwQFBASIgAAAAIAAP/5A2sCwwAnAD8ACLU4MCQDAi0rNRE0NjsBMhYVFxYPAQ4BJyMiBgcRFBYXMzIeAhUXFg8BDgEHIyImNzU0NjczNTQ2FhcBFhQHAQYiJj0BIyImXkOyCAoBAQECAQgIsiU0ATYktAYCBgIBAQECAQgIskNe1hYO+hYcCwEvCwv+0QscFvoOFpoBiENeCggLCQYNBwgBNiT+eCU0AQQCCAQLCQUOCQQBXpzWDxQBoQ4WAgn+0AoeCv7QChQPoRYAAAABAAD/tgOIAxIAFgAGsxEMAS0rATYWBw4CLgIGBxMjAzc+AR4DNgNqDhAIYIhUPjpEdlBaZLhcWnxIOERaqAJoBg4MipYeGjAgKEL+oALQIkIoIkRKMgoAAf/5/3sD+ANYACUABrMfAQEtKyUGJCcmAjc+ATc2FhceAQcGBwYCFxYkNz4BJyYkBzU2BBcWAgcGA1eX/mqUjw6BCBEKHEAZFggOBgppBmd6AThsUC0wQ/7kn7cBR040KVMQCY0OjJUBhJ4KEgYRBxcYPBwMCnb+3mxxHXZe73aWejIBO4qtf/78ahYAAAAAAwAA/2oCMANSABsAKABiAAq3TTImIBgKAy0rARQOARQeAR0BFAYiJj0BND4BNC4BPQE0NjIWFQUHBhcWMzI3NicmIyITND4CPwE2NTcGIicXFB8DFiYWIxQOAg8CBiYGNQYdAT4CNTQyFRQeARc1NC8CJi8BLgECMGBiYmCs2KxgYmJgrtSu/h4SBAhcfIRYDh5ganiQCBwMGR1cAmT0ZARaLRMREQweDAIKBggMDw8CIloIdEQ0QnoGXCsSDQUMBwQCbixoXjxcZi52Ik5OInYuZlw8XmgsdiBOTiAGDggGNDIKFDb+ShIeJA4YHFweMjY2MiBaKxMVFQIwChISDgoPEBACIgFaIEIEJjAiHh4iMCYEQh5cKRMOCBQMFgAAAgAA//kDoAMLAC4ARAAItUA4KgQCLSs1ETQ2NyEyFx4BDwEGIyInJiMhIgYHERQWFyEyNj0BND8BNjMyFxYdARQGIyEiJhM0PwE2Mh8BATYyHwEWFAcBBiIvASZeQwHQIx4JAwcbBgcCAw0M/jAlNAE2JAHQJTQFJAYHAwQLXkP+MENejw49DiQOkwFpDSQOPg0N/jkNJA7wDpoB0EJeAQ4EEwYcBQEDNCX+MCU0ATYkjQgFIwYCBAyxQ15eAU4TDT4NDZMBaQ0NPQ4kDv46Dg7wDQACAAD/+QMTAwsADwAfAAi1GhMLBAItKzURNDY3ITIWBxEUBiMhIiY3FBYXITI2NRE0JiMhIgYHXkMB0EJgAV5D/jBDXkc2JAHQJTQ0Jf4wJTQBmgHQQl4BYEH+MENeXkMlNAE2JAHQJTQ0JQACAAD/sQNcAwsADAAxAAi1IxEJAwItKxE0PgEyHgEOAiIuARcUHwEWMj8BFxYyPwE2NC8BNzY0LwEmIg8BJyYiDwEGFB8BBwZ0wu7AeAZszOLOaNILMgoeC2VlCh4KMwoKZWUKCjMKHgplZQseCjILC2VlCwFedcR0dMTqxHR0xAkPCzILC2VlCwsyCx0LZWULHQsyCwtlZQsLMgsdC2VlCwAAAAEAAP/vAtQChgAkAAazGwkBLSs3ND8BJyY0PwE2Mh8BNzYyHwEWFA8BFxYUDwEGIi8BBwYiLwEmPRCkpBAQTBAsEKSkECwQTA8PpKQPD0wQLBCkpBAsEEwQcBcPpKQQLBBMEBCkpBAQTA8uD6SkDy4PTA8PpKQPD0wQAAABAAD/+AMSAwsAIwAGsxoIAS0rETU0NjczNTQ2OwEyFhcVMzIWHQEUBisBFRQGJyMiJjc1IyImIBboHhdrFx4B6BYgIBboIBZrFiAB6BceAUxrFx4B6BYgIBboIBZrFiDoFiABHhfoIAAAAAACAAD/sQNcAwsADAAiAAi1GREJAwItKxE0PgEyHgEOAiIuATcUHwEWMjcBNjQvASYiDwEnJiIPAQZ0wu7AeAZszOLOaIcKygoeCgEvCwsyCxwM434LHAwyCgFedcR0dMTqxHR0xGoPCsoKCgEvCh8KMgsL434LCzIKAAAAA////2oDoQMMABgAIQBFAAq3PCogGxAFAy0rETQ+Ax4CFxQHFxYUDgEvAQYjIi4CNxQWPgIuAQYXNTQ2OwE1NDY7ATIWFxUzMhYdARQGJyMVFAYnIyImNzUjIiY+apCijm46AkW/FSo8FL9ke1CSaECQktCQBJjImksMBn0KCCQHCgF9BwoKB30MBiQHDAF9BwoBglCQbDwCQGiUTntkvxU8KAEVv0U+aJRPZ5QCkNKOBpp1JAcKfQgKCgh9CgckBwwBfQcMAQoIfQoAA////2oDoQMMABgAIQAxAAq3LSUgGxAFAy0rETQ+Ax4CFxQHFxYUDgEvAQYjIi4CNxQWPgIuAQYXNTQ2MyEyFh0BFAYnISImPmqQoo5uOgJFvxUqPBS/ZHtQkmhAkJLQkASYyJpLDAYBQgcKCgf+vgcKAYJQkGw8AkBolE57ZL8VPCgBFb9FPmiUT2eUApDSjgaadSQHCgoHJAcMAQoAAAYAAP/4A+gDCwAPAB8ALwAzADcAOwARQA46ODY0MjAsIxsUCwMGLSs9ATQ2FyEyFhcVFAYnISImAzU0NjchMhYXFRQGJyEiJgM1NDYzITIWFxUUBgchIiYFITUhEyE1IRMzNSMWDgOgDxQBFg78YA8UARYOA6APFAEWDvxgDxQBFg4DoA8UARYO/GAPFAFkAjz9xNYBZv6aj9fXHY4PFgEUEI4PFgEUAS2PDxQBFg6PDhYBFAEtjw4WFg6PDxQBFuxH/ptIAfRHAAAAAAH/+f+xAxgCwwAUAAazCwEBLSsTNjMhMhYHAREUBwYjIi8BJjURASYDCRgCyhcTEf7tFgcHDwqPCv7tEgKtFi0Q/u3+YhcKAwuPCg8BDwETEAAAAAL///+xA+gCwwAZADYACLUqHBYBAi0rNREWFxYXHgI3MzI+ATc2NzY3ERQGByEiJhM0NjMhMhYXFAYHBg8BDgInIyIuAS8CJicuARkfykwgJkQbAhxCKB9ftyAYNCX8yiQ2AS4rAzYkNAE2KdI0NQwiIAsCDB4kCzWTYBIjPAsBuxwViTcYGhwBGhwXRHwWG/5FJTQBNgJ3Kzo0JSxQHZIjJwkSDAEKFAgnZUIOF1IAAQAA/7ED6AMLAFUABrMpEgEtKxU1NDYXMzU0NhchNSMiJic1NDY7ATIWFxUUBicjFSEyFgcVMzIWFxUUBisBIiY9ATQ2FzM1IRUzMhYXFRQGKwEiJic1NDYXMzUhFTMyFh0BFAYrASImIBY1Kh4BHTUXHgEgFrIXHgEgFjUBHR0sATUXHgEgFrIWICAWNf7jNRceASAWshceASAWNf7jNRYgIBayFx4ZsxYgAWsdLAFrHhezFiAgFrMWIAFrKh5rHhezFiAgFrMWIAFrax4XsxYgIBazFiABa2seF7MWICAAAAAAAwAA/2oDoQMLADEANAA3AAq3NzUzMiMRAy0rETU0NjsBNTQ2OwEyFh0BITc2MhYUDwERMzIWHQEUBisBFRQGKwEiJj0BISImNREjIiYJASETIREKCH0KCGsICgHbiQUQCgWKfQgKCgh9CghrCAr+HggKfQgKAR4BTP60GQFMAf9rCAp9BwoKB32KBQsOBon+JQoIawgKfQgKCgh9CggB4gr+qgFM/psBTAAAAAT///+xBC8DCwAPAB8AJgAvAA1ACi0qJCAaEgwEBC0rNRE0NjchMhYVERQGByEiJjcUFjMhMjYnETQmIyEiBgcTNTcXARcVATQ+ARYUBi4BNCUDfSU0NCX8gyQ2SAwGA30HDAEKCPyDBwoBSLJaAR3p/O4+Wj4+Wj4LAqYlNAE2JP1aJTQBNiQICgoIAqYICgoI/Y9rs1kBHej6AdEsPgJCVEQEPAAAAAIAAP+xAxMDCwAfACgACLUnIhsHAi0rNTQ+BRcyHgIyPgIzMh4FBxQGIyEiJhM0NjIeAQ4BJgQMEh4mOiEFJixMSkowIgciOCgcFAoGAVJD/hhDUrN8tHoEgqyEQh44QjY4IhoCGB4YGB4YFiY0Oj48HENOTgI1WX5+snwCgAAAAwAA/8MD6ANAADgASwBvAAq3YE5CPDQYAy0rPQE0NjsBMj4CNzY/AT4FNzM1NDYyHwEWFA8BBiImPQEjIg4CBwYHDgIPAQ4CJyMiJhE1NDY7ATIXBgcnLgMnIyImATY3HgQ3MzU0NjIfARYUDwEGIiY9ASMiBi8BLgUKCH0bKiQUEBEaHAwkJC42QCiPCg4HsgUFswUPCo8bLCAaDBIZEBgkEikXNkImfQgKCgh9i1oiKxQIHhouFn0ICgGfISsMEB4aLBiPCg4HsgUFswUPCjAeHhonDS4YKBokUmsIChIgJBkjPT4aQDAsIBABawgKBbIFEAWzBQwGaxAiJBkiPSUyRBUvGhgWAQoB/GsICn00ZSkQJhoMAgr+gDRkGR4qFBQCawgKBbIFEAWzBQwGawICAwEKChYWJgAAAAIAAP/5AoMDCwAXAB8ACLUcGBQIAi0rNRE0NhczNTQ2MhYHFTMyFhcRFAYHISImEyE1NCYOARcgFhGUzJYCEhceASAW/ekXHrIBHVR2VAEuAUIWIAFsZpSUZmweF/6+Fh4BIAGMbDtUAlA9AAMAAP+6A5gDSQAgAD0AWgAKt0pCOSUUBAMtKxM0PwE2Mh8BFhQHFzYyHwEWFA8BBiIvASY0NycGIi8BJjcUHwEWMjcnLgI1NDYXMh4BHwE2NC8BJiIPAQYBFB8BFjI/ATY0LwEmIgcXHgEfARQGByIuAS8BBgkvUi+GL3IvMTEwhy90LzBSLocucy4xMTCHL3QvaxB0Dy4RFwMKBB4XCQ4OAxcSD3MQLBBSEAGIEHMPLRBSDw90EC4QFgMMAQIgFggODgQWEwJYQy5SLi90LogwMTEvdC+GLlEvMHMvhzAxMS90L0MWEHQPERcDDg4JFiABBAoDFxEuEHMQD1IP/mEXD3QPD1EQLA90EBIWAxAGDxceAQQKBBYRAAAAAwAA/3YDoAMLAAwAFQAxAAq3LRkUDwgDAy0rFzQ3AR4BFwEGIi8BJjcUFj4CLgEGATQ2NzIWFxYUDwEVFzY/ATYyFgcUBw4BIyImNQwVAXwWVDf+gxU6FjsVgxQgEgIWHBgBIJJoIEYZCQmjbAIqSyEPCgEMG4JPaJIHHRYBfDdUFv6DFBQ9FEIPFgISIhAEGAHnZ5IBFBAGEgdefTwCGS0UCgkWJkpelGYAAAMAAP+xA1wDCwAMABkALgAKtyoiFxAJAwMtKxE0PgEyHgEOAiIuATcUHgE+Ai4DDgEXNTQ2OwE1NDY7ATIWHQEUBisBIiZ0wu7AeAZszOLOaHdSiqiIVAJQjKSOTp8KCH0KByQICgoIsggKAV51xHR0xOrEdHTEdVOKVAJQjqKOUAJUiokkCArECAoKCPoHCgoAAAAD//7/rwNaAw0AEAAZACMACrcjGxUTDAQDLSsRND4CMh4DDgIuAzcUFwEmIyIOARMWMzI+Aic0J0RyoK6edEICRnCiqqRuSH8yAaVLXFOMUIlMWj5wUDIBMAFgV6ByRERyoK6icEgEQHiaW1tMAaUyUJD+sDIyUHI+WkoAAQAAAAEAAFK9zspfDzz1AAsD6AAAAADQPgWCAAAAANA9zUL/+P9qBLEDWAAAAAgAAgAAAAAAAAABAAADUv9qAFoEsQAA/+YEsQABAAAAAAAAAAAAAAAAAAAAQwPoAAADoAAAA6AAAANZAAAELwAAA+gAAANZAAADWQAAA9MAAAPoAAAELwAAA+gAAAMRAAADoAAAAqYAAAPpAAAD6AAABLEAAAPoAAADWQAAA+gAAAQvAAADwgAAAoAAAANZAAAELwAAA+gAAANZAAAD6AAAA4QAAAOgAAADoAAAAxUAAAPoAAAD6AAAA+gAAAMMAAADmAAAA5gAAAOgAAAD6AAAA5gAAAOgAAADhAAAA+gAAAIwAAADoAAAAxEAAANZAAADEQAAAxEAAANZAAADoAAAA6AAAAPoAAADEQAAA+gAAAPoAAADoAAABC8AAAMRAAAD6AAAAoIAAAOgAAADoAAAA1kAAANZAAAAAAAAADoAhAEkAoIC8gM4A4IEBARaBLYFKAXCBiQGlgc0B6YIQAjgCUgJlAnWChQKhArSCzwLjgvaDEgMeAzUDPINJA2EDcQN9A5GDvYPRA/yEB4QihDsERgRYBHwEloSkBLiEyATVhOUE/oUShSwFNoVMhWkFfoWThaOFywXYhfwGEYYkBjOAAEAAABDAPMADwAAAAAAAgAAABAAcwAAADQLcAAAAAAAAAASAN4AAQAAAAAAAAA1AAAAAQAAAAAAAQAIADUAAQAAAAAAAgAHAD0AAQAAAAAAAwAIAEQAAQAAAAAABAAIAEwAAQAAAAAABQALAFQAAQAAAAAABgAIAF8AAQAAAAAACgArAGcAAQAAAAAACwATAJIAAwABBAkAAABqAKUAAwABBAkAAQAQAQ8AAwABBAkAAgAOAR8AAwABBAkAAwAQAS0AAwABBAkABAAQAT0AAwABBAkABQAWAU0AAwABBAkABgAQAWMAAwABBAkACgBWAXMAAwABBAkACwAmAclDb3B5cmlnaHQgKEMpIDIwMTQgYnkgb3JpZ2luYWwgYXV0aG9ycyBAIGZvbnRlbGxvLmNvbWZvbnRlbGxvUmVndWxhcmZvbnRlbGxvZm9udGVsbG9WZXJzaW9uIDEuMGZvbnRlbGxvR2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20AQwBvAHAAeQByAGkAZwBoAHQAIAAoAEMAKQAgADIAMAAxADQAIABiAHkAIABvAHIAaQBnAGkAbgBhAGwAIABhAHUAdABoAG8AcgBzACAAQAAgAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAGYAbwBuAHQAZQBsAGwAbwBSAGUAZwB1AGwAYQByAGYAbwBuAHQAZQBsAGwAbwBmAG8AbgB0AGUAbABsAG8AVgBlAHIAcwBpAG8AbgAgADEALgAwAGYAbwBuAHQAZQBsAGwAbwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDAAABAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMEc3RhcgpzdGFyLWVtcHR5A2NvZwdjb2ctYWx0BG1haWwGcGVuY2lsDHBsdXMtY2lyY2xlZANhc2wDZXllBHRhZ3MEY2hhdAV0cmFzaAZiYXNrZXQGcHV6emxlCGxhbmd1YWdlBnNpZ25hbAV1c2VycwV0b29scwlhcnJvd3MtY3cIZXhjaGFuZ2ULZm9sZGVyLW9wZW4FYnJ1c2gLZmxvdy1icmFuY2gEbWVudQRjb2RlCHVzZXItYWRkAmN3BWdyb3VwBGhvbWUJZXF1YWxpemVyBm1haWwtMQZzZWFyY2gEbW92ZQZ1cGxvYWQMdXBsb2FkLWNsb3VkA2tleQduZXR3b3JrDmluZm8tY2lyY2xlZC0xCGNhbGVuZGFyAm9rDGhlbHAtY2lyY2xlZAZsb2dvdXQEZmxhZwVzcGluNglob3VyZ2xhc3MFY2hlY2sLY2hlY2stZW1wdHkOY2FuY2VsLWNpcmNsZWQGY2FuY2VsBHBsdXMKb2stY2lyY2xlZAd6b29tLWluCHpvb20tb3V0BXRhc2tzBmZpbHRlcghtYWlsLWFsdAdzaXRlbWFwBGNyb3AHcGljdHVyZQR1c2VyB3NodWZmbGUEbG9jawRsaW5rBndyZW5jaAVjbG9jawVibG9jawAAAAAAAQAB//8ADwAAAAAAAAAAAAAAALAALCCwAFVYRVkgIEu4AA5RS7AGU1pYsDQbsChZYGYgilVYsAIlYbkIAAgAY2MjYhshIbAAWbAAQyNEsgABAENgQi2wASywIGBmLbACLCBkILDAULAEJlqyKAEKQ0VjRVJbWCEjIRuKWCCwUFBYIbBAWRsgsDhQWCGwOFlZILEBCkNFY0VhZLAoUFghsQEKQ0VjRSCwMFBYIbAwWRsgsMBQWCBmIIqKYSCwClBYYBsgsCBQWCGwCmAbILA2UFghsDZgG2BZWVkbsAErWVkjsABQWGVZWS2wAywgRSCwBCVhZCCwBUNQWLAFI0KwBiNCGyEhWbABYC2wBCwjISMhIGSxBWJCILAGI0KxAQpDRWOxAQpDsABgRWOwAyohILAGQyCKIIqwASuxMAUlsAQmUVhgUBthUllYI1khILBAU1iwASsbIbBAWSOwAFBYZVktsAUssAdDK7IAAgBDYEItsAYssAcjQiMgsAAjQmGwAmJmsAFjsAFgsAUqLbAHLCAgRSCwC0NjuAQAYiCwAFBYsEBgWWawAWNgRLABYC2wCCyyBwsAQ0VCKiGyAAEAQ2BCLbAJLLAAQyNEsgABAENgQi2wCiwgIEUgsAErI7AAQ7AEJWAgRYojYSBkILAgUFghsAAbsDBQWLAgG7BAWVkjsABQWGVZsAMlI2FERLABYC2wCywgIEUgsAErI7AAQ7AEJWAgRYojYSBksCRQWLAAG7BAWSOwAFBYZVmwAyUjYUREsAFgLbAMLCCwACNCsgsKA0VYIRsjIVkqIS2wDSyxAgJFsGRhRC2wDiywAWAgILAMQ0qwAFBYILAMI0JZsA1DSrAAUlggsA0jQlktsA8sILAQYmawAWMguAQAY4ojYbAOQ2AgimAgsA4jQiMtsBAsS1RYsQRkRFkksA1lI3gtsBEsS1FYS1NYsQRkRFkbIVkksBNlI3gtsBIssQAPQ1VYsQ8PQ7ABYUKwDytZsABDsAIlQrEMAiVCsQ0CJUKwARYjILADJVBYsQEAQ2CwBCVCioogiiNhsA4qISOwAWEgiiNhsA4qIRuxAQBDYLACJUKwAiVhsA4qIVmwDENHsA1DR2CwAmIgsABQWLBAYFlmsAFjILALQ2O4BABiILAAUFiwQGBZZrABY2CxAAATI0SwAUOwAD6yAQEBQ2BCLbATLACxAAJFVFiwDyNCIEWwCyNCsAojsABgQiBgsAFhtRAQAQAOAEJCimCxEgYrsHIrGyJZLbAULLEAEystsBUssQETKy2wFiyxAhMrLbAXLLEDEystsBgssQQTKy2wGSyxBRMrLbAaLLEGEystsBsssQcTKy2wHCyxCBMrLbAdLLEJEystsB4sALANK7EAAkVUWLAPI0IgRbALI0KwCiOwAGBCIGCwAWG1EBABAA4AQkKKYLESBiuwcisbIlktsB8ssQAeKy2wICyxAR4rLbAhLLECHistsCIssQMeKy2wIyyxBB4rLbAkLLEFHistsCUssQYeKy2wJiyxBx4rLbAnLLEIHistsCgssQkeKy2wKSwgPLABYC2wKiwgYLAQYCBDI7ABYEOwAiVhsAFgsCkqIS2wKyywKiuwKiotsCwsICBHICCwC0NjuAQAYiCwAFBYsEBgWWawAWNgI2E4IyCKVVggRyAgsAtDY7gEAGIgsABQWLBAYFlmsAFjYCNhOBshWS2wLSwAsQACRVRYsAEWsCwqsAEVMBsiWS2wLiwAsA0rsQACRVRYsAEWsCwqsAEVMBsiWS2wLywgNbABYC2wMCwAsAFFY7gEAGIgsABQWLBAYFlmsAFjsAErsAtDY7gEAGIgsABQWLBAYFlmsAFjsAErsAAWtAAAAAAARD4jOLEvARUqLbAxLCA8IEcgsAtDY7gEAGIgsABQWLBAYFlmsAFjYLAAQ2E4LbAyLC4XPC2wMywgPCBHILALQ2O4BABiILAAUFiwQGBZZrABY2CwAENhsAFDYzgtsDQssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIFhiGyFZsAEjQrIzAQEVFCotsDUssAAWsAQlsAQlRyNHI2GwCUMrZYouIyAgPIo4LbA2LLAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjILAIQyCKI0cjRyNhI0ZgsARDsAJiILAAUFiwQGBZZrABY2AgsAErIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbACYiCwAFBYsEBgWWawAWNhIyAgsAQmI0ZhOBsjsAhDRrACJbAIQ0cjRyNhYCCwBEOwAmIgsABQWLBAYFlmsAFjYCMgsAErI7AEQ2CwASuwBSVhsAUlsAJiILAAUFiwQGBZZrABY7AEJmEgsAQlYGQjsAMlYGRQWCEbIyFZIyAgsAQmI0ZhOFktsDcssAAWICAgsAUmIC5HI0cjYSM8OC2wOCywABYgsAgjQiAgIEYjR7ABKyNhOC2wOSywABawAyWwAiVHI0cjYbAAVFguIDwjIRuwAiWwAiVHI0cjYSCwBSWwBCVHI0cjYbAGJbAFJUmwAiVhuQgACABjYyMgWGIbIVljuAQAYiCwAFBYsEBgWWawAWNgIy4jICA8ijgjIVktsDossAAWILAIQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbA7LCMgLkawAiVGUlggPFkusSsBFCstsDwsIyAuRrACJUZQWCA8WS6xKwEUKy2wPSwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xKwEUKy2wPiywNSsjIC5GsAIlRlJYIDxZLrErARQrLbA/LLA2K4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKxAAAqsQAFQrEACCqxAAVCsQAIKrEABUK5AAAACSqxAAVCuQAAAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbEADCq4Af+FsASNsQIARAA=') format('truetype');
+ src: url('data:application/octet-stream;base64,d09GRgABAAAAADBIAA4AAAAASsAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWfC1hKmNtYXAAAAGIAAABRwAAA1adxeuOY3Z0IAAAAtAAAAAKAAAACgAAAABmcGdtAAAC3AAABZQAAAtwiJCQWWdhc3AAAAhwAAAACAAAAAgAAAAQZ2x5ZgAACHgAACKtAAAylm/WaOloZWFkAAArKAAAADUAAAA2CEOoA2hoZWEAACtgAAAAHgAAACQIYARGaG10eAAAK4AAAABnAAABEPPcAABsb2NhAAAr6AAAAIoAAACK1WLI4m1heHAAACx0AAAAIAAAACAA+wx2bmFtZQAALJQAAAF3AAACzcydGx1wb3N0AAAuDAAAAdIAAAKhWz5+kHByZXAAAC/gAAAAZQAAAHvdawOFeJxjYGSexjiBgZWBg6mKaQ8DA0MPhGZ8wGDIyMTAwMTAysyAFQSkuaYwOKix/v/PHPQ/iyGKOYJhGlCYESQHAPboDCp4nN3Su0oDQRQG4H/IRbMmGRDUacQU7k4CtuJ1vb6BWCi2VmLlU+gDpMgzSEKq1D5CyqRbUJhBi2zwgkUknpmTJoWgrQPf/HPYM7sDOwCyADJkFQJuPFElfJ1BAIhn6nigeg0VWhWBKB81ooEu6LKuJ00TmJKpmJqJTceGtpq20naapHYYjsfudVHux25YPd3dH/Wv+gu9Ue+zd7NyocbqS72oR9VVZ0qqsryTt/JcnsjFyUl/PUT+b/3/chTdJK4n1fL0wyjn/qtroGwwdyuiAXO3RBcYqFeXGWiPrjPMAEmTYRYwAQPtMSXmbpSpMMxR1pg7nYkZXG+Hgb5hKWxIk6TUpErrdSBtMWxQthk2KROGLUrLsA0MQ4YdiNesB+xCvF16QAzxDg/Yo5z3gH3KJQ84oNQecEh56gFHEB/3HnD8DVXyhZUAAAAAAAAAAAAAAAAAeJytVmlzE0cQndVhyzY+gg8SNoFZxnKMdlaYywgQxuxKFuAc8pXsQo5dS3bui0/8Bv2aXpFUkW/8tLweHdhgJ1VUKEr9pvftTPfrnl6T0JLEXliPpNx8Kaa2Nmlk50lIN2xajuJD2dkLKVNM/i6Igmi11L7tOCQiEoGqdYUlgtj3yNIk40OPMlq2Jb1qUm7pSXfZGg/qrfr209BRjt0JJTWboUPrkS2pwqgSRTLtkZI2LcPVX0la4ecrzHzVDCWC6CSSxpthDI/kZ+OMVhmtxnYcRZFNlhtFikQzPIgij7JaYp9cMUFA+aAZUl75NKJ8hB+RFXuU0wpxyXaa3/clP+kdzr8k4nqLsiUH/kB2ZAd7pyv5ItLaCuOmnWxHoYrwdH0nxCObk+qf7FFe02jgdkWmJ80IlspXkFj5CWX2D8lq4XzKlzwa1ZKDnAhaL3NiX/IOtB5HTIlrJsiC7o5OiKDul5yh2GP6uPjjvV0sFyEEyDiW9Y5KuBBGKWGzmiRtBDmIkrJFldR6R0yc8jot4i1hv07t6EtntEmoOzGerYeOrZyo5Hg0qdNMpk7tpObRlAZRSjoTPObXAZQf0SSvtrGaxMqjaWwzYySRUKCFc2kqiGUnljQF0Tya0Zu7YZpr16JFmjxQzz16T29uhZs7PaftwD9r/Gd1KqaDvTCdng7ISnyadrlJ0bp+eoZ/JvFD1gIqkS02w5TFQ7Z+B+XlY0uOwmsDbPee8yvoffZEyKSB+BvwHi/VKQVMhZhVUAvdtNa1LMvUalaLVGTquyFNK1/WaQJNOQ59Y1/GOP6vmRlLTAnf78Tp2RGXnrn2Jcg0h9xmXY/mdWqxXYDObM/pNMv2fZ3m2H6g0zzb8zodYWvrdJTthzotsP1Ip2NsL2hBk+47BHIRgVzABhKBsHUQCNtLCIStQiBsFxEI2yICYbuEQNh+jEDYLiMQtpe1rJp+KmkcOxPLAEWIA6M57shlbipXU8mlEq6LRqc25Clyq6SieFb9KwP94pE3rIG1QLpE1vyKSa58VJXjj65oedPEuQKOVX97c1yfEw9lv1j4U/C/2pqqpFeseWRyFXkj0JPjRNcmFY+u6fK5qkfX/4uKDmuBfgOlEAtFWZYNvpmQ8FGn01ANXOUQMxszD9f1umXNz+H8mxghC+h+/DcUGgvcg05ZSVntYK/V149lubcH5bAnWJJivszrW+GLjMxK+0VmKXs+8nnAFTAqlWGrDVyt4M17EvOQ6U3yTBC3FWWDpI3HmSCxgWMeMG++kyAkTF21gdopnLCBvGDMKdjvhENUb5TlcHuhfR6NlH9rV+zIGRVNEPht9kbY67NQ8lusgYQnv9TXQFUhTcW4qYBLI+WGavBhXK3bRjJOoK+o2A3LsooPH0fcd0qOZSD5SBGrR0c/rb1CndS5/coobt87/QiCQWli/va+meKglHe1kmVWbQNTtxqVU9eaw8WrDt3No+57x9knctY03XRP3PS+plW3g4O5WRDt2xyUpUwuqOvDDhuoy82l0OplXJLedg8wLDCg36EVG/9X93H4PFeqCqPjSL2dqB+jz2IM8g84f0f1BejnMUy5hpTne5cTn27cw9kyXcVdrJ/i38CsteZm6RpwQ9MNmIesWh26yg18pwY6PdLcjvQQ8LHuCvEAYBPAYvCJ7lrG8ymA8XzGHB/gc+YwaDKHwRZzGGwzZw1ghzkMdpnDYI85DL5gzjrAl8xhEDKHQcQcBk+YEwA8ZQ6Dr5jD4GvmMPiGOfcBvmUOg5g5DBLmMNjXdGsoc4sXdBeobVAV6MD0Exb3sDjUVBmyv+OFYX9vELN/MIipP2q6PaT+xAtD/dkgpv5iEFN/1XRnSP2NF4b6u0FM/cMgpj7TL8ZymcFfRr5LhQPKLjaf8/fE+wfCGkC2AAEAAf//AA94nI16C3AU17lmn9PP6enp6Znp6R6NRq3RPHqG0Wg0jOYhhBhkSRaKELIsy7pYxjLFFZgIBRPMqlgHWAIUxr4EXMSXS0jKsbLY8TqO1xY4OIkvzvqR2iLOXeIk2Ll2tlxJKoXzsO/muu4SFjX7n+4RKCSuBDSnz+Pv7tP/+f/vf5xDIYq6dp6epbuoKMWdrnehlmakelFAC6oyakU8FzNLxUogRcpkpVxoRKxGz3p/kEdSUPp/VzxBCeV/IDei0B53VNqNQlH0geR9w/qAEdwK4g8c4P0iIyD9Da8UZNOWrltplsLX3+miMpTwYtLH0xjeW2lFXqTzFT1Qm0E89gkzwA9+47dTn/7dN5b8+McWmYsu/uW5xJ6M//Sn8Sd/e//9aK42rcgnTAr+kXm9QI/TIiVQm2Fet0c5TOZVNGMy0grlZFDlvIjjNV1TeRmlYHYcD/+bEUwxZaZgqlCaxUoVVcxWlEOpUrG8EpUrtc42mHu5Av+Xo4LWiDQdvkYnD/MiaBoILx/ZOYLHdoyhiMBvFt2BNMd6hz08v6Yu7OIZZZcgKfX6bZzC9WkMK6RFr7CJF5DIbhZkPenQCmtCYZdA+3bxEvJGtGHWy/erDLNcdm3iRTSxfHR0ZnR0JxlVjGB9gZO54DBiOz3CYEQR+ftcUifLdRmszEkFb6TeiyTepq0LR1t4iVeHHVKvINikbE8ESNfYhBTFAf+2M630p4B/fqqe+hx1lvp3ytclv//qkwf/vq0uqLg5zDkM5VRgKFs0ZaSTGk26DFQo83/K4/hf5HHpBotXoL+BxUHVfiThMQqq8DiNlPazYykZ8c4j4RHwNLgZGvDItgLcrcPD7QeQCfkW32um7Hs/8VZ47+J70ceE8TOj6JvZ9izKdGRR7fqOwI5xUqCRYTzdbo7tCmocz3g2c6InoHczHm6YYROCh7+TFYCQdxNCqVfkuK5AiONpQog8Aa2b9bC3MyGf4OGAEm28gxMjuBexwQa35OazNOqlG0T+jjt4sYEuKojJCD5fRGdwD464oLtGnRFsaubPiCVRukG9IEW/bMjidGNDJoPvgmJ5JvPD+2AyckCvT3IS4+tmCm6us94jcHeCMDHMai/LClkppHmQwN9MKQqdYZvSvdShNIKe+oCEBet/DbkEr7xSxjhdn0TIXURpjKHtFVxDLpfiISOGqyghlNZRigx5FBdugzHnrhQZkoop5yYX3CTcuAkeev0mgaKvXQP9v4Rfo+qoCrWKEs/2dLZEg4huaU76iBTKmIhhK4LlTvlUra2pUA6UoMmlmmIcr4J8MXpboUqvRCCePpXjm2JmxVcsAyGApj/4j3dFEp31OFz15dYeD/olji6DUmKaZrir56E28j4T9UdDEnaHDdVg3zeKq4rJq+cTZVRM0uVk0Y2eVX3bB0KRcFg2B7b7VGtUEEU8Isssi2mJm7jlBRyRNYAEVQnTL4RGSvOzySIqJ/C9yWKRYmx8W4Ovgaaq8I0JytMlRhv0oFfAFNPSrFdSfLAtiIrxGI+4oNpWqKBySkfxEjEJKRt7tR8U9rf1o3sllrF+xHhYBrXSxiUrf4leo95z6R51ubZf5dv2t3WuwrC01lsMlCjHfPaS1foBOtkQvOeDdcHgfo3C1+ZhLvfSbipO5QFrW1L1LoK1paLJx6FIxYGjQSj0oKotB63VgLPlSokUYJliOVxFBYDMr2vyUU1e5VXRUVmDad5ozG3//qX/uZV78OWPv7MHdfTD6FEYAHLVC40jdv2IVvhPr+/Y8fpvSEExMKdX6Z/SiGqB9b+FWk3486nelR2l/BIM/AmYZcAQDiDbQJVCRStX4FpFoPCpkgYVHVRXpgEcmsyUQ6txUKsSdFdrNR1AzUwhxiy6SgBKBl9It9bHNtTVr22QFJrFKBxfutNsYppWjOV7s8EW62ujwW6u3CEEmUxB2ok7uxihvQOdYLo7EMd2FBj8cjKq1b/UEDeeK3aiZIpJJYVGJRpskiKmGGvprgv1qXXbt+5q9HPb0MmWdCjxoyVZ2USNS4xo0+XlscwSRDWHzCar1Uy3UhQNMvJH0IHdlI+KUW2gA/lUverFoAMwbwAzxxxzvIGiIJYmHwNBMVAZLB0sDQvQyEQTBIvLWcToIPV37o0du3AstvfO1e8j5n3r24q7b1LRlN48+Ac/cw9Zl61/tS4Pud1DSEAmEobcqOPALR09m48d29zTccuB7YcOoU8B6eStkoz9Yr5XeTMQ+PzJk58PmOrek/jxPaoz539mEiBLAtVAFWHOLTHdw5M5B4iFMXAZqTzB+prBqBCAhrUgnQTJUblIhuJO9xVAZZyumvhO1fpQW65anw0amYYPGvqD6Kj6dhD6GtSwAgoShJH+ht32QBCvNTLY7EpweetnBhAFSWd/w6WGDDIIYYPdqfjgvuVkyLB7bZ/jeRtzkiBvwoufKsdEogcqsX0pAjowwZJZLJdW4jJfqeIKuBVFW/Z1lawCCFkjbbsjBJXgc1Ia0ZEqUKUMRPunzmzJF/ruDNaDPiKMGJpGYLNl5tYhNHXm4pmpi8O9rCTUuxiWoREWhfrgnX2F/D9ti/rGT3XfOog8/aPoyTUHBl1LdZYRecQwiObgIQYb8ivpHT1DBwYHD7zXM5OSNbHJTbMA7FgQEcPqS10DdKG1eHCgOZPaSfwrzsYfP6yTl2qkWqnlVA91H/EP7h3s6iwvbY7XB9w08Q8AOm17D9BJ7Lj+V9oBX5MPZBBQtopQG3AhzvFskNAAYRwwOOUDJpKFX070lax+I3gKGjJEIQEASoqjN6pHRN6p8mK/JQkCRhewIFgPX6ln2Bc4Bv1WFMrFpJUHZC0RumdTrqw2p2WF1Dfhw89ar5BOdAspP6FuTWLf/EeSKooq3ngLixB7B7xx/qNcb3cOB+xJ3BOMIEO9RyR8I3bpeXoWvw7y7QOuiWdbG71gPEC+WZCTHCobiFTMKjg4AWJ3WHCewOaADDURda3iEh2PAR1gqIE5jYyhjZmODM6Vc+gPNXkfUKX5b/MejLwa9vvm34AFFZQN270qDnmOumROxALCj8sa32Dfx5iNCxXcZf3Co+LemFyvRTRN5kJKBKM3VUNDnKRIGq1RCL7hPH4K/x/qNogzqg0kziBOIOBoWdODzoJWAEZMYkkBSVNEMQFVdCLOYA9iPGdWSvaCl4nPVS5oPKCNRlazAeA1ZeKBZLmc1IJhDeUbjyqyK9i7oRd5fKJ6tCmL/Fqo3iyXzWAwHEK56NGA5JP71vehoKh4jzbmVTWEjvWu78cen+R/tDHn1+rCZrFoaho8Ltf4qCKLau9kFyaPu7spp9arITIcrguqKNd0NxmmIIi49gv6Cv5XapltPf6e2kR5u6RNk+uHV3WvWJ6mWfhosBHgd5pEQWU6lQODB24jOJKpIqh5ua1STBXB7hYawIssg2sc1LwoCJ/IahWCBiogQMoEsxhPan5NBaaViLTblXKAMIduo+n3jOEJEUcxM1bNKLn+yfZiV2ehCx+WGBFzzFewkOPExzkBC4zwvDS2y3oqEmNi4ezTkU5DSHRiAVtVcWyYGeMKz+cxN8aIT2Fhvbjv0X5UGHm5G5sc0/lSuzk4mhO4vo7RroIyGcIcLjOYiWxl4LGbNXhRBn7Gpv73OemiFMnu00Jr+zg/notYH17mmKdOYYbxY02wXkYCkXHWxoZL17FhJcgJ8G51z/I2BxeAd5WamDiaXND+rH0TLtzcDtzUBp3fQnQSiouLq/w0L9rF23+RILdQEbtOkxopHrLO2drdDeW/zF8idRyCEmlXz5MGXYZyIcZ8mHmBLlBLqY0kxlyW1wDvS3YQA9hUJDDuRBTQAm1diDh4jvhABgbfI6g3oRrFonEZ6w5BEPynHAbRSoE6Oc6qqaZvbQgm06gxILfILMNWp5Y1j1ZjNMPILV5fNG027JlU/Cq6egz/D4nFTGHturEiAyYjIXldgGoxw1fo81qcoEl659J6VqBdsie5lPeG3e7AQKo+GUz5O5r9qebKVBVwaCRTqQ9kOvxLAsn61EDAm0v7fZ1gEX8cU6LxlrXtuLiuOR5VYnm5yScCDkY7FZca4h9y82YsI9WZ/lhWFBVO9MYU4Blz7cq1k/S/02GqGfyyMWqC+GV3r+1fWVkaFohfJiM1Tjjk6BX4qYR1pFIp6AUyQKJs8LaAJ2DfSQWZwO+kxgNsEM8W5kyCRo3QAqn9EA1VdPuRXxY47PMyitTn9uAow2UM6JBN7WDxwbCk7owOZ2OMIA7KTKbjMjrpV/OaYm0QhH4JF5RoYXN7dqS3NyQDL/dKEiPFZMbsMLk0ZvxXn7YG/0P15zR0RYhoXg8j+wclCYcYLpLnZEMZ57BQDLV35DDomcDkQwUroSkZ2Y/eEaSq8L3N1bVhKTs01Bfq6Nfa2zk/B5FhIZKuSh2ge/O9l8f+oCo5fy2vcTfoVgKiGuHFlWmFsX2MIHEy7Jj6ug5B8A2WtHA9hg7UdAzkk8DOQiheKZFY2w6vNXp14ldfuv1EZ7+bYP8VWcOuNenJysC+FKezEuiJrCpO78i21U7n/byEEr/+0u0nyU0hxNLo+Heqy/rd9u1axL0mmR6oiu0eCb1U61jjtDmmRmjrEtiU1+gP8AtUCLQJYogGH4khSJqGbyIFAVoSjxMLQUIwkgYgn0rCMuKwNhEzAg4UfUkU5ilR4Pg5lj3NekWaggnatXlSA/2lRBkG/3kLRGnkx82xCjvHAgyIKC0ApcRtgT9BhD/od+b2R6YOeO6nlsDcomGZxU5uzbbKOUSCRBIYpoIQPHoB1Ss1WLLnytT5vxsaM+dnAxHkezk0lsT3BozvWfnS9vjLGCE00Ha6bQC1wm+lP/DzSFqOqaT87+PFJT+neRbjUNvAQJt/wOHT1Wt76HfoAcoD2Cq82KiCIQc4LdvowVVI4gRpFKnbTqStC9SMOTEiJcaOjDJcMURPh61TM+aYIPiNaEwRutIz6PVnYuLwRGLUL4UZrvMZ/HTY6t1hdnNyzIiC7o6aO9CYHXN+B++lMZWlSlQV5A90t2dlR7mtNawwhCEkZIK/66GFzzHugGnBMvF3nSZLskTEOQg4F1VDCxW8d4DLDnXkMpliiOnrm+zr7ydFekNHsWC358+k2zOZ9nRvhJRp9KxzxY8MGx1jxZAsK9F8whgu9PUVhmLowdggqQ3G3jQMv9aZi9rNSDrdkU7P95GyI43XOteFeGkcfDPHbolnmxP1AYmhF+TQ8WIqRPygnaq19VqbX9y+S1WufmTHpbTPC8HsJ7cmV9lVu0RKvx352iWSF0agYfuOML9vMxr+DkT8CfBLxLPFVDQkktgoSXJpoCAQ5BMlAMnUNRXRJO2bQxUIVkm+zAUa42hRylElAFAVrSVpP+sqx4GfrzARjnv3XQ71XsAyFxM4dIGW+DgvoGmgkLkIy777LstGoArUt0ITMXadgyGFee9dTsZD8608mBRaEvAFeICIZeuIddW56d334F3wCmgrjv38CvgJUSoNkZ7wYltLiOSOk0RrSsSCktwBCZEIYKVMkBwv0oJExEgOIdkWjIN5jJfaSm14+szV9xO5ib6cQHwVhhEYbt2v1gEIY1mWsZjrR73Hj0/C396ujqnzshTr69SKeSmcV1QwkGZ5x47yWiEWMRhJypW1zr4PCe1x4Dm6ZgHe3gW6nwdfd0kT8XVrMGqjqIwN2onRCId5koDM4Srt4KktBlf0gA/QsmNqMM+kRzdUu2eWMD5ukMVc53P3/t0T2/qZrp0n7h45saJfacGvAUS2KGvW5AandkwN5jpKHGLXMDI3MIx6dzz+3OM7egEx/QFbFqC4hL9FaTAzkt+6pdTSpIogCwD/hF9F22Ryup2CDcZjeqm4EoMw1BQSpKQBBppyCJVThJJ06sT9JjkbEBP/N7pxPFlqjC7tlzzb88z2ule0E8uSObRu7/jQimMhHJ//payin/XmGuNLl8RvedpfP1PY6p06GOaGU+vaW5fgwO5tbqGirzha93S92BfRx9oGp6cHp4pGn1j/dJLBIXTX1O4Abl5SHVk6LGoHo/josvqSADy/eu1N+hD+AxUGnocEZLvaJAKUEZRxEgGWSEGkXad3KqI2imXlzTdfjcijmqigR5WsgoYVzTovyxIqW+dVFZU1BR1TlAU9+ip9lDZAj9JUJ/BuWS4ZVlhbz+M2dq1AIFeA4RWITHwoGPfZgOYjwgYBu8YH2VpfymcTQl/Qh7sqsWysvT0WDMUQOliJ5qPt7dFcAs9/qRJtjSJo5KMfbfu6HovpX9+G/m/IQFHdcqHbtlki6UP/se3pkIFj2tPb7rf+s93z0P0oZHdZl2x9gckfxd8EJHaBvrh4TBE7lCw1BVESAmf0Y2slvdvqRS9f3Y+2vvWZz1in37JWo2/VfNVX6Rj+DUSdYbg3pEqMrWsgHa125kQpR4kIJBfAmWaMUC4RPTcwsvfcGUR9L2eFDj2/B/6GYpFcNHoucw5R3zq3d+3AM2sP7Zk7uAd0Bd4xBfo8QvXCurX5avtPDjtJ4GM3CAKBbSzZjF5k1NtKMAm7QQAMljvYdt2ku4+4DfVtQEX3UdEQj4Jv0f+2akDvogF3xL1oAE3I7r+FbvGTHft6+dq36N/RAsVRceCT5qFtHrNxIneg4jWbTzLHK1EbTzYpmoh7lWpDHyPm1Lmn8Dt+PxdhEtrVC1qCiYiZxzc8MycwaZRNC8zcMxto4eNrwCprTsz6T6rhsHoyH5reJ2zdKuyjbB7aen2KaiCyzxAeFmx2lNpSPEAe8KjcVtBNO0mn6WV8efLw4clzU88/t/nywPTUoMzhr2wdPxyKoA8PvX7o3K9/fW7zsc1YCk+f2DzCkO+7cm0bHabHqDqqBb4v0xCSsBPKcikvJmBBPq1iAy7xoss5QAnZRjf4YXDFaU5dv6m7a6ZvsxwdlFSsCCrCIdl/ZPvU3LThH500BIFmscb3KHII/EU8ueP7fkl8VXoqwsiMIm8wwmhfoW/qa6q67+XsVFXNSppL4VV2qSQoWKYoCCKvHaNP0Bmww/VUCuKEbmqIuof6NBXs8m+cuPO2NbdWO/NpsymkglcNMUOMNwHCNB3CKp3jTd4uwf2AHmSPAcOgJ2CSKIpQQlQOYzrxjDmeJCogHjcXBpATgxHvqbwClWlNr20Tpcrva2o+Wx5Y18kx1bKyVe1UuwtmTkDDEa2jfXRo59bBsfDUE/sY2ewMG3JoIq3MmEpHIbeTw8fPbR/vlXohFtCOoPXHma7uUFd+UpwMExs1Nt1R3ooui8XBgayZVRROybczG2Lh7TNT+7aurxZCKC9nIkZVToStYmitKoYi2ZwqTB+Qj8s5Rj42li+IicH1zycGHt2H5Q3orUNvalk/184cm1E1MTP/O1Hwx4a7MtITTg7q6rVH6ZN0FjgdAI9WPGuososleyOoDD4uA2ihx7ggR9I1pSIN5o0kI0E1SdSgAzdBStD3zyGFs/7DOmB9yCHpD5kcjkXN3BljuujPh2QxE84bM+1KUZOkRJjOYOuyQymiXch/PB+ORLPRjvnnisVQwnxifUcuHIud2EzBihMMmaXvAJTmKZJBCFA6SEEjaGMbSMJyO5vwABXviq6/Y3VvtbOjvVxsTceiRiQc0lS/Ikvg+zOY8rY06wAp5JdadEU3Xenr+xMqST+V0SL6Sm0MbKI9VqmlIJ2cA/H02hzgcmo6gbhVs7NvzM29sVCiL58+fXFuDj07O3vx9OnXJS4BAYdTftnuujg76xeFOMkrQPF2NnL1w4ZMpqG/mEwkixfLiXiyiFY1ZG6bnZ1NzM3NJWbnX5+9QorEHMrP2g+bJVGNZcLY7OyWRV3Z+RJ5FP5BQ6ZsbzuVa5fMdZw5hU9QQcAZn40ztbz6Agg7SEyf8lpRsKfWb7zeQbieQluhHPRiDULjqBc8MtJUlCfR/Qpcb5YvDdZLPFupv1m+wPUvlU2SN+RVTQ8QHYzHQOsI6Nf2eXkCRl57y9jphWndJHUvGyY2DRyBMvJ0eGqkK93LbFWUIUlRBEkTxaCbk5lphtMiuZtFcN4wI4aZgB9G/bHs0GA4s5lhwpGQqob8miR4ecHnEtQOgZEUVfHHajb0j/QW/BpgUhdgZ2dW5okNVTViFOzkfi3sC+p2ly1YPnu7y8AOe4kpdCL0CpEbskeBNmKEkSDM9UxM9MwJIkSEdtPe7TvDYQ5jzm39CCJyEj/LVyCERq3uHPazsotBEz3oUM+EKLhdnAf89HLC2gk3MlhAWdltXRBV76wmX4RAYpaE7dDh2Olv0YdoP6wOrL1E1h6QXsY5zPGBOA3OrEGX6SlZEdYfGq129M4Mj0++tG58V3977/jTeDMnS48cN8L5aLrbegJfiHWnY70DBRH8tj9e+xx9mV5LJeG5IEDAGy6RMrGTg9HBP4bFxLqWIBlTM8GXyoyuQdxK/90/WVOPHZU/L/jESFedJsic+GnuvgdR+/RwS77H+tVXz6JVQ8UldyiuL8iH/xEdeFz0cz5eD3VGJHHG+t/Tn22Ymfho5viDBbT8kW/+F+vqlLbg503hPPgj9eDnbQA5XFMwIWCinT0Z1UAk2WyvRhUVne0kWDuW5JjAEJRJcjZQrGKQu1IFNENXG2nN1OKqjMFSmlwJkKGKS8UC2TUD97oV28cYcH79hg3rn33nWXJ57ifPWYafEdbtOrBWNtZP7XxUiEh1Devw5MeTzHhLwOeTDAmLnCB5vTg2LuzoLXY/yK1r9ntYiWfw1uzmic51m3IzsaGh2Exu07rOic3ZmejQUJSTBa5YENWyNeA3EnIoss4olMuF6HhzIBjEedHvl0WvouAYGo92M2Y+ZhixvMl0G+uWBGRBlbQFeX4CYpsc1QPyXF0q2Wd3gjdgDmJdnfg8xPqZ8aaaODcVynaQQeyqFkA33LgF0FBp/0SPlScCjS7EDRfN13M8pj2SvdNSTqALySKb4HiacX/eWuZJyP8myyvkhPxF9GloVD1o9QvOvd0TSGYCEFwiurZNU058QWDjHGYQa3XI8r/Z9B5yoweeUPumQC33LLwYCQi2/7Zo6vBdpu77k2/U8GcXzay468bku9fj166/mQzedX1kAq2nFu19J+y8VS5t730nIYKqlEkYFfOCqEPBqY0g/lBohZUQnBdIjnjx5vfnxY0bRbEN3NuNG92GWHC74eouiAZcobNNfGfRHvj7MhltcC9QQfVP219YtBVu6/tH+Cf4IMyRO60RrE/WXHH+poxAI6rcSCDgnziIf8pBeLgqN9pe76lT3m0aqTz5pPfPCb05QmC/+4/2PmEc3h121eLnFPH+CWJWSrW9IRsO7R1BYkZpf1S7FNW2aFF0CQQQGoa+BSqXoOMs6f1Ag97gB9d7Cbnjvy+sR5CKkfxYnc/Oj968FBo5D6EvXoAfAtsi0i/3QFEQxfPAc0DZw4sPHrykkGUBCliWRqAAAnH1IkaTb/0u/Qy8OwXfGsfwrT7bWedtE0BCLa0SsK2e6Zws4hdM7rHNt3fL4CRLEr2MYfhXec6zRhKZkWU99z2GVlr/rW4gbD3Thf33HWu9IilIkZ6VsAu5XbIino0eu2+i3/qMYaAv9tv7i8R/8gC/s9StgHkrWjOpsEAv4ntqMd9tR+Y633WAQc5AVYTs4AzUHtjDGFgnuQG8XOR3E+dFQrttN2O3vbFKGv2PvXmcOfKTwyiW6VRfmfzc8LHNXbhz+sipw9va6VtfCaLHnLtI/tW5azdxeXaLdfcdw8fPn+AOWycbMsFXbq1OPfq1I1s7mO5Nx9d8bvKV4MKeqfNNXjs7LJ5dUq8F3PTCN9XybiQB+1fnb52zZ466/9Y525P969PknLMWsPaO31pPNYOv6uuSK/l0o644PikHitdUakrBL0l80JuShoFFH1OptflFH4eXo03WyYu4c/51tPHtt5GhyVfXO3nEJ+zLJ7a6+i+uenvV/KXaSRmvnV2sHbJx8o618zTgYFC2HX+BDoGfoxL/gLfzLzzy1c7ZAWgik0yI9rp81u81nveKR0Xr9/5ACJ/X8Td1xfq9tUEXaQipvWA7AkqLk0NfOI9VBr0sxBkbl6+frNLIURwMbra91wPYyBH/T8YpstkNltVJBNqnry7VDlLVNZ4fjJq99TjSnW6892w0VF7yVrEkxaJuLBkJd+mL6/3xTpRrpsuJIvq+dauD4d+NBB+uhMIRFI7ovbu0V7LDDcfiKZcflloVUhu7ZX0k0dxRdHzk2j7mncCHbho5eeCFbUoIEZpsnan12ctY6yOOxaI+sr43FM65BVQRPoa30Q6gbo5gWMn6ZcmGuzm7JE3SXWtlwGH5k2HU0JBF0HPyNKGCAm3ZYuif0ADSP2lnjC1GzUcC3XKD5WQhvhLP5mSGxhTJhTX5XKjJyXZe/+ymWurN2WMqXd/lIJtHYDR85ChGBQ1aX4bfGbzf1vYtgmgZwoLGkyZ692FWEdlHoOsQEP4Qfg9vuUGBfmFT7SZbt7sfYd0y97CVFCmGyBDTap8NcjL0ni4xm2jUvSJHM45TZxIXDgWbShUdJWtGn5ztS9WM/sIxvop9bKI6XoU/3Hn1w7lxcAaNq/ttdKBtoLodxGy/c15vd7KIfS1V3D3W1WVZV7acvgs1zIrC/Li9OfwULwXmx53DeU+Ry/XzxwFagnmmQd7NmIztWIGrHeNg9QLJpmAIDViaeKHkwAftH+mxQj0jjOQ3zI4m1swODgzkY3ysPR1RRe7Mnuf3MjtfmunuGRrqMdq7y+2xMA4ZIfjTzGJHtRNdXLsHaPAue11fA9ntgnirQn0W1vUzw0t05+wXx6dydOr6IhZuJOliHDiwbKpcMZjKQvbNd2NUxvbedE0tF26vYhKaVdnrd6AdsWZVMMI5zVnQf8D/Yu+/5Q0jnPLkQulwwtPULClGOBs6au/F2cNH67PRsOSvU0IJ/xK93G06d9dnEqriC0ekRCJX7ko7N+C+4sYlihkG15lIyvwbtX07jGkkippmqsXJOiOjqtjZxEO/qxEosURdbEWy0BtsDYc0ZN/tjybq4iuq4a58NqqghV2/mn+M94O88bYvGZJszAo0leyzzmxNnEC0HB2vafNp1EAOB6MLUW3+A1tRfWBpsB+qT04vH8XDK2atc7b7grpBEac3PfbYpmmjFq98hz5Bf4qKUMuocVizoeqSppC9/2T7L7xOknBkMxQgES04k+UF56bm16RymABOgdCW0fWcayW12E/XwCA68X3Wu0PJKRotIRyFyEtmtIDygLdFGfFaO70PgEc3oig7vDmfTouMobtkmdb96OP8SO6h3AO5pUvzD7XuaG0daT3Yur211vqGDo/0a7TCeWHCjMhovpx3h9d7u4K+qikPKN4RbxYeCU+UZRdwgBFp3Wcd6cnd3pp/oPWh/NKl8JCDuZFc647cIadl82bGjlUEsEo54E1jnd/NEXmu2OcCUaGcXPhSaCWdU/2mncK3j+UHyRluWKOLqqFhf0xBU9b+YIe2PBhEu7RRdEKq33cbOakY7atzuf7rNM6sbvKKDRA0+6OqesXar6or1OUa2lUZ/bmWXD2Bjl14FKsK5+cndnfiuhZVBD9lwfdUqSZ7js3JxpCy4KfcON6yYAXAWZFpA/zPxZEA+lgU5hwgJGfXLo088tThYTx66JmDY59b5I3i2BUCj0DxOhC/eccjIFhHvnYEKB+5Y5FP6pw3u4tWKBcgQRzmFNXBsbRxoJhCEOdWMWtvZCFeTUJkm6OJv4Tfy1t3D45Xtw0X5t9CT65ed8fhYYTf693+xLNf29aHu3c8/vxXZrrQ+vEBa12hMLz90+jJwvCjw3ffvfaJ7TA885UzJ3dWuYHpp6j/Dw7kfPMAAAB4nGNgZGBgAGK5WxOF4/ltvjJwM78AijBcsj3uBqHniv3/8T+LZSNzBJDLwcAEEgUAUnYMjAAAAHicY2BkYGAO+p/FEMWykYHh/zMgCRRBAS4AhjgFrgAAeJxjfsHAwLwAiiMZGFj0gfQLCBuML0P4cHFBiFqmZUD6JVRuI5IemNpDQDUNWMwE0S1IdopCxWCYB4hnQPECqBiM3QLhMxlA+YJQMwWR2CuRzIa5F2b2AqhboGJMTah+B2EAhNsmqwAAAAAAADoAhgEmAoYC9gM8A4YECARiBMAFNgXSBjQGpgdEB7gIUgjyCV4JrAnyCjAKoArwC1gLqgv2DGQMlAzwDQ4NQA2iDeIOEg5kDxQPYhAWEEQQsBEUEUARiBIYEoISuhMME0oTghPAFAIUbBS+FSQVThWoFhoWcBbGFwYXqBfgGG4YwBkKGUsAAAABAAAARAD0AA8AAAAAAAIAAAAQAHMAAAA0C3AAAAAAeJx1kc1Kw0AURr9pa9UWVBTceldSEdMf6EYQCpW60U2RbiWNaZKSZspkWuhr+A4+jC/hs/g1nYq0mJDMuWfu3LmZADjHNxQ2V5fPhhWOGG24hEM8OC7TPzqukJ8dH6COV8dV+jfHNdwiclzHBT5YQVWOGU3x6VjhTJ06LuFEXTku0985rpAfHB/gUr04rtIHjmsYqdxxHdfqq6/nK5NEsZVG/0Y6rXZXxivRVEnmp+IvbKxNLj2Z6MyGaaq9QM+2PAyjReqbbbgdR6HJE51J22tt1VOYhca34fu6er6MOtZOZGL0TAYuQ+ZGT8PAerG18/tm8+9+6ENjjhUMEh5VDAtBg/aGYwcttPkjBGNmCDM3WQky+EhpfCy4Ii5mcsY9PhNGGW3IjJTsIeB7tueHpIjrU1Yxe7O78Yi03iMpvLAvj93tZj2RsiLTL+z7b+85ltytQ2u5at2lKboSDHZqCM9jPTelCei94lQs7T2avP/5vh/gZIRNAHicbVHXktswDNTaVHHJpffeq5JcyqXnUu5HaAoqI5hUWOLYXx/JnstTMMPFABxggUU0inY2jf5vR1GEEcYQiJEgRYYJpphhjhPYw0mcwmmcwVmcw3lcwEVcwmVcwVVcw3XcwE3cwm3cwV3cw308wEM8wmM8wVM8Q47neIGX2McrvMYbvMUB3uE9PuAjPuEzvuArDvEN3/EDP3EknJd2OkBOy86vx8pUaf9yyV4sZcNJR1o1PO84uFw1VjEVY+l4TGsSXlZOqFr62Fvp6mQhXUs+6cJmw5Sx1FWQFSWuqbTkODiyLvbGsJtIa82qb7jK6E/fQFc0Kw0XZHPTE8YLG1w9K9ms8oWVWtViSToIZQrKhja5LIqRWsWVNaETtVnShH4Fyc2GbDKMne8njqQdCs1vSkLHRhbzncsVm1CMW1qnmvzK2Hav0aU53i7fz5Rk0oW0I9POa+Lu+CthU5ngRcmyil3X6INJbYKtWDoXq5pUO9viTss91U9O/K94F4pByalpj9M9gbS+X9O0pNONMcu80dnW91Sx7yV1SdmwJ5ttN+svk7rG01J2QlnTpV2jfLAkBmFSV4eyZBJsVCu40W2ysv0F61gNmXgxYBT9Ba0XvBgAAHicY/DewXAiKGIjI2Nf5AbGnRwMHAzJBRsZWJ02MjBoQWgOFHonAwMDJzKLmcFlowpjR2DEBoeOiI3MKS4b1UC8XRwNDIwsDh3JIREgJZFAsJGBR2sH4//WDSy9G5kYXAAH0yK4AAAA') format('woff'),
+ url('data:application/octet-stream;base64,AAEAAAAOAIAAAwBgT1MvMnwtYSoAAADsAAAAVmNtYXCdxeuOAAABRAAAA1ZjdnQgAAAAAAAAPsgAAAAKZnBnbYiQkFkAAD7UAAALcGdhc3AAAAAQAAA+wAAAAAhnbHlmb9Zo6QAABJwAADKWaGVhZAhDqAMAADc0AAAANmhoZWEIYARGAAA3bAAAACRobXR489wAAAAAN5AAAAEQbG9jYdViyOIAADigAAAAim1heHAA+wx2AAA5LAAAACBuYW1lzJ0bHQAAOUwAAALNcG9zdFs+fpAAADwcAAACoXByZXDdawOFAABKRAAAAHsAAQOWAZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABAJgX//wNS/2oAWgNYAJYAAAABAAAAAAAAAAAABAAAAAMAAAAkAAEAAAAAAOQAAwABAAAAJAADAAoAAAHqAAQAwAAAACwAIAAEAAwAACYGJpkm7ycJJw4nleCt5wrnDecg5ynnPee26CXoKPCu8LDw4PDo8SX//wAAAAAmBSaZJu8nCScOJ5XgrecK5w3nIOcp5z3ntugA6CfwrvCw8ODw6PEl//8AANn82WrZFdj82PjYch9bGP8Y/RjrGOMY0BhYGA8YDg+JD4gPWQ9SDxYAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAFsAAAAAAAAAB0AAAAAAAAAAAAAAAAAACYFAAAmBgAAAAEAACaZAAAmmQAAAAMAACbvAAAm7wAAAAQAACcJAAAnCQAAAAUAACcOAAAnDgAAAAYAACeVAAAnlQAAAAcAAOCtAADgrQAAAAgAAOcKAADnCgAAAAkAAOcNAADnDQAAAAoAAOcgAADnIAAAAAsAAOcpAADnKQAAAAwAAOc9AADnPQAAAA0AAOe2AADntgAAAA4AAOgAAADoJQAAAA8AAOgnAADoKAAAADUAAPCuAADwrgAAADcAAPCwAADwsAAAADgAAPDgAADw4AAAADkAAPDoAADw6AAAADoAAPElAADxJQAAADsAAfMEAAHzBAAAADwAAfRkAAH0ZAAAAD0AAfUAAAH1AAAAAD4AAfUSAAH1EgAAAD8AAfUXAAH1FwAAAEAAAfUnAAH1JwAAAEEAAfVUAAH1VAAAAEIAAfarAAH2qwAAAEMAAAABAAD/ygOhA0AAIAAGsxsJAS0rARQPARMWFRQOAS8BBwYiJjU0NxMnJjU0NyU3NjIfAQUWA6EPyzABDBUM+/oNFQwBMMsOHwEYfgsgDH0BGCAB6QwPxf7pBAgLEAEHhIQHEgoECAEXxQ8MFQUo/hcX/igFAAIAAP/KA6EDQAAJACoACLUlEQcDAi0rATcvAQ8BFwc3FxMUDwETFhUUIyIvAQcGIiY1NDcTJyY1NDclNzYyHwEFFgJ6q+tqaeyrKdPT/g/LMAEXCgz7+g0VDAEwyw4fARh+CyAMfQEYIAEipSPV1SOl629vAbIMD8X+6QQIHAeEhAcSCgQIARfFDwwVBSj+Fxf+KAUAAAAAAgAA/7EDWgMKAAgAaAAItVEgBgICLSsBNCYiDgEWMjYlFRQGDwEGBxYXFhQHDgEnIi8BBgcGBwYrASImNScmJwcGIicmJyY0Nz4BNyYvAS4BJzU0Nj8BNjcmJyY0Nz4BMzIfATY3Njc2OwEyFh8BFhc3NjIXFhcWFA8BFh8BHgECO1J4UgJWdFYBHAgHaAoLEygGBQ9QDQcHTRkaCQcEEHwIDBAbF08GEAZGFgQFCCgKDwhmBwgBCgVoCA4XJQYFD1ANBwhNGBoJCAMRfAcMAQ8cFlAFDwdIFAQEOw4JZgcKAV47VFR2VFR4fAcMARAeFRsyBg4GFVABBTwNCEwcEAoHZwkMPAUGQB4FDgYMMg8cGw8BDAd8BwwBEBkaIC0HDAcUUAU8DQhMHA8ICGcJDDwFBUMcBQ4GTRwbDwEMAAAGAAD/cgQvA0kACAASABsAewC3APMAEUAO4MKlhmMzGRUQCwYCBi0rATQmIgYUFjI2BTQmDgEXFBYyNgM0JiIGHgEyNgcVFAYPAQYHFhcWFAcOASMiLwEGBwYHBisBIiY1JyYnBwYiJyY1NDc+ATcmLwEuAT0BNDY/ATY3JicmNDc+ATMyHwE2NzY3NjsBMhYfARYXNzYyFxYVFA8BBgcWHwEeAQEVFAcGBxYVFAcGIyIvAQYiJw4BByInJjU0NyYnJj0BNDc2NyY1ND8BNjMyFhc3FzY/ATIXFhUUBxYXFhEVFAcGBxYVFAcGIyImJwYiJw4BIicmNTQ3JicmPQE0NzY3JjU0PwE2MzIWFzYyFzY/ATIXFhUUBxYXFgH0VHZUVHZUAa0sOCwBKjosASw4LAEqOizYCAVWBgwTHwQEDUILBgVAFRYGBwQNaAYKDRMXQgQNBlAEBSQIDQdVBQgIBVYHCxMfBAQMRAoGBkATGAYHAw1oBgoBDRMWQgUNBVEEGBEIDQZVBQgBZVMGChwCRAEFFR0LDAsHLAMBRAMdCgdTUwcKHQM0EAEEKggRERwXBAJDAhwJB1NTBgocAkQBBSoICwwLBywERAMdCgdTUwcKHQM0EAEEKggMCgwcFwQCQwIcCQdTAV47VFR2VFTjHSwCKB8dKioCWR0qKjsqKs1nBgoBDhMXGyUGDAQRQgQyCwY8Gw0IBlUGDDIEBEsPBQUILAwYFg0BCAdnBgoBDhMXGyUGDAQRQgQyCgg8Gg0IBlUGCzEEBEsPBQUeFQ0bEwwCCP7PTgkIDw4/DgICKBslAQELNAEoAgIOPw4PCAlOCQkQDT8OAgIeCTQMAQEoFwEnAgIOPw0QCQIzTgkJDw4/DgICJzQMAQEMNCcCAg4/Dg8JCU4JCBANPw4CAh4JNAwCAigXAScCAg4/DRAIAAP///+xA+gCwwAZADcARwAKt0M8LSAVAQMtKyURBgcGBw4CKwEiJi8BJicmJxEUFjMhMjYTNS8BJgYnISIGBxQfAR4EFzMyPgM/AT4BNxEUBgchIiY3ETQ2MyEyFgOhEhWVWRwkPBsCGj4RLliWFRIMBgM2BwoBAgMDBAb8ygcKAVLgBCASIBgMAgsaHhQeBeAeNEc0JfzKJDYBNCUDNiU0CwGsFBFyShgcGhoOJkpyERT+VAgKCgJSDg4FBQIDDAZeQbECHA4WCAEKFBAaA7EYUjX9oSU0ATYkAl8lNDQABAAA/7EDTQL/AAYAFAAZACQADUAKIB0XFQ8IAgAELSsXNycHFTMVATQjIgcBBhUUMzI3ATYnFwEjNQEUDwEnNzYyHwEWyzKDM0gBXwwFBP7RBA0FBAEvAx7o/jDoA00UXehdFDsWgxQHM4MzPEcCBgwE/tIEBgwEAS4Ecej+L+kBmh0VXelcFRWDFgAC//3/sQNfAwsAIwAwAAi1LScbCQItKwE1NCYHIzU0JicjIgYHFSMiBhcVFBY7ARUUFhczMjY3NTMyNjcUDgEiLgI+ATIeAQKnFg6PFg5HDxQBjw4WARQPjxYORw8UAY8OFrJyxujIbgZ6vPS6fgE6SA4WAY8PFAEWDo8UD0gOFo4PFAEWDo4WMnXEdHTE6sR0dMQABP/9/8ID1QMBAC0ANwBBAEsADUAKSUQ/OjUwKQIELSsTJjYWHwEGFxYXHgE3MjcWNjceATc+AT8BNic1Fjc+ARcWBgcOAwcGIyEmJxMmNhYfARYGJicTPgEWHwEUBiYnEz4BFhcHDgEmJwEEJjQJNQ8BBh4HMigvGyJiGRtYHQwQAwUCARojMXgmIQQhPVYwRCwVLf6iVBVCBjY6CBUEKjIMeAI8QAQIODoBmARCOgEGBToyBAK8JSAWG7gdIx6uNDwBJScEJyUIHxAgFSEMHCYKIi1CGRhGFBlybnwfEgZwAZotKBgk0SksDiYBHykeICH4OyIqKQEAKxgmIf4vJigvAAADAAD/+QPoAn0AEQAiADMACrcwJxsUDwIDLSsBJicWFRQGIiY1NDcGBx4BIDYBNCYHIgYVFB4BNjU0NjMyNgUUBwYEICQnJjQ3NiwBBBcWA6FVgCKS0JIigFVL4AEE4P65EAtGZBAWEEQwCxAB2QtO/vj+2v74TgsLTgEIASYBCE4LATqEQTpDaJKSaEM6QYRyiIgBSQsQAWRFDA4CEgowRBDMExOBmpqBEyYUgJoCnn4UAAADAAD/vQQkAwsACAAdADQACrctIhcNBwIDLSsTNCYOAR4CNgEUBwEGIicBLgE9ATQ2NzMyFhcBFhcUBwEGIyImJwE2NCcBLgEjMzIWFwEW+io6LAIoPiYCVRT+7hY7FP5xFR4qHekdSBUBjxTXFf7uFh0UGhABBhUV/nEVSB19HUgVAY8VAlgeKgImQCQGMP7ZHhX+7hUVAY8VSB3oHSoBHhX+cRUdHhX+7hUQEQEGFTsVAY8VHh4V/nEVAAIAAP+wA+gCwwAlAEsACLVJNiIKAi0rARQOASMiJwYHBgcjIiY1JjQ2NT8CNgc3PgI3LgEnND4BMh4BFxQGBx4BHwEWHwMUBw4BJyYnJicGIyInFjMyNjc+ASc0Jx4BAxJqtGswMkZVFRsCBgwBAgEEAwMBHAUODgRFTgFqtNa0atZQRAUMCBsJBAUEAwECCggbFVVGMjCXcCARWqRCRUwBDUhUAaVNhEwJMRcFBAoHAQQEAQMGAwMBHgUYEhAodENOhExMhNxDdicOFgohCwMFBgoBAggKAQQFFzEJSgMyLzSGSisqJ3gAAAAABgAA/7EDEgMLAA8AHwAvADsAQwBnABFADl9MQDw2MSsjGxMLAwYtKwERFAYrASImNRE0NjsBMhYXERQGKwEiJjURNDY7ATIWFxEUBisBIiY1ETQ2OwEyFhMRIREUHgEzITI+AQEzJyYnIwYHBRUUBisBERQGIyEiJicRIyImPQE0NjsBNz4BNzMyFh8BMzIWAR4KCCQICgoIJAgKjwoIJAgKCggkCAqOCgckCAoKCCQHCkj+DAgIAgHQAggI/on6GwQFsQYEAesKCDY0Jf4wJTQBNQgKCgisJwksFrIWLAgnrQgKAbf+vwgKCggBQQgKCgj+vwgKCggBQQgKCgj+vwgKCggBQQgKCv5kAhH97wwUCgoUAmVBBQEBBVMkCAr97y5EQi4CEwoIJAgKXRUcAR4UXQoAAAAAA////7ADoQLEAAgAEQA7AAq3Lx8PDAYDAy0rBRQOAS4BNh4BBRQOASY+AR4BExEUBgcFFhQHITIWDgEjISImNTQ+AjUDIyIuATYXMzIeAgYWByEyFgFlKjoqAi42LgHyKjosAig+JkoUDP25Bw0CAQ8WAhIR/cUOFgoIEGJyDxQCGA2PCQ4GCgIIAQKeDhYHHSoCLjYuBCYfHSoCLjYuBCYCQP7iDRQCRCIOGxYcFhYOBhgQHAIBzBQeFgEGDBAMFgMWAAH////KAqYC8QBPAAazPh0BLSsBIgYUFjcyNzYWFxUUBisBIiY3NjU0JiIGBxQXFgYnIyImJzU0NhcWMzI2NCYnIgcGJjc1NDY7ATI2JyY1NDYyFgcUBwYWNzMyFh0BFAYnJgJKJTY2JRYVGhYBMB+PEA4JFURiRAENEQoUjyEsARIWGBsmNjYmFRUaGAEuII8TDBEORmBGARUKEA+PHzAUFBgBkkRgSAINEQwSkB8uEhYZGiY0NCYWFhoWAS4fkBAOChREZEACDREKFFshLhQbFBgmNDQmGhkVFAEuIVsQDgoUAAUAAP/iA/oC2gA5AEEASwBjAGYAD0AMZmRgUEdCPTsoAwUtKwEWBgciLwEmNz4BJw4DJy4BNTQ3NjcnDgEnNCY1JjYzNzQnNDMyNzIdATYzNhcUFhUWDwEVMzIWBRY3JwYHBhQ3PgInJiMiBiMlFhIWFCsBIjUnIwYHFCsBIjU2EzY7ATIDMwMD3B5QXgoCIAIEVj4qEC5IZDg0QDwyQAKMDAQKAgYEnAIILgYKngYIAggECLAMVnz+phwiBCIaLKgcPB4IJDwCCAL+PgpWUARWBjKwMAIGVgQKpgIIYAqCkEgBMlK8QgImBgQ8uDgmTFQuCAZGOlRAMhBkGAIGAjYEAgQcbgQIAghoFgQKAioECgIeZkjgBgzWDBwsghYYWEYGEgKyHP7u+AYEpqQCBAQSAhYI/rwBCAAAAAAFAAD/sQPoAwsADwAfAC8APwBPAA9ADEtDOzMrIxsTCwMFLSs3FRQGKwEiJj0BNDY7ATIWNxUUBisBIiY9ATQ2OwEyFjcRFAYrASImNRE0NjsBMhY3ERQGKwEiJjURNDY7ATIWExEUBisBIiY1ETQ2OwEyFo8KCGsICgoIawgK1goIawgKCghrCArWCgdsBwoKB2wHCtcKCGsICgoIawgK1goIawgKCghrCAouawgKCghrCAoKQLMICgoIswgKCof+vggKCggBQggKCs796AgKCggCGAgKCgEW/MoICgoIAzYICgoAAAAAAgAA/4kEsQMyADEAZQAItVE5MBYCLSs1Nj8BNjc+ATc0JyYnJjU0NyYnJj4BNzIeAgcGBxYVFAcGBwYVFBYXHgIXHgEVFyEBNDcmJyY+AR4CBwYHFhUUBwYHDgIXFBYXHgIXFSM1NC4CJy4BJzY1NC8BJicmJyYUKEUdFSUoAR8TDi0OBQQFPmo5K1Q+IgMEBA4tDxEgKCYdfmQQEhQB/JICwQwFAgQyWFxWNAQCBgwkDA8JCAoBIh4RMkYP/gYIFgwXPDEbBQgDCQ4NJTEHDxoLCxNKJxslFScSOisSJys3aj4BJj5SKjcbEyo6EikTJRsnShMPLigSETwVFQHTIhAgIy1YOAI0XCsjIBAiMA4hEQoMFAogPBAJFBgHhwsHJiIqDBkmEiIsCgoQBgoPIhAAAAAE//r/mgPzAxoAKwA3AFYAXgANQApbWEg/NzEaCAQtKxMOARQjBwYHBi8BJjc+ATc2Mj4BNzI+ATc2NzIXMgcGBwYXFhcWDwEGJy4BFwEWDwEGJwEmPwE2JRYHBicmDwEnNz4BJjc2NzYWBwYHBhYXFjc+ATc2FgE3FwcGLwEmmwgGAhEPBBAMRgsNAiAEBioeCAYCDiYWhjR6GgwUeCBQLCIECApMDgQqOvgBmhIUMBYQ/mIICEgMAjIQIDJoOCxSREQYDgIGDIAMDAQMIg4EJjomBigCBBL8qP5M9hQSLhYB+ggcFg8NBA4STAwMAhgEBhwwBg4eEFoGAgg0GDg6LgIIBkYIBDAYMv4kFhAqDhIB2AgMPgjAaD5YGgwsTk5GGDpIFjg4BhIGDEQKMhwoPgw6BAoC/UT4VvIUEC4SAAIAAP+xA1sDCwAkAEcACLU/KBAEAi0rARQVDgEjIiYnBwYiJj0BNDY7ATIWBg8BHgEzMjY3Njc2OwEyFhMVFAYrASImNj8BJiMiBgcGBwYrASImNzU+ATMyFhc3NjIWA0sk5JlRmDxICxwWFg76DhYCCU0oZDdKgicGFwUMawgKDhQQ+g4WAglNUnBLgicGFwUMbwcMASTmmVGaPEgLHBgBBQMBlro+OUgLFg76DhYWHAtNJShKPgo4DQwBuPoOFhYcC01NSj4KOA0MBgSWuj45SAsWAAAAAAL////DA+kCsQAYADEACLUtHREJAi0rJRUUBgchFRQGByIvASY0PwE2MhYdASEyFgMUDwEGIiY9ASEiJjc1NDYzITU0NjIfARYD6AoI/QAKCAYHsgUFswUPCgMABwwBBbMFDwr9AAcMAQoIAwAKDgeyBb1rBwoBawcKAQayBRAFsgUKCGsKASgIBbMFDAZrDAZrCAprCAoFsgUAAAL////5BBkDCwASACkACLUgGg4FAi0rARQPAQ4BIyEiLgE/AT4BMyEyFicVISIGDwInJjcRNDY7ATIWHQEhMhYEGRK7GFYm/aETHAERvBhWJQJfEx7A/jA1ciO8AgEBAUozszNKAS8zSgE/EhPdHCgOIhTdHCgOr1o0Kd0DBwUCAhgzSkozEkoAAAAAAv/8/34D2ANKAA0AHwAItR8UCAECLSs3Nh4CBwYHBjc0Nz4BARYABwYHBicmJyYnJjc2NzYAdiZeUgwkVo5UBAY0GANsGv6kdiZWCAgSHiAiEAhAKHYBxKoiClBeJFQSDBoEBjyqAqga/kR0JkIGDiIeIBAGClQmdAFWAAQAAP+6AoADAgAsADUAPgBHAA1ACkM/OjYzLxoQBC0rARQHDgMHDgMHFhUUBiImNTQ3ESY1NDYyFhUUBxU2Nz4CNyY1NDYyFgUUFjI2NCYiBhMyNjQmIgYUFgEyNjQmIgYUFgKASgYsTjouKio0GARGRmRGSEhGZEZIKGI6NDIERkZkRv20KDgqKjgoRBwqKjgoKAGsHCoqOCgoAopQHjpWNBgODhAgMCQeUDJGRjJOIgF6IkwyRkYyTCLMHh4SFjwuIEwyRkYyHCgoOigo/UYoOigoOigCWCg6KCg6KAAAAwAA//kDWgLEAA8AHwAvAAq3KyQbEwwEAy0rJRUUBgchIiYnNTQ2NyEyFgMVFAYnISImJzU0NhchMhYDFRQGByEiJic1NDYXITIWA1kUEPzvDxQBFg4DEQ8WARQQ/O8PFAEWDgMRDxYBFBD87w8UARYOAxEPFmRHDxQBFg5HDxQBFgEQSA4WARQPSA4WARQBDkcPFAEWDkcPFgEUAAAAAAMAAP+5BBYCugAUACQAOQAKtzQnIBgKAgMtKyUHBiInASY0NwE2Mh8BFhQPARcWFAEDDgEvAS4BNxM+AR8BHgEJAQYiLwEmND8BJyY0PwE2MhcBFhQBWBwFDgb+/AYGAQQFEAQcBgbb2wYBRNACDgYiCAYB0AMMByMHCAFs/vwGDgYcBQXb2wUFHAYOBgEEBUUcBQUBBAYOBgEEBgYcBRAE3NsGDgJO/S8HCAMJAwwIAtAIBgEKAg7+jv78BQUcBg4G29wFDgYcBgb+/AUQAAACAAD/nAPoAyAAKAA0AAi1My0YAwItKyUWHQEhNTY3PgE1NCYnLgEnNDY/ASYnJjYyFg8BFhUOAwcOARUUFiUzFSMVIzUjNTM1MwJstPzgJC5eRi4IAioECgQECAQGXORcBA4SAg4ODgIKLkgBRJaWZJaWZIBAOmrKDgwiRjwWNDAMGjAQFAIEMiY2dHQ2WAgiHB4EDAwuNhY8Ru5klpZklgAAAAH//v+xA1kDCwAwAAazKSEBLSsBFRQGKwEiJj8BJiMiDgIeAzMyNjc+AR8BHgEHDgEHIi4CPgMzMhYXNzYWA1kUEPoXExFNUnA6akwwBChUYj5CdikEEQZMBQIGPK5fV6BwSARAeJhbUpg9SBAtAsP6DhYtEE1NLkxqdGpMLjo1BgEFTQQOBkpQAUR0nq6edEQ+OUgSEwAAAwAAAAAD6AK2ABYAMABHAAq3QTUtIRQKAy0rPQE0PwEmJzQ3NjcyFwYXBg8BBgcVIyIXNTQ/Ai4BNzQ2MhYVFAcfARYdAQYHIS4BATYnNjcyFxYVFAcXFh0BFAcjNTQvASYSq0ICIyU1HyAxSAwNcjAEchm/Fpg5JS4BXIBaTj2SGAIj/eMOFAHZRC4fIzEpI0GoEht2Mm4PaoYaBlAnXDgvKQITfXALCDcXPY8ZqBsKRhwXVjNMbGxMajQeRgobqCUEAhgBWWp9EwIrKT5SMVAKFoYgAo85GzUIAAH//P/MA4gC8gAaAAazGAgBLSsBFgYrAREUDgErAREjESMiJjURIyImNwE2MhcDeBAKFlQCDhDMzMIcDlQWChABkBAsEAFQEBb+yg4ODAE2/soUFAE2FhABkhAQAAAAAAMAAP+fA48DHgAUACgAPAAKtzkuJRoQBQMtKyUVIxUUBiImPQEjNTMRNDY3MhYHEQEVIxEUBiImNREjNTM1ND4BFgcVBRUjERQGIiYnESM1MxE0PgEWFRECQDciLCI4OCIVGCIBAYY3IDAgODggLiQC/Zk3IC8gATg4IDAg73CnFyIiF6dwAfcYHgEgF/4JAU9w/goXIiIXAfZwqBgeAiIWqHBv/nkXIiIXAYdvARgYHgIiFv7oAAACAAAAAAOPAq0ABAAJAAi1CQcCAAItKwElNSEVASURIREB0/4/A33+RAG8/IMBbtJtbf6z0v5LAbYAAAACAAD/wgMiAuoAEQAaAAi1GBQMBAItKyUWDwEGLwEGIyImEDYgFhUUByUUFjI2NCYiBgMEHhguJCC+SlKAvrQBAMAu/hiIsH6IsH5OIhwuICC+Kr4BALa+gFhKqliIfrKGfgAAAQAA/2oD6ANSAEQABrMzEQEtKwEUDwEGIiY9ASMVMzIWFA8BBiIvASY0NjsBNSMVFAYiLwEmND8BNjIWHQEzNSMiJjQ/ATYyHwEWFAYrARUzNTQ2Mh8BFgPoC44LHhTXSA4WC48KHgqPCxYOSNcUHguOCwuOCx4U10gOFguPCxwLjwsWDkjXFB4LjgsBXg4LjwsWDkjXFB4LjgsLjgseFNdIDhYLjwscC48LFg5I1xQeC44LC44LHhTXSA4WC48KAAAAAAL/+P+2A+wDCAAGACMACLUWDQMAAi0rAQUjESMRIwEeAQ8BDgEjISImLwEmPwEzBzMyHwEhNzY7ASczAfQBBKS+pgLYEhIGHAQkFvzQFiQEHAoqnmKqsggEKAEsKAgEsqpiAwj0/wABAP6yCiwSmhQaGhSaMBhsgghubgiCAAAAAQAAAAAD6AKkAB0ABrMYBAEtKwEyFhQGKwE1MycHMxUjIiY0NjMyFyY1NDYzMhYXNgL4ZIyMZL5qsK5o+EpsakwOBgKcblqMGBwB7ojEiL7m5r5okmgCDBpsmGhSBAAAAv/6/3ADGgNWABkALQAItSodGAwCLSsBFgYHBicPAgYPAQYmLwEmNwEmJyY2NzYWBzYuAQYHDgEfAR4BHwEeAjI+AQMGFGBmQkB2RmgOIEwMFAIQCBQBAhgOEo5yarJsHhJUZB4ICAMFAhYHQxAOGA4UEAJkdMYSDArCDKYcBA4EEA5iHhoBgjJGaqIUFIK8LGo+FCwMFgkQBxQFMQwIEAIOAAAIAAD/kgOYAyoADwAbACcANwBCAE4AXQBpABVAEmVeVU9NRT48MCgmIRgUBgIILSsTIgcmJzY3FhcGFRQXBgcmBxQXBgcmNTQ3FhcGASIHJic2MzIXBgcmEyYnNjU0JzY3FjMyNxYXBhc2NzY3Bgc2NTQmJwYHJic2NxYzMjcWARYVFAcGByYnJic2PQE2AxYXFhUUBwYjIic24BYUMCw2Slw8BgQ+NhBuFDwUQjImLggBUBwWOjhUTnhuTFYaaqCCBA4mPBoeDhheKBB2JhA6Mi54BgKWvnJaRAxEBg4eFo4BYJYEQEIYQDBkCmQaDhICDlZsOjZuAfgKNExKLCYsEBAGEDA4BGIiGnJ2aoJuYD4yGAEwDiocHj4OJBr+NBhYFAoYHCwuFAhshA6WDi4EDpJWMDIKJExgsCRKkIICDmIB0ojMFiwSBjgEknYUFgoq/ewKCBIiUEAqDKAAAAAAA//8/5ADmgMsAAgAEwApAAq3HhQOCQUBAy0rATYAEgAEAAIAFyIGFQYWMzI2NTQDMjY3JwYjIj8BNiMiBgcXNjMyDwEGAca+ARAG/vb+hP7uBgEM8iouAiIgJi60Hmw0EjAYDgoqGjAedjgQNBYMDCQaAyoC/vj+hP7uBgEKAXwBEpYwGhwgLCA6/a40NBgkJqBgOi4aIiKYaAAADwAA/2oDoQNTAAMABwALAA8AEwAXABsAHwAjADMANwA7AD8ATwBzACNAIGBTS0Q+PDo4NjQvKCIgHhwaGBYUEhAODAoIBgQCAA8tKxczNSMXMzUjJzM1IxczNSMnMzUjATM1IyczNSMBMzUjJzM1IwM1NCYnIyIGBxUUFjczMjYBMzUjJzM1IxczNSM3NTQmJyMiBh0BFBY3MzI2NxEUBiMhIiY1ETQ2OwE1NDYXMzIWHQEzNTQ2FzMyFhcVMzIWR6GhxbKyxaGhxbKyxaGhAZuzs9aysgGsoaHWs7PEDAYkBwoBDAYkBwoBm6Gh1rOz1qGhEgoIIwgKCggjCArXLBz87h0qKh1INCUkJTTWNiQjJTQBRx0qT6GhoSSysrIkof3Eofqh/cShJLIBMKEHCgEMBqEHDAEK/iayJKGhoWuhBwoBDAahBwwBCiz9NR0qKh0Cyx0qNiQ2ATQlNjYkNgE0JTYqAAAAAQAAAAADpAKYABUABrMRBAEtKwEUBwEGIicBJjQ/ATYyHwEBNjIfARYDpA/+IBAsEP7qDw9MECwQpAFuECwQTA8CFhYQ/iAPDwEWECwQTBAQpQFvEBBMEAAAAAAD//z/kAOaAywACAAWAD8ACrc3Gw4JBQEDLSsBNgASAAQAAgATMjY1NiYrASIGBxQWFxM2NTQmIyIHBgcVMzU0NzYyFxYVFAcGDwEGDwEGBwYHFTM1NDc2PwE2Aca+ARAG/vb+hP7uBgEMvB4mAiYeAhwmAiYcqBpqUkAoRARuEBBODBAQCAwWCgoVCwYOBGwEBhYcLgMqAv74/oT+7gYBCgF8ARL9HiYcHiYkHB4mAgFIIixOTBoqaAQEGhwYFBQYEhYMCA8HCBEJCBQ6CAQMEBQQEiIAAAACAAD/+QNrAsMAJwBAAAi1PCwOBwItKyUUFg8BDgEHIyImNRE0NjsBMhYVFxYPAQ4BJyMiBgcRFBYXMzIeAgEUBwEGIiY9ASMiJj0BNDY3MzU0NhYXARYBZQIBAgEICLJDXl5DsggKAQEBAgEICLIlNAE2JLQGAgYCAgYL/tELHBb6DhYWDvoWHAsBLwsuAhIFDgkEAV5DAYhDXgoICwkGDQcIATYk/nglNAEEAggBLA4L/tAKFA+hFg7WDxQBoQ4WAgn+0AoAAAEAAP+2A4gDEgAWAAazEQwBLSsBNhYHDgIuAgYHEyMDNz4BHgM2A2oOEAhgiFQ+OkR2UFpkuFxafEg4RFqoAmgGDgyKlh4aMCAoQv6gAtAiQigiREoyCgAB//n/ewP4A1gAJQAGsx8BAS0rJQYkJyYCNz4BNzYWFx4BBwYHBgIXFiQ3PgEnJiQHNTYEFxYCBwYDV5f+apSPDoEIEQocQBkWCA4GCmkGZ3oBOGxQLTBD/uSftwFHTjQpUxAJjQ6MlQGEngoSBhEHFxg8HAwKdv7ebHEddl7vdpZ6MgE7iq1//vxqFgAAAAADAAD/agIwA1IAGwAoAGIACrdNMiYgGAoDLSsBFA4BFB4BHQEUBiImPQE0PgE0LgE9ATQ2MhYVBQcGFxYzMjc2JyYjIhM0PgI/ATY1NwYiJxcUHwMWJhYjFA4CDwIGJgY1Bh0BPgI1NDIVFB4BFzU0LwImLwEuAQIwYGJiYKzYrGBiYmCu1K7+HhIECFx8hFgOHmBqeJAIHAwZHVwCZPRkBFotExERDB4MAgoGCAwPDwIiWgh0RDRCegZcKxINBQwHBAJuLGhePFxmLnYiTk4idi5mXDxeaCx2IE5OIAYOCAY0MgoUNv5KEh4kDhgcXB4yNjYyIForExUVAjAKEhIOCg8QEAIiAVogQgQmMCIeHiIwJgRCHlwpEw4IFAwWAAACAAD/+QOgAwsALgBDAAi1PjEMAwItKwEVFAYjISImNRE0NjchMhceAQ8BBiMiJyYjISIGBxEUFhchMjY9ATQ/ATYzMhcWEwEGIi8BJjQ/ATYyHwEBNjIfARYUAxJeQ/4wQ15eQwHQIx4JAwcbBgcCAw0M/jAlNAE2JAHQJTQFJAYHAwQLgf45DSQO8A4OPQ4kDpMBaQ0kDj4NAUuxQ15eQwHQQl4BDgQTBhwFAQM0Jf4wJTQBNiSNCAUjBgIEAQX+Og4O8A0kDj4NDZMBaQ0NPQ4kAAIAAP/5AxMDCwAPAB8ACLUcEwgAAi0rASEiBgcRFBYXITI2NRE0JhcRFAYjISImNRE0NjchMhYCcf4wJTQBNiQB0CU0NHxeQ/4wQ15eQwHQQmACwzQl/jAlNAE2JAHQJTRZ/jBDXl5DAdBCXgFgAAAC//3/sQNfAwsAJAAxAAi1LigbCQItKyU0LwE3NjQvASYiDwEnJiIPAQYUHwEHBhQfARYyPwEXFjI/ATY3FA4BIi4CPgEyHgECgQplZQoKMwoeCmVlCx4KMgsLZWULCzIKHgtlZQoeCjMK2HLG6MhuBnq89Lp+4A4LZWULHQsyCwtlZQsLMgsdC2VlCx0LMgsLZWULCzILjXXEdHTE6sR0dMQAAAEAAP/vAtQChgAkAAazFgQBLSslFA8BBiIvAQcGIi8BJjQ/AScmND8BNjIfATc2Mh8BFhQPARcWAtQPTBAsEKSkECwQTBAQpKQQEEwQLBCkpBAsEEwPD6SkD3AWEEwPD6WlDw9MECwQpKQQLBBMEBCkpBAQTA8uD6SkDwABAAD/+QMSAwsAIwAGsxoJAS0rARUUBicjFRQGByMiJjc1IyImJzU0NjczNTQ2OwEyFhcVMzIWAxIgFuggFmsWIAHoFx4BIBboHhdrFx4B6BYgAbdrFiAB6RYeASAV6R4XaxceAegWICAW6CAAAAAAAv/9/7EDXwMLABUAIgAItR8ZEQQCLSsBNC8BJiIPAScmIg8BBhQfARYyNwE2FxQOASIuAj4BMh4BAs0LMgscDON+CxwMMgoKygoeCgEvC4xyxujIbgZ6vPS6fgG4EAoyCwvjfgsLMgofCsoKCgEvCkt1xHR0xOrEdHTEAAEAAP+7A6oDCwAnAAazIwIBLSsRNDYzMhcHFBYXMzIWDwEGFjcTNiYrASImPwE2MzIWBxQHAQYiJwEmkmhRQg4SDAoMDAM5BAQHwgcGDU0MCgRSOUNnlAE//qkZShr+qkACEmeSL/oMEAEQDKwMAgkBCwkOEAq3IJJnXkj+bR4eAZNIAAP///9qA6EDDQAjACwARQAKtz0vKicaCAMtKwEVFAYnIxUUBicjIiY3NSMiJic1NDY7ATU0NjsBMhYXFTMyFhc0LgEGHgE+AQEUBiIvAQYjIi4CPgQeAhcUBxcWAjsKB30MBiQHDAF9BwoBDAZ9CggkBwoBfQcKSJTMlgSO1IwBIio8FL9ke1CSaEACPGyOpIxwOANFvxUBlCQHDAF9BwwBCgh9CggkBwp9CAoKCH0KGWeSApbKmAaM/podKhW/RT5qkKKObjoEQmaWTXtkvxUAAAAAA////2oDoQMNAA8AGAAxAAq3KRsWEwsDAy0rARUUBichIiYnNTQ2MyEyFhc0LgEGHgE+AQEUBiIvAQYjIi4CPgQeAhcUBxcWAjsKB/6+BwoBDAYBQgcKSJTMlgSO1IwBIio8FL9ke1CSaEACPGyOpIxwOANFvxUBlCQHDAEKCCQHCgoZZ5IClsqYBoz+mh0qFb9FPmqQoo5uOgRCZpZNe2S/FQAGAAD/+QPoAwsAAwAHAAsAGwArADsAEUAONzAoHxcQCggGBAIABi0rJSE1ISchNSElMzUjARUUBgchIiYnNTQ2FyEyFhMVFAYnISImJzU0NjchMhYTFRQGByEiJic1NDYzITIWAjsBZv6a1gI8/cQBZdfXAR4WDvxgDxQBFg4DoA8UARYO/GAPFAEWDgOgDxQBFg78YA8UARYOA6APFEBI1kfXR/3ojg8UARYOjg8WARQBDo8OFgEUD48PFAEWARCPDxQBFg6PDhYWAAAB//n/sQMYAsMAFAAGsxEHAS0rARYHAREUBwYjIi8BJjURASY2MyEyAw8JEf7tFgcHDwqPCv7tEhMYAsoXAq0XEP7t/mIXCgMLjwoPAQ8BExAtAAAC////sQPoAsMAGQA2AAi1MiMEAAItKwERFAYHISImNxEWFxYXHgI3MzI+ATc2NzY3FAYHBg8BDgInIyIuAS8CJicuASc0NjMhMhYD6DQl/MokNgEZH8pMICZEGwIcQigfX7cgGDYp0jQ1DCIgCwIMHiQLNZNgEiM8AS4rAzYkNAHG/kUlNAE2JAG7HBWJNxgaHAEaHBdEfBa/LFAdkiMnCRIMAQoUCCdlQg4XUiQrOjQAAAABAAD/sQPoAwsAVQAGs0IDAS0rJRUUBisBIiY9ATQ2FzM1IRUzMhYXFRQGKwEiJic1NDYXMzUhFTMyFh0BFAYrASImJzU0NhczNTQ2FyE1IyImJzU0NjsBMhYXFRQGJyMVITIWBxUzMhYD6CAWshYgIBY1/uM1Fx4BIBayFx4BIBY1/uM1FiAgFrIXHgEgFjUqHgEdNRceASAWshceASAWNQEdHSwBNRcemrMWICAWsxYgAWtrHhezFiAgFrMWIAFrax4XsxYgIBazFiABax0sAWseF7MWICAWsxYgAWsqHmseAAADAAD/agOhAwsAAgAFADcACrcuDgQDAgADLSslIREJASEBFRQGKwEVFAYrASImPQEhIiY1ESMiJj0BNDY7ATU0NjsBMhYdASE3NjIWFA8BETMyFgE3AUz+mwFM/rQCgwoIfQoIawgK/h4ICn0ICgoIfQoIawgKAduJBRAKBYp9CAqIAUz+zQFM/olrCAp9CAoKCH0KCAHiCghrCAp9BwoKB32KBQsOBon+JQoABP///7EELwMLAAgADwAfAC8ADUAKLCQfFw8KBgMELSsBFA4BJjQ2MhYBFSE1NxcBJSEiBgcRFBYzITI2JxE0JhcRFAYHISImNxE0NjchMhYBZT5aPj5aPgI8/O6yWgEdAR78gwcKAQwGA30HDAEKUTQl/IMkNgE0JQN9JTQCES0+AkJWQED+/vprs1kBHaEKCP1aCAoKCAKmBwwT/VolNAE2JAKmJTQBNgAAAAIAAP+xAxMDDAAfACgACLUmIg4CAi0rJRQGIyEiJjU0PgUXMh4CMj4CMzIeBQMUBiImPgEeAQMSUkP+GENSBAwSHiY6IQUmLExKSjAiByI4KBwUCga0frCABHi4dkJDTk5DHjhCNjgiGgIYHhgYHhgWJjQ6PjwB1lh+frCAAnwAAwAA/8MD6ANAABIANwBxAAq3bVApFw8CAy0rAQYHJy4DJyMiJj0BNDY7ATIBFA8BBiImPQEjIgYvAS4FJzY3HgQ3MzU0NjIfARYRFA8BBiImPQEjIg4CBwYHDgIPAQ4CJyMiJj0BNDY7ATI+Ajc2PwE+BTczNTQ2Mh8BFgF0IisUCB4aLhZ9CAoKCH2LAs4FswUPCjAeHhonDS4YKBokDSErDBAeGiwYjwoOB7IFBbMFDwqPGywgGgwSGRAYJBIpFzZCJn0ICgoIfRsqJBQQERocDCQkLjZAKI8KDgeyBQJGNGUpECYaDAIKCGsICv3FCAWzBQwGawICAwEKChYWJhQ0ZBkeKhQUAmsICgWyBQHsCAWzBQwGaxAiJBkiPSUyRBUvGhgWAQoIawgKEiAkGSM9PhpAMCwgEAFrCAoFsgUAAAAAAgAA//kCgwMLAAcAHwAItRgMBAACLSsTITU0Jg4BFwURFAYHISImJxE0NhczNTQ2MhYHFTMyFrMBHVR2VAEB0CAW/ekXHgEgFhGUzJYCEhceAaVsO1QCUD2h/r4WHgEgFQFCFiABbGaUlGZsHgAAAAMAAP+6A5gDSQAcADkAWgAKt04+KSEYBAMtKyU0LwEmIgcXHgEfARQGByIuAS8BBhQfARYyPwE2ATQvASYiDwEGFB8BFjI3Jy4CNTQ2FzIeAR8BNgEUDwEGIi8BJjQ3JwYiLwEmND8BNjIfARYUBxc2Mh8BFgMsD3QQLhAWAwwBAiAWCA4OBBYTEHMPLRBSD/54D3MQLBBSEBB0Dy4RFwMKBB4XCQ4OAxcSAfQwUi6HLnMuMTEwhy90Ly9SL4Yvci8xMTCHL3QvqxcPdBASFgMQBg8XHgEECgQWES4PdA8PURABnxYQcxAPUg8sEHQPERcDDg4JFiABBAoDFxH+jkMuUS8wcy+HMDExL3Qvhi5SLi90LogwMTEvdC8AAwAA/3YDoAMLAAgAFAAuAAq3HxkSCwYCAy0rNzQmDgEeATI2JQEGIi8BJjQ3AR4BJRQHDgEnIiY0NjcyFhcWFA8BFRc2PwE2MhbWFB4WAhIiEAFq/oMVOhY7FRUBfBZUAZgMG4JPaJKSaCBGGQkJo2wCKkshDwodDhYCEiAUFPr+gxQUPRQ7FgF8N1TdFiVLXgGS0JACFBAGEgdefTwCGS0UCgAD//3/sQNfAwsAFAAhAC4ACrcrJR8YEAMDLSsBFRQGKwEiJj0BNDY7ATU0NjsBMhYXNC4BDgMeAj4BNxQOASIuAj4BMh4BAfQKCLIICgoIfQoHJAgK6FKKpoxQAlSIqoZWe3LG6MhuBnq89Lp+AiL6BwoKByQICsQICgrMU4pUAlCOoo5QAlSKU3XEdHTE6sR0dMQAA////7ADWQMQAAkAEgAjAAq3IBcMCgQCAy0rATQnARYzMj4CBQEmIyIOAQcUJRQOAi4DPgQeAgLcMP5bTFo+cFAy/dIBpUtcU4xQAQLcRHKgrKJwRgJCdJ6wnHZAAWBaSv5cMjJQcmkBpTJQkFBbW1igckYCQnactJp4PgZKbKYAAAAAAQAAAAEAAB7akRNfDzz1AAsD6AAAAADSPcdGAAAAANI9nRb/+P9qBLEDWAAAAAgAAgAAAAAAAAABAAADUv9qAFoEsQAA/+YEsQABAAAAAAAAAAAAAAAAAAAARAPoAAADoAAAA6AAAANZAAAELwAAA+gAAANZAAADWQAAA9MAAAPoAAAELwAAA+gAAAMRAAADoAAAAqYAAAPpAAAD6AAABLEAAAPoAAADWQAAA+gAAAQvAAADwgAAAoAAAANZAAAELwAAA+gAAANZAAAD6AAAA4QAAAOgAAADoAAAAxUAAAPoAAAD6AAAA+gAAAMMAAADmAAAA5gAAAOgAAAD6AAAA5gAAAOgAAADhAAAA+gAAAIwAAADoAAAAxEAAANZAAADEQAAAxEAAANZAAADqQAAA6AAAAOgAAAD6AAAAxEAAAPoAAAD6AAAA6AAAAQvAAADEQAAA+gAAAKCAAADoAAAA6AAAANZAAADWQAAAAAAAAA6AIYBJgKGAvYDPAOGBAgEYgTABTYF0gY0BqYHRAe4CFII8gleCawJ8gowCqAK8AtYC6oL9gxkDJQM8A0ODUANog3iDhIOZA8UD2IQFhBEELARFBFAEYgSGBKCEroTDBNKE4ITwBQCFGwUvhUkFU4VqBYaFnAWxhcGF6gX4BhuGMAZChlLAAAAAQAAAEQA9AAPAAAAAAACAAAAEABzAAAANAtwAAAAAAAAABIA3gABAAAAAAAAADUAAAABAAAAAAABAAgANQABAAAAAAACAAcAPQABAAAAAAADAAgARAABAAAAAAAEAAgATAABAAAAAAAFAAsAVAABAAAAAAAGAAgAXwABAAAAAAAKACsAZwABAAAAAAALABMAkgADAAEECQAAAGoApQADAAEECQABABABDwADAAEECQACAA4BHwADAAEECQADABABLQADAAEECQAEABABPQADAAEECQAFABYBTQADAAEECQAGABABYwADAAEECQAKAFYBcwADAAEECQALACYByUNvcHlyaWdodCAoQykgMjAxNSBieSBvcmlnaW5hbCBhdXRob3JzIEAgZm9udGVsbG8uY29tZm9udGVsbG9SZWd1bGFyZm9udGVsbG9mb250ZWxsb1ZlcnNpb24gMS4wZm9udGVsbG9HZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQBDAG8AcAB5AHIAaQBnAGgAdAAgACgAQwApACAAMgAwADEANQAgAGIAeQAgAG8AcgBpAGcAaQBuAGEAbAAgAGEAdQB0AGgAbwByAHMAIABAACAAZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AZgBvAG4AdABlAGwAbABvAFIAZQBnAHUAbABhAHIAZgBvAG4AdABlAGwAbABvAGYAbwBuAHQAZQBsAGwAbwBWAGUAcgBzAGkAbwBuACAAMQAuADAAZgBvAG4AdABlAGwAbABvAEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAAcwB2AGcAMgB0AHQAZgAgAGYAcgBvAG0AIABGAG8AbgB0AGUAbABsAG8AIABwAHIAbwBqAGUAYwB0AC4AaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEBHN0YXIKc3Rhci1lbXB0eQNjb2cHY29nLWFsdARtYWlsBnBlbmNpbAxwbHVzLWNpcmNsZWQDYXNsA2V5ZQR0YWdzBGNoYXQFdHJhc2gGYmFza2V0BnB1enpsZQhsYW5ndWFnZQZzaWduYWwFdXNlcnMFdG9vbHMJYXJyb3dzLWN3CGV4Y2hhbmdlC2ZvbGRlci1vcGVuBWJydXNoC2Zsb3ctYnJhbmNoBG1lbnUEY29kZQh1c2VyLWFkZAJjdwVncm91cARob21lCWVxdWFsaXplcgZtYWlsLTEGc2VhcmNoBG1vdmUGdXBsb2FkDHVwbG9hZC1jbG91ZANrZXkHbmV0d29yaw5pbmZvLWNpcmNsZWQtMQhjYWxlbmRhcgJvawxoZWxwLWNpcmNsZWQGbG9nb3V0BGZsYWcFc3BpbjYJaG91cmdsYXNzBWNoZWNrC2NoZWNrLWVtcHR5DmNhbmNlbC1jaXJjbGVkBmNhbmNlbARwbHVzCm9rLWNpcmNsZWQMaGVhcnQtYnJva2VuB3pvb20taW4Iem9vbS1vdXQFdGFza3MGZmlsdGVyCG1haWwtYWx0B3NpdGVtYXAEY3JvcAdwaWN0dXJlBHVzZXIHc2h1ZmZsZQRsb2NrBGxpbmsGd3JlbmNoBWNsb2NrBWJsb2NrAAAAAAAAAQAB//8ADwAAAAAAAAAAAAAAALAALCCwAFVYRVkgIEu4AA5RS7AGU1pYsDQbsChZYGYgilVYsAIlYbkIAAgAY2MjYhshIbAAWbAAQyNEsgABAENgQi2wASywIGBmLbACLCBkILDAULAEJlqyKAEKQ0VjRVJbWCEjIRuKWCCwUFBYIbBAWRsgsDhQWCGwOFlZILEBCkNFY0VhZLAoUFghsQEKQ0VjRSCwMFBYIbAwWRsgsMBQWCBmIIqKYSCwClBYYBsgsCBQWCGwCmAbILA2UFghsDZgG2BZWVkbsAErWVkjsABQWGVZWS2wAywgRSCwBCVhZCCwBUNQWLAFI0KwBiNCGyEhWbABYC2wBCwjISMhIGSxBWJCILAGI0KxAQpDRWOxAQpDsABgRWOwAyohILAGQyCKIIqwASuxMAUlsAQmUVhgUBthUllYI1khILBAU1iwASsbIbBAWSOwAFBYZVktsAUssAdDK7IAAgBDYEItsAYssAcjQiMgsAAjQmGwAmJmsAFjsAFgsAUqLbAHLCAgRSCwC0NjuAQAYiCwAFBYsEBgWWawAWNgRLABYC2wCCyyBwsAQ0VCKiGyAAEAQ2BCLbAJLLAAQyNEsgABAENgQi2wCiwgIEUgsAErI7AAQ7AEJWAgRYojYSBkILAgUFghsAAbsDBQWLAgG7BAWVkjsABQWGVZsAMlI2FERLABYC2wCywgIEUgsAErI7AAQ7AEJWAgRYojYSBksCRQWLAAG7BAWSOwAFBYZVmwAyUjYUREsAFgLbAMLCCwACNCsgsKA0VYIRsjIVkqIS2wDSyxAgJFsGRhRC2wDiywAWAgILAMQ0qwAFBYILAMI0JZsA1DSrAAUlggsA0jQlktsA8sILAQYmawAWMguAQAY4ojYbAOQ2AgimAgsA4jQiMtsBAsS1RYsQRkRFkksA1lI3gtsBEsS1FYS1NYsQRkRFkbIVkksBNlI3gtsBIssQAPQ1VYsQ8PQ7ABYUKwDytZsABDsAIlQrEMAiVCsQ0CJUKwARYjILADJVBYsQEAQ2CwBCVCioogiiNhsA4qISOwAWEgiiNhsA4qIRuxAQBDYLACJUKwAiVhsA4qIVmwDENHsA1DR2CwAmIgsABQWLBAYFlmsAFjILALQ2O4BABiILAAUFiwQGBZZrABY2CxAAATI0SwAUOwAD6yAQEBQ2BCLbATLACxAAJFVFiwDyNCIEWwCyNCsAojsABgQiBgsAFhtRAQAQAOAEJCimCxEgYrsHIrGyJZLbAULLEAEystsBUssQETKy2wFiyxAhMrLbAXLLEDEystsBgssQQTKy2wGSyxBRMrLbAaLLEGEystsBsssQcTKy2wHCyxCBMrLbAdLLEJEystsB4sALANK7EAAkVUWLAPI0IgRbALI0KwCiOwAGBCIGCwAWG1EBABAA4AQkKKYLESBiuwcisbIlktsB8ssQAeKy2wICyxAR4rLbAhLLECHistsCIssQMeKy2wIyyxBB4rLbAkLLEFHistsCUssQYeKy2wJiyxBx4rLbAnLLEIHistsCgssQkeKy2wKSwgPLABYC2wKiwgYLAQYCBDI7ABYEOwAiVhsAFgsCkqIS2wKyywKiuwKiotsCwsICBHICCwC0NjuAQAYiCwAFBYsEBgWWawAWNgI2E4IyCKVVggRyAgsAtDY7gEAGIgsABQWLBAYFlmsAFjYCNhOBshWS2wLSwAsQACRVRYsAEWsCwqsAEVMBsiWS2wLiwAsA0rsQACRVRYsAEWsCwqsAEVMBsiWS2wLywgNbABYC2wMCwAsAFFY7gEAGIgsABQWLBAYFlmsAFjsAErsAtDY7gEAGIgsABQWLBAYFlmsAFjsAErsAAWtAAAAAAARD4jOLEvARUqLbAxLCA8IEcgsAtDY7gEAGIgsABQWLBAYFlmsAFjYLAAQ2E4LbAyLC4XPC2wMywgPCBHILALQ2O4BABiILAAUFiwQGBZZrABY2CwAENhsAFDYzgtsDQssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIFhiGyFZsAEjQrIzAQEVFCotsDUssAAWsAQlsAQlRyNHI2GwCUMrZYouIyAgPIo4LbA2LLAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjILAIQyCKI0cjRyNhI0ZgsARDsAJiILAAUFiwQGBZZrABY2AgsAErIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbACYiCwAFBYsEBgWWawAWNhIyAgsAQmI0ZhOBsjsAhDRrACJbAIQ0cjRyNhYCCwBEOwAmIgsABQWLBAYFlmsAFjYCMgsAErI7AEQ2CwASuwBSVhsAUlsAJiILAAUFiwQGBZZrABY7AEJmEgsAQlYGQjsAMlYGRQWCEbIyFZIyAgsAQmI0ZhOFktsDcssAAWICAgsAUmIC5HI0cjYSM8OC2wOCywABYgsAgjQiAgIEYjR7ABKyNhOC2wOSywABawAyWwAiVHI0cjYbAAVFguIDwjIRuwAiWwAiVHI0cjYSCwBSWwBCVHI0cjYbAGJbAFJUmwAiVhuQgACABjYyMgWGIbIVljuAQAYiCwAFBYsEBgWWawAWNgIy4jICA8ijgjIVktsDossAAWILAIQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbA7LCMgLkawAiVGUlggPFkusSsBFCstsDwsIyAuRrACJUZQWCA8WS6xKwEUKy2wPSwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xKwEUKy2wPiywNSsjIC5GsAIlRlJYIDxZLrErARQrLbA/LLA2K4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKxAAAqsQAFQrEACCqxAAVCsQAIKrEABUK5AAAACSqxAAVCuQAAAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbEADCq4Af+FsASNsQIARAA=') format('truetype');
}
/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
@@ -19,7 +19,7 @@
@media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face {
font-family: 'fontello';
- src: url('../font/fontello.svg?76878460#fontello') format('svg');
+ src: url('../font/fontello.svg?37675340#fontello') format('svg');
}
}
*/
@@ -105,6 +105,7 @@
.icon-cancel:before { content: '\e822'; } /* '' */
.icon-plus:before { content: '\e823'; } /* '' */
.icon-ok-circled:before { content: '\e824'; } /* '' */
+.icon-heart-broken:before { content: '\e825'; } /* '' */
.icon-zoom-in:before { content: '\e827'; } /* '' */
.icon-zoom-out:before { content: '\e828'; } /* '' */
.icon-tasks:before { content: '\f0ae'; } /* '' */
diff --git a/admin/themes/default/fontello/css/fontello-ie7-codes.css b/admin/themes/default/fontello/css/fontello-ie7-codes.css
index 49cd55343..708cfdf4a 100644
--- a/admin/themes/default/fontello/css/fontello-ie7-codes.css
+++ b/admin/themes/default/fontello/css/fontello-ie7-codes.css
@@ -50,6 +50,7 @@
.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe822;&nbsp;'); }
.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe823;&nbsp;'); }
.icon-ok-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe824;&nbsp;'); }
+.icon-heart-broken { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe825;&nbsp;'); }
.icon-zoom-in { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe827;&nbsp;'); }
.icon-zoom-out { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe828;&nbsp;'); }
.icon-tasks { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ae;&nbsp;'); }
diff --git a/admin/themes/default/fontello/css/fontello-ie7.css b/admin/themes/default/fontello/css/fontello-ie7.css
index 9eec9e6d1..c1e1ec524 100644
--- a/admin/themes/default/fontello/css/fontello-ie7.css
+++ b/admin/themes/default/fontello/css/fontello-ie7.css
@@ -61,6 +61,7 @@
.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe822;&nbsp;'); }
.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe823;&nbsp;'); }
.icon-ok-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe824;&nbsp;'); }
+.icon-heart-broken { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe825;&nbsp;'); }
.icon-zoom-in { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe827;&nbsp;'); }
.icon-zoom-out { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe828;&nbsp;'); }
.icon-tasks { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ae;&nbsp;'); }
diff --git a/admin/themes/default/fontello/css/fontello.css b/admin/themes/default/fontello/css/fontello.css
index 9b3319d7c..40777f186 100644
--- a/admin/themes/default/fontello/css/fontello.css
+++ b/admin/themes/default/fontello/css/fontello.css
@@ -2,11 +2,11 @@
@font-face {
font-family: 'fontello';
- src: url('../font/fontello.eot?80487531');
- src: url('../font/fontello.eot?80487531#iefix') format('embedded-opentype'),
- url('../font/fontello.woff?80487531') format('woff'),
- url('../font/fontello.ttf?80487531') format('truetype'),
- url('../font/fontello.svg?80487531#fontello') format('svg');
+ src: url('../font/fontello.eot?38260160');
+ src: url('../font/fontello.eot?38260160#iefix') format('embedded-opentype'),
+ url('../font/fontello.woff?38260160') format('woff'),
+ url('../font/fontello.ttf?38260160') format('truetype'),
+ url('../font/fontello.svg?38260160#fontello') format('svg');
font-weight: normal;
font-style: normal;
}
@@ -16,7 +16,7 @@
@media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face {
font-family: 'fontello';
- src: url('../font/fontello.svg?80487531#fontello') format('svg');
+ src: url('../font/fontello.svg?38260160#fontello') format('svg');
}
}
*/
@@ -37,7 +37,7 @@
/* For safety - reset parent styles, that can break glyph codes*/
font-variant: normal;
text-transform: none;
-
+
/* fix buttons height, for twitter bootstrap */
line-height: 1em;
@@ -48,6 +48,10 @@
/* you can be more comfortable with increased icons size */
/* font-size: 120%; */
+ /* Font smoothing. That was taken from TWBS */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+
/* Uncomment for 3D effect */
/* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
}
@@ -103,6 +107,7 @@
.icon-cancel:before { content: '\e822'; } /* '' */
.icon-plus:before { content: '\e823'; } /* '' */
.icon-ok-circled:before { content: '\e824'; } /* '' */
+.icon-heart-broken:before { content: '\e825'; } /* '' */
.icon-zoom-in:before { content: '\e827'; } /* '' */
.icon-zoom-out:before { content: '\e828'; } /* '' */
.icon-tasks:before { content: '\f0ae'; } /* '' */
diff --git a/admin/themes/default/fontello/demo.html b/admin/themes/default/fontello/demo.html
index eeb1903f4..c7bd65f9e 100644
--- a/admin/themes/default/fontello/demo.html
+++ b/admin/themes/default/fontello/demo.html
@@ -227,8 +227,54 @@ body {
.i-code {
display: none;
}
-</style>
- <link rel="stylesheet" href="css/fontello.css">
+@font-face {
+ font-family: 'fontello';
+ src: url('./font/fontello.eot?58887028');
+ src: url('./font/fontello.eot?58887028#iefix') format('embedded-opentype'),
+ url('./font/fontello.woff?58887028') format('woff'),
+ url('./font/fontello.ttf?58887028') format('truetype'),
+ url('./font/fontello.svg?58887028#fontello') format('svg');
+ font-weight: normal;
+ font-style: normal;
+ }
+
+
+ .demo-icon
+ {
+ font-family: "fontello";
+ font-style: normal;
+ font-weight: normal;
+ speak: none;
+
+ display: inline-block;
+ text-decoration: inherit;
+ width: 1em;
+ margin-right: .2em;
+ text-align: center;
+ /* opacity: .8; */
+
+ /* For safety - reset parent styles, that can break glyph codes*/
+ font-variant: normal;
+ text-transform: none;
+
+ /* fix buttons height, for twitter bootstrap */
+ line-height: 1em;
+
+ /* Animation center compensation - margins should be symmetric */
+ /* remove if not needed */
+ margin-left: .2em;
+
+ /* You can be more comfortable with increased icons size */
+ /* font-size: 120%; */
+
+ /* Font smoothing. That was taken from TWBS */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+
+ /* Uncomment for 3D effect */
+ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
+ }
+ </style>
<link rel="stylesheet" href="css/animation.css"><!--[if IE 7]><link rel="stylesheet" href="css/fontello-ie7.css"><![endif]-->
<script>
function toggleCodes(on) {
@@ -255,104 +301,105 @@ body {
</div>
<div id="icons" class="container">
<div class="row">
- <div title="Code: 0x2605" class="the-icons span3"><i class="icon-star"></i> <span class="i-name">icon-star</span><span class="i-code">0x2605</span></div>
- <div title="Code: 0x2606" class="the-icons span3"><i class="icon-star-empty"></i> <span class="i-name">icon-star-empty</span><span class="i-code">0x2606</span></div>
- <div title="Code: 0x2699" class="the-icons span3"><i class="icon-cog"></i> <span class="i-name">icon-cog</span><span class="i-code">0x2699</span></div>
- <div title="Code: 0x26ef" class="the-icons span3"><i class="icon-cog-alt"></i> <span class="i-name">icon-cog-alt</span><span class="i-code">0x26ef</span></div>
+ <div title="Code: 0x2605" class="the-icons span3"><i class="demo-icon icon-star">&#x2605;</i> <span class="i-name">icon-star</span><span class="i-code">0x2605</span></div>
+ <div title="Code: 0x2606" class="the-icons span3"><i class="demo-icon icon-star-empty">&#x2606;</i> <span class="i-name">icon-star-empty</span><span class="i-code">0x2606</span></div>
+ <div title="Code: 0x2699" class="the-icons span3"><i class="demo-icon icon-cog">&#x2699;</i> <span class="i-name">icon-cog</span><span class="i-code">0x2699</span></div>
+ <div title="Code: 0x26ef" class="the-icons span3"><i class="demo-icon icon-cog-alt">&#x26ef;</i> <span class="i-name">icon-cog-alt</span><span class="i-code">0x26ef</span></div>
</div>
<div class="row">
- <div title="Code: 0x2709" class="the-icons span3"><i class="icon-mail"></i> <span class="i-name">icon-mail</span><span class="i-code">0x2709</span></div>
- <div title="Code: 0x270e" class="the-icons span3"><i class="icon-pencil"></i> <span class="i-name">icon-pencil</span><span class="i-code">0x270e</span></div>
- <div title="Code: 0x2795" class="the-icons span3"><i class="icon-plus-circled"></i> <span class="i-name">icon-plus-circled</span><span class="i-code">0x2795</span></div>
- <div title="Code: 0xe0ad" class="the-icons span3"><i class="icon-asl"></i> <span class="i-name">icon-asl</span><span class="i-code">0xe0ad</span></div>
+ <div title="Code: 0x2709" class="the-icons span3"><i class="demo-icon icon-mail">&#x2709;</i> <span class="i-name">icon-mail</span><span class="i-code">0x2709</span></div>
+ <div title="Code: 0x270e" class="the-icons span3"><i class="demo-icon icon-pencil">&#x270e;</i> <span class="i-name">icon-pencil</span><span class="i-code">0x270e</span></div>
+ <div title="Code: 0x2795" class="the-icons span3"><i class="demo-icon icon-plus-circled">&#x2795;</i> <span class="i-name">icon-plus-circled</span><span class="i-code">0x2795</span></div>
+ <div title="Code: 0xe0ad" class="the-icons span3"><i class="demo-icon icon-asl">&#xe0ad;</i> <span class="i-name">icon-asl</span><span class="i-code">0xe0ad</span></div>
</div>
<div class="row">
- <div title="Code: 0xe70a" class="the-icons span3"><i class="icon-eye"></i> <span class="i-name">icon-eye</span><span class="i-code">0xe70a</span></div>
- <div title="Code: 0xe70d" class="the-icons span3"><i class="icon-tags"></i> <span class="i-name">icon-tags</span><span class="i-code">0xe70d</span></div>
- <div title="Code: 0xe720" class="the-icons span3"><i class="icon-chat"></i> <span class="i-name">icon-chat</span><span class="i-code">0xe720</span></div>
- <div title="Code: 0xe729" class="the-icons span3"><i class="icon-trash"></i> <span class="i-name">icon-trash</span><span class="i-code">0xe729</span></div>
+ <div title="Code: 0xe70a" class="the-icons span3"><i class="demo-icon icon-eye">&#xe70a;</i> <span class="i-name">icon-eye</span><span class="i-code">0xe70a</span></div>
+ <div title="Code: 0xe70d" class="the-icons span3"><i class="demo-icon icon-tags">&#xe70d;</i> <span class="i-name">icon-tags</span><span class="i-code">0xe70d</span></div>
+ <div title="Code: 0xe720" class="the-icons span3"><i class="demo-icon icon-chat">&#xe720;</i> <span class="i-name">icon-chat</span><span class="i-code">0xe720</span></div>
+ <div title="Code: 0xe729" class="the-icons span3"><i class="demo-icon icon-trash">&#xe729;</i> <span class="i-name">icon-trash</span><span class="i-code">0xe729</span></div>
</div>
<div class="row">
- <div title="Code: 0xe73d" class="the-icons span3"><i class="icon-basket"></i> <span class="i-name">icon-basket</span><span class="i-code">0xe73d</span></div>
- <div title="Code: 0xe7b6" class="the-icons span3"><i class="icon-puzzle"></i> <span class="i-name">icon-puzzle</span><span class="i-code">0xe7b6</span></div>
- <div title="Code: 0xe800" class="the-icons span3"><i class="icon-language"></i> <span class="i-name">icon-language</span><span class="i-code">0xe800</span></div>
- <div title="Code: 0xe801" class="the-icons span3"><i class="icon-signal"></i> <span class="i-name">icon-signal</span><span class="i-code">0xe801</span></div>
+ <div title="Code: 0xe73d" class="the-icons span3"><i class="demo-icon icon-basket">&#xe73d;</i> <span class="i-name">icon-basket</span><span class="i-code">0xe73d</span></div>
+ <div title="Code: 0xe7b6" class="the-icons span3"><i class="demo-icon icon-puzzle">&#xe7b6;</i> <span class="i-name">icon-puzzle</span><span class="i-code">0xe7b6</span></div>
+ <div title="Code: 0xe800" class="the-icons span3"><i class="demo-icon icon-language">&#xe800;</i> <span class="i-name">icon-language</span><span class="i-code">0xe800</span></div>
+ <div title="Code: 0xe801" class="the-icons span3"><i class="demo-icon icon-signal">&#xe801;</i> <span class="i-name">icon-signal</span><span class="i-code">0xe801</span></div>
</div>
<div class="row">
- <div title="Code: 0xe802" class="the-icons span3"><i class="icon-users"></i> <span class="i-name">icon-users</span><span class="i-code">0xe802</span></div>
- <div title="Code: 0xe803" class="the-icons span3"><i class="icon-tools"></i> <span class="i-name">icon-tools</span><span class="i-code">0xe803</span></div>
- <div title="Code: 0xe804" class="the-icons span3"><i class="icon-arrows-cw"></i> <span class="i-name">icon-arrows-cw</span><span class="i-code">0xe804</span></div>
- <div title="Code: 0xe805" class="the-icons span3"><i class="icon-exchange"></i> <span class="i-name">icon-exchange</span><span class="i-code">0xe805</span></div>
+ <div title="Code: 0xe802" class="the-icons span3"><i class="demo-icon icon-users">&#xe802;</i> <span class="i-name">icon-users</span><span class="i-code">0xe802</span></div>
+ <div title="Code: 0xe803" class="the-icons span3"><i class="demo-icon icon-tools">&#xe803;</i> <span class="i-name">icon-tools</span><span class="i-code">0xe803</span></div>
+ <div title="Code: 0xe804" class="the-icons span3"><i class="demo-icon icon-arrows-cw">&#xe804;</i> <span class="i-name">icon-arrows-cw</span><span class="i-code">0xe804</span></div>
+ <div title="Code: 0xe805" class="the-icons span3"><i class="demo-icon icon-exchange">&#xe805;</i> <span class="i-name">icon-exchange</span><span class="i-code">0xe805</span></div>
</div>
<div class="row">
- <div title="Code: 0xe806" class="the-icons span3"><i class="icon-folder-open"></i> <span class="i-name">icon-folder-open</span><span class="i-code">0xe806</span></div>
- <div title="Code: 0xe807" class="the-icons span3"><i class="icon-brush"></i> <span class="i-name">icon-brush</span><span class="i-code">0xe807</span></div>
- <div title="Code: 0xe808" class="the-icons span3"><i class="icon-flow-branch"></i> <span class="i-name">icon-flow-branch</span><span class="i-code">0xe808</span></div>
- <div title="Code: 0xe809" class="the-icons span3"><i class="icon-menu"></i> <span class="i-name">icon-menu</span><span class="i-code">0xe809</span></div>
+ <div title="Code: 0xe806" class="the-icons span3"><i class="demo-icon icon-folder-open">&#xe806;</i> <span class="i-name">icon-folder-open</span><span class="i-code">0xe806</span></div>
+ <div title="Code: 0xe807" class="the-icons span3"><i class="demo-icon icon-brush">&#xe807;</i> <span class="i-name">icon-brush</span><span class="i-code">0xe807</span></div>
+ <div title="Code: 0xe808" class="the-icons span3"><i class="demo-icon icon-flow-branch">&#xe808;</i> <span class="i-name">icon-flow-branch</span><span class="i-code">0xe808</span></div>
+ <div title="Code: 0xe809" class="the-icons span3"><i class="demo-icon icon-menu">&#xe809;</i> <span class="i-name">icon-menu</span><span class="i-code">0xe809</span></div>
</div>
<div class="row">
- <div title="Code: 0xe80a" class="the-icons span3"><i class="icon-code"></i> <span class="i-name">icon-code</span><span class="i-code">0xe80a</span></div>
- <div title="Code: 0xe80b" class="the-icons span3"><i class="icon-user-add"></i> <span class="i-name">icon-user-add</span><span class="i-code">0xe80b</span></div>
- <div title="Code: 0xe80c" class="the-icons span3"><i class="icon-cw"></i> <span class="i-name">icon-cw</span><span class="i-code">0xe80c</span></div>
- <div title="Code: 0xe80d" class="the-icons span3"><i class="icon-group"></i> <span class="i-name">icon-group</span><span class="i-code">0xe80d</span></div>
+ <div title="Code: 0xe80a" class="the-icons span3"><i class="demo-icon icon-code">&#xe80a;</i> <span class="i-name">icon-code</span><span class="i-code">0xe80a</span></div>
+ <div title="Code: 0xe80b" class="the-icons span3"><i class="demo-icon icon-user-add">&#xe80b;</i> <span class="i-name">icon-user-add</span><span class="i-code">0xe80b</span></div>
+ <div title="Code: 0xe80c" class="the-icons span3"><i class="demo-icon icon-cw">&#xe80c;</i> <span class="i-name">icon-cw</span><span class="i-code">0xe80c</span></div>
+ <div title="Code: 0xe80d" class="the-icons span3"><i class="demo-icon icon-group">&#xe80d;</i> <span class="i-name">icon-group</span><span class="i-code">0xe80d</span></div>
</div>
<div class="row">
- <div title="Code: 0xe80e" class="the-icons span3"><i class="icon-home"></i> <span class="i-name">icon-home</span><span class="i-code">0xe80e</span></div>
- <div title="Code: 0xe80f" class="the-icons span3"><i class="icon-equalizer"></i> <span class="i-name">icon-equalizer</span><span class="i-code">0xe80f</span></div>
- <div title="Code: 0xe810" class="the-icons span3"><i class="icon-mail-1"></i> <span class="i-name">icon-mail-1</span><span class="i-code">0xe810</span></div>
- <div title="Code: 0xe811" class="the-icons span3"><i class="icon-search"></i> <span class="i-name">icon-search</span><span class="i-code">0xe811</span></div>
+ <div title="Code: 0xe80e" class="the-icons span3"><i class="demo-icon icon-home">&#xe80e;</i> <span class="i-name">icon-home</span><span class="i-code">0xe80e</span></div>
+ <div title="Code: 0xe80f" class="the-icons span3"><i class="demo-icon icon-equalizer">&#xe80f;</i> <span class="i-name">icon-equalizer</span><span class="i-code">0xe80f</span></div>
+ <div title="Code: 0xe810" class="the-icons span3"><i class="demo-icon icon-mail-1">&#xe810;</i> <span class="i-name">icon-mail-1</span><span class="i-code">0xe810</span></div>
+ <div title="Code: 0xe811" class="the-icons span3"><i class="demo-icon icon-search">&#xe811;</i> <span class="i-name">icon-search</span><span class="i-code">0xe811</span></div>
</div>
<div class="row">
- <div title="Code: 0xe812" class="the-icons span3"><i class="icon-move"></i> <span class="i-name">icon-move</span><span class="i-code">0xe812</span></div>
- <div title="Code: 0xe813" class="the-icons span3"><i class="icon-upload"></i> <span class="i-name">icon-upload</span><span class="i-code">0xe813</span></div>
- <div title="Code: 0xe814" class="the-icons span3"><i class="icon-upload-cloud"></i> <span class="i-name">icon-upload-cloud</span><span class="i-code">0xe814</span></div>
- <div title="Code: 0xe815" class="the-icons span3"><i class="icon-key"></i> <span class="i-name">icon-key</span><span class="i-code">0xe815</span></div>
+ <div title="Code: 0xe812" class="the-icons span3"><i class="demo-icon icon-move">&#xe812;</i> <span class="i-name">icon-move</span><span class="i-code">0xe812</span></div>
+ <div title="Code: 0xe813" class="the-icons span3"><i class="demo-icon icon-upload">&#xe813;</i> <span class="i-name">icon-upload</span><span class="i-code">0xe813</span></div>
+ <div title="Code: 0xe814" class="the-icons span3"><i class="demo-icon icon-upload-cloud">&#xe814;</i> <span class="i-name">icon-upload-cloud</span><span class="i-code">0xe814</span></div>
+ <div title="Code: 0xe815" class="the-icons span3"><i class="demo-icon icon-key">&#xe815;</i> <span class="i-name">icon-key</span><span class="i-code">0xe815</span></div>
</div>
<div class="row">
- <div title="Code: 0xe816" class="the-icons span3"><i class="icon-network"></i> <span class="i-name">icon-network</span><span class="i-code">0xe816</span></div>
- <div title="Code: 0xe817" class="the-icons span3"><i class="icon-info-circled-1"></i> <span class="i-name">icon-info-circled-1</span><span class="i-code">0xe817</span></div>
- <div title="Code: 0xe818" class="the-icons span3"><i class="icon-calendar"></i> <span class="i-name">icon-calendar</span><span class="i-code">0xe818</span></div>
- <div title="Code: 0xe819" class="the-icons span3"><i class="icon-ok"></i> <span class="i-name">icon-ok</span><span class="i-code">0xe819</span></div>
+ <div title="Code: 0xe816" class="the-icons span3"><i class="demo-icon icon-network">&#xe816;</i> <span class="i-name">icon-network</span><span class="i-code">0xe816</span></div>
+ <div title="Code: 0xe817" class="the-icons span3"><i class="demo-icon icon-info-circled-1">&#xe817;</i> <span class="i-name">icon-info-circled-1</span><span class="i-code">0xe817</span></div>
+ <div title="Code: 0xe818" class="the-icons span3"><i class="demo-icon icon-calendar">&#xe818;</i> <span class="i-name">icon-calendar</span><span class="i-code">0xe818</span></div>
+ <div title="Code: 0xe819" class="the-icons span3"><i class="demo-icon icon-ok">&#xe819;</i> <span class="i-name">icon-ok</span><span class="i-code">0xe819</span></div>
</div>
<div class="row">
- <div title="Code: 0xe81a" class="the-icons span3"><i class="icon-help-circled"></i> <span class="i-name">icon-help-circled</span><span class="i-code">0xe81a</span></div>
- <div title="Code: 0xe81b" class="the-icons span3"><i class="icon-logout"></i> <span class="i-name">icon-logout</span><span class="i-code">0xe81b</span></div>
- <div title="Code: 0xe81c" class="the-icons span3"><i class="icon-flag"></i> <span class="i-name">icon-flag</span><span class="i-code">0xe81c</span></div>
- <div title="Code: 0xe81d" class="the-icons span3"><i class="icon-spin6 animate-spin"></i> <span class="i-name">icon-spin6</span><span class="i-code">0xe81d</span></div>
+ <div title="Code: 0xe81a" class="the-icons span3"><i class="demo-icon icon-help-circled">&#xe81a;</i> <span class="i-name">icon-help-circled</span><span class="i-code">0xe81a</span></div>
+ <div title="Code: 0xe81b" class="the-icons span3"><i class="demo-icon icon-logout">&#xe81b;</i> <span class="i-name">icon-logout</span><span class="i-code">0xe81b</span></div>
+ <div title="Code: 0xe81c" class="the-icons span3"><i class="demo-icon icon-flag">&#xe81c;</i> <span class="i-name">icon-flag</span><span class="i-code">0xe81c</span></div>
+ <div title="Code: 0xe81d" class="the-icons span3"><i class="demo-icon icon-spin6 animate-spin">&#xe81d;</i> <span class="i-name">icon-spin6</span><span class="i-code">0xe81d</span></div>
</div>
<div class="row">
- <div title="Code: 0xe81e" class="the-icons span3"><i class="icon-hourglass"></i> <span class="i-name">icon-hourglass</span><span class="i-code">0xe81e</span></div>
- <div title="Code: 0xe81f" class="the-icons span3"><i class="icon-check"></i> <span class="i-name">icon-check</span><span class="i-code">0xe81f</span></div>
- <div title="Code: 0xe820" class="the-icons span3"><i class="icon-check-empty"></i> <span class="i-name">icon-check-empty</span><span class="i-code">0xe820</span></div>
- <div title="Code: 0xe821" class="the-icons span3"><i class="icon-cancel-circled"></i> <span class="i-name">icon-cancel-circled</span><span class="i-code">0xe821</span></div>
+ <div title="Code: 0xe81e" class="the-icons span3"><i class="demo-icon icon-hourglass">&#xe81e;</i> <span class="i-name">icon-hourglass</span><span class="i-code">0xe81e</span></div>
+ <div title="Code: 0xe81f" class="the-icons span3"><i class="demo-icon icon-check">&#xe81f;</i> <span class="i-name">icon-check</span><span class="i-code">0xe81f</span></div>
+ <div title="Code: 0xe820" class="the-icons span3"><i class="demo-icon icon-check-empty">&#xe820;</i> <span class="i-name">icon-check-empty</span><span class="i-code">0xe820</span></div>
+ <div title="Code: 0xe821" class="the-icons span3"><i class="demo-icon icon-cancel-circled">&#xe821;</i> <span class="i-name">icon-cancel-circled</span><span class="i-code">0xe821</span></div>
</div>
<div class="row">
- <div title="Code: 0xe822" class="the-icons span3"><i class="icon-cancel"></i> <span class="i-name">icon-cancel</span><span class="i-code">0xe822</span></div>
- <div title="Code: 0xe823" class="the-icons span3"><i class="icon-plus"></i> <span class="i-name">icon-plus</span><span class="i-code">0xe823</span></div>
- <div title="Code: 0xe824" class="the-icons span3"><i class="icon-ok-circled"></i> <span class="i-name">icon-ok-circled</span><span class="i-code">0xe824</span></div>
- <div title="Code: 0xe827" class="the-icons span3"><i class="icon-zoom-in"></i> <span class="i-name">icon-zoom-in</span><span class="i-code">0xe827</span></div>
+ <div title="Code: 0xe822" class="the-icons span3"><i class="demo-icon icon-cancel">&#xe822;</i> <span class="i-name">icon-cancel</span><span class="i-code">0xe822</span></div>
+ <div title="Code: 0xe823" class="the-icons span3"><i class="demo-icon icon-plus">&#xe823;</i> <span class="i-name">icon-plus</span><span class="i-code">0xe823</span></div>
+ <div title="Code: 0xe824" class="the-icons span3"><i class="demo-icon icon-ok-circled">&#xe824;</i> <span class="i-name">icon-ok-circled</span><span class="i-code">0xe824</span></div>
+ <div title="Code: 0xe825" class="the-icons span3"><i class="demo-icon icon-heart-broken">&#xe825;</i> <span class="i-name">icon-heart-broken</span><span class="i-code">0xe825</span></div>
</div>
<div class="row">
- <div title="Code: 0xe828" class="the-icons span3"><i class="icon-zoom-out"></i> <span class="i-name">icon-zoom-out</span><span class="i-code">0xe828</span></div>
- <div title="Code: 0xf0ae" class="the-icons span3"><i class="icon-tasks"></i> <span class="i-name">icon-tasks</span><span class="i-code">0xf0ae</span></div>
- <div title="Code: 0xf0b0" class="the-icons span3"><i class="icon-filter"></i> <span class="i-name">icon-filter</span><span class="i-code">0xf0b0</span></div>
- <div title="Code: 0xf0e0" class="the-icons span3"><i class="icon-mail-alt"></i> <span class="i-name">icon-mail-alt</span><span class="i-code">0xf0e0</span></div>
+ <div title="Code: 0xe827" class="the-icons span3"><i class="demo-icon icon-zoom-in">&#xe827;</i> <span class="i-name">icon-zoom-in</span><span class="i-code">0xe827</span></div>
+ <div title="Code: 0xe828" class="the-icons span3"><i class="demo-icon icon-zoom-out">&#xe828;</i> <span class="i-name">icon-zoom-out</span><span class="i-code">0xe828</span></div>
+ <div title="Code: 0xf0ae" class="the-icons span3"><i class="demo-icon icon-tasks">&#xf0ae;</i> <span class="i-name">icon-tasks</span><span class="i-code">0xf0ae</span></div>
+ <div title="Code: 0xf0b0" class="the-icons span3"><i class="demo-icon icon-filter">&#xf0b0;</i> <span class="i-name">icon-filter</span><span class="i-code">0xf0b0</span></div>
</div>
<div class="row">
- <div title="Code: 0xf0e8" class="the-icons span3"><i class="icon-sitemap"></i> <span class="i-name">icon-sitemap</span><span class="i-code">0xf0e8</span></div>
- <div title="Code: 0xf125" class="the-icons span3"><i class="icon-crop"></i> <span class="i-name">icon-crop</span><span class="i-code">0xf125</span></div>
- <div title="Code: 0x1f304" class="the-icons span3"><i class="icon-picture"></i> <span class="i-name">icon-picture</span><span class="i-code">0x1f304</span></div>
- <div title="Code: 0x1f464" class="the-icons span3"><i class="icon-user"></i> <span class="i-name">icon-user</span><span class="i-code">0x1f464</span></div>
+ <div title="Code: 0xf0e0" class="the-icons span3"><i class="demo-icon icon-mail-alt">&#xf0e0;</i> <span class="i-name">icon-mail-alt</span><span class="i-code">0xf0e0</span></div>
+ <div title="Code: 0xf0e8" class="the-icons span3"><i class="demo-icon icon-sitemap">&#xf0e8;</i> <span class="i-name">icon-sitemap</span><span class="i-code">0xf0e8</span></div>
+ <div title="Code: 0xf125" class="the-icons span3"><i class="demo-icon icon-crop">&#xf125;</i> <span class="i-name">icon-crop</span><span class="i-code">0xf125</span></div>
+ <div title="Code: 0x1f304" class="the-icons span3"><i class="demo-icon icon-picture">&#x1f304;</i> <span class="i-name">icon-picture</span><span class="i-code">0x1f304</span></div>
</div>
<div class="row">
- <div title="Code: 0x1f500" class="the-icons span3"><i class="icon-shuffle"></i> <span class="i-name">icon-shuffle</span><span class="i-code">0x1f500</span></div>
- <div title="Code: 0x1f512" class="the-icons span3"><i class="icon-lock"></i> <span class="i-name">icon-lock</span><span class="i-code">0x1f512</span></div>
- <div title="Code: 0x1f517" class="the-icons span3"><i class="icon-link"></i> <span class="i-name">icon-link</span><span class="i-code">0x1f517</span></div>
- <div title="Code: 0x1f527" class="the-icons span3"><i class="icon-wrench"></i> <span class="i-name">icon-wrench</span><span class="i-code">0x1f527</span></div>
+ <div title="Code: 0x1f464" class="the-icons span3"><i class="demo-icon icon-user">&#x1f464;</i> <span class="i-name">icon-user</span><span class="i-code">0x1f464</span></div>
+ <div title="Code: 0x1f500" class="the-icons span3"><i class="demo-icon icon-shuffle">&#x1f500;</i> <span class="i-name">icon-shuffle</span><span class="i-code">0x1f500</span></div>
+ <div title="Code: 0x1f512" class="the-icons span3"><i class="demo-icon icon-lock">&#x1f512;</i> <span class="i-name">icon-lock</span><span class="i-code">0x1f512</span></div>
+ <div title="Code: 0x1f517" class="the-icons span3"><i class="demo-icon icon-link">&#x1f517;</i> <span class="i-name">icon-link</span><span class="i-code">0x1f517</span></div>
</div>
<div class="row">
- <div title="Code: 0x1f554" class="the-icons span3"><i class="icon-clock"></i> <span class="i-name">icon-clock</span><span class="i-code">0x1f554</span></div>
- <div title="Code: 0x1f6ab" class="the-icons span3"><i class="icon-block"></i> <span class="i-name">icon-block</span><span class="i-code">0x1f6ab</span></div>
+ <div title="Code: 0x1f527" class="the-icons span3"><i class="demo-icon icon-wrench">&#x1f527;</i> <span class="i-name">icon-wrench</span><span class="i-code">0x1f527</span></div>
+ <div title="Code: 0x1f554" class="the-icons span3"><i class="demo-icon icon-clock">&#x1f554;</i> <span class="i-name">icon-clock</span><span class="i-code">0x1f554</span></div>
+ <div title="Code: 0x1f6ab" class="the-icons span3"><i class="demo-icon icon-block">&#x1f6ab;</i> <span class="i-name">icon-block</span><span class="i-code">0x1f6ab</span></div>
</div>
</div>
<div class="container footer">Generated by <a href="http://fontello.com">fontello.com</a></div>
diff --git a/admin/themes/default/fontello/font/fontello.eot b/admin/themes/default/fontello/font/fontello.eot
index 9e3a4d6e1..b0615dac1 100644
--- a/admin/themes/default/fontello/font/fontello.eot
+++ b/admin/themes/default/fontello/font/fontello.eot
Binary files differ
diff --git a/admin/themes/default/fontello/font/fontello.svg b/admin/themes/default/fontello/font/fontello.svg
index a24fef192..77b818669 100644
--- a/admin/themes/default/fontello/font/fontello.svg
+++ b/admin/themes/default/fontello/font/fontello.svg
@@ -1,77 +1,78 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Copyright (C) 2014 by original authors @ fontello.com</metadata>
+<metadata>Copyright (C) 2015 by original authors @ fontello.com</metadata>
<defs>
<font id="fontello" horiz-adv-x="1000" >
<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
<missing-glyph horiz-adv-x="1000" />
-<glyph glyph-name="star" unicode="&#x2605;" d="m0 489q0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26 0-12-15-27l-203-197 48-279q1-4 1-12 0-11-6-19t-17-9q-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27z" horiz-adv-x="928.6" />
-<glyph glyph-name="star-empty" unicode="&#x2606;" d="m0 489q0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26 0-12-15-27l-203-197 48-279q1-4 1-12 0-28-23-28-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27z m123-34l171-165-41-235 211 111 211-111-41 235 171 165-235 35-106 213-105-213z" horiz-adv-x="928.6" />
-<glyph glyph-name="cog" unicode="&#x2699;" d="m0 289v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 15 20 15h124q7 0 13-4t7-12l15-103q28-9 50-21l80 60q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-13 0-6-4-12-9-12-29-38t-30-39q14-28 23-55l102-15q7-1 12-7t4-13v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-28 59-77 6-6 6-14t-5-12q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 20l-79-59q-6-5-14-5-8 0-14 6-70 63-92 94-4 5-4 12 0 7 5 13 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13z m286 61q0-59 42-101t101-42 101 42 41 101-41 101-101 42-101-42-42-101z" horiz-adv-x="857.1" />
-<glyph glyph-name="cog-alt" unicode="&#x26ef;" d="m0 299v103q0 6 4 11t9 6l86 14q7 19 18 42-19 27-50 64-4 6-4 11 0 7 4 12 12 16 46 49t44 33q6 0 12-4l64-50q19 10 43 18 6 60 13 86 3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 41-17l66 49q5 4 11 4 7 0 12-4 81-75 81-90 0-5-4-10-7-9-24-30t-25-34q13-27 19-46l85-12q5-2 9-6t4-11v-103q0-6-4-11t-9-6l-86-14q-6-19-18-42 19-27 50-64 4-6 4-11 0-7-4-11-13-17-46-50t-44-33q-6 0-11 4l-64 50q-21-11-43-17-6-60-13-87-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4-6 0-12 4-80 75-80 90 0 5 4 10 5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11z m214 51q0-59 42-101t101-42 101 42 42 101-42 101-101 42-101-42-42-101z m429-325v78q0 9 83 18 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-9 83-18v-78q0-9-83-17-6-15-16-29 28-63 28-77 0-2-2-4-68-40-69-40-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40-3 2-3 4 0 14 29 77-10 14-17 29-83 8-83 17z m0 572v78q0 9 83 17 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 2 17 2t17-2q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-8 83-17v-78q0-9-83-18-6-15-16-29 28-63 28-77 0-2-2-4-68-39-69-39-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39-3 2-3 4 0 14 29 77-10 14-17 29-83 9-83 18z m143-533q0-29 21-50t50-21 51 21 21 50q0 29-22 51t-50 21-50-21-21-51z m0 572q0-30 21-51t50-21 51 21 21 51q0 29-22 50t-50 21-50-21-21-50z" horiz-adv-x="1071.4" />
-<glyph glyph-name="mail" unicode="&#x2709;" d="m0 11v607q0 37 26 63t63 26h822q37 0 63-26t26-63v-607q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63z m71 0q0-8 6-13t12-5h822q7 0 12 5t6 13v428q-18-20-39-37-149-114-238-188-28-24-46-38t-48-27-57-13h-2q-26 0-57 13t-48 27-46 38q-88 74-238 188-21 17-39 37v-428z m0 607q0-94 82-159 108-84 224-176 4-3 20-17t25-21 25-17 28-16 24-5h2q11 0 24 5t28 16 25 17 25 21 20 17q116 92 224 176 30 24 56 65t26 73v14t-1 7-1 7-3 5-5 4-8 2h-822q-7 0-12-6t-6-12z" horiz-adv-x="1000" />
-<glyph glyph-name="pencil" unicode="&#x270e;" d="m0-79v233l464 464 232-232-464-465h-232z m71 143h72v-71h60l50 51-131 131-51-51v-60z m95 143q0-12 13-12 5 0 9 4l303 302q3 4 3 10 0 12-12 12-5 0-9-4l-303-302q-4-4-4-10z m334 447l93 92q20 21 50 21 29 0 51-21l131-131q20-22 20-51 0-29-20-50l-93-93z" horiz-adv-x="857.1" />
-<glyph glyph-name="plus-circled" unicode="&#x2795;" d="m0 350q0 117 58 215t155 156 216 58 215-58 156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215z m179-36q0-14 10-25t25-10h143v-143q0-15 11-25t25-11h71q15 0 25 11t11 25v143h143q14 0 25 10t11 25v72q0 14-11 25t-25 10h-143v143q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-143h-143q-14 0-25-10t-10-25v-72z" horiz-adv-x="857.1" />
+<glyph glyph-name="star" unicode="&#x2605;" d="m929 489q0-12-15-27l-203-197 48-279q1-4 1-12 0-11-6-19t-17-9q-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
+<glyph glyph-name="star-empty" unicode="&#x2606;" d="m634 290l171 165-235 35-106 213-105-213-236-35 171-165-41-235 211 111 211-111z m295 199q0-12-15-27l-203-197 48-279q1-4 1-12 0-28-23-28-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
+<glyph glyph-name="cog" unicode="&#x2699;" d="m571 350q0 59-41 101t-101 42-101-42-42-101 42-101 101-42 101 42 41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-27 59-77 6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5-8 0-14 6-70 64-92 94-4 5-4 13 0 6 5 12 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 15 20 15h124q7 0 13-4t7-12l15-103q28-9 50-21l80 60q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-13 0-6-4-12-9-12-29-38t-30-39q14-28 23-55l102-15q7-1 12-7t4-13z" horiz-adv-x="857.1" />
+<glyph glyph-name="cog-alt" unicode="&#x26ef;" d="m500 350q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m429-286q0 29-22 51t-50 21-50-21-21-51q0-29 21-50t50-21 51 21 21 50z m0 572q0 29-22 50t-50 21-50-21-21-50q0-30 21-51t50-21 51 21 21 51z m-215-235v-103q0-6-4-11t-9-6l-86-14q-6-19-18-42 19-27 50-64 4-6 4-11 0-7-4-11-13-17-46-50t-44-33q-6 0-11 4l-64 50q-21-11-43-17-6-60-13-87-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4-6 0-12 4-80 75-80 90 0 5 4 10 5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11v103q0 6 4 11t9 6l86 14q7 19 18 42-19 27-50 64-4 6-4 11 0 7 4 11 12 17 46 50t44 33q6 0 12-4l64-50q19 10 43 18 6 60 13 86 3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 41-17l66 49q5 4 11 4 7 0 12-4 81-75 81-90 0-5-4-10-7-9-24-30t-25-34q13-27 19-46l85-12q5-2 9-6t4-11z m357-298v-78q0-9-83-17-6-15-16-29 28-63 28-77 0-2-2-4-68-40-69-40-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40-3 2-3 4 0 14 29 77-10 14-17 29-83 8-83 17v78q0 9 83 18 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-9 83-18z m0 572v-78q0-9-83-18-6-15-16-29 28-63 28-77 0-2-2-4-68-39-69-39-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39-3 2-3 4 0 14 29 77-10 14-17 29-83 9-83 18v78q0 9 83 17 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 2 17 2t17-2q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-8 83-17z" horiz-adv-x="1071.4" />
+<glyph glyph-name="mail" unicode="&#x2709;" d="m929 11v428q-18-20-39-37-149-114-238-188-28-24-46-38t-48-27-57-13h-2q-26 0-57 13t-48 27-46 38q-88 74-238 188-21 17-39 37v-428q0-8 6-13t12-5h822q7 0 12 5t6 13z m0 586v14t-1 7-1 7-3 5-5 4-8 2h-822q-7 0-12-6t-6-12q0-94 82-159 108-85 224-177 4-2 20-16t25-21 25-18 28-15 24-5h2q11 0 24 5t28 15 25 18 25 21 20 16q116 92 224 177 30 24 56 65t26 73z m71 21v-607q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63v607q0 37 26 63t63 26h822q37 0 63-26t26-63z" horiz-adv-x="1000" />
+<glyph glyph-name="pencil" unicode="&#x270e;" d="m203-7l50 51-131 131-51-51v-60h72v-71h60z m291 518q0 12-12 12-5 0-9-4l-303-302q-4-4-4-10 0-12 13-12 5 0 9 4l303 302q3 4 3 10z m-30 107l232-232-464-465h-232v233z m381-54q0-29-20-50l-93-93-232 233 93 92q20 21 50 21 29 0 51-21l131-131q20-22 20-51z" horiz-adv-x="857.1" />
+<glyph glyph-name="plus-circled" unicode="&#x2795;" d="m679 314v72q0 14-11 25t-25 10h-143v143q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-143h-143q-14 0-25-10t-10-25v-72q0-14 10-25t25-11h143v-142q0-15 11-25t25-11h71q15 0 25 11t11 25v142h143q14 0 25 11t11 25z m178 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
<glyph glyph-name="asl" unicode="&#xe0ad;" d="m1 700q-4 37 15 53t45 5 35-38l53-184q-15-29-14-64 6-30 36-204 7-52 32-82t65-29q47 0 74 37 34-39 83-37t74 41q27-37 71-41t73 27q12 16 20 32t11 37 5 33 1 40l0 38q26-10 61 24 49 45 109 78t98 8q33-24 31-59t-35-55q-61-25-104-82t-67-112-58-117-78-93q-21-18-66-18l-350 0q-84 6-105 118z m181-234q-6 45 21 65t56 8 37-48l21-209q4-41-17-63t-46-15-37 45z m155 70q2 41 32 56t62-1 36-49l8-248q0-59-28-76t-57 4-30 62z m175 4q4 43 37 55t62-7 30-52l-6-254q-5-47-34-66t-54 1-29 67z" horiz-adv-x="979" />
-<glyph glyph-name="eye" unicode="&#xe70a;" d="m0 314q0 19 11 39 78 128 210 205t279 78 279-78 210-205q11-20 11-39t-11-38q-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38z m71 0q75-114 187-182t242-68 242 68 187 182q-85 132-213 197 34-58 34-125 0-104-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197z m259 72q0-11 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19-8 19-19 7q-70 0-120-50t-50-119z" horiz-adv-x="1000" />
-<glyph glyph-name="tags" unicode="&#xe70d;" d="m0 475v232q0 29 21 50t50 22h233q29 0 65-15t57-36l399-399q20-21 20-50 0-30-20-51l-274-274q-22-21-51-21-30 0-50 21l-399 399q-21 21-36 57t-15 65z m107 125q0-30 21-50t51-21 50 21 21 50-21 51-50 20-51-20-21-51z m286 179h125q29 0 65-15t57-36l399-399q21-21 21-50 0-30-21-51l-274-274q-22-21-51-21-20 0-33 8t-29 25l262 262q21 21 21 51 0 29-21 50l-399 399q-21 21-57 36t-65 15z" horiz-adv-x="1071.4" />
-<glyph glyph-name="chat" unicode="&#xe720;" d="m0 421q0 78 53 144t143 104 197 38 197-38 143-104 53-144-53-143-143-104-197-38q-48 0-98 9-70-50-155-72-21-5-48-9h-2q-6 0-12 5t-6 11q-1 2-1 4t1 4 1 3l1 3t2 3 2 3 3 2 2 3q3 3 13 14t15 16 12 17 14 21 11 25q-69 40-108 98t-40 125z m344-354q32-3 49-3 90 0 172 25t148 72q69 52 107 119t37 141q0 43-13 85 72-39 114-99t42-128q0-67-40-126t-108-98q5-14 11-25t14-21 13-16 14-17 13-14q0 0 2-2t3-3 2-3 2-3l1-3t1-3 1-4-1-3q-2-8-7-13t-13-4q-27 4-48 9-85 23-155 72-50-9-98-9-151 0-263 74z" horiz-adv-x="1000" />
-<glyph glyph-name="trash" unicode="&#xe729;" d="m0 582v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q22 0 44-15t30-35l39-93h173q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13z m143-547q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22v529h-500v-529z m71 83v321q0 8 5 13t13 5h36q8 0 13-5t5-13v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13z m54 518h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m89-518v321q0 8 5 13t13 5h36q8 0 13-5t5-13v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13z m143 0v321q0 8 5 13t13 5h36q7 0 12-5t5-13v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13z" horiz-adv-x="785.7" />
-<glyph glyph-name="basket" unicode="&#xe73d;" d="m0 671q0 15 11 26t25 10h143q9 0 16-3t11-9 7-14 4-15 3-16 3-14h670q14 0 25-11t11-25v-286q0-13-9-24t-23-12l-583-68q1-3 3-12t3-14 1-13q0-9-13-35h513q15 0 26-11t10-25-10-25-26-11h-571q-14 0-25 11t-11 25q0 8 6 22t17 33 11 21l-98 460h-114q-15 0-25 10t-11 25z m214-678q0 29 21 50t51 21 50-21 21-50-21-51-50-21-51 21-21 51z m500 0q0 29 21 50t51 21 50-21 21-50-21-51-50-21-51 21-21 51z" horiz-adv-x="928.6" />
+<glyph glyph-name="eye" unicode="&#xe70a;" d="m929 314q-85 132-213 197 34-58 34-125 0-104-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 242 68 187 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-12 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
+<glyph glyph-name="tags" unicode="&#xe70d;" d="m250 600q0 30-21 51t-50 20-51-20-21-51 21-50 51-21 50 21 21 50z m595-321q0-30-20-51l-274-274q-22-21-51-21-30 0-50 21l-399 399q-21 21-36 57t-15 65v232q0 29 21 50t50 22h233q29 0 65-15t57-36l399-399q20-21 20-50z m215 0q0-30-21-51l-274-274q-22-21-51-21-20 0-33 8t-29 25l262 262q21 21 21 51 0 29-21 50l-399 399q-21 21-57 36t-65 15h125q29 0 65-15t57-36l399-399q21-21 21-50z" horiz-adv-x="1071.4" />
+<glyph glyph-name="chat" unicode="&#xe720;" d="m786 421q0-77-53-143t-143-104-197-38q-48 0-98 9-70-49-155-72-21-5-48-9h-2q-6 0-12 5t-6 12q-1 1-1 3t1 4 1 3l1 3t2 3 2 3 3 3 2 2q3 3 13 14t15 16 12 17 14 21 11 25q-69 40-108 98t-40 125q0 78 53 144t143 104 197 38 197-38 143-104 53-144z m214-142q0-67-40-126t-108-98q5-14 11-25t14-21 13-16 14-17 13-14q0 0 2-2t3-3 2-3 2-3l1-3t1-3 1-4-1-3q-2-8-7-13t-13-4q-27 4-48 9-85 23-155 72-50-9-98-9-151 0-263 74 32-3 49-3 90 0 172 25t148 72q69 52 107 119t37 141q0 43-13 85 72-39 114-99t42-128z" horiz-adv-x="1000" />
+<glyph glyph-name="trash" unicode="&#xe729;" d="m286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q22 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
+<glyph glyph-name="basket" unicode="&#xe73d;" d="m357-7q0-29-21-50t-50-22-50 22-22 50 22 50 50 21 50-21 21-50z m500 0q0-29-21-50t-50-22-51 22-21 50 21 50 51 21 50-21 21-50z m72 607v-286q0-13-10-23t-22-12l-583-68q7-34 7-40 0-8-13-35h513q15 0 26-11t10-25-10-25-26-11h-571q-14 0-25 11t-11 25q0 6 5 18t9 20 12 22 8 16l-98 460h-114q-15 0-25 10t-11 25 11 26 25 10h143q9 0 16-3t10-9 8-14 4-14 3-17 3-14h670q14 0 25-11t11-25z" horiz-adv-x="928.6" />
<glyph glyph-name="puzzle" unicode="&#xe7b6;" d="m586 402q-37 0-64-34t-27-82 27-84 64-34q22 0 43 13 26 17 37 11t12-24l0-144q0-31-24-54t-55-23l-143 0q-16 0-23 9t2 31q21 25 21 51 0 38-34 64t-83 26-83-26-35-64q0-22 13-44 17-26 12-37t-25-10l-143 0q-33 0-55 23t-23 54l0 144q0 16 9 23t31-3q24-20 51-20 38 0 65 34t27 84-27 82-65 34q-21 0-42-13-26-17-38-12t-11 25l0 91q0 33 23 56t55 23l143 0q19 0 25 10t-11 37q-14 20-14 44 0 38 35 64t83 26 83-26 34-64q0-26-21-51-10-21-2-31t23-9l143 0q31 0 55-23t24-56l0-91q0-16-10-23t-30 3q-24 20-52 20z" horiz-adv-x="678" />
<glyph glyph-name="language" unicode="&#xe800;" d="m988 306q30-82-10-176t-134-160q-10 0-12 2t-16 19-16 19q-2 6 2 10 86 60 117 152t-11 148q-16-38-39-76t-59-80-86-65-106-15q-52 6-84 41t-32 93q0 84 60 148 50 50 114 66l-2 100q-140-24-146-24-6-2-10 4 0 2-5 29t-5 31q-2 2 1 4t7 2l156 28q0 110-2 114 0 8 8 8 46 0 52 2 10 0 10-8l0-104q158 22 164 22 8 4 10-6 0-2 4-23t4-25q4-10-4-12l-176-30 0-102 12 0q86 0 148-36t86-100z m-370-160q28-6 62 6l-4 214q-34-12-60-40-44-44-44-108 0-66 46-72z m122 28q28 24 58 68t45 79 7 41q-36 18-96 18-2 0-6-1t-6-1z m-448 382q10-28 53-165t83-261 40-126q0-4-4-4l-86 0q-6 0-6 4l-50 166-176 0q-48-164-50-166 0-4-6-4l-86 0q-4 0-4 4 10 18 176 552 2 8 10 8l96 0q10 0 10-8z m-130-316l144 0-72 264z" horiz-adv-x="1001" />
-<glyph glyph-name="signal" unicode="&#xe801;" d="m0-61v107q0 8 5 13t13 5h107q8 0 13-5t5-13v-107q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13z m214 0v179q0 8 5 13t13 5h107q8 0 13-5t5-13v-179q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13z m215 0v322q0 8 5 13t12 5h108q7 0 12-5t5-13v-322q0-8-5-13t-12-5h-108q-7 0-12 5t-5 13z m214 0v536q0 8 5 13t13 5h107q8 0 13-5t5-13v-536q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13z m214 0v822q0 8 5 13t13 5h107q8 0 13-5t5-13v-822q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13z" horiz-adv-x="1000" />
+<glyph glyph-name="signal" unicode="&#xe801;" d="m143 46v-107q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v107q0 8 5 13t13 5h107q8 0 13-5t5-13z m214 72v-179q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v179q0 8 5 13t13 5h107q8 0 13-5t5-13z m214 143v-322q0-8-5-13t-12-5h-108q-7 0-12 5t-5 13v322q0 8 5 13t12 5h108q7 0 12-5t5-13z m215 214v-536q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v536q0 8 5 13t13 5h107q8 0 13-5t5-13z m214 286v-822q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v822q0 8 5 13t13 5h107q8 0 13-5t5-13z" horiz-adv-x="1000" />
<glyph glyph-name="users" unicode="&#xe802;" d="m0 49q20 7 60 22t69 26 50 22q37 19 57 56t21 76q0 27-31 64-19 21-33 60-45 18-45 76 0 43 14 61-5 39-9 82-5 55 26 108t84 84 110 32q43 0 85-19t73-50 48-72 14-83q-4-55-8-82 14-19 14-61 0-58-45-76-15-41-32-60-32-37-32-64 0-39 20-76t58-56q29-15 92-38t113-43 66-38q18-17 28-47t10-51l1-21h-878v168z m705 299q0 34 12 50-5 32-7 67-4 45 21 89t69 72 90 27 89-27 69-72 22-89q-2-35-8-67 12-16 12-50 0-48-36-62-12-33-27-50-9-10-13-16t-9-16-4-20q0-32 17-62t47-46q17-9 42-19t60-22 50-19v-135h-254q0 4 0 11t-3 26-7 36-15 38-23 33q-23 25-53 44t-79 37q27 34 27 78 0 10-5 20t-8 16-12 16q-14 15-27 49-37 16-37 63z" horiz-adv-x="1201.2" />
<glyph glyph-name="tools" unicode="&#xe803;" d="m155 506q-8-8-11-22t-3-25-2-11q-2-2-17-15t-19-17q-16-14-28 4l-70 76q-11 12 2 24 2 2 18 14t20 16q6 6 27 6t37 14q14 14 18 38t10 30q2 0 9 7t26 22 41 31q134 90 186 96 122 0 148-2 12 0-8-8-120-52-152-76-80-56-36-114 34-46 38-48 8-8-2-14-2-2-38-35t-38-35q-14-8-18-4-42 48-71 60t-67-12z m286-26l410-476q18-22-2-38l-48-42q-22-14-38 4l-414 472q-8 8 0 20l72 62q12 8 20-2z m554 202q16-104-16-166-50-88-154-62-56 12-100-32l-82-78-68 78 68 70q24 24 31 53t6 65 5 58q12 56 140 112 12 6 18-3t2-15q-12-12-46-80-14-10-12-35t40-53q58-40 96 22 6 12 26 41t22 33q4 10 13 9t11-17z m-858-684l254 248 76-86-246-242q-20-20-38-4l-46 46q-22 18 0 38z" horiz-adv-x="1000" />
-<glyph glyph-name="arrows-cw" unicode="&#xe804;" d="m0-7v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66 5 13 17 13h107q8 0 13-6t5-12q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25z m10 446v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12z" horiz-adv-x="857.1" />
-<glyph glyph-name="exchange" unicode="&#xe805;" d="m0 136q0 8 5 13l179 178q5 5 12 5 8 0 13-5t5-13v-107h768q7 0 13-5t5-13v-107q0-7-5-12t-13-6h-768v-107q0-7-5-12t-13-6q-6 0-13 6l-178 178q-5 5-5 13z m0 303v107q0 8 5 13t13 5h768v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13t-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-768q-7 0-13 6t-5 12z" horiz-adv-x="1000" />
-<glyph glyph-name="folder-open" unicode="&#xe806;" d="m0 118v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h303q51 0 88-37t37-88v-90h-464q-53 0-110-26t-92-67l-188-221-2-3q0 2-1 7t0 7z m41-94q0 17 17 37l188 221q24 28 67 48t80 20h607q19 0 34-7t15-24q0-18-18-37l-187-221q-24-28-67-48t-81-20h-607q-19 0-33 7t-15 24z" horiz-adv-x="1071.4" />
+<glyph glyph-name="arrows-cw" unicode="&#xe804;" d="m843 261q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66 5 13 17 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25z" horiz-adv-x="857.1" />
+<glyph glyph-name="exchange" unicode="&#xe805;" d="m1000 189v-107q0-7-5-12t-13-6h-768v-107q0-7-5-12t-13-6q-6 0-13 6l-178 178q-5 5-5 13 0 8 5 13l179 178q5 5 12 5 8 0 13-5t5-13v-107h768q7 0 13-5t5-13z m0 304q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-768q-7 0-13 6t-5 12v107q0 8 5 13t13 5h768v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
+<glyph glyph-name="folder-open" unicode="&#xe806;" d="m1049 319q0-18-18-37l-187-221q-24-28-67-48t-81-20h-607q-19 0-33 7t-15 24q0 17 17 37l188 221q24 28 67 48t80 20h607q19 0 34-7t15-24z m-192 192v-90h-464q-53 0-110-26t-92-67l-188-221-2-3q0 2-1 7t0 7v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h303q51 0 88-37t37-88z" horiz-adv-x="1071.4" />
<glyph glyph-name="brush" unicode="&#xe807;" d="m118 170q38 34 85 29t87-45q42-40 48-87t-30-83q-86-84-228-102-84-12-80 14 0 4 6 10 52 60 64 145t48 119z m840 646q26-26-148-248t-292-338q-38-38-124-104-8-6-16 8-18 34-48 64-32 32-66 48-16 6-8 16 64 84 104 122 118 116 344 287t254 145z" horiz-adv-x="962" />
<glyph glyph-name="flow-branch" unicode="&#xe808;" d="m640 650q0-80-74-110-6-58-28-101t-61-69-68-38-75-26q-42-14-63-22t-47-24-38-40-16-60q70-30 70-110 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-204q40 30 138 60 58 18 84 29t51 41 29 76q-70 32-70 108 0 50 35 85t85 35 85-35 35-85z m-588 0q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m400 600q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
-<glyph glyph-name="menu" unicode="&#xe809;" d="m0 29v71q0 15 11 25t25 11h785q15 0 26-11t10-25v-71q0-15-10-26t-26-10h-785q-15 0-25 10t-11 26z m0 285v72q0 14 11 25t25 10h785q15 0 26-10t10-25v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25z m0 286v71q0 15 11 26t25 10h785q15 0 26-10t10-26v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25z" horiz-adv-x="857.1" />
-<glyph glyph-name="code" unicode="&#xe80a;" d="m25 314q0 8 6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13t-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13z m372-350l208 720q3 8 9 11t13 2l35-10q7-2 11-9t1-13l-208-721q-2-7-9-11t-13-1l-34 9q-8 3-11 9t-2 14z m325 118q0 7 5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13t-5-13l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13z" horiz-adv-x="1071.4" />
+<glyph glyph-name="menu" unicode="&#xe809;" d="m857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
+<glyph glyph-name="code" unicode="&#xe80a;" d="m344 69l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13t-6-13z m330 596l-208-721q-2-7-9-11t-13-1l-34 9q-8 3-11 9t-2 14l208 720q3 8 9 11t13 2l35-10q7-2 11-9t1-13z m367-364l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13t-5-13z" horiz-adv-x="1071.4" />
<glyph glyph-name="user-add" unicode="&#xe80b;" d="m620 128q180-64 180-122l0-106-800 0 0 202q36 14 82 26 94 34 129 69t35 95q0 22-23 48t-31 74q-2 12-23 25t-25 61q0 16 5 26t9 12l4 4q-8 50-12 88-6 54 40 112t160 58 160-58 42-112l-14-88q18-8 18-42-2-28-9-43t-14-17-14-8-9-18q-10-46-33-73t-23-49q0-60 36-95t130-69z m230 272l150 0 0-100-150 0 0-150-100 0 0 150-150 0 0 100 150 0 0 150 100 0 0-150z" horiz-adv-x="1000" />
-<glyph glyph-name="cw" unicode="&#xe80c;" d="m0 350q0 87 34 166t92 137 136 92 167 34q82 0 158-31t137-88l72 72q16 18 39 8 22-9 22-33v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-62-91-22-111 22-111 62-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166z" horiz-adv-x="857.1" />
+<glyph glyph-name="cw" unicode="&#xe80c;" d="m857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-62-91-22-111 22-111 62-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166 34 166 92 137 136 92 167 34q82 0 158-31t137-88l72 72q16 18 39 8 22-9 22-33z" horiz-adv-x="857.1" />
<glyph glyph-name="group" unicode="&#xe80d;" d="m0 106l0 134q0 26 18 32l171 80q-66 39-68 131 0 56 35 103 37 41 90 43 31 0 63-19-49-125 23-237-12-11-25-19l-114-55q-48-23-52-84l0-143-114 0q-25 0-27 34z m193-59l0 168q0 27 22 37l152 70 57 28q-37 23-60 66t-22 94q0 76 46 130t110 54 109-54 45-130q0-106-78-158l61-30 146-70q24-10 24-37l0-168q-2-37-37-41l-541 0q-14 2-24 14t-10 27z m473 330q68 106 22 231 31 19 66 21 49 0 90-43 35-41 35-103 0-82-65-131l168-80q18-10 18-32l0-134q0-32-27-34l-118 0 0 143q0 57-50 84l-110 53q-15 8-29 25z" horiz-adv-x="1000" />
<glyph glyph-name="home" unicode="&#xe80e;" d="m888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
<glyph glyph-name="equalizer" unicode="&#xe80f;" d="m576 239l0-112-55 0 0-167q0-23-17-40t-39-17-39 17-17 40l0 167-56 0 0 112 56 0 0 503q0 24 17 39t38 16q24 0 41-16t16-39l0-503 55 0z m335 335l0-112-55 0 0-502q0-23-16-40t-41-17q-23 0-39 17t-16 40l0 502-56 0 0 112 56 0 0 168q0 24 16 39t39 16 41-16 16-39l0-168 55 0z m-670-112l0-111-55 0 0-391q0-23-16-40t-40-17q-23 0-39 17t-17 40l0 391-56 0 0 111 56 0 0 280q0 24 16 39t40 16 40-16 16-39l0-280 55 0z" horiz-adv-x="928" />
<glyph glyph-name="mail-1" unicode="&#xe810;" d="m467 366l-449 210 0 109 893 0 0-109z m0-123l444 210 0-437-893 0 0 438z" horiz-adv-x="928" />
<glyph glyph-name="search" unicode="&#xe811;" d="m772 78q30-34 6-62l-46-46q-36-32-68 0l-190 190q-74-42-156-42-128 0-223 95t-95 223 90 219 218 91 224-95 96-223q0-88-46-162z m-678 358q0-88 68-156t156-68 151 63 63 153q0 88-68 155t-156 67-151-63-63-151z" horiz-adv-x="789" />
-<glyph glyph-name="move" unicode="&#xe812;" d="m0 350q0 15 11 25l143 143q10 11 25 11t25-11 10-25v-72h215v215h-72q-14 0-25 10t-11 25 11 26l143 142q11 11 25 11t25-11l143-142q11-11 11-26t-11-25-25-10h-72v-215h215v72q0 14 10 25t25 11 26-11l142-143q11-10 11-25t-11-25l-142-143q-11-11-26-11t-25 11-10 25v72h-215v-215h72q14 0 25-10t11-25-11-26l-143-142q-10-11-25-11t-25 11l-143 142q-11 11-11 26t11 25 25 10h72v215h-215v-72q0-14-10-25t-25-11-26 11l-142 143q-11 11-11 25z" horiz-adv-x="1000" />
+<glyph glyph-name="move" unicode="&#xe812;" d="m1000 350q0-14-11-25l-142-143q-11-11-26-11t-25 11-10 25v72h-215v-215h72q14 0 25-10t11-25-11-26l-143-142q-10-11-25-11t-25 11l-143 142q-11 11-11 26t11 25 25 10h72v215h-215v-72q0-14-10-25t-25-11-26 11l-142 143q-11 11-11 25t11 25l142 143q11 11 26 11t25-11 10-25v-72h215v215h-72q-14 0-25 10t-11 25 11 26l143 142q11 11 25 11t25-11l143-142q11-11 11-26t-11-25-25-10h-72v-215h215v72q0 14 10 25t25 11 26-11l142-143q11-10 11-25z" horiz-adv-x="1000" />
<glyph glyph-name="upload" unicode="&#xe813;" d="m500 776l260-244-164 0 0-256-190 0 0 256-166 0z m468-578q18-10 27-32t3-40l-28-154q-4-20-22-33t-40-13l-816 0q-22 0-40 13t-22 33l-28 154q-10 48 32 72l158 108 98 0-170-130 178 0q8 0 12-8l40-110 300 0 40 110q8 8 12 8l178 0-170 130 98 0z" horiz-adv-x="1000" />
<glyph glyph-name="upload-cloud" unicode="&#xe814;" d="m760 494q100 0 170-68t70-166-70-166-170-68l-190 0 0 190 106 0-176 230-174-230 104 0 0-190-248 0q-74 0-128 52t-54 124q0 74 53 126t129 52q14 0 20-2-2 12-2 38 0 108 78 184t188 76q90 0 160-52t94-134q28 4 40 4z" horiz-adv-x="1000" />
<glyph glyph-name="key" unicode="&#xe815;" d="m774 612q20-116-28-215t-150-117q-66-12-130-2l-118-194-70-12-104-166q-14-28-46-32l-76-14q-12-4-22 4t-12 22l-16 98q-8 30 12 56l258 386q-24 50-38 120-18 106 53 187t185 101q106 20 195-45t107-177z m-126-76q30 44 21 97t-51 83q-42 32-92 22t-80-54q-8-12-12-23t-1-20 5-16 13-17 18-15 22-16 23-17q6-4 22-16t23-16 19-12 19-8 17 1 18 8 16 19z" horiz-adv-x="780" />
<glyph glyph-name="network" unicode="&#xe816;" d="m224 504q-22 0-42-10-48 52-92 128 54 74 128 118 92-38 152-82-6-16-6-32 0-6 4-22-62-48-116-104-16 4-28 4z m-98-98q0-34 20-60-60-114-80-232-66 106-66 236 0 110 50 206 38-62 84-112-8-24-8-38z m336 318q-28 0-50-14-58 42-114 70 84 30 162 30 120 0 230-62-76-14-162-50-26 26-66 26z m146-460q-160 24-290 112 4 20 4 30 0 24-14 52 38 44 98 90 26-20 56-20 14 0 38 8 94-108 134-240-16-14-26-32z m128-132q38 14 54 60 58 4 108 18-46-146-166-232 6 48 6 98 0 10-1 28t-1 28z m-150 66q-190-96-304-272-90 36-158 110 12 144 80 274 6-2 20-2 30 0 52 14 142-98 310-124z m184 492q150-136 150-340 0-22-4-66-64-18-130-24-24 56-88 60-48 146-148 264 10 20 10 42l0 10q100 42 210 54z m-136-544q14-10 32-18 2-18 2-52 0-80-14-144-86-42-194-42-58 0-112 12 110 160 286 244z" horiz-adv-x="920" />
<glyph glyph-name="info-circled-1" unicode="&#xe817;" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m52-152q-42 0-65-24t-23-50q-2-28 15-44t49-16q38 0 61 22t23 54q0 58-60 58z m-120-594q30 0 84 26t106 78l-18 24q-48-36-72-36-14 0-4 38l42 160q26 96-22 96-30 0-89-29t-115-75l16-26q52 34 74 34 12 0 0-34l-36-152q-26-104 34-104z" horiz-adv-x="920" />
-<glyph glyph-name="calendar" unicode="&#xe818;" d="m0-79v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50z m71 0h161v161h-161v-161z m0 197h161v178h-161v-178z m0 214h161v161h-161v-161z m143 268q0-7 6-13t12-5h36q7 0 12 5t6 13v161q0 7-6 12t-12 6h-36q-7 0-12-6t-6-12v-161z m54-679h178v161h-178v-161z m0 197h178v178h-178v-178z m0 214h178v161h-178v-161z m214-411h179v161h-179v-161z m0 197h179v178h-179v-178z m0 214h179v161h-179v-161z m161 268q0-7 5-13t13-5h35q8 0 13 5t5 13v161q0 7-5 12t-13 6h-35q-8 0-13-6t-5-12v-161z m53-679h161v161h-161v-161z m0 197h161v178h-161v-178z m0 214h161v161h-161v-161z" horiz-adv-x="928.6" />
-<glyph glyph-name="ok" unicode="&#xe819;" d="m68 332q0 22 15 38l76 76q16 16 38 16t38-16l164-165 366 367q16 16 38 16t38-16l76-76q15-16 15-38t-15-38l-404-404-76-76q-16-15-38-15t-38 15l-76 76-202 202q-15 16-15 38z" horiz-adv-x="1000" />
+<glyph glyph-name="calendar" unicode="&#xe818;" d="m71-79h161v161h-161v-161z m197 0h178v161h-178v-161z m-197 197h161v178h-161v-178z m197 0h178v178h-178v-178z m-197 214h161v161h-161v-161z m411-411h179v161h-179v-161z m-214 411h178v161h-178v-161z m428-411h161v161h-161v-161z m-214 197h179v178h-179v-178z m-196 482v161q0 7-6 12t-12 6h-36q-7 0-12-6t-6-12v-161q0-7 6-13t12-5h36q7 0 12 5t6 13z m410-482h161v178h-161v-178z m-214 214h179v161h-179v-161z m214 0h161v161h-161v-161z m18 268v161q0 7-5 12t-13 6h-35q-8 0-13-6t-5-12v-161q0-7 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
+<glyph glyph-name="ok" unicode="&#xe819;" d="m932 534q0-22-15-38l-404-404-76-76q-16-15-38-15t-38 15l-76 76-202 202q-15 16-15 38t15 38l76 76q16 16 38 16t38-16l164-165 366 367q16 16 38 16t38-16l76-76q15-16 15-38z" horiz-adv-x="1000" />
<glyph glyph-name="help-circled" unicode="&#xe81a;" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m-2-740q30 0 49 19t19 47q2 30-17 49t-49 19l-2 0q-28 0-47-18t-21-46q0-30 19-49t47-21l2 0z m166 328q26 34 26 78 0 78-54 116-52 38-134 38-64 0-104-26-68-42-72-146l0-4 110 0 0 4q0 26 16 54 16 24 54 24 40 0 52-20 16-20 16-44 0-18-16-40-8-12-20-20l-6-4q-6-4-16-11t-20-15-21-17-17-17q-14-20-18-78l0-8 108 0 0 4q0 12 4 28 6 20 28 36l28 18q46 34 56 50z" horiz-adv-x="920" />
-<glyph glyph-name="logout" unicode="&#xe81b;" d="m0 154v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-27t-27-63v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114z m214 89v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25t-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25z" horiz-adv-x="928.6" />
+<glyph glyph-name="logout" unicode="&#xe81b;" d="m357 46q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-27t-27-63v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" />
<glyph glyph-name="flag" unicode="&#xe81c;" d="m874 616q14 6 22-1t0-19q-96-138-164-213t-110-90-73-2-60 37-63 40-93-4-139-86l90-352-100 0-184 720 92 34q90 66 152 86t98 3 64-51 62-71 79-62 129-20 198 51z" horiz-adv-x="900" />
<glyph glyph-name="spin6" unicode="&#xe81d;" d="m855 9c-189-190-520-172-705 13-190 190-200 494-28 695 11 13 21 26 35 34 36 23 85 18 117-13 30-31 35-76 16-112-5-9-9-15-16-22-140-151-145-379-8-516 153-153 407-121 542 34 106 122 142 297 77 451-83 198-305 291-510 222l0 1c236 82 492-24 588-252 71-167 37-355-72-493-11-15-23-29-36-42z" horiz-adv-x="1000" />
<glyph glyph-name="hourglass" unicode="&#xe81e;" d="m560 622q0-44-48-96t-97-99-49-77 49-76 97-97 48-97l0-118q0-34-86-73t-194-39-194 39-86 73l0 118q0 46 48 97t97 97 49 76-49 77-97 99-48 96l0 118q0 32 87 71t193 39 193-39 87-71l0-118z m-482 112l-18-14q-4-8 4-14 92-52 216-52 132 0 220 50 14 10-16 30-96 54-202 54-120 0-204-54z m228-384q0 18 4 33t18 33 20 25 31 31 29 28q92 92 92 122l2 50q-100-54-222-54t-222 54l4-50q0-32 90-122 6-6 22-21t23-22l19-19t17-21 11-20 9-23 3-24q0-10-1-19t-6-18-8-16-11-17l-12-15t-15-16-16-15-18-16-17-16q-90-90-90-122l0-66q8 4 66 23t92 43 34 58q0 30 26 30t26-30q0-34 33-58t94-43 67-23l0 66q0 30-92 122-4 4-21 20t-22 21-18 19-18 22-12 20-9 23-2 23z" horiz-adv-x="560" />
-<glyph glyph-name="check" unicode="&#xe81f;" d="m0 154v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-6-5-13-5-2 0-5 1-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v141q0 8 5 13l36 35q6 6 13 6 3 0 7-2 11-4 11-16v-177q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114z m143 267q0 19 14 32l61 62q14 13 32 13t32-13l147-147 361 361q13 13 31 13t32-13l62-61q13-14 13-32t-13-32l-455-454q-13-14-31-14t-32 14l-240 240q-14 13-14 31z" horiz-adv-x="928.6" />
-<glyph glyph-name="check-empty" unicode="&#xe820;" d="m0 154v464q0 66 47 113t114 48h464q66 0 114-48t47-113v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114z m71 0q0-37 27-63t63-27h464q37 0 63 27t26 63v464q0 37-26 63t-63 26h-464q-37 0-63-26t-27-63v-464z" horiz-adv-x="785.7" />
-<glyph glyph-name="cancel-circled" unicode="&#xe821;" d="m0 350q0 117 58 215t155 156 216 58 215-58 156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215z m216-126q0-15 11-26l50-50q10-11 25-11 15 0 26 11l101 101 101-101q10-11 25-11 15 0 25 11l51 50q10 11 10 26 0 14-10 25l-101 101 101 101q10 11 10 25 0 15-10 26l-51 50q-10 11-25 11-15 0-25-11l-101-101-101 101q-11 11-26 11-15 0-25-11l-50-50q-11-11-11-26 0-14 11-25l101-101-101-101q-11-11-11-25z" horiz-adv-x="857.1" />
-<glyph glyph-name="cancel" unicode="&#xe822;" d="m61 112q0 23 16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38t-15-38l-76-76q-16-15-38-15t-38 15l-164 164-164-164q-16-15-38-15t-38 15l-76 76q-16 16-16 38z" horiz-adv-x="785.7" />
-<glyph glyph-name="plus" unicode="&#xe823;" d="m0 332v107q0 23 16 38t38 16h232v232q0 22 15 38t38 16h107q23 0 38-16t16-38v-232h232q22 0 38-16t16-38v-107q0-22-16-38t-38-16h-232v-232q0-22-16-38t-38-15h-107q-22 0-38 15t-15 38v232h-232q-23 0-38 16t-16 38z" horiz-adv-x="785.7" />
-<glyph glyph-name="ok-circled" unicode="&#xe824;" d="m0 350q0 117 58 215t155 156 216 58 215-58 156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215z m141-11q0-15 10-25l202-202q10-10 25-10 15 0 25 10l303 303q11 10 11 25 0 16-11 26l-50 50q-11 11-25 11t-26-11l-227-227-126 126q-11 11-25 11t-26-11l-50-50q-10-10-10-26z" horiz-adv-x="857.1" />
-<glyph glyph-name="zoom-in" unicode="&#xe827;" d="m0 386q0 80 31 152t84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51t-21-50-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 83-84 126-31 153z m143 0q0-103 73-177t177-73 176 73 74 177-74 176-176 74-177-74-73-176z m71-18v36q0 7 6 12t12 5h125v125q0 8 5 13t13 5h36q7 0 12-5t6-13v-125h125q7 0 12-5t5-12v-36q0-7-5-13t-12-5h-125v-125q0-7-6-13t-12-5h-36q-7 0-13 5t-5 13v125h-125q-7 0-12 5t-6 13z" horiz-adv-x="928.6" />
-<glyph glyph-name="zoom-out" unicode="&#xe828;" d="m0 386q0 80 31 152t84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51t-21-50-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 83-84 126-31 153z m143 0q0-103 73-177t177-73 176 73 74 177-74 176-176 74-177-74-73-176z m71-18v36q0 7 6 12t12 5h322q7 0 12-5t5-12v-36q0-7-5-13t-12-5h-322q-7 0-12 5t-6 13z" horiz-adv-x="928.6" />
-<glyph glyph-name="tasks" unicode="&#xf0ae;" d="m0 29v142q0 15 11 26t25 10h928q15 0 25-10t11-26v-142q0-15-11-26t-25-10h-928q-15 0-25 10t-11 26z m0 285v143q0 15 11 25t25 11h928q15 0 25-11t11-25v-143q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25z m0 286v143q0 14 11 25t25 11h928q15 0 25-11t11-25v-143q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25z m357-250h572v71h-572v-71z m214-286h358v72h-358v-72z m143 572h215v71h-215v-71z" horiz-adv-x="1000" />
-<glyph glyph-name="filter" unicode="&#xf0b0;" d="m3 685q9 22 33 22h714q23 0 33-22 9-23-8-39l-275-275v-414q0-23-22-33-7-3-14-3-15 0-25 11l-143 143q-10 10-10 25v271l-275 275q-18 16-8 39z" horiz-adv-x="785.7" />
-<glyph glyph-name="mail-alt" unicode="&#xf0e0;" d="m0 11v443q25-28 56-49 202-137 278-192 32-24 51-37t53-27 61-13h2q28 0 61 13t53 27 51 37q95 68 278 192 32 22 56 49v-443q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63z m0 595q0 43 23 72t66 29h822q36 0 62-26t27-63q0-44-27-84t-68-69q-210-146-262-181-5-4-23-17t-30-22-29-18-33-15-27-5h-2q-12 0-27 5t-33 15-29 18-30 22-23 17q-51 35-147 101t-114 80q-35 23-65 64t-31 77z" horiz-adv-x="1000" />
-<glyph glyph-name="sitemap" unicode="&#xf0e8;" d="m0-25v179q0 22 16 38t38 15h53v107q0 29 21 51t51 21h285v107h-53q-23 0-38 15t-16 38v179q0 22 16 38t38 16h178q23 0 38-16t16-38v-179q0-22-16-38t-38-15h-53v-107h285q29 0 51-21t21-51v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q22 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38z" horiz-adv-x="1000" />
-<glyph glyph-name="crop" unicode="&#xf125;" d="m0 511v107q0 8 5 13t13 5h125v125q0 7 5 12t13 5h107q8 0 13-5t5-12v-125h475l137 138q5 5 13 5t13-5q5-6 5-13t-5-13l-138-137v-475h125q8 0 13-5t5-13v-107q0-8-5-13t-13-5h-125v-125q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v125h-482q-8 0-13 5t-5 13v482h-125q-8 0-13 5t-5 13z m286-350l332 332h-332v-332z m25-25h332v332z" horiz-adv-x="928.6" />
-<glyph glyph-name="picture" unicode="&#x1f304;" d="m0 11v678q0 37 26 63t63 27h893q37 0 63-27t26-63v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63z m71 0q0-8 6-13t12-5h893q7 0 13 5t5 13v678q0 8-5 13t-13 5h-893q-7 0-12-5t-6-13v-678z m72 53v107l178 179 90-89 285 285 233-232v-250h-786z m0 465q0 44 31 75t76 32 76-32 31-75-31-76-76-32-76 32-31 76z" horiz-adv-x="1071.4" />
-<glyph glyph-name="user" unicode="&#x1f464;" d="m0 66q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q5 0 24-12t41-27 60-27 75-12 74 12 61 27 41 27 24 12q34 0 62-11t48-30 34-45 24-55 15-60 8-61 2-58q0-67-41-106t-108-39h-488q-67 0-108 39t-41 106z m179 498q0 89 62 152t152 63 151-63 63-152-63-151-151-63-152 63-62 151z" horiz-adv-x="785.7" />
-<glyph glyph-name="shuffle" unicode="&#x1f500;" d="m0 82v107q0 8 5 13t13 5h125q27 0 48 9t39 25 28 34 26 43q17 35 43 96 16 36 28 62t30 58 36 56 41 46 50 38 59 24 72 9h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13t-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-143q-27 0-49-8t-38-25-29-35-25-43q-18-34-43-95-16-37-28-62t-30-59-36-55-41-47-50-38-60-23-71-10h-125q-8 0-13 5t-5 13z m0 500v107q0 8 5 13t13 5h125q139 0 229-125-34-52-77-153-12 25-20 41t-23 35-28 32-36 19-45 8h-125q-8 0-13 5t-5 13z m415-392q33 52 76 152 12-25 20-40t23-36 28-31 35-20 46-8h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13t-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107q-18 0-48 0t-45-1-41 1-39 3-36 6-35 10-32 16-33 22-31 30-31 39z" horiz-adv-x="1000" />
-<glyph glyph-name="lock" unicode="&#x1f512;" d="m0 46v322q0 22 16 38t38 15h17v108q0 102 74 176t176 74 177-74 73-176v-108h18q23 0 38-15t16-38v-322q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37z m179 375h285v108q0 59-42 101t-101 41-101-41-41-101v-108z" horiz-adv-x="642.9" />
-<glyph glyph-name="link" unicode="&#x1f517;" d="m9 600q0 67 47 113l82 82q47 46 114 46 67 0 114-47l114-116q47-46 47-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114t-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114z m107 0q0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 10-8 12-12 11-11q18 17 18 41 0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37z m392-393q0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q15 16 15 37 0 23-15 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40z" horiz-adv-x="928.6" />
-<glyph glyph-name="wrench" unicode="&#x1f527;" d="m12-7q0 29 21 51l380 380q22-55 64-97t97-64l-381-381q-21-20-50-20-29 0-51 20l-59 61q-21 20-21 50z m131 36q0-15 10-26t26-10 25 10 10 26-10 25-25 10-26-10-10-25z m286 500q0 103 73 176t177 74q32 0 67-10t60-26q9-6 9-15t-9-16l-163-94v-125l108-60q2 2 44 27t75 45 40 20q8 0 13-5t4-14q0-22-12-60-27-74-92-121t-144-47q-104 0-177 74t-73 176z" horiz-adv-x="928.6" />
-<glyph glyph-name="clock" unicode="&#x1f554;" d="m0 350q0 117 58 215t155 156 216 58 215-58 156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215z m125 0q0-83 41-152t110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41-153-41-110-111-41-152z m161-54v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12z" horiz-adv-x="857.1" />
-<glyph glyph-name="block" unicode="&#x1f6ab;" d="m0 352q0 87 34 167t91 137 137 91 167 34 166-34 137-91 91-137 34-167-34-168-91-137-137-92-166-34-167 34-137 92-91 137-34 168z m125 0q0-91 50-167l421 421q-75 50-167 50-83 0-153-40t-110-112-41-152z m138-256q76-50 166-50 62 0 118 25t96 65 65 97 24 119q0 90-48 164z" horiz-adv-x="857.1" />
+<glyph glyph-name="check" unicode="&#xe81f;" d="m786 331v-177q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-6-5-13-5-2 0-5 1-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v141q0 8 5 13l36 35q6 6 13 6 3 0 7-2 11-4 11-16z m129 273l-455-454q-13-14-31-14t-32 14l-240 240q-14 13-14 31t14 32l61 62q14 13 32 13t32-13l147-147 361 361q13 13 31 13t32-13l62-61q13-14 13-32t-13-32z" horiz-adv-x="928.6" />
+<glyph glyph-name="check-empty" unicode="&#xe820;" d="m625 707h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v464q0 37-26 63t-63 26z m161-89v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
+<glyph glyph-name="cancel-circled" unicode="&#xe821;" d="m641 224q0 14-10 25l-101 101 101 101q10 11 10 25 0 15-10 26l-51 50q-10 11-25 11-15 0-25-11l-101-101-101 101q-11 11-26 11-15 0-25-11l-50-50q-11-11-11-26 0-14 11-25l101-101-101-101q-11-11-11-25 0-15 11-26l50-50q10-11 25-11 15 0 26 11l101 101 101-101q10-11 25-11 15 0 25 11l51 50q10 11 10 26z m216 126q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="cancel" unicode="&#xe822;" d="m724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
+<glyph glyph-name="plus" unicode="&#xe823;" d="m786 439v-107q0-22-16-38t-38-15h-232v-233q0-22-16-37t-38-16h-107q-22 0-38 16t-15 37v233h-232q-23 0-38 15t-16 38v107q0 23 16 38t38 16h232v232q0 22 15 38t38 16h107q23 0 38-16t16-38v-232h232q22 0 38-16t16-38z" horiz-adv-x="785.7" />
+<glyph glyph-name="ok-circled" unicode="&#xe824;" d="m717 440q0 16-11 26l-50 50q-11 11-25 11t-26-11l-227-227-126 126q-11 11-25 11t-26-11l-50-50q-10-10-10-26 0-15 10-25l202-202q10-10 25-10 15 0 25 10l303 303q11 10 11 25z m140-90q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="heart-broken" unicode="&#xe825;" d="m0 530q0 103 73 176t177 73q81 0 147-47l-14-250q0-12 9-20t21-9h10q12 0 18-8t3-20l-57-172q-4-12-2-13t9 8l194 267q7 9 4 16t-16 7h-77q-12 0-17 8t-1 18l82 183q57 32 124 32 103 0 177-73t73-176q0-94-63-166l-343-403q-25-30-62-30t-63 30l-342 403q-64 72-64 166z" horiz-adv-x="937.5" />
+<glyph glyph-name="zoom-in" unicode="&#xe827;" d="m571 404v-36q0-7-5-13t-12-5h-125v-125q0-7-6-13t-12-5h-36q-7 0-13 5t-5 13v125h-125q-7 0-12 5t-6 13v36q0 7 6 12t12 5h125v125q0 8 5 13t13 5h36q7 0 12-5t6-13v-125h125q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
+<glyph glyph-name="zoom-out" unicode="&#xe828;" d="m571 404v-36q0-7-5-13t-12-5h-322q-7 0-12 5t-6 13v36q0 7 6 12t12 5h322q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
+<glyph glyph-name="tasks" unicode="&#xf0ae;" d="m571 64h358v72h-358v-72z m-214 286h572v71h-572v-71z m357 286h215v71h-215v-71z m286-465v-142q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v142q0 15 11 26t25 10h928q15 0 25-10t11-26z m0 286v-143q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25v143q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 286v-143q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v143q0 14 11 25t25 11h928q15 0 25-11t11-25z" horiz-adv-x="1000" />
+<glyph glyph-name="filter" unicode="&#xf0b0;" d="m783 685q9-23-8-39l-275-275v-414q0-23-22-33-7-3-14-3-15 0-25 11l-143 143q-10 10-10 25v271l-275 275q-18 16-8 39 9 22 33 22h714q23 0 33-22z" horiz-adv-x="785.7" />
+<glyph glyph-name="mail-alt" unicode="&#xf0e0;" d="m1000 454v-443q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63v443q25-28 56-49 202-137 278-192 32-24 51-37t53-27 61-13h2q28 0 61 13t53 27 51 37q95 68 278 192 32 22 56 49z m0 164q0-44-27-84t-68-69q-210-146-262-181-5-4-23-17t-30-22-29-18-33-15-27-5h-2q-12 0-27 5t-33 15-29 18-30 22-23 17q-51 35-147 101t-114 80q-35 23-65 64t-31 77q0 43 23 72t66 29h822q36 0 62-26t27-63z" horiz-adv-x="1000" />
+<glyph glyph-name="sitemap" unicode="&#xf0e8;" d="m1000 154v-179q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q22 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107q0 29 21 51t51 21h285v107h-53q-23 0-38 15t-16 38v179q0 22 16 38t38 16h178q23 0 38-16t16-38v-179q0-22-16-38t-38-15h-53v-107h285q29 0 51-21t21-51v-107h53q23 0 38-15t16-38z" horiz-adv-x="1000" />
+<glyph glyph-name="crop" unicode="&#xf125;" d="m311 136h332v332z m-25 25l332 332h-332v-332z m643-43v-107q0-8-5-13t-13-5h-125v-125q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v125h-482q-8 0-13 5t-5 13v482h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125v125q0 7 5 12t13 5h107q8 0 13-5t5-12v-125h475l137 138q5 5 13 5t13-5q5-6 5-13t-5-13l-138-137v-475h125q8 0 13-5t5-13z" horiz-adv-x="928.6" />
+<glyph glyph-name="picture" unicode="&#x1f304;" d="m357 529q0-45-31-76t-76-32-76 32-31 76 31 75 76 32 76-32 31-75z m572-215v-250h-786v107l178 179 90-89 285 285z m53 393h-893q-7 0-12-5t-6-13v-678q0-8 6-13t12-5h893q7 0 13 5t5 13v678q0 7-5 13t-13 5z m89-18v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63v678q0 37 26 63t63 27h893q37 0 63-27t26-63z" horiz-adv-x="1071.4" />
+<glyph glyph-name="user" unicode="&#x1f464;" d="m786 66q0-67-41-106t-108-39h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q5 0 24-12t41-27 60-27 75-12 74 12 61 27 41 27 24 12q34 0 62-11t48-30 34-45 24-55 15-60 8-61 2-58z m-179 498q0-88-63-151t-151-63-152 63-62 151 62 152 152 63 151-63 63-152z" horiz-adv-x="785.7" />
+<glyph glyph-name="shuffle" unicode="&#x1f500;" d="m372 582q-34-52-77-153-12 25-20 41t-23 35-28 32-36 19-45 8h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q139 0 229-125z m628-446q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107q-18 0-48 0t-45-1-41 1-39 3-36 6-35 10-32 16-33 22-31 30-31 39q33 52 76 152 12-25 20-40t23-36 28-31 35-20 46-8h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z m0 500q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-143q-27 0-49-8t-38-25-29-35-25-43q-18-34-43-95-16-37-28-62t-30-59-36-55-41-47-50-38-60-23-71-10h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q27 0 48 9t39 25 28 34 26 43q17 35 43 96 16 36 28 62t30 58 36 56 41 46 50 38 59 24 72 9h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
+<glyph glyph-name="lock" unicode="&#x1f512;" d="m179 421h285v108q0 59-42 101t-101 41-101-41-41-101v-108z m464-53v-322q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v322q0 22 16 38t38 15h17v108q0 102 74 176t176 74 177-74 73-176v-108h18q23 0 38-15t16-38z" horiz-adv-x="642.9" />
+<glyph glyph-name="link" unicode="&#x1f517;" d="m812 171q0 23-15 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q15 16 15 37z m-392 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 10-8 12-12 11-11q18 17 18 41z m500-394q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l114-116q47-46 47-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
+<glyph glyph-name="wrench" unicode="&#x1f527;" d="m214 29q0 14-10 25t-25 10-26-10-10-25 10-26 26-10 25 10 10 26z m360 234l-381-381q-21-20-50-20-29 0-51 20l-59 61q-21 20-21 50 0 29 21 51l380 380q22-55 64-97t97-64z m353 243q0-22-12-59-27-75-92-122t-144-46q-104 0-177 73t-73 177 73 176 177 74q32 0 67-10t60-26q9-6 9-15t-9-16l-163-94v-125l108-60q2 2 44 27t75 45 40 20q8 0 13-5t4-14z" horiz-adv-x="928.6" />
+<glyph glyph-name="clock" unicode="&#x1f554;" d="m500 546v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13z m232-196q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="block" unicode="&#x1f6ab;" d="m732 352q0 90-48 164l-421-420q76-50 166-50 62 0 118 25t96 65 65 97 24 119z m-557-167l421 421q-75 50-167 50-83 0-153-40t-110-112-41-152q0-91 50-167z m682 167q0-88-34-168t-91-137-137-92-166-34-167 34-137 92-91 137-34 168 34 167 91 137 137 91 167 34 166-34 137-91 91-137 34-167z" horiz-adv-x="857.1" />
</font>
</defs>
</svg> \ No newline at end of file
diff --git a/admin/themes/default/fontello/font/fontello.ttf b/admin/themes/default/fontello/font/fontello.ttf
index a73ac9549..2ea76648b 100644
--- a/admin/themes/default/fontello/font/fontello.ttf
+++ b/admin/themes/default/fontello/font/fontello.ttf
Binary files differ
diff --git a/admin/themes/default/fontello/font/fontello.woff b/admin/themes/default/fontello/font/fontello.woff
index 964384e4d..0da2b5825 100644
--- a/admin/themes/default/fontello/font/fontello.woff
+++ b/admin/themes/default/fontello/font/fontello.woff
Binary files differ
diff --git a/admin/themes/default/icon/index.php b/admin/themes/default/icon/index.php
index c8de97f60..0b96c3efa 100644
--- a/admin/themes/default/icon/index.php
+++ b/admin/themes/default/icon/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/themes/default/index.php b/admin/themes/default/index.php
index c8de97f60..0b96c3efa 100644
--- a/admin/themes/default/index.php
+++ b/admin/themes/default/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/themes/default/template/admin.tpl b/admin/themes/default/template/admin.tpl
index 67e0832bb..318075406 100644
--- a/admin/themes/default/template/admin.tpl
+++ b/admin/themes/default/template/admin.tpl
@@ -42,6 +42,9 @@ $('#menubar').lightAccordion({
{if $NB_PHOTOS_IN_CADDIE > 0}
<li><a href="{$U_CADDIE}"><i class="icon-flag"></i>{'Caddie'|@translate}<span class="adminMenubarCounter">{$NB_PHOTOS_IN_CADDIE}</span></a></li>
{/if}
+{if $NB_ORPHANS > 0}
+ <li><a href="{$U_ORPHANS}"><i class="icon-heart-broken"></i>{'Orphans'|@translate}<span class="adminMenubarCounter">{$NB_ORPHANS}</span></a></li>
+{/if}
</ul>
</dd>
</dl>
diff --git a/admin/themes/default/template/album_notification.tpl b/admin/themes/default/template/album_notification.tpl
index 32aa8e414..1b3aa73bd 100644
--- a/admin/themes/default/template/album_notification.tpl
+++ b/admin/themes/default/template/album_notification.tpl
@@ -1,3 +1,59 @@
+{combine_script id='jquery.selectize' load='footer' path='themes/default/js/plugins/selectize.min.js'}
+{combine_css id='jquery.selectize' path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"}
+
+{footer_script}
+jQuery(document).ready(function() {
+ jQuery("select[name=who]").change(function () {
+ checkWhoOptions();
+ });
+
+ checkWhoOptions();
+
+ function checkWhoOptions() {
+ var option = jQuery("select[name=who] option:selected").val();
+ jQuery(".who_option").hide();
+ jQuery(".who_" + option).show();
+ }
+
+ jQuery(".who_option select").selectize({
+ plugins: ['remove_button']
+ });
+
+ jQuery("form#categoryNotify").submit(function(e) {
+ var who_selected = false;
+ var who_option = jQuery("select[name=who] option:selected").val();
+
+ if (jQuery(".who_" + who_option + " select").length > 0) {
+ if (jQuery(".who_" + who_option + " select option:selected").length > 0) {
+ who_selected = true;
+ }
+ }
+
+ if (!who_selected) {
+ jQuery(".actionButtons .errors").show();
+ e.preventDefault();
+ }
+ else {
+ jQuery(".actionButtons .errors").hide();
+ console.log("form can be submited");
+ }
+ });
+});
+{/footer_script}
+
+{html_style}
+.who_option {
+ margin-top:5px;
+}
+
+span.errors {
+ background-image:none;
+ padding:2px 5px;
+ margin:0;
+ border-radius:5px;
+}
+{/html_style}
+
<div class="titrePage">
<h2><span style="letter-spacing:0">{$CATEGORIES_NAV}</span> &#8250; {'Edit album'|@translate} {$TABSHEET_TITLE}</h2>
</div>
@@ -5,36 +61,58 @@
<form action="{$F_ACTION}" method="post" id="categoryNotify">
<fieldset id="emailCatInfo">
- <legend>{'Send an information email to group members'|@translate}</legend>
-
-{if isset($group_mail_options)}
+ <legend>{'Send mail to users'|@translate}</legend>
<p>
- <strong>{'Group'|@translate}</strong>
- <br>
- <select name="group">
- {html_options options=$group_mail_options}
+ <strong>{'Recipients'|@translate}</strong>
+ <select name="who">
+ <option value="group">{'Group'|translate}</option>
+ <option value="users">{'Users'|translate}</option>
</select>
</p>
+ <p class="who_option who_group">
+{if isset($group_mail_options)}
+ <select name="group" placeholder="{'Type in a search term'|translate}" style="width:524px;">
+ {html_options options=$group_mail_options}
+ </select>
+{elseif isset($no_group_in_gallery) and $no_group_in_gallery}
+ {'There is no group in this gallery.'|@translate} <a href="admin.php?page=group_list" class="externalLink">{'Group management'|@translate}</a>
+{else}
+ {'No group is permitted to see this private album'|@translate}.
+ <a href="{$permission_url}" class="externalLink">{'Permission management'|@translate}</a>
+{/if}
+ </p>
+
+ <p class="who_option who_users">
+{if isset($user_options)}
+ <select name="users[]" multiple placeholder="{'Type in a search term'|translate}" style="width:524px;">
+ {html_options options=$user_options selected=$user_options_selected}
+ </select>
+{else}
+ {'No user is permitted to see this private album'|@translate}.
+ <a href="{$permission_url}" class="externalLink">{'Permission management'|@translate}</a>
+{/if}
+ </p>
+
<p>
<strong>{'Complementary mail content'|@translate}</strong>
<br>
<textarea cols="50" rows="5" name="mail_content" id="mail_content" class="description">{$MAIL_CONTENT}</textarea>
</p>
+{if isset($auth_key_duration)}
<p>
- <input class="submit" type="submit" value="{'Send'|@translate}" name="submitEmail">
+ {'Each email sent will contain its own automatic authentication key on links, valid for %s.'|translate:$auth_key_duration}
+ <br>{'For security reason, authentication keys do not work for administrators.'|translate}
</p>
+{/if}
-{elseif isset($no_group_in_gallery) and $no_group_in_gallery}
- <p>{'There is no group in this gallery.'|@translate} <a href="admin.php?page=group_list" class="externalLink">{'Group management'|@translate}</a></p>
-{else}
- <p>
- {'No group is permitted to see this private album'|@translate}.
- <a href="{$permission_url}" class="externalLink">{'Permission management'|@translate}</a>
+ <p class="actionButtons">
+ <input class="submit" type="submit" value="{'Send'|@translate}" name="submitEmail">
+ <span class="errors" style="display:none">&#x2718; {'No recipient selected'|translate}</span>
</p>
-{/if}
+
</fieldset>
</form>
diff --git a/admin/themes/default/template/batch_manager_global.tpl b/admin/themes/default/template/batch_manager_global.tpl
index 46262c0ff..c3be514b4 100644
--- a/admin/themes/default/template/batch_manager_global.tpl
+++ b/admin/themes/default/template/batch_manager_global.tpl
@@ -268,6 +268,7 @@ $(document).ready(function() {
jQuery("select[name=filter_prefilter]").change(function() {
jQuery("#empty_caddie").toggle(jQuery(this).val() == "caddie");
jQuery("#duplicates_options").toggle(jQuery(this).val() == "duplicates");
+ jQuery("#delete_orphans").toggle(jQuery(this).val() == "no_album");
});
});
@@ -329,10 +330,15 @@ var sliders = {
{'Predefined filter'|@translate}
<select name="filter_prefilter">
{foreach from=$prefilters item=prefilter}
- <option value="{$prefilter.ID}" {if isset($filter.prefilter) && $filter.prefilter eq $prefilter.ID}selected="selected"{/if}>{$prefilter.NAME}</option>
+ {assign 'optionClass' ''}
+ {if $prefilter.ID eq 'no_album'}{assign 'optionClass' 'icon-heart-broken'}{/if}
+ {if $prefilter.ID eq 'caddie'}{assign 'optionClass' 'icon-flag'}{/if}
+
+ <option value="{$prefilter.ID}" class="{$optionClass}" {if isset($filter.prefilter) && $filter.prefilter eq $prefilter.ID}selected="selected"{/if}>{$prefilter.NAME}</option>
{/foreach}
</select>
<a id="empty_caddie" href="admin.php?page=batch_manager&amp;action=empty_caddie" style="{if !isset($filter.prefilter) or $filter.prefilter ne 'caddie'}display:none{/if}">{'Empty caddie'|translate}</a>
+ <a id="delete_orphans" href="admin.php?page=batch_manager&amp;action=delete_orphans" style="{if !isset($filter.prefilter) or $filter.prefilter ne 'no_album'}display:none{/if}">{'Delete %d orphan photos'|translate:$NB_ORPHANS}</a>
<span id="duplicates_options" style="{if !isset($filter.prefilter) or $filter.prefilter ne 'duplicates'}display:none{/if}">
{'based on'|translate}
diff --git a/admin/themes/default/template/cat_modify.tpl b/admin/themes/default/template/cat_modify.tpl
index d71ad0528..013cf9553 100644
--- a/admin/themes/default/template/cat_modify.tpl
+++ b/admin/themes/default/template/cat_modify.tpl
@@ -28,6 +28,69 @@ categoriesCache.selectize(jQuery('[data-selectize=categories]'), {
return filtered;
}
});
+
+jQuery(document).ready(function() {
+ jQuery(document).on('click', '.refreshRepresentative', function(e) {
+ var $this = jQuery(this);
+ var method = 'pwg.categories.refreshRepresentative';
+
+ jQuery.ajax({
+ url: "ws.php?format=json&method="+method,
+ type:"POST",
+ data: {
+ category_id: $this.data("category_id")
+ },
+ success:function(data) {
+ var data = jQuery.parseJSON(data);
+ if (data.stat == 'ok') {
+ jQuery(".albumThumbnailImage")
+ .attr('href', data.result.url)
+ .find("img").attr('src', data.result.src)
+ .end().show();
+
+ jQuery(".albumThumbnailRandom").hide();
+ }
+ else {
+ alert("error on "+method);
+ }
+ },
+ error:function(XMLHttpRequest, textStatus, errorThrows) {
+ alert("serious error on "+method);
+ }
+ });
+
+ e.preventDefault();
+ });
+
+ jQuery(document).on('click', '.deleteRepresentative', function(e) {
+ var $this = jQuery(this);
+ var method = 'pwg.categories.deleteRepresentative';
+
+ jQuery.ajax({
+ url: "ws.php?format=json&method="+method,
+ type:"POST",
+ data: {
+ category_id: $this.data("category_id")
+ },
+ success:function(data) {
+ var data = jQuery.parseJSON(data);
+ if (data.stat == 'ok') {
+ jQuery(".albumThumbnailImage").hide();
+ jQuery(".albumThumbnailRandom").show();
+ }
+ else {
+ alert("error on "+method);
+ }
+ },
+ error:function(XMLHttpRequest, textStatus, errorThrows) {
+ alert("serious error on "+method);
+ }
+ });
+
+ e.preventDefault();
+ });
+});
+
{/footer_script}
@@ -35,7 +98,7 @@ categoriesCache.selectize(jQuery('[data-selectize=categories]'), {
<h2><span style="letter-spacing:0">{$CATEGORIES_NAV}</span> &#8250; {'Edit album'|@translate} {$TABSHEET_TITLE}</h2>
</div>
-<form action="{$F_ACTION}" method="POST" id="catModify">
+<div id="catModify">
<fieldset>
<legend>{'Informations'|@translate}</legend>
@@ -44,19 +107,18 @@ categoriesCache.selectize(jQuery('[data-selectize=categories]'), {
<tr>
<td id="albumThumbnail">
{if isset($representant) }
- {if isset($representant.picture) }
- <a href="{$representant.picture.URL}"><img src="{$representant.picture.SRC}" alt=""></a>
- {else}
- <img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/category_representant_random.png" alt="{'Random photo'|@translate}">
- {/if}
+ <a class="albumThumbnailImage" style="{if !isset($representant.picture)}display:none{/if}" href="{$representant.picture.url}"><img src="{$representant.picture.src}"></a>
+ <img class="albumThumbnailRandom" style="{if isset($representant.picture)}display:none{/if}" src="{$ROOT_URL}{$themeconf.admin_icon_dir}/category_representant_random.png" alt="{'Random photo'|@translate}">
+<p class="albumThumbnailActions">
{if $representant.ALLOW_SET_RANDOM }
- <p style="text-align:center;"><input class="submit" type="submit" name="set_random_representant" value="{'Refresh'|@translate}" title="{'Find a new representant by random'|@translate}"></p>
+ <a href="#refresh" data-category_id="{$CAT_ID}" class="refreshRepresentative" title="{'Find a new representant by random'|@translate}">{'Refresh'|@translate}</a>
{/if}
{if isset($representant.ALLOW_DELETE) }
- <p><input class="submit" type="submit" name="delete_representant" value="{'Delete Representant'|@translate}"></p>
+ | <a href="#delete" data-category_id="{$CAT_ID}" class="deleteRepresentative" title="{'Delete Representant'|@translate}">{'Delete'|translate}</a>
{/if}
+</p>
{/if}
</td>
@@ -90,6 +152,7 @@ categoriesCache.selectize(jQuery('[data-selectize=categories]'), {
</fieldset>
+<form action="{$F_ACTION}" method="POST">
<fieldset>
<legend>{'Properties'|@translate}</legend>
<p>
@@ -137,3 +200,4 @@ categoriesCache.selectize(jQuery('[data-selectize=categories]'), {
</fieldset>
</form>
+</div> {* #catModify *} \ No newline at end of file
diff --git a/admin/themes/default/template/configuration_watermark.tpl b/admin/themes/default/template/configuration_watermark.tpl
index 11343057d..24e2a346e 100644
--- a/admin/themes/default/template/configuration_watermark.tpl
+++ b/admin/themes/default/template/configuration_watermark.tpl
@@ -111,6 +111,13 @@
<input size="3" maxlength="3" type="text" name="w[xrepeat]" value="{$watermark.xrepeat}"{if isset($ferrors.watermark.xrepeat)} class="dError"{/if}>
{if isset($ferrors.watermark.xrepeat)}<span class="dErrorDesc" title="{$ferrors.watermark.xrepeat}">!</span>{/if}
</label>
+
+ <br>
+ <label>{'Y Repeat'|translate}
+ <input size="3" maxlength="3" type="text" name="w[yrepeat]" value="{$watermark.yrepeat}"{if isset($ferrors.watermark.yrepeat)} class="dError"{/if}>
+ {if isset($ferrors.watermark.yrepeat)}<span class="dErrorDesc" title="{$ferrors.watermark.yrepeat}">!</span>{/if}
+ </label>
+
</div>
</li>
diff --git a/admin/themes/default/template/notification_by_mail.tpl b/admin/themes/default/template/notification_by_mail.tpl
index 0be49bdd1..95506616c 100644
--- a/admin/themes/default/template/notification_by_mail.tpl
+++ b/admin/themes/default/template/notification_by_mail.tpl
@@ -127,6 +127,16 @@ jQuery(document).ready(function(){
</table>
</fieldset>
+{if isset($auth_key_duration)}
+ <fieldset>
+ <legend>{'Informations'|@translate}</legend>
+ <p>
+ {'Each email sent will contain its own automatic authentication key on links, valid for %s.'|translate:$auth_key_duration}
+ <br>{'For security reason, authentication keys do not work for administrators.'|translate}
+ </p>
+ </fieldset>
+{/if}
+
<p>
<input type="submit" value="{'Send'|@translate}" name="send_submit">
</p>
diff --git a/admin/themes/default/template/photos_add_direct.tpl b/admin/themes/default/template/photos_add_direct.tpl
index ad9e80b07..71663fc20 100644
--- a/admin/themes/default/template/photos_add_direct.tpl
+++ b/admin/themes/default/template/photos_add_direct.tpl
@@ -86,7 +86,7 @@ jQuery(document).ready(function(){
// url : '../upload.php',
url : 'ws.php?method=pwg.images.upload&format=json',
- chunk_size: '500kb',
+ chunk_size: '{/literal}{$chunk_size}{literal}kb',
filters : {
// Maximum file size
diff --git a/admin/themes/default/template/picture_modify.tpl b/admin/themes/default/template/picture_modify.tpl
index aeba2dd6f..71b3d2ba4 100644
--- a/admin/themes/default/template/picture_modify.tpl
+++ b/admin/themes/default/template/picture_modify.tpl
@@ -63,6 +63,7 @@ jQuery("a.preview-box").colorbox({
<li>{$INTRO.add_date}</li>
<li>{$INTRO.added_by}</li>
<li>{$INTRO.size}</li>
+ <li>{$INTRO.formats}</li>
<li>{$INTRO.stats}</li>
<li>{$INTRO.id}</li>
</ul>
diff --git a/admin/themes/default/template/user_list.tpl b/admin/themes/default/template/user_list.tpl
index 39e3318b9..54b8b936e 100644
--- a/admin/themes/default/template/user_list.tpl
+++ b/admin/themes/default/template/user_list.tpl
@@ -1,3 +1,4 @@
+{include file='include/colorbox.inc.tpl'}
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
{combine_script id='jquery.dataTables' load='footer' path='themes/default/js/plugins/jquery.dataTables.js'}
@@ -258,11 +259,6 @@ jQuery(document).ready(function() {
user.lastVisit_string = sprintf(lastVisit_pattern, user.last_visit_string, user.last_visit_since);
}
- user.updateString = sprintf(
- "{/literal}{'User %s updated'|translate|escape:javascript}{literal}",
- user.username
- );
-
user.email = user.email || '';
user.statusLabel = statusLabels[user.status];
@@ -274,7 +270,7 @@ jQuery(document).ready(function() {
jQuery("script.userDetails").html()
);
- jQuery("#user"+userId).append(template(user));
+ jQuery("#user"+userId).html(template(user));
/* groups select */
jQuery('[data-selectize=groups]').selectize({
@@ -339,10 +335,19 @@ jQuery(document).ready(function() {
console.log('technical error loading user details');
}
});
-
- return '<div id="user'+userId+'" class="userProperties"><img class="loading" src="themes/default/images/ajax-loader-small.gif"></div>';
+
+ jQuery(".user_form_popin")
+ .attr("id", "user"+userId)
+ .html('<div class="popinWait"><span><img class="loading" src="themes/default/images/ajax-loader-small.gif"> {/literal}{'Loading...'|translate|escape:'javascript'}{literal}</span></div>')
+ ;
}
+jQuery(document).on('click', '.close-user-details', function(e) {
+ jQuery('.user_form_popin').colorbox.close();
+ e.preventDefault();
+});
+
+
/* change password */
jQuery(document).on('click', '.changePasswordOpen', function() {
var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val();
@@ -474,7 +479,7 @@ jQuery(document).ready(function() {
jQuery('#user'+userId+' .userDelete .loading').show();
},
success:function(data) {
- oTable.fnDraw();
+ jQuery('.user_form_popin').colorbox.close();
jQuery('#showAddUser .infos').html('&#x2714; User '+username+' deleted').show();
},
error:function(XMLHttpRequest, textStatus, errorThrows) {
@@ -520,8 +525,25 @@ jQuery(document).ready(function() {
},
success:function(data) {
jQuery('#user'+userId+' .submitWait').hide();
- jQuery('#user'+userId+' input[type=submit]').hide();
- jQuery('#user'+userId+' .propertiesUpdateDone').show();
+
+ var html_message;
+
+ var data = jQuery.parseJSON(data);
+ if (data.stat == 'ok') {
+ var message = sprintf(
+ "{/literal}{'User %s updated'|translate|escape:javascript}{literal}",
+ data.result.users[0].username
+ );
+
+ html_message = '<span class="infos">&#x2714; '+message+'</span>';
+ }
+ else {
+ html_message = '<span class="errors">&#x2718; '+data.message+'</span>';
+ }
+
+ jQuery('#user'+userId+' .propertiesUpdateDone')
+ .html(html_message)
+ .show();
},
error:function(XMLHttpRequest, textStatus, errorThrows) {
jQuery('#user'+userId+' .submitWait').hide();
@@ -537,28 +559,17 @@ jQuery(document).ready(function() {
*/
jQuery(document).on('click', '#userList tbody td .openUserDetails', function() {
var nTr = this.parentNode.parentNode;
- if (jQuery(this).hasClass('icon-cancel-circled')) {
- /* This row is already open - close it */
- jQuery(this)
- .removeClass('icon-cancel-circled')
- .addClass('icon-pencil')
- .attr('title', "{/literal}{'Open user details'|translate|escape:'javascript'}{literal}")
- .html("{/literal}{'edit'|translate|escape:'javascript'}{literal}")
- ;
-
- oTable.fnClose( nTr );
- }
- else {
- /* Open this row */
- jQuery(this)
- .removeClass('icon-pencil')
- .addClass('icon-cancel-circled')
- .attr('title', "{/literal}{'Close user details'|translate|escape:'javascript'}{literal}")
- .html("{/literal}{'close'|translate|escape:'javascript'}{literal}")
- ;
-
- oTable.fnOpen( nTr, fnFormatDetails(oTable, nTr), 'details' );
- }
+
+ jQuery.colorbox({
+ inline:true,
+ title:"{/literal}{'Edit user'|translate}{literal}",
+ href:".user_form_popin",
+ onClosed: function() {
+ oTable.fnDraw();
+ }
+ });
+
+ fnFormatDetails(oTable, nTr);
});
@@ -1151,9 +1162,16 @@ span.infos, span.errors {background-image:none; padding:2px 5px; margin:0;border
<div style="clear:both"></div>
</div> {* userPropertiesContainer *}
- <span class="infos propertiesUpdateDone" style="display:none">&#x2714; <%- user.updateString %></span>
-
- <input type="submit" value="{'Update user'|translate|escape:html}" style="display:none;" data-user_id="<%- user.id %>">
+ <input type="submit" value="{'Update user'|translate|escape:html}" data-user_id="<%- user.id %>">
<img class="submitWait" src="themes/default/images/ajax-loader-small.gif" style="display:none">
+ <a href="#close" class="icon-cancel-circled close-user-details" title="{'Close user details'|translate}">{'close'|translate}</a>
+ <span class="propertiesUpdateDone" style="display:none">
+ <span class="infos">&#x2714; ...</span>
+ <span class="errors">&#x2718; ...</span>
+ </span>
</form>
</script>
+
+<div style="display:none">
+ <div class="user_form_popin userProperties"></div>
+</div> \ No newline at end of file
diff --git a/admin/themes/default/theme.css b/admin/themes/default/theme.css
index 4a151b9a4..0aa0dba1a 100644
--- a/admin/themes/default/theme.css
+++ b/admin/themes/default/theme.css
@@ -213,7 +213,7 @@ LI.menuLi {
}
/* */
-FORM#catModify TABLE { width: auto; }
+#catModify TABLE { width: auto; }
#catModify p {
line-height: 20px;
@@ -221,6 +221,11 @@ FORM#catModify TABLE { width: auto; }
text-align: left;
}
+#catModify p.albumThumbnailActions {
+ text-align:center;
+ white-space:nowrap;
+}
+
FIELDSET.elementEdit .thumb {
display: block;
float: right;
@@ -1223,6 +1228,21 @@ a.group_perm {
.userProperty {width:340px;float:left;margin-bottom:15px;}
.userActions {float:right;text-align:right;}
+.user_form_popin {
+ width:750px;
+ height:430px;
+ padding:20px;
+}
+
+.userProperties form {
+ text-align:left;
+}
+
+.popinWait {
+ padding-top:200px;
+}
+
+
.preview-box.icon-zoom-in {
display:block;
position:relative;
diff --git a/admin/themes/roma/index.php b/admin/themes/roma/index.php
index c8de97f60..0b96c3efa 100644
--- a/admin/themes/roma/index.php
+++ b/admin/themes/roma/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/themes_installed.php b/admin/themes_installed.php
index eb16dc144..f798f21f1 100644
--- a/admin/themes_installed.php
+++ b/admin/themes_installed.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/themes_new.php b/admin/themes_new.php
index 803327e8d..e1360792b 100644
--- a/admin/themes_new.php
+++ b/admin/themes_new.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/updates.php b/admin/updates.php
index bfd6b6a1f..a38a0e538 100644
--- a/admin/updates.php
+++ b/admin/updates.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/updates_ext.php b/admin/updates_ext.php
index 72b2e13a7..c8586f08d 100644
--- a/admin/updates_ext.php
+++ b/admin/updates_ext.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/updates_pwg.php b/admin/updates_pwg.php
index 4619ad3bd..023ff8e48 100644
--- a/admin/updates_pwg.php
+++ b/admin/updates_pwg.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/user_list.php b/admin/user_list.php
index 83815f66f..183f771f7 100644
--- a/admin/user_list.php
+++ b/admin/user_list.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/user_list_backend.php b/admin/user_list_backend.php
index 1edaa1369..290873c87 100644
--- a/admin/user_list_backend.php
+++ b/admin/user_list_backend.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/admin/user_perm.php b/admin/user_perm.php
index e40c064c2..68b8c60c5 100644
--- a/admin/user_perm.php
+++ b/admin/user_perm.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/comments.php b/comments.php
index c3c470256..7b05249e8 100644
--- a/comments.php
+++ b/comments.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/doc/index.php b/doc/index.php
index c8de97f60..0b96c3efa 100644
--- a/doc/index.php
+++ b/doc/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/feed.php b/feed.php
index 24e9f6846..6a7a80855 100644
--- a/feed.php
+++ b/feed.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/galleries/index.php b/galleries/index.php
index c8de97f60..0b96c3efa 100644
--- a/galleries/index.php
+++ b/galleries/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/i.php b/i.php
index c9a807aac..6be12888b 100644
--- a/i.php
+++ b/i.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// +-----------------------------------------------------------------------+
// | 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 |
@@ -313,6 +313,8 @@ function try_switch_source(DerivativeParams $params, $original_mtime)
}
else
{
+ if ($use_watermark && $candidate->use_watermark)
+ continue; //a square that requires watermark should not be generated from a larger derivative with watermark, because if the watermark is not centered on the large image, it will be cropped.
if ($candidate->sizing->max_crop!=0)
continue; // this could be optimized
if ($candidate_size[0] < $params->sizing->min_size[0] || $candidate_size[1] < $params->sizing->min_size[1] )
@@ -573,17 +575,23 @@ if ($params->will_watermark($d_size))
if ($image->compose($wm_image, $x, $y, $wm->opacity))
{
$changes++;
- if ($wm->xrepeat)
+ if ($wm->xrepeat || $wm->yrepeat)
{
- // todo
- $pad = $wm_size[0] + max(30, round($wm_size[0]/4));
+ $xpad = $wm_size[0] + max(30, round($wm_size[0]/4));
+ $ypad = $wm_size[1] + max(30, round($wm_size[1]/4));
+
for($i=-$wm->xrepeat; $i<=$wm->xrepeat; $i++)
{
- if (!$i) continue;
- $x2 = $x + $i * $pad;
- if ($x2>=0 && $x2+$wm_size[0]<$d_size[0])
- if (!$image->compose($wm_image, $x2, $y, $wm->opacity))
- break;
+ for($j=-$wm->yrepeat; $j<=$wm->yrepeat; $j++)
+ {
+ if (!$i && !$j) continue;
+ $x2 = $x + $i * $xpad;
+ $y2 = $y + $j * $ypad;
+ if ($x2>=0 && $x2+$wm_size[0]<$d_size[0] &&
+ $y2>=0 && $y2+$wm_size[1]<$d_size[1] )
+ if (!$image->compose($wm_image, $x2, $y2, $wm->opacity))
+ break;
+ }
}
}
}
diff --git a/identification.php b/identification.php
index fe8a80263..be22eb571 100644
--- a/identification.php
+++ b/identification.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/Logger.class.php b/include/Logger.class.php
index 90fa9e491..6b4172faa 100644
--- a/include/Logger.class.php
+++ b/include/Logger.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2015 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/block.class.php b/include/block.class.php
index cce92ec4e..ea11cb82e 100644
--- a/include/block.class.php
+++ b/include/block.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// +-----------------------------------------------------------------------+
// | 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 |
diff --git a/include/cache.class.php b/include/cache.class.php
index 5b97cb1f1..4a1a4aa60 100644
--- a/include/cache.class.php
+++ b/include/cache.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/calendar_base.class.php b/include/calendar_base.class.php
index f48fae1e3..020265d17 100644
--- a/include/calendar_base.class.php
+++ b/include/calendar_base.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -360,7 +360,7 @@ GROUP BY period';
if ( !empty($tpl_var) )
{
$existing = $template->smarty->getVariable('chronology_navigation_bars');
- if (! ($existing instanceof Undefined_Smarty_Variable))
+ if (! ($existing instanceof Smarty_Undefined_Variable))
{
$existing->value[ sizeof($existing->value)-1 ] =
array_merge( $existing->value[ sizeof($existing->value)-1 ], $tpl_var);
diff --git a/include/calendar_monthly.class.php b/include/calendar_monthly.class.php
index 9ab38aee7..f82849ce1 100644
--- a/include/calendar_monthly.class.php
+++ b/include/calendar_monthly.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/calendar_weekly.class.php b/include/calendar_weekly.class.php
index 346f658d4..91ae9b7d4 100644
--- a/include/calendar_weekly.class.php
+++ b/include/calendar_weekly.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/category_cats.inc.php b/include/category_cats.inc.php
index 4cab63d27..930594510 100644
--- a/include/category_cats.inc.php
+++ b/include/category_cats.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/category_default.inc.php b/include/category_default.inc.php
index 6106ccb55..6962fd08a 100644
--- a/include/category_default.inc.php
+++ b/include/category_default.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/common.inc.php b/include/common.inc.php
index 8fab02ab2..a01fced8a 100644
--- a/include/common.inc.php
+++ b/include/common.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -26,7 +26,7 @@ defined('PHPWG_ROOT_PATH') or trigger_error('Hacking attempt!', E_USER_ERROR);
// determine the initial instant to indicate the generation time of this page
$t2 = microtime(true);
-@set_magic_quotes_runtime(0); // Disable magic_quotes_runtime
+// @set_magic_quotes_runtime(0); // Disable magic_quotes_runtime
//
// addslashes to vars if magic_quotes_gpc is off this is a security
@@ -201,6 +201,16 @@ if (is_a_guest())
$user['username'] = l10n('guest');
}
+// in case an auth key was provided and is no longer valid, we must wait to
+// be here, with language loaded, to prepare the message
+if (isset($page['auth_key_invalid']) and $page['auth_key_invalid'])
+{
+ $page['errors'][] =
+ l10n('Your authentication key is no longer valid.')
+ .sprintf(' <a href="%s">%s</a>', get_root_url().'identification.php', l10n('Login'))
+ ;
+}
+
// template instance
if (defined('IN_ADMIN') and IN_ADMIN )
{// Admin template
diff --git a/include/config_default.inc.php b/include/config_default.inc.php
index 09d11132e..f38942d15 100644
--- a/include/config_default.inc.php
+++ b/include/config_default.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -63,6 +63,13 @@ $conf['file_ext'] = array_merge(
array('tiff', 'tif', 'mpg','zip','avi','mp3','ogg','pdf')
);
+// enable_formats: should Piwigo search for multiple formats?
+$conf['enable_formats'] = false;
+
+// format_ext : file extensions for formats, ie additional versions of a
+// photo (or nay other file). Formats are in sub-directory pwg_format.
+$conf['format_ext'] = array('cr2', 'tif', 'tiff', 'nef', 'dng', 'ai', 'psd');
+
// top_number : number of element to display for "best rated" and "most
// visited" categories
$conf['top_number'] = 15;
@@ -639,6 +646,10 @@ $conf['recent_post_dates'] = array(
// the author shown in the RSS feed <author> element
$conf['rss_feed_author'] = 'Piwigo notifier';
+// how long does the authentication key stays valid, in seconds. 3 days by
+// default. 0 to disable.
+$conf['auth_key_duration'] = 3*24*60*60;
+
// +-----------------------------------------------------------------------+
// | Set admin layout |
// +-----------------------------------------------------------------------+
@@ -800,6 +811,10 @@ $conf['tiff_representative_ext'] = 'png';
// (TIFF, videos, PDF)
$conf['upload_form_all_types'] = false;
+// Size of chunks, in kilobytes. Fast connections will have better
+// performances with high values, such as 5000.
+$conf['upload_form_chunk_size'] = 500;
+
// If we try to generate a pwg_representative for a video we use ffmpeg. If
// "ffmpeg" is not visible by the web user, you can define the full path of
// the directory where "ffmpeg" executable is.
@@ -817,4 +832,4 @@ $conf['log_level'] = 'DEBUG';
// Keep logs file during X days
$conf['log_archive_days'] = 30;
-?> \ No newline at end of file
+?>
diff --git a/include/constants.php b/include/constants.php
index 1a7201416..8363f0d69 100644
--- a/include/constants.php
+++ b/include/constants.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -22,7 +22,7 @@
// +-----------------------------------------------------------------------+
// Default settings
-define('PHPWG_VERSION', '2.7.0');
+define('PHPWG_VERSION', '2.8.0RC1');
define('PHPWG_DEFAULT_LANGUAGE', 'en_UK');
define('PHPWG_DEFAULT_TEMPLATE', 'elegant');
@@ -81,6 +81,8 @@ if (!defined('USER_FEED_TABLE'))
define('USER_FEED_TABLE', $prefixeTable.'user_feed');
if (!defined('RATE_TABLE'))
define('RATE_TABLE', $prefixeTable.'rate');
+if (!defined('USER_AUTH_KEYS_TABLE'))
+ define('USER_AUTH_KEYS_TABLE', $prefixeTable.'user_auth_keys');
if (!defined('USER_CACHE_TABLE'))
define('USER_CACHE_TABLE', $prefixeTable.'user_cache');
if (!defined('USER_CACHE_CATEGORIES_TABLE'))
@@ -105,5 +107,7 @@ if (!defined('THEMES_TABLE'))
define('THEMES_TABLE', $prefixeTable.'themes');
if (!defined('LANGUAGES_TABLE'))
define('LANGUAGES_TABLE', $prefixeTable.'languages');
+if (!defined('IMAGE_FORMAT_TABLE'))
+ define('IMAGE_FORMAT_TABLE', $prefixeTable.'image_format');
?>
diff --git a/include/dblayer/functions_mysql.inc.php b/include/dblayer/functions_mysql.inc.php
index a1853b223..6a173686d 100644
--- a/include/dblayer/functions_mysql.inc.php
+++ b/include/dblayer/functions_mysql.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -53,7 +53,7 @@ function pwg_db_check_charset()
{
$db_charset = DB_CHARSET;
}
- pwg_query('SET NAMES "'.$db_charset.'"');
+ mysql_set_charset($db_charset);
}
function pwg_db_check_version()
diff --git a/include/dblayer/functions_mysqli.inc.php b/include/dblayer/functions_mysqli.inc.php
index 390cf2e06..5b40cfe5b 100644
--- a/include/dblayer/functions_mysqli.inc.php
+++ b/include/dblayer/functions_mysqli.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -80,12 +80,14 @@ function pwg_db_connect($host, $user, $password, $database)
*/
function pwg_db_check_charset()
{
+ global $mysqli;
+
$db_charset = 'utf8';
if (defined('DB_CHARSET') and DB_CHARSET != '')
{
$db_charset = DB_CHARSET;
}
- pwg_query('SET NAMES "'.$db_charset.'"');
+ $mysqli->set_charset($db_charset);
}
/**
@@ -901,4 +903,4 @@ function query2array($query, $key_name=null, $value_name=null)
return $data;
}
-?> \ No newline at end of file
+?>
diff --git a/include/derivative.inc.php b/include/derivative.inc.php
index a6e0642ff..8b65e8ad1 100644
--- a/include/derivative.inc.php
+++ b/include/derivative.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// +-----------------------------------------------------------------------+
// | 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 |
diff --git a/include/derivative_params.inc.php b/include/derivative_params.inc.php
index cb1f22e5e..2fcd40467 100644
--- a/include/derivative_params.inc.php
+++ b/include/derivative_params.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// +-----------------------------------------------------------------------+
// | 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 |
diff --git a/include/derivative_std_params.inc.php b/include/derivative_std_params.inc.php
index a0f1edb76..9fed9c15f 100644
--- a/include/derivative_std_params.inc.php
+++ b/include/derivative_std_params.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// +-----------------------------------------------------------------------+
// | 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 |
@@ -52,6 +52,8 @@ final class WatermarkParams
/** @var int */
public $xrepeat = 0;
/** @var int */
+ public $yrepeat = 0;
+ /** @var int */
public $opacity = 100;
}
diff --git a/include/filter.inc.php b/include/filter.inc.php
index 05665a036..2d0523897 100644
--- a/include/filter.inc.php
+++ b/include/filter.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/functions.inc.php b/include/functions.inc.php
index a9ae35baf..0f26fde77 100644
--- a/include/functions.inc.php
+++ b/include/functions.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -407,7 +407,7 @@ SELECT id, name
* @param string $image_type
* @return bool
*/
-function pwg_log($image_id = null, $image_type = null)
+function pwg_log($image_id = null, $image_type = null, $format_id = null)
{
global $conf, $user, $page;
@@ -445,6 +445,8 @@ INSERT INTO '.HISTORY_TABLE.'
category_id,
image_id,
image_type,
+ format_id,
+ auth_key_id,
tag_ids
)
VALUES
@@ -457,6 +459,8 @@ INSERT INTO '.HISTORY_TABLE.'
'.(isset($page['category']['id']) ? $page['category']['id'] : 'NULL').',
'.(isset($image_id) ? $image_id : 'NULL').',
'.(isset($image_type) ? "'".$image_type."'" : 'NULL').',
+ '.(isset($format_id) ? $format_id : 'NULL').',
+ '.(isset($page['auth_key_id']) ? $page['auth_key_id'] : 'NULL').',
'.(isset($tags_string) ? "'".$tags_string."'" : 'NULL').'
)
;';
@@ -953,6 +957,21 @@ function original_to_representative($path, $representative_ext)
}
/**
+ * Transforms an original path to its format
+ *
+ * @param string $path
+ * @param string $format_ext
+ * @return string
+ */
+function original_to_format($path, $format_ext)
+{
+ $pos = strrpos($path, '/');
+ $path = substr_replace($path, 'pwg_format/', $pos+1, 0);
+ $pos = strrpos($path, '.');
+ return substr_replace($path, $format_ext, $pos+1);
+}
+
+/**
* get the full path of an image
*
* @param array $element_info element information from db (at least 'path')
@@ -1140,9 +1159,7 @@ function l10n_args($key_args, $sep = "\n")
*/
function get_themeconf($key)
{
- global $template;
-
- return $template->get_themeconf($key);
+ return $GLOBALS['template']->get_themeconf($key);
}
/**
@@ -1278,6 +1295,27 @@ DELETE FROM '.CONFIG_TABLE.'
}
/**
+ * Return a default value for a configuration parameter.
+ * @since 2.8
+ *
+ * @param string $param the configuration value to be extracted (if it exists)
+ * @param mixed $default_value the default value for the configuration value if it does not exist.
+ *
+ * @return mixed The configuration value if the variable exists, otherwise the default.
+ */
+function conf_get_param($param, $default_value=null)
+{
+ global $conf;
+
+ if (isset($conf[$param]))
+ {
+ return $conf[$param];
+ }
+ return $default_value;
+}
+
+
+/**
* Apply *unserialize* on a value only if it is a string
* @since 2.7
*
@@ -1631,7 +1669,7 @@ function convert_charset($str, $source_charset, $dest_charset)
}
if (function_exists('iconv'))
{
- return iconv($source_charset, $dest_charset, $str);
+ return iconv($source_charset, $dest_charset.'//TRANSLIT', $str);
}
if (function_exists('mb_convert_encoding'))
{
@@ -2092,4 +2130,4 @@ function safe_version_compare($a, $b, $op=null)
}
}
-?> \ No newline at end of file
+?>
diff --git a/include/functions_calendar.inc.php b/include/functions_calendar.inc.php
index 850ccdccf..829d6d18c 100644
--- a/include/functions_calendar.inc.php
+++ b/include/functions_calendar.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/functions_category.inc.php b/include/functions_category.inc.php
index 15ab84c25..76c9fbaae 100644
--- a/include/functions_category.inc.php
+++ b/include/functions_category.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -491,6 +491,7 @@ SELECT image_id
function get_computed_categories(&$userdata, $filter_days=null)
{
$query = 'SELECT c.id AS cat_id, id_uppercat';
+ $query.= ', global_rank';
// Count by date_available to avoid count null
$query .= ',
MAX(date_available) AS date_last, COUNT(date_available) AS nb_images
@@ -533,6 +534,11 @@ FROM '.CATEGORIES_TABLE.' as c
$cats[$row['cat_id']] = $row;
}
+ // it is important to logically sort the albums because some operations
+ // (like removal) rely on this logical order. Child album doesn't always
+ // have a bigger id than its parent (if it was moved afterwards).
+ uasort($cats, 'global_rank_compare');
+
foreach ($cats as $cat)
{
if ( !isset( $cat['id_uppercat'] ) )
diff --git a/include/functions_comment.inc.php b/include/functions_comment.inc.php
index 2dcc4fcc1..0e6a5714b 100644
--- a/include/functions_comment.inc.php
+++ b/include/functions_comment.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/functions_cookie.inc.php b/include/functions_cookie.inc.php
index 4e547e10e..2c61eecaf 100644
--- a/include/functions_cookie.inc.php
+++ b/include/functions_cookie.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/functions_filter.inc.php b/include/functions_filter.inc.php
index 47d0ffde2..ded932e9d 100644
--- a/include/functions_filter.inc.php
+++ b/include/functions_filter.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/functions_html.inc.php b/include/functions_html.inc.php
index 8668e68ad..b0f123a14 100644
--- a/include/functions_html.inc.php
+++ b/include/functions_html.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -103,10 +103,17 @@ function get_cat_display_name($cat_informations, $url='')
function get_cat_display_name_cache($uppercats,
$url = '',
$single_link = false,
- $link_class = null)
+ $link_class = null,
+ $auth_key=null)
{
global $cache, $conf;
+ $add_url_params = array();
+ if (isset($auth_key))
+ {
+ $add_url_params['auth'] = $auth_key;
+ }
+
if (!isset($cache['cat_names']))
{
$query = '
@@ -119,7 +126,7 @@ SELECT id, name, permalink
$output = '';
if ($single_link)
{
- $single_url = get_root_url().$url.array_pop(explode(',', $uppercats));
+ $single_url = add_url_params(get_root_url().$url.array_pop(explode(',', $uppercats)), $add_url_params);
$output.= '<a href="'.$single_url.'"';
if (isset($link_class))
{
@@ -155,10 +162,13 @@ SELECT id, name, permalink
{
$output.= '
<a href="'
- .make_index_url(
+ .add_url_params(
+ make_index_url(
array(
'category' => $cat,
)
+ ),
+ $add_url_params
)
.'">'.$cat['name'].'</a>';
}
diff --git a/include/functions_mail.inc.php b/include/functions_mail.inc.php
index ed1081713..9032d8311 100644
--- a/include/functions_mail.inc.php
+++ b/include/functions_mail.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -514,6 +514,8 @@ SELECT DISTINCT language
// get subset of users in this group for a specific language
$query = '
SELECT
+ ui.user_id,
+ ui.status,
u.'.$conf['user_fields']['username'].' AS name,
u.'.$conf['user_fields']['email'].' AS email
FROM '.USER_GROUP_TABLE.' AS ug
@@ -534,13 +536,33 @@ SELECT
switch_lang_to($language);
- $return&= pwg_mail(null,
- array_merge(
- $args,
- array('Bcc' => $users)
- ),
- $tpl
- );
+ foreach ($users as $u)
+ {
+ $authkey = create_user_auth_key($u['user_id'], $u['status']);
+
+ $user_tpl = $tpl;
+
+ if ($authkey !== false)
+ {
+ $user_tpl['assign']['LINK'] = add_url_params($tpl['assign']['LINK'], array('auth' => $authkey['auth_key']));
+
+ if (isset($user_tpl['assign']['IMG']['link']))
+ {
+ $user_tpl['assign']['IMG']['link'] = add_url_params(
+ $user_tpl['assign']['IMG']['link'],
+ array('auth' => $authkey['auth_key'])
+ );
+ }
+ }
+
+ $user_args = $args;
+ if ($authkey !== false)
+ {
+ $user_args['auth_key'] = $authkey['auth_key'];
+ }
+
+ $return &= pwg_mail($u['email'], $user_args, $user_tpl);
+ }
switch_lang_back();
}
@@ -563,6 +585,7 @@ SELECT
* o theme: theme to use [default value $conf_mail['mail_theme']]
* o mail_title: main title of the mail [default value $conf['gallery_title']]
* o mail_subtitle: subtitle of the mail [default value subject]
+ * o auth_key: authentication key to add on footer link [default value null]
* @param array $tpl - use these options to define a custom content template file
* o filename
* o dirname (optional)
@@ -695,6 +718,10 @@ function pwg_mail($to, $args=array(), $tpl=array())
{
// key compose of indexes witch allow to cache mail data
$cache_key = $content_type.'-'.$lang_info['code'];
+ if (!empty($args['auth_key']))
+ {
+ $cache_key.= '-'.$args['auth_key'];
+ }
if (!isset($conf_mail[$cache_key]))
{
@@ -709,9 +736,15 @@ function pwg_mail($to, $args=array(), $tpl=array())
$template->set_filename('mail_header', 'header.tpl');
$template->set_filename('mail_footer', 'footer.tpl');
+ $add_url_params = array();
+ if (!empty($args['auth_key']))
+ {
+ $add_url_params['auth'] = $args['auth_key'];
+ }
+
$template->assign(
array(
- 'GALLERY_URL' => get_gallery_home_url(),
+ 'GALLERY_URL' => add_url_params(get_gallery_home_url(), $add_url_params),
'GALLERY_TITLE' => isset($page['gallery_title']) ? $page['gallery_title'] : $conf['gallery_title'],
'VERSION' => $conf['show_version'] ? PHPWG_VERSION : '',
'PHPWG_URL' => defined('PHPWG_URL') ? PHPWG_URL : '',
diff --git a/include/functions_metadata.inc.php b/include/functions_metadata.inc.php
index ab3d6a7f1..3d3590007 100644
--- a/include/functions_metadata.inc.php
+++ b/include/functions_metadata.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/functions_notification.inc.php b/include/functions_notification.inc.php
index bc4d1a374..6e063d1dc 100644
--- a/include/functions_notification.inc.php
+++ b/include/functions_notification.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -395,27 +395,45 @@ function add_news_line(&$news, $count, $singular_key, $plural_key, $url='', $add
* @param bool $add_url add html link around news
* @return array
*/
-function news($start=null, $end=null, $exclude_img_cats=false, $add_url=false)
+function news($start=null, $end=null, $exclude_img_cats=false, $add_url=false, $auth_key=null)
{
$news = array();
- if (!$exclude_img_cats)
+ $add_url_params = array();
+ if (isset($auth_key))
{
- add_news_line( $news,
- nb_new_elements($start, $end), '%d new photo', '%d new photos',
- make_index_url(array('section'=>'recent_pics')), $add_url );
+ $add_url_params['auth'] = $auth_key;
}
if (!$exclude_img_cats)
{
- add_news_line( $news,
- nb_updated_categories($start, $end), '%d album updated', '%d albums updated',
- make_index_url(array('section'=>'recent_cats')), $add_url );
+ add_news_line(
+ $news,
+ nb_new_elements($start, $end),
+ '%d new photo',
+ '%d new photos',
+ add_url_params(make_index_url(array('section'=>'recent_pics')), $add_url_params),
+ $add_url
+ );
+
+ add_news_line(
+ $news,
+ nb_updated_categories($start, $end),
+ '%d album updated',
+ '%d albums updated',
+ add_url_params(make_index_url(array('section'=>'recent_cats')), $add_url_params),
+ $add_url
+ );
}
- add_news_line( $news,
- nb_new_comments($start, $end), '%d new comment', '%d new comments',
- get_root_url().'comments.php', $add_url );
+ add_news_line(
+ $news,
+ nb_new_comments($start, $end),
+ '%d new comment',
+ '%d new comments',
+ add_url_params(get_root_url().'comments.php', $add_url_params),
+ $add_url
+ );
if (is_admin())
{
@@ -527,17 +545,23 @@ function get_recent_post_dates_array($args)
* @param array $date_detail returned value of get_recent_post_dates()
* @return string
*/
-function get_html_description_recent_post_date($date_detail)
+function get_html_description_recent_post_date($date_detail, $auth_key=null)
{
global $conf;
+ $add_url_params = array();
+ if (isset($auth_key))
+ {
+ $add_url_params['auth'] = $auth_key;
+ }
+
$description = '<ul>';
$description .=
'<li>'
.l10n_dec('%d new photo', '%d new photos', $date_detail['nb_elements'])
.' ('
- .'<a href="'.make_index_url(array('section'=>'recent_pics')).'">'
+ .'<a href="'.add_url_params(make_index_url(array('section'=>'recent_pics')), $add_url_params).'">'
.l10n('Recent photos').'</a>'
.')'
.'</li><br>';
@@ -546,11 +570,16 @@ function get_html_description_recent_post_date($date_detail)
{
$tn_src = DerivativeImage::thumb_url($element);
$description .= '<a href="'.
- make_picture_url(array(
- 'image_id' => $element['id'],
- 'image_file' => $element['file'],
- ))
- .'"><img src="'.$tn_src.'"></a>';
+ add_url_params(
+ make_picture_url(
+ array(
+ 'image_id' => $element['id'],
+ 'image_file' => $element['file'],
+ )
+ ),
+ $add_url_params
+ )
+ .'"><img src="'.$tn_src.'"></a>';
}
$description .= '...<br>';
@@ -564,7 +593,7 @@ function get_html_description_recent_post_date($date_detail)
{
$description .=
'<li>'
- .get_cat_display_name_cache($cat['uppercats'])
+ .get_cat_display_name_cache($cat['uppercats'],'', false, null, $auth_key)
.' ('.
l10n_dec('%d new photo', '%d new photos', $cat['img_count']).')'
.'</li>';
diff --git a/include/functions_picture.inc.php b/include/functions_picture.inc.php
index ae3f944b0..9e923b0de 100644
--- a/include/functions_picture.inc.php
+++ b/include/functions_picture.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/functions_plugins.inc.php b/include/functions_plugins.inc.php
index 8700a599f..429167bb0 100644
--- a/include/functions_plugins.inc.php
+++ b/include/functions_plugins.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/functions_rate.inc.php b/include/functions_rate.inc.php
index 45d3e9e7f..3b27f5c8e 100644
--- a/include/functions_rate.inc.php
+++ b/include/functions_rate.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/functions_search.inc.php b/include/functions_search.inc.php
index 2f42473b3..69c57faa7 100644
--- a/include/functions_search.inc.php
+++ b/include/functions_search.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/functions_session.inc.php b/include/functions_session.inc.php
index aaa07fd07..9c12e26c1 100644
--- a/include/functions_session.inc.php
+++ b/include/functions_session.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -71,7 +71,7 @@ function generate_key($size)
str_replace(
array('+', '/'),
'',
- base64_encode(openssl_random_pseudo_bytes($size))
+ base64_encode(openssl_random_pseudo_bytes($size+10))
),
0,
$size
@@ -260,4 +260,4 @@ function pwg_unset_session_var($var)
return true;
}
-?> \ No newline at end of file
+?>
diff --git a/include/functions_tag.inc.php b/include/functions_tag.inc.php
index 90474494f..752a2be7e 100644
--- a/include/functions_tag.inc.php
+++ b/include/functions_tag.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/functions_url.inc.php b/include/functions_url.inc.php
index 5a471bc10..ea329b4f9 100644
--- a/include/functions_url.inc.php
+++ b/include/functions_url.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -62,14 +62,21 @@ function get_absolute_root_url($with_scheme=true)
{
$url .= 'http://';
}
- $url .= $_SERVER['HTTP_HOST'];
- if ( (!$is_https && $_SERVER['SERVER_PORT'] != 80)
- ||($is_https && $_SERVER['SERVER_PORT'] != 443))
+ if (isset($_SERVER['HTTP_X_FORWARDED_HOST']))
{
- $url_port = ':'.$_SERVER['SERVER_PORT'];
- if (strrchr($url, ':') != $url_port)
+ $url .= $_SERVER['HTTP_X_FORWARDED_HOST'];
+ }
+ else
+ {
+ $url .= $_SERVER['HTTP_HOST'];
+ if ( (!$is_https && $_SERVER['SERVER_PORT'] != 80)
+ ||($is_https && $_SERVER['SERVER_PORT'] != 443))
{
- $url .= $url_port;
+ $url_port = ':'.$_SERVER['SERVER_PORT'];
+ if (strrchr($url, ':') != $url_port)
+ {
+ $url .= $url_port;
+ }
}
}
}
@@ -372,7 +379,7 @@ function make_section_in_url($params)
$section_string.= '/'.$tag['id'];
break;
case 'tag':
- if (isset($tag['url_name']) and !is_numeric($tag['url_name']) )
+ if (isset($tag['url_name']))
{
$section_string.= '/'.$tag['url_name'];
break;
@@ -817,4 +824,4 @@ function url_is_remote($url)
return false;
}
-?> \ No newline at end of file
+?>
diff --git a/include/functions_user.inc.php b/include/functions_user.inc.php
index 5f503b36e..ac85d1b47 100644
--- a/include/functions_user.inc.php
+++ b/include/functions_user.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -945,7 +945,7 @@ function log_user($user_id, $remember_me)
{ // make sure we clean any remember me ...
setcookie($conf['remember_me_name'], '', 0, cookie_path(),ini_get('session.cookie_domain'));
}
- if ( session_id()!="" )
+ if ( session_id()!="" and (version_compare(PHP_VERSION, '7') <= 0 or version_compare(PHP_VERSION, '7.0.3') >= 0))
{ // we regenerate the session for security reasons
// see http://www.acros.si/papers/session_fixation.pdf
session_regenerate_id(true);
@@ -1462,4 +1462,135 @@ function get_recent_photos_sql($db_field)
.pwg_db_get_recent_period_expression($user['recent_period'])
.','.pwg_db_get_recent_period_expression(1,$user['last_photo_date']).')';
}
-?> \ No newline at end of file
+
+/**
+ * Performs auto-connection if authentication key is valid.
+ *
+ * @since 2.8
+ *
+ * @return bool
+ */
+function auth_key_login($auth_key)
+{
+ global $conf, $user, $page;
+
+ if (!preg_match('/^[a-z0-9]{30}$/i', $auth_key))
+ {
+ return false;
+ }
+
+ $query = '
+SELECT
+ *,
+ '.$conf['user_fields']['username'].' AS username,
+ NOW() AS dbnow
+ FROM '.USER_AUTH_KEYS_TABLE.' AS uak
+ JOIN '.USER_INFOS_TABLE.' AS ui ON uak.user_id = ui.user_id
+ JOIN '.USERS_TABLE.' AS u ON u.'.$conf['user_fields']['id'].' = ui.user_id
+ WHERE auth_key = \''.$auth_key.'\'
+;';
+ $keys = query2array($query);
+
+ if (count($keys) == 0)
+ {
+ return false;
+ }
+
+ $key = $keys[0];
+
+ // is the key still valid?
+ if (strtotime($key['expired_on']) < strtotime($key['dbnow']))
+ {
+ $page['auth_key_invalid'] = true;
+ return false;
+ }
+
+ // admin/webmaster/guest can't get connected with authentication keys
+ if (!in_array($key['status'], array('normal','generic')))
+ {
+ return false;
+ }
+
+ $user['id'] = $key['user_id'];
+ log_user($user['id'], false);
+ trigger_notify('login_success', $key['username']);
+
+ // to be registered in history table by pwg_log function
+ $page['auth_key_id'] = $key['auth_key_id'];
+
+ return true;
+}
+
+/**
+ * Creates an authentication key.
+ *
+ * @since 2.8
+ * @param int $user_id
+ * @return array
+ */
+function create_user_auth_key($user_id, $user_status=null)
+{
+ global $conf;
+
+ if (0 == $conf['auth_key_duration'])
+ {
+ return false;
+ }
+
+ if (!isset($user_status))
+ {
+ // we have to find the user status
+ $query = '
+SELECT
+ status
+ FROM '.USER_INFOS_TABLE.'
+ WHERE user_id = '.$user_id.'
+;';
+ $user_infos = query2array($query);
+
+ if (count($user_infos) == 0)
+ {
+ return false;
+ }
+
+ $user_status = $user_infos[0]['status'];
+ }
+
+ if (!in_array($user_status, array('normal','generic')))
+ {
+ return false;
+ }
+
+ $candidate = generate_key(30);
+
+ $query = '
+SELECT
+ COUNT(*),
+ NOW(),
+ ADDDATE(NOW(), INTERVAL '.$conf['auth_key_duration'].' SECOND)
+ FROM '.USER_AUTH_KEYS_TABLE.'
+ WHERE auth_key = \''.$candidate.'\'
+;';
+ list($counter, $now, $expiration) = pwg_db_fetch_row(pwg_query($query));
+ if (0 == $counter)
+ {
+ $key = array(
+ 'auth_key' => $candidate,
+ 'user_id' => $user_id,
+ 'created_on' => $now,
+ 'duration' => $conf['auth_key_duration'],
+ 'expired_on' => $expiration,
+ );
+
+ single_insert(USER_AUTH_KEYS_TABLE, $key);
+
+ $key['auth_key_id'] = pwg_db_insert_id();
+
+ return $key;
+ }
+ else
+ {
+ return create_user_auth_key($user_id, $user_status);
+ }
+}
+?>
diff --git a/include/index.php b/include/index.php
index c8de97f60..0b96c3efa 100644
--- a/include/index.php
+++ b/include/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/inflectors/en.php b/include/inflectors/en.php
index 63571440d..ae8e9378b 100644
--- a/include/inflectors/en.php
+++ b/include/inflectors/en.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/inflectors/fr.php b/include/inflectors/fr.php
index f634d2a65..28edbcefd 100644
--- a/include/inflectors/fr.php
+++ b/include/inflectors/fr.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/menubar.inc.php b/include/menubar.inc.php
index 3d39cd8e5..9fe2ceaab 100644
--- a/include/menubar.inc.php
+++ b/include/menubar.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/no_photo_yet.inc.php b/include/no_photo_yet.inc.php
index 61daf35a8..15d12dcc0 100644
--- a/include/no_photo_yet.inc.php
+++ b/include/no_photo_yet.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/page_header.php b/include/page_header.php
index 6710f20d9..8a62fc487 100644
--- a/include/page_header.php
+++ b/include/page_header.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/page_tail.php b/include/page_tail.php
index f47dc2d91..82420ffc9 100644
--- a/include/page_tail.php
+++ b/include/page_tail.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/passwordhash.class.php b/include/passwordhash.class.php
index 84447b277..8b8b11319 100644
--- a/include/passwordhash.class.php
+++ b/include/passwordhash.class.php
@@ -1,18 +1,18 @@
<?php
-#
-# Portable PHP password hashing framework.
-#
-# Version 0.3 / genuine.
+/**
+ * Portable PHP password hashing framework.
+ * @package phpass
+ * @since 2.5.0
+ * @version 0.3 / WordPress
+ * @link http://www.openwall.com/phpass/
+ */
+
#
# Written by Solar Designer <solar at openwall.com> in 2004-2006 and placed in
# the public domain. Revised in subsequent years, still public domain.
#
# There's absolutely no warranty.
#
-# The homepage URL for this framework is:
-#
-# http://www.openwall.com/phpass/
-#
# Please be sure to update the Version line if you edit this file in any way.
# It is suggested that you leave the main version number intact, but indicate
# your project name (after the slash) and add your own revision information.
@@ -24,13 +24,25 @@
# Obviously, since this code is in the public domain, the above are not
# requirements (there can be none), but merely suggestions.
#
+
+/**
+ * Portable PHP password hashing framework.
+ *
+ * @package phpass
+ * @version 0.3 / WordPress
+ * @link http://www.openwall.com/phpass/
+ * @since 2.5.0
+ */
class PasswordHash {
var $itoa64;
var $iteration_count_log2;
var $portable_hashes;
var $random_state;
- function PasswordHash($iteration_count_log2, $portable_hashes)
+ /**
+ * PHP5 constructor.
+ */
+ function __construct( $iteration_count_log2, $portable_hashes )
{
$this->itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
@@ -40,15 +52,20 @@ class PasswordHash {
$this->portable_hashes = $portable_hashes;
- $this->random_state = microtime();
- if (function_exists('getmypid'))
- $this->random_state .= getmypid();
+ $this->random_state = microtime() . uniqid(rand(), TRUE); // removed getmypid() for compatibility reasons
+ }
+
+ /**
+ * PHP4 constructor.
+ */
+ public function PasswordHash( $iteration_count_log2, $portable_hashes ) {
+ self::__construct( $iteration_count_log2, $portable_hashes );
}
function get_random_bytes($count)
{
$output = '';
- if (@is_readable('/dev/urandom') &&
+ if ( @is_readable('/dev/urandom') &&
($fh = @fopen('/dev/urandom', 'rb'))) {
$output = fread($fh, $count);
fclose($fh);
@@ -207,6 +224,10 @@ class PasswordHash {
function HashPassword($password)
{
+ if ( strlen( $password ) > 4096 ) {
+ return '*';
+ }
+
$random = '';
if (CRYPT_BLOWFISH == 1 && !$this->portable_hashes) {
@@ -242,12 +263,14 @@ class PasswordHash {
function CheckPassword($password, $stored_hash)
{
+ if ( strlen( $password ) > 4096 ) {
+ return false;
+ }
+
$hash = $this->crypt_private($password, $stored_hash);
if ($hash[0] == '*')
$hash = crypt($password, $stored_hash);
- return $hash == $stored_hash;
+ return $hash === $stored_hash;
}
-}
-
-?>
+} \ No newline at end of file
diff --git a/include/php_compat/index.php b/include/php_compat/index.php
index c8de97f60..0b96c3efa 100644
--- a/include/php_compat/index.php
+++ b/include/php_compat/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/picture_comment.inc.php b/include/picture_comment.inc.php
index fd9a7b7fd..20a72e5ca 100644
--- a/include/picture_comment.inc.php
+++ b/include/picture_comment.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/picture_metadata.inc.php b/include/picture_metadata.inc.php
index 0df50dfbf..f43fa5a08 100644
--- a/include/picture_metadata.inc.php
+++ b/include/picture_metadata.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/picture_rate.inc.php b/include/picture_rate.inc.php
index c3119bd53..9c024ecf0 100644
--- a/include/picture_rate.inc.php
+++ b/include/picture_rate.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/section_init.inc.php b/include/section_init.inc.php
index c2c3ee676..e2e0c0712 100644
--- a/include/section_init.inc.php
+++ b/include/section_init.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/smarty/.gitattributes b/include/smarty/.gitattributes
new file mode 100644
index 000000000..412eeda78
--- /dev/null
+++ b/include/smarty/.gitattributes
@@ -0,0 +1,22 @@
+# Auto detect text files and perform LF normalization
+* text=auto
+
+# Custom for Visual Studio
+*.cs diff=csharp
+*.sln merge=union
+*.csproj merge=union
+*.vbproj merge=union
+*.fsproj merge=union
+*.dbproj merge=union
+
+# Standard to msysgit
+*.doc diff=astextplain
+*.DOC diff=astextplain
+*.docx diff=astextplain
+*.DOCX diff=astextplain
+*.dot diff=astextplain
+*.DOT diff=astextplain
+*.pdf diff=astextplain
+*.PDF diff=astextplain
+*.rtf diff=astextplain
+*.RTF diff=astextplain
diff --git a/include/smarty/.gitignore b/include/smarty/.gitignore
new file mode 100644
index 000000000..0ff15aa49
--- /dev/null
+++ b/include/smarty/.gitignore
@@ -0,0 +1,221 @@
+#################
+## Eclipse
+#################
+
+*.pydevproject
+.project
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.classpath
+.settings/
+.loadpath
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# CDT-specific
+.cproject
+
+# PDT-specific
+.buildpath
+
+
+#################
+## Visual Studio
+#################
+
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.sln.docstates
+
+# Build results
+
+[Dd]ebug/
+[Rr]elease/
+x64/
+build/
+[Bb]in/
+[Oo]bj/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+*_i.c
+*_p.c
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.log
+*.scc
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+*.cachefile
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+*.ncrunch*
+.*crunch*.local.xml
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.Publish.xml
+*.pubxml
+
+# NuGet Packages Directory
+## TODO: If you have NuGet Package Restore enabled, uncomment the next line
+#packages/
+
+# Windows Azure Build Output
+csx
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Others
+sql/
+*.Cache
+ClientBin/
+[Ss]tyle[Cc]op.*
+~$*
+*~
+*.dbmdl
+*.[Pp]ublish.xml
+*.pfx
+*.publishsettings
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file to a newer
+# Visual Studio version. Backup files are not needed, because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+App_Data/*.mdf
+App_Data/*.ldf
+
+#############
+## Windows detritus
+#############
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Mac crap
+.DS_Store
+
+
+#############
+## Python
+#############
+
+*.py[co]
+
+# Packages
+*.egg
+*.egg-info
+dist/
+build/
+eggs/
+parts/
+var/
+sdist/
+develop-eggs/
+.installed.cfg
+
+# Installer logs
+pip-log.txt
+
+# Unit test / coverage reports
+.coverage
+.tox
+
+#Translations
+*.mo
+
+#Mr Developer
+.mr.developer.cfg
+
+.idea/
+
+# Smarty
+lexer/*.php
+lexer/*.out
diff --git a/include/smarty/.travis.yml b/include/smarty/.travis.yml
new file mode 100644
index 000000000..fbf081bac
--- /dev/null
+++ b/include/smarty/.travis.yml
@@ -0,0 +1,25 @@
+language: php
+
+php:
+ - 5.3
+ - 5.4
+ - 5.5
+ - 5.6
+ - 7.0
+ - hhvm
+
+matrix:
+ allow_failures:
+ - php: hhvm
+
+before_script:
+ - travis_retry composer self-update
+ - travis_retry composer --prefer-source --dev install
+
+install:
+ - git clone --depth=50 --branch=master git://github.com/smarty-php/smarty-phpunit.git
+
+script:
+ - cd smarty-phpunit
+ - phpunit ./
+
diff --git a/include/smarty/COMPOSER_RELEASE_NOTES.txt b/include/smarty/COMPOSER_RELEASE_NOTES.txt
new file mode 100644
index 000000000..c943d9f2e
--- /dev/null
+++ b/include/smarty/COMPOSER_RELEASE_NOTES.txt
@@ -0,0 +1,29 @@
+
+
+Starting with Smarty 3.1.21 Composer has been configured to load the packages from github.
+
+*******************************************************************************
+* *
+* NOTE: Because of this change you must clear your local composer cache with *
+* the "composer clearcache" command *
+* *
+*******************************************************************************
+
+To get the latest stable version use
+ "require": {
+ "smarty/smarty": "~3.1"
+ }
+in your composer.json file.
+
+To get the trunk version use
+ "require": {
+ "smarty/smarty": "~3.1@dev"
+ }
+
+The "smarty/smarty" package will start at libs/.... subfolder.
+
+To retrieve the development and documentation folders add
+ "require-dev": {
+ "smarty/smarty-dev": "~3.1@dev"
+ }
+
diff --git a/include/smarty/INHERITANCE_RELEASE_NOTES.txt b/include/smarty/INHERITANCE_RELEASE_NOTES.txt
new file mode 100644
index 000000000..8b2c64a1b
--- /dev/null
+++ b/include/smarty/INHERITANCE_RELEASE_NOTES.txt
@@ -0,0 +1,67 @@
+Starting with version 3.1.28 template inheritance is no longer a compile time process.
+All {block} tag parent/child relations are resolved at run time.
+This does resolve all known existing restrictions (see below).
+
+The $smarty::$inheritance_merge_compiled_includes property has been removed.
+Any access to it is ignored.
+
+This does enable some new features:
+
+Any code outside root {block} tags in child templates is now executed but any output will be ignored.
+
+ {extends 'foo.tpl'}
+ {$bar = 'on'} // assigns variable $bar seen in parent templates
+ {block 'buh'}{/block}
+
+ {extends 'foo.tpl'}
+ {$bar} // the output of variable bar is ignored
+ {block 'buh'}{/block}
+
+{block} tags can be dynamically en/disabled by conditions.
+
+ {block 'root'}
+ {if $foo}
+ {block 'v1'}
+ ....
+ {/block}
+ {else}
+ {block 'v1'}
+ ....
+ {/block}
+ {/if}
+ {/block}
+
+
+
+THE FOLLOWING RESTRICTIONS ARE NO LONGER EXISTING:
+In Smarty 3.1 template inheritance is a compile time process. All the extending of {block} tags
+is done at compile time and the parent and child templates are compiled in a single compiled template.
+{include} subtemplate could also {block} tags. Such subtemplate could not compiled by it's own because
+it could be used in other context where the {block} extended with a different result. For that reasion
+the compiled code of {include} subtemplates gets also merged in compiled inheritance template.
+
+Merging the code into a single compile template has some drawbacks.
+1. You could not use variable file names in {include} Smarty would use the {include} of compilation time.
+2. You could not use individual compile_id in {include}
+3. Seperate caching of subtemplate was not possible
+4. Any change of the template directory structure between calls was not necessarily seen.
+
+Starting with 3.1.15 some of the above conditions got checked and resulted in an exception. It turned out
+that a couple of users did use some of above and now got exceptions.
+
+To resolve this starting with 3.1.16 there is a new configuration parameter $inheritance_merge_compiled_includes.
+For most backward compatibility its default setting is true.
+With this setting all {include} subtemplate will be merge into the compiled inheritance template, but the above cases
+could be rejected by exception.
+
+
+If $smarty->inheritance_merge_compiled_includes = false; {include} subtemplate will not be merged.
+You must now manually merge all {include} subtemplate which do contain {block} tags. This is done by setting the "inline" option.
+{include file='foo.bar' inline}
+
+1. In case of a variable file name like {include file=$foo inline} you must use the variable in a compile_id $smarty->compile_id = $foo;
+2. If you use individual compile_id in {include file='foo.tpl' compile_id=$bar inline} it must be used in the
+ global compile_id as well $smarty->compile_id = $bar;
+3. If call templates with different template_dir configurations and a parent could same named child template from different folders
+ you must make the folder name part of the compile_id.
+
diff --git a/include/smarty/NEW_FEATURES.txt b/include/smarty/NEW_FEATURES.txt
new file mode 100644
index 000000000..1a51c71d9
--- /dev/null
+++ b/include/smarty/NEW_FEATURES.txt
@@ -0,0 +1,133 @@
+
+
+This file contains a brief description of new features which have been added to Smarty 3.1
+
+Smarty 3.1.28
+
+ OPCACHE
+ =======
+ Smarty does now invalidate automatically updated and cleared compiled or cached template files in OPCACHE.
+ Correct operation is no longer dependent on OPCACHE configuration settings.
+
+ Template inheritance
+ ====================
+ Template inheritance is now processed in run time.
+ See the INHERITANCE_RELEASE_NOTES
+
+ Modifier regex_replace
+ ======================
+ An optional limit parameter was added
+
+ fetch() and display()
+ =====================
+ The fetch() and display() methods of the template object accept now optionally the same parameter
+ as the corresponding Smarty methods to get the content of another template.
+ Example:
+ $template->display(); Does display template of template object
+ $template->display('foo.tpl'); Does display template 'foo.bar'
+
+ File: resource
+ ==============
+ Multiple template_dir entries can now be selected by a comma separated list of indices.
+ The template_dir array is searched in the order of the indices. (Could be used to change the default search order)
+ Example:
+ $smarty->display('[1],[0]foo.bar');
+
+ Filter support
+ ==============
+ Optional filter names
+ An optional filter name was added to $smarty->registerFilter(). It can be used to unregister a filter by name.
+ - $smarty->registerFilter('output', $callback, 'name');
+ $smarty->unregister('output', 'name');
+
+ Closures
+ $smarty->registerFilter() does now accept closures.
+ - $smarty->registerFilter('pre', function($source) {return $source;});
+ If no optional filter name was specified it gets the default name 'closure'.
+ If you register multiple closures register each with a unique filter name.
+ - $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_1');
+ - $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_2');
+
+
+Smarty 3.1.22
+
+ Namespace support within templates
+ ==================================
+ Within templates you can now use namespace specifications on:
+ - Constants like foo\bar\FOO
+ - Class names like foo\bar\Baz::FOO, foo\bar\Baz::$foo, foo\bar\Baz::foo()
+ - PHP function names like foo\bar\baz()
+
+ Security
+ ========
+ - disable special $smarty variable -
+ The Smarty_Security class has the new property $disabled_special_smarty_vars.
+ It's an array which can be loaded with the $smarty special variable names like
+ 'template_object', 'template', 'current_dir' and others which will be disabled.
+ Note: That this security check is performed at compile time.
+
+ - limit template nesting -
+ Property $max_template_nesting of Smarty_Security does set the maximum template nesting level.
+ The main template is level 1. The nesting level is checked at run time. When the maximum will be exceeded
+ an Exception will be thrown. The default setting is 0 which does disable this check.
+
+ - trusted static methods -
+ The Smarty_Security class has the new property $trusted_static_methods to restrict access to static methods.
+ It's an nested array of trusted class and method names.
+ Format:
+ array (
+ 'class_1' => array('method_1', 'method_2'), // allowed methods
+ 'class_2' => array(), // all methods of class allowed
+ )
+ To disable access for all methods of all classes set $trusted_static_methods = null;
+ The default value is an empty array() which does enables all methods of all classes, but for backward compatibility
+ the setting of $static_classes will be checked.
+ Note: That this security check is performed at compile time.
+
+ - trusted static properties -
+ The Smarty_Security class has the new property $trusted_static_properties to restrict access to static properties.
+ It's an nested array of trusted class and property names.
+ Format:
+ array (
+ 'class_1' => array('prop_1', 'prop_2'), // allowed properties listed
+ 'class_2' => array(), // all properties of class allowed
+ }
+ To disable access for all properties of all classes set $trusted_static_properties = null;
+ The default value is an empty array() which does enables all properties of all classes, but for backward compatibility
+ the setting of $static_classes will be checked.
+ Note: That this security check is performed at compile time.
+
+ - trusted constants .
+ The Smarty_Security class has the new property $trusted_constants to restrict access to constants.
+ It's an array of trusted constant names.
+ Format:
+ array (
+ 'SMARTY_DIR' , // allowed constant
+ }
+ If the array is empty (default) the usage of constants can be controlled with the
+ Smarty_Security::$allow_constants property (default true)
+
+
+
+ Compiled Templates
+ ==================
+ Smarty does now automatically detects a change of the $merge_compiled_includes and $escape_html
+ property and creates different compiled templates files depending on the setting.
+
+ Same applies to config files and the $config_overwrite, $config_booleanize and
+ $config_read_hidden properties.
+
+ Debugging
+ =========
+ The layout of the debug window has been changed for better readability
+
+ New class constants
+ Smarty::DEBUG_OFF
+ Smarty::DEBUG_ON
+ Smarty::DEBUG_INDIVIDUAL
+ have been introduced for setting the $debugging property.
+
+ Smarty::DEBUG_INDIVIDUAL will create for each display() and fetch() call an individual debug window.
+
+ .
+
diff --git a/include/smarty/README b/include/smarty/README
index bf03403aa..08b397c3f 100644
--- a/include/smarty/README
+++ b/include/smarty/README
@@ -1,4 +1,4 @@
-Smarty 3.1.13
+Smarty 3.x
Author: Monte Ohrt <monte at ohrt dot com >
Author: Uwe Tews
@@ -120,7 +120,7 @@ $smarty->unregisterObject($object_name)
$smarty->unregisterFilter($type, $function_name)
$smarty->unregisterResource($resource_type)
-$smarty->compileAllTemplates($extention = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
+$smarty->compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
$smarty->clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null)
$smarty->testInstall()
@@ -460,12 +460,13 @@ included template.
PLUGINS
=======
-Smarty3 are following the same coding rules as in Smarty2.
-The only difference is that the template object is passed as additional third parameter.
+Smarty 3 plugins follow the same coding rules as in Smarty 2.
+The main difference is that the template object is now passed in place of the smarty object.
+The smarty object can be still be accessed through $template->smarty.
-smarty_plugintype_name (array $params, object $smarty, object $template)
+smarty_plugintype_name (array $params, Smarty_Internal_Template $template)
-The Smarty 2 plugins are still compatible as long as they do not make use of specific Smarty2 internals.
+The Smarty 2 plugins are still compatible as long as they do not make use of specific Smarty 2 internals.
TEMPLATE INHERITANCE:
diff --git a/include/smarty/README.md b/include/smarty/README.md
new file mode 100644
index 000000000..5783eb3e0
--- /dev/null
+++ b/include/smarty/README.md
@@ -0,0 +1,65 @@
+#Smarty 3 template engine
+##Distribution repository
+
+> Smarty 3.1.28 introduces run time template inheritance
+
+> Read the NEW_FEATURES and INHERITANCE_RELEASE_NOTES file for recent extensions to Smarty 3.1 functionality
+
+Smarty versions 3.1.11 or later are now on github and can be installed with Composer.
+
+
+The "smarty/smarty" package will start at libs/.... subfolder.
+
+To get the latest stable version of Smarty 3.1 use
+
+```json
+"require": {
+ "smarty/smarty": "~3.1"
+}
+```
+
+in your composer.json file.
+
+To get the trunk version use
+
+```json
+"require": {
+ "smarty/smarty": "~3.1@dev"
+}
+```
+
+For a specific version use something like
+
+```json
+"require": {
+ "smarty/smarty": "3.1.19"
+}
+```
+
+PHPUnit test can be installed by corresponding composer entries like
+
+```json
+"require": {
+ "smarty/smarty-phpunit": "3.1.19"
+}
+```
+
+Similar applies for the lexer/parser generator
+
+```json
+"require": {
+ "smarty/smarty-lexer": "3.1.19"
+}
+```
+
+Or you could use
+
+```json
+"require": {
+ "smarty/smarty-dev": "3.1.19"
+}
+```
+
+Which is a wrapper to install all 3 packages
+
+Composer can also be used for Smarty2 versions 2.6.24 to 2.6.28
diff --git a/include/smarty/SMARTY_3.1_NOTES.txt b/include/smarty/SMARTY_3.1_NOTES.txt
index e56e56f67..57709f0d7 100644
--- a/include/smarty/SMARTY_3.1_NOTES.txt
+++ b/include/smarty/SMARTY_3.1_NOTES.txt
@@ -199,7 +199,7 @@ Relative paths are available with {include file="..."} and
$smarty->fetch('./foo.tpl') cannot be relative to a template, an
exception is thrown.
- Adressing a specific $template_dir
+ Addressing a specific $template_dir
Smarty 3.1 introduces the $template_dir index notation.
$smarty->fetch('[foo]bar.tpl') and {include file="[foo]bar.tpl"}
diff --git a/include/smarty/change_log.txt b/include/smarty/change_log.txt
index 69642e276..dadc5d17d 100644
--- a/include/smarty/change_log.txt
+++ b/include/smarty/change_log.txt
@@ -1,9 +1,720 @@
-===== Smarty-3.1.13 =====
+ ===== 3.1.29 ===== (21.12.2015)
+ 21.12.2015
+ - optimization improve speed of filetime checks on extends and extendsall resource
+
+ 20.12.2015
+ - bugfix failure when the default resource type was set to 'extendsall' https://github.com/smarty-php/smarty/issues/123
+ - update compilation of Smarty special variables
+ - bugfix add addition check for OS type on normalizaition of file path https://github.com/smarty-php/smarty/issues/134
+ - bugfix the source uid of the extendsall resource must contain $template_dir settings https://github.com/smarty-php/smarty/issues/123
+
+ 19.12.2015
+ - bugfix using $smarty.capture.foo in expressions could fail https://github.com/smarty-php/smarty/pull/138
+ - bugfix broken PHP 5.2 compatibility https://github.com/smarty-php/smarty/issues/139
+ - remove no longer used code
+ - improvement make sure that compiled and cache templates never can contain a trailing '?>?
+
+ 18.12.2015
+ - bugfix regression when modifier parameter was follow by math https://github.com/smarty-php/smarty/issues/132
+
+ 17.12.2015
+ - bugfix {$smarty.capture.nameFail} did lowercase capture name https://github.com/smarty-php/smarty/issues/135
+ - bugfix using {block append/prepend} on same block in multiple levels of inheritance templates could fail (forum topic 25827)
+ - bugfix text content consisting of just a single '0' like in {if true}0{/if} was suppressed (forum topic 25834)
+
+ 16.12.2015
+ - bugfix {foreach} did fail if from atrribute is a Generator class https://github.com/smarty-php/smarty/issues/128
+ - bugfix direct access $smarty->template_dir = 'foo'; should call Smarty::setTemplateDir() https://github.com/smarty-php/smarty/issues/121
+
+ 15.12.2015
+ - bugfix {$smarty.cookies.foo} did return the $_COOKIE array not the 'foo' value https://github.com/smarty-php/smarty/issues/122
+ - bugfix a call to clearAllCache() and other should clear all internal template object caches (forum topic 25828)
+
+ 14.12.2015
+ - bugfix {$smarty.config.foo} broken in 3.1.28 https://github.com/smarty-php/smarty/issues/120
+ - bugfix multiple calls of {section} with same name droped E_NOTICE error https://github.com/smarty-php/smarty/issues/118
+
+ ===== 3.1.28 ===== (13.12.2015)
+ 13.12.2015
+ - bugfix {foreach} and {section} with uppercase characters in name attribute did not work (forum topic 25819)
+ - bugfix $smarty->debugging_ctrl = 'URL' did not work (forum topic 25811)
+ - bugfix Debug Console could display incorrect data when using subtemplates
+
+ 09.12.2015
+ - bugfix Smarty did fail under PHP 7.0.0 with use_include_path = true;
+
+ 09.12.2015
+ - bugfix {strip} should exclude some html tags from stripping, related to fix for https://github.com/smarty-php/smarty/issues/111
+
+ 08.12.2015
+ - bugfix internal template function data got stored in wrong compiled file https://github.com/smarty-php/smarty/issues/114
+
+ 05.12.2015
+ -bugfix {strip} should insert a single space https://github.com/smarty-php/smarty/issues/111
+
+ 25.11.2015
+ -bugfix a left delimter like '[%' did fail on [%$var_[%$variable%]%] (forum topic 25798)
+
+ 02.11.2015
+ - bugfix {include} with variable file name like {include file="foo_`$bar`.tpl"} did fail in 3.1.28-dev https://github.com/smarty-php/smarty/issues/102
+
+ 01.11.2015
+ - update config file processing
+
+ 31.10.2015
+ - bugfix add missing $trusted_dir property to SmartyBC class (forum topic 25751)
+
+ 29.10.2015
+ - improve template scope handling
+
+ 24.10.2015
+ - more optimizations of template processing
+ - bugfix Error when using {include} within {capture} https://github.com/smarty-php/smarty/issues/100
+
+ 21.10.2015
+ - move some code into runtime extensions
+
+ 18.10.2015
+ - optimize filepath normalization
+ - rework of template inheritance
+ - speed and size optimizations
+ - bugfix under HHVM temporary cache file must only be created when caches template was updated
+ - fix compiled code for new {block} assign attribute
+ - update code generated by template function call handler
+
+ 18.09.2015
+ - bugfix {if $foo instanceof $bar} failed to compile if 2nd value is a variable https://github.com/smarty-php/smarty/issues/92
+
+ 17.09.2015
+ - bugfix {foreach} first attribute was not correctly reset since commit 05a8fa2 of 02.08.2015 https://github.com/smarty-php/smarty/issues/90
+
+ 16.09.2015
+ - update compiler by moving no longer needed properties, code optimizations and other
+
+ 14.09.2015
+ - optimize autoloader
+ - optimize subtemplate handling
+ - update template inheritance processing
+ - move code of {call} processing back into Smarty_Internal_Template class
+ - improvement invalidate OPCACHE for cleared compiled and cached template files (forum topic 25557)
+ - bugfix unintended multiple debug windows (forum topic 25699)
+
+ 30.08.2015
+ - size optimization move some runtime functions into extension
+ - optimize inline template processing
+ - optimization merge inheritance child and parent templates into one compiled template file
+
+ 29.08.2015
+ - improvement convert template inheritance into runtime processing
+ - bugfix {$smarty.block.parent} did always reference the root parent block https://github.com/smarty-php/smarty/issues/68
+
+ 23.08.2015
+ - introduce Smarty::$resource_cache_mode and cache template object of {include} inside loop
+ - load seldom used Smarty API methods dynamically to reduce memory footprint
+ - cache template object of {include} if same template is included several times
+ - convert debug console processing to object
+ - use output buffers for better performance and less memory usage
+ - optimize nocache hash processing
+ - remove not really needed properties
+ - optimize rendering
+ - move caching to Smarty::_cache
+ - remove properties with redundant content
+ - optimize Smarty::templateExists()
+ - optimize use_include_path processing
+ - relocate properties for size optimization
+ - remove redundant code
+ - bugfix compiling super globals like {$smarty.get.foo} did fail in the master branch https://github.com/smarty-php/smarty/issues/77
+
+ 06.08.2015
+ - avoid possible circular object references caused by parser/lexer objects
+ - rewrite compileAll... utility methods
+ - commit several internal improvements
+ - bugfix Smarty failed when compile_id did contain "|"
+
+ 03.08.2015
+ - rework clear cache methods
+ - bugfix compileAllConfig() was broken since 3.1.22 because of the changes in config file processing
+ - improve getIncludePath() to return directory if no file was given
+
+ 02.08.2015
+ - optimization and code cleanup of {foreach} and {section} compiler
+ - rework {capture} compiler
+
+ 01.08.2015
+ - update DateTime object can be instance of DateTimeImmutable since PHP5.5 https://github.com/smarty-php/smarty/pull/75
+ - improvement show resource type and start of template source instead of uid on eval: and string: resource (forum topic 25630)
+
+ 31.07.2015
+ - optimize {foreach} and {section} compiler
+
+ 29.07.2015
+ - optimize {section} compiler for speed and size of compiled code
+
+ 28.07.2015
+ - update for PHP 7 compatibility
+
+ 26.07.2015
+ - improvement impement workaround for HHVM PHP incompatibillity https://github.com/facebook/hhvm/issues/4797
+
+ 25.07.2015
+ - bugfix parser did hang on text starting <?something https://github.com/smarty-php/smarty/issues/74
+
+ 20.07.2015
+ - bugfix config files got recompiled on each request
+ - improvement invalidate PHP 5.5 opcache for recompiled and cached templates https://github.com/smarty-php/smarty/issues/72
+
+ 12.07.2015
+ - optimize {extends} compilation
+
+ 10.07.2015
+ - bugfix force file: resource in demo resource.extendsall.php
+
+ 08.07.2015
+ - bugfix convert each word of class names to ucfirst in in compiler. (forum topic 25588)
+
+ 07.07.2015
+ - improvement allow fetch() or display() called on a template object to get output from other template
+ like $template->fetch('foo.tpl') https://github.com/smarty-php/smarty/issues/70
+ - improvement Added $limit parameter to regex_replace modifier #71
+ - new feature multiple indices on file: resource
+
+ 06.07.2015
+ - optimize {block} compilation
+ - optimization get rid of __get and __set in source object
+
+ 01.07.2015
+ - optimize compile check handling
+ - update {foreach} compiler
+ - bugfix debugging console did not display string values containing \n, \r or \t correctly https://github.com/smarty-php/smarty/issues/66
+ - optimize source resources
+
+ 28.06.2015
+ - move $smarty->enableSecurity() into Smarty_Security class
+ - optimize security isTrustedResourceDir()
+ - move auto load filter methods into extension
+ - move $smarty->getTemplateVars() into extension
+ - move getStreamVariable() into extension
+ - move $smarty->append() and $smarty->appendByRef() into extension
+ - optimize autoloader
+ - optimize file path normalization
+ - bugfix PATH_SEPARATOR was replaced by mistake in autoloader
+ - remove redundant code
+
+ 27.06.2015
+ - bugfix resolve naming conflict between custom Smarty delimiter '<%' and PHP ASP tags https://github.com/smarty-php/smarty/issues/64
+ - update $smarty->_realpath for relative path not starting with './'
+ - update Smarty security with new realpath handling
+ - update {include_php} with new realpath handling
+ - move $smarty->loadPlugin() into extension
+ - minor compiler optimizations
+ - bugfix allow function plugins with name ending with 'close' https://github.com/smarty-php/smarty/issues/52
+ - rework of $smarty->clearCompiledTemplate() and move it to its own extension
+
+ 19.06.2015
+ - improvement allow closures as callback at $smarty->registerFilter() https://github.com/smarty-php/smarty/issues/59
+
+ ===== 3.1.27===== (18.06.2015)
+ 18.06.2015
+ - bugfix another update on file path normalization failed on path containing something like "/.foo/" https://github.com/smarty-php/smarty/issues/56
+
+ ===== 3.1.26===== (18.06.2015)
+ 18.06.2015
+ - bugfix file path normalization failed on path containing something like "/.foo/" https://github.com/smarty-php/smarty/issues/56
+
+ 17.06.2015
+ - bugfix calling a plugin with nocache option but no other attributes like {foo nocache} caused call to undefined function https://github.com/smarty-php/smarty/issues/55
+
+ ===== 3.1.25===== (15.06.2015)
+ 15.06.2015
+ - optimization of smarty_cachereource_keyvaluestore.php code
+
+ 14.06.2015
+ - bugfix a relative sub template path could fail if template_dir path did contain /../ https://github.com/smarty-php/smarty/issues/50
+ - optimization rework of path normalization
+ - bugfix an output tag with variable, modifier followed by an operator like {$foo|modifier+1} did fail https://github.com/smarty-php/smarty/issues/53
+
+ 13.06.2015
+ - bugfix a custom cache resource using smarty_cachereource_keyvaluestore.php did fail if php.ini mbstring.func_overload = 2 (forum topic 25568)
+
+ 11.06.2015
+ - bugfix the lexer could hang on very large quoted strings (forum topic 25570)
+
+ 08.06.2015
+ - bugfix using {$foo} as array index like $bar.{$foo} or in double quoted string like "some {$foo} thing" failed https://github.com/smarty-php/smarty/issues/49
+
+ 04.06.2015
+ - bugfix possible error message on unset() while compiling {block} tags https://github.com/smarty-php/smarty/issues/46
+
+ 01.06.2015
+ - bugfix <?xml ... ?> including template variables broken since 3.1.22 https://github.com/smarty-php/smarty/issues/47
+
+ 27.05.2015
+ - bugfix {include} with variable file name must not create by default individual cache file (since 3.1.22) https://github.com/smarty-php/smarty/issues/43
+
+ 24.05.2015
+ - bugfix if condition string 'neq' broken due to a typo https://github.com/smarty-php/smarty/issues/42
+
+ ===== 3.1.24===== (23.05.2015)
+ 23.05.2015
+ - improvement on php_handling to allow very large PHP sections, better error handling
+ - improvement allow extreme large comment sections (forum 25538)
+
+ 21.05.2015
+ - bugfix broken PHP 5.2 compatibility when compiling <?php tags https://github.com/smarty-php/smarty/issues/40
+ - bugfix named {foreach} comparison like $smarty.foreach.foobar.index > 1 did compile into wrong code https://github.com/smarty-php/smarty/issues/41
+
+ 19.05.2015
+ - bugfix compiler did overwrite existing variable value when setting the nocache attribute https://github.com/smarty-php/smarty/issues/39
+ - bugfix output filter trimwhitespace could run into the pcre.backtrack_limit on large output (code.google issue 220)
+ - bugfix compiler could run into the pcre.backtrack_limit on larger comment or {php} tag sections (forum 25538)
+
+ 18.05.2015
+ - improvement introduce shortcuts in lexer/parser rules for most frequent terms for higher
+ compilation speed
+
+ 16.05.2015
+ - bugfix {php}{/php} did work just for single lines https://github.com/smarty-php/smarty/issues/33
+ - improvement remove not needed ?><?php transitions from compiled code
+ - improvement reduce number of lexer tokens on operators and if conditions
+ - improvement higher compilation speed by modified lexer/parser generator at "smarty/smarty-lexer"
+
+ 13.05.2015
+ - improvement remove not needed ?><?php transitions from compiled code
+ - improvement of debugging:
+ - use fresh Smarty object to display the debug console because of possible problems when the Smarty
+ was extended or Smarty properties had been modified in the class source
+ - display Smarty version number
+ - Truncate lenght of Origin display and extend strin value display to 80 character
+ - bugfix in Smarty_Security 'nl2br' should be a trusted modifier, not PHP function (code.google issue 223)
+
+ 12.05.2015
+ - bugfix {$smarty.constant.TEST} did fail on undefined constant https://github.com/smarty-php/smarty/issues/28
+ - bugfix access to undefined config variable like {#undef#} did fail https://github.com/smarty-php/smarty/issues/29
+ - bugfix in nested {foreach} saved item attributes got overwritten https://github.com/smarty-php/smarty/issues/33
+
+ ===== 3.1.23 ===== (12.05.2015)
+ 12.05.2015
+ - bugfix of smaller performance issue introduce in 3.1.22 when caching is enabled
+ - bugfix missig entry for smarty-temmplate-config in autoloader
+
+ ===== 3.1.22 ===== tag was deleted because 3.1.22 did fail caused by the missing entry for smarty-temmplate-config in autoloader
+ 10.05.2015
+ - bugfix custom cache resource did not observe compile_id and cache_id when $cache_locking == true
+ - bugfix cache lock was not handled correctly after timeout when $cache_locking == true
+ - improvement added constants for $debugging
+
+ 07.05.2015
+ - improvement of the debugging console. Read NEW_FEATURES.txt
+ - optimization of resource class loading
+
+ 06.05.2015
+ - bugfix in 3.1.22-dev cache resource must not be loaded for subtemplates
+ - bugfix/improvement in 3.1.22-dev cache locking did not work as expected
+
+ 05.05.2015
+ - optimization on cache update when main template is modified
+ - optimization move <?php ?> handling from parser to new compiler module
+
+ 05.05.2015
+ - bugfix code could be messed up when {tags} are used in multiple attributes https://github.com/smarty-php/smarty/issues/23
+
+ 04.05.2015
+ - bugfix Smarty_Resource::parseResourceName incompatible with Google AppEngine (https://github.com/smarty-php/smarty/issues/22)
+ - improvement use is_file() checks to avoid errors suppressed by @ which could still cause problems (https://github.com/smarty-php/smarty/issues/24)
+
+ 28.04.2015
+ - bugfix plugins of merged subtemplates not loaded in 3.1.22-dev (forum topic 25508) 2nd fix
+
+ 28.04.2015
+ - bugfix plugins of merged subtemplates not loaded in 3.1.22-dev (forum topic 25508)
+
+ 23.04.2015
+ - bugfix a nocache template variable used as parameter at {insert} was by mistake cached
+
+ 20.04.2015
+ - bugfix at a template function containing nocache code a parmeter could overwrite a template variable of same name
+
+ 27.03.2015
+ - bugfix Smarty_Security->allow_constants=false; did also disable true, false and null (change of 16.03.2015)
+ - improvement added a whitelist for trusted constants to security Smarty_Security::$trusted_constants (forum topic 25471)
+
+ 20.03.2015
+ - bugfix make sure that function properties get saved only in compiled files containing the fuction definition {forum topic 25452}
+ - bugfix correct update of global variable values on exit of template functions. (reported under Smarty Developers)
+
+ 16.03.2015
+ - bugfix problems with {function}{/function} and {call} tags in different subtemplate cache files {forum topic 25452}
+ - bugfix Smarty_Security->allow_constants=false; did not disallow direct usage of defined constants like {SMARTY_DIR} {forum topic 25457}
+ - bugfix {block}{/block} tags did not work inside double quoted strings https://github.com/smarty-php/smarty/issues/18
+
+
+ 15.03.2015
+ - bugfix $smarty->compile_check must be restored before rendering of a just updated cache file {forum 25452}
+
+ 14.03.2015
+ - bugfix {nocache} {/nocache} tags corrupted code when used within a nocache section caused by a nocache template variable.
+
+ - bugfix template functions defined with {function} in an included subtemplate could not be called in nocache
+ mode with {call... nocache} if the subtemplate had it's own cache file {forum 25452}
+
+ 10.03.2015
+ - bugfix {include ... nocache} whith variable file or compile_id attribute was not executed in nocache mode.
+
+ 12.02.2015
+ - bugfix multiple Smarty::fetch() of same template when $smarty->merge_compiled_includes = true; could cause function already defined error
+
+ 11.02.2015
+ - bugfix recursive {includes} did create E_NOTICE message when $smarty->merge_compiled_includes = true; (github issue #16)
+
+ 22.01.2015
+ - new feature security can now control access to static methods and properties
+ see also NEW_FEATURES.txt
+
+ 21.01.2015
+ - bugfix clearCompiledTemplates(), clearAll() and clear() could try to delete whole drive at wrong path permissions because realpath() fail (forum 25397)
+ - bugfix 'self::' and 'parent::' was interpreted in template syntax as static class
+
+ 04.01.2015
+ - push last weeks changes to github
+
+ - different optimizations
+ - improvement automatically create different versions of compiled templates and config files depending
+ on property settings.
+ - optimization restructure template processing by moving code into classes it better belongs to
+ - optimization restructure config file processing
+
+ 31.12.2014
+ - bugfix use function_exists('mb_get_info') for setting Smarty::$_MBSTRING.
+ Function mb_split could be overloaded depending on php.ini mbstring.func_overload
+
+
+ 29.12.2014
+ - new feature security can now limit the template nesting level by property $max_template_nesting
+ see also NEW_FEATURES.txt (forum 25370)
+
+ 29.12.2014
+ - new feature security can now disable special $smarty variables listed in property $disabled_special_smarty_vars
+ see also NEW_FEATURES.txt (forum 25370)
+
+ 27.12.2014
+ - bugfix clear internal _is_file_cache when plugins_dir was modified
+
+ 13.12.2014
+ - improvement optimization of lexer and parser resulting in a up to 30% higher compiling speed
+
+ 11.12.2014
+ - bugfix resolve parser ambiguity between constant print tag {CONST} and other smarty tags after change of 09.12.2014
+
+ 09.12.2014
+ - bugfix variables $null, $true and $false did not work after the change of 12.11.2014 (forum 25342)
+ - bugfix call of template function by a variable name did not work after latest changes (forum 25342)
+
+ 23.11.2014
+ - bugfix a plugin with attached modifier could fail if the tag was immediately followed by another Smarty tag (since 3.1.21) (forum 25326)
+
+ 13.11.2014
+ - improvement move autoload code into Autoloader.php. Use Composer autoloader when possible
+
+ 12.11.2014
+ - new feature added support of namespaces to template code
+
+ 08.11.2014 - 10.11.2014
+ - bugfix subtemplate called in nocache mode could be called with wrong compile_id when it did change on one of the calling templates
+ - improvement add code of template functions called in nocache mode dynamically to cache file (related to bugfix of 01.11.2014)
+ - bugfix Debug Console did not include all data from merged compiled subtemplates
+
+ 04.11.2014
+ - new feature $smarty->debugging = true; => overwrite existing Debug Console window (old behaviour)
+ $smarty->debugging = 2; => individual Debug Console window by template name
+
+ 03.11.2014
+ - bugfix Debug Console did not show included subtemplates since 3.1.17 (forum 25301)
+ - bugfix Modifier debug_print_var did not limit recursion or prevent recursive object display at Debug Console
+ (ATTENTION: parameter order has changed to be able to specify maximum recursion)
+ - bugfix Debug consol did not include subtemplate information with $smarty->merge_compiled_includes = true
+ - improvement The template variables are no longer displayed as objects on the Debug Console
+ - improvement $smarty->createData($parent = null, $name = null) new optional name parameter for display at Debug Console
+ - addition of some hooks for future extension of Debug Console
+
+ 01.11.2014
+ - bugfix and enhancement on subtemplate {include} and template {function} tags.
+ * Calling a template which has a nocache section could fail if it was called from a cached and a not cached subtemplate.
+ * Calling the same subtemplate cached and not cached with the $smarty->merge_compiled_includes enabled could cause problems
+ * Many smaller related changes
+
+ 30.10.2014
+ - bugfix access to class constant by object like {$object::CONST} or variable class name {$class::CONST} did not work (forum 25301)
+
+ 26.10.2014
+ - bugfix E_NOTICE message was created during compilation when ASP tags '<%' or '%>' are in template source text
+ - bugfix merge_compiled_includes option failed when caching enables and same subtemplate was included cached and not cached
+
+ ===== 3.1.21 ===== (18.10.2014)
+ 18.10.2014
+ - composer moved to github
+
+ 17.10.2014
+ - bugfix on $php_handling security and optimization of smarty_internal_parsetree (Thue Kristensen)
+
+ 16.10.2014
+ - bugfix composer.json update
+
+ 15.10.2014
+ - bugfix calling a new created cache file with fetch() and Smarty::CACHING_LIFETIME_SAVED multiple times did fail (forum 22350)
+
+ 14.10.2014
+ - bugfix any tag placed within "<script language=php>" will throw a security exception to close all thinkable holes
+ - bugfix classmap in root composer.json should start at "libs/..."
+ - improvement cache is_file(file_exists) results of loadPlugin() to avoid unnecessary calls during compilation (Issue 201}
+
+ 12.10.2014
+ - bugfix a comment like "<script{*foo*} language=php>" bypassed $php_handling checking (Thue Kristensen)
+ - bugfix change of 08.10.2014 could create E_NOTICE meassage when using "<?php" tags
+ - bugfix "<script language=php>" with $php_handling PHP_PASSTHRU was executed in {nocache} sections
+
+ ===== 3.1.20 ===== (09.10.2014)
+ 08.10.2014
+ - bugfix security mode of "<script language=php>" must be controlled by $php_handling property (Thue Kristensen)
+
+ 01.10.2014
+ - bugfix template resource of inheritance blocks could get invalid if the default resource type is not 'file'(Issue 202)
+ - bugfix existing child {block} tag must override parent {block} tag append / prepend setting (topic 25259)
+
+ 02.08.2014
+ - bugfix modifier wordwrap did output break string wrong if first word was exceeding length with cut = true (topic 25193)
+
+ 24.07.2014
+ - bugfix cache clear when cache folder does not exist
+
+ 16.07.2014
+ - enhancement remove BOM automatically from template source (topic 25161)
+
+ 04.07.2014
+ - bugfix the bufix of 02.06.2014 broke correct handling of child templates with same name but different template folders in extends resource (issue 194 and topic 25099)
+
+ ===== 3.1.19 ===== (30.06.2014)
+ 20.06.2014
+ - bugfix template variables could not be passed as parameter in {include} when the include was in a {nocache} section (topic 25131)
+
+ 17.06.2014
+ - bugfix large template text of some charsets could cause parsing errors (topic 24630)
+
+ 08.06.2014
+ - bugfix registered objects did not work after spelling fixes of 06.06.2014
+ - bugfix {block} tags within {literal} .. {/literal} got not displayed correctly (topic 25024)
+ - bugfix UNC WINDOWS PATH like "\\psf\path\to\dir" did not work as template directory (Issue 192)
+ - bugfix {html_image} security check did fail on files relative to basedir (Issue 191)
+
+ 06.06.2014
+ - fixed PHPUnit outputFilterTrimWhitespaceTests.php assertion of test result
+ - fixed spelling, PHPDoc , minor errors, code cleanup
+
+ 02.06.2014
+ - using multiple cwd with relative template dirs could result in identical compiled file names. (issue 194 and topic 25099)
+
+ 19.04.2014
+ - bugfix calling createTemplate(template, data) with empty data array caused notice of array to string conversion (Issue 189)
+ - bugfix clearCompiledTemplate() did not delete files on WINDOWS when a compile_id was specified
+
+ 18.04.2014
+ - revert bugfix of 5.4.2014 because %-e date format is not supported on all operating systems
+
+ ===== 3.1.18 ===== (07.04.2014)
+ 06.04.2014
+ - bugfix template inheritance fail when using custom resource after patch of 8.3.2014 (Issue 187)
+ - bugfix update of composer file (Issue 168 and 184)
+
+ 05.04.2014
+ - bugfix default date format leads to extra spaces when displaying dates with single digit days (Issue 165)
+
+ 26.03.2014
+ - bugfix Smart_Resource_Custom should not lowercase the resource name (Issue 183)
+
+ 24.03.2014
+ - bugfix using a {foreach} property like @iteration could fail when used in inheritance parent templates (Issue 182)
+
+ 20.03.2014
+ - bugfix $smarty->auto_literal and mbsting.func_overload 2, 6 or 7 did fail (forum topic 24899)
+
+ 18.03.2014
+ - revert change of 17.03.2014
+
+17.03.2014
+ - bugfix $smarty->auto_literal and mbsting.func_overload 2, 6 or 7 did fail (forum topic 24899)
+
+ 15.03.2014
+ - bugfix Smarty_CacheResource_Keyvaluestore did use different keys on read/writes and clearCache() calls (Issue 169)
+
+ 13.03.2014
+ - bugfix clearXxx() change of 27.1.2014 did not work when specifing cache_id or compile_id (forum topic 24868 and 24867)
+
+ ===== 3.1.17 =====
+ 08.03.2014
+ - bugfix relative file path {include} within {block} of child templates did throw exception on first call (Issue 177)
+
+ 17.02.2014
+ - bugfix Smarty failed when executing PHP on HHVM (Hip Hop 2.4) because uniqid('',true) does return string with ',' (forum topic 20343)
+
+ 16.02.2014
+ - bugfix a '//' or '\\' in template_dir path could produce wrong path on relative filepath in {include} (Issue 175)
+
+ 05.02.2014
+ - bugfix shared.literal_compiler_param.php did throw an exception when literal did contain a '-' (smarty-developers group)
+
+ 27.01.2014
+ - bugfix $smarty->debugging = true; did show the variable of the $smarty object not the variables used in display() call (forum topic 24764)
+ - bugfix clearCompiledTemplate(), clearAll() and clear() should use realpath to avoid possible exception from RecursiveDirectoryIterator (Issue 171)
+
+ 26.01.2014
+ - bugfix undo block nesting checks for {nocache} for reasons like forum topic 23280 (forum topic 24762)
+
+ 18.01.2014
+ - bugfix the compiler did fail when using template inheritance and recursive {include} (smarty-developers group)
+
+ 11.01.2014
+ - bugfix "* }" (spaces before right delimiter) was interpreted by mistake as comment end tag (Issue 170)
+ - internals content cache should be clear when updating cache file
+
+ 08.01.2014
+ - bugfix Smarty_CacheResource_Custom did not handle template resource type specifications on clearCache() calls (Issue 169)
+ - bugfix SmartyBC.class.php should use require_once to load Smarty.class.php (forum topic 24683)
+
+ ===== 3.1.16 =====
+ 15.12.2013
+ - bugfix {include} with {block} tag handling (forum topic 24599, 24594, 24682) (Issue 161)
+ Read 3.1.16_RELEASE_NOTES for more details
+ - enhancement additional debug output at $smarty->_parserdebug = true;
+
+ 07.11.2013
+ - bugfix too restrictive handling of {include} within {block} tags. 3.1.15 did throw errors where 3.1.14 did not (forum topic 24599)
+ - bugfix compiler could fail if PHP mbstring.func_overload is enabled (Issue 164)
+
+ 28.10.2013
+ - bugfix variable resource name at custom resource plugin did not work within {block} tags (Issue 163)
+ - bugfix notice "Trying to get property of non-object" removed (Issue 163)
+ - bugfix correction of modifier capitalize fix from 3.10.2013 (issue 159)
+ - bugfix multiple {block}s with same name in parent did not work (forum topic 24631)
+
+ 20.10.2013
+ - bugfix a variable file name at {extends} tag did fail (forum topic 24618)
+
+ 14.10.2013
+ - bugfix yesterdays fix could result in an undefined variable
+
+ 13.10.2013
+ - bugfix variable names on {include} in template inheritance did unextepted error message (forum topic 24594) (Issue 161)
+.- bugfix relative includes with same name like {include './foo.tpl'} from different folder failed (forum topic 24590)(Issue 161)
+
+ 04.10.2013
+ - bugfix variable file names at {extends} had been disbabled by mistake with the rewrite of
+ template inheritance of 24.08.2013 (forum topic 24585)
+
+03.10.2013
+ - bugfix loops using modifier capitalize did eat up memory (issue 159)
+
+ ===== Smarty 3.1.15 =====
+01.10.2013
+ - use current delimiters in compiler error messages (issue 157)
+ - improvement on performance when using error handler and multiple template folders (issue 152)
+
+17.09.2013
+ - improvement added patch for additional SmartyCompilerException properties for better access to scource information (forum topic 24559)
+
+16.09.2013
+ - bugfix recompiled templates did not show on first request with zend opcache cache (forum topic 24320)
+
+13.09.2013
+ - bugfix html_select_time defaulting error for the Meridian dropdown (forum topic 24549)
+
+09.09.2012
+- bugfix incorrect compiled code with array(object,method) callback at registered Variable Filter (forum topic 24542)
+
+27.08.2013
+- bugfix delimiter followed by linebreak did not work as auto literal after update from 24.08.2013 (forum topic 24518)
+
+24.08.2013
+- bugfix and enhancement
+ Because several recent problems with template inheritance the {block} tag compiler has been rewriten
+ - Error messages shown now the correct child template file and line number
+ - The compiler could fail on some larger UTF-8 text block (forum topic 24455)
+ - The {strip} tag can now be placed outside {block} tags in child templates (forum topic 24289)
+- change SmartyException::$escape is now false by default
+- change PHP traceback has been remove for SmartyException and SmartyCompilerException
+
+14.08.2013
+- bugfix compiled filepath of config file did not observe different config_dir (forum topic 24493)
+
+13.08.2013
+- bugfix the internal resource cache did not observe config_dir changes (forum topic 24493)
+
+12.08.2013
+- bugfix internal $tmpx variables must be unique over all inheritance templates (Issue 149)
+
+10.08.2013
+- bugfix a newline was eaten when a <?xml ... ?> was passed by a Smarty variable and caching was enabled (forum topic 24482)
+
+29.07.2013
+- bugfix headers already send warning thrown when using 'SMARTY_DEBUG=on' from URL (Issue 148)
+
+27.07.2013
+- enhancement allow access to properties of registered opjects for Smarty2 BC (forum topic 24344)
+
+26.07.2013
+- bugfix template inheritance nesting problem (forum topic 24387)
+
+15.7.2013
+- update code generated by PSR-2 standards fixer which introduced PHP 5.4 incompatibilities of 14.7.2013
+
+14.7.2013
+- bugfix increase of internal maximum parser stacksize to allow more complex tag code {forum topic 24426}
+- update for PHP 5.4 compatibility
+- reformat source to PSR-2 standard
+
+12.7.2013
+- bugfix Do not remove '//' from file path at normalization (Issue 142)
+
+2.7.2013
+- bugfix trimwhitespace would replace captured items in wrong order (forum topic 24387)
+
+===== Smarty-3.1.14 =====
+27.06.2013
+- bugfix removed PHP 5.5 deprecated preg_replace /e option in modifier capitalize (forum topic 24389)
+
+17.06.2013
+- fixed spelling in sources and documentation (from smarty-developers forum Veres Lajos)
+- enhancement added constant SMARTY::CLEAR_EXPIRED for the change of 26.05.2013 (forum topic 24310)
+- bugfix added smarty_security.php to composer.json (Issue 135)
+
+26.05.2013
+- enhancement an expire_time of -1 in clearCache() and clearAllCache() will delete outdated cache files
+ by their individual cache_lifetime used at creation (forum topic 24310)
+
+21.05.2013
+- bugfix modifier strip_tags:true was compiled into wrong code (Forum Topic 24287)
+- bugfix /n after ?> in Smarty.class.php did start output buffering (Issue 138)
+
+25.04.2013
+- bugfix escape and wordrap modifier could be compiled into wrong code when used in {nocache}{/nocache}
+ section but caching is disabled (Forum Topic 24260)
+
+05.04.2013
+- bugfix post filter must not run when compiling inheritance child blocks (Forum Topic 24094)
+- bugfix after the fix for Issue #130 compiler exceptions got double escaped (Forum Topic 24199)
+
+28.02.2013
+- bugfix nocache blocks could be lost when using CACHING_LIFETIME_SAVED (Issue #133)
+- bugfix Compile ID gets nulled when compiling child blocks (Issue #134)
+
+
+24.01.2013
+- bugfix wrong tag type in smarty_internal_templatecompilerbase.php could cause wrong plugin search order (Forum Topic 24028)
+
+===== Smarty-3.1.13 =====
13.01.2013
- enhancement allow to disable exception message escaping by SmartyException::$escape = false; (Issue #130)
09.01.2013
-- bugfix compilation did fail when a prefilter did modify an {extends} tag (Forum Topic 23966)
+- bugfix compilation did fail when a prefilter did modify an {extends} tag c
- bugfix template inheritance could fail if nested {block} tags in childs did contain {$smarty.block.child} (Issue #127)
- bugfix template inheritance could fail if {block} tags in childs did have similar name as used plugins (Issue #128)
- added abstract method declaration doCompile() in Smarty_Internal_TemplateCompilerBase (Forum Topic 23969)
@@ -417,7 +1128,7 @@
03/09/2011
- bugfix createTemplate() must default to cache_id and compile_id of Smarty object
- bugfix Smarty_CacheResource_KeyValueStore must include $source->uid in cache filepath to keep templates with same
- name but different folders seperated
+ name but different folders separated
- added cacheresource.apc.php example in demo folder
02/09/2011
@@ -470,7 +1181,7 @@
15/07/2011
- bugfix individual cache_lifetime of {include} did not work correctly inside {block} tags
-- added caches for Smarty_Template_Source and Smarty_Template_Compiled to reduce I/O for multiple cache_id rendering
+- added caches for Smarty_Internal_TemplateSource and Smarty_Internal_TemplateCompiled to reduce I/O for multiple cache_id rendering
14/07/2011
- made Smarty::loadPlugin() respect the include_path if required
@@ -608,7 +1319,7 @@
- changed ./ and ../ behaviour
14/02/2011
-- added {block ... hide} option to supress block if no child is defined
+- added {block ... hide} option to suppress block if no child is defined
13/02/2011
- update handling of recursive subtemplate calls
@@ -722,7 +1433,7 @@
- bugfix on compiler object destruction. compiler_object property was by mistake unset.
09/03/2011
--bugfix a variable filter should run before modifers on an output tag (see change of 23/07/2010)
+-bugfix a variable filter should run before modifiers on an output tag (see change of 23/07/2010)
08/03/2011
- bugfix loading config file without section should load only defaults
@@ -1026,10 +1737,10 @@ request_use_auto_globals
- bugfix passing scope attributes in doublequoted strings did not work at {include} {assign} and {append}
25/07/2010
-- another bugfix of change from 23/07/2010 when compiling modifer
+- another bugfix of change from 23/07/2010 when compiling modifier
24/07/2010
-- bugfix of change from 23/07/2010 when compiling modifer
+- bugfix of change from 23/07/2010 when compiling modifier
23/07/2010
- changed execution order. A variable filter does now run before modifiers on output of variables
@@ -1336,7 +2047,7 @@ request_use_auto_globals
- bugfix on {if} tags
01/12/2010
-- changed back modifer handling in parser. Some restrictions still apply:
+- changed back modifier handling in parser. Some restrictions still apply:
if modifiers are used in side {if...} expression or in mathematical expressions
parentheses must be used.
- bugfix the {function..} tag did not accept the name attribute in double quotes
@@ -1948,7 +2659,7 @@ NOTICE: existing compiled template and cache files must be deleted
- fixed exceptions in function plugins
- fixed notice error in Smarty.class.php
- allow chained objects to span multiple lines
-- fixed error in modifers
+- fixed error in modifiers
03/20/2009
- moved /plugins folder into /libs folder
@@ -1956,7 +2667,7 @@ NOTICE: existing compiled template and cache files must be deleted
- autoappend a directory separator if the xxxxx_dir definition have no trailing one
03/19/2009
-- allow array definition as modifer parameter
+- allow array definition as modifier parameter
- changed modifier to use multi byte string funktions.
03/17/2009
diff --git a/include/smarty/composer.json b/include/smarty/composer.json
new file mode 100644
index 000000000..2a1a43ae7
--- /dev/null
+++ b/include/smarty/composer.json
@@ -0,0 +1,43 @@
+{
+ "name": "smarty/smarty",
+ "type": "library",
+ "description": "Smarty - the compiling PHP template engine",
+ "keywords": ["templating"],
+ "homepage": "http://www.smarty.net",
+ "license": "LGPL-3.0",
+ "authors": [
+ {
+ "name": "Monte Ohrt",
+ "email": "monte@ohrt.com"
+ },
+ {
+ "name": "Uwe Tews",
+ "email": "uwe.tews@googlemail.com"
+ },
+ {
+ "name": "Rodney Rehm",
+ "email": "rodney.rehm@medialize.de"
+ }
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/smarty",
+ "issues": "https://github.com/smarty-php/smarty/issues",
+ "forum": "http://www.smarty.net/forums/"
+ },
+ "require": {
+ "php": ">=5.2"
+ },
+ "autoload": {
+ "classmap": [
+ "libs/Smarty.class.php",
+ "libs/SmartyBC.class.php",
+ "libs/sysplugins/"
+ ]
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1.x-dev"
+ }
+ }
+
+}
diff --git a/include/smarty/lexer/smarty_internal_configfilelexer.plex b/include/smarty/lexer/smarty_internal_configfilelexer.plex
new file mode 100644
index 000000000..9a45a5f00
--- /dev/null
+++ b/include/smarty/lexer/smarty_internal_configfilelexer.plex
@@ -0,0 +1,318 @@
+<?php
+/**
+* Smarty Internal Plugin Configfilelexer
+*
+* This is the lexer to break the config file source into tokens
+* @package Smarty
+* @subpackage Config
+* @author Uwe Tews
+*/
+/**
+* Smarty_Internal_Configfilelexer
+*
+* This is the config file lexer.
+* It is generated from the smarty_internal_configfilelexer.plex file
+*
+* @package Smarty
+* @subpackage Compiler
+* @author Uwe Tews
+*/
+class Smarty_Internal_Configfilelexer
+{
+ /**
+ * Source
+ *
+ * @var string
+ */
+ public $data;
+ /**
+ * byte counter
+ *
+ * @var int
+ */
+ public $counter;
+ /**
+ * token number
+ *
+ * @var int
+ */
+ public $token;
+ /**
+ * token value
+ *
+ * @var string
+ */
+ public $value;
+ /**
+ * current line
+ *
+ * @var int
+ */
+ public $line;
+ /**
+ * state number
+ *
+ * @var int
+ */
+ public $state = 1;
+ /**
+ * Smarty object
+ *
+ * @var Smarty
+ */
+ public $smarty = null;
+ /**
+ * compiler object
+ *
+ * @var Smarty_Internal_Config_File_Compiler
+ */
+ private $compiler = null;
+ /**
+ * copy of config_booleanize
+ *
+ * @var bool
+ */
+ private $configBooleanize = false;
+ /**
+ * trace file
+ *
+ * @var resource
+ */
+ public $yyTraceFILE;
+ /**
+ * trace prompt
+ *
+ * @var string
+ */
+ public $yyTracePrompt;
+ /**
+ * state names
+ *
+ * @var array
+ */
+ public $state_name = array(1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE');
+
+ /**
+ * storage for assembled token patterns
+ *
+ * @var string
+ */
+ private $yy_global_pattern1 = null;
+ private $yy_global_pattern2 = null;
+ private $yy_global_pattern3 = null;
+ private $yy_global_pattern4 = null;
+ private $yy_global_pattern5 = null;
+ private $yy_global_pattern6 = null;
+
+ /**
+ * token names
+ *
+ * @var array
+ */
+ public $smarty_token_names = array( // Text for parser error messages
+ );
+
+ /**
+ * constructor
+ *
+ * @param string $data template source
+ * @param Smarty_Internal_Config_File_Compiler $compiler
+ */
+ function __construct($data, Smarty_Internal_Config_File_Compiler $compiler)
+ {
+ // set instance object
+ self::instance($this);
+ $this->data = $data . "\n"; //now all lines are \n-terminated
+ $this->counter = 0;
+ if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
+ $this->counter += strlen($match[0]);
+ }
+ $this->line = 1;
+ $this->compiler = $compiler;
+ $this->smarty = $compiler->smarty;
+ $this->configBooleanize = $this->smarty->config_booleanize;
+ }
+
+ public static function &instance($new_instance = null)
+ {
+ static $instance = null;
+ if (isset($new_instance) && is_object($new_instance)) {
+ $instance = $new_instance;
+ }
+ return $instance;
+ }
+
+ public function PrintTrace()
+ {
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = '<br>';
+ }
+
+
+/*!lex2php
+%input $this->data
+%counter $this->counter
+%token $this->token
+%value $this->value
+%line $this->line
+commentstart = /#|;/
+openB = /\[/
+closeB = /\]/
+section = /.*?(?=[\.=\[\]\r\n])/
+equal = /=/
+whitespace = /[ \t\r]+/
+dot = /\./
+id = /[0-9]*[a-zA-Z_]\w*/
+newline = /\n/
+single_quoted_string = /'[^'\\]*(?:\\.[^'\\]*)*'(?=[ \t\r]*[\n#;])/
+double_quoted_string = /"[^"\\]*(?:\\.[^"\\]*)*"(?=[ \t\r]*[\n#;])/
+tripple_quotes = /"""/
+tripple_quotes_end = /"""(?=[ \t\r]*[\n#;])/
+text = /[\S\s]/
+float = /\d+\.\d+(?=[ \t\r]*[\n#;])/
+int = /\d+(?=[ \t\r]*[\n#;])/
+maybe_bool = /[a-zA-Z]+(?=[ \t\r]*[\n#;])/
+naked_string = /[^\n]+?(?=[ \t\r]*\n)/
+*/
+
+/*!lex2php
+%statename START
+
+commentstart {
+ $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
+ $this->yypushstate(self::COMMENT);
+}
+openB {
+ $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
+ $this->yypushstate(self::SECTION);
+}
+closeB {
+ $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
+}
+equal {
+ $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
+ $this->yypushstate(self::VALUE);
+}
+whitespace {
+ return false;
+}
+newline {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+}
+id {
+ $this->token = Smarty_Internal_Configfileparser::TPC_ID;
+}
+text {
+ $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
+}
+
+*/
+
+/*!lex2php
+%statename VALUE
+
+whitespace {
+ return false;
+}
+float {
+ $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
+ $this->yypopstate();
+}
+int {
+ $this->token = Smarty_Internal_Configfileparser::TPC_INT;
+ $this->yypopstate();
+}
+tripple_quotes {
+ $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
+ $this->yypushstate(self::TRIPPLE);
+}
+single_quoted_string {
+ $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
+ $this->yypopstate();
+}
+double_quoted_string {
+ $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
+ $this->yypopstate();
+}
+maybe_bool {
+ if (!$this->configBooleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no")) ) {
+ $this->yypopstate();
+ $this->yypushstate(self::NAKED_STRING_VALUE);
+ return true; //reprocess in new state
+ } else {
+ $this->token = Smarty_Internal_Configfileparser::TPC_BOOL;
+ $this->yypopstate();
+ }
+}
+naked_string {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->yypopstate();
+}
+newline {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->value = "";
+ $this->yypopstate();
+}
+
+*/
+
+/*!lex2php
+%statename NAKED_STRING_VALUE
+
+naked_string {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->yypopstate();
+}
+
+*/
+
+/*!lex2php
+%statename COMMENT
+
+whitespace {
+ return false;
+}
+naked_string {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+}
+newline {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+ $this->yypopstate();
+}
+
+*/
+
+/*!lex2php
+%statename SECTION
+
+dot {
+ $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
+}
+section {
+ $this->token = Smarty_Internal_Configfileparser::TPC_SECTION;
+ $this->yypopstate();
+}
+
+*/
+/*!lex2php
+%statename TRIPPLE
+
+tripple_quotes_end {
+ $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END;
+ $this->yypopstate();
+ $this->yypushstate(self::START);
+}
+text {
+ $to = strlen($this->data);
+ preg_match("/\"\"\"[ \t\r]*[\n#;]/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
+ if (isset($match[0][1])) {
+ $to = $match[0][1];
+ } else {
+ $this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
+ }
+ $this->value = substr($this->data,$this->counter,$to-$this->counter);
+ $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT;
+}
+*/
+
+}
diff --git a/include/smarty/lexer/smarty_internal_configfileparser.y b/include/smarty/lexer/smarty_internal_configfileparser.y
new file mode 100644
index 000000000..ac961772d
--- /dev/null
+++ b/include/smarty/lexer/smarty_internal_configfileparser.y
@@ -0,0 +1,362 @@
+/**
+* Smarty Internal Plugin Configfileparser
+*
+* This is the config file parser
+*
+*
+* @package Smarty
+* @subpackage Config
+* @author Uwe Tews
+*/
+%name TPC_
+%declare_class {
+/**
+* Smarty Internal Plugin Configfileparse
+*
+* This is the config file parser.
+* It is generated from the smarty_internal_configfileparser.y file
+* @package Smarty
+* @subpackage Compiler
+* @author Uwe Tews
+*/
+class Smarty_Internal_Configfileparser
+}
+%include_class
+{
+ /**
+ * result status
+ *
+ * @var bool
+ */
+ public $successful = true;
+ /**
+ * return value
+ *
+ * @var mixed
+ */
+ public $retvalue = 0;
+ /**
+ * @var
+ */
+ public $yymajor;
+ /**
+ * lexer object
+ *
+ * @var Smarty_Internal_Configfilelexer
+ */
+ private $lex;
+ /**
+ * internal error flag
+ *
+ * @var bool
+ */
+ private $internalError = false;
+ /**
+ * compiler object
+ *
+ * @var Smarty_Internal_Config_File_Compiler
+ */
+ public $compiler = null;
+ /**
+ * smarty object
+ *
+ * @var Smarty
+ */
+ public $smarty = null;
+ /**
+ * copy of config_overwrite property
+ *
+ * @var bool
+ */
+ private $configOverwrite = false;
+ /**
+ * copy of config_read_hidden property
+ *
+ * @var bool
+ */
+ private $configReadHidden = false;
+ /**
+ * helper map
+ *
+ * @var array
+ */
+ private static $escapes_single = Array('\\' => '\\',
+ '\'' => '\'');
+
+ /**
+ * constructor
+ *
+ * @param Smarty_Internal_Configfilelexer $lex
+ * @param Smarty_Internal_Config_File_Compiler $compiler
+ */
+ function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler)
+ {
+ // set instance object
+ self::instance($this);
+ $this->lex = $lex;
+ $this->smarty = $compiler->smarty;
+ $this->compiler = $compiler;
+ $this->configOverwrite = $this->smarty->config_overwrite;
+ $this->configReadHidden = $this->smarty->config_read_hidden;
+ }
+
+ /**
+ * @param null $new_instance
+ *
+ * @return null
+ */
+ public static function &instance($new_instance = null)
+ {
+ static $instance = null;
+ if (isset($new_instance) && is_object($new_instance)) {
+ $instance = $new_instance;
+ }
+ return $instance;
+ }
+
+ /**
+ * parse optional boolean keywords
+ *
+ * @param string $str
+ *
+ * @return bool
+ */
+ private function parse_bool($str)
+ {
+ $str = strtolower($str);
+ if (in_array($str, array('on', 'yes', 'true'))) {
+ $res = true;
+ } else {
+ $res = false;
+ }
+ return $res;
+ }
+
+ /**
+ * parse single quoted string
+ * remove outer quotes
+ * unescape inner quotes
+ *
+ * @param string $qstr
+ *
+ * @return string
+ */
+ private static function parse_single_quoted_string($qstr)
+ {
+ $escaped_string = substr($qstr, 1, strlen($qstr) - 2); //remove outer quotes
+
+ $ss = preg_split('/(\\\\.)/', $escaped_string, - 1, PREG_SPLIT_DELIM_CAPTURE);
+
+ $str = "";
+ foreach ($ss as $s) {
+ if (strlen($s) === 2 && $s[0] === '\\') {
+ if (isset(self::$escapes_single[$s[1]])) {
+ $s = self::$escapes_single[$s[1]];
+ }
+ }
+ $str .= $s;
+ }
+ return $str;
+ }
+
+ /**
+ * parse double quoted string
+ *
+ * @param string $qstr
+ *
+ * @return string
+ */
+ private static function parse_double_quoted_string($qstr)
+ {
+ $inner_str = substr($qstr, 1, strlen($qstr) - 2);
+ return stripcslashes($inner_str);
+ }
+
+ /**
+ * parse triple quoted string
+ *
+ * @param string $qstr
+ *
+ * @return string
+ */
+ private static function parse_tripple_double_quoted_string($qstr)
+ {
+ return stripcslashes($qstr);
+ }
+
+ /**
+ * set a config variable in target array
+ *
+ * @param array $var
+ * @param array $target_array
+ */
+ private function set_var(Array $var, Array &$target_array)
+ {
+ $key = $var["key"];
+ $value = $var["value"];
+
+ if ($this->configOverwrite || !isset($target_array['vars'][$key])) {
+ $target_array['vars'][$key] = $value;
+ } else {
+ settype($target_array['vars'][$key], 'array');
+ $target_array['vars'][$key][] = $value;
+ }
+ }
+
+ /**
+ * add config variable to global vars
+ *
+ * @param array $vars
+ */
+ private function add_global_vars(Array $vars)
+ {
+ if (!isset($this->compiler->config_data['vars'])) {
+ $this->compiler->config_data['vars'] = Array();
+ }
+ foreach ($vars as $var) {
+ $this->set_var($var, $this->compiler->config_data);
+ }
+ }
+
+ /**
+ * add config variable to section
+ *
+ * @param string $section_name
+ * @param array $vars
+ */
+ private function add_section_vars($section_name, Array $vars)
+ {
+ if (!isset($this->compiler->config_data['sections'][$section_name]['vars'])) {
+ $this->compiler->config_data['sections'][$section_name]['vars'] = Array();
+ }
+ foreach ($vars as $var) {
+ $this->set_var($var, $this->compiler->config_data['sections'][$section_name]);
+ }
+ }
+}
+
+%token_prefix TPC_
+
+%parse_accept
+{
+ $this->successful = !$this->internalError;
+ $this->internalError = false;
+ $this->retvalue = $this->_retvalue;
+}
+
+%syntax_error
+{
+ $this->internalError = true;
+ $this->yymajor = $yymajor;
+ $this->compiler->trigger_config_file_error();
+}
+
+%stack_overflow
+{
+ $this->internalError = true;
+ $this->compiler->trigger_config_file_error("Stack overflow in configfile parser");
+}
+
+// Complete config file
+start(res) ::= global_vars sections. {
+ res = null;
+}
+
+// Global vars
+global_vars(res) ::= var_list(vl). {
+ $this->add_global_vars(vl);
+ res = null;
+}
+
+// Sections
+sections(res) ::= sections section. {
+ res = null;
+}
+
+sections(res) ::= . {
+ res = null;
+}
+
+section(res) ::= OPENB SECTION(i) CLOSEB newline var_list(vars). {
+ $this->add_section_vars(i, vars);
+ res = null;
+}
+
+section(res) ::= OPENB DOT SECTION(i) CLOSEB newline var_list(vars). {
+ if ($this->configReadHidden) {
+ $this->add_section_vars(i, vars);
+ }
+ res = null;
+}
+
+// Var list
+var_list(res) ::= var_list(vl) newline. {
+ res = vl;
+}
+
+var_list(res) ::= var_list(vl) var(v). {
+ res = array_merge(vl, Array(v));
+}
+
+var_list(res) ::= . {
+ res = Array();
+}
+
+
+// Var
+var(res) ::= ID(id) EQUAL value(v). {
+ res = Array("key" => id, "value" => v);
+}
+
+
+value(res) ::= FLOAT(i). {
+ res = (float) i;
+}
+
+value(res) ::= INT(i). {
+ res = (int) i;
+}
+
+value(res) ::= BOOL(i). {
+ res = $this->parse_bool(i);
+}
+
+value(res) ::= SINGLE_QUOTED_STRING(i). {
+ res = self::parse_single_quoted_string(i);
+}
+
+value(res) ::= DOUBLE_QUOTED_STRING(i). {
+ res = self::parse_double_quoted_string(i);
+}
+
+value(res) ::= TRIPPLE_QUOTES(i) TRIPPLE_TEXT(c) TRIPPLE_QUOTES_END(ii). {
+ res = self::parse_tripple_double_quoted_string(c);
+}
+
+value(res) ::= TRIPPLE_QUOTES(i) TRIPPLE_QUOTES_END(ii). {
+ res = '';
+}
+
+value(res) ::= NAKED_STRING(i). {
+ res = i;
+}
+
+// NOTE: this is not a valid rule
+// It is added hier to produce a usefull error message on a missing '=';
+value(res) ::= OTHER(i). {
+ res = i;
+}
+
+
+// Newline and comments
+newline(res) ::= NEWLINE. {
+ res = null;
+}
+
+newline(res) ::= COMMENTSTART NEWLINE. {
+ res = null;
+}
+
+newline(res) ::= COMMENTSTART NAKED_STRING NEWLINE. {
+ res = null;
+}
diff --git a/include/smarty/lexer/smarty_internal_templatelexer.plex b/include/smarty/lexer/smarty_internal_templatelexer.plex
new file mode 100644
index 000000000..721b528c6
--- /dev/null
+++ b/include/smarty/lexer/smarty_internal_templatelexer.plex
@@ -0,0 +1,672 @@
+<?php
+/*
+ * This file is part of Smarty.
+ *
+ * (c) 2015 Uwe Tews
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Smarty_Internal_Templatelexer
+ * This is the template file lexer.
+ * It is generated from the smarty_internal_templatelexer.plex file
+ *
+ *
+ * @author Uwe Tews <uwe.tews@googlemail.com>
+ */
+class Smarty_Internal_Templatelexer
+{
+ /**
+ * Source
+ *
+ * @var string
+ */
+ public $data;
+
+ /**
+ * byte counter
+ *
+ * @var int
+ */
+ public $counter;
+
+ /**
+ * token number
+ *
+ * @var int
+ */
+ public $token;
+
+ /**
+ * token value
+ *
+ * @var string
+ */
+ public $value;
+
+ /**
+ * current line
+ *
+ * @var int
+ */
+ public $line;
+
+ /**
+ * tag start line
+ *
+ * @var
+ */
+ public $taglineno;
+
+ /**
+ * php code type
+ *
+ * @var string
+ */
+ public $phpType = '';
+
+ /**
+ * escaped left delimiter
+ *
+ * @var string
+ */
+ public $ldel = '';
+
+ /**
+ * escaped left delimiter length
+ *
+ * @var int
+ */
+ public $ldel_length = 0;
+
+ /**
+ * escaped right delimiter
+ *
+ * @var string
+ */
+ public $rdel = '';
+
+ /**
+ * escaped right delimiter length
+ *
+ * @var int
+ */
+ public $rdel_length = 0;
+
+ /**
+ * state number
+ *
+ * @var int
+ */
+ public $state = 1;
+
+ /**
+ * Smarty object
+ *
+ * @var Smarty
+ */
+ public $smarty = null;
+
+ /**
+ * compiler object
+ *
+ * @var Smarty_Internal_TemplateCompilerBase
+ */
+ public $compiler = null;
+
+ /**
+ * literal tag nesting level
+ *
+ * @var int
+ */
+ private $literal_cnt = 0;
+
+ /**
+ * PHP start tag string
+ *
+ * @var string
+ */
+
+ /**
+ * trace file
+ *
+ * @var resource
+ */
+ public $yyTraceFILE;
+
+ /**
+ * trace prompt
+ *
+ * @var string
+ */
+ public $yyTracePrompt;
+
+ /**
+ * XML flag true while processing xml
+ *
+ * @var bool
+ */
+ public $is_xml = false;
+
+ /**
+ * state names
+ *
+ * @var array
+ */
+ public $state_name = array(1 => 'TEXT', 2 => 'TAG', 3 => 'TAGBODY', 4 => 'LITERAL', 5 => 'DOUBLEQUOTEDSTRING',);
+
+ /**
+ * storage for assembled token patterns
+ *
+ * @var string
+ */
+ private $yy_global_pattern1 = null;
+
+ private $yy_global_pattern2 = null;
+
+ private $yy_global_pattern3 = null;
+
+ private $yy_global_pattern4 = null;
+
+ private $yy_global_pattern5 = null;
+
+ /**
+ * token names
+ *
+ * @var array
+ */
+ public $smarty_token_names = array( // Text for parser error messages
+ 'NOT' => '(!,not)',
+ 'OPENP' => '(',
+ 'CLOSEP' => ')',
+ 'OPENB' => '[',
+ 'CLOSEB' => ']',
+ 'PTR' => '->',
+ 'APTR' => '=>',
+ 'EQUAL' => '=',
+ 'NUMBER' => 'number',
+ 'UNIMATH' => '+" , "-',
+ 'MATH' => '*" , "/" , "%',
+ 'INCDEC' => '++" , "--',
+ 'SPACE' => ' ',
+ 'DOLLAR' => '$',
+ 'SEMICOLON' => ';',
+ 'COLON' => ':',
+ 'DOUBLECOLON' => '::',
+ 'AT' => '@',
+ 'HATCH' => '#',
+ 'QUOTE' => '"',
+ 'BACKTICK' => '`',
+ 'VERT' => '"|" modifier',
+ 'DOT' => '.',
+ 'COMMA' => '","',
+ 'QMARK' => '"?"',
+ 'ID' => 'id, name',
+ 'TEXT' => 'text',
+ 'LDELSLASH' => '{/..} closing tag',
+ 'LDEL' => '{...} Smarty tag',
+ 'COMMENT' => 'comment',
+ 'AS' => 'as',
+ 'TO' => 'to',
+ 'PHP' => '"<?php", "<%", "{php}" tag',
+ 'LOGOP' => '"<", "==" ... logical operator',
+ 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition',
+ 'SCOND' => '"is even" ... if condition',
+ );
+
+ /**
+ * constructor
+ *
+ * @param string $data template source
+ * @param Smarty_Internal_TemplateCompilerBase $compiler
+ */
+ function __construct($data, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ $this->data = $data;
+ $this->counter = 0;
+ if (preg_match('~^\xEF\xBB\xBF~i', $this->data, $match)) {
+ $this->counter += strlen($match[0]);
+ }
+ $this->line = 1;
+ $this->smarty = $compiler->smarty;
+ $this->compiler = $compiler;
+ $this->ldel = preg_quote($this->smarty->left_delimiter, '~');
+ $this->ldel_length = strlen($this->smarty->left_delimiter);
+ $this->rdel = preg_quote($this->smarty->right_delimiter, '~');
+ $this->rdel_length = strlen($this->smarty->right_delimiter);
+ $this->smarty_token_names['LDEL'] = $this->smarty->left_delimiter;
+ $this->smarty_token_names['RDEL'] = $this->smarty->right_delimiter;
+ }
+
+ public function PrintTrace()
+ {
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = '<br>';
+ }
+
+ /*
+ * Check if this tag is autoliteral
+ */
+ public function isAutoLiteral ()
+ {
+ return $this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false;
+ }
+
+ /*!lex2php
+ %input $this->data
+ %counter $this->counter
+ %token $this->token
+ %value $this->value
+ %line $this->line
+ linebreak = ~[\t ]*[\r\n]+[\t ]*~
+ text = ~[\S\s]~
+ textdoublequoted = ~([^"\\]*?)((?:\\.[^"\\]*?)*?)(?=(SMARTYldel|\$|`\$|"))~
+ namespace = ~([0-9]*[a-zA-Z_]\w*)?(\\[0-9]*[a-zA-Z_]\w*)+~
+ all = ~[\S\s]+~
+ emptyjava = ~[{][}]~
+ phptag = ~(SMARTYldel\s*php(.*?)SMARTYrdel)|(SMARTYldel\s*[/]phpSMARTYrdel)~
+ phpstart = ~(<[?]((php\s+|=)|\s+))|(<[%])|(<[?]xml\s+)|(<script\s+language\s*=\s*["']?\s*php\s*["']?\s*>)|([?][>])|([%][>])~
+ slash = ~[/]~
+ ldel = ~SMARTYldel\s*~
+ rdel = ~\s*SMARTYrdel~
+ nocacherdel = ~(\s+nocache)?\s*SMARTYrdel~
+ notblockid = ~(?:(?!block)[0-9]*[a-zA-Z_]\w*)~
+ smartyblockchildparent = ~[\$]smarty\.block\.(child|parent)~
+ integer = ~\d+~
+ hex = ~0[xX][0-9a-fA-F]+~
+ math = ~\s*([*]{1,2}|[%/^&]|[<>]{2})\s*~
+ comment = ~SMARTYldel[*]~
+ incdec = ~([+]|[-]){2}~
+ unimath = ~\s*([+]|[-])\s*~
+ openP = ~\s*[(]\s*~
+ closeP = ~\s*[)]~
+ openB = ~\[\s*~
+ closeB = ~\s*\]~
+ dollar = ~[$]~
+ dot = ~[.]~
+ comma = ~\s*[,]\s*~
+ doublecolon = ~[:]{2}~
+ colon = ~\s*[:]\s*~
+ at = ~[@]~
+ hatch = ~[#]~
+ semicolon = ~\s*[;]\s*~
+ equal = ~\s*[=]\s*~
+ space = ~\s+~
+ ptr = ~\s*[-][>]\s*~
+ aptr = ~\s*[=][>]\s*~
+ singlequotestring = ~'[^'\\]*(?:\\.[^'\\]*)*'~
+ backtick = ~[`]~
+ vert = ~[|]~
+ qmark = ~\s*[?]\s*~
+ constant = ~([_]+[A-Z0-9][0-9A-Z_]*|[A-Z][0-9A-Z_]*)(?![0-9A-Z_]*[a-z])~
+ attr = ~\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\s*[=]\s*~
+ id = ~[0-9]*[a-zA-Z_]\w*~
+ literal = ~literal~
+ strip = ~strip~
+ lop = ~\s*(([!=][=]{1,2})|([<][=>]?)|([>][=]?)|[&|]{2})\s*~
+ tlop = ~\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor|(is\s+(not\s+)?(odd|even|div)\s+by))\s+~
+ scond = ~\s+is\s+(not\s+)?(odd|even)~
+ isin = ~\s+is\s+in\s+~
+ as = ~\s+as\s+~
+ to = ~\s+to\s+~
+ step = ~\s+step\s+~
+ block = ~block~
+ if = ~(if|elseif|else if|while)\s+~
+ for = ~for\s+~
+ foreach = ~foreach(?![^\s])~
+ setfilter = ~setfilter\s+~
+ instanceof = ~\s+instanceof\s+~
+ not = ~([!]\s*)|(not\s+)~
+ typecast = ~[(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\s*~
+ double_quote = ~["]~
+ single_quote = ~[']~
+ */
+ /*!lex2php
+ %statename TEXT
+ emptyjava {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+ comment {
+ preg_match("~[*]{$this->rdel}~",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
+ if (isset($match[0][1])) {
+ $to = $match[0][1] + strlen($match[0][0]);
+ } else {
+ $this->compiler->trigger_template_error ("missing or misspelled comment closing tag '*{$this->smarty->right_delimiter}'");
+ }
+ $this->value = substr($this->data,$this->counter,$to-$this->counter);
+ return false;
+ }
+ phptag {
+ $obj = new Smarty_Internal_Compile_Private_Php();
+ $obj->parsePhp($this);
+ }
+ ldel literal rdel {
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
+ $this->yypushstate(self::LITERAL);
+ }
+ }
+ ldel {
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->yypushstate(self::TAG);
+ return true;
+ }
+ }
+ rdel {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+ phpstart {
+ $obj = new Smarty_Internal_Compile_Private_Php();
+ $obj->parsePhp($this);
+ }
+ text {
+ $to = strlen($this->data);
+ preg_match("~($this->ldel)|(<[?]((php\s+|=)|\s+))|(<[%])|(<[?]xml\s+)|(<script\s+language\s*=\s*[\"']?\s*php\s*[\"']?\s*>)|([?][>])|([%][>])~i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
+ if (isset($match[0][1])) {
+ $to = $match[0][1];
+ }
+ $this->value = substr($this->data,$this->counter,$to-$this->counter);
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+ */
+ /*!lex2php
+ %statename TAG
+ ldel if {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+ ldel for {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+ ldel foreach {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+ ldel setfilter {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+ ldel id nocacherdel {
+ $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG;
+ $this->taglineno = $this->line;
+ }
+ ldel slash notblockid rdel {
+ $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG;
+ $this->taglineno = $this->line;
+ }
+ ldel dollar id nocacherdel {
+ if ($this->_yy_stack[count($this->_yy_stack)-1] == self::TEXT) {
+ $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_SIMPELOUTPUT;
+ $this->taglineno = $this->line;
+ } else {
+ $this->value = $this->smarty->left_delimiter;
+ $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+ }
+ ldel slash {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+ ldel {
+ $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+ */
+ /*!lex2php
+ %statename TAGBODY
+ rdel {
+ $this->token = Smarty_Internal_Templateparser::TP_RDEL;
+ $this->yypopstate();
+ }
+ ldel {
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->yypushstate(self::TAG);
+ return true;
+ }
+ }
+ double_quote {
+ $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->yypushstate(self::DOUBLEQUOTEDSTRING);
+ }
+ singlequotestring {
+ $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
+ }
+ smartyblockchildparent {
+ $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT;
+ $this->taglineno = $this->line;
+ }
+ dollar id {
+ $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+ }
+ dollar {
+ $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
+ }
+ isin {
+ $this->token = Smarty_Internal_Templateparser::TP_ISIN;
+ }
+ as {
+ $this->token = Smarty_Internal_Templateparser::TP_AS;
+ }
+ to {
+ $this->token = Smarty_Internal_Templateparser::TP_TO;
+ }
+ step {
+ $this->token = Smarty_Internal_Templateparser::TP_STEP;
+ }
+ instanceof {
+ $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF;
+ }
+ lop {
+ $this->token = Smarty_Internal_Templateparser::TP_LOGOP;
+ }
+ tlop {
+ $this->token = Smarty_Internal_Templateparser::TP_TLOGOP;
+ }
+ scond {
+ $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND;
+ }
+ not{
+ $this->token = Smarty_Internal_Templateparser::TP_NOT;
+ }
+ typecast {
+ $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
+ }
+ openP {
+ $this->token = Smarty_Internal_Templateparser::TP_OPENP;
+ }
+ closeP {
+ $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
+ }
+ openB {
+ $this->token = Smarty_Internal_Templateparser::TP_OPENB;
+ }
+ closeB {
+ $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
+ }
+ ptr {
+ $this->token = Smarty_Internal_Templateparser::TP_PTR;
+ }
+ aptr {
+ $this->token = Smarty_Internal_Templateparser::TP_APTR;
+ }
+ equal {
+ $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
+ }
+ incdec {
+ $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
+ }
+ unimath {
+ $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
+ }
+ math {
+ $this->token = Smarty_Internal_Templateparser::TP_MATH;
+ }
+ at {
+ $this->token = Smarty_Internal_Templateparser::TP_AT;
+ }
+ hatch {
+ $this->token = Smarty_Internal_Templateparser::TP_HATCH;
+ }
+ attr {
+ // resolve conflicts with shorttag and right_delimiter starting with '='
+ if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->rdel_length) == $this->smarty->right_delimiter) {
+ preg_match("~\s+~",$this->value,$match);
+ $this->value = $match[0];
+ $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_ATTR;
+ }
+ }
+ namespace {
+ $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE;
+ }
+ id {
+ $this->token = Smarty_Internal_Templateparser::TP_ID;
+ }
+ integer {
+ $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
+ }
+ backtick {
+ $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->yypopstate();
+ }
+ vert {
+ $this->token = Smarty_Internal_Templateparser::TP_VERT;
+ }
+ dot {
+ $this->token = Smarty_Internal_Templateparser::TP_DOT;
+ }
+ comma {
+ $this->token = Smarty_Internal_Templateparser::TP_COMMA;
+ }
+ semicolon {
+ $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
+ }
+ doublecolon {
+ $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
+ }
+ colon {
+ $this->token = Smarty_Internal_Templateparser::TP_COLON;
+ }
+ qmark {
+ $this->token = Smarty_Internal_Templateparser::TP_QMARK;
+ }
+ hex {
+ $this->token = Smarty_Internal_Templateparser::TP_HEX;
+ }
+ space {
+ $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ }
+ text {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+ */
+
+ /*!lex2php
+ %statename LITERAL
+ ldel literal rdel {
+ $this->literal_cnt++;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ }
+ ldel slash literal rdel {
+ if ($this->literal_cnt) {
+ $this->literal_cnt--;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+ $this->yypopstate();
+ }
+ }
+ text {
+ $to = strlen($this->data);
+ preg_match("~{$this->ldel}[/]?literal{$this->rdel}~i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
+ if (isset($match[0][1])) {
+ $to = $match[0][1];
+ } else {
+ $this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
+ }
+ $this->value = substr($this->data,$this->counter,$to-$this->counter);
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ }
+ */
+ /*!lex2php
+ %statename DOUBLEQUOTEDSTRING
+ ldel literal rdel {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+ ldel slash literal rdel {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+ ldel slash {
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->yypushstate(self::TAG);
+ return true;
+ }
+ }
+ ldel id {
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->yypushstate(self::TAG);
+ return true;
+ }
+ }
+ ldel {
+ if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->taglineno = $this->line;
+ $this->yypushstate(self::TAGBODY);
+ }
+ }
+ double_quote {
+ $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->yypopstate();
+ }
+ backtick dollar {
+ $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->value = substr($this->value,0,-1);
+ $this->yypushstate(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+ dollar id {
+ $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+ }
+ dollar {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+ textdoublequoted {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+ text {
+ $to = strlen($this->data);
+ $this->value = substr($this->data,$this->counter,$to-$this->counter);
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+ */
+ }
+
+ \ No newline at end of file
diff --git a/include/smarty/lexer/smarty_internal_templateparser.y b/include/smarty/lexer/smarty_internal_templateparser.y
new file mode 100644
index 000000000..c64e34a67
--- /dev/null
+++ b/include/smarty/lexer/smarty_internal_templateparser.y
@@ -0,0 +1,1352 @@
+/*
+ * This file is part of Smarty.
+ *
+ * (c) 2015 Uwe Tews
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+%stack_size 500
+%name TP_
+%declare_class {
+/**
+* Smarty Template Parser Class
+*
+* This is the template parser.
+* It is generated from the smarty_internal_templateparser.y file
+*
+* @author Uwe Tews <uwe.tews@googlemail.com>
+*/
+class Smarty_Internal_Templateparser
+}
+%include_class
+{
+ const Err1 = "Security error: Call to private object member not allowed";
+ const Err2 = "Security error: Call to dynamic object member not allowed";
+ const Err3 = "PHP in template not allowed. Use SmartyBC to enable it";
+
+ /**
+ * result status
+ *
+ * @var bool
+ */
+ public $successful = true;
+
+ /**
+ * return value
+ *
+ * @var mixed
+ */
+ public $retvalue = 0;
+
+ /**
+ * counter for prefix code
+ *
+ * @var int
+ */
+ public static $prefix_number = 0;
+
+ /**
+ * @var
+ */
+ public $yymajor;
+
+ /**
+ * last index of array variable
+ *
+ * @var mixed
+ */
+ public $last_index;
+
+ /**
+ * last variable name
+ *
+ * @var string
+ */
+ public $last_variable;
+
+ /**
+ * root parse tree buffer
+ *
+ * @var Smarty_Internal_ParseTree
+ */
+ public $root_buffer;
+
+ /**
+ * current parse tree object
+ *
+ * @var Smarty_Internal_ParseTree
+ */
+ public $current_buffer;
+
+ /**
+ * lexer object
+ *
+ * @var Smarty_Internal_Templatelexer
+ */
+ public $lex;
+
+ /**
+ * internal error flag
+ *
+ * @var bool
+ */
+ private $internalError = false;
+
+ /**
+ * {strip} status
+ *
+ * @var bool
+ */
+ public $strip = false;
+ /**
+ * compiler object
+ *
+ * @var Smarty_Internal_TemplateCompilerBase
+ */
+ public $compiler = null;
+
+ /**
+ * smarty object
+ *
+ * @var Smarty
+ */
+ public $smarty = null;
+
+ /**
+ * template object
+ *
+ * @var Smarty_Internal_Template
+ */
+ public $template = null;
+
+ /**
+ * block nesting level
+ *
+ * @var int
+ */
+ public $block_nesting_level = 0;
+
+ /**
+ * security object
+ *
+ * @var Smarty_Security
+ */
+ public $security = null;
+
+ /**
+ * template prefix array
+ *
+ * @var \Smarty_Internal_ParseTree[]
+ */
+ public $template_prefix = array();
+
+ /**
+ * security object
+ *
+ * @var \Smarty_Internal_ParseTree[]
+ */
+ public $template_postfix = array();
+
+ /**
+ * constructor
+ *
+ * @param Smarty_Internal_Templatelexer $lex
+ * @param Smarty_Internal_TemplateCompilerBase $compiler
+ */
+ function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ $this->lex = $lex;
+ $this->compiler = $compiler;
+ $this->template = $this->compiler->template;
+ $this->smarty = $this->template->smarty;
+ $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false;
+ $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template();
+ }
+
+ /**
+ * insert PHP code in current buffer
+ *
+ * @param string $code
+ */
+ public function insertPhpCode($code)
+ {
+ $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $code));
+ }
+
+ /**
+ * merge PHP code with prefix code and return parse tree tag object
+ *
+ * @param string $code
+ *
+ * @return Smarty_Internal_ParseTree_Tag
+ */
+ public function mergePrefixCode($code)
+ {
+ $tmp ='';
+ foreach ($this->compiler->prefix_code as $preCode) {
+ $tmp .= $preCode;
+ }
+ $this->compiler->prefix_code=array();
+ $tmp .= $code;
+ return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp,true));
+ }
+
+}
+
+%token_prefix TP_
+
+%parse_accept
+{
+ $this->successful = !$this->internalError;
+ $this->internalError = false;
+ $this->retvalue = $this->_retvalue;
+}
+
+%syntax_error
+{
+ $this->internalError = true;
+ $this->yymajor = $yymajor;
+ $this->compiler->trigger_template_error();
+}
+
+%stack_overflow
+{
+ $this->internalError = true;
+ $this->compiler->trigger_template_error("Stack overflow in template parser");
+}
+
+%left VERT.
+%left COLON.
+
+ //
+ // complete template
+ //
+start(res) ::= template. {
+ $this->root_buffer->prepend_array($this, $this->template_prefix);
+ $this->root_buffer->append_array($this, $this->template_postfix);
+ res = $this->root_buffer->to_smarty_php($this);
+}
+
+ //
+ // loop over template elements
+ //
+ // single template element
+template ::= template_element(e). {
+ if (e != null) {
+ $this->current_buffer->append_subtree($this, e);
+ }
+}
+
+ // loop of elements
+template ::= template template_element(e). {
+ if (e != null) {
+ // because of possible code injection
+ $this->current_buffer->append_subtree($this, e);
+ }
+}
+
+ // empty template
+template ::= .
+
+//
+// template elements
+//
+ // Smarty tag
+template_element(res)::= smartytag(st). {
+ if ($this->compiler->has_code) {
+ res = $this->mergePrefixCode(st);
+ } else {
+ res = null;
+ }
+ $this->compiler->has_variable_string = false;
+ $this->block_nesting_level = count($this->compiler->_tag_stack);
+}
+
+ // Literal
+template_element(res) ::= literal(l). {
+ res = new Smarty_Internal_ParseTree_Text(l);
+}
+ // php tags
+template_element(res)::= PHP(o). {
+ $code = $this->compiler->compileTag('private_php',array(array('code' => o), array('type' => $this->lex->phpType )),array());
+ if ($this->compiler->has_code && !empty($code)) {
+ $tmp =''; foreach ($this->compiler->prefix_code as $code) {$tmp.=$code;} $this->compiler->prefix_code=array();
+ res = new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp.$code,true));
+ } else {
+ res = null;
+ }
+}
+
+ // nocache code
+template_element(res)::= NOCACHE(c). {
+ $this->compiler->tag_nocache = true;
+ $save = $this->template->compiled->has_nocache_code;
+ res = new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode("<?php echo '{c}';?>\n", $this->compiler, true));
+ $this->template->compiled->has_nocache_code = $save;
+}
+ // template text
+template_element(res)::= text_content(t). {
+ res = $this->compiler->processText(t);
+}
+
+text_content(res) ::= TEXT(o). {
+ res = o;
+}
+
+text_content(res) ::= text_content(t) TEXT(o). {
+ res = t . o;
+}
+
+ // strip on
+template_element ::= STRIPON(d). {
+ $this->strip = true;
+}
+ // strip off
+template_element ::= STRIPOFF(d). {
+ $this->strip = false;
+}
+
+ // Litteral
+literal(res) ::= LITERALSTART LITERALEND. {
+ res = '';
+}
+
+literal(res) ::= LITERALSTART literal_elements(l) LITERALEND. {
+ res = l;
+}
+
+literal_elements(res) ::= literal_elements(l1) literal_element(l2). {
+ res = l1.l2;
+}
+
+literal_elements(res) ::= . {
+ res = '';
+}
+
+literal_element(res) ::= literal(l). {
+ res = l;
+}
+
+literal_element(res) ::= LITERAL(l). {
+ res = l;
+}
+
+smartytag(res) ::= tag(t) RDEL. {
+ res = t;
+}
+//
+// output tags start here
+//
+smartytag(res) ::= SIMPELOUTPUT(i). {
+ $var = trim(substr(i, $this->lex->ldel_length, -$this->lex->rdel_length), ' $');
+ if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) {
+ res = $this->compiler->compileTag('private_print_expression',array('nocache'),array('value'=>$this->compiler->compileVariable('\''.$match[1].'\'')));
+ } else {
+ res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->compiler->compileVariable('\''.$var.'\'')));
+ }
+}
+
+ // output with optional attributes
+tag(res) ::= LDEL variable(e). {
+ res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>e));
+}
+
+tag(res) ::= LDEL variable(e) attributes(a). {
+ res = $this->compiler->compileTag('private_print_expression',a,array('value'=>e));
+}
+tag(res) ::= LDEL value(e). {
+ res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>e));
+}
+tag(res) ::= LDEL value(e) attributes(a). {
+ res = $this->compiler->compileTag('private_print_expression',a,array('value'=>e));
+}
+
+tag(res) ::= LDEL expr(e). {
+ res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>e));
+}
+
+tag(res) ::= LDEL expr(e) attributes(a). {
+ res = $this->compiler->compileTag('private_print_expression',a,array('value'=>e));
+}
+
+//
+// Smarty tags start here
+//
+
+ // assign new style
+tag(res) ::= LDEL DOLLARID(i) EQUAL value(e). {
+ res = $this->compiler->compileTag('assign',array(array('value'=>e),array('var'=>'\''.substr(i,1).'\'')));
+}
+
+tag(res) ::= LDEL DOLLARID(i) EQUAL expr(e). {
+ res = $this->compiler->compileTag('assign',array(array('value'=>e),array('var'=>'\''.substr(i,1).'\'')));
+}
+
+tag(res) ::= LDEL DOLLARID(i) EQUAL expr(e) attributes(a). {
+ res = $this->compiler->compileTag('assign',array_merge(array(array('value'=>e),array('var'=>'\''.substr(i,1).'\'')),a));
+}
+
+tag(res) ::= LDEL varindexed(vi) EQUAL expr(e) attributes(a). {
+ res = $this->compiler->compileTag('assign',array_merge(array(array('value'=>e),array('var'=>vi['var'])),a),array('smarty_internal_index'=>vi['smarty_internal_index']));
+}
+
+// simple tag like {name}
+smartytag(res)::= SIMPLETAG(t). {
+ $tag = trim(substr(t, $this->lex->ldel_length, -$this->lex->rdel_length));
+ if ($tag == 'strip') {
+ $this->strip = true;
+ res = null;;
+ } else {
+ if (defined($tag)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($tag, $this->compiler);
+ }
+ res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$tag));
+ } else {
+ if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) {
+ res = $this->compiler->compileTag($match[1],array("'nocache'"));
+ } else {
+ res = $this->compiler->compileTag($tag,array());
+ }
+ }
+ }
+}
+
+ // tag with optional Smarty2 style attributes
+tag(res) ::= LDEL ID(i) attributes(a). {
+ if (defined(i)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant(i, $this->compiler);
+ }
+ res = $this->compiler->compileTag('private_print_expression',a,array('value'=>i));
+ } else {
+ res = $this->compiler->compileTag(i,a);
+ }
+}
+tag(res) ::= LDEL ID(i). {
+ if (defined(i)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant(i, $this->compiler);
+ }
+ res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>i));
+ } else {
+ res = $this->compiler->compileTag(i,array());
+ }
+}
+
+
+ // tag with modifier and optional Smarty2 style attributes
+tag(res) ::= LDEL ID(i) modifierlist(l)attributes(a). {
+ if (defined(i)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant(i, $this->compiler);
+ }
+ res = $this->compiler->compileTag('private_print_expression',a,array('value'=>i, 'modifierlist'=>l));
+ } else {
+ res = '<?php ob_start();?>'.$this->compiler->compileTag(i,a).'<?php echo ';
+ res .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>l,'value'=>'ob_get_clean()')).';?>';
+ }
+}
+
+ // registered object tag
+tag(res) ::= LDEL ID(i) PTR ID(m) attributes(a). {
+ res = $this->compiler->compileTag(i,a,array('object_method'=>m));
+}
+
+ // registered object tag with modifiers
+tag(res) ::= LDEL ID(i) PTR ID(me) modifierlist(l) attributes(a). {
+ res = '<?php ob_start();?>'.$this->compiler->compileTag(i,a,array('object_method'=>me)).'<?php echo ';
+ res .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>l,'value'=>'ob_get_clean()')).';?>';
+}
+
+ // {if}, {elseif} and {while} tag
+tag(res) ::= LDELIF(i) expr(ie). {
+ $tag = trim(substr(i,$this->lex->ldel_length));
+ res = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>ie));
+}
+
+tag(res) ::= LDELIF(i) expr(ie) attributes(a). {
+ $tag = trim(substr(i,$this->lex->ldel_length));
+ res = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,a,array('if condition'=>ie));
+}
+
+tag(res) ::= LDELIF(i) statement(ie). {
+ $tag = trim(substr(i,$this->lex->ldel_length));
+ res = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>ie));
+}
+
+tag(res) ::= LDELIF(i) statement(ie) attributes(a). {
+ $tag = trim(substr(i,$this->lex->ldel_length));
+ res = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,a,array('if condition'=>ie));
+}
+
+ // {for} tag
+tag(res) ::= LDELFOR statements(st) SEMICOLON expr(ie) SEMICOLON varindexed(v2) foraction(e2) attributes(a). {
+ res = $this->compiler->compileTag('for',array_merge(a,array(array('start'=>st),array('ifexp'=>ie),array('var'=>v2),array('step'=>e2))),1);
+}
+
+ foraction(res) ::= EQUAL expr(e). {
+ res = '='.e;
+}
+
+ foraction(res) ::= INCDEC(e). {
+ res = e;
+}
+
+tag(res) ::= LDELFOR statement(st) TO expr(v) attributes(a). {
+ res = $this->compiler->compileTag('for',array_merge(a,array(array('start'=>st),array('to'=>v))),0);
+}
+
+tag(res) ::= LDELFOR statement(st) TO expr(v) STEP expr(v2) attributes(a). {
+ res = $this->compiler->compileTag('for',array_merge(a,array(array('start'=>st),array('to'=>v),array('step'=>v2))),0);
+}
+
+ // {foreach} tag
+tag(res) ::= LDELFOREACH attributes(a). {
+ res = $this->compiler->compileTag('foreach',a);
+}
+
+ // {foreach $array as $var} tag
+tag(res) ::= LDELFOREACH SPACE value(v1) AS varvar(v0) attributes(a). {
+ res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>v1),array('item'=>v0))));
+}
+
+tag(res) ::= LDELFOREACH SPACE value(v1) AS varvar(v2) APTR varvar(v0) attributes(a). {
+ res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>v1),array('item'=>v0),array('key'=>v2))));
+}
+
+tag(res) ::= LDELFOREACH SPACE expr(e) AS varvar(v0) attributes(a). {
+ res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>e),array('item'=>v0))));
+}
+
+tag(res) ::= LDELFOREACH SPACE expr(e) AS varvar(v1) APTR varvar(v0) attributes(a). {
+ res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>e),array('item'=>v0),array('key'=>v1))));
+}
+
+ // {setfilter}
+tag(res) ::= LDELSETFILTER ID(m) modparameters(p). {
+ res = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array(array_merge(array(m),p))));
+}
+
+tag(res) ::= LDELSETFILTER ID(m) modparameters(p) modifierlist(l). {
+ res = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array_merge(array(array_merge(array(m),p)),l)));
+}
+
+ // {$smarty.block.child} or {$smarty.block.parent}
+tag(res) ::= LDEL SMARTYBLOCKCHILDPARENT(i). {
+ $j = strrpos(i,'.');
+ if (i[$j+1] == 'c') {
+ // {$smarty.block.child}
+ res = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler);
+ } else {
+ // {$smarty.block.parent}
+ res = SMARTY_INTERNAL_COMPILE_BLOCK::compileParentBlock($this->compiler);
+ }
+}
+
+
+ // end of block tag {/....}
+smartytag(res)::= CLOSETAG(t). {
+ $tag = trim(substr(t, $this->lex->ldel_length, -$this->lex->rdel_length), ' /');
+ if ($tag == 'strip') {
+ $this->strip = false;
+ res = null;
+ } else {
+ res = $this->compiler->compileTag($tag.'close',array());
+ }
+ }
+tag(res) ::= LDELSLASH ID(i). {
+ res = $this->compiler->compileTag(i.'close',array());
+}
+
+tag(res) ::= LDELSLASH ID(i) modifierlist(l). {
+ res = $this->compiler->compileTag(i.'close',array(),array('modifier_list'=>l));
+}
+
+ // end of block object tag {/....}
+tag(res) ::= LDELSLASH ID(i) PTR ID(m). {
+ res = $this->compiler->compileTag(i.'close',array(),array('object_method'=>m));
+}
+
+tag(res) ::= LDELSLASH ID(i) PTR ID(m) modifierlist(l). {
+ res = $this->compiler->compileTag(i.'close',array(),array('object_method'=>m, 'modifier_list'=>l));
+}
+
+//
+//Attributes of Smarty tags
+//
+ // list of attributes
+attributes(res) ::= attributes(a1) attribute(a2). {
+ res = a1;
+ res[] = a2;
+}
+
+ // single attribute
+attributes(res) ::= attribute(a). {
+ res = array(a);
+}
+
+ // no attributes
+attributes(res) ::= . {
+ res = array();
+}
+
+ // attribute
+attribute(res) ::= SPACE ID(v) EQUAL ID(id). {
+ if (defined(id)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant(id, $this->compiler);
+ }
+ res = array(v=>id);
+ } else {
+ res = array(v=>'\''.id.'\'');
+ }
+}
+
+attribute(res) ::= ATTR(v) expr(e). {
+ res = array(trim(v," =\n\r\t")=>e);
+}
+
+attribute(res) ::= ATTR(v) value(e). {
+ res = array(trim(v," =\n\r\t")=>e);
+}
+
+attribute(res) ::= SPACE ID(v). {
+ res = '\''.v.'\'';
+}
+
+attribute(res) ::= SPACE expr(e). {
+ res = e;
+}
+
+attribute(res) ::= SPACE value(v). {
+ res = v;
+}
+
+attribute(res) ::= SPACE INTEGER(i) EQUAL expr(e). {
+ res = array(i=>e);
+}
+
+
+
+//
+// statement
+//
+statements(res) ::= statement(s). {
+ res = array(s);
+}
+
+statements(res) ::= statements(s1) COMMA statement(s). {
+ s1[]=s;
+ res = s1;
+}
+
+statement(res) ::= DOLLARID(i) EQUAL INTEGER(e). {
+ res = array('var' => '\''.substr(i,1).'\'', 'value'=>e);
+}
+statement(res) ::= DOLLARID(i) EQUAL expr(e). {
+ res = array('var' => '\''.substr(i,1).'\'', 'value'=>e);
+}
+
+statement(res) ::= varindexed(vi) EQUAL expr(e). {
+ res = array('var' => vi, 'value'=>e);
+}
+
+statement(res) ::= OPENP statement(st) CLOSEP. {
+ res = st;
+}
+
+
+//
+// expressions
+//
+
+ // single value
+expr(res) ::= value(v). {
+ res = v;
+}
+
+ // ternary
+expr(res) ::= ternary(v). {
+ res = v;
+}
+
+ // resources/streams
+expr(res) ::= DOLLARID(i) COLON ID(i2). {
+ res = '$_smarty_tpl->getStreamVariable(\''.substr(i,1).'://' . i2 . '\')';
+}
+
+ // arithmetic expression
+expr(res) ::= expr(e) MATH(m) value(v). {
+ res = e . trim(m) . v;
+}
+
+expr(res) ::= expr(e) UNIMATH(m) value(v). {
+ res = e . trim(m) . v;
+}
+
+ // array
+expr(res) ::= array(a). {
+ res = a;
+}
+
+ // modifier
+expr(res) ::= expr(e) modifierlist(l). {
+ res = $this->compiler->compileTag('private_modifier',array(),array('value'=>e,'modifierlist'=>l));
+}
+
+// if expression
+ // simple expression
+expr(res) ::= expr(e1) lop(c) expr(e2). {
+ res = (isset(c['pre']) ? c['pre'] : '') . e1.c['op'].e2 . (isset(c['pre']) ? ')' : '');
+}
+expr(res) ::= expr(e1) scond(c). {
+ res = c . e1 . ')';
+}
+
+expr(res) ::= expr(e1) ISIN array(a). {
+ res = 'in_array('.e1.','.a.')';
+}
+
+expr(res) ::= expr(e1) ISIN value(v). {
+ res = 'in_array('.e1.',(array)'.v.')';
+}
+
+expr(res) ::= variable(v1) INSTANCEOF(i) ns1(v2). {
+ res = v1.i.v2;
+}
+
+expr(res) ::= variable(v1) INSTANCEOF(i) variable(v2). {
+ res = v1.i.v2;
+}
+
+
+//
+// ternary
+//
+ternary(res) ::= OPENP expr(v) CLOSEP QMARK DOLLARID(e1) COLON expr(e2). {
+ res = v.' ? '. $this->compiler->compileVariable('\''.substr(e1,1).'\'') . ' : '.e2;
+}
+
+ternary(res) ::= OPENP expr(v) CLOSEP QMARK expr(e1) COLON expr(e2). {
+ res = v.' ? '.e1.' : '.e2;
+}
+
+ // value
+value(res) ::= variable(v). {
+ res = v;
+}
+
+ // +/- value
+value(res) ::= UNIMATH(m) value(v). {
+ res = m.v;
+}
+
+ // logical negation
+value(res) ::= NOT value(v). {
+ res = '!'.v;
+}
+
+value(res) ::= TYPECAST(t) value(v). {
+ res = t.v;
+}
+
+value(res) ::= variable(v) INCDEC(o). {
+ res = v.o;
+}
+
+ // numeric
+value(res) ::= HEX(n). {
+ res = n;
+}
+
+value(res) ::= INTEGER(n). {
+ res = n;
+}
+
+value(res) ::= INTEGER(n1) DOT INTEGER(n2). {
+ res = n1.'.'.n2;
+}
+
+value(res) ::= INTEGER(n1) DOT. {
+ res = n1.'.';
+}
+
+value(res) ::= DOT INTEGER(n1). {
+ res = '.'.n1;
+}
+
+ // ID, true, false, null
+value(res) ::= ID(id). {
+ if (defined(id)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant(id, $this->compiler);
+ }
+ res = id;
+ } else {
+ res = '\''.id.'\'';
+ }
+}
+
+ // function call
+value(res) ::= function(f). {
+ res = f;
+}
+
+ // expression
+value(res) ::= OPENP expr(e) CLOSEP. {
+ res = "(". e .")";
+}
+
+ // singele quoted string
+value(res) ::= SINGLEQUOTESTRING(t). {
+ res = t;
+}
+
+ // double quoted string
+value(res) ::= doublequoted_with_quotes(s). {
+ res = s;
+}
+
+
+value(res) ::= varindexed(vi) DOUBLECOLON static_class_access(r). {
+ self::$prefix_number++;
+ if (vi['var'] == '\'smarty\'') {
+ $this->compiler->prefix_code[] = '<?php $_tmp'.self::$prefix_number.' = '. $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']).';?>';
+ } else {
+ $this->compiler->prefix_code[] = '<?php $_tmp'.self::$prefix_number.' = '. $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'].';?>';
+ }
+ res = '$_tmp'.self::$prefix_number.'::'.r[0].r[1];
+}
+
+ // Smarty tag
+value(res) ::= smartytag(st). {
+ self::$prefix_number++;
+ $tmp = $this->compiler->appendCode('<?php ob_start();?>', st);
+ $this->compiler->prefix_code[] = $this->compiler->appendCode($tmp, '<?php $_tmp'.self::$prefix_number.'=ob_get_clean();?>');
+ res = '$_tmp'.self::$prefix_number;
+}
+
+value(res) ::= value(v) modifierlist(l). {
+ res = $this->compiler->compileTag('private_modifier',array(),array('value'=>v,'modifierlist'=>l));
+}
+ // name space constant
+value(res) ::= NAMESPACE(c). {
+ res = c;
+}
+
+
+ // static class access
+value(res) ::= ns1(c)DOUBLECOLON static_class_access(s). {
+ if (!in_array(strtolower(c), array('self', 'parent')) && (!$this->security || $this->security->isTrustedStaticClassAccess(c, s, $this->compiler))) {
+ if (isset($this->smarty->registered_classes[c])) {
+ res = $this->smarty->registered_classes[c].'::'.s[0].s[1];
+ } else {
+ res = c.'::'.s[0].s[1];
+ }
+ } else {
+ $this->compiler->trigger_template_error ("static class '".c."' is undefined or not allowed by security setting");
+ }
+}
+//
+// namespace stuff
+//
+
+ns1(res) ::= ID(i). {
+ res = i;
+}
+
+ns1(res) ::= NAMESPACE(i). {
+ res = i;
+ }
+
+
+
+
+//
+// variables
+//
+ // Smarty variable (optional array)
+variable(res) ::= DOLLARID(i). {
+ res = $this->compiler->compileVariable('\''.substr(i,1).'\'');
+}
+variable(res) ::= varindexed(vi). {
+ if (vi['var'] == '\'smarty\'') {
+ $smarty_var = $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']);
+ res = $smarty_var;
+ } else {
+ // used for array reset,next,prev,end,current
+ $this->last_variable = vi['var'];
+ $this->last_index = vi['smarty_internal_index'];
+ res = $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'];
+ }
+}
+
+ // variable with property
+variable(res) ::= varvar(v) AT ID(p). {
+ res = '$_smarty_tpl->tpl_vars['. v .']->'.p;
+}
+
+ // object
+variable(res) ::= object(o). {
+ res = o;
+}
+
+ // config variable
+variable(res) ::= HATCH ID(i) HATCH. {
+ res = $this->compiler->compileConfigVariable("'" . i . "'");
+}
+
+variable(res) ::= HATCH ID(i) HATCH arrayindex(a). {
+ res = '(is_array($tmp = ' . $this->compiler->compileConfigVariable("'" . i . "'") . ') ? $tmp'.a.' :null)';
+}
+
+variable(res) ::= HATCH variable(v) HATCH. {
+ res = $this->compiler->compileConfigVariable(v);
+}
+
+variable(res) ::= HATCH variable(v) HATCH arrayindex(a). {
+ res = '(is_array($tmp = ' . $this->compiler->compileConfigVariable(v) . ') ? $tmp'.a.' : null)';
+}
+
+varindexed(res) ::= DOLLARID(i) arrayindex(a). {
+ res = array('var'=>'\''.substr(i,1).'\'', 'smarty_internal_index'=>a);
+}
+varindexed(res) ::= varvar(v) arrayindex(a). {
+ res = array('var'=>v, 'smarty_internal_index'=>a);
+}
+
+//
+// array index
+//
+ // multiple array index
+arrayindex(res) ::= arrayindex(a1) indexdef(a2). {
+ res = a1.a2;
+}
+
+ // no array index
+arrayindex ::= . {
+ return;
+}
+
+// single index definition
+ // Smarty2 style index
+indexdef(res) ::= DOT DOLLARID(i). {
+ res = '['.$this->compiler->compileVariable('\''.substr(i,1).'\'').']';
+}
+indexdef(res) ::= DOT varvar(v). {
+ res = '['.$this->compiler->compileVariable(v).']';
+}
+
+indexdef(res) ::= DOT varvar(v) AT ID(p). {
+ res = '['.$this->compiler->compileVariable(v).'->'.p.']';
+}
+
+indexdef(res) ::= DOT ID(i). {
+ if (defined(i)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant(i, $this->compiler);
+ }
+ res = '['. i .']';
+ } else {
+ res = "['". i ."']";
+ }
+}
+
+indexdef(res) ::= DOT INTEGER(n). {
+ res = '['. n .']';
+}
+
+
+indexdef(res) ::= DOT LDEL expr(e) RDEL. {
+ res = '['. e .']';
+}
+
+ // section tag index
+indexdef(res) ::= OPENB ID(i)CLOSEB. {
+ res = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.i.'\'][\'index\']').']';
+}
+
+indexdef(res) ::= OPENB ID(i) DOT ID(i2) CLOSEB. {
+ res = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.i.'\'][\''.i2.'\']').']';
+}
+indexdef(res) ::= OPENB SINGLEQUOTESTRING(s) CLOSEB. {
+ res = '['.s.']';
+}
+indexdef(res) ::= OPENB INTEGER(n) CLOSEB. {
+ res = '['.n.']';
+}
+indexdef(res) ::= OPENB DOLLARID(i) CLOSEB. {
+ res = '['.$this->compiler->compileVariable('\''.substr(i,1).'\'').']';;
+}
+indexdef(res) ::= OPENB variable(v) CLOSEB. {
+ res = '['.v.']';
+}
+indexdef(res) ::= OPENB value(v) CLOSEB. {
+ res = '['.v.']';
+}
+
+ // PHP style index
+indexdef(res) ::= OPENB expr(e) CLOSEB. {
+ res = '['. e .']';
+}
+
+ // for assign append array
+indexdef(res) ::= OPENB CLOSEB. {
+ res = '[]';
+}
+
+
+//
+// variable variable names
+//
+
+ // singel identifier element
+varvar(res) ::= DOLLARID(i). {
+ res = '\''.substr(i,1).'\'';
+}
+ // single $
+varvar(res) ::= DOLLAR. {
+ res = "''";
+}
+
+ // sequence of identifier elements
+varvar(res) ::= varvar(v1) varvarele(v2). {
+ res = v1.'.'.v2;
+}
+
+ // fix sections of element
+varvarele(res) ::= ID(s). {
+ res = '\''.s.'\'';
+}
+varvarele(res) ::= SIMPELOUTPUT(i). {
+ $var = trim(substr(i, $this->lex->ldel_length, -$this->lex->rdel_length), ' $');
+ res = $this->compiler->compileVariable('\''.$var.'\'');
+}
+
+ // variable sections of element
+varvarele(res) ::= LDEL expr(e) RDEL. {
+ res = '('.e.')';
+}
+
+//
+// objects
+//
+object(res) ::= varindexed(vi) objectchain(oc). {
+ if (vi['var'] == '\'smarty\'') {
+ res = $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']).oc;
+ } else {
+ res = $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'].oc;
+ }
+}
+
+ // single element
+objectchain(res) ::= objectelement(oe). {
+ res = oe;
+}
+
+ // chain of elements
+objectchain(res) ::= objectchain(oc) objectelement(oe). {
+ res = oc.oe;
+}
+
+ // variable
+objectelement(res)::= PTR ID(i) arrayindex(a). {
+ if ($this->security && substr(i,0,1) == '_') {
+ $this->compiler->trigger_template_error (self::Err1);
+ }
+ res = '->'.i.a;
+}
+
+objectelement(res)::= PTR varvar(v) arrayindex(a). {
+ if ($this->security) {
+ $this->compiler->trigger_template_error (self::Err2);
+ }
+ res = '->{'.$this->compiler->compileVariable(v).a.'}';
+}
+
+objectelement(res)::= PTR LDEL expr(e) RDEL arrayindex(a). {
+ if ($this->security) {
+ $this->compiler->trigger_template_error (self::Err2);
+ }
+ res = '->{'.e.a.'}';
+}
+
+objectelement(res)::= PTR ID(ii) LDEL expr(e) RDEL arrayindex(a). {
+ if ($this->security) {
+ $this->compiler->trigger_template_error (self::Err2);
+ }
+ res = '->{\''.ii.'\'.'.e.a.'}';
+}
+
+ // method
+objectelement(res)::= PTR method(f). {
+ res = '->'.f;
+}
+
+
+//
+// function
+//
+function(res) ::= ns1(f) OPENP params(p) CLOSEP. {
+ if (!$this->security || $this->security->isTrustedPhpFunction(f, $this->compiler)) {
+ if (strcasecmp(f,'isset') === 0 || strcasecmp(f,'empty') === 0 || strcasecmp(f,'array') === 0 || is_callable(f)) {
+ $func_name = strtolower(f);
+ if ($func_name == 'isset') {
+ if (count(p) == 0) {
+ $this->compiler->trigger_template_error ('Illegal number of paramer in "isset()"');
+ }
+ $par = implode(',',p);
+ if (strncasecmp($par,'$_smarty_tpl->smarty->ext->_config->_getConfigVariable',strlen('$_smarty_tpl->smarty->ext->_config->_getConfigVariable')) === 0) {
+ self::$prefix_number++;
+ $this->compiler->prefix_code[] = '<?php $_tmp'.self::$prefix_number.'='.str_replace(')',', false)',$par).';?>';
+ $isset_par = '$_tmp'.self::$prefix_number;
+ } else {
+ $isset_par=str_replace("')->value","',null,true,false)->value",$par);
+ }
+ res = f . "(". $isset_par .")";
+ } elseif (in_array($func_name,array('empty','reset','current','end','prev','next'))){
+ if (count(p) != 1) {
+ $this->compiler->trigger_template_error ('Illegal number of paramer in "empty()"');
+ }
+ if ($func_name == 'empty') {
+ res = $func_name.'('.str_replace("')->value","',null,true,false)->value",p[0]).')';
+ } else {
+ res = $func_name.'('.p[0].')';
+ }
+ } else {
+ res = f . "(". implode(',',p) .")";
+ }
+ } else {
+ $this->compiler->trigger_template_error ("unknown function \"" . f . "\"");
+ }
+ }
+}
+
+
+//
+// method
+//
+method(res) ::= ID(f) OPENP params(p) CLOSEP. {
+ if ($this->security && substr(f,0,1) == '_') {
+ $this->compiler->trigger_template_error (self::Err1);
+ }
+ res = f . "(". implode(',',p) .")";
+}
+
+method(res) ::= DOLLARID(f) OPENP params(p) CLOSEP. {
+ if ($this->security) {
+ $this->compiler->trigger_template_error (self::Err2);
+ }
+ self::$prefix_number++;
+ $this->compiler->prefix_code[] = '<?php $_tmp'.self::$prefix_number.'='.$this->compiler->compileVariable('\''.substr(f,1).'\'').';?>';
+ res = '$_tmp'.self::$prefix_number.'('. implode(',',p) .')';
+}
+
+// function/method parameter
+ // multiple parameters
+params(res) ::= params(p) COMMA expr(e). {
+ res = array_merge(p,array(e));
+}
+
+ // single parameter
+params(res) ::= expr(e). {
+ res = array(e);
+}
+
+ // kein parameter
+params(res) ::= . {
+ res = array();
+}
+
+//
+// modifier
+//
+modifierlist(res) ::= modifierlist(l) modifier(m) modparameters(p). {
+ res = array_merge(l,array(array_merge(m,p)));
+}
+
+modifierlist(res) ::= modifier(m) modparameters(p). {
+ res = array(array_merge(m,p));
+}
+
+modifier(res) ::= VERT AT ID(m). {
+ res = array(m);
+}
+
+modifier(res) ::= VERT ID(m). {
+ res = array(m);
+}
+
+//
+// modifier parameter
+//
+ // multiple parameter
+modparameters(res) ::= modparameters(mps) modparameter(mp). {
+ res = array_merge(mps,mp);
+}
+
+ // no parameter
+modparameters(res) ::= . {
+ res = array();
+}
+
+ // parameter expression
+modparameter(res) ::= COLON value(mp). {
+ res = array(mp);
+}
+
+modparameter(res) ::= COLON array(mp). {
+ res = array(mp);
+}
+
+ // static class methode call
+static_class_access(res) ::= method(m). {
+ res = array(m, '', 'method');
+}
+
+ // static class methode call with object chainig
+static_class_access(res) ::= method(m) objectchain(oc). {
+ res = array(m, oc, 'method');
+}
+
+ // static class constant
+static_class_access(res) ::= ID(v). {
+ res = array(v, '');
+}
+
+ // static class variables
+static_class_access(res) ::= DOLLARID(v) arrayindex(a). {
+ res = array(v, a, 'property');
+}
+
+ // static class variables with object chain
+static_class_access(res) ::= DOLLARID(v) arrayindex(a) objectchain(oc). {
+ res = array(v, a.oc, 'property');
+}
+
+
+// if conditions and operators
+lop(res) ::= LOGOP(o). {
+ res['op'] = ' '. trim(o) . ' ';
+}
+
+lop(res) ::= TLOGOP(o). {
+ static $lops = array(
+ 'eq' => array('op' => ' == ', 'pre' => null),
+ 'ne' => array('op' => ' != ', 'pre' => null),
+ 'neq' => array('op' => ' != ', 'pre' => null),
+ 'gt' => array('op' => ' > ', 'pre' => null),
+ 'ge' => array('op' => ' >= ', 'pre' => null),
+ 'gte' => array('op' => ' >= ', 'pre' => null),
+ 'lt' => array('op' => ' < ', 'pre' => null),
+ 'le' => array('op' => ' <= ', 'pre' => null),
+ 'lte' => array('op' => ' <= ', 'pre' => null),
+ 'mod' => array('op' => ' % ', 'pre' => null),
+ 'and' => array('op' => ' && ', 'pre' => null),
+ 'or' => array('op' => ' || ', 'pre' => null),
+ 'xor' => array('op' => ' xor ', 'pre' => null),
+ 'isdivby' => array('op' => ' % ', 'pre' => '!('),
+ 'isnotdivby' => array('op' => ' % ', 'pre' => '('),
+ 'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '),
+ 'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '),
+ 'isoddby' => array('op' => ' / ', 'pre' => '(1 & '),
+ 'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '),
+ );
+ $op = strtolower(preg_replace('/\s*/', '', o));
+ res = $lops[$op];
+}
+
+scond(res) ::= SINGLECOND(o). {
+ static $scond = array (
+ 'iseven' => '!(1 & ',
+ 'isnoteven' => '(1 & ',
+ 'isodd' => '(1 & ',
+ 'isnotodd' => '!(1 & ',
+ );
+ $op = strtolower(str_replace(' ', '', o));
+ res = $scond[$op];
+}
+
+//
+// ARRAY element assignment
+//
+array(res) ::= OPENB arrayelements(a) CLOSEB. {
+ res = 'array('.a.')';
+}
+
+arrayelements(res) ::= arrayelement(a). {
+ res = a;
+}
+
+arrayelements(res) ::= arrayelements(a1) COMMA arrayelement(a). {
+ res = a1.','.a;
+}
+
+arrayelements ::= . {
+ return;
+}
+
+arrayelement(res) ::= value(e1) APTR expr(e2). {
+ res = e1.'=>'.e2;
+}
+
+arrayelement(res) ::= ID(i) APTR expr(e2). {
+ res = '\''.i.'\'=>'.e2;
+}
+
+arrayelement(res) ::= expr(e). {
+ res = e;
+}
+
+
+//
+// double qouted strings
+//
+doublequoted_with_quotes(res) ::= QUOTE QUOTE. {
+ res = "''";
+}
+
+doublequoted_with_quotes(res) ::= QUOTE doublequoted(s) QUOTE. {
+ res = s->to_smarty_php($this);
+}
+
+
+doublequoted(res) ::= doublequoted(o1) doublequotedcontent(o2). {
+ o1->append_subtree($this, o2);
+ res = o1;
+}
+
+doublequoted(res) ::= doublequotedcontent(o). {
+ res = new Smarty_Internal_ParseTree_Dq($this, o);
+}
+
+doublequotedcontent(res) ::= BACKTICK variable(v) BACKTICK. {
+ res = new Smarty_Internal_ParseTree_Code('(string)'.v);
+}
+
+doublequotedcontent(res) ::= BACKTICK expr(e) BACKTICK. {
+ res = new Smarty_Internal_ParseTree_Code('(string)'.e);
+}
+
+doublequotedcontent(res) ::= DOLLARID(i). {
+ res = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\''. substr(i,1) .'\']->value');
+}
+
+doublequotedcontent(res) ::= LDEL variable(v) RDEL. {
+ res = new Smarty_Internal_ParseTree_Code('(string)'.v);
+}
+
+doublequotedcontent(res) ::= LDEL expr(e) RDEL. {
+ res = new Smarty_Internal_ParseTree_Code('(string)('.e.')');
+}
+
+doublequotedcontent(res) ::= smartytag(st). {
+ res = new Smarty_Internal_ParseTree_Tag($this, st);
+}
+
+doublequotedcontent(res) ::= TEXT(o). {
+ res = new Smarty_Internal_ParseTree_DqContent(o);
+}
+
diff --git a/include/smarty/libs/Autoloader.php b/include/smarty/libs/Autoloader.php
new file mode 100644
index 000000000..7d0c388a6
--- /dev/null
+++ b/include/smarty/libs/Autoloader.php
@@ -0,0 +1,124 @@
+<?php
+/**
+ * Smarty Autoloader
+ *
+ * @package Smarty
+ */
+
+/**
+ * Smarty Autoloader
+ *
+ * @package Smarty
+ * @author Uwe Tews
+ * Usage:
+ * require_once '...path/Autoloader.php';
+ * Smarty_Autoloader::register();
+ * $smarty = new Smarty();
+ * Note: This autoloader is not needed if you use Composer.
+ * Composer will automatically add the classes of the Smarty package to it common autoloader.
+ */
+class Smarty_Autoloader
+{
+ /**
+ * Filepath to Smarty root
+ *
+ * @var string
+ */
+ public static $SMARTY_DIR = '';
+
+ /**
+ * Filepath to Smarty internal plugins
+ *
+ * @var string
+ */
+ public static $SMARTY_SYSPLUGINS_DIR = '';
+
+ /**
+ * Array with Smarty core classes and their filename
+ *
+ * @var array
+ */
+ public static $rootClasses = array('smarty' => 'Smarty.class.php', 'smartybc' => 'SmartyBC.class.php',);
+
+ /**
+ * Registers Smarty_Autoloader backward compatible to older installations.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not.
+ */
+ public static function registerBC($prepend = false)
+ {
+ /**
+ * register the class autoloader
+ */
+ if (!defined('SMARTY_SPL_AUTOLOAD')) {
+ define('SMARTY_SPL_AUTOLOAD', 0);
+ }
+ if (SMARTY_SPL_AUTOLOAD &&
+ set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false
+ ) {
+ $registeredAutoLoadFunctions = spl_autoload_functions();
+ if (!isset($registeredAutoLoadFunctions['spl_autoload'])) {
+ spl_autoload_register();
+ }
+ } else {
+ self::register($prepend);
+ }
+ }
+
+ /**
+ * Registers Smarty_Autoloader as an SPL autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not.
+ */
+ public static function register($prepend = false)
+ {
+ self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . DIRECTORY_SEPARATOR;
+ self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR :
+ self::$SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR;
+ if (version_compare(phpversion(), '5.3.0', '>=')) {
+ spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend);
+ } else {
+ spl_autoload_register(array(__CLASS__, 'autoload'));
+ }
+ }
+
+ /**
+ * Handles auto loading of classes.
+ *
+ * @param string $class A class name.
+ */
+ public static function autoload($class)
+ {
+ $_class = strtolower($class);
+ $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php';
+ if (strpos($_class, 'smarty_internal_') === 0) {
+ if (strpos($_class, 'smarty_internal_compile_') === 0) {
+ if (is_file($file)) {
+ require $file;
+ }
+ return;
+ }
+ @include $file;
+ return;
+ }
+ if (preg_match('/^(smarty_(((template_(source|config|cache|compiled|resource_base))|((cached|compiled)?resource)|(variable|security)))|(smarty(bc)?)$)/',
+ $_class, $match)) {
+ if (!empty($match[3])) {
+ @include $file;
+ return;
+ } elseif (!empty($match[9]) && isset(self::$rootClasses[$_class])) {
+ $file = self::$rootClasses[$_class];
+ require $file;
+ return;
+ }
+ }
+ if (0 !== strpos($_class, 'smarty')) {
+ return;
+ }
+ if (is_file($file)) {
+ require $file;
+ return;
+ }
+ return;
+ }
+}
diff --git a/include/smarty/libs/Smarty.class.php b/include/smarty/libs/Smarty.class.php
index 40532fc2a..a029f942e 100644
--- a/include/smarty/libs/Smarty.class.php
+++ b/include/smarty/libs/Smarty.class.php
@@ -2,7 +2,6 @@
/**
* Project: Smarty: the PHP compiling template engine
* File: Smarty.class.php
- * SVN: $Id: Smarty.class.php 4694 2013-01-13 21:13:14Z uwe.tews@googlemail.com $
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -17,18 +16,18 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
* For questions, help, comments, discussion, etc., please join the
* Smarty mailing list. Send a blank e-mail to
* smarty-discussion-subscribe@googlegroups.com
*
- * @link http://www.smarty.net/
- * @copyright 2008 New Digital Group, Inc.
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Uwe Tews
- * @author Rodney Rehm
- * @package Smarty
- * @version 3.1.13
+ * @link http://www.smarty.net/
+ * @copyright 2015 New Digital Group, Inc.
+ * @copyright 2015 Uwe Tews
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Uwe Tews
+ * @author Rodney Rehm
+ * @package Smarty
+ * @version 3.1.29
*/
/**
@@ -57,7 +56,7 @@ if (!defined('SMARTY_PLUGINS_DIR')) {
define('SMARTY_PLUGINS_DIR', SMARTY_DIR . 'plugins' . DS);
}
if (!defined('SMARTY_MBSTRING')) {
- define('SMARTY_MBSTRING', function_exists('mb_split'));
+ define('SMARTY_MBSTRING', function_exists('mb_get_info'));
}
if (!defined('SMARTY_RESOURCE_CHAR_SET')) {
// UTF-8 can only be done properly when mbstring is available!
@@ -74,38 +73,44 @@ if (!defined('SMARTY_RESOURCE_DATE_FORMAT')) {
}
/**
- * register the class autoloader
+ * Try loading the Smarty_Internal_Data class
+ * If we fail we must load Smarty's autoloader.
+ * Otherwise we may have a global autoloader like Composer
*/
-if (!defined('SMARTY_SPL_AUTOLOAD')) {
- define('SMARTY_SPL_AUTOLOAD', 0);
-}
-
-if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false) {
- $registeredAutoLoadFunctions = spl_autoload_functions();
- if (!isset($registeredAutoLoadFunctions['spl_autoload'])) {
- spl_autoload_register();
+if (!class_exists('Smarty_Autoloader', false)) {
+ if (!class_exists('Smarty_Internal_Data', true)) {
+ require_once dirname(__FILE__) . '/Autoloader.php';
+ Smarty_Autoloader::registerBC();
}
-} else {
- spl_autoload_register('smartyAutoload');
}
/**
* Load always needed external class files
*/
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_data.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_templatebase.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_template.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_resource.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_resource_file.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_cacheresource.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_cacheresource_file.php';
+if (!class_exists('Smarty_Internal_Data', false)) {
+ require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_data.php';
+}
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_extension_handler.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_templatebase.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_template.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_resource.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_variable.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_template_source.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_template_resource_base.php';
/**
* This is the main Smarty class
+ *
* @package Smarty
+ *
+ * @method int clearAllCache(int $exp_time = null, string $type = null)
+ * @method int clearCache(string $template_name, string $cache_id = null, string $compile_id = null, int $exp_time = null, string $type = null)
+ * @method int compileAllTemplates(Smarty $smarty, string $extension = '.tpl', bool $force_compile = false, int $time_limit = 0, int $max_errors = null)
+ * @method int compileAllConfig(Smarty $smarty, string $extension = '.conf', bool $force_compile = false, int $time_limit = 0, int $max_errors = null)
+ *
*/
-class Smarty extends Smarty_Internal_TemplateBase {
-
+class Smarty extends Smarty_Internal_TemplateBase
+{
/**#@+
* constant definitions
*/
@@ -113,50 +118,103 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* smarty version
*/
- const SMARTY_VERSION = 'Smarty-3.1.13';
+ const SMARTY_VERSION = '3.1.29';
/**
* define variable scopes
*/
const SCOPE_LOCAL = 0;
- const SCOPE_PARENT = 1;
- const SCOPE_ROOT = 2;
- const SCOPE_GLOBAL = 3;
+
+ const SCOPE_PARENT = 2;
+
+ const SCOPE_TPL_ROOT = 4;
+
+ const SCOPE_ROOT = 8;
+
+ const SCOPE_SMARTY = 16;
+
+ const SCOPE_GLOBAL = 32;
+
+ const SCOPE_BUBBLE_UP = 64;
+
/**
* define caching modes
*/
const CACHING_OFF = 0;
+
const CACHING_LIFETIME_CURRENT = 1;
+
const CACHING_LIFETIME_SAVED = 2;
+
+ /**
+ * define constant for clearing cache files be saved expiration dates
+ */
+ const CLEAR_EXPIRED = - 1;
+
/**
* define compile check modes
*/
const COMPILECHECK_OFF = 0;
+
const COMPILECHECK_ON = 1;
+
const COMPILECHECK_CACHEMISS = 2;
+
+ /**
+ * define debug modes
+ */
+ const DEBUG_OFF = 0;
+
+ const DEBUG_ON = 1;
+
+ const DEBUG_INDIVIDUAL = 2;
+
/**
* modes for handling of "<?php ... ?>" tags in templates.
*/
const PHP_PASSTHRU = 0; //-> print tags as plain text
+
const PHP_QUOTE = 1; //-> escape tags as entities
+
const PHP_REMOVE = 2; //-> escape tags as entities
+
const PHP_ALLOW = 3; //-> escape tags as entities
+
/**
* filter types
*/
const FILTER_POST = 'post';
+
const FILTER_PRE = 'pre';
+
const FILTER_OUTPUT = 'output';
+
const FILTER_VARIABLE = 'variable';
+
/**
* plugin types
*/
const PLUGIN_FUNCTION = 'function';
+
const PLUGIN_BLOCK = 'block';
+
const PLUGIN_COMPILER = 'compiler';
+
const PLUGIN_MODIFIER = 'modifier';
+
const PLUGIN_MODIFIERCOMPILER = 'modifiercompiler';
+ /**
+ * Resource caching modes
+ */
+ const RESOURCE_CACHE_OFF = 0;
+
+ const RESOURCE_CACHE_AUTOMATIC = 1; // cache template objects by rules
+
+ const RESOURCE_CACHE_TEMPLATE = 2; // cache all template objects
+
+ const RESOURCE_CACHE_ON = 4; // cache source and compiled resources
+
/**#@-*/
/**
@@ -165,26 +223,31 @@ class Smarty extends Smarty_Internal_TemplateBase {
public static $global_tpl_vars = array();
/**
- * error handler returned by set_error_hanlder() in Smarty::muteExpectedErrors()
+ * error handler returned by set_error_handler() in Smarty::muteExpectedErrors()
*/
public static $_previous_error_handler = null;
+
/**
* contains directories outside of SMARTY_DIR that are to be muted by muteExpectedErrors()
*/
public static $_muted_directories = array();
+
/**
* Flag denoting if Multibyte String functions are available
*/
public static $_MBSTRING = SMARTY_MBSTRING;
+
/**
* The character set to adhere to (e.g. "UTF-8")
*/
public static $_CHARSET = SMARTY_RESOURCE_CHAR_SET;
+
/**
* The date format to be used internally
* (accepts date() and strftime())
*/
public static $_DATE_FORMAT = SMARTY_RESOURCE_DATE_FORMAT;
+
/**
* Flag denoting if PCRE should run in UTF-8 mode
*/
@@ -200,216 +263,227 @@ class Smarty extends Smarty_Internal_TemplateBase {
*/
/**
- * auto literal on delimiters with whitspace
+ * auto literal on delimiters with whitespace
+ *
* @var boolean
*/
public $auto_literal = true;
+
/**
* display error on not assigned variables
+ *
* @var boolean
*/
public $error_unassigned = false;
+
/**
- * look up relative filepaths in include_path
+ * look up relative file path in include_path
+ *
* @var boolean
*/
public $use_include_path = false;
+
/**
* template directory
+ *
* @var array
*/
- private $template_dir = array();
+ private $template_dir = array('./templates/');
+
/**
* joined template directory string used in cache keys
+ *
* @var string
*/
- public $joined_template_dir = null;
+ public $_joined_template_dir = null;
+
/**
* joined config directory string used in cache keys
+ *
* @var string
*/
- public $joined_config_dir = null;
+ public $_joined_config_dir = null;
+
/**
* default template handler
+ *
* @var callable
*/
public $default_template_handler_func = null;
+
/**
* default config handler
+ *
* @var callable
*/
public $default_config_handler_func = null;
+
/**
* default plugin handler
+ *
* @var callable
*/
public $default_plugin_handler_func = null;
+
/**
* compile directory
+ *
* @var string
*/
- private $compile_dir = null;
+ private $compile_dir = './templates_c/';
+
/**
* plugins directory
+ *
* @var array
*/
- private $plugins_dir = array();
+ private $plugins_dir = null;
+
/**
* cache directory
+ *
* @var string
*/
- private $cache_dir = null;
+ private $cache_dir = './cache/';
+
/**
* config directory
+ *
* @var array
*/
- private $config_dir = array();
+ private $config_dir = array('./configs/');
+
/**
* force template compiling?
+ *
* @var boolean
*/
public $force_compile = false;
+
/**
* check template for modifications?
+ *
* @var boolean
*/
public $compile_check = true;
+
/**
* use sub dirs for compiled/cached files?
+ *
* @var boolean
*/
public $use_sub_dirs = false;
+
/**
* allow ambiguous resources (that are made unique by the resource handler)
+ *
* @var boolean
*/
public $allow_ambiguous_resources = false;
- /**
- * caching enabled
- * @var boolean
- */
- public $caching = false;
+
/**
* merge compiled includes
+ *
* @var boolean
*/
public $merge_compiled_includes = false;
- /**
- * cache lifetime in seconds
- * @var integer
- */
- public $cache_lifetime = 3600;
+
/**
* force cache file creation
+ *
* @var boolean
*/
public $force_cache = false;
- /**
- * Set this if you want different sets of cache files for the same
- * templates.
- *
- * @var string
- */
- public $cache_id = null;
- /**
- * Set this if you want different sets of compiled files for the same
- * templates.
- *
- * @var string
- */
- public $compile_id = null;
+
/**
* template left-delimiter
+ *
* @var string
*/
public $left_delimiter = "{";
+
/**
* template right-delimiter
+ *
* @var string
*/
public $right_delimiter = "}";
+
/**#@+
* security
*/
/**
* class name
- *
* This should be instance of Smarty_Security.
*
* @var string
* @see Smarty_Security
*/
public $security_class = 'Smarty_Security';
+
/**
* implementation of security class
*
* @var Smarty_Security
*/
public $security_policy = null;
+
/**
* controls handling of PHP-blocks
*
* @var integer
*/
public $php_handling = self::PHP_PASSTHRU;
+
/**
* controls if the php template file resource is allowed
*
* @var bool
*/
public $allow_php_templates = false;
- /**
- * Should compiled-templates be prevented from being called directly?
- *
- * {@internal
- * Currently used by Smarty_Internal_Template only.
- * }}
- *
- * @var boolean
- */
- public $direct_access_security = true;
+
/**#@-*/
/**
* debug mode
- *
* Setting this to true enables the debug-console.
*
* @var boolean
*/
public $debugging = false;
+
/**
* This determines if debugging is enable-able from the browser.
* <ul>
* <li>NONE => no debugging control allowed</li>
* <li>URL => enable debugging when SMARTY_DEBUG is found in the URL.</li>
* </ul>
+ *
* @var string
*/
public $debugging_ctrl = 'NONE';
+
/**
* Name of debugging URL-param.
- *
* Only used when $debugging_ctrl is set to 'URL'.
* The name of the URL-parameter that activates debugging.
*
- * @var type
+ * @var string
*/
public $smarty_debug_id = 'SMARTY_DEBUG';
+
/**
* Path of debug template.
+ *
* @var string
*/
public $debug_tpl = null;
+
/**
* When set, smarty uses this value as error_reporting-level.
+ *
* @var int
*/
public $error_reporting = null;
- /**
- * Internal flag for getTags()
- * @var boolean
- */
- public $get_used_tags = false;
/**#@+
* config var settings
@@ -417,16 +491,21 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Controls whether variables with the same name overwrite each other.
+ *
* @var boolean
*/
public $config_overwrite = true;
+
/**
* Controls whether config values of on/true/yes and off/false/no get converted to boolean.
+ *
* @var boolean
*/
public $config_booleanize = true;
+
/**
* Controls whether hidden config sections/vars are read from the file.
+ *
* @var boolean
*/
public $config_read_hidden = false;
@@ -439,16 +518,21 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* locking concurrent compiles
+ *
* @var boolean
*/
public $compile_locking = true;
+
/**
- * Controls whether cache resources should emply locking mechanism
+ * Controls whether cache resources should use locking mechanism
+ *
* @var boolean
*/
public $cache_locking = false;
+
/**
* seconds to wait for acquiring a lock before ignoring the write lock
+ *
* @var float
*/
public $locking_timeout = 10;
@@ -456,270 +540,203 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**#@-*/
/**
- * global template functions
- * @var array
- */
- public $template_functions = array();
- /**
* resource type used if none given
- *
* Must be an valid key of $registered_resources.
+ *
* @var string
*/
public $default_resource_type = 'file';
+
/**
* caching type
- *
* Must be an element of $cache_resource_types.
*
* @var string
*/
public $caching_type = 'file';
- /**
- * internal config properties
- * @var array
- */
- public $properties = array();
+
/**
* config type
+ *
* @var string
*/
public $default_config_type = 'file';
+
/**
- * cached template objects
- * @var array
+ * enable resource caching
+ *
+ * @var bool
*/
- public $template_objects = array();
+ public $resource_cache_mode = 1;
+
/**
* check If-Modified-Since headers
+ *
* @var boolean
*/
public $cache_modified_check = false;
+
/**
* registered plugins
+ *
* @var array
*/
public $registered_plugins = array();
- /**
- * plugin search order
- * @var array
- */
- public $plugin_search_order = array('function', 'block', 'compiler', 'class');
+
/**
* registered objects
+ *
* @var array
*/
public $registered_objects = array();
+
/**
* registered classes
+ *
* @var array
*/
public $registered_classes = array();
+
/**
* registered filters
+ *
* @var array
*/
public $registered_filters = array();
+
/**
* registered resources
+ *
* @var array
*/
public $registered_resources = array();
- /**
- * resource handler cache
- * @var array
- */
- public $_resource_handlers = array();
+
/**
* registered cache resources
+ *
* @var array
*/
public $registered_cache_resources = array();
- /**
- * cache resource handler cache
- * @var array
- */
- public $_cacheresource_handlers = array();
+
/**
* autoload filter
+ *
* @var array
*/
public $autoload_filters = array();
+
/**
* default modifier
+ *
* @var array
*/
public $default_modifiers = array();
+
/**
* autoescape variable output
+ *
* @var boolean
*/
public $escape_html = false;
- /**
- * global internal smarty vars
- * @var array
- */
- public static $_smarty_vars = array();
+
/**
* start time for execution time calculation
+ *
* @var int
*/
public $start_time = 0;
- /**
- * default file permissions
- * @var int
- */
- public $_file_perms = 0644;
- /**
- * default dir permissions
- * @var int
- */
- public $_dir_perms = 0771;
- /**
- * block tag hierarchy
- * @var array
- */
- public $_tag_stack = array();
- /**
- * self pointer to Smarty object
- * @var Smarty
- */
- public $smarty;
+
/**
* required by the compiler for BC
+ *
* @var string
*/
public $_current_file = null;
+
/**
* internal flag to enable parser debugging
+ *
* @var bool
*/
public $_parserdebug = false;
+
/**
- * Saved parameter of merged templates during compilation
+ * This object type (Smarty = 1, template = 2, data = 4)
*
- * @var array
+ * @var int
*/
- public $merged_templates_func = array();
- /**#@-*/
+ public $_objType = 1;
/**
- * Initialize new Smarty object
+ * Debug object
*
+ * @var Smarty_Internal_Debug
*/
- public function __construct()
- {
- // selfpointer needed by some other class methods
- $this->smarty = $this;
- if (is_callable('mb_internal_encoding')) {
- mb_internal_encoding(Smarty::$_CHARSET);
- }
- $this->start_time = microtime(true);
- // set default dirs
- $this->setTemplateDir('.' . DS . 'templates' . DS)
- ->setCompileDir('.' . DS . 'templates_c' . DS)
- ->setPluginsDir(SMARTY_PLUGINS_DIR)
- ->setCacheDir('.' . DS . 'cache' . DS)
- ->setConfigDir('.' . DS . 'configs' . DS);
-
- $this->debug_tpl = 'file:' . dirname(__FILE__) . '/debug.tpl';
- if (isset($_SERVER['SCRIPT_NAME'])) {
- $this->assignGlobal('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']);
- }
- }
-
+ public $_debug = null;
/**
- * Class destructor
+ * removed properties
+ *
+ * @var string[]
*/
- public function __destruct()
- {
- // intentionally left blank
- }
+ private static $obsoleteProperties = array('resource_caching', 'template_resource_caching',
+ 'direct_access_security', '_dir_perms', '_file_perms',
+ 'plugin_search_order', 'inheritance_merge_compiled_includes');
/**
- * <<magic>> set selfpointer on cloned object
+ * List of private properties which will call getter/setter ona direct access
+ *
+ * @var array
*/
- public function __clone()
- {
- $this->smarty = $this;
- }
+ private static $accessMap = array('template_dir' => 'TemplateDir', 'config_dir' => 'ConfigDir',
+ 'plugins_dir' => 'PluginsDir', 'compile_dir' => 'CompileDir',
+ 'cache_dir' => 'CacheDir',);
+ /**#@-*/
/**
- * <<magic>> Generic getter.
- *
- * Calls the appropriate getter function.
- * Issues an E_USER_NOTICE if no valid getter is found.
- *
- * @param string $name property name
- * @return mixed
+ * Initialize new Smarty object
*/
- public function __get($name)
+ public function __construct()
{
- $allowed = array(
- 'template_dir' => 'getTemplateDir',
- 'config_dir' => 'getConfigDir',
- 'plugins_dir' => 'getPluginsDir',
- 'compile_dir' => 'getCompileDir',
- 'cache_dir' => 'getCacheDir',
- );
-
- if (isset($allowed[$name])) {
- return $this->{$allowed[$name]}();
- } else {
- trigger_error('Undefined property: '. get_class($this) .'::$'. $name, E_USER_NOTICE);
+ parent::__construct();
+ if (is_callable('mb_internal_encoding')) {
+ mb_internal_encoding(Smarty::$_CHARSET);
}
- }
+ $this->start_time = microtime(true);
- /**
- * <<magic>> Generic setter.
- *
- * Calls the appropriate setter function.
- * Issues an E_USER_NOTICE if no valid setter is found.
- *
- * @param string $name property name
- * @param mixed $value parameter passed to setter
- */
- public function __set($name, $value)
- {
- $allowed = array(
- 'template_dir' => 'setTemplateDir',
- 'config_dir' => 'setConfigDir',
- 'plugins_dir' => 'setPluginsDir',
- 'compile_dir' => 'setCompileDir',
- 'cache_dir' => 'setCacheDir',
- );
-
- if (isset($allowed[$name])) {
- $this->{$allowed[$name]}($value);
- } else {
- trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
+ if (isset($_SERVER['SCRIPT_NAME'])) {
+ Smarty::$global_tpl_vars['SCRIPT_NAME'] = new Smarty_Variable($_SERVER['SCRIPT_NAME']);
+ }
+
+ // Check if we're running on windows
+ Smarty::$_IS_WINDOWS = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';
+
+ // let PCRE (preg_*) treat strings as ISO-8859-1 if we're not dealing with UTF-8
+ if (Smarty::$_CHARSET !== 'UTF-8') {
+ Smarty::$_UTF8_MODIFIER = '';
}
}
/**
* Check if a template resource exists
*
- * @param string $resource_name template name
+ * @param string $resource_name template name
+ *
* @return boolean status
*/
public function templateExists($resource_name)
{
- // create template object
- $save = $this->template_objects;
- $tpl = new $this->template_class($resource_name, $this);
- // check if it does exists
- $result = $tpl->source->exists;
- $this->template_objects = $save;
- return $result;
+ // create source object
+ $source = Smarty_Template_Source::load(null, $this, $resource_name);
+ return $source->exists;
}
/**
* Returns a single or all global variables
*
- * @param object $smarty
- * @param string $varname variable name or null
+ * @param string $varname variable name or null
+ *
* @return string variable value or or array of variables
*/
public function getGlobal($varname = null)
@@ -735,74 +752,28 @@ class Smarty extends Smarty_Internal_TemplateBase {
foreach (self::$global_tpl_vars AS $key => $var) {
$_result[$key] = $var->value;
}
+
return $_result;
}
}
/**
- * Empty cache folder
- *
- * @param integer $exp_time expiration time
- * @param string $type resource type
- * @return integer number of cache files deleted
- */
- function clearAllCache($exp_time = null, $type = null)
- {
- // load cache resource and call clearAll
- $_cache_resource = Smarty_CacheResource::load($this, $type);
- Smarty_CacheResource::invalidLoadedCache($this);
- return $_cache_resource->clearAll($this, $exp_time);
- }
-
- /**
- * Empty cache for a specific template
- *
- * @param string $template_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time
- * @param string $type resource type
- * @return integer number of cache files deleted
- */
- public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null)
- {
- // load cache resource and call clear
- $_cache_resource = Smarty_CacheResource::load($this, $type);
- Smarty_CacheResource::invalidLoadedCache($this);
- return $_cache_resource->clear($this, $template_name, $cache_id, $compile_id, $exp_time);
- }
-
- /**
* Loads security class and enables security
*
- * @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
+ * @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 function enableSecurity($security_class = null)
{
- if ($security_class instanceof Smarty_Security) {
- $this->security_policy = $security_class;
- return $this;
- } elseif (is_object($security_class)) {
- throw new SmartyException("Class '" . get_class($security_class) . "' must extend Smarty_Security.");
- }
- if ($security_class == null) {
- $security_class = $this->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 {
- $this->security_policy = new $security_class($this);
- }
-
+ Smarty_Security::enableSecurity($this, $security_class);
return $this;
}
/**
* Disable security
+ *
* @return Smarty current Smarty instance for chaining
*/
public function disableSecurity()
@@ -815,179 +786,145 @@ class Smarty extends Smarty_Internal_TemplateBase {
/**
* Set template directory
*
- * @param string|array $template_dir directory(s) of template sources
- * @return Smarty current Smarty instance for chaining
+ * @param string|array $template_dir directory(s) of template sources
+ * @param bool $isConfig true for config_dir
+ *
+ * @return \Smarty current Smarty instance for chaining
*/
- public function setTemplateDir($template_dir)
+ public function setTemplateDir($template_dir, $isConfig = false)
{
- $this->template_dir = array();
- foreach ((array) $template_dir as $k => $v) {
- $this->template_dir[$k] = rtrim($v, '/\\') . DS;
- }
-
- $this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir);
+ $type = $isConfig ? 'config_dir' : 'template_dir';
+ $joined = '_joined_' . $type;
+ $this->{$type} = (array) $template_dir;
+ $this->{$joined} = join(' # ', $this->{$type});
+ $this->_cache[$type . '_new'] = true;
+ $this->_cache[$type] = false;
return $this;
}
/**
* Add template directory(s)
*
- * @param string|array $template_dir directory(s) of template sources
- * @param string $key of the array element to assign the template dir to
- * @return Smarty current Smarty instance for chaining
- * @throws SmartyException when the given template directory is not valid
+ * @param string|array $template_dir directory(s) of template sources
+ * @param string $key of the array element to assign the template dir to
+ * @param bool $isConfig true for config_dir
+ *
+ * @return Smarty current Smarty instance for chaining
*/
- public function addTemplateDir($template_dir, $key=null)
+ public function addTemplateDir($template_dir, $key = null, $isConfig = false)
{
- // make sure we're dealing with an array
- $this->template_dir = (array) $this->template_dir;
-
- if (is_array($template_dir)) {
- foreach ($template_dir as $k => $v) {
- if (is_int($k)) {
- // indexes are not merged but appended
- $this->template_dir[] = rtrim($v, '/\\') . DS;
- } else {
- // string indexes are overridden
- $this->template_dir[$k] = rtrim($v, '/\\') . DS;
- }
- }
- } elseif ($key !== null) {
- // override directory at specified index
- $this->template_dir[$key] = rtrim($template_dir, '/\\') . DS;
- } else {
- // append new directory
- $this->template_dir[] = rtrim($template_dir, '/\\') . DS;
+ $type = $isConfig ? 'config_dir' : 'template_dir';
+ $joined = '_joined_' . $type;
+ if (!isset($this->_cache[$type])) {
+ $this->{$type} = (array) $this->{$type};
+ $this->{$joined} = join(' # ', $this->{$type});
+ $this->_cache[$type . '_new'] = true;
+ $this->_cache[$type] = false;
}
- $this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir);
+ $this->{$joined} .= ' # ' . join(' # ', (array) $template_dir);
+ $this->_addDir($type, $template_dir, $key);
return $this;
}
/**
* Get template directories
*
- * @param mixed index of directory to get, null to get all
- * @return array|string list of template directories, or directory of $index
+ * @param mixed $index index of directory to get, null to get all
+ * @param bool $isConfig true for config_dir
+ *
+ * @return array list of template directories, or directory of $index
*/
- public function getTemplateDir($index=null)
+ public function getTemplateDir($index = null, $isConfig = false)
{
+ $type = $isConfig ? 'config_dir' : 'template_dir';
+ if (!isset($this->_cache[$type])) {
+ $joined = '_joined_' . $type;
+ $this->{$type} = (array) $this->{$type};
+ $this->{$joined} = join(' # ', $this->{$type});
+ $this->_cache[$type] = false;
+ }
+ if ($this->_cache[$type] == false) {
+ foreach ($this->{$type} as $k => $v) {
+ $this->{$type}[$k] = $this->_realpath($v . DS, true);
+ }
+ $this->_cache[$type . '_new'] = true;
+ $this->_cache[$type] = true;
+ }
if ($index !== null) {
- return isset($this->template_dir[$index]) ? $this->template_dir[$index] : null;
+ return isset($this->{$type}[$index]) ? $this->{$type}[$index] : null;
}
-
- return (array)$this->template_dir;
+ return $this->{$type};
}
/**
* Set config directory
*
- * @param string|array $template_dir directory(s) of configuration sources
- * @return Smarty current Smarty instance for chaining
+ * @param $config_dir
+ *
+ * @return Smarty current Smarty instance for chaining
*/
public function setConfigDir($config_dir)
{
- $this->config_dir = array();
- foreach ((array) $config_dir as $k => $v) {
- $this->config_dir[$k] = rtrim($v, '/\\') . DS;
- }
-
- $this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir);
- return $this;
+ return $this->setTemplateDir($config_dir, true);
}
/**
* Add config directory(s)
*
* @param string|array $config_dir directory(s) of config sources
- * @param string key of the array element to assign the config dir to
+ * @param mixed $key key of the array element to assign the config dir to
+ *
* @return Smarty current Smarty instance for chaining
*/
- public function addConfigDir($config_dir, $key=null)
+ public function addConfigDir($config_dir, $key = null)
{
- // make sure we're dealing with an array
- $this->config_dir = (array) $this->config_dir;
-
- if (is_array($config_dir)) {
- foreach ($config_dir as $k => $v) {
- if (is_int($k)) {
- // indexes are not merged but appended
- $this->config_dir[] = rtrim($v, '/\\') . DS;
- } else {
- // string indexes are overridden
- $this->config_dir[$k] = rtrim($v, '/\\') . DS;
- }
- }
- } elseif( $key !== null ) {
- // override directory at specified index
- $this->config_dir[$key] = rtrim($config_dir, '/\\') . DS;
- } else {
- // append new directory
- $this->config_dir[] = rtrim($config_dir, '/\\') . DS;
- }
-
- $this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir);
- return $this;
+ return $this->addTemplateDir($config_dir, $key, true);
}
/**
* Get config directory
*
- * @param mixed index of directory to get, null to get all
- * @return array|string configuration directory
+ * @param mixed $index index of directory to get, null to get all
+ *
+ * @return array configuration directory
*/
- public function getConfigDir($index=null)
+ public function getConfigDir($index = null)
{
- if ($index !== null) {
- return isset($this->config_dir[$index]) ? $this->config_dir[$index] : null;
- }
-
- return (array)$this->config_dir;
+ return $this->getTemplateDir($index, true);
}
/**
* Set plugins directory
*
- * @param string|array $plugins_dir directory(s) of plugins
- * @return Smarty current Smarty instance for chaining
+ * @param string|array $plugins_dir directory(s) of plugins
+ *
+ * @return Smarty current Smarty instance for chaining
*/
public function setPluginsDir($plugins_dir)
{
- $this->plugins_dir = array();
- foreach ((array)$plugins_dir as $k => $v) {
- $this->plugins_dir[$k] = rtrim($v, '/\\') . DS;
+ $this->plugins_dir = (array) $plugins_dir;
+ if (isset($this->_cache['plugins_dir'])) {
+ unset($this->_cache['plugins_dir']);
}
-
return $this;
}
/**
* Adds directory of plugin files
*
- * @param object $smarty
- * @param string $ |array $ plugins folder
+ * @param $plugins_dir
+ *
* @return Smarty current Smarty instance for chaining
*/
public function addPluginsDir($plugins_dir)
{
- // make sure we're dealing with an array
- $this->plugins_dir = (array) $this->plugins_dir;
-
- if (is_array($plugins_dir)) {
- foreach ($plugins_dir as $k => $v) {
- if (is_int($k)) {
- // indexes are not merged but appended
- $this->plugins_dir[] = rtrim($v, '/\\') . DS;
- } else {
- // string indexes are overridden
- $this->plugins_dir[$k] = rtrim($v, '/\\') . DS;
- }
- }
- } else {
- // append new directory
- $this->plugins_dir[] = rtrim($plugins_dir, '/\\') . DS;
+ if (!isset($this->plugins_dir)) {
+ $this->plugins_dir = array(SMARTY_PLUGINS_DIR);
+ }
+ $this->plugins_dir = array_merge((array) $this->plugins_dir, (array) $plugins_dir);
+ if (isset($this->_cache['plugins_dir'])) {
+ unset($this->_cache['plugins_dir']);
}
-
- $this->plugins_dir = array_unique($this->plugins_dir);
return $this;
}
@@ -998,21 +935,37 @@ class Smarty extends Smarty_Internal_TemplateBase {
*/
public function getPluginsDir()
{
- return (array)$this->plugins_dir;
+ if (!isset($this->_cache['plugins_dir'])) {
+ if (!isset($this->plugins_dir)) {
+ $this->plugins_dir = array(SMARTY_PLUGINS_DIR);
+ } else {
+ $plugins_dir = (array) $this->plugins_dir;
+ $this->plugins_dir = array();
+ foreach ($plugins_dir as $v) {
+ $this->plugins_dir[] = $this->_realpath($v . DS, true);
+ }
+ $this->plugins_dir = array_unique($this->plugins_dir);
+ }
+ $this->_cache['plugin_files'] = array();
+ $this->_cache['plugins_dir'] = true;
+ }
+ return $this->plugins_dir;
}
/**
* Set compile directory
*
- * @param string $compile_dir directory to store compiled templates in
+ * @param string $compile_dir directory to store compiled templates in
+ *
* @return Smarty current Smarty instance for chaining
*/
public function setCompileDir($compile_dir)
{
- $this->compile_dir = rtrim($compile_dir, '/\\') . DS;
+ $this->compile_dir = $this->_realpath($compile_dir . DS, true);
if (!isset(Smarty::$_muted_directories[$this->compile_dir])) {
Smarty::$_muted_directories[$this->compile_dir] = null;
}
+ $this->_cache['compile_dir'] = true;
return $this;
}
@@ -1023,21 +976,30 @@ class Smarty extends Smarty_Internal_TemplateBase {
*/
public function getCompileDir()
{
+ if (!isset($this->_cache['compile_dir'])) {
+ $this->compile_dir = $this->_realpath($this->compile_dir . DS, true);
+ if (!isset(Smarty::$_muted_directories[$this->compile_dir])) {
+ Smarty::$_muted_directories[$this->compile_dir] = null;
+ }
+ $this->_cache['compile_dir'] = true;
+ }
return $this->compile_dir;
}
/**
* Set cache directory
*
- * @param string $cache_dir directory to store cached templates in
+ * @param string $cache_dir directory to store cached templates in
+ *
* @return Smarty current Smarty instance for chaining
*/
public function setCacheDir($cache_dir)
{
- $this->cache_dir = rtrim($cache_dir, '/\\') . DS;
+ $this->cache_dir = $this->_realpath($cache_dir . DS, true);
if (!isset(Smarty::$_muted_directories[$this->cache_dir])) {
Smarty::$_muted_directories[$this->cache_dir] = null;
}
+ $this->_cache['cache_dir'] = true;
return $this;
}
@@ -1048,341 +1010,389 @@ class Smarty extends Smarty_Internal_TemplateBase {
*/
public function getCacheDir()
{
+ if (!isset($this->_cache['cache_dir'])) {
+ $this->cache_dir = $this->_realpath($this->cache_dir . DS, true);
+ if (!isset(Smarty::$_muted_directories[$this->cache_dir])) {
+ Smarty::$_muted_directories[$this->cache_dir] = null;
+ }
+ $this->_cache['cache_dir'] = true;
+ }
return $this->cache_dir;
}
/**
- * Set default modifiers
+ * add directories to given property name
*
- * @param array|string $modifiers modifier or list of modifiers to set
- * @return Smarty current Smarty instance for chaining
+ * @param string $dirName directory property name
+ * @param string|array $dir directory string or array of strings
+ * @param mixed $key optional key
*/
- public function setDefaultModifiers($modifiers)
+ private function _addDir($dirName, $dir, $key = null)
{
- $this->default_modifiers = (array) $modifiers;
- return $this;
+ $rp = $this->_cache[$dirName];
+ if (is_array($dir)) {
+ foreach ($dir as $k => $v) {
+ $path = $rp ? $this->_realpath($v . DS, true) : $v;
+ if (is_int($k)) {
+ // indexes are not merged but appended
+ $this->{$dirName}[] = $path;
+ } else {
+ // string indexes are overridden
+ $this->{$dirName}[$k] = $path;
+ }
+ }
+ } else {
+ $path = $rp ? $this->_realpath($dir . DS, true) : $dir;
+ if ($key !== null) {
+ // override directory at specified index
+ $this->{$dirName}[$key] = $path;
+ } else {
+ // append new directory
+ $this->{$dirName}[] = $path;
+ }
+ }
}
/**
- * Add default modifiers
+ * creates a template object
*
- * @param array|string $modifiers modifier or list of modifiers to add
- * @return Smarty current Smarty instance for chaining
+ * @param string $template the resource handle of the template file
+ * @param mixed $cache_id cache id to be used with this template
+ * @param mixed $compile_id compile id to be used with this template
+ * @param object $parent next higher level of Smarty variables
+ * @param boolean $do_clone flag is Smarty object shall be cloned
+ *
+ * @return object template object
*/
- public function addDefaultModifiers($modifiers)
+ public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true)
{
- if (is_array($modifiers)) {
- $this->default_modifiers = array_merge($this->default_modifiers, $modifiers);
+ if ($cache_id !== null && (is_object($cache_id) || is_array($cache_id))) {
+ $parent = $cache_id;
+ $cache_id = null;
+ }
+ if ($parent !== null && is_array($parent)) {
+ $data = $parent;
+ $parent = null;
} else {
- $this->default_modifiers[] = $modifiers;
+ $data = null;
}
-
- return $this;
+ if ($this->caching &&
+ isset($this->_cache['isCached'][$_templateId = $this->_getTemplateId($template, $cache_id, $compile_id)])
+ ) {
+ $tpl = $do_clone ? clone $this->_cache['isCached'][$_templateId] : $this->_cache['isCached'][$_templateId];
+ $tpl->parent = $parent;
+ $tpl->tpl_vars = array();
+ $tpl->config_vars = array();
+ } else {
+ /* @var Smarty_Internal_Template $tpl */
+ $tpl = new $this->template_class($template, $this, $parent, $cache_id, $compile_id, null, null);
+ }
+ if ($do_clone) {
+ $tpl->smarty = clone $tpl->smarty;
+ } elseif ($parent === null) {
+ $tpl->parent = $this;
+ }
+ // fill data if present
+ if (!empty($data) && is_array($data)) {
+ // set up variable values
+ foreach ($data as $_key => $_val) {
+ $tpl->tpl_vars[$_key] = new Smarty_Variable($_val);
+ }
+ }
+ if ($this->debugging || $this->debugging_ctrl == 'URL') {
+ $tpl->smarty->_debug = new Smarty_Internal_Debug();
+ // check URL debugging control
+ if (!$this->debugging && $this->debugging_ctrl == 'URL') {
+ $tpl->smarty->_debug->debugUrl($tpl->smarty);
+ }
+ }
+ return $tpl;
}
/**
- * Get default modifiers
+ * Takes unknown classes and loads plugin files for them
+ * class name format: Smarty_PluginType_PluginName
+ * plugin filename format: plugintype.pluginname.php
+ *
+ * @param string $plugin_name class plugin name to load
+ * @param bool $check check if already loaded
*
- * @return array list of default modifiers
+ * @throws SmartyException
+ * @return string |boolean filepath of loaded file or false
*/
- public function getDefaultModifiers()
+ public function loadPlugin($plugin_name, $check = true)
{
- return $this->default_modifiers;
+ return $this->ext->loadPlugin->loadPlugin($this, $plugin_name, $check);
}
-
/**
- * Set autoload filters
+ * Get unique template id
*
- * @param array $filters filters to load automatically
- * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types
- * @return Smarty current Smarty instance for chaining
+ * @param string $template_name
+ * @param null|mixed $cache_id
+ * @param null|mixed $compile_id
+ * @param null $caching
+ *
+ * @return string
*/
- public function setAutoloadFilters($filters, $type=null)
+ public function _getTemplateId($template_name, $cache_id = null, $compile_id = null, $caching = null)
{
- if ($type !== null) {
- $this->autoload_filters[$type] = (array) $filters;
+ $cache_id = $cache_id === null ? $this->cache_id : $cache_id;
+ $compile_id = $compile_id === null ? $this->compile_id : $compile_id;
+ $caching = (int) ($caching === null ? $this->caching : $caching);
+
+ if ($this->allow_ambiguous_resources) {
+ $_templateId =
+ Smarty_Resource::getUniqueTemplateName($this, $template_name) . "#{$cache_id}#{$compile_id}#{$caching}";
} else {
- $this->autoload_filters = (array) $filters;
+ $_templateId = $this->_joined_template_dir . "#{$template_name}#{$cache_id}#{$compile_id}#{$caching}";
}
-
- return $this;
+ if (isset($_templateId[150])) {
+ $_templateId = sha1($_templateId);
+ }
+ return $_templateId;
}
/**
- * Add autoload filters
+ * Normalize path
+ * - remove /./ and /../
+ * - make it absolute if required
*
- * @param array $filters filters to load automatically
- * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types
- * @return Smarty current Smarty instance for chaining
+ * @param string $path file path
+ * @param bool $realpath leave $path relative
+ *
+ * @return string
*/
- public function addAutoloadFilters($filters, $type=null)
+ public function _realpath($path, $realpath = null)
{
- if ($type !== null) {
- if (!empty($this->autoload_filters[$type])) {
- $this->autoload_filters[$type] = array_merge($this->autoload_filters[$type], (array) $filters);
- } else {
- $this->autoload_filters[$type] = (array) $filters;
- }
- } else {
- foreach ((array) $filters as $key => $value) {
- if (!empty($this->autoload_filters[$key])) {
- $this->autoload_filters[$key] = array_merge($this->autoload_filters[$key], (array) $value);
- } else {
- $this->autoload_filters[$key] = (array) $value;
- }
- }
+ static $pattern = null;
+ static $nds = null;
+ if ($pattern == null) {
+ $nds = DS == '/' ? '\\' : '/';
+ $ds = '\\' . DS;
+ $pattern =
+ "#([{$ds}]+[^{$ds}]+[{$ds}]+[.]([{$ds}]+[.])*[.][{$ds}]+([.][{$ds}]+)*)|([{$ds}]+([.][{$ds}]+)+)|[{$ds}]{2,}#";
+ }
+ // normalize DS
+ if (strpos($path, $nds) !== false) {
+ $path = str_replace($nds, DS, $path);
}
- return $this;
+ if ($realpath === true && (($path[0] !== '/' && DS == '/') || ($path[1] !== ':' && DS != '/'))) {
+ $path = getcwd() . DS . $path;
+ }
+ while ((strpos($path, '.' . DS) !== false) || (strpos($path, DS . DS) !== false)) {
+ $path = preg_replace($pattern, DS, $path);
+ }
+ if ($realpath === false && ($path[0] == '/' || $path[1] == ':')) {
+ $path = str_ireplace(getcwd(), '.', $path);
+ }
+ return $path;
}
/**
- * Get autoload filters
- *
- * @param string $type type of filter to get autoloads for. Defaults to all autoload filters
- * @return array array( 'type1' => array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type was specified
+ * @param boolean $compile_check
*/
- public function getAutoloadFilters($type=null)
+ public function setCompileCheck($compile_check)
{
- if ($type !== null) {
- return isset($this->autoload_filters[$type]) ? $this->autoload_filters[$type] : array();
- }
+ $this->compile_check = $compile_check;
+ }
- return $this->autoload_filters;
+ /**
+ * @param boolean $use_sub_dirs
+ */
+ public function setUseSubDirs($use_sub_dirs)
+ {
+ $this->use_sub_dirs = $use_sub_dirs;
}
/**
- * return name of debugging template
- *
- * @return string
+ * @param int $error_reporting
*/
- public function getDebugTemplate()
+ public function setErrorReporting($error_reporting)
{
- return $this->debug_tpl;
+ $this->error_reporting = $error_reporting;
}
/**
- * set the debug template
- *
- * @param string $tpl_name
- * @return Smarty current Smarty instance for chaining
- * @throws SmartyException if file is not readable
+ * @param boolean $escape_html
*/
- public function setDebugTemplate($tpl_name)
+ public function setEscapeHtml($escape_html)
{
- if (!is_readable($tpl_name)) {
- throw new SmartyException("Unknown file '{$tpl_name}'");
- }
- $this->debug_tpl = $tpl_name;
+ $this->escape_html = $escape_html;
+ }
- return $this;
+ /**
+ * @param boolean $auto_literal
+ */
+ public function setAutoLiteral($auto_literal)
+ {
+ $this->auto_literal = $auto_literal;
}
/**
- * creates a template object
- *
- * @param string $template the resource handle of the template file
- * @param mixed $cache_id cache id to be used with this template
- * @param mixed $compile_id compile id to be used with this template
- * @param object $parent next higher level of Smarty variables
- * @param boolean $do_clone flag is Smarty object shall be cloned
- * @return object template object
+ * @param boolean $force_compile
*/
- public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true)
+ public function setForceCompile($force_compile)
{
- if (!empty($cache_id) && (is_object($cache_id) || is_array($cache_id))) {
- $parent = $cache_id;
- $cache_id = null;
- }
- if (!empty($parent) && is_array($parent)) {
- $data = $parent;
- $parent = null;
- } else {
- $data = null;
- }
- // default to cache_id and compile_id of Smarty object
- $cache_id = $cache_id === null ? $this->cache_id : $cache_id;
- $compile_id = $compile_id === null ? $this->compile_id : $compile_id;
- // already in template cache?
- if ($this->allow_ambiguous_resources) {
- $_templateId = Smarty_Resource::getUniqueTemplateName($this, $template) . $cache_id . $compile_id;
- } else {
- $_templateId = $this->joined_template_dir . '#' . $template . $cache_id . $compile_id;
- }
- if (isset($_templateId[150])) {
- $_templateId = sha1($_templateId);
- }
- if ($do_clone) {
- if (isset($this->template_objects[$_templateId])) {
- // return cached template object
- $tpl = clone $this->template_objects[$_templateId];
- $tpl->smarty = clone $tpl->smarty;
- $tpl->parent = $parent;
- $tpl->tpl_vars = array();
- $tpl->config_vars = array();
- } else {
- $tpl = new $this->template_class($template, clone $this, $parent, $cache_id, $compile_id);
- }
- } else {
- if (isset($this->template_objects[$_templateId])) {
- // return cached template object
- $tpl = $this->template_objects[$_templateId];
- $tpl->parent = $parent;
- $tpl->tpl_vars = array();
- $tpl->config_vars = array();
- } else {
- $tpl = new $this->template_class($template, $this, $parent, $cache_id, $compile_id);
- }
- }
- // fill data if present
- if (!empty($data) && is_array($data)) {
- // set up variable values
- foreach ($data as $_key => $_val) {
- $tpl->tpl_vars[$_key] = new Smarty_variable($_val);
- }
- }
- return $tpl;
+ $this->force_compile = $force_compile;
}
+ /**
+ * @param boolean $merge_compiled_includes
+ */
+ public function setMergeCompiledIncludes($merge_compiled_includes)
+ {
+ $this->merge_compiled_includes = $merge_compiled_includes;
+ }
/**
- * Takes unknown classes and loads plugin files for them
- * class name format: Smarty_PluginType_PluginName
- * plugin filename format: plugintype.pluginname.php
- *
- * @param string $plugin_name class plugin name to load
- * @param bool $check check if already loaded
- * @return string |boolean filepath of loaded file or false
+ * @param string $left_delimiter
*/
- public function loadPlugin($plugin_name, $check = true)
+ public function setLeftDelimiter($left_delimiter)
{
- // if function or class exists, exit silently (already loaded)
- if ($check && (is_callable($plugin_name) || class_exists($plugin_name, false))) {
- return true;
- }
- // Plugin name is expected to be: Smarty_[Type]_[Name]
- $_name_parts = explode('_', $plugin_name, 3);
- // class name must have three parts to be valid plugin
- // count($_name_parts) < 3 === !isset($_name_parts[2])
- if (!isset($_name_parts[2]) || strtolower($_name_parts[0]) !== 'smarty') {
- throw new SmartyException("plugin {$plugin_name} is not a valid name format");
- return false;
- }
- // if type is "internal", get plugin from sysplugins
- if (strtolower($_name_parts[1]) == 'internal') {
- $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php';
- if (file_exists($file)) {
- require_once($file);
- return $file;
- } else {
- return false;
- }
- }
- // plugin filename is expected to be: [type].[name].php
- $_plugin_filename = "{$_name_parts[1]}.{$_name_parts[2]}.php";
-
- $_stream_resolve_include_path = function_exists('stream_resolve_include_path');
-
- // loop through plugin dirs and find the plugin
- foreach($this->getPluginsDir() as $_plugin_dir) {
- $names = array(
- $_plugin_dir . $_plugin_filename,
- $_plugin_dir . strtolower($_plugin_filename),
- );
- foreach ($names as $file) {
- if (file_exists($file)) {
- require_once($file);
- return $file;
- }
- if ($this->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) {
- // try PHP include_path
- if ($_stream_resolve_include_path) {
- $file = stream_resolve_include_path($file);
- } else {
- $file = Smarty_Internal_Get_Include_Path::getIncludePath($file);
- }
-
- if ($file !== false) {
- require_once($file);
- return $file;
- }
- }
- }
- }
- // no plugin loaded
- return false;
+ $this->left_delimiter = $left_delimiter;
}
/**
- * Compile all template files
- *
- * @param string $extension file extension
- * @param bool $force_compile force all to recompile
- * @param int $time_limit
- * @param int $max_errors
- * @return integer number of template files recompiled
+ * @param string $right_delimiter
*/
- public function compileAllTemplates($extention = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
+ public function setRightDelimiter($right_delimiter)
{
- return Smarty_Internal_Utility::compileAllTemplates($extention, $force_compile, $time_limit, $max_errors, $this);
+ $this->right_delimiter = $right_delimiter;
}
/**
- * Compile all config files
- *
- * @param string $extension file extension
- * @param bool $force_compile force all to recompile
- * @param int $time_limit
- * @param int $max_errors
- * @return integer number of template files recompiled
+ * @param boolean $debugging
+ */
+ public function setDebugging($debugging)
+ {
+ $this->debugging = $debugging;
+ }
+
+ /**
+ * @param boolean $config_overwrite
+ */
+ public function setConfigOverwrite($config_overwrite)
+ {
+ $this->config_overwrite = $config_overwrite;
+ }
+
+ /**
+ * @param boolean $config_booleanize
+ */
+ public function setConfigBooleanize($config_booleanize)
+ {
+ $this->config_booleanize = $config_booleanize;
+ }
+
+ /**
+ * @param boolean $config_read_hidden
+ */
+ public function setConfigReadHidden($config_read_hidden)
+ {
+ $this->config_read_hidden = $config_read_hidden;
+ }
+
+ /**
+ * @param boolean $compile_locking
+ */
+ public function setCompileLocking($compile_locking)
+ {
+ $this->compile_locking = $compile_locking;
+ }
+
+ /**
+ * @param string $default_resource_type
+ */
+ public function setDefaultResourceType($default_resource_type)
+ {
+ $this->default_resource_type = $default_resource_type;
+ }
+
+ /**
+ * @param string $caching_type
*/
- public function compileAllConfig($extention = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null)
+ public function setCachingType($caching_type)
{
- return Smarty_Internal_Utility::compileAllConfig($extention, $force_compile, $time_limit, $max_errors, $this);
+ $this->caching_type = $caching_type;
}
/**
- * Delete compiled template file
+ * Test install
*
- * @param string $resource_name template name
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time
- * @return integer number of template files deleted
+ * @param null $errors
*/
- public function clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null)
+ public function testInstall(&$errors = null)
{
- return Smarty_Internal_Utility::clearCompiledTemplate($resource_name, $compile_id, $exp_time, $this);
+ Smarty_Internal_TestInstall::testInstall($this, $errors);
}
+ /**
+ * Class destructor
+ */
+ public function __destruct()
+ {
+ $i = 0;// intentionally left blank
+ }
/**
- * Return array of tag/attributes of all tags used by an template
+ * <<magic>> Generic getter.
+ * Calls the appropriate getter function.
+ * Issues an E_USER_NOTICE if no valid getter is found.
+ *
+ * @param string $name property name
*
- * @param object $templae template object
- * @return array of tag/attributes
+ * @return mixed
*/
- public function getTags(Smarty_Internal_Template $template)
+ public function __get($name)
{
- return Smarty_Internal_Utility::getTags($template);
+
+ if (isset(self::$accessMap[$name])) {
+ $method = 'get' . self::$accessMap[$name];
+ return $this->{$method}();
+ } elseif (in_array($name, self::$obsoleteProperties)) {
+ return null;
+ } else {
+ trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
+ }
}
/**
- * Run installation test
+ * <<magic>> Generic setter.
+ * Calls the appropriate setter function.
+ * Issues an E_USER_NOTICE if no valid setter is found.
*
- * @param array $errors Array to write errors into, rather than outputting them
- * @return boolean true if setup is fine, false if something is wrong
+ * @param string $name property name
+ * @param mixed $value parameter passed to setter
*/
- public function testInstall(&$errors=null)
+ public function __set($name, $value)
{
- return Smarty_Internal_Utility::testInstall($this, $errors);
+ if (isset(self::$accessMap[$name])) {
+ $method = 'set' . self::$accessMap[$name];
+ $this->{$method}($value);
+ } elseif (in_array($name, self::$obsoleteProperties)) {
+ return;
+ } else {
+ if (is_object($value) && method_exists($value, $name)) {
+ $this->$name = $value;
+ } else {
+ trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
+ }
+ }
}
/**
* Error Handler to mute expected messages
*
* @link http://php.net/set_error_handler
- * @param integer $errno Error level
+ *
+ * @param integer $errno Error level
+ * @param $errstr
+ * @param $errfile
+ * @param $errline
+ * @param $errcontext
+ *
* @return boolean
*/
public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext)
@@ -1393,10 +1403,8 @@ class Smarty extends Smarty_Internal_TemplateBase {
if (!isset(Smarty::$_muted_directories[SMARTY_DIR])) {
$smarty_dir = realpath(SMARTY_DIR);
if ($smarty_dir !== false) {
- Smarty::$_muted_directories[SMARTY_DIR] = array(
- 'file' => $smarty_dir,
- 'length' => strlen($smarty_dir),
- );
+ Smarty::$_muted_directories[SMARTY_DIR] =
+ array('file' => $smarty_dir, 'length' => strlen($smarty_dir),);
}
}
@@ -1410,10 +1418,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
unset(Smarty::$_muted_directories[$key]);
continue;
}
- $dir = array(
- 'file' => $file,
- 'length' => strlen($file),
- );
+ $dir = array('file' => $file, 'length' => strlen($file),);
}
if (!strncmp($errfile, $dir['file'], $dir['length'])) {
$_is_muted_directory = true;
@@ -1425,7 +1430,8 @@ class Smarty extends Smarty_Internal_TemplateBase {
// or the error was within smarty but masked to be ignored
if (!$_is_muted_directory || ($errno && $errno & error_reporting())) {
if (Smarty::$_previous_error_handler) {
- return call_user_func(Smarty::$_previous_error_handler, $errno, $errstr, $errfile, $errline, $errcontext);
+ return call_user_func(Smarty::$_previous_error_handler, $errno, $errstr, $errfile, $errline,
+ $errcontext);
} else {
return false;
}
@@ -1474,55 +1480,3 @@ class Smarty extends Smarty_Internal_TemplateBase {
restore_error_handler();
}
}
-
-// Check if we're running on windows
-Smarty::$_IS_WINDOWS = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';
-
-// let PCRE (preg_*) treat strings as ISO-8859-1 if we're not dealing with UTF-8
-if (Smarty::$_CHARSET !== 'UTF-8') {
- Smarty::$_UTF8_MODIFIER = '';
-}
-
-/**
- * Smarty exception class
- * @package Smarty
- */
-class SmartyException extends Exception {
- public static $escape = true;
- public function __construct($message) {
- $this->message = self::$escape ? htmlentities($message) : $message;
- }
-}
-
-/**
- * Smarty compiler exception class
- * @package Smarty
- */
-class SmartyCompilerException extends SmartyException {
-}
-
-/**
- * Autoloader
- */
-function smartyAutoload($class)
-{
- $_class = strtolower($class);
- $_classes = array(
- 'smarty_config_source' => true,
- 'smarty_config_compiled' => true,
- 'smarty_security' => true,
- 'smarty_cacheresource' => true,
- 'smarty_cacheresource_custom' => true,
- 'smarty_cacheresource_keyvaluestore' => true,
- 'smarty_resource' => true,
- 'smarty_resource_custom' => true,
- 'smarty_resource_uncompiled' => true,
- 'smarty_resource_recompiled' => true,
- );
-
- if (!strncmp($_class, 'smarty_internal_', 16) || isset($_classes[$_class])) {
- include SMARTY_SYSPLUGINS_DIR . $_class . '.php';
- }
-}
-
-?>
diff --git a/include/smarty/libs/SmartyBC.class.php b/include/smarty/libs/SmartyBC.class.php
index 589dcca27..1dd529c9c 100644
--- a/include/smarty/libs/SmartyBC.class.php
+++ b/include/smarty/libs/SmartyBC.class.php
@@ -3,60 +3,62 @@
* Project: Smarty: the PHP compiling template engine
* File: SmartyBC.class.php
* SVN: $Id: $
- *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
- *
* This library 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
* Lesser General Public License for more details.
- *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
* For questions, help, comments, discussion, etc., please join the
* Smarty mailing list. Send a blank e-mail to
* smarty-discussion-subscribe@googlegroups.com
*
- * @link http://www.smarty.net/
+ * @link http://www.smarty.net/
* @copyright 2008 New Digital Group, Inc.
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Uwe Tews
- * @author Rodney Rehm
- * @package Smarty
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Uwe Tews
+ * @author Rodney Rehm
+ * @package Smarty
*/
/**
* @ignore
*/
-require(dirname(__FILE__) . '/Smarty.class.php');
+require_once(dirname(__FILE__) . '/Smarty.class.php');
/**
* Smarty Backward Compatability Wrapper Class
*
* @package Smarty
*/
-class SmartyBC extends Smarty {
-
+class SmartyBC extends Smarty
+{
/**
* Smarty 2 BC
+ *
* @var string
*/
public $_version = self::SMARTY_VERSION;
/**
+ * This is an array of directories where trusted php scripts reside.
+ *
+ * @var array
+ */
+ public $trusted_dir = array();
+
+ /**
* Initialize new SmartyBC object
*
* @param array $options options to set during initialization, e.g. array( 'forceCompile' => false )
*/
- public function __construct(array $options=array())
+ public function __construct(array $options = array())
{
parent::__construct($options);
- // register {php} tag
- $this->registerPlugin('block', 'php', 'smarty_php_tag');
}
/**
@@ -100,7 +102,7 @@ class SmartyBC extends Smarty {
* @param bool $cacheable
* @param mixed $cache_attrs
*/
- public function register_function($function, $function_impl, $cacheable=true, $cache_attrs=null)
+ public function register_function($function, $function_impl, $cacheable = true, $cache_attrs = null)
{
$this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs);
}
@@ -118,11 +120,14 @@ class SmartyBC extends Smarty {
/**
* Registers object to be used in templates
*
- * @param string $object name of template object
- * @param object $object_impl the referenced PHP object to register
- * @param array $allowed list of allowed methods (empty = all)
- * @param boolean $smarty_args smarty argument format, else traditional
- * @param array $block_functs list of methods that are block format
+ * @param string $object name of template object
+ * @param object $object_impl the referenced PHP object to register
+ * @param array $allowed list of allowed methods (empty = all)
+ * @param boolean $smarty_args smarty argument format, else traditional
+ * @param array $block_methods list of methods that are block format
+ *
+ * @throws SmartyException
+ * @internal param array $block_functs list of methods that are block format
*/
public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array())
{
@@ -149,7 +154,7 @@ class SmartyBC extends Smarty {
* @param bool $cacheable
* @param mixed $cache_attrs
*/
- public function register_block($block, $block_impl, $cacheable=true, $cache_attrs=null)
+ public function register_block($block, $block_impl, $cacheable = true, $cache_attrs = null)
{
$this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs);
}
@@ -171,7 +176,7 @@ class SmartyBC extends Smarty {
* @param string $function_impl name of PHP function to register
* @param bool $cacheable
*/
- public function register_compiler_function($function, $function_impl, $cacheable=true)
+ public function register_compiler_function($function, $function_impl, $cacheable = true)
{
$this->registerPlugin('compiler', $function, $function_impl, $cacheable);
}
@@ -189,7 +194,7 @@ class SmartyBC extends Smarty {
/**
* Registers modifier to be used in templates
*
- * @param string $modifier name of template modifier
+ * @param string $modifier name of template modifier
* @param string $modifier_impl name of PHP function to register
*/
public function register_modifier($modifier, $modifier_impl)
@@ -305,10 +310,11 @@ class SmartyBC extends Smarty {
/**
* clear cached content for the given template and cache id
*
- * @param string $tpl_file name of template file
- * @param string $cache_id name of cache_id
- * @param string $compile_id name of compile_id
- * @param string $exp_time expiration time
+ * @param string $tpl_file name of template file
+ * @param string $cache_id name of cache_id
+ * @param string $compile_id name of compile_id
+ * @param string $exp_time expiration time
+ *
* @return boolean
*/
public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null)
@@ -319,7 +325,8 @@ class SmartyBC extends Smarty {
/**
* clear the entire contents of cache (all templates)
*
- * @param string $exp_time expire time
+ * @param string $exp_time expire time
+ *
* @return boolean
*/
public function clear_all_cache($exp_time = null)
@@ -330,9 +337,10 @@ class SmartyBC extends Smarty {
/**
* test to see if valid cache exists for this template
*
- * @param string $tpl_file name of template file
- * @param string $cache_id
- * @param string $compile_id
+ * @param string $tpl_file name of template file
+ * @param string $cache_id
+ * @param string $compile_id
+ *
* @return boolean
*/
public function is_cached($tpl_file, $cache_id = null, $compile_id = null)
@@ -353,9 +361,10 @@ class SmartyBC extends Smarty {
* or all compiled template files if one is not specified.
* This function is for advanced use only, not normally needed.
*
- * @param string $tpl_file
- * @param string $compile_id
- * @param string $exp_time
+ * @param string $tpl_file
+ * @param string $compile_id
+ * @param string $exp_time
+ *
* @return boolean results of {@link smarty_core_rm_auto()}
*/
public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null)
@@ -366,7 +375,8 @@ class SmartyBC extends Smarty {
/**
* Checks whether requested template exists.
*
- * @param string $tpl_file
+ * @param string $tpl_file
+ *
* @return boolean
*/
public function template_exists($tpl_file)
@@ -377,10 +387,11 @@ class SmartyBC extends Smarty {
/**
* Returns an array containing template variables
*
- * @param string $name
+ * @param string $name
+ *
* @return array
*/
- public function get_template_vars($name=null)
+ public function get_template_vars($name = null)
{
return $this->getTemplateVars($name);
}
@@ -388,10 +399,11 @@ class SmartyBC extends Smarty {
/**
* Returns an array containing config variables
*
- * @param string $name
+ * @param string $name
+ *
* @return array
*/
- public function get_config_vars($name=null)
+ public function get_config_vars($name = null)
{
return $this->getConfigVars($name);
}
@@ -411,7 +423,8 @@ class SmartyBC extends Smarty {
/**
* return a reference to a registered object
*
- * @param string $name
+ * @param string $name
+ *
* @return object
*/
public function get_registered_object($name)
@@ -432,29 +445,11 @@ class SmartyBC extends Smarty {
/**
* trigger Smarty error
*
- * @param string $error_msg
+ * @param string $error_msg
* @param integer $error_type
*/
public function trigger_error($error_msg, $error_type = E_USER_WARNING)
{
trigger_error("Smarty error: $error_msg", $error_type);
}
-
}
-
-/**
- * Smarty {php}{/php} block function
- *
- * @param array $params parameter list
- * @param string $content contents of the block
- * @param object $template template object
- * @param boolean &$repeat repeat flag
- * @return string content re-formatted
- */
-function smarty_php_tag($params, $content, $template, &$repeat)
-{
- eval($content);
- return '';
-}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/debug.tpl b/include/smarty/libs/debug.tpl
index 12eef0ffd..5526cbca8 100644
--- a/include/smarty/libs/debug.tpl
+++ b/include/smarty/libs/debug.tpl
@@ -1,133 +1,160 @@
{capture name='_smarty_debug' assign=debug_output}
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
- <title>Smarty Debug Console</title>
-<style type="text/css">
-{literal}
-body, h1, h2, td, th, p {
- font-family: sans-serif;
- font-weight: normal;
- font-size: 0.9em;
- margin: 1px;
- padding: 0;
-}
-
-h1 {
- margin: 0;
- text-align: left;
- padding: 2px;
- background-color: #f0c040;
- color: black;
- font-weight: bold;
- font-size: 1.2em;
- }
-
-h2 {
- background-color: #9B410E;
- color: white;
- text-align: left;
- font-weight: bold;
- padding: 2px;
- border-top: 1px solid black;
-}
-
-body {
- background: black;
-}
-
-p, table, div {
- background: #f0ead8;
-}
-
-p {
- margin: 0;
- font-style: italic;
- text-align: center;
-}
-
-table {
- width: 100%;
-}
-
-th, td {
- font-family: monospace;
- vertical-align: top;
- text-align: left;
- width: 50%;
-}
-
-td {
- color: green;
-}
-
-.odd {
- background-color: #eeeeee;
-}
-
-.even {
- background-color: #fafafa;
-}
-
-.exectime {
- font-size: 0.8em;
- font-style: italic;
-}
-
-#table_assigned_vars th {
- color: blue;
-}
-
-#table_config_vars th {
- color: maroon;
-}
-{/literal}
-</style>
-</head>
-<body>
-
-<h1>Smarty Debug Console - {if isset($template_name)}{$template_name|debug_print_var nofilter}{else}Total Time {$execution_time|string_format:"%.5f"}{/if}</h1>
-
-{if !empty($template_data)}
-<h2>included templates &amp; config files (load time in seconds)</h2>
-
-<div>
-{foreach $template_data as $template}
- <font color=brown>{$template.name}</font>
- <span class="exectime">
- (compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"})
- </span>
- <br>
-{/foreach}
-</div>
-{/if}
-
-<h2>assigned template variables</h2>
-
-<table id="table_assigned_vars">
- {foreach $assigned_vars as $vars}
- <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
- <th>${$vars@key|escape:'html'}</th>
- <td>{$vars|debug_print_var nofilter}</td></tr>
- {/foreach}
-</table>
-
-<h2>assigned config file variables (outer template scope)</h2>
-
-<table id="table_config_vars">
- {foreach $config_vars as $vars}
- <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
- <th>{$vars@key|escape:'html'}</th>
- <td>{$vars|debug_print_var nofilter}</td></tr>
- {/foreach}
-
-</table>
-</body>
-</html>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>Smarty Debug Console</title>
+ <style type="text/css">
+ {literal}
+ body, h1, h2, h3, td, th, p {
+ font-family: sans-serif;
+ font-weight: normal;
+ font-size: 0.9em;
+ margin: 1px;
+ padding: 0;
+ }
+
+ h1 {
+ margin: 0;
+ text-align: left;
+ padding: 2px;
+ background-color: #f0c040;
+ color: black;
+ font-weight: bold;
+ font-size: 1.2em;
+ }
+
+ h2 {
+ background-color: #9B410E;
+ color: white;
+ text-align: left;
+ font-weight: bold;
+ padding: 2px;
+ border-top: 1px solid black;
+ }
+ h3 {
+ text-align: left;
+ font-weight: bold;
+ color: black;
+ font-size: 0.7em;
+ padding: 2px;
+ }
+
+ body {
+ background: black;
+ }
+
+ p, table, div {
+ background: #f0ead8;
+ }
+
+ p {
+ margin: 0;
+ font-style: italic;
+ text-align: center;
+ }
+
+ table {
+ width: 100%;
+ }
+
+ th, td {
+ font-family: monospace;
+ vertical-align: top;
+ text-align: left;
+ }
+
+ td {
+ color: green;
+ }
+
+ .odd {
+ background-color: #eeeeee;
+ }
+
+ .even {
+ background-color: #fafafa;
+ }
+
+ .exectime {
+ font-size: 0.8em;
+ font-style: italic;
+ }
+
+ #bold div {
+ color: black;
+ font-weight: bold;
+ }
+ #blue h3 {
+ color: blue;
+ }
+ #normal div {
+ color: black;
+ font-weight: normal;
+ }
+ #table_assigned_vars th {
+ color: blue;
+ font-weight: bold;
+ }
+
+ #table_config_vars th {
+ color: maroon;
+ }
+
+ {/literal}
+ </style>
+ </head>
+ <body>
+
+ <h1>Smarty {Smarty::SMARTY_VERSION} Debug Console
+ - {if isset($template_name)}{$template_name|debug_print_var nofilter} {/if}{if !empty($template_data)}Total Time {$execution_time|string_format:"%.5f"}{/if}</h1>
+
+ {if !empty($template_data)}
+ <h2>included templates &amp; config files (load time in seconds)</h2>
+ <div>
+ {foreach $template_data as $template}
+ <font color=brown>{$template.name}</font>
+ <br>&nbsp;&nbsp;<span class="exectime">
+ (compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"})
+ </span>
+ <br>
+ {/foreach}
+ </div>
+ {/if}
+
+ <h2>assigned template variables</h2>
+
+ <table id="table_assigned_vars">
+ {foreach $assigned_vars as $vars}
+ <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
+ <td><h3><font color=blue>${$vars@key}</font></h3>
+ {if isset($vars['nocache'])}<b>Nocache</b></br>{/if}
+ {if isset($vars['scope'])}<b>Origin:</b> {$vars['scope']|debug_print_var nofilter}{/if}
+ </td>
+ <td><h3>Value</h3>{$vars['value']|debug_print_var:10:80 nofilter}</td>
+ <td>{if isset($vars['attributes'])}<h3>Attributes</h3>{$vars['attributes']|debug_print_var nofilter} {/if}</td>
+ {/foreach}
+ </table>
+
+ <h2>assigned config file variables</h2>
+
+ <table id="table_config_vars">
+ {foreach $config_vars as $vars}
+ <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
+ <td><h3><font color=blue>#{$vars@key}#</font></h3>
+ {if isset($vars['scope'])}<b>Origin:</b> {$vars['scope']|debug_print_var nofilter}{/if}
+ </td>
+ <td>{$vars['value']|debug_print_var:10:80 nofilter}</td>
+ </tr>
+ {/foreach}
+
+ </table>
+ </body>
+ </html>
{/capture}
<script type="text/javascript">
-{$id = $template_name|default:''|md5}
- _smarty_console = window.open("","console{$id}","width=680,height=600,resizable,scrollbars=yes");
+ {$id = '__Smarty__'}
+ {if $display_mode}{$id = "$offset$template_name"|md5}{/if}
+ _smarty_console = window.open("", "console{$id}", "width=1024,height=600,left={$offset},top={$offset},resizable,scrollbars=yes");
_smarty_console.document.write("{$debug_output|escape:'javascript' nofilter}");
_smarty_console.document.close();
</script>
diff --git a/include/smarty/libs/plugins/block.textformat.php b/include/smarty/libs/plugins/block.textformat.php
index b22b104a5..abf544939 100644
--- a/include/smarty/libs/plugins/block.textformat.php
+++ b/include/smarty/libs/plugins/block.textformat.php
@@ -2,13 +2,12 @@
/**
* Smarty plugin to format text blocks
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsBlock
*/
/**
* Smarty {textformat}{/textformat} block plugin
- *
* Type: block function<br>
* Name: textformat<br>
* Purpose: format text a certain way with preset styles
@@ -23,12 +22,14 @@
* - wrap_boundary - boolean (true)
* </pre>
*
- * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat}
- * (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat}
+ * (Smarty online manual)
+ *
* @param array $params parameters
* @param string $content contents of the block
* @param Smarty_Internal_Template $template template object
* @param boolean &$repeat repeat flag
+ *
* @return string content re-formatted
* @author Monte Ohrt <monte at ohrt dot com>
*/
@@ -53,17 +54,17 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
case 'indent_char':
case 'wrap_char':
case 'assign':
- $$_key = (string)$_val;
+ $$_key = (string) $_val;
break;
case 'indent':
case 'indent_first':
case 'wrap':
- $$_key = (int)$_val;
+ $$_key = (int) $_val;
break;
case 'wrap_cut':
- $$_key = (bool)$_val;
+ $$_key = (bool) $_val;
break;
default:
@@ -76,8 +77,6 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
}
// split into paragraphs
$_paragraphs = preg_split('![\r\n]{2}!', $content);
- $_output = '';
-
foreach ($_paragraphs as &$_paragraph) {
if (!$_paragraph) {
@@ -102,12 +101,10 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
}
}
$_output = implode($wrap_char . $wrap_char, $_paragraphs);
-
+
if ($assign) {
$template->assign($assign, $_output);
} else {
return $_output;
}
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/function.counter.php b/include/smarty/libs/plugins/function.counter.php
index 3906badf0..4da85a14e 100644
--- a/include/smarty/libs/plugins/function.counter.php
+++ b/include/smarty/libs/plugins/function.counter.php
@@ -1,22 +1,24 @@
<?php
/**
* Smarty plugin
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {counter} function plugin
- *
* Type: function<br>
* Name: counter<br>
* Purpose: print out a counter value
*
* @author Monte Ohrt <monte at ohrt dot com>
- * @link http://www.smarty.net/manual/en/language.function.counter.php {counter}
- * (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.function.counter.php {counter}
+ * (Smarty online manual)
+ *
* @param array $params parameters
* @param Smarty_Internal_Template $template template object
+ *
* @return string|null
*/
function smarty_function_counter($params, $template)
@@ -26,16 +28,16 @@ function smarty_function_counter($params, $template)
$name = (isset($params['name'])) ? $params['name'] : 'default';
if (!isset($counters[$name])) {
$counters[$name] = array(
- 'start'=>1,
- 'skip'=>1,
- 'direction'=>'up',
- 'count'=>1
- );
+ 'start' => 1,
+ 'skip' => 1,
+ 'direction' => 'up',
+ 'count' => 1
+ );
}
$counter =& $counters[$name];
if (isset($params['start'])) {
- $counter['start'] = $counter['count'] = (int)$params['start'];
+ $counter['start'] = $counter['count'] = (int) $params['start'];
}
if (!empty($params['assign'])) {
@@ -45,9 +47,9 @@ function smarty_function_counter($params, $template)
if (isset($counter['assign'])) {
$template->assign($counter['assign'], $counter['count']);
}
-
+
if (isset($params['print'])) {
- $print = (bool)$params['print'];
+ $print = (bool) $params['print'];
} else {
$print = empty($counter['assign']);
}
@@ -61,18 +63,16 @@ function smarty_function_counter($params, $template)
if (isset($params['skip'])) {
$counter['skip'] = $params['skip'];
}
-
+
if (isset($params['direction'])) {
$counter['direction'] = $params['direction'];
}
- if ($counter['direction'] == "down")
+ if ($counter['direction'] == "down") {
$counter['count'] -= $counter['skip'];
- else
+ } else {
$counter['count'] += $counter['skip'];
-
+ }
+
return $retval;
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/function.cycle.php b/include/smarty/libs/plugins/function.cycle.php
index 1778ffb53..8dc5cd9d5 100644
--- a/include/smarty/libs/plugins/function.cycle.php
+++ b/include/smarty/libs/plugins/function.cycle.php
@@ -2,13 +2,12 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {cycle} function plugin
- *
* Type: function<br>
* Name: cycle<br>
* Date: May 3, 2002<br>
@@ -31,15 +30,17 @@
* {cycle name=row}
* </pre>
*
- * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle}
- * (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author credit to Mark Priatel <mpriatel@rogers.com>
- * @author credit to Gerard <gerard@interfold.com>
- * @author credit to Jason Sweat <jsweat_php@yahoo.com>
+ * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle}
+ * (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author credit to Mark Priatel <mpriatel@rogers.com>
+ * @author credit to Gerard <gerard@interfold.com>
+ * @author credit to Jason Sweat <jsweat_php@yahoo.com>
* @version 1.3
+ *
* @param array $params parameters
* @param Smarty_Internal_Template $template template object
+ *
* @return string|null
*/
@@ -48,18 +49,20 @@ function smarty_function_cycle($params, $template)
static $cycle_vars;
$name = (empty($params['name'])) ? 'default' : $params['name'];
- $print = (isset($params['print'])) ? (bool)$params['print'] : true;
- $advance = (isset($params['advance'])) ? (bool)$params['advance'] : true;
- $reset = (isset($params['reset'])) ? (bool)$params['reset'] : false;
+ $print = (isset($params['print'])) ? (bool) $params['print'] : true;
+ $advance = (isset($params['advance'])) ? (bool) $params['advance'] : true;
+ $reset = (isset($params['reset'])) ? (bool) $params['reset'] : false;
if (!isset($params['values'])) {
- if(!isset($cycle_vars[$name]['values'])) {
+ if (!isset($cycle_vars[$name]['values'])) {
trigger_error("cycle: missing 'values' parameter");
+
return;
}
} else {
- if(isset($cycle_vars[$name]['values'])
- && $cycle_vars[$name]['values'] != $params['values'] ) {
+ if (isset($cycle_vars[$name]['values'])
+ && $cycle_vars[$name]['values'] != $params['values']
+ ) {
$cycle_vars[$name]['index'] = 0;
}
$cycle_vars[$name]['values'] = $params['values'];
@@ -71,13 +74,13 @@ function smarty_function_cycle($params, $template)
$cycle_vars[$name]['delimiter'] = ',';
}
- if(is_array($cycle_vars[$name]['values'])) {
+ if (is_array($cycle_vars[$name]['values'])) {
$cycle_array = $cycle_vars[$name]['values'];
} else {
- $cycle_array = explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']);
+ $cycle_array = explode($cycle_vars[$name]['delimiter'], $cycle_vars[$name]['values']);
}
- if(!isset($cycle_vars[$name]['index']) || $reset ) {
+ if (!isset($cycle_vars[$name]['index']) || $reset) {
$cycle_vars[$name]['index'] = 0;
}
@@ -86,21 +89,19 @@ function smarty_function_cycle($params, $template)
$template->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]);
}
- if($print) {
+ if ($print) {
$retval = $cycle_array[$cycle_vars[$name]['index']];
} else {
$retval = null;
}
- if($advance) {
- if ( $cycle_vars[$name]['index'] >= count($cycle_array) -1 ) {
+ if ($advance) {
+ if ($cycle_vars[$name]['index'] >= count($cycle_array) - 1) {
$cycle_vars[$name]['index'] = 0;
} else {
- $cycle_vars[$name]['index']++;
+ $cycle_vars[$name]['index'] ++;
}
}
return $retval;
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/function.fetch.php b/include/smarty/libs/plugins/function.fetch.php
index eca1182d5..3506d4a8d 100644
--- a/include/smarty/libs/plugins/function.fetch.php
+++ b/include/smarty/libs/plugins/function.fetch.php
@@ -2,50 +2,53 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {fetch} plugin
- *
* Type: function<br>
* Name: fetch<br>
* Purpose: fetch file, web or ftp data and display results
*
- * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch}
- * (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch}
+ * (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com>
+ *
* @param array $params parameters
* @param Smarty_Internal_Template $template template object
+ *
+ * @throws SmartyException
* @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable
*/
function smarty_function_fetch($params, $template)
{
if (empty($params['file'])) {
- trigger_error("[plugin] fetch parameter 'file' cannot be empty",E_USER_NOTICE);
+ trigger_error("[plugin] fetch parameter 'file' cannot be empty", E_USER_NOTICE);
+
return;
}
-
+
// strip file protocol
if (stripos($params['file'], 'file://') === 0) {
$params['file'] = substr($params['file'], 7);
}
-
+
$protocol = strpos($params['file'], '://');
if ($protocol !== false) {
$protocol = strtolower(substr($params['file'], 0, $protocol));
}
-
+
if (isset($template->smarty->security_policy)) {
if ($protocol) {
// remote resource (or php stream, …)
- if(!$template->smarty->security_policy->isTrustedUri($params['file'])) {
+ if (!$template->smarty->security_policy->isTrustedUri($params['file'])) {
return;
}
} else {
// local file
- if(!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) {
+ if (!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) {
return;
}
}
@@ -54,53 +57,54 @@ function smarty_function_fetch($params, $template)
$content = '';
if ($protocol == 'http') {
// http fetch
- if($uri_parts = parse_url($params['file'])) {
+ if ($uri_parts = parse_url($params['file'])) {
// set defaults
$host = $server_name = $uri_parts['host'];
$timeout = 30;
$accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";
- $agent = "Smarty Template Engine ". Smarty::SMARTY_VERSION;
+ $agent = "Smarty Template Engine " . Smarty::SMARTY_VERSION;
$referer = "";
$uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/';
$uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : '';
$_is_proxy = false;
- if(empty($uri_parts['port'])) {
+ if (empty($uri_parts['port'])) {
$port = 80;
} else {
$port = $uri_parts['port'];
}
- if(!empty($uri_parts['user'])) {
+ if (!empty($uri_parts['user'])) {
$user = $uri_parts['user'];
}
- if(!empty($uri_parts['pass'])) {
+ if (!empty($uri_parts['pass'])) {
$pass = $uri_parts['pass'];
}
// loop through parameters, setup headers
- foreach($params as $param_key => $param_value) {
- switch($param_key) {
+ foreach ($params as $param_key => $param_value) {
+ switch ($param_key) {
case "file":
case "assign":
case "assign_headers":
break;
case "user":
- if(!empty($param_value)) {
+ if (!empty($param_value)) {
$user = $param_value;
}
break;
case "pass":
- if(!empty($param_value)) {
+ if (!empty($param_value)) {
$pass = $param_value;
}
break;
case "accept":
- if(!empty($param_value)) {
+ if (!empty($param_value)) {
$accept = $param_value;
}
break;
case "header":
- if(!empty($param_value)) {
- if(!preg_match('![\w\d-]+: .+!',$param_value)) {
- trigger_error("[plugin] invalid header format '".$param_value."'",E_USER_NOTICE);
+ if (!empty($param_value)) {
+ if (!preg_match('![\w\d-]+: .+!', $param_value)) {
+ trigger_error("[plugin] invalid header format '" . $param_value . "'", E_USER_NOTICE);
+
return;
} else {
$extra_headers[] = $param_value;
@@ -108,99 +112,104 @@ function smarty_function_fetch($params, $template)
}
break;
case "proxy_host":
- if(!empty($param_value)) {
+ if (!empty($param_value)) {
$proxy_host = $param_value;
}
break;
case "proxy_port":
- if(!preg_match('!\D!', $param_value)) {
+ if (!preg_match('!\D!', $param_value)) {
$proxy_port = (int) $param_value;
} else {
- trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE);
+ trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE);
+
return;
}
break;
case "agent":
- if(!empty($param_value)) {
+ if (!empty($param_value)) {
$agent = $param_value;
}
break;
case "referer":
- if(!empty($param_value)) {
+ if (!empty($param_value)) {
$referer = $param_value;
}
break;
case "timeout":
- if(!preg_match('!\D!', $param_value)) {
+ if (!preg_match('!\D!', $param_value)) {
$timeout = (int) $param_value;
} else {
- trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE);
+ trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE);
+
return;
}
break;
default:
- trigger_error("[plugin] unrecognized attribute '".$param_key."'",E_USER_NOTICE);
+ trigger_error("[plugin] unrecognized attribute '" . $param_key . "'", E_USER_NOTICE);
+
return;
}
}
- if(!empty($proxy_host) && !empty($proxy_port)) {
+ if (!empty($proxy_host) && !empty($proxy_port)) {
$_is_proxy = true;
- $fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout);
+ $fp = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout);
} else {
- $fp = fsockopen($server_name,$port,$errno,$errstr,$timeout);
+ $fp = fsockopen($server_name, $port, $errno, $errstr, $timeout);
}
- if(!$fp) {
- trigger_error("[plugin] unable to fetch: $errstr ($errno)",E_USER_NOTICE);
+ if (!$fp) {
+ trigger_error("[plugin] unable to fetch: $errstr ($errno)", E_USER_NOTICE);
+
return;
} else {
- if($_is_proxy) {
+ if ($_is_proxy) {
fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n");
} else {
fputs($fp, "GET $uri HTTP/1.0\r\n");
}
- if(!empty($host)) {
+ if (!empty($host)) {
fputs($fp, "Host: $host\r\n");
}
- if(!empty($accept)) {
+ if (!empty($accept)) {
fputs($fp, "Accept: $accept\r\n");
}
- if(!empty($agent)) {
+ if (!empty($agent)) {
fputs($fp, "User-Agent: $agent\r\n");
}
- if(!empty($referer)) {
+ if (!empty($referer)) {
fputs($fp, "Referer: $referer\r\n");
}
- if(isset($extra_headers) && is_array($extra_headers)) {
- foreach($extra_headers as $curr_header) {
- fputs($fp, $curr_header."\r\n");
+ if (isset($extra_headers) && is_array($extra_headers)) {
+ foreach ($extra_headers as $curr_header) {
+ fputs($fp, $curr_header . "\r\n");
}
}
- if(!empty($user) && !empty($pass)) {
- fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n");
+ if (!empty($user) && !empty($pass)) {
+ fputs($fp, "Authorization: BASIC " . base64_encode("$user:$pass") . "\r\n");
}
fputs($fp, "\r\n");
- while(!feof($fp)) {
- $content .= fgets($fp,4096);
+ while (!feof($fp)) {
+ $content .= fgets($fp, 4096);
}
fclose($fp);
- $csplit = preg_split("!\r\n\r\n!",$content,2);
+ $csplit = preg_split("!\r\n\r\n!", $content, 2);
$content = $csplit[1];
- if(!empty($params['assign_headers'])) {
- $template->assign($params['assign_headers'],preg_split("!\r\n!",$csplit[0]));
+ if (!empty($params['assign_headers'])) {
+ $template->assign($params['assign_headers'], preg_split("!\r\n!", $csplit[0]));
}
}
} else {
- trigger_error("[plugin fetch] unable to parse URL, check syntax",E_USER_NOTICE);
+ trigger_error("[plugin fetch] unable to parse URL, check syntax", E_USER_NOTICE);
+
return;
}
} else {
$content = @file_get_contents($params['file']);
if ($content === false) {
- throw new SmartyException("{fetch} cannot read resource '" . $params['file'] ."'");
+ throw new SmartyException("{fetch} cannot read resource '" . $params['file'] . "'");
}
}
@@ -210,5 +219,3 @@ function smarty_function_fetch($params, $template)
return $content;
}
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/function.html_checkboxes.php b/include/smarty/libs/plugins/function.html_checkboxes.php
index 1866bc2f3..d78680368 100644
--- a/include/smarty/libs/plugins/function.html_checkboxes.php
+++ b/include/smarty/libs/plugins/function.html_checkboxes.php
@@ -2,13 +2,12 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {html_checkboxes} function plugin
- *
* File: function.html_checkboxes.php<br>
* Type: function<br>
* Name: html_checkboxes<br>
@@ -32,15 +31,17 @@
* - escape (optional) - escape the content (not value), defaults to true
* </pre>
*
- * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
- * (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
+ * (Smarty online manual)
* @author Christopher Kvarme <christopher.kvarme@flashjab.com>
- * @author credits to Monte Ohrt <monte at ohrt dot com>
+ * @author credits to Monte Ohrt <monte at ohrt dot com>
* @version 1.0
- * @param array $params parameters
+ *
+ * @param array $params parameters
* @param object $template template object
+ *
* @return string
- * @uses smarty_function_escape_special_chars()
+ * @uses smarty_function_escape_special_chars()
*/
function smarty_function_html_checkboxes($params, $template)
{
@@ -58,8 +59,8 @@ function smarty_function_html_checkboxes($params, $template)
$extra = '';
- foreach($params as $_key => $_val) {
- switch($_key) {
+ foreach ($params as $_key => $_val) {
+ switch ($_key) {
case 'name':
case 'separator':
$$_key = (string) $_val;
@@ -89,7 +90,7 @@ function smarty_function_html_checkboxes($params, $template)
if (method_exists($_sel, "__toString")) {
$_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
} else {
- trigger_error("html_checkboxes: selected attribute contains an object of class '". get_class($_sel) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_checkboxes: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE);
continue;
}
} else {
@@ -101,7 +102,7 @@ function smarty_function_html_checkboxes($params, $template)
if (method_exists($_val, "__toString")) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else {
- trigger_error("html_checkboxes: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_checkboxes: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
}
} else {
$selected = smarty_function_escape_special_chars((string) $_val);
@@ -116,7 +117,8 @@ function smarty_function_html_checkboxes($params, $template)
case 'assign':
break;
- case 'strict': break;
+ case 'strict':
+ break;
case 'disabled':
case 'readonly':
@@ -131,11 +133,11 @@ function smarty_function_html_checkboxes($params, $template)
break;
}
- // omit break; to fall through!
+ // omit break; to fall through!
default:
- if(!is_array($_val)) {
- $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
+ if (!is_array($_val)) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else {
trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
}
@@ -143,76 +145,79 @@ function smarty_function_html_checkboxes($params, $template)
}
}
- if (!isset($options) && !isset($values))
- return ''; /* raise error here? */
+ if (!isset($options) && !isset($values)) {
+ return '';
+ } /* raise error here? */
$_html_result = array();
if (isset($options)) {
- foreach ($options as $_key=>$_val) {
+ foreach ($options as $_key => $_val) {
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
}
} else {
- foreach ($values as $_i=>$_key) {
+ foreach ($values as $_i => $_key) {
$_val = isset($output[$_i]) ? $output[$_i] : '';
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
}
}
- if(!empty($params['assign'])) {
+ if (!empty($params['assign'])) {
$template->assign($params['assign'], $_html_result);
} else {
return implode("\n", $_html_result);
}
-
}
-function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape=true) {
+function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape = true)
+{
$_output = '';
-
+
if (is_object($value)) {
if (method_exists($value, "__toString")) {
$value = (string) $value->__toString();
} else {
- trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
+
return '';
}
} else {
$value = (string) $value;
}
-
+
if (is_object($output)) {
if (method_exists($output, "__toString")) {
$output = (string) $output->__toString();
} else {
- trigger_error("html_options: output is an object of class '". get_class($output) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE);
+
return '';
}
} else {
$output = (string) $output;
}
-
+
if ($labels) {
if ($label_ids) {
$_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value));
$_output .= '<label for="' . $_id . '">';
} else {
$_output .= '<label>';
- }
+ }
}
-
+
$name = smarty_function_escape_special_chars($name);
$value = smarty_function_escape_special_chars($value);
if ($escape) {
$output = smarty_function_escape_special_chars($output);
}
-
+
$_output .= '<input type="checkbox" name="' . $name . '[]" value="' . $value . '"';
-
+
if ($labels && $label_ids) {
$_output .= ' id="' . $_id . '"';
}
-
+
if (is_array($selected)) {
if (isset($selected[$value])) {
$_output .= ' checked="checked"';
@@ -220,14 +225,13 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte
} elseif ($value === $selected) {
$_output .= ' checked="checked"';
}
-
+
$_output .= $extra . ' />' . $output;
if ($labels) {
$_output .= '</label>';
}
-
- $_output .= $separator;
+
+ $_output .= $separator;
+
return $_output;
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/function.html_image.php b/include/smarty/libs/plugins/function.html_image.php
index 6521966bb..5037e8bd1 100644
--- a/include/smarty/libs/plugins/function.html_image.php
+++ b/include/smarty/libs/plugins/function.html_image.php
@@ -1,14 +1,13 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {html_image} function plugin
- *
* Type: function<br>
* Name: html_image<br>
* Date: Feb 24, 2003<br>
@@ -23,21 +22,24 @@
* - basedir - (optional) - base directory for absolute paths, default is environment variable DOCUMENT_ROOT
* - path_prefix - prefix for path output (optional, default empty)
* </pre>
- *
- * @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image}
- * (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author credits to Duda <duda@big.hu>
+ *
+ * @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image}
+ * (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author credits to Duda <duda@big.hu>
* @version 1.0
+ *
* @param array $params parameters
* @param Smarty_Internal_Template $template template object
- * @return string
- * @uses smarty_function_escape_special_chars()
+ *
+ * @throws SmartyException
+ * @return string
+ * @uses smarty_function_escape_special_chars()
*/
function smarty_function_html_image($params, $template)
{
require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
-
+
$alt = '';
$file = '';
$height = '';
@@ -47,7 +49,7 @@ function smarty_function_html_image($params, $template)
$suffix = '';
$path_prefix = '';
$basedir = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : '';
- foreach($params as $_key => $_val) {
+ foreach ($params as $_key => $_val) {
switch ($_key) {
case 'file':
case 'height':
@@ -63,7 +65,7 @@ function smarty_function_html_image($params, $template)
$$_key = smarty_function_escape_special_chars($_val);
} else {
throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
+ }
break;
case 'link':
@@ -77,41 +79,42 @@ function smarty_function_html_image($params, $template)
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else {
throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
+ }
break;
- }
- }
+ }
+ }
if (empty($file)) {
trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE);
+
return;
- }
+ }
if ($file[0] == '/') {
$_image_path = $basedir . $file;
} else {
$_image_path = $file;
}
-
+
// strip file protocol
if (stripos($params['file'], 'file://') === 0) {
$params['file'] = substr($params['file'], 7);
}
-
+
$protocol = strpos($params['file'], '://');
if ($protocol !== false) {
$protocol = strtolower(substr($params['file'], 0, $protocol));
}
-
+
if (isset($template->smarty->security_policy)) {
if ($protocol) {
// remote resource (or php stream, …)
- if(!$template->smarty->security_policy->isTrustedUri($params['file'])) {
+ if (!$template->smarty->security_policy->isTrustedUri($params['file'])) {
return;
}
} else {
// local file
- if(!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) {
+ if (!$template->smarty->security_policy->isTrustedResourceDir($_image_path)) {
return;
}
}
@@ -122,23 +125,26 @@ function smarty_function_html_image($params, $template)
if (!$_image_data = @getimagesize($_image_path)) {
if (!file_exists($_image_path)) {
trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE);
+
return;
- } else if (!is_readable($_image_path)) {
+ } elseif (!is_readable($_image_path)) {
trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE);
+
return;
} else {
trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE);
+
return;
- }
+ }
}
if (!isset($params['width'])) {
$width = $_image_data[0];
- }
+ }
if (!isset($params['height'])) {
$height = $_image_data[1];
- }
- }
+ }
+ }
if (isset($params['dpi'])) {
if (strstr($_SERVER['HTTP_USER_AGENT'], 'Mac')) {
@@ -147,13 +153,11 @@ function smarty_function_html_image($params, $template)
$dpi_default = 72;
} else {
$dpi_default = 96;
- }
+ }
$_resize = $dpi_default / $params['dpi'];
$width = round($width * $_resize);
$height = round($height * $_resize);
- }
+ }
return $prefix . '<img src="' . $path_prefix . $file . '" alt="' . $alt . '" width="' . $width . '" height="' . $height . '"' . $extra . ' />' . $suffix;
-}
-
-?> \ No newline at end of file
+}
diff --git a/include/smarty/libs/plugins/function.html_options.php b/include/smarty/libs/plugins/function.html_options.php
index 68fa0524a..7ec3e065c 100644
--- a/include/smarty/libs/plugins/function.html_options.php
+++ b/include/smarty/libs/plugins/function.html_options.php
@@ -1,14 +1,13 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {html_options} function plugin
- *
* Type: function<br>
* Name: html_options<br>
* Purpose: Prints the list of <option> tags generated from
@@ -23,17 +22,18 @@
* - id (optional) - string default not set
* - class (optional) - string default not set
* </pre>
- *
- * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image}
- * (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de>
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
- * @return string
- * @uses smarty_function_escape_special_chars()
+ *
+ * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image}
+ * (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de>
+ *
+ * @param array $params parameters
+ *
+ * @return string
+ * @uses smarty_function_escape_special_chars()
*/
-function smarty_function_html_options($params, $template)
+function smarty_function_html_options($params)
{
require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
@@ -72,7 +72,7 @@ function smarty_function_html_options($params, $template)
if (method_exists($_sel, "__toString")) {
$_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
} else {
- trigger_error("html_options: selected attribute contains an object of class '". get_class($_sel) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE);
continue;
}
} else {
@@ -84,42 +84,44 @@ function smarty_function_html_options($params, $template)
if (method_exists($_val, "__toString")) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else {
- trigger_error("html_options: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
}
} else {
$selected = smarty_function_escape_special_chars((string) $_val);
}
break;
-
- case 'strict': break;
-
+
+ case 'strict':
+ break;
+
case 'disabled':
case 'readonly':
if (!empty($params['strict'])) {
if (!is_scalar($_val)) {
trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE);
}
-
+
if ($_val === true || $_val === $_key) {
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
}
-
+
break;
}
- // omit break; to fall through!
-
+ // omit break; to fall through!
+
default:
if (!is_array($_val)) {
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else {
trigger_error("html_options: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
+ }
break;
- }
+ }
}
if (!isset($options) && !isset($values)) {
/* raise error here? */
+
return '';
}
@@ -134,14 +136,14 @@ function smarty_function_html_options($params, $template)
foreach ($values as $_i => $_key) {
$_val = isset($output[$_i]) ? $output[$_i] : '';
$_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx);
- }
+ }
}
if (!empty($name)) {
- $_html_class = !empty($class) ? ' class="'.$class.'"' : '';
- $_html_id = !empty($id) ? ' id="'.$id.'"' : '';
+ $_html_class = !empty($class) ? ' class="' . $class . '"' : '';
+ $_html_id = !empty($id) ? ' id="' . $id . '"' : '';
$_html_result = '<select name="' . $name . '"' . $_html_class . $_html_id . $extra . '>' . "\n" . $_html_result . '</select>' . "\n";
- }
+ }
return $_html_result;
}
@@ -158,36 +160,37 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c
} elseif ($_key === $selected) {
$_html_result .= ' selected="selected"';
}
- $_html_class = !empty($class) ? ' class="'.$class.' option"' : '';
- $_html_id = !empty($id) ? ' id="'.$id.'-'.$idx.'"' : '';
+ $_html_class = !empty($class) ? ' class="' . $class . ' option"' : '';
+ $_html_id = !empty($id) ? ' id="' . $id . '-' . $idx . '"' : '';
if (is_object($value)) {
if (method_exists($value, "__toString")) {
$value = smarty_function_escape_special_chars((string) $value->__toString());
} else {
- trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
+
return '';
}
} else {
$value = smarty_function_escape_special_chars((string) $value);
}
$_html_result .= $_html_class . $_html_id . '>' . $value . '</option>' . "\n";
- $idx++;
+ $idx ++;
} else {
$_idx = 0;
- $_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id.'-'.$idx) : null, $class, $_idx);
- $idx++;
+ $_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id . '-' . $idx) : null, $class, $_idx);
+ $idx ++;
}
+
return $_html_result;
-}
+}
function smarty_function_html_options_optgroup($key, $values, $selected, $id, $class, &$idx)
{
$optgroup_html = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n";
foreach ($values as $key => $value) {
$optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, $idx);
- }
+ }
$optgroup_html .= "</optgroup>\n";
- return $optgroup_html;
-}
-?> \ No newline at end of file
+ return $optgroup_html;
+}
diff --git a/include/smarty/libs/plugins/function.html_radios.php b/include/smarty/libs/plugins/function.html_radios.php
index a2741f68f..f121d5eae 100644
--- a/include/smarty/libs/plugins/function.html_radios.php
+++ b/include/smarty/libs/plugins/function.html_radios.php
@@ -1,14 +1,13 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {html_radios} function plugin
- *
* File: function.html_radios.php<br>
* Type: function<br>
* Name: html_radios<br>
@@ -31,16 +30,18 @@
* {html_radios values=$ids name='box' separator='<br>' output=$names}
* {html_radios values=$ids checked=$checked separator='<br>' output=$names}
* </pre>
- *
- * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
- * (Smarty online manual)
- * @author Christopher Kvarme <christopher.kvarme@flashjab.com>
- * @author credits to Monte Ohrt <monte at ohrt dot com>
+ *
+ * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
+ * (Smarty online manual)
+ * @author Christopher Kvarme <christopher.kvarme@flashjab.com>
+ * @author credits to Monte Ohrt <monte at ohrt dot com>
* @version 1.0
+ *
* @param array $params parameters
* @param Smarty_Internal_Template $template template object
- * @return string
- * @uses smarty_function_escape_special_chars()
+ *
+ * @return string
+ * @uses smarty_function_escape_special_chars()
*/
function smarty_function_html_radios($params, $template)
{
@@ -57,7 +58,7 @@ function smarty_function_html_radios($params, $template)
$output = null;
$extra = '';
- foreach($params as $_key => $_val) {
+ foreach ($params as $_key => $_val) {
switch ($_key) {
case 'name':
case 'separator':
@@ -72,11 +73,11 @@ function smarty_function_html_radios($params, $template)
if (method_exists($_val, "__toString")) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else {
- trigger_error("html_radios: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_radios: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
}
} else {
$selected = (string) $_val;
- }
+ }
break;
case 'escape':
@@ -102,7 +103,8 @@ function smarty_function_html_radios($params, $template)
case 'assign':
break;
- case 'strict': break;
+ case 'strict':
+ break;
case 'disabled':
case 'readonly':
@@ -117,20 +119,21 @@ function smarty_function_html_radios($params, $template)
break;
}
- // omit break; to fall through!
+ // omit break; to fall through!
default:
if (!is_array($_val)) {
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else {
trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
+ }
break;
- }
- }
+ }
+ }
if (!isset($options) && !isset($values)) {
/* raise error here? */
+
return '';
}
@@ -144,57 +147,59 @@ function smarty_function_html_radios($params, $template)
foreach ($values as $_i => $_key) {
$_val = isset($output[$_i]) ? $output[$_i] : '';
$_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
- }
- }
+ }
+ }
if (!empty($params['assign'])) {
$template->assign($params['assign'], $_html_result);
} else {
return implode("\n", $_html_result);
- }
-}
+ }
+}
function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape)
{
$_output = '';
-
+
if (is_object($value)) {
if (method_exists($value, "__toString")) {
$value = (string) $value->__toString();
} else {
- trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
+
return '';
}
} else {
$value = (string) $value;
}
-
+
if (is_object($output)) {
if (method_exists($output, "__toString")) {
$output = (string) $output->__toString();
} else {
- trigger_error("html_options: output is an object of class '". get_class($output) ."' without __toString() method", E_USER_NOTICE);
+ trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE);
+
return '';
}
} else {
$output = (string) $output;
}
-
+
if ($labels) {
if ($label_ids) {
$_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value));
$_output .= '<label for="' . $_id . '">';
} else {
$_output .= '<label>';
- }
+ }
}
-
+
$name = smarty_function_escape_special_chars($name);
$value = smarty_function_escape_special_chars($value);
if ($escape) {
$output = smarty_function_escape_special_chars($output);
}
-
+
$_output .= '<input type="radio" name="' . $name . '" value="' . $value . '"';
if ($labels && $label_ids) {
@@ -204,14 +209,13 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $
if ($value === $selected) {
$_output .= ' checked="checked"';
}
-
+
$_output .= $extra . ' />' . $output;
if ($labels) {
$_output .= '</label>';
}
-
+
$_output .= $separator;
- return $_output;
-}
-?> \ No newline at end of file
+ return $_output;
+}
diff --git a/include/smarty/libs/plugins/function.html_select_date.php b/include/smarty/libs/plugins/function.html_select_date.php
index 13c500354..d66256651 100644
--- a/include/smarty/libs/plugins/function.html_select_date.php
+++ b/include/smarty/libs/plugins/function.html_select_date.php
@@ -1,8 +1,8 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsFunction
*/
@@ -17,11 +17,9 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
/**
* Smarty {html_select_date} plugin
- *
* Type: function<br>
* Name: html_select_date<br>
* Purpose: Prints the dropdowns for date selection.
- *
* ChangeLog:
* <pre>
* - 1.0 initial release
@@ -37,21 +35,22 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
* dropdown to include given date unless explicitly set (Monte)
* - 1.3.4 fix behaviour of 0000-00-00 00:00:00 dates to match that
* of 0000-00-00 dates (cybot, boots)
- * - 2.0 complete rewrite for performance,
+ * - 2.0 complete rewrite for performance,
* added attributes month_names, *_id
* </pre>
- *
- * @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date}
- * (Smarty online manual)
- * @version 2.0
- * @author Andrei Zmievski
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Rodney Rehm
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
- * @return string
+ *
+ * @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date}
+ * (Smarty online manual)
+ * @version 2.0
+ * @author Andrei Zmievski
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Rodney Rehm
+ *
+ * @param array $params parameters
+ *
+ * @return string
*/
-function smarty_function_html_select_date($params, $template)
+function smarty_function_html_select_date($params)
{
// generate timestamps used for month names only
static $_month_timestamps = null;
@@ -59,7 +58,7 @@ function smarty_function_html_select_date($params, $template)
if ($_month_timestamps === null) {
$_current_year = date('Y');
$_month_timestamps = array();
- for ($i = 1; $i <= 12; $i++) {
+ for ($i = 1; $i <= 12; $i ++) {
$_month_timestamps[$i] = mktime(0, 0, 0, $i, 1, 2000);
}
}
@@ -120,7 +119,7 @@ function smarty_function_html_select_date($params, $template)
$time = smarty_make_timestamp($_value);
}
break;
-
+
case 'month_names':
if (is_array($_value) && count($_value) == 12) {
$$_key = $_value;
@@ -128,7 +127,7 @@ function smarty_function_html_select_date($params, $template)
trigger_error("html_select_date: month_names must be an array of 12 strings", E_USER_NOTICE);
}
break;
-
+
case 'prefix':
case 'field_array':
case 'start_year':
@@ -155,7 +154,7 @@ function smarty_function_html_select_date($params, $template)
case 'month_id':
case 'day_id':
case 'year_id':
- $$_key = (string)$_value;
+ $$_key = (string) $_value;
break;
case 'display_days':
@@ -163,7 +162,7 @@ function smarty_function_html_select_date($params, $template)
case 'display_years':
case 'year_as_text':
case 'reverse_years':
- $$_key = (bool)$_value;
+ $$_key = (bool) $_value;
break;
default:
@@ -171,32 +170,30 @@ function smarty_function_html_select_date($params, $template)
$extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"';
} else {
trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
+ }
break;
- }
+ }
}
-
+
// Note: date() is faster than strftime()
// Note: explode(date()) is faster than date() date() date()
if (isset($params['time']) && is_array($params['time'])) {
if (isset($params['time'][$prefix . 'Year'])) {
// $_REQUEST[$field_array] given
- foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
+ foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params['time'][$prefix . $_elementName])
? $params['time'][$prefix . $_elementName]
: date($_elementKey);
}
- $time = mktime(0, 0, 0, $_month, $_day, $_year);
} elseif (isset($params['time'][$field_array][$prefix . 'Year'])) {
// $_REQUEST given
- foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
+ foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params['time'][$field_array][$prefix . $_elementName])
? $params['time'][$field_array][$prefix . $_elementName]
: date($_elementKey);
}
- $time = mktime(0, 0, 0, $_month, $_day, $_year);
} else {
// no date found, use NOW
list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d'));
@@ -217,13 +214,13 @@ function smarty_function_html_select_date($params, $template)
$key .= '_year';
$t = $$key;
if ($t === null) {
- $$key = (int)$_current_year;
- } else if ($t[0] == '+') {
- $$key = (int)($_current_year + trim(substr($t, 1)));
- } else if ($t[0] == '-') {
- $$key = (int)($_current_year - trim(substr($t, 1)));
+ $$key = (int) $_current_year;
+ } elseif ($t[0] == '+') {
+ $$key = (int) ($_current_year + (int)trim(substr($t, 1)));
+ } elseif ($t[0] == '-') {
+ $$key = (int) ($_current_year - (int)trim(substr($t, 1)));
} else {
- $$key = (int)$$key;
+ $$key = (int) $$key;
}
}
@@ -236,73 +233,71 @@ function smarty_function_html_select_date($params, $template)
// generate year <select> or <input>
if ($display_years) {
- $_html_years = '';
$_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Year]') : ($prefix . 'Year');
if ($all_extra) {
$_extra .= ' ' . $all_extra;
- }
+ }
if ($year_extra) {
$_extra .= ' ' . $year_extra;
}
-
+
if ($year_as_text) {
$_html_years = '<input type="text" name="' . $_name . '" value="' . $_year . '" size="4" maxlength="4"' . $_extra . $extra_attrs . ' />';
} else {
$_html_years = '<select name="' . $_name . '"';
if ($year_id !== null || $all_id !== null) {
- $_html_years .= ' id="' . smarty_function_escape_special_chars(
- $year_id !== null ? ( $year_id ? $year_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $_html_years .= ' id="' . smarty_function_escape_special_chars(
+ $year_id !== null ? ($year_id ? $year_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($year_size) {
$_html_years .= ' size="' . $year_size . '"';
- }
+ }
$_html_years .= $_extra . $extra_attrs . '>' . $option_separator;
-
+
if (isset($year_empty) || isset($all_empty)) {
- $_html_years .= '<option value="">' . ( isset($year_empty) ? $year_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_years .= '<option value="">' . (isset($year_empty) ? $year_empty : $all_empty) . '</option>' . $option_separator;
}
-
- $op = $start_year > $end_year ? -1 : 1;
- for ($i=$start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) {
+
+ $op = $start_year > $end_year ? - 1 : 1;
+ for ($i = $start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) {
$_html_years .= '<option value="' . $i . '"'
. ($_year == $i ? ' selected="selected"' : '')
. '>' . $i . '</option>' . $option_separator;
}
-
+
$_html_years .= '</select>';
}
}
-
+
// generate month <select> or <input>
if ($display_months) {
- $_html_month = '';
$_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Month]') : ($prefix . 'Month');
if ($all_extra) {
$_extra .= ' ' . $all_extra;
- }
+ }
if ($month_extra) {
$_extra .= ' ' . $month_extra;
}
-
+
$_html_months = '<select name="' . $_name . '"';
if ($month_id !== null || $all_id !== null) {
- $_html_months .= ' id="' . smarty_function_escape_special_chars(
- $month_id !== null ? ( $month_id ? $month_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $_html_months .= ' id="' . smarty_function_escape_special_chars(
+ $month_id !== null ? ($month_id ? $month_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($month_size) {
$_html_months .= ' size="' . $month_size . '"';
- }
+ }
$_html_months .= $_extra . $extra_attrs . '>' . $option_separator;
-
+
if (isset($month_empty) || isset($all_empty)) {
- $_html_months .= '<option value="">' . ( isset($month_empty) ? $month_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_months .= '<option value="">' . (isset($month_empty) ? $month_empty : $all_empty) . '</option>' . $option_separator;
}
-
- for ($i = 1; $i <= 12; $i++) {
+
+ for ($i = 1; $i <= 12; $i ++) {
$_val = sprintf('%02d', $i);
$_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[$i]) : ($month_format == "%m" ? $_val : strftime($month_format, $_month_timestamps[$i]));
$_value = $month_value_format == "%m" ? $_val : strftime($month_value_format, $_month_timestamps[$i]);
@@ -310,52 +305,51 @@ function smarty_function_html_select_date($params, $template)
. ($_val == $_month ? ' selected="selected"' : '')
. '>' . $_text . '</option>' . $option_separator;
}
-
+
$_html_months .= '</select>';
}
-
+
// generate day <select> or <input>
if ($display_days) {
- $_html_day = '';
$_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Day]') : ($prefix . 'Day');
if ($all_extra) {
$_extra .= ' ' . $all_extra;
- }
+ }
if ($day_extra) {
$_extra .= ' ' . $day_extra;
}
-
+
$_html_days = '<select name="' . $_name . '"';
if ($day_id !== null || $all_id !== null) {
- $_html_days .= ' id="' . smarty_function_escape_special_chars(
- $day_id !== null ? ( $day_id ? $day_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $_html_days .= ' id="' . smarty_function_escape_special_chars(
+ $day_id !== null ? ($day_id ? $day_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($day_size) {
$_html_days .= ' size="' . $day_size . '"';
- }
+ }
$_html_days .= $_extra . $extra_attrs . '>' . $option_separator;
-
+
if (isset($day_empty) || isset($all_empty)) {
- $_html_days .= '<option value="">' . ( isset($day_empty) ? $day_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_days .= '<option value="">' . (isset($day_empty) ? $day_empty : $all_empty) . '</option>' . $option_separator;
}
-
- for ($i = 1; $i <= 31; $i++) {
+
+ for ($i = 1; $i <= 31; $i ++) {
$_val = sprintf('%02d', $i);
$_text = $day_format == '%02d' ? $_val : sprintf($day_format, $i);
- $_value = $day_value_format == '%02d' ? $_val : sprintf($day_value_format, $i);
+ $_value = $day_value_format == '%02d' ? $_val : sprintf($day_value_format, $i);
$_html_days .= '<option value="' . $_value . '"'
. ($_val == $_day ? ' selected="selected"' : '')
. '>' . $_text . '</option>' . $option_separator;
}
-
+
$_html_days .= '</select>';
}
// order the fields for output
$_html = '';
- for ($i=0; $i <= 2; $i++) {
+ for ($i = 0; $i <= 2; $i ++) {
switch ($field_order[$i]) {
case 'Y':
case 'y':
@@ -365,8 +359,8 @@ function smarty_function_html_select_date($params, $template)
}
$_html .= $_html_years;
}
- break;
-
+ break;
+
case 'm':
case 'M':
if (isset($_html_months)) {
@@ -375,8 +369,8 @@ function smarty_function_html_select_date($params, $template)
}
$_html .= $_html_months;
}
- break;
-
+ break;
+
case 'd':
case 'D':
if (isset($_html_days)) {
@@ -385,10 +379,9 @@ function smarty_function_html_select_date($params, $template)
}
$_html .= $_html_days;
}
- break;
+ break;
}
}
+
return $_html;
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/function.html_select_time.php b/include/smarty/libs/plugins/function.html_select_time.php
index 9fb8038e4..9af6aad5b 100644
--- a/include/smarty/libs/plugins/function.html_select_time.php
+++ b/include/smarty/libs/plugins/function.html_select_time.php
@@ -2,7 +2,7 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
@@ -17,21 +17,21 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
/**
* Smarty {html_select_time} function plugin
- *
* Type: function<br>
* Name: html_select_time<br>
* Purpose: Prints the dropdowns for time selection
*
- * @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time}
- * (Smarty online manual)
- * @author Roberto Berto <roberto@berto.net>
- * @author Monte Ohrt <monte AT ohrt DOT com>
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
+ * @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time}
+ * (Smarty online manual)
+ * @author Roberto Berto <roberto@berto.net>
+ * @author Monte Ohrt <monte AT ohrt DOT com>
+ *
+ * @param array $params parameters
+ *
* @return string
- * @uses smarty_make_timestamp()
+ * @uses smarty_make_timestamp()
*/
-function smarty_function_html_select_time($params, $template)
+function smarty_function_html_select_time($params)
{
$prefix = "Time_";
$field_array = null;
@@ -117,7 +117,7 @@ function smarty_function_html_select_time($params, $template)
case 'minute_value_format':
case 'second_format':
case 'second_value_format':
- $$_key = (string)$_value;
+ $$_key = (string) $_value;
break;
case 'display_hours':
@@ -125,7 +125,7 @@ function smarty_function_html_select_time($params, $template)
case 'display_seconds':
case 'display_meridian':
case 'use_24_hours':
- $$_key = (bool)$_value;
+ $$_key = (bool) $_value;
break;
case 'minute_interval':
@@ -135,7 +135,7 @@ function smarty_function_html_select_time($params, $template)
case 'minute_size':
case 'second_size':
case 'meridian_size':
- $$_key = (int)$_value;
+ $$_key = (int) $_value;
break;
default:
@@ -151,7 +151,7 @@ function smarty_function_html_select_time($params, $template)
if (isset($params['time']) && is_array($params['time'])) {
if (isset($params['time'][$prefix . 'Hour'])) {
// $_REQUEST[$field_array] given
- foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
+ foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params['time'][$prefix . $_elementName])
? $params['time'][$prefix . $_elementName]
@@ -160,11 +160,11 @@ function smarty_function_html_select_time($params, $template)
$_meridian = isset($params['time'][$prefix . 'Meridian'])
? (' ' . $params['time'][$prefix . 'Meridian'])
: '';
- $time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian );
+ $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
} elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) {
// $_REQUEST given
- foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
+ foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params['time'][$field_array][$prefix . $_elementName])
? $params['time'][$field_array][$prefix . $_elementName]
@@ -173,7 +173,7 @@ function smarty_function_html_select_time($params, $template)
$_meridian = isset($params['time'][$field_array][$prefix . 'Meridian'])
? (' ' . $params['time'][$field_array][$prefix . 'Meridian'])
: '';
- $time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian );
+ $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
} else {
// no date found, use NOW
@@ -204,8 +204,8 @@ function smarty_function_html_select_time($params, $template)
$_html_hours = '<select name="' . $_name . '"';
if ($hour_id !== null || $all_id !== null) {
$_html_hours .= ' id="' . smarty_function_escape_special_chars(
- $hour_id !== null ? ( $hour_id ? $hour_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $hour_id !== null ? ($hour_id ? $hour_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($hour_size) {
$_html_hours .= ' size="' . $hour_size . '"';
@@ -213,12 +213,12 @@ function smarty_function_html_select_time($params, $template)
$_html_hours .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($hour_empty) || isset($all_empty)) {
- $_html_hours .= '<option value="">' . ( isset($hour_empty) ? $hour_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_hours .= '<option value="">' . (isset($hour_empty) ? $hour_empty : $all_empty) . '</option>' . $option_separator;
}
$start = $use_24_hours ? 0 : 1;
$end = $use_24_hours ? 23 : 12;
- for ($i=$start; $i <= $end; $i++) {
+ for ($i = $start; $i <= $end; $i ++) {
$_val = sprintf('%02d', $i);
$_text = $hour_format == '%02d' ? $_val : sprintf($hour_format, $i);
$_value = $hour_value_format == '%02d' ? $_val : sprintf($hour_value_format, $i);
@@ -226,7 +226,7 @@ function smarty_function_html_select_time($params, $template)
if (!$use_24_hours) {
$_hour12 = $_hour == 0
? 12
- : ($_hour <= 12 ? $_hour : $_hour -12);
+ : ($_hour <= 12 ? $_hour : $_hour - 12);
}
$selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null;
@@ -253,8 +253,8 @@ function smarty_function_html_select_time($params, $template)
$_html_minutes = '<select name="' . $_name . '"';
if ($minute_id !== null || $all_id !== null) {
$_html_minutes .= ' id="' . smarty_function_escape_special_chars(
- $minute_id !== null ? ( $minute_id ? $minute_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $minute_id !== null ? ($minute_id ? $minute_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($minute_size) {
$_html_minutes .= ' size="' . $minute_size . '"';
@@ -262,11 +262,11 @@ function smarty_function_html_select_time($params, $template)
$_html_minutes .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($minute_empty) || isset($all_empty)) {
- $_html_minutes .= '<option value="">' . ( isset($minute_empty) ? $minute_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_minutes .= '<option value="">' . (isset($minute_empty) ? $minute_empty : $all_empty) . '</option>' . $option_separator;
}
$selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null;
- for ($i=0; $i <= 59; $i += $minute_interval) {
+ for ($i = 0; $i <= 59; $i += $minute_interval) {
$_val = sprintf('%02d', $i);
$_text = $minute_format == '%02d' ? $_val : sprintf($minute_format, $i);
$_value = $minute_value_format == '%02d' ? $_val : sprintf($minute_value_format, $i);
@@ -293,8 +293,8 @@ function smarty_function_html_select_time($params, $template)
$_html_seconds = '<select name="' . $_name . '"';
if ($second_id !== null || $all_id !== null) {
$_html_seconds .= ' id="' . smarty_function_escape_special_chars(
- $second_id !== null ? ( $second_id ? $second_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $second_id !== null ? ($second_id ? $second_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($second_size) {
$_html_seconds .= ' size="' . $second_size . '"';
@@ -302,11 +302,11 @@ function smarty_function_html_select_time($params, $template)
$_html_seconds .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($second_empty) || isset($all_empty)) {
- $_html_seconds .= '<option value="">' . ( isset($second_empty) ? $second_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_seconds .= '<option value="">' . (isset($second_empty) ? $second_empty : $all_empty) . '</option>' . $option_separator;
}
$selected = $_second !== null ? ($_second - $_second % $second_interval) : null;
- for ($i=0; $i <= 59; $i += $second_interval) {
+ for ($i = 0; $i <= 59; $i += $second_interval) {
$_val = sprintf('%02d', $i);
$_text = $second_format == '%02d' ? $_val : sprintf($second_format, $i);
$_value = $second_value_format == '%02d' ? $_val : sprintf($second_value_format, $i);
@@ -333,8 +333,8 @@ function smarty_function_html_select_time($params, $template)
$_html_meridian = '<select name="' . $_name . '"';
if ($meridian_id !== null || $all_id !== null) {
$_html_meridian .= ' id="' . smarty_function_escape_special_chars(
- $meridian_id !== null ? ( $meridian_id ? $meridian_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
- ) . '"';
+ $meridian_id !== null ? ($meridian_id ? $meridian_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+ ) . '"';
}
if ($meridian_size) {
$_html_meridian .= ' size="' . $meridian_size . '"';
@@ -342,11 +342,11 @@ function smarty_function_html_select_time($params, $template)
$_html_meridian .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($meridian_empty) || isset($all_empty)) {
- $_html_meridian .= '<option value="">' . ( isset($meridian_empty) ? $meridian_empty : $all_empty ) . '</option>' . $option_separator;
+ $_html_meridian .= '<option value="">' . (isset($meridian_empty) ? $meridian_empty : $all_empty) . '</option>' . $option_separator;
}
- $_html_meridian .= '<option value="am"'. ($_hour < 12 ? ' selected="selected"' : '') .'>AM</option>' . $option_separator
- . '<option value="pm"'. ($_hour < 12 ? '' : ' selected="selected"') .'>PM</option>' . $option_separator
+ $_html_meridian .= '<option value="am"' . ($_hour > 0 && $_hour < 12 ? ' selected="selected"' : '') . '>AM</option>' . $option_separator
+ . '<option value="pm"' . ($_hour < 12 ? '' : ' selected="selected"') . '>PM</option>' . $option_separator
. '</select>';
}
@@ -362,5 +362,3 @@ function smarty_function_html_select_time($params, $template)
return $_html;
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/function.html_table.php b/include/smarty/libs/plugins/function.html_table.php
index 6b9cb9d12..ec7ba48a4 100644
--- a/include/smarty/libs/plugins/function.html_table.php
+++ b/include/smarty/libs/plugins/function.html_table.php
@@ -2,13 +2,12 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {html_table} function plugin
- *
* Type: function<br>
* Name: html_table<br>
* Date: Feb 17, 2003<br>
@@ -37,17 +36,18 @@
* {table loop=$data cols="first,second,third" tr_attr=$colors}
* </pre>
*
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author credit to Messju Mohr <messju at lammfellpuschen dot de>
- * @author credit to boots <boots dot smarty at yahoo dot com>
- * @version 1.1
- * @link http://www.smarty.net/manual/en/language.function.html.table.php {html_table}
- * (Smarty online manual)
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author credit to Messju Mohr <messju at lammfellpuschen dot de>
+ * @author credit to boots <boots dot smarty at yahoo dot com>
+ * @version 1.1
+ * @link http://www.smarty.net/manual/en/language.function.html.table.php {html_table}
+ * (Smarty online manual)
+ *
+ * @param array $params parameters
+ *
* @return string
*/
-function smarty_function_html_table($params, $template)
+function smarty_function_html_table($params)
{
$table_attr = 'border="1"';
$tr_attr = '';
@@ -63,14 +63,15 @@ function smarty_function_html_table($params, $template)
$loop = null;
if (!isset($params['loop'])) {
- trigger_error("html_table: missing 'loop' parameter",E_USER_WARNING);
+ trigger_error("html_table: missing 'loop' parameter", E_USER_WARNING);
+
return;
}
foreach ($params as $_key => $_value) {
switch ($_key) {
case 'loop':
- $$_key = (array)$_value;
+ $$_key = (array) $_value;
break;
case 'cols':
@@ -81,14 +82,14 @@ function smarty_function_html_table($params, $template)
$cols = explode(',', $_value);
$cols_count = count($cols);
} elseif (!empty($_value)) {
- $cols_count = (int)$_value;
+ $cols_count = (int) $_value;
} else {
$cols_count = $cols;
}
break;
case 'rows':
- $$_key = (int)$_value;
+ $$_key = (int) $_value;
break;
case 'table_attr':
@@ -97,7 +98,7 @@ function smarty_function_html_table($params, $template)
case 'vdir':
case 'inner':
case 'caption':
- $$_key = (string)$_value;
+ $$_key = (string) $_value;
break;
case 'tr_attr':
@@ -129,7 +130,7 @@ function smarty_function_html_table($params, $template)
$cols = ($hdir == 'right') ? $cols : array_reverse($cols);
$output .= "<thead><tr>\n";
- for ($r = 0; $r < $cols_count; $r++) {
+ for ($r = 0; $r < $cols_count; $r ++) {
$output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>';
$output .= $cols[$r];
$output .= "</th>\n";
@@ -138,12 +139,12 @@ function smarty_function_html_table($params, $template)
}
$output .= "<tbody>\n";
- for ($r = 0; $r < $rows; $r++) {
+ for ($r = 0; $r < $rows; $r ++) {
$output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n";
- $rx = ($vdir == 'down') ? $r * $cols_count : ($rows-1 - $r) * $cols_count;
+ $rx = ($vdir == 'down') ? $r * $cols_count : ($rows - 1 - $r) * $cols_count;
- for ($c = 0; $c < $cols_count; $c++) {
- $x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count-1 - $c;
+ for ($c = 0; $c < $cols_count; $c ++) {
+ $x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count - 1 - $c;
if ($inner != 'cols') {
/* shuffle x to loop over rows*/
$x = floor($x / $cols_count) + ($x % $cols_count) * $rows;
@@ -173,5 +174,3 @@ function smarty_function_html_table_cycle($name, $var, $no)
return ($ret) ? ' ' . $ret : '';
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/function.mailto.php b/include/smarty/libs/plugins/function.mailto.php
index 55d5c0602..520fb7aa6 100644
--- a/include/smarty/libs/plugins/function.mailto.php
+++ b/include/smarty/libs/plugins/function.mailto.php
@@ -2,13 +2,12 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {mailto} function plugin
- *
* Type: function<br>
* Name: mailto<br>
* Date: May 21, 2002
@@ -39,22 +38,24 @@
* {mailto address="me@domain.com" extra='class="mailto"'}
* </pre>
*
- * @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto}
- * (Smarty online manual)
- * @version 1.2
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author credits to Jason Sweat (added cc, bcc and subject functionality)
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
+ * @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto}
+ * (Smarty online manual)
+ * @version 1.2
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author credits to Jason Sweat (added cc, bcc and subject functionality)
+ *
+ * @param array $params parameters
+ *
* @return string
*/
-function smarty_function_mailto($params, $template)
+function smarty_function_mailto($params)
{
static $_allowed_encoding = array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true);
$extra = '';
if (empty($params['address'])) {
- trigger_error("mailto: missing 'address' parameter",E_USER_WARNING);
+ trigger_error("mailto: missing 'address' parameter", E_USER_WARNING);
+
return;
} else {
$address = $params['address'];
@@ -71,8 +72,9 @@ function smarty_function_mailto($params, $template)
case 'cc':
case 'bcc':
case 'followupto':
- if (!empty($value))
- $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value));
+ if (!empty($value)) {
+ $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value));
+ }
break;
case 'subject':
@@ -91,10 +93,11 @@ function smarty_function_mailto($params, $template)
if ($mail_parms) {
$address .= '?' . join('&', $mail_parms);
}
-
+
$encode = (empty($params['encode'])) ? 'none' : $params['encode'];
if (!isset($_allowed_encoding[$encode])) {
trigger_error("mailto: 'encode' parameter must be none, javascript, javascript_charcode or hex", E_USER_WARNING);
+
return;
}
// FIXME: (rodneyrehm) document.write() excues me what? 1998 has passed!
@@ -102,7 +105,7 @@ function smarty_function_mailto($params, $template)
$string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');';
$js_encode = '';
- for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
+ for ($x = 0, $_length = strlen($string); $x < $_length; $x ++) {
$js_encode .= '%' . bin2hex($string[$x]);
}
@@ -110,7 +113,7 @@ function smarty_function_mailto($params, $template)
} elseif ($encode == 'javascript_charcode') {
$string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
- for($x = 0, $y = strlen($string); $x < $y; $x++) {
+ for ($x = 0, $y = strlen($string); $x < $y; $x ++) {
$ord[] = ord($string[$x]);
}
@@ -125,11 +128,12 @@ function smarty_function_mailto($params, $template)
} elseif ($encode == 'hex') {
preg_match('!^(.*)(\?.*)$!', $address, $match);
if (!empty($match[2])) {
- trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.",E_USER_WARNING);
+ trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.", E_USER_WARNING);
+
return;
}
$address_encode = '';
- for ($x = 0, $_length = strlen($address); $x < $_length; $x++) {
+ for ($x = 0, $_length = strlen($address); $x < $_length; $x ++) {
if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[$x])) {
$address_encode .= '%' . bin2hex($address[$x]);
} else {
@@ -137,16 +141,15 @@ function smarty_function_mailto($params, $template)
}
}
$text_encode = '';
- for ($x = 0, $_length = strlen($text); $x < $_length; $x++) {
+ for ($x = 0, $_length = strlen($text); $x < $_length; $x ++) {
$text_encode .= '&#x' . bin2hex($text[$x]) . ';';
}
$mailto = "&#109;&#97;&#105;&#108;&#116;&#111;&#58;";
+
return '<a href="' . $mailto . $address_encode . '" ' . $extra . '>' . $text_encode . '</a>';
} else {
// no encoding
return '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
}
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/function.math.php b/include/smarty/libs/plugins/function.math.php
index f4d3f05ee..aba76e825 100644
--- a/include/smarty/libs/plugins/function.math.php
+++ b/include/smarty/libs/plugins/function.math.php
@@ -1,87 +1,91 @@
<?php
/**
* Smarty plugin
- *
* This plugin is only for Smarty2 BC
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsFunction
*/
/**
* Smarty {math} function plugin
- *
* Type: function<br>
* Name: math<br>
* Purpose: handle math computations in template
*
- * @link http://www.smarty.net/manual/en/language.function.math.php {math}
- * (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.function.math.php {math}
+ * (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com>
+ *
* @param array $params parameters
* @param Smarty_Internal_Template $template template object
+ *
* @return string|null
*/
function smarty_function_math($params, $template)
{
static $_allowed_funcs = array(
- 'int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true,
- 'log' => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true,
- 'rand' => true, 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true ,'tan' => true
+ 'int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true,
+ 'log' => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true,
+ 'rand' => true, 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true, 'tan' => true
);
// be sure equation parameter is present
if (empty($params['equation'])) {
- trigger_error("math: missing equation parameter",E_USER_WARNING);
+ trigger_error("math: missing equation parameter", E_USER_WARNING);
+
return;
}
$equation = $params['equation'];
// make sure parenthesis are balanced
- if (substr_count($equation,"(") != substr_count($equation,")")) {
- trigger_error("math: unbalanced parenthesis",E_USER_WARNING);
+ if (substr_count($equation, "(") != substr_count($equation, ")")) {
+ trigger_error("math: unbalanced parenthesis", E_USER_WARNING);
+
return;
}
// match all vars in equation, make sure all are passed
- preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]*)!",$equation, $match);
+ preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]*)!", $equation, $match);
- foreach($match[1] as $curr_var) {
+ foreach ($match[1] as $curr_var) {
if ($curr_var && !isset($params[$curr_var]) && !isset($_allowed_funcs[$curr_var])) {
- trigger_error("math: function call $curr_var not allowed",E_USER_WARNING);
+ trigger_error("math: function call $curr_var not allowed", E_USER_WARNING);
+
return;
}
}
- foreach($params as $key => $val) {
+ foreach ($params as $key => $val) {
if ($key != "equation" && $key != "format" && $key != "assign") {
// make sure value is not empty
- if (strlen($val)==0) {
- trigger_error("math: parameter $key is empty",E_USER_WARNING);
+ if (strlen($val) == 0) {
+ trigger_error("math: parameter $key is empty", E_USER_WARNING);
+
return;
}
if (!is_numeric($val)) {
- trigger_error("math: parameter $key: is not numeric",E_USER_WARNING);
+ trigger_error("math: parameter $key: is not numeric", E_USER_WARNING);
+
return;
}
$equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation);
}
}
$smarty_math_result = null;
- eval("\$smarty_math_result = ".$equation.";");
+ eval("\$smarty_math_result = " . $equation . ";");
if (empty($params['format'])) {
if (empty($params['assign'])) {
return $smarty_math_result;
} else {
- $template->assign($params['assign'],$smarty_math_result);
+ $template->assign($params['assign'], $smarty_math_result);
}
} else {
- if (empty($params['assign'])){
- printf($params['format'],$smarty_math_result);
+ if (empty($params['assign'])) {
+ printf($params['format'], $smarty_math_result);
} else {
- $template->assign($params['assign'],sprintf($params['format'],$smarty_math_result));
+ $template->assign($params['assign'], sprintf($params['format'], $smarty_math_result));
}
}
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifier.capitalize.php b/include/smarty/libs/plugins/modifier.capitalize.php
index a78e3632a..a8ad76370 100644
--- a/include/smarty/libs/plugins/modifier.capitalize.php
+++ b/include/smarty/libs/plugins/modifier.capitalize.php
@@ -1,25 +1,24 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsModifier
*/
/**
* Smarty capitalize modifier plugin
- *
* Type: modifier<br>
* Name: capitalize<br>
* Purpose: capitalize words in the string
- *
* {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }}
*
* @param string $string string to capitalize
* @param boolean $uc_digits also capitalize "x123" to "X123"
* @param boolean $lc_rest capitalize first letters, lowercase all following letters "aAa" to "Aaa"
+ *
* @return string capitalized string
- * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Monte Ohrt <monte at ohrt dot com>
* @author Rodney Rehm
*/
function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = false)
@@ -27,39 +26,65 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
if (Smarty::$_MBSTRING) {
if ($lc_rest) {
// uppercase (including hyphenated words)
- $upper_string = mb_convert_case( $string, MB_CASE_TITLE, Smarty::$_CHARSET );
+ $upper_string = mb_convert_case($string, MB_CASE_TITLE, Smarty::$_CHARSET);
} else {
// uppercase word breaks
- $upper_string = preg_replace("!(^|[^\p{L}'])([\p{Ll}])!eS" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').mb_convert_case(stripslashes('\\2'),MB_CASE_UPPER, '" . addslashes(Smarty::$_CHARSET) . "')", $string);
+ $upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert_cb', $string);
}
// check uc_digits case
if (!$uc_digits) {
if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) {
- foreach($matches[1] as $match) {
+ foreach ($matches[1] as $match) {
$upper_string = substr_replace($upper_string, mb_strtolower($match[0], Smarty::$_CHARSET), $match[1], strlen($match[0]));
}
- }
+ }
}
- $upper_string = preg_replace("!((^|\s)['\"])(\w)!e" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').mb_convert_case(stripslashes('\\3'),MB_CASE_UPPER, '" . addslashes(Smarty::$_CHARSET) . "')", $upper_string);
+ $upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert2_cb', $upper_string);
return $upper_string;
}
-
+
// lowercase first
if ($lc_rest) {
$string = strtolower($string);
}
// uppercase (including hyphenated words)
- $upper_string = preg_replace("!(^|[^\p{L}'])([\p{Ll}])!eS" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').ucfirst(stripslashes('\\2'))", $string);
+ $upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst_cb', $string);
// check uc_digits case
if (!$uc_digits) {
if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) {
- foreach($matches[1] as $match) {
+ foreach ($matches[1] as $match) {
$upper_string = substr_replace($upper_string, strtolower($match[0]), $match[1], strlen($match[0]));
}
- }
+ }
}
- $upper_string = preg_replace("!((^|\s)['\"])(\w)!e" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').strtoupper(stripslashes('\\3'))", $upper_string);
+ $upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst2_cb', $upper_string);
return $upper_string;
-}
+}
+
+/*
+ *
+ * Bug: create_function() use exhausts memory when used in long loops
+ * Fix: use declared functions for callbacks instead of using create_function()
+ * Note: This can be fixed using anonymous functions instead, but that requires PHP >= 5.3
+ *
+ * @author Kyle Renfrow
+ */
+function smarty_mod_cap_mbconvert_cb($matches)
+{
+ return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[2]), MB_CASE_UPPER, Smarty::$_CHARSET);
+}
+
+function smarty_mod_cap_mbconvert2_cb($matches)
+{
+ return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[3]), MB_CASE_UPPER, Smarty::$_CHARSET);
+}
+
+function smarty_mod_cap_ucfirst_cb($matches)
+{
+ return stripslashes($matches[1]) . ucfirst(stripslashes($matches[2]));
+}
-?> \ No newline at end of file
+function smarty_mod_cap_ucfirst2_cb($matches)
+{
+ return stripslashes($matches[1]) . ucfirst(stripslashes($matches[3]));
+}
diff --git a/include/smarty/libs/plugins/modifier.date_format.php b/include/smarty/libs/plugins/modifier.date_format.php
index f3eaba057..28d6ff021 100644
--- a/include/smarty/libs/plugins/modifier.date_format.php
+++ b/include/smarty/libs/plugins/modifier.date_format.php
@@ -1,14 +1,13 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsModifier
*/
/**
* Smarty date_format modifier plugin
- *
* Type: modifier<br>
* Name: date_format<br>
* Purpose: format datestamps via strftime<br>
@@ -16,24 +15,26 @@
* - string: input date string
* - format: strftime format for output
* - default_date: default date if $string is empty
- *
- * @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
* @param string $string input date string
* @param string $format strftime format for output
* @param string $default_date default date if $string is empty
* @param string $formatter either 'strftime' or 'auto'
+ *
* @return string |void
- * @uses smarty_make_timestamp()
+ * @uses smarty_make_timestamp()
*/
-function smarty_modifier_date_format($string, $format=null, $default_date='', $formatter='auto')
+function smarty_modifier_date_format($string, $format = null, $default_date = '', $formatter = 'auto')
{
if ($format === null) {
$format = Smarty::$_DATE_FORMAT;
}
/**
- * Include the {@link shared.make_timestamp.php} plugin
- */
+ * require_once the {@link shared.make_timestamp.php} plugin
+ */
require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') {
$timestamp = smarty_make_timestamp($string);
@@ -41,25 +42,24 @@ function smarty_modifier_date_format($string, $format=null, $default_date='', $f
$timestamp = smarty_make_timestamp($default_date);
} else {
return;
- }
- if($formatter=='strftime'||($formatter=='auto'&&strpos($format,'%')!==false)) {
+ }
+ if ($formatter == 'strftime' || ($formatter == 'auto' && strpos($format, '%') !== false)) {
if (DS == '\\') {
$_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T');
$_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');
if (strpos($format, '%e') !== false) {
$_win_from[] = '%e';
$_win_to[] = sprintf('%\' 2d', date('j', $timestamp));
- }
+ }
if (strpos($format, '%l') !== false) {
$_win_from[] = '%l';
$_win_to[] = sprintf('%\' 2d', date('h', $timestamp));
- }
+ }
$format = str_replace($_win_from, $_win_to, $format);
- }
+ }
+
return strftime($format, $timestamp);
} else {
return date($format, $timestamp);
}
-}
-
-?> \ No newline at end of file
+}
diff --git a/include/smarty/libs/plugins/modifier.debug_print_var.php b/include/smarty/libs/plugins/modifier.debug_print_var.php
index fa44100e8..4ff8213ce 100644
--- a/include/smarty/libs/plugins/modifier.debug_print_var.php
+++ b/include/smarty/libs/plugins/modifier.debug_print_var.php
@@ -1,53 +1,66 @@
<?php
/**
* Smarty plugin
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage Debug
*/
/**
* Smarty debug_print_var modifier plugin
- *
* Type: modifier<br>
* Name: debug_print_var<br>
* Purpose: formats variable contents for display in the console
*
- * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
* @param array|object $var variable to be formatted
- * @param integer $depth maximum recursion depth if $var is an array
- * @param integer $length maximum string length if $var is a string
- * @return string
+ * @param int $max maximum recursion depth if $var is an array or object
+ * @param int $length maximum string length if $var is a string
+ * @param int $depth actual recursion depth
+ * @param array $objects processed objects in actual depth to prevent recursive object processing
+ *
+ * @return string
*/
-function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
+function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth = 0, $objects = array())
{
- $_replace = array("\n" => '<i>\n</i>',
- "\r" => '<i>\r</i>',
- "\t" => '<i>\t</i>'
- );
-
+ $_replace = array("\n" => '\n',
+ "\r" => '\r',
+ "\t" => '\t'
+ );
switch (gettype($var)) {
case 'array' :
$results = '<b>Array (' . count($var) . ')</b>';
+ if ($depth == $max) {
+ break;
+ }
foreach ($var as $curr_key => $curr_val) {
$results .= '<br>' . str_repeat('&nbsp;', $depth * 2)
- . '<b>' . strtr($curr_key, $_replace) . '</b> =&gt; '
- . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
- $depth--;
- }
+ . '<b>' . strtr($curr_key, $_replace) . '</b> =&gt; '
+ . smarty_modifier_debug_print_var($curr_val, $max, $length, ++ $depth, $objects);
+ $depth --;
+ }
break;
-
+
case 'object' :
$object_vars = get_object_vars($var);
$results = '<b>' . get_class($var) . ' Object (' . count($object_vars) . ')</b>';
+ if (in_array($var, $objects)) {
+ $results .= ' called recursive';
+ break;
+ }
+ if ($depth == $max) {
+ break;
+ }
+ $objects[] = $var;
foreach ($object_vars as $curr_key => $curr_val) {
$results .= '<br>' . str_repeat('&nbsp;', $depth * 2)
- . '<b> -&gt;' . strtr($curr_key, $_replace) . '</b> = '
- . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
- $depth--;
- }
+ . '<b> -&gt;' . strtr($curr_key, $_replace) . '</b> = '
+ . smarty_modifier_debug_print_var($curr_val, $max, $length, ++ $depth, $objects);
+ $depth --;
+ }
break;
-
+
case 'boolean' :
case 'NULL' :
case 'resource' :
@@ -59,15 +72,15 @@ function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
$results = 'null';
} else {
$results = htmlspecialchars((string) $var);
- }
+ }
$results = '<i>' . $results . '</i>';
break;
-
+
case 'integer' :
case 'float' :
$results = htmlspecialchars((string) $var);
break;
-
+
case 'string' :
$results = strtr($var, $_replace);
if (Smarty::$_MBSTRING) {
@@ -82,7 +95,7 @@ function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
$results = htmlspecialchars('"' . $results . '"');
break;
-
+
case 'unknown type' :
default :
$results = strtr((string) $var, $_replace);
@@ -95,11 +108,9 @@ function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
$results = substr($results, 0, $length - 3) . '...';
}
}
-
+
$results = htmlspecialchars($results);
- }
+ }
return $results;
-}
-
-?> \ No newline at end of file
+}
diff --git a/include/smarty/libs/plugins/modifier.escape.php b/include/smarty/libs/plugins/modifier.escape.php
index 5ca8e7796..9fdb0702f 100644
--- a/include/smarty/libs/plugins/modifier.escape.php
+++ b/include/smarty/libs/plugins/modifier.escape.php
@@ -2,23 +2,24 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifier
*/
/**
* Smarty escape modifier plugin
- *
* Type: modifier<br>
* Name: escape<br>
* Purpose: escape string for output
*
- * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
+ * @link http://www.smarty.net/docs/en/language.modifier.escape
* @author Monte Ohrt <monte at ohrt dot com>
+ *
* @param string $string input string
* @param string $esc_type escape type
* @param string $char_set character set, used for htmlspecialchars() or htmlentities()
* @param boolean $double_encode encode already encoded entitites again, used for htmlspecialchars() or htmlentities()
+ *
* @return string escaped input string
*/
function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true)
@@ -27,7 +28,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
if ($_double_encode === null) {
$_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');
}
-
+
if (!$char_set) {
$char_set = Smarty::$_CHARSET;
}
@@ -46,6 +47,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlspecialchars($string, ENT_QUOTES, $char_set);
$string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+
return $string;
}
}
@@ -65,10 +67,11 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlspecialchars($string, ENT_QUOTES, $char_set);
$string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+
return $string;
}
}
-
+
// htmlentities() won't convert everything, so use mb_convert_encoding
return mb_convert_encoding($string, 'HTML-ENTITIES', $char_set);
}
@@ -83,6 +86,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlentities($string, ENT_QUOTES, $char_set);
$string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+
return $string;
}
}
@@ -102,9 +106,10 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
// Note that the UTF-8 encoded character ä will be represented as %c3%a4
$return = '';
$_length = strlen($string);
- for ($x = 0; $x < $_length; $x++) {
+ for ($x = 0; $x < $_length; $x ++) {
$return .= '%' . bin2hex($string[$x]);
}
+
return $return;
case 'hexentity':
@@ -115,13 +120,15 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) {
$return .= '&#x' . strtoupper(dechex($unicode)) . ';';
}
+
return $return;
}
// no MBString fallback
$_length = strlen($string);
- for ($x = 0; $x < $_length; $x++) {
+ for ($x = 0; $x < $_length; $x ++) {
$return .= '&#x' . bin2hex($string[$x]) . ';';
}
+
return $return;
case 'decentity':
@@ -132,13 +139,15 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) {
$return .= '&#' . $unicode . ';';
}
+
return $return;
}
// no MBString fallback
$_length = strlen($string);
- for ($x = 0; $x < $_length; $x++) {
+ for ($x = 0; $x < $_length; $x ++) {
$return .= '&#' . ord($string[$x]) . ';';
}
+
return $return;
case 'javascript':
@@ -148,6 +157,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
case 'mail':
if (Smarty::$_MBSTRING) {
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php');
+
return smarty_mb_str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string);
}
// no MBString fallback
@@ -165,11 +175,12 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
$return .= chr($unicode);
}
}
+
return $return;
}
$_length = strlen($string);
- for ($_i = 0; $_i < $_length; $_i++) {
+ for ($_i = 0; $_i < $_length; $_i ++) {
$_ord = ord(substr($string, $_i, 1));
// non-standard char, escape it
if ($_ord >= 126) {
@@ -178,11 +189,10 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
$return .= substr($string, $_i, 1);
}
}
+
return $return;
default:
return $string;
}
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifier.regex_replace.php b/include/smarty/libs/plugins/modifier.regex_replace.php
index f9fd5fa53..ffea16755 100644
--- a/include/smarty/libs/plugins/modifier.regex_replace.php
+++ b/include/smarty/libs/plugins/modifier.regex_replace.php
@@ -2,39 +2,43 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifier
*/
/**
* Smarty regex_replace modifier plugin
- *
* Type: modifier<br>
* Name: regex_replace<br>
* Purpose: regular expression search/replace
*
- * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php
+ * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php
* regex_replace (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @param string $string input string
- * @param string|array $search regular expression(s) to search for
- * @param string|array $replace string(s) that should be replaced
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @param string $string input string
+ * @param string|array $search regular expression(s) to search for
+ * @param string|array $replace string(s) that should be replaced
+ * @param int $limit the maximum number of replacements
+ *
* @return string
*/
-function smarty_modifier_regex_replace($string, $search, $replace)
+function smarty_modifier_regex_replace($string, $search, $replace, $limit = -1)
{
- if(is_array($search)) {
- foreach($search as $idx => $s) {
+ if (is_array($search)) {
+ foreach ($search as $idx => $s) {
$search[$idx] = _smarty_regex_replace_check($s);
}
} else {
$search = _smarty_regex_replace_check($search);
}
- return preg_replace($search, $replace, $string);
+
+ return preg_replace($search, $replace, $string, $limit);
}
/**
* @param string $search string(s) that should be replaced
+ *
* @return string
* @ignore
*/
@@ -42,14 +46,13 @@ function _smarty_regex_replace_check($search)
{
// null-byte injection detection
// anything behind the first null-byte is ignored
- if (($pos = strpos($search,"\0")) !== false) {
- $search = substr($search,0,$pos);
+ if (($pos = strpos($search, "\0")) !== false) {
+ $search = substr($search, 0, $pos);
}
// remove eval-modifier from $search
if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) {
- $search = substr($search, 0, -strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]);
+ $search = substr($search, 0, - strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]);
}
+
return $search;
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifier.replace.php b/include/smarty/libs/plugins/modifier.replace.php
index 4d71a6e9b..aa5e8570b 100644
--- a/include/smarty/libs/plugins/modifier.replace.php
+++ b/include/smarty/libs/plugins/modifier.replace.php
@@ -1,33 +1,34 @@
<?php
/**
* Smarty plugin
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsModifier
*/
/**
* Smarty replace modifier plugin
- *
* Type: modifier<br>
* Name: replace<br>
* Purpose: simple search/replace
- *
- * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Uwe Tews
+ *
+ * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Uwe Tews
+ *
* @param string $string input string
* @param string $search text to search for
* @param string $replace replacement text
- * @return string
+ *
+ * @return string
*/
function smarty_modifier_replace($string, $search, $replace)
{
if (Smarty::$_MBSTRING) {
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php');
+
return smarty_mb_str_replace($search, $replace, $string);
}
-
- return str_replace($search, $replace, $string);
-}
-?> \ No newline at end of file
+ return str_replace($search, $replace, $string);
+}
diff --git a/include/smarty/libs/plugins/modifier.spacify.php b/include/smarty/libs/plugins/modifier.spacify.php
index a907232ff..e5c41ad8b 100644
--- a/include/smarty/libs/plugins/modifier.spacify.php
+++ b/include/smarty/libs/plugins/modifier.spacify.php
@@ -1,27 +1,27 @@
<?php
/**
* Smarty plugin
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsModifier
*/
/**
* Smarty spacify modifier plugin
- *
* Type: modifier<br>
* Name: spacify<br>
* Purpose: add spaces between characters in a string
- *
- * @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
* @param string $string input string
* @param string $spacify_char string to insert between characters.
+ *
* @return string
*/
function smarty_modifier_spacify($string, $spacify_char = ' ')
{
// well… what about charsets besides latin and UTF-8?
- return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, -1, PREG_SPLIT_NO_EMPTY));
-}
-
-?> \ No newline at end of file
+ return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, - 1, PREG_SPLIT_NO_EMPTY));
+}
diff --git a/include/smarty/libs/plugins/modifier.truncate.php b/include/smarty/libs/plugins/modifier.truncate.php
index 9a803ec99..fbe62e823 100644
--- a/include/smarty/libs/plugins/modifier.truncate.php
+++ b/include/smarty/libs/plugins/modifier.truncate.php
@@ -2,58 +2,63 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifier
*/
-
+
/**
* Smarty truncate modifier plugin
- *
* Type: modifier<br>
* Name: truncate<br>
* Purpose: Truncate a string to a certain length if necessary,
* optionally splitting in the middle of a word, and
* appending the $etc string or inserting $etc into the middle.
- *
- * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
* @param string $string input string
* @param integer $length length of truncated text
* @param string $etc end string
* @param boolean $break_words truncate at word boundary
* @param boolean $middle truncate in the middle of text
+ *
* @return string truncated string
*/
-function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) {
- if ($length == 0)
+function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false)
+{
+ if ($length == 0) {
return '';
+ }
if (Smarty::$_MBSTRING) {
if (mb_strlen($string, Smarty::$_CHARSET) > $length) {
$length -= min($length, mb_strlen($etc, Smarty::$_CHARSET));
if (!$break_words && !$middle) {
$string = preg_replace('/\s+?(\S+)?$/' . Smarty::$_UTF8_MODIFIER, '', mb_substr($string, 0, $length + 1, Smarty::$_CHARSET));
- }
+ }
if (!$middle) {
return mb_substr($string, 0, $length, Smarty::$_CHARSET) . $etc;
}
+
return mb_substr($string, 0, $length / 2, Smarty::$_CHARSET) . $etc . mb_substr($string, - $length / 2, $length, Smarty::$_CHARSET);
}
+
return $string;
}
-
+
// no MBString fallback
if (isset($string[$length])) {
$length -= min($length, strlen($etc));
if (!$break_words && !$middle) {
$string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1));
- }
+ }
if (!$middle) {
return substr($string, 0, $length) . $etc;
}
+
return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2);
}
- return $string;
-}
-?> \ No newline at end of file
+ return $string;
+}
diff --git a/include/smarty/libs/plugins/modifiercompiler.cat.php b/include/smarty/libs/plugins/modifiercompiler.cat.php
index 5049c63e5..db9d81fbf 100644
--- a/include/smarty/libs/plugins/modifiercompiler.cat.php
+++ b/include/smarty/libs/plugins/modifiercompiler.cat.php
@@ -2,13 +2,12 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty cat modifier plugin
- *
* Type: modifier<br>
* Name: cat<br>
* Date: Feb 24, 2003<br>
@@ -16,15 +15,15 @@
* Input: string to catenate<br>
* Example: {$var|cat:"foo"}
*
- * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat
- * (Smarty online manual)
+ * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat
+ * (Smarty online manual)
* @author Uwe Tews
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_cat($params, $compiler)
+function smarty_modifiercompiler_cat($params)
{
- return '('.implode(').(', $params).')';
+ return '(' . implode(').(', $params) . ')';
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.count_characters.php b/include/smarty/libs/plugins/modifiercompiler.count_characters.php
index 0f269c9fa..f8463d80a 100644
--- a/include/smarty/libs/plugins/modifiercompiler.count_characters.php
+++ b/include/smarty/libs/plugins/modifiercompiler.count_characters.php
@@ -2,23 +2,24 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty count_characters modifier plugin
- *
* Type: modifier<br>
* Name: count_characteres<br>
* Purpose: count the number of characters in a text
*
- * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
* @author Uwe Tews
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_count_characters($params, $compiler)
+function smarty_modifiercompiler_count_characters($params)
{
if (!isset($params[1]) || $params[1] != 'true') {
return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[0] . ', $tmp)';
@@ -29,5 +30,3 @@ function smarty_modifiercompiler_count_characters($params, $compiler)
// no MBString fallback
return 'strlen(' . $params[0] . ')';
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.count_paragraphs.php b/include/smarty/libs/plugins/modifiercompiler.count_paragraphs.php
index 853f98f46..34f0bbb8a 100644
--- a/include/smarty/libs/plugins/modifiercompiler.count_paragraphs.php
+++ b/include/smarty/libs/plugins/modifiercompiler.count_paragraphs.php
@@ -2,27 +2,26 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty count_paragraphs modifier plugin
- *
* Type: modifier<br>
* Name: count_paragraphs<br>
* Purpose: count the number of paragraphs in a text
*
- * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
+ * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
* count_paragraphs (Smarty online manual)
- * @author Uwe Tews
+ * @author Uwe Tews
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_count_paragraphs($params, $compiler)
+function smarty_modifiercompiler_count_paragraphs($params)
{
// count \r or \n characters
return '(preg_match_all(\'#[\r\n]+#\', ' . $params[0] . ', $tmp)+1)';
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.count_sentences.php b/include/smarty/libs/plugins/modifiercompiler.count_sentences.php
index f8d79b3f2..f1ec56007 100644
--- a/include/smarty/libs/plugins/modifiercompiler.count_sentences.php
+++ b/include/smarty/libs/plugins/modifiercompiler.count_sentences.php
@@ -2,27 +2,26 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty count_sentences modifier plugin
- *
* Type: modifier<br>
* Name: count_sentences
* Purpose: count the number of sentences in a text
*
- * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
+ * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
* count_sentences (Smarty online manual)
- * @author Uwe Tews
+ * @author Uwe Tews
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_count_sentences($params, $compiler)
+function smarty_modifiercompiler_count_sentences($params)
{
// find periods, question marks, exclamation marks with a word before but not after.
return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . Smarty::$_UTF8_MODIFIER . '", ' . $params[0] . ', $tmp)';
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.count_words.php b/include/smarty/libs/plugins/modifiercompiler.count_words.php
index f53443e24..8b4330f1e 100644
--- a/include/smarty/libs/plugins/modifiercompiler.count_words.php
+++ b/include/smarty/libs/plugins/modifiercompiler.count_words.php
@@ -2,23 +2,24 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty count_words modifier plugin
- *
* Type: modifier<br>
* Name: count_words<br>
* Purpose: count the number of words in a text
*
- * @link http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual)
* @author Uwe Tews
+ *
* @param array $params parameters
+ *
* @return string with compiled code
-*/
-function smarty_modifiercompiler_count_words($params, $compiler)
+ */
+function smarty_modifiercompiler_count_words($params)
{
if (Smarty::$_MBSTRING) {
// return 'preg_match_all(\'#[\w\pL]+#' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)';
@@ -28,5 +29,3 @@ function smarty_modifiercompiler_count_words($params, $compiler)
// no MBString fallback
return 'str_word_count(' . $params[0] . ')';
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.default.php b/include/smarty/libs/plugins/modifiercompiler.default.php
index 3554964e4..fe777623e 100644
--- a/include/smarty/libs/plugins/modifiercompiler.default.php
+++ b/include/smarty/libs/plugins/modifiercompiler.default.php
@@ -2,34 +2,34 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty default modifier plugin
- *
* Type: modifier<br>
* Name: default<br>
* Purpose: designate default value for empty variables
*
- * @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual)
* @author Uwe Tews
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_default ($params, $compiler)
+function smarty_modifiercompiler_default($params)
{
$output = $params[0];
if (!isset($params[1])) {
$params[1] = "''";
}
-
+
array_shift($params);
foreach ($params as $param) {
$output = '(($tmp = @' . $output . ')===null||$tmp===\'\' ? ' . $param . ' : $tmp)';
}
+
return $output;
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.escape.php b/include/smarty/libs/plugins/modifiercompiler.escape.php
index d38d12975..0b29220ef 100644
--- a/include/smarty/libs/plugins/modifiercompiler.escape.php
+++ b/include/smarty/libs/plugins/modifiercompiler.escape.php
@@ -2,25 +2,27 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* @ignore
*/
-require_once( SMARTY_PLUGINS_DIR .'shared.literal_compiler_param.php' );
+require_once(SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php');
/**
* Smarty escape modifier plugin
- *
* Type: modifier<br>
* Name: escape<br>
* Purpose: escape string for output
*
- * @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual)
+ * @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual)
* @author Rodney Rehm
+ *
* @param array $params parameters
+ * @param $compiler
+ *
* @return string with compiled code
*/
function smarty_modifiercompiler_escape($params, $compiler)
@@ -29,7 +31,7 @@ function smarty_modifiercompiler_escape($params, $compiler)
if ($_double_encode === null) {
$_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');
}
-
+
try {
$esc_type = smarty_literal_compiler_param($params, 1, 'html');
$char_set = smarty_literal_compiler_param($params, 2, Smarty::$_CHARSET);
@@ -43,13 +45,13 @@ function smarty_modifiercompiler_escape($params, $compiler)
case 'html':
if ($_double_encode) {
return 'htmlspecialchars('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ', '
- . var_export($double_encode, true) . ')';
- } else if ($double_encode) {
+ . $params[0] . ', ENT_QUOTES, '
+ . var_export($char_set, true) . ', '
+ . var_export($double_encode, true) . ')';
+ } elseif ($double_encode) {
return 'htmlspecialchars('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ')';
+ . $params[0] . ', ENT_QUOTES, '
+ . var_export($char_set, true) . ')';
} else {
// fall back to modifier.escape.php
}
@@ -59,18 +61,18 @@ function smarty_modifiercompiler_escape($params, $compiler)
if ($_double_encode) {
// php >=5.2.3 - go native
return 'mb_convert_encoding(htmlspecialchars('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ', '
- . var_export($double_encode, true)
- . '), "HTML-ENTITIES", '
- . var_export($char_set, true) . ')';
- } else if ($double_encode) {
+ . $params[0] . ', ENT_QUOTES, '
+ . var_export($char_set, true) . ', '
+ . var_export($double_encode, true)
+ . '), "HTML-ENTITIES", '
+ . var_export($char_set, true) . ')';
+ } elseif ($double_encode) {
// php <5.2.3 - only handle double encoding
return 'mb_convert_encoding(htmlspecialchars('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true)
- . '), "HTML-ENTITIES", '
- . var_export($char_set, true) . ')';
+ . $params[0] . ', ENT_QUOTES, '
+ . var_export($char_set, true)
+ . '), "HTML-ENTITIES", '
+ . var_export($char_set, true) . ')';
} else {
// fall back to modifier.escape.php
}
@@ -80,14 +82,14 @@ function smarty_modifiercompiler_escape($params, $compiler)
if ($_double_encode) {
// php >=5.2.3 - go native
return 'htmlentities('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ', '
- . var_export($double_encode, true) . ')';
- } else if ($double_encode) {
+ . $params[0] . ', ENT_QUOTES, '
+ . var_export($char_set, true) . ', '
+ . var_export($double_encode, true) . ')';
+ } elseif ($double_encode) {
// php <5.2.3 - only handle double encoding
return 'htmlentities('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ')';
+ . $params[0] . ', ENT_QUOTES, '
+ . var_export($char_set, true) . ')';
} else {
// fall back to modifier.escape.php
}
@@ -105,21 +107,20 @@ function smarty_modifiercompiler_escape($params, $compiler)
case 'javascript':
// escape quotes and backslashes, newlines, etc.
return 'strtr(' . $params[0] . ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/" ))';
-
}
- } catch(SmartyException $e) {
+ }
+ catch (SmartyException $e) {
// pass through to regular plugin fallback
}
// could not optimize |escape call, so fallback to regular plugin
- if ($compiler->tag_nocache | $compiler->nocache) {
- $compiler->template->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php';
- $compiler->template->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape';
+ if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
+ $compiler->parent_compiler->template->compiled->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php';
+ $compiler->parent_compiler->template->compiled->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape';
} else {
- $compiler->template->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php';
- $compiler->template->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape';
+ $compiler->parent_compiler->template->compiled->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php';
+ $compiler->parent_compiler->template->compiled->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape';
}
- return 'smarty_modifier_escape(' . join( ', ', $params ) . ')';
-}
-?> \ No newline at end of file
+ return 'smarty_modifier_escape(' . join(', ', $params) . ')';
+}
diff --git a/include/smarty/libs/plugins/modifiercompiler.from_charset.php b/include/smarty/libs/plugins/modifiercompiler.from_charset.php
index 5d6b7889a..dab43e9c3 100644
--- a/include/smarty/libs/plugins/modifiercompiler.from_charset.php
+++ b/include/smarty/libs/plugins/modifiercompiler.from_charset.php
@@ -2,22 +2,23 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty from_charset modifier plugin
- *
* Type: modifier<br>
* Name: from_charset<br>
* Purpose: convert character encoding from $charset to internal encoding
*
* @author Rodney Rehm
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_from_charset($params, $compiler)
+function smarty_modifiercompiler_from_charset($params)
{
if (!Smarty::$_MBSTRING) {
// FIXME: (rodneyrehm) shouldn't this throw an error?
@@ -30,5 +31,3 @@ function smarty_modifiercompiler_from_charset($params, $compiler)
return 'mb_convert_encoding(' . $params[0] . ', "' . addslashes(Smarty::$_CHARSET) . '", ' . $params[1] . ')';
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.indent.php b/include/smarty/libs/plugins/modifiercompiler.indent.php
index 26094b7ca..e3ca20821 100644
--- a/include/smarty/libs/plugins/modifiercompiler.indent.php
+++ b/include/smarty/libs/plugins/modifiercompiler.indent.php
@@ -1,24 +1,26 @@
<?php
/**
* Smarty plugin
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty indent modifier plugin
- *
* Type: modifier<br>
* Name: indent<br>
* Purpose: indent lines of text
*
- * @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual)
* @author Uwe Tews
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_indent($params, $compiler)
+function smarty_modifiercompiler_indent($params)
{
if (!isset($params[1])) {
$params[1] = 4;
@@ -26,7 +28,6 @@ function smarty_modifiercompiler_indent($params, $compiler)
if (!isset($params[2])) {
$params[2] = "' '";
}
+
return 'preg_replace(\'!^!m\',str_repeat(' . $params[2] . ',' . $params[1] . '),' . $params[0] . ')';
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.lower.php b/include/smarty/libs/plugins/modifiercompiler.lower.php
index bc3abd727..1d255f371 100644
--- a/include/smarty/libs/plugins/modifiercompiler.lower.php
+++ b/include/smarty/libs/plugins/modifiercompiler.lower.php
@@ -1,31 +1,31 @@
<?php
/**
* Smarty plugin
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty lower modifier plugin
- *
* Type: modifier<br>
* Name: lower<br>
* Purpose: convert string to lowercase
*
- * @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com>
* @author Uwe Tews
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_lower($params, $compiler)
+function smarty_modifiercompiler_lower($params)
{
if (Smarty::$_MBSTRING) {
- return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')' ;
+ return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
}
// no MBString fallback
return 'strtolower(' . $params[0] . ')';
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.noprint.php b/include/smarty/libs/plugins/modifiercompiler.noprint.php
index d7433e985..4906908b4 100644
--- a/include/smarty/libs/plugins/modifiercompiler.noprint.php
+++ b/include/smarty/libs/plugins/modifiercompiler.noprint.php
@@ -2,24 +2,20 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty noprint modifier plugin
- *
* Type: modifier<br>
* Name: noprint<br>
* Purpose: return an empty string
*
* @author Uwe Tews
- * @param array $params parameters
* @return string with compiled code
*/
-function smarty_modifiercompiler_noprint($params, $compiler)
+function smarty_modifiercompiler_noprint()
{
return "''";
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.string_format.php b/include/smarty/libs/plugins/modifiercompiler.string_format.php
index 5a8d43578..71cdf2819 100644
--- a/include/smarty/libs/plugins/modifiercompiler.string_format.php
+++ b/include/smarty/libs/plugins/modifiercompiler.string_format.php
@@ -2,25 +2,24 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty string_format modifier plugin
- *
* Type: modifier<br>
* Name: string_format<br>
* Purpose: format strings via sprintf
*
- * @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual)
* @author Uwe Tews
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_string_format($params, $compiler)
+function smarty_modifiercompiler_string_format($params)
{
return 'sprintf(' . $params[1] . ',' . $params[0] . ')';
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.strip.php b/include/smarty/libs/plugins/modifiercompiler.strip.php
index 8d15ca434..fcd6cbaea 100644
--- a/include/smarty/libs/plugins/modifiercompiler.strip.php
+++ b/include/smarty/libs/plugins/modifiercompiler.strip.php
@@ -2,13 +2,12 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty strip modifier plugin
- *
* Type: modifier<br>
* Name: strip<br>
* Purpose: Replace all repeated spaces, newlines, tabs
@@ -16,18 +15,19 @@
* Example: {$var|strip} {$var|strip:"&nbsp;"}<br>
* Date: September 25th, 2002
*
- * @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual)
* @author Uwe Tews
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_strip($params, $compiler)
+function smarty_modifiercompiler_strip($params)
{
if (!isset($params[1])) {
$params[1] = "' '";
}
+
return "preg_replace('!\s+!" . Smarty::$_UTF8_MODIFIER . "', {$params[1]},{$params[0]})";
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.strip_tags.php b/include/smarty/libs/plugins/modifiercompiler.strip_tags.php
index 9ba71e3d9..da5d364cb 100644
--- a/include/smarty/libs/plugins/modifiercompiler.strip_tags.php
+++ b/include/smarty/libs/plugins/modifiercompiler.strip_tags.php
@@ -2,32 +2,28 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty strip_tags modifier plugin
- *
* Type: modifier<br>
* Name: strip_tags<br>
* Purpose: strip html tags from text
*
- * @link http://www.smarty.net/manual/en/language.modifier.strip.tags.php strip_tags (Smarty online manual)
+ * @link http://www.smarty.net/docs/en/language.modifier.strip.tags.tpl strip_tags (Smarty online manual)
* @author Uwe Tews
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_strip_tags($params, $compiler)
+function smarty_modifiercompiler_strip_tags($params)
{
- if (!isset($params[1])) {
- $params[1] = true;
- }
- if ($params[1] === true) {
+ if (!isset($params[1]) || $params[1] === true || trim($params[1], '"') == 'true') {
return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})";
} else {
return 'strip_tags(' . $params[0] . ')';
}
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.to_charset.php b/include/smarty/libs/plugins/modifiercompiler.to_charset.php
index d6c0f296b..9122d8bbb 100644
--- a/include/smarty/libs/plugins/modifiercompiler.to_charset.php
+++ b/include/smarty/libs/plugins/modifiercompiler.to_charset.php
@@ -2,22 +2,23 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty to_charset modifier plugin
- *
* Type: modifier<br>
* Name: to_charset<br>
* Purpose: convert character encoding from internal encoding to $charset
*
* @author Rodney Rehm
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_to_charset($params, $compiler)
+function smarty_modifiercompiler_to_charset($params)
{
if (!Smarty::$_MBSTRING) {
// FIXME: (rodneyrehm) shouldn't this throw an error?
@@ -30,5 +31,3 @@ function smarty_modifiercompiler_to_charset($params, $compiler)
return 'mb_convert_encoding(' . $params[0] . ', ' . $params[1] . ', "' . addslashes(Smarty::$_CHARSET) . '")';
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.unescape.php b/include/smarty/libs/plugins/modifiercompiler.unescape.php
index 61354926f..3b17ea2e1 100644
--- a/include/smarty/libs/plugins/modifiercompiler.unescape.php
+++ b/include/smarty/libs/plugins/modifiercompiler.unescape.php
@@ -2,22 +2,23 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty unescape modifier plugin
- *
* Type: modifier<br>
* Name: unescape<br>
* Purpose: unescape html entities
*
* @author Rodney Rehm
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_unescape($params, $compiler)
+function smarty_modifiercompiler_unescape($params)
{
if (!isset($params[1])) {
$params[1] = 'html';
@@ -47,5 +48,3 @@ function smarty_modifiercompiler_unescape($params, $compiler)
return $params[0];
}
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/modifiercompiler.upper.php b/include/smarty/libs/plugins/modifiercompiler.upper.php
index 8611fa870..52ca4e8ff 100644
--- a/include/smarty/libs/plugins/modifiercompiler.upper.php
+++ b/include/smarty/libs/plugins/modifiercompiler.upper.php
@@ -2,29 +2,28 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty upper modifier plugin
- *
* Type: modifier<br>
* Name: lower<br>
* Purpose: convert string to uppercase
- *
- * @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual)
- * @author Uwe Tews
+ *
+ * @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual)
+ * @author Uwe Tews
+ *
* @param array $params parameters
+ *
* @return string with compiled code
*/
-function smarty_modifiercompiler_upper($params, $compiler)
+function smarty_modifiercompiler_upper($params)
{
if (Smarty::$_MBSTRING) {
- return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')' ;
+ return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
}
// no MBString fallback
return 'strtoupper(' . $params[0] . ')';
-}
-
-?> \ No newline at end of file
+}
diff --git a/include/smarty/libs/plugins/modifiercompiler.wordwrap.php b/include/smarty/libs/plugins/modifiercompiler.wordwrap.php
index 8b524f32c..6bb63247d 100644
--- a/include/smarty/libs/plugins/modifiercompiler.wordwrap.php
+++ b/include/smarty/libs/plugins/modifiercompiler.wordwrap.php
@@ -2,45 +2,46 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifierCompiler
*/
/**
* Smarty wordwrap modifier plugin
- *
* Type: modifier<br>
* Name: wordwrap<br>
* Purpose: wrap a string of text at a given length
- *
- * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual)
- * @author Uwe Tews
+ *
+ * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual)
+ * @author Uwe Tews
+ *
* @param array $params parameters
+ * @param $compiler
+ *
* @return string with compiled code
*/
function smarty_modifiercompiler_wordwrap($params, $compiler)
{
if (!isset($params[1])) {
$params[1] = 80;
- }
+ }
if (!isset($params[2])) {
$params[2] = '"\n"';
- }
+ }
if (!isset($params[3])) {
$params[3] = 'false';
- }
+ }
$function = 'wordwrap';
if (Smarty::$_MBSTRING) {
- if ($compiler->tag_nocache | $compiler->nocache) {
- $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR .'shared.mb_wordwrap.php';
+ if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
+ $compiler->parent_compiler->template->compiled->required_plugins['nocache']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php';
$compiler->template->required_plugins['nocache']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';
} else {
- $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR .'shared.mb_wordwrap.php';
- $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';
+ $compiler->parent_compiler->template->compiled->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php';
+ $compiler->parent_compiler->template->compiled->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';
}
$function = 'smarty_mb_wordwrap';
}
- return $function . '(' . $params[0] . ',' . $params[1] . ',' . $params[2] . ',' . $params[3] . ')';
-}
-?> \ No newline at end of file
+ return $function . '(' . $params[0] . ',' . $params[1] . ',' . $params[2] . ',' . $params[3] . ')';
+}
diff --git a/include/smarty/libs/plugins/outputfilter.trimwhitespace.php b/include/smarty/libs/plugins/outputfilter.trimwhitespace.php
index 87cf8c781..ad35d11a2 100644
--- a/include/smarty/libs/plugins/outputfilter.trimwhitespace.php
+++ b/include/smarty/libs/plugins/outputfilter.trimwhitespace.php
@@ -2,22 +2,22 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFilter
*/
/**
* Smarty trimwhitespace outputfilter plugin
- *
* Trim unnecessary whitespace from HTML markup.
*
* @author Rodney Rehm
- * @param string $source input string
- * @param Smarty_Internal_Template $smarty Smarty object
+ *
+ * @param string $source input string
+ *
* @return string filtered output
- * @todo substr_replace() is not overloaded by mbstring.func_overload - so this function might fail!
+ * @todo substr_replace() is not overloaded by mbstring.func_overload - so this function might fail!
*/
-function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $smarty)
+function smarty_outputfilter_trimwhitespace($source)
{
$store = array();
$_store = 0;
@@ -35,17 +35,17 @@ function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $s
$source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length);
$_offset += $_length - strlen($replace);
- $_store++;
+ $_store ++;
}
}
// Strip all HTML-Comments
// yes, even the ones in <script> - see http://stackoverflow.com/a/808850/515124
- $source = preg_replace( '#<!--.*?-->#ms', '', $source );
+ $source = preg_replace('#<!--.*?-->#ms', '', $source);
// capture html elements not to be messed with
$_offset = 0;
- if (preg_match_all('#<(script|pre|textarea)[^>]*>.*?</\\1>#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
+ if (preg_match_all('#(<script[^>]*>.*?</script[^>]*>)|(<textarea[^>]*>.*?</textarea[^>]*>)|(<pre[^>]*>.*?</pre[^>]*>)#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
foreach ($matches as $match) {
$store[] = $match[0][0];
$_length = strlen($match[0][0]);
@@ -53,42 +53,38 @@ function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $s
$source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length);
$_offset += $_length - strlen($replace);
- $_store++;
+ $_store ++;
}
}
$expressions = array(
// replace multiple spaces between tags by a single space
// can't remove them entirely, becaue that might break poorly implemented CSS display:inline-block elements
- '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',
+ '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',
// remove spaces between attributes (but not in attribute values!)
- '#(([a-z0-9]\s*=\s*(["\'])[^\3]*?\3)|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \4',
+ '#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5',
// note: for some very weird reason trim() seems to remove spaces inside attributes.
// maybe a \0 byte or something is interfering?
- '#^\s+<#Ss' => '<',
- '#>\s+$#Ss' => '>',
+ '#^\s+<#Ss' => '<',
+ '#>\s+$#Ss' => '>',
);
- $source = preg_replace( array_keys($expressions), array_values($expressions), $source );
+ $source = preg_replace(array_keys($expressions), array_values($expressions), $source);
// note: for some very weird reason trim() seems to remove spaces inside attributes.
// maybe a \0 byte or something is interfering?
// $source = trim( $source );
- // capture html elements not to be messed with
$_offset = 0;
if (preg_match_all('#@!@SMARTY:([0-9]+):SMARTY@!@#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
foreach ($matches as $match) {
- $store[] = $match[0][0];
$_length = strlen($match[0][0]);
- $replace = array_shift($store);
+ $replace = $store[$match[1][0]];
$source = substr_replace($source, $replace, $match[0][1] + $_offset, $_length);
$_offset += strlen($replace) - $_length;
- $_store++;
+ $_store ++;
}
}
return $source;
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/shared.escape_special_chars.php b/include/smarty/libs/plugins/shared.escape_special_chars.php
index d2609b674..d3bd756b1 100644
--- a/include/smarty/libs/plugins/shared.escape_special_chars.php
+++ b/include/smarty/libs/plugins/shared.escape_special_chars.php
@@ -2,20 +2,21 @@
/**
* Smarty shared plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsShared
*/
if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
/**
* escape_special_chars common function
- *
* Function: smarty_function_escape_special_chars<br>
* Purpose: used by other smarty functions to escape
* special chars except for already escaped ones
*
* @author Monte Ohrt <monte at ohrt dot com>
- * @param string $string text that should by escaped
+ *
+ * @param string $string text that should by escaped
+ *
* @return string
*/
function smarty_function_escape_special_chars($string)
@@ -23,18 +24,20 @@ if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
if (!is_array($string)) {
$string = htmlspecialchars($string, ENT_COMPAT, Smarty::$_CHARSET, false);
}
+
return $string;
- }
-} else {
+ }
+} else {
/**
* escape_special_chars common function
- *
* Function: smarty_function_escape_special_chars<br>
* Purpose: used by other smarty functions to escape
* special chars except for already escaped ones
*
* @author Monte Ohrt <monte at ohrt dot com>
- * @param string $string text that should by escaped
+ *
+ * @param string $string text that should by escaped
+ *
* @return string
*/
function smarty_function_escape_special_chars($string)
@@ -42,10 +45,9 @@ if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
if (!is_array($string)) {
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlspecialchars($string);
- $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+ $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
}
- return $string;
- }
-}
-?> \ No newline at end of file
+ return $string;
+ }
+}
diff --git a/include/smarty/libs/plugins/shared.literal_compiler_param.php b/include/smarty/libs/plugins/shared.literal_compiler_param.php
index dbcd9374c..47d728a76 100644
--- a/include/smarty/libs/plugins/shared.literal_compiler_param.php
+++ b/include/smarty/libs/plugins/shared.literal_compiler_param.php
@@ -2,7 +2,7 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsShared
*/
@@ -12,22 +12,24 @@
* @param array $params parameter array as given to the compiler function
* @param integer $index array index of the parameter to convert
* @param mixed $default value to be returned if the parameter is not present
+ *
* @return mixed evaluated value of parameter or $default
* @throws SmartyException if parameter is not a literal (but an expression, variable, …)
* @author Rodney Rehm
*/
-function smarty_literal_compiler_param($params, $index, $default=null)
+function smarty_literal_compiler_param($params, $index, $default = null)
{
// not set, go default
if (!isset($params[$index])) {
return $default;
}
// test if param is a literal
- if (!preg_match('/^([\'"]?)[a-zA-Z0-9]+(\\1)$/', $params[$index])) {
+ if (!preg_match('/^([\'"]?)[a-zA-Z0-9-]+(\\1)$/', $params[$index])) {
throw new SmartyException('$param[' . $index . '] is not a literal and is thus not evaluatable at compile time');
}
$t = null;
eval("\$t = " . $params[$index] . ";");
+
return $t;
}
diff --git a/include/smarty/libs/plugins/shared.make_timestamp.php b/include/smarty/libs/plugins/shared.make_timestamp.php
index 5d7c97e91..f87d40c7e 100644
--- a/include/smarty/libs/plugins/shared.make_timestamp.php
+++ b/include/smarty/libs/plugins/shared.make_timestamp.php
@@ -2,7 +2,7 @@
/**
* Smarty shared plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsShared
*/
@@ -11,7 +11,9 @@
* Purpose: used by other smarty functions to make a timestamp from a string.
*
* @author Monte Ohrt <monte at ohrt dot com>
- * @param DateTime|int|string $string date object, timestamp or string that can be converted using strtotime()
+ *
+ * @param DateTime|int|string $string date object, timestamp or string that can be converted using strtotime()
+ *
* @return int
*/
function smarty_make_timestamp($string)
@@ -19,24 +21,23 @@ function smarty_make_timestamp($string)
if (empty($string)) {
// use "now":
return time();
- } elseif ($string instanceof DateTime) {
- return $string->getTimestamp();
+ } elseif ($string instanceof DateTime || (interface_exists('DateTimeInterface', false) && $string instanceof DateTimeInterface)) {
+ return (int) $string->format('U'); // PHP 5.2 BC
} elseif (strlen($string) == 14 && ctype_digit($string)) {
// it is mysql timestamp format of YYYYMMDDHHMMSS?
- return mktime(substr($string, 8, 2),substr($string, 10, 2),substr($string, 12, 2),
- substr($string, 4, 2),substr($string, 6, 2),substr($string, 0, 4));
+ return mktime(substr($string, 8, 2), substr($string, 10, 2), substr($string, 12, 2),
+ substr($string, 4, 2), substr($string, 6, 2), substr($string, 0, 4));
} elseif (is_numeric($string)) {
// it is a numeric string, we handle it as timestamp
return (int) $string;
} else {
// strtotime should handle it
$time = strtotime($string);
- if ($time == -1 || $time === false) {
+ if ($time == - 1 || $time === false) {
// strtotime() was not able to parse $string, use "now":
return time();
}
+
return $time;
}
}
-
-?>
diff --git a/include/smarty/libs/plugins/shared.mb_str_replace.php b/include/smarty/libs/plugins/shared.mb_str_replace.php
index ecafeb74a..a5682ed30 100644
--- a/include/smarty/libs/plugins/shared.mb_str_replace.php
+++ b/include/smarty/libs/plugins/shared.mb_str_replace.php
@@ -2,7 +2,7 @@
/**
* Smarty shared plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsShared
*/
if (!function_exists('smarty_mb_str_replace')) {
@@ -10,14 +10,15 @@ if (!function_exists('smarty_mb_str_replace')) {
/**
* Multibyte string replace
*
- * @param string $search the string to be searched
- * @param string $replace the replacement string
- * @param string $subject the source string
- * @param int &$count number of matches found
+ * @param string $search the string to be searched
+ * @param string $replace the replacement string
+ * @param string $subject the source string
+ * @param int &$count number of matches found
+ *
* @return string replaced string
* @author Rodney Rehm
*/
- function smarty_mb_str_replace($search, $replace, $subject, &$count=0)
+ function smarty_mb_str_replace($search, $replace, $subject, &$count = 0)
{
if (!is_array($search) && is_array($replace)) {
return false;
@@ -25,7 +26,7 @@ if (!function_exists('smarty_mb_str_replace')) {
if (is_array($subject)) {
// call mb_replace for each single string in $subject
foreach ($subject as &$string) {
- $string = &smarty_mb_str_replace($search, $replace, $string, $c);
+ $string = & smarty_mb_str_replace($search, $replace, $string, $c);
$count += $c;
}
} elseif (is_array($search)) {
@@ -36,7 +37,7 @@ if (!function_exists('smarty_mb_str_replace')) {
}
} else {
$n = max(count($search), count($replace));
- while ($n--) {
+ while ($n --) {
$subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c);
$count += $c;
next($search);
@@ -48,8 +49,7 @@ if (!function_exists('smarty_mb_str_replace')) {
$count = count($parts) - 1;
$subject = implode($replace, $parts);
}
+
return $subject;
}
-
}
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/shared.mb_unicode.php b/include/smarty/libs/plugins/shared.mb_unicode.php
index e7f839ec8..0f790b56a 100644
--- a/include/smarty/libs/plugins/shared.mb_unicode.php
+++ b/include/smarty/libs/plugins/shared.mb_unicode.php
@@ -2,47 +2,53 @@
/**
* Smarty shared plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsShared
*/
/**
* convert characters to their decimal unicode equivalents
*
- * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
+ * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
+ *
* @param string $string characters to calculate unicode of
* @param string $encoding encoding of $string, if null mb_internal_encoding() is used
+ *
* @return array sequence of unicodes
* @author Rodney Rehm
*/
-function smarty_mb_to_unicode($string, $encoding=null) {
+function smarty_mb_to_unicode($string, $encoding = null)
+{
if ($encoding) {
$expanded = mb_convert_encoding($string, "UTF-32BE", $encoding);
} else {
$expanded = mb_convert_encoding($string, "UTF-32BE");
}
+
return unpack("N*", $expanded);
}
/**
* convert unicodes to the character of given encoding
*
- * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
+ * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
+ *
* @param integer|array $unicode single unicode or list of unicodes to convert
* @param string $encoding encoding of returned string, if null mb_internal_encoding() is used
+ *
* @return string unicode as character sequence in given $encoding
* @author Rodney Rehm
*/
-function smarty_mb_from_unicode($unicode, $encoding=null) {
+function smarty_mb_from_unicode($unicode, $encoding = null)
+{
$t = '';
if (!$encoding) {
$encoding = mb_internal_encoding();
}
- foreach((array) $unicode as $utf32be) {
+ foreach ((array) $unicode as $utf32be) {
$character = pack("N*", $utf32be);
$t .= mb_convert_encoding($character, $encoding, "UTF-32BE");
}
+
return $t;
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/shared.mb_wordwrap.php b/include/smarty/libs/plugins/shared.mb_wordwrap.php
index ba3498c70..31f4acf01 100644
--- a/include/smarty/libs/plugins/shared.mb_wordwrap.php
+++ b/include/smarty/libs/plugins/shared.mb_wordwrap.php
@@ -2,44 +2,40 @@
/**
* Smarty shared plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsShared
*/
-if(!function_exists('smarty_mb_wordwrap')) {
+if (!function_exists('smarty_mb_wordwrap')) {
/**
* Wrap a string to a given number of characters
*
- * @link http://php.net/manual/en/function.wordwrap.php for similarity
- * @param string $str the string to wrap
- * @param int $width the width of the output
- * @param string $break the character used to break the line
- * @param boolean $cut ignored parameter, just for the sake of
- * @return string wrapped string
+ * @link http://php.net/manual/en/function.wordwrap.php for similarity
+ *
+ * @param string $str the string to wrap
+ * @param int $width the width of the output
+ * @param string $break the character used to break the line
+ * @param boolean $cut ignored parameter, just for the sake of
+ *
+ * @return string wrapped string
* @author Rodney Rehm
*/
- function smarty_mb_wordwrap($str, $width=75, $break="\n", $cut=false)
+ function smarty_mb_wordwrap($str, $width = 75, $break = "\n", $cut = false)
{
// break words into tokens using white space as a delimiter
- $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
+ $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
$length = 0;
$t = '';
$_previous = false;
+ $_space = false;
foreach ($tokens as $_token) {
$token_length = mb_strlen($_token, Smarty::$_CHARSET);
$_tokens = array($_token);
if ($token_length > $width) {
- // remove last space
- $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
- $_previous = false;
- $length = 0;
-
- if ($cut) {
- $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
- // broken words go on a new line
- $t .= $break;
+ if ($cut) {
+ $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
}
}
@@ -50,27 +46,23 @@ if(!function_exists('smarty_mb_wordwrap')) {
if ($length > $width) {
// remove space before inserted break
- if ($_previous && $token_length < $width) {
- $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
+ if ($_previous) {
+ $t = mb_substr($t, 0, - 1, Smarty::$_CHARSET);
}
- // add the break before the token
- $t .= $break;
- $length = $token_length;
-
- // skip space after inserting a break
- if ($_space) {
- $length = 0;
- continue;
+ if (!$_space) {
+ // add the break before the token
+ if (!empty($t)) {
+ $t .= $break;
+ }
+ $length = $token_length;
}
- } else if ($token == "\n") {
+ } elseif ($token == "\n") {
// hard break must reset counters
$_previous = 0;
$length = 0;
- } else {
- // remember if we had a space or not
- $_previous = $_space;
}
+ $_previous = $_space;
// add the token
$t .= $token;
}
@@ -78,6 +70,4 @@ if(!function_exists('smarty_mb_wordwrap')) {
return $t;
}
-
}
-?> \ No newline at end of file
diff --git a/include/smarty/libs/plugins/variablefilter.htmlspecialchars.php b/include/smarty/libs/plugins/variablefilter.htmlspecialchars.php
index aff711e48..aecd1e7e7 100644
--- a/include/smarty/libs/plugins/variablefilter.htmlspecialchars.php
+++ b/include/smarty/libs/plugins/variablefilter.htmlspecialchars.php
@@ -2,20 +2,18 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFilter
*/
/**
* Smarty htmlspecialchars variablefilter plugin
*
- * @param string $source input string
- * @param Smarty_Internal_Template $smarty Smarty object
+ * @param string $source input string
+ *
* @return string filtered output
*/
-function smarty_variablefilter_htmlspecialchars($source, $smarty)
+function smarty_variablefilter_htmlspecialchars($source)
{
return htmlspecialchars($source, ENT_QUOTES, Smarty::$_CHARSET);
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_cacheresource.php b/include/smarty/libs/sysplugins/smarty_cacheresource.php
index ca18add5e..14ab62fd9 100644
--- a/include/smarty/libs/sysplugins/smarty_cacheresource.php
+++ b/include/smarty/libs/sysplugins/smarty_cacheresource.php
@@ -1,106 +1,115 @@
<?php
/**
-* Smarty Internal Plugin
-*
-* @package Smarty
-* @subpackage Cacher
-*/
+ * Smarty Internal Plugin
+ *
+ * @package Smarty
+ * @subpackage Cacher
+ */
/**
-* Cache Handler API
-*
-* @package Smarty
-* @subpackage Cacher
-* @author Rodney Rehm
-*/
-abstract class Smarty_CacheResource {
- /**
- * cache for Smarty_CacheResource instances
- * @var array
- */
- public static $resources = array();
-
- /**
- * resource types provided by the core
- * @var array
- */
- protected static $sysplugins = array(
- 'file' => true,
- );
-
- /**
- * populate Cached Object with meta data from Resource
- *
- * @param Smarty_Template_Cached $cached cached object
- * @param Smarty_Internal_Template $_template template object
- * @return void
- */
- public abstract function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template);
-
- /**
- * populate Cached Object with timestamp and exists from Resource
- *
- * @param Smarty_Template_Cached $source cached object
- * @return void
- */
- public abstract function populateTimestamp(Smarty_Template_Cached $cached);
-
- /**
- * Read the cached template and process header
- *
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if the cached content does not exist
- */
- public abstract function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null);
-
- /**
- * Write the rendered template output to cache
- *
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content to cache
- * @return boolean success
- */
- public abstract function writeCachedContent(Smarty_Internal_Template $_template, $content);
-
- /**
- * Return cached content
- *
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content of cache
- */
+ * Cache Handler API
+ *
+ * @package Smarty
+ * @subpackage Cacher
+ * @author Rodney Rehm
+ */
+abstract class Smarty_CacheResource
+{
+ /**
+ * resource types provided by the core
+ *
+ * @var array
+ */
+ protected static $sysplugins = array('file' => 'smarty_internal_cacheresource_file.php',);
+
+ /**
+ * populate Cached Object with meta data from Resource
+ *
+ * @param Smarty_Template_Cached $cached cached object
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return void
+ */
+ abstract public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template);
+
+ /**
+ * populate Cached Object with timestamp and exists from Resource
+ *
+ * @param Smarty_Template_Cached $cached
+ *
+ * @return void
+ */
+ abstract public function populateTimestamp(Smarty_Template_Cached $cached);
+
+ /**
+ * Read the cached template and process header
+ *
+ * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Cached $cached cached object
+ * @param bool $update flag if called because cache update
+ *
+ * @return bool true or false if the cached content does not exist
+ */
+ abstract public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null, $update = false);
+
+ /**
+ * Write the rendered template output to cache
+ *
+ * @param Smarty_Internal_Template $_template template object
+ * @param string $content content to cache
+ *
+ * @return boolean success
+ */
+ abstract public function writeCachedContent(Smarty_Internal_Template $_template, $content);
+
+ /**
+ * Return cached content
+ *
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return null|string
+ */
public function getCachedContent(Smarty_Internal_Template $_template)
{
if ($_template->cached->handler->process($_template)) {
ob_start();
- $_template->properties['unifunc']($_template);
+ $unifunc = $_template->cached->unifunc;
+ $unifunc($_template);
return ob_get_clean();
}
+
return null;
}
/**
- * Empty cache
- *
- * @param Smarty $smarty Smarty object
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
- * @return integer number of cache files deleted
- */
- public abstract function clearAll(Smarty $smarty, $exp_time=null);
-
- /**
- * Empty cache for a specific template
- *
- * @param Smarty $smarty Smarty object
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
- * @return integer number of cache files deleted
- */
- public abstract function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time);
-
-
+ * Empty cache
+ *
+ * @param Smarty $smarty Smarty object
+ * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
+ * @return integer number of cache files deleted
+ */
+ abstract public function clearAll(Smarty $smarty, $exp_time = null);
+
+ /**
+ * Empty cache for a specific template
+ *
+ * @param Smarty $smarty Smarty object
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
+ * @return integer number of cache files deleted
+ */
+ abstract public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time);
+
+ /**
+ * @param Smarty $smarty
+ * @param Smarty_Template_Cached $cached
+ *
+ * @return bool|null
+ */
public function locked(Smarty $smarty, Smarty_Template_Cached $cached)
{
// theoretically locking_timeout should be checked against time_limit (max_execution_time)
@@ -114,35 +123,61 @@ abstract class Smarty_CacheResource {
}
sleep(1);
}
+
return $hadLock;
}
+ /**
+ * Check is cache is locked for this template
+ *
+ * @param Smarty $smarty
+ * @param Smarty_Template_Cached $cached
+ *
+ * @return bool
+ */
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
// check if lock exists
return false;
}
+ /**
+ * Lock cache for this template
+ *
+ * @param Smarty $smarty
+ * @param Smarty_Template_Cached $cached
+ *
+ * @return bool
+ */
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
// create lock
return true;
}
+ /**
+ * Unlock cache for this template
+ *
+ * @param Smarty $smarty
+ * @param Smarty_Template_Cached $cached
+ *
+ * @return bool
+ */
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
// release lock
return true;
}
-
/**
- * Load Cache Resource Handler
- *
- * @param Smarty $smarty Smarty object
- * @param string $type name of the cache resource
- * @return Smarty_CacheResource Cache Resource Handler
- */
+ * Load Cache Resource Handler
+ *
+ * @param Smarty $smarty Smarty object
+ * @param string $type name of the cache resource
+ *
+ * @throws SmartyException
+ * @return Smarty_CacheResource Cache Resource Handler
+ */
public static function load(Smarty $smarty, $type = null)
{
if (!isset($type)) {
@@ -150,232 +185,39 @@ abstract class Smarty_CacheResource {
}
// try smarty's cache
- if (isset($smarty->_cacheresource_handlers[$type])) {
- return $smarty->_cacheresource_handlers[$type];
+ if (isset($smarty->_cache['cacheresource_handlers'][$type])) {
+ return $smarty->_cache['cacheresource_handlers'][$type];
}
-
+
// try registered resource
if (isset($smarty->registered_cache_resources[$type])) {
// do not cache these instances as they may vary from instance to instance
- return $smarty->_cacheresource_handlers[$type] = $smarty->registered_cache_resources[$type];
+ return $smarty->_cache['cacheresource_handlers'][$type] = $smarty->registered_cache_resources[$type];
}
// try sysplugins dir
if (isset(self::$sysplugins[$type])) {
- if (!isset(self::$resources[$type])) {
- $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type);
- self::$resources[$type] = new $cache_resource_class();
- }
- return $smarty->_cacheresource_handlers[$type] = self::$resources[$type];
+ $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type);
+ return $smarty->_cache['cacheresource_handlers'][$type] = new $cache_resource_class();
}
// try plugins dir
$cache_resource_class = 'Smarty_CacheResource_' . ucfirst($type);
if ($smarty->loadPlugin($cache_resource_class)) {
- if (!isset(self::$resources[$type])) {
- self::$resources[$type] = new $cache_resource_class();
- }
- return $smarty->_cacheresource_handlers[$type] = self::$resources[$type];
+ return $smarty->_cache['cacheresource_handlers'][$type] = new $cache_resource_class();
}
// give up
throw new SmartyException("Unable to load cache resource '{$type}'");
}
/**
- * Invalid Loaded Cache Files
- *
- * @param Smarty $smarty Smarty object
- */
- public static function invalidLoadedCache(Smarty $smarty)
+ * Invalid Loaded Cache Files
+ *
+ * @param Smarty $smarty Smarty object
+ */
+ public function invalidLoadedCache(Smarty $smarty)
{
- foreach ($smarty->template_objects as $tpl) {
- if (isset($tpl->cached)) {
- $tpl->cached->valid = false;
- $tpl->cached->processed = false;
- }
+ $smarty->_cache['isCached'] = array();
+ if (isset($smarty->ext->_subtemplate)) {
+ $smarty->ext->_subtemplate->tplObjects = array();
}
}
}
-
-/**
-* Smarty Resource Data Object
-*
-* Cache Data Container for Template Files
-*
-* @package Smarty
-* @subpackage TemplateResources
-* @author Rodney Rehm
-*/
-class Smarty_Template_Cached {
- /**
- * Source Filepath
- * @var string
- */
- public $filepath = false;
-
- /**
- * Source Content
- * @var string
- */
- public $content = null;
-
- /**
- * Source Timestamp
- * @var integer
- */
- public $timestamp = false;
-
- /**
- * Source Existance
- * @var boolean
- */
- public $exists = false;
-
- /**
- * Cache Is Valid
- * @var boolean
- */
- public $valid = false;
-
- /**
- * Cache was processed
- * @var boolean
- */
- public $processed = false;
-
- /**
- * CacheResource Handler
- * @var Smarty_CacheResource
- */
- public $handler = null;
-
- /**
- * Template Compile Id (Smarty_Internal_Template::$compile_id)
- * @var string
- */
- public $compile_id = null;
-
- /**
- * Template Cache Id (Smarty_Internal_Template::$cache_id)
- * @var string
- */
- public $cache_id = null;
-
- /**
- * Id for cache locking
- * @var string
- */
- public $lock_id = null;
-
- /**
- * flag that cache is locked by this instance
- * @var bool
- */
- public $is_locked = false;
-
- /**
- * Source Object
- * @var Smarty_Template_Source
- */
- public $source = null;
-
- /**
- * create Cached Object container
- *
- * @param Smarty_Internal_Template $_template template object
- */
- public function __construct(Smarty_Internal_Template $_template)
- {
- $this->compile_id = $_template->compile_id;
- $this->cache_id = $_template->cache_id;
- $this->source = $_template->source;
- $_template->cached = $this;
- $smarty = $_template->smarty;
-
- //
- // load resource handler
- //
- $this->handler = $handler = Smarty_CacheResource::load($smarty); // Note: prone to circular references
-
- //
- // check if cache is valid
- //
- if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || $_template->source->recompiled) {
- $handler->populate($this, $_template);
- return;
- }
- while (true) {
- while (true) {
- $handler->populate($this, $_template);
- if ($this->timestamp === false || $smarty->force_compile || $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->cache_locking) {
- break;
- }
- if (!$this->handler->locked($_template->smarty, $this)) {
- $this->handler->acquireLock($_template->smarty, $this);
- break 2;
- }
- }
- if ($this->valid) {
- if (!$_template->smarty->cache_locking || $this->handler->locked($_template->smarty, $this) === null) {
- // load cache file for the following checks
- if ($smarty->debugging) {
- Smarty_Internal_Debug::start_cache($_template);
- }
- if($handler->process($_template, $this) === false) {
- $this->valid = false;
- } else {
- $this->processed = true;
- }
- if ($smarty->debugging) {
- Smarty_Internal_Debug::end_cache($_template);
- }
- } else {
- continue;
- }
- } else {
- return;
- }
- if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED && $_template->properties['cache_lifetime'] >= 0 && (time() > ($_template->cached->timestamp + $_template->properties['cache_lifetime']))) {
- $this->valid = false;
- }
- if (!$this->valid && $_template->smarty->cache_locking) {
- $this->handler->acquireLock($_template->smarty, $this);
- return;
- } else {
- return;
- }
- }
- }
-
- /**
- * Write this cache object to handler
- *
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content to cache
- * @return boolean success
- */
- public function write(Smarty_Internal_Template $_template, $content)
- {
- if (!$_template->source->recompiled) {
- if ($this->handler->writeCachedContent($_template, $content)) {
- $this->timestamp = time();
- $this->exists = true;
- $this->valid = true;
- if ($_template->smarty->cache_locking) {
- $this->handler->releaseLock($_template->smarty, $this);
- }
- return true;
- }
- }
- return false;
- }
-
-}
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_cacheresource_custom.php b/include/smarty/libs/sysplugins/smarty_cacheresource_custom.php
index ee9de157b..4e9606ef1 100644
--- a/include/smarty/libs/sysplugins/smarty_cacheresource_custom.php
+++ b/include/smarty/libs/sysplugins/smarty_cacheresource_custom.php
@@ -2,42 +2,43 @@
/**
* Smarty Internal Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
*/
/**
* Cache Handler API
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
-abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
-
+abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
+{
/**
* fetch cached content and its modification time from data source
*
- * @param string $id unique cache content identifier
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param string $content cached content
- * @param integer $mtime cache modification timestamp (epoch)
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $content cached content
+ * @param integer $mtime cache modification timestamp (epoch)
+ *
* @return void
*/
- protected abstract function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime);
+ abstract protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime);
/**
* Fetch cached content's modification timestamp from data source
- *
* {@internal implementing this method is optional.
* Only implement it if modification times can be accessed faster than loading the complete cached content.}}
*
- * @param string $id unique cache content identifier
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ *
* @return integer|boolean timestamp (epoch) the template was modified, or false if not found
*/
protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
@@ -48,47 +49,54 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
/**
* Save content to cache
*
- * @param string $id unique cache content identifier
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer|null $exp_time seconds till expiration or null
- * @param string $content content to cache
- * @return boolean success
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer|null $exp_time seconds till expiration or null
+ * @param string $content content to cache
+ *
+ * @return boolean success
*/
- protected abstract function save($id, $name, $cache_id, $compile_id, $exp_time, $content);
+ abstract protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content);
/**
* Delete content from cache
*
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer|null $exp_time seconds till expiration time in seconds or null
- * @return integer number of deleted caches
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer|null $exp_time seconds till expiration time in seconds or null
+ *
+ * @return integer number of deleted caches
*/
- protected abstract function delete($name, $cache_id, $compile_id, $exp_time);
+ abstract protected function delete($name, $cache_id, $compile_id, $exp_time);
/**
* populate Cached Object with meta data from Resource
*
- * @param Smarty_Template_Cached $cached cached object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Cached $cached cached object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
{
$_cache_id = isset($cached->cache_id) ? preg_replace('![^\w\|]+!', '_', $cached->cache_id) : null;
- $_compile_id = isset($cached->compile_id) ? preg_replace('![^\w\|]+!', '_', $cached->compile_id) : null;
-
- $cached->filepath = sha1($cached->source->filepath . $_cache_id . $_compile_id);
+ $_compile_id = isset($cached->compile_id) ? preg_replace('![^\w]+!', '_', $cached->compile_id) : null;
+ $path = $cached->source->filepath . $_cache_id . $_compile_id;
+ $cached->filepath = sha1($path);
+ if ($_template->smarty->cache_locking) {
+ $cached->lock_id = sha1('lock.' . $path);
+ }
$this->populateTimestamp($cached);
}
/**
* populate Cached Object with timestamp and exists from Resource
*
- * @param Smarty_Template_Cached $source cached object
+ * @param Smarty_Template_Cached $cached
+ *
* @return void
*/
public function populateTimestamp(Smarty_Template_Cached $cached)
@@ -97,6 +105,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
if ($mtime !== null) {
$cached->timestamp = $mtime;
$cached->exists = !!$cached->timestamp;
+
return;
}
$timestamp = null;
@@ -108,11 +117,13 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
/**
* Read the cached template and process the header
*
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if the cached content does not exist
+ * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Cached $cached cached object
+ * @param bool $update flag if called because cache update
+ *
+ * @return boolean true or false if the cached content does not exist
*/
- public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null)
+ public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null, $update = false)
{
if (!$cached) {
$cached = $_template->cached;
@@ -120,118 +131,151 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
$content = $cached->content ? $cached->content : null;
$timestamp = $cached->timestamp ? $cached->timestamp : null;
if ($content === null || !$timestamp) {
- $this->fetch(
- $_template->cached->filepath,
- $_template->source->name,
- $_template->cache_id,
- $_template->compile_id,
- $content,
- $timestamp
- );
+ $this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp);
}
if (isset($content)) {
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in evaluated code
+ */
$_smarty_tpl = $_template;
eval("?>" . $content);
+ $cached->content = null;
return true;
}
+
return false;
}
/**
* Write the rendered template output to cache
*
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content to cache
- * @return boolean success
+ * @param Smarty_Internal_Template $_template template object
+ * @param string $content content to cache
+ *
+ * @return boolean success
*/
public function writeCachedContent(Smarty_Internal_Template $_template, $content)
{
- return $this->save(
- $_template->cached->filepath,
- $_template->source->name,
- $_template->cache_id,
- $_template->compile_id,
- $_template->properties['cache_lifetime'],
- $content
- );
+ return $this->save($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $_template->cache_lifetime, $content);
+ }
+
+ /**
+ * Read cached template from cache
+ *
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return string content
+ */
+ public function readCachedContent(Smarty_Internal_Template $_template)
+ {
+ $content = $_template->cached->content ? $_template->cached->content : null;
+ $timestamp = null;
+ if ($content === null) {
+ $timestamp = null;
+ $this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp);
+ }
+ if (isset($content)) {
+ return $content;
+ }
+ return false;
}
/**
* Empty cache
*
- * @param Smarty $smarty Smarty object
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ * @param Smarty $smarty Smarty object
+ * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
* @return integer number of cache files deleted
*/
- public function clearAll(Smarty $smarty, $exp_time=null)
+ public function clearAll(Smarty $smarty, $exp_time = null)
{
- $this->cache = array();
return $this->delete(null, null, null, $exp_time);
}
/**
* Empty cache for a specific template
*
- * @param Smarty $smarty Smarty object
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ * @param Smarty $smarty Smarty object
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
* @return integer number of cache files deleted
*/
public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{
- $this->cache = array();
- return $this->delete($resource_name, $cache_id, $compile_id, $exp_time);
+ $cache_name = null;
+
+ if (isset($resource_name)) {
+ $source = Smarty_Template_Source::load(null, $smarty, $resource_name);
+ if ($source->exists) {
+ $cache_name = $source->name;
+ } else {
+ return 0;
+ }
+ // remove from template cache
+ if (isset($smarty->_cache['template_objects'])) {
+ foreach ($smarty->_cache['template_objects'] as $key => $_tpl) {
+ if (isset($_tpl->cached) && $_tpl->source->uid == $source->uid) {
+ unset($smarty->_cache['template_objects'][$key]);
+ }
+ }
+ }
+ }
+
+ return $this->delete($cache_name, $cache_id, $compile_id, $exp_time);
}
/**
* Check is cache is locked for this template
*
- * @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if cache is locked
+ * @param Smarty $smarty Smarty object
+ * @param Smarty_Template_Cached $cached cached object
+ *
+ * @return boolean true or false if cache is locked
*/
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
- $id = $cached->filepath;
+ $id = $cached->lock_id;
$name = $cached->source->name . '.lock';
- $mtime = $this->fetchTimestamp($id, $name, null, null);
+ $mtime = $this->fetchTimestamp($id, $name, $cached->cache_id, $cached->compile_id);
if ($mtime === null) {
- $this->fetch($id, $name, null, null, $content, $mtime);
+ $this->fetch($id, $name, $cached->cache_id, $cached->compile_id, $content, $mtime);
}
-
- return $mtime && time() - $mtime < $smarty->locking_timeout;
+ return $mtime && ($t = time()) - $mtime < $smarty->locking_timeout;
}
/**
* Lock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
$cached->is_locked = true;
-
- $id = $cached->filepath;
+ $id = $cached->lock_id;
$name = $cached->source->name . '.lock';
- $this->save($id, $name, null, null, $smarty->locking_timeout, '');
+ $this->save($id, $name, $cached->cache_id, $cached->compile_id, $smarty->locking_timeout, '');
}
/**
* Unlock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
$cached->is_locked = false;
-
$name = $cached->source->name . '.lock';
- $this->delete($name, null, null, null);
+ $this->delete($name, $cached->cache_id, $cached->compile_id, null);
}
}
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php b/include/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
index dff9b65aa..ee4021a19 100644
--- a/include/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
+++ b/include/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
@@ -2,44 +2,44 @@
/**
* Smarty Internal Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
*/
/**
* Smarty Cache Handler Base for Key/Value Storage Implementations
- *
* This class implements the functionality required to use simple key/value stores
* for hierarchical cache groups. key/value stores like memcache or APC do not support
* wildcards in keys, therefore a cache group cannot be cleared like "a|*" - which
* is no problem to filesystem and RDBMS implementations.
- *
* This implementation is based on the concept of invalidation. While one specific cache
* can be identified and cleared, any range of caches cannot be identified. For this reason
* each level of the cache group hierarchy can have its own value in the store. These values
* are nothing but microtimes, telling us when a particular cache group was cleared for the
* last time. These keys are evaluated for every cache read to determine if the cache has
* been invalidated since it was created and should hence be treated as inexistent.
- *
* Although deep hierarchies are possible, they are not recommended. Try to keep your
* cache groups as shallow as possible. Anything up 3-5 parents should be ok. So
* »a|b|c« is a good depth where »a|b|c|d|e|f|g|h|i|j|k« isn't. Try to join correlating
* cache groups: if your cache groups look somewhat like »a|b|$page|$items|$whatever«
* consider using »a|b|c|$page-$items-$whatever« instead.
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
-abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
-
+abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
+{
/**
* cache for contents
+ *
* @var array
*/
protected $contents = array();
+
/**
* cache for timestamps
+ *
* @var array
*/
protected $timestamps = array();
@@ -47,16 +47,15 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* populate Cached Object with meta data from Resource
*
- * @param Smarty_Template_Cached $cached cached object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Cached $cached cached object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
{
- $cached->filepath = $_template->source->uid
- . '#' . $this->sanitize($cached->source->name)
- . '#' . $this->sanitize($cached->cache_id)
- . '#' . $this->sanitize($cached->compile_id);
+ $cached->filepath = $_template->source->uid . '#' . $this->sanitize($cached->source->resource) . '#' .
+ $this->sanitize($cached->cache_id) . '#' . $this->sanitize($cached->compile_id);
$this->populateTimestamp($cached);
}
@@ -64,7 +63,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* populate Cached Object with timestamp and exists from Resource
*
- * @param Smarty_Template_Cached $cached cached object
+ * @param Smarty_Template_Cached $cached cached object
+ *
* @return void
*/
public function populateTimestamp(Smarty_Template_Cached $cached)
@@ -80,11 +80,13 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Read the cached template and process the header
*
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if the cached content does not exist
+ * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Cached $cached cached object
+ * @param bool $update flag if called because cache update
+ *
+ * @return boolean true or false if the cached content does not exist
*/
- public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null)
+ public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null, $update = false)
{
if (!$cached) {
$cached = $_template->cached;
@@ -97,55 +99,92 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
}
}
if (isset($content)) {
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in evaluated code
+ */
$_smarty_tpl = $_template;
eval("?>" . $content);
+
return true;
}
+
return false;
}
/**
* Write the rendered template output to cache
*
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content to cache
- * @return boolean success
+ * @param Smarty_Internal_Template $_template template object
+ * @param string $content content to cache
+ *
+ * @return boolean success
*/
public function writeCachedContent(Smarty_Internal_Template $_template, $content)
{
$this->addMetaTimestamp($content);
- return $this->write(array($_template->cached->filepath => $content), $_template->properties['cache_lifetime']);
+
+ return $this->write(array($_template->cached->filepath => $content), $_template->cache_lifetime);
}
/**
- * Empty cache
+ * Read cached template from cache
*
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return string content
+ */
+ public function readCachedContent(Smarty_Internal_Template $_template)
+ {
+ $content = $_template->cached->content ? $_template->cached->content : null;
+ $timestamp = null;
+ if ($content === null) {
+ if (!$this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp, $_template->source->uid)) {
+ return false;
+ }
+ }
+ if (isset($content)) {
+ return $content;
+ }
+ return false;
+ }
+
+ /**
+ * Empty cache
* {@internal the $exp_time argument is ignored altogether }}
*
- * @param Smarty $smarty Smarty object
- * @param integer $exp_time expiration time [being ignored]
+ * @param Smarty $smarty Smarty object
+ * @param integer $exp_time expiration time [being ignored]
+ *
* @return integer number of cache files deleted [always -1]
* @uses purge() to clear the whole store
* @uses invalidate() to mark everything outdated if purge() is inapplicable
*/
- public function clearAll(Smarty $smarty, $exp_time=null)
+ public function clearAll(Smarty $smarty, $exp_time = null)
{
if (!$this->purge()) {
$this->invalidate(null);
}
- return -1;
+ // remove from template cache
+ if (isset($smarty->_cache['template_objects'])) {
+ foreach ($smarty->_cache['template_objects'] as $key => $tpl) {
+ if (isset($tpl->cached)) {
+ unset($smarty->_cache['template_objects'][$key]);
+ }
+ }
+ }
+ return - 1;
}
/**
* Empty cache for a specific template
- *
* {@internal the $exp_time argument is ignored altogether}}
*
- * @param Smarty $smarty Smarty object
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time [being ignored]
+ * @param Smarty $smarty Smarty object
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time [being ignored]
+ *
* @return integer number of cache files deleted [always -1]
* @uses buildCachedFilepath() to generate the CacheID
* @uses invalidate() to mark CacheIDs parent chain as outdated
@@ -153,53 +192,54 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
*/
public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{
- $uid = $this->getTemplateUid($smarty, $resource_name, $cache_id, $compile_id);
- $cid = $uid . '#' . $this->sanitize($resource_name) . '#' . $this->sanitize($cache_id) . '#' . $this->sanitize($compile_id);
+ $uid = $this->getTemplateUid($smarty, $resource_name);
+ $cid = $uid . '#' . $this->sanitize($resource_name) . '#' . $this->sanitize($cache_id) . '#' .
+ $this->sanitize($compile_id);
$this->delete(array($cid));
$this->invalidate($cid, $resource_name, $cache_id, $compile_id, $uid);
- return -1;
+ // remove from template cache
+ if (isset($resource_name) && isset($smarty->_cache['template_objects'])) {
+ if (isset($smarty->_cache['template_objects'])) {
+ foreach ($smarty->_cache['template_objects'] as $key => $tpl) {
+ if ($tpl->source->uid == $uid && isset($tpl->cached)) {
+ unset($smarty->_cache['template_objects'][$key]);
+ }
+ }
+ }
+ }
+ return - 1;
}
+
/**
* Get template's unique ID
*
- * @param Smarty $smarty Smarty object
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
+ * @param Smarty $smarty Smarty object
+ * @param string $resource_name template name
+ *
* @return string filepath of cache file
+ * @throws \SmartyException
+ *
*/
- protected function getTemplateUid(Smarty $smarty, $resource_name, $cache_id, $compile_id)
+ protected function getTemplateUid(Smarty $smarty, $resource_name)
{
- $uid = '';
if (isset($resource_name)) {
- $tpl = new $smarty->template_class($resource_name, $smarty);
- if ($tpl->source->exists) {
- $uid = $tpl->source->uid;
- }
-
- // remove from template cache
- if ($smarty->allow_ambiguous_resources) {
- $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id;
- } else {
- $_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id;
- }
- if (isset($_templateId[150])) {
- $_templateId = sha1($_templateId);
+ $source = Smarty_Template_Source::load(null, $smarty, $resource_name);
+ if ($source->exists) {
+ return $source->uid;
}
- unset($smarty->template_objects[$_templateId]);
}
- return $uid;
+ return '';
}
/**
* Sanitize CacheID components
*
- * @param string $string CacheID component to sanitize
+ * @param string $string CacheID component to sanitize
+ *
* @return string sanitized CacheID component
*/
protected function sanitize($string)
{
- // some poeple smoke bad weed
$string = trim($string, '|');
if (!$string) {
return null;
@@ -210,13 +250,14 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Fetch and prepare a cache object.
*
- * @param string $cid CacheID to fetch
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param string $content cached content
- * @param integer &$timestamp cached timestamp (epoch)
- * @param string $resource_uid resource's uid
+ * @param string $cid CacheID to fetch
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $content cached content
+ * @param integer &$timestamp cached timestamp (epoch)
+ * @param string $resource_uid resource's uid
+ *
* @return boolean success
*/
protected function fetch($cid, $resource_name = null, $cache_id = null, $compile_id = null, &$content = null, &$timestamp = null, $resource_uid = null)
@@ -238,7 +279,6 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Add current microtime to the beginning of $cache_content
- *
* {@internal the header uses 8 Bytes, the first 4 Bytes are the seconds, the second 4 Bytes are the microseconds}}
*
* @param string &$content the content to be cached
@@ -253,25 +293,25 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Extract the timestamp the $content was cached
*
- * @param string &$content the cached content
- * @return float the microtime the content was cached
+ * @param string &$content the cached content
+ *
+ * @return float the microtime the content was cached
*/
protected function getMetaTimestamp(&$content)
{
- $s = unpack("N", substr($content, 0, 4));
- $m = unpack("N", substr($content, 4, 4));
- $content = substr($content, 8);
- return $s[1] + ($m[1] / 100000000);
+ extract(unpack('N1s/N1m/a*content', $content));
+ return $s + ($m / 100000000);
}
/**
* Invalidate CacheID
*
- * @param string $cid CacheID
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param string $resource_uid source's uid
+ * @param string $cid CacheID
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $resource_uid source's uid
+ *
* @return void
*/
protected function invalidate($cid = null, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
@@ -281,22 +321,24 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
// invalidate everything
if (!$resource_name && !$cache_id && !$compile_id) {
$key = 'IVK#ALL';
- }
- // invalidate all caches by template
- else if ($resource_name && !$cache_id && !$compile_id) {
- $key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name);
- }
- // invalidate all caches by cache group
- else if (!$resource_name && $cache_id && !$compile_id) {
- $key = 'IVK#CACHE#' . $this->sanitize($cache_id);
- }
- // invalidate all caches by compile id
- else if (!$resource_name && !$cache_id && $compile_id) {
- $key = 'IVK#COMPILE#' . $this->sanitize($compile_id);
- }
- // invalidate by combination
+ } // invalidate all caches by template
else {
- $key = 'IVK#CID#' . $cid;
+ if ($resource_name && !$cache_id && !$compile_id) {
+ $key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name);
+ } // invalidate all caches by cache group
+ else {
+ if (!$resource_name && $cache_id && !$compile_id) {
+ $key = 'IVK#CACHE#' . $this->sanitize($cache_id);
+ } // invalidate all caches by compile id
+ else {
+ if (!$resource_name && !$cache_id && $compile_id) {
+ $key = 'IVK#COMPILE#' . $this->sanitize($compile_id);
+ } // invalidate by combination
+ else {
+ $key = 'IVK#CID#' . $cid;
+ }
+ }
+ }
}
$this->write(array($key => $now));
}
@@ -304,12 +346,13 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Determine the latest timestamp known to the invalidation chain
*
- * @param string $cid CacheID to determine latest invalidation timestamp of
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param string $resource_uid source's filepath
- * @return float the microtime the CacheID was invalidated
+ * @param string $cid CacheID to determine latest invalidation timestamp of
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $resource_uid source's filepath
+ *
+ * @return float the microtime the CacheID was invalidated
*/
protected function getLatestInvalidationTimestamp($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
{
@@ -321,27 +364,28 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
if (!($_cid = $this->listInvalidationKeys($cid, $resource_name, $cache_id, $compile_id, $resource_uid))) {
return 0;
}
-
+
// there are no InValidationKeys
if (!($values = $this->read($_cid))) {
return 0;
}
// make sure we're dealing with floats
$values = array_map('floatval', $values);
+
return max($values);
}
/**
* Translate a CacheID into the list of applicable InvalidationKeys.
- *
* Splits "some|chain|into|an|array" into array( '#clearAll#', 'some', 'some|chain', 'some|chain|into', ... )
*
- * @param string $cid CacheID to translate
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param string $resource_uid source's filepath
- * @return array list of InvalidationKeys
+ * @param string $cid CacheID to translate
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $resource_uid source's filepath
+ *
+ * @return array list of InvalidationKeys
* @uses $invalidationKeyPrefix to prepend to each InvalidationKey
*/
protected function listInvalidationKeys($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
@@ -357,7 +401,6 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
$t[] = 'IVK#COMPILE' . $_compile;
}
$_name .= '#';
- // some poeple smoke bad weed
$cid = trim($cache_id, '|');
if (!$cid) {
return $t;
@@ -378,30 +421,35 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
$t[] = 'IVK#CACHE#' . $part;
$t[] = 'IVK#CID' . $_name . $part . $_compile;
// skip past delimiter position
- $i++;
+ $i ++;
}
+
return $t;
}
/**
* Check is cache is locked for this template
*
- * @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if cache is locked
+ * @param Smarty $smarty Smarty object
+ * @param Smarty_Template_Cached $cached cached object
+ *
+ * @return boolean true or false if cache is locked
*/
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
$key = 'LOCK#' . $cached->filepath;
$data = $this->read(array($key));
+
return $data && time() - $data[$key] < $smarty->locking_timeout;
}
/**
* Lock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -413,8 +461,10 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Unlock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -426,27 +476,30 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Read values for a set of keys from cache
*
- * @param array $keys list of keys to fetch
+ * @param array $keys list of keys to fetch
+ *
* @return array list of values with the given keys used as indexes
*/
- protected abstract function read(array $keys);
+ abstract protected function read(array $keys);
/**
* Save values for a set of keys to cache
*
- * @param array $keys list of values to save
- * @param int $expire expiration time
+ * @param array $keys list of values to save
+ * @param int $expire expiration time
+ *
* @return boolean true on success, false on failure
*/
- protected abstract function write(array $keys, $expire=null);
+ abstract protected function write(array $keys, $expire = null);
/**
* Remove values from cache
*
- * @param array $keys list of keys to delete
+ * @param array $keys list of keys to delete
+ *
* @return boolean true on success, false on failure
*/
- protected abstract function delete(array $keys);
+ abstract protected function delete(array $keys);
/**
* Remove *all* values from cache
@@ -457,7 +510,4 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
{
return false;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_config_source.php b/include/smarty/libs/sysplugins/smarty_config_source.php
deleted file mode 100644
index 043ff13e9..000000000
--- a/include/smarty/libs/sysplugins/smarty_config_source.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin
- *
- * @package Smarty
- * @subpackage TemplateResources
- */
-
-/**
- * Smarty Resource Data Object
- *
- * Meta Data Container for Config Files
- *
- * @package Smarty
- * @subpackage TemplateResources
- * @author Rodney Rehm
- *
- * @property string $content
- * @property int $timestamp
- * @property bool $exists
- */
-class Smarty_Config_Source extends Smarty_Template_Source {
-
- /**
- * create Config Object container
- *
- * @param Smarty_Resource $handler Resource Handler this source object communicates with
- * @param Smarty $smarty Smarty instance this source object belongs to
- * @param string $resource full config_resource
- * @param string $type type of resource
- * @param string $name resource name
- * @param string $unique_resource unqiue resource name
- */
- public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name, $unique_resource)
- {
- $this->handler = $handler; // Note: prone to circular references
-
- // Note: these may be ->config_compiler_class etc in the future
- //$this->config_compiler_class = $handler->config_compiler_class;
- //$this->config_lexer_class = $handler->config_lexer_class;
- //$this->config_parser_class = $handler->config_parser_class;
-
- $this->smarty = $smarty;
- $this->resource = $resource;
- $this->type = $type;
- $this->name = $name;
- $this->unique_resource = $unique_resource;
- }
-
- /**
- * <<magic>> Generic setter.
- *
- * @param string $property_name valid: content, timestamp, exists
- * @param mixed $value newly assigned value (not check for correct type)
- * @throws SmartyException when the given property name is not valid
- */
- public function __set($property_name, $value)
- {
- switch ($property_name) {
- case 'content':
- case 'timestamp':
- case 'exists':
- $this->$property_name = $value;
- break;
-
- default:
- throw new SmartyException("invalid config property '$property_name'.");
- }
- }
-
- /**
- * <<magic>> Generic getter.
- *
- * @param string $property_name valid: content, timestamp, exists
- * @throws SmartyException when the given property name is not valid
- */
- public function __get($property_name)
- {
- switch ($property_name) {
- case 'timestamp':
- case 'exists':
- $this->handler->populateTimestamp($this);
- return $this->$property_name;
-
- case 'content':
- return $this->content = $this->handler->getContent($this);
-
- default:
- throw new SmartyException("config property '$property_name' does not exist.");
- }
- }
-
-}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_data.php b/include/smarty/libs/sysplugins/smarty_data.php
new file mode 100644
index 000000000..7cf18a43e
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_data.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Smarty Plugin Data
+ * This file contains the data object
+ *
+ * @package Smarty
+ * @subpackage Template
+ * @author Uwe Tews
+ */
+
+/**
+ * class for the Smarty data object
+ * The Smarty data object will hold Smarty variables in the current scope
+ *
+ * @package Smarty
+ * @subpackage Template
+ */
+class Smarty_Data extends Smarty_Internal_Data
+{
+ /**
+ * Counter
+ *
+ * @var int
+ */
+ static $count = 0;
+
+ /**
+ * Data block name
+ *
+ * @var string
+ */
+ public $dataObjectName = '';
+
+ /**
+ * Smarty object
+ *
+ * @var Smarty
+ */
+ public $smarty = null;
+
+ /**
+ * create Smarty data object
+ *
+ * @param Smarty|array $_parent parent template
+ * @param Smarty|Smarty_Internal_Template $smarty global smarty instance
+ * @param string $name optional data block name
+ *
+ * @throws SmartyException
+ */
+ public function __construct($_parent = null, $smarty = null, $name = null)
+ {
+ parent::__construct();
+ self::$count ++;
+ $this->dataObjectName = 'Data_object ' . (isset($name) ? "'{$name}'" : self::$count);
+ $this->smarty = $smarty;
+ if (is_object($_parent)) {
+ // when object set up back pointer
+ $this->parent = $_parent;
+ } elseif (is_array($_parent)) {
+ // set up variable values
+ foreach ($_parent as $_key => $_val) {
+ $this->tpl_vars[$_key] = new Smarty_Variable($_val);
+ }
+ } elseif ($_parent != null) {
+ throw new SmartyException("Wrong type for template variables");
+ }
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php b/include/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php
index 04194b396..64d02dfe5 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php
@@ -2,41 +2,39 @@
/**
* Smarty Internal Plugin CacheResource File
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
/**
* This class does contain all necessary methods for the HTML cache on file system
- *
* Implements the file system as resource for the HTML cache Version ussing nocache inserts.
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
*/
-class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
-
+class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
+{
/**
* populate Cached Object with meta data from Resource
*
* @param Smarty_Template_Cached $cached cached object
* @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
{
$_source_file_path = str_replace(':', '.', $_template->source->filepath);
$_cache_id = isset($_template->cache_id) ? preg_replace('![^\w\|]+!', '_', $_template->cache_id) : null;
- $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w\|]+!', '_', $_template->compile_id) : null;
+ $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w]+!', '_', $_template->compile_id) : null;
$_filepath = $_template->source->uid;
// if use_sub_dirs, break file into directories
if ($_template->smarty->use_sub_dirs) {
- $_filepath = substr($_filepath, 0, 2) . DS
- . substr($_filepath, 2, 2) . DS
- . substr($_filepath, 4, 2) . DS
- . $_filepath;
+ $_filepath = substr($_filepath, 0, 2) . DS . substr($_filepath, 2, 2) . DS . substr($_filepath, 4, 2) . DS .
+ $_filepath;
}
$_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^';
if (isset($_cache_id)) {
@@ -58,36 +56,52 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
} else {
$_lock_dir = $_cache_dir;
}
- $cached->lock_id = $_lock_dir.sha1($_cache_id.$_compile_id.$_template->source->uid).'.lock';
+ $cached->lock_id = $_lock_dir . sha1($_cache_id . $_compile_id . $_template->source->uid) . '.lock';
+ }
+ $cached->filepath = $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($_source_file_path) .
+ '.php';
+ $cached->timestamp = $cached->exists = is_file($cached->filepath);
+ if ($cached->exists) {
+ $cached->timestamp = filemtime($cached->filepath);
}
- $cached->filepath = $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($_source_file_path) . '.php';
- $cached->timestamp = @filemtime($cached->filepath);
- $cached->exists = !!$cached->timestamp;
}
/**
* populate Cached Object with timestamp and exists from Resource
*
* @param Smarty_Template_Cached $cached cached object
+ *
* @return void
*/
public function populateTimestamp(Smarty_Template_Cached $cached)
{
- $cached->timestamp = @filemtime($cached->filepath);
- $cached->exists = !!$cached->timestamp;
+ $cached->timestamp = $cached->exists = is_file($cached->filepath);
+ if ($cached->exists) {
+ $cached->timestamp = filemtime($cached->filepath);
+ }
}
/**
* Read the cached template and process its header
*
* @param Smarty_Internal_Template $_template template object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if the cached content does not exist
+ * @param Smarty_Template_Cached $cached cached object
+ * @param bool $update flag if called because cache update
+ *
+ * @return boolean true or false if the cached content does not exist
*/
- public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null)
+ public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null, $update = false)
{
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in included file
+ */
$_smarty_tpl = $_template;
- return @include $_template->cached->filepath;
+ $_template->cached->valid = false;
+ if ($update && defined('HHVM_VERSION')) {
+ return $_template->smarty->ext->_hhvm->includeHhvm($_template, $_template->cached->filepath);
+ } else {
+ return @include $_template->cached->filepath;
+ }
}
/**
@@ -95,14 +109,19 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
*
* @param Smarty_Internal_Template $_template template object
* @param string $content content to cache
+ *
* @return boolean success
*/
public function writeCachedContent(Smarty_Internal_Template $_template, $content)
{
- if (Smarty_Internal_Write_File::writeFile($_template->cached->filepath, $content, $_template->smarty) === true) {
- $_template->cached->timestamp = @filemtime($_template->cached->filepath);
- $_template->cached->exists = !!$_template->cached->timestamp;
- if ($_template->cached->exists) {
+ if ($_template->smarty->ext->_writeFile->writeFile($_template->cached->filepath, $content, $_template->smarty) === true) {
+ if (function_exists('opcache_invalidate')) {
+ opcache_invalidate($_template->cached->filepath);
+ }
+ $cached = $_template->cached;
+ $cached->timestamp = $cached->exists = is_file($cached->filepath);
+ if ($cached->exists) {
+ $cached->timestamp = filemtime($cached->filepath);
return true;
}
}
@@ -110,122 +129,56 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
}
/**
+ * Read cached template from cache
+ *
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return string content
+ */
+ public function readCachedContent(Smarty_Internal_Template $_template)
+ {
+ if (is_file($_template->cached->filepath)) {
+ return file_get_contents($_template->cached->filepath);
+ }
+ return false;
+ }
+
+ /**
* Empty cache
*
- * @param Smarty_Internal_Template $_template template object
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ * @param Smarty $smarty
+ * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
* @return integer number of cache files deleted
*/
public function clearAll(Smarty $smarty, $exp_time = null)
{
- return $this->clear($smarty, null, null, null, $exp_time);
+ return Smarty_Internal_Extension_Clear::clear($smarty, null, null, null, $exp_time);
}
/**
* Empty cache for a specific template
*
- * @param Smarty $_template template object
+ * @param Smarty $smarty
* @param string $resource_name template name
* @param string $cache_id cache id
* @param string $compile_id compile id
* @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
* @return integer number of cache files deleted
- */
+ */
public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{
- $_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null;
- $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null;
- $_dir_sep = $smarty->use_sub_dirs ? '/' : '^';
- $_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0;
- $_dir = $smarty->getCacheDir();
- $_dir_length = strlen($_dir);
- if (isset($_cache_id)) {
- $_cache_id_parts = explode('|', $_cache_id);
- $_cache_id_parts_count = count($_cache_id_parts);
- if ($smarty->use_sub_dirs) {
- foreach ($_cache_id_parts as $id_part) {
- $_dir .= $id_part . DS;
- }
- }
- }
- if (isset($resource_name)) {
- $_save_stat = $smarty->caching;
- $smarty->caching = true;
- $tpl = new $smarty->template_class($resource_name, $smarty);
- $smarty->caching = $_save_stat;
-
- // remove from template cache
- $tpl->source; // have the template registered before unset()
- if ($smarty->allow_ambiguous_resources) {
- $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id;
- } else {
- $_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id;
- }
- if (isset($_templateId[150])) {
- $_templateId = sha1($_templateId);
- }
- unset($smarty->template_objects[$_templateId]);
-
- if ($tpl->source->exists) {
- $_resourcename_parts = basename(str_replace('^', '/', $tpl->cached->filepath));
- } else {
- return 0;
- }
- }
- $_count = 0;
- $_time = time();
- if (file_exists($_dir)) {
- $_cacheDirs = new RecursiveDirectoryIterator($_dir);
- $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST);
- foreach ($_cache as $_file) {
- if (substr(basename($_file->getPathname()),0,1) == '.' || strpos($_file, '.svn') !== false) continue;
- // directory ?
- if ($_file->isDir()) {
- if (!$_cache->isDot()) {
- // delete folder if empty
- @rmdir($_file->getPathname());
- }
- } else {
- $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string)$_file, $_dir_length)));
- $_parts_count = count($_parts);
- // check name
- if (isset($resource_name)) {
- if ($_parts[$_parts_count-1] != $_resourcename_parts) {
- continue;
- }
- }
- // check compile id
- if (isset($_compile_id) && (!isset($_parts[$_parts_count-2 - $_compile_id_offset]) || $_parts[$_parts_count-2 - $_compile_id_offset] != $_compile_id)) {
- continue;
- }
- // check cache id
- if (isset($_cache_id)) {
- // count of cache id parts
- $_parts_count = (isset($_compile_id)) ? $_parts_count - 2 - $_compile_id_offset : $_parts_count - 1 - $_compile_id_offset;
- if ($_parts_count < $_cache_id_parts_count) {
- continue;
- }
- for ($i = 0; $i < $_cache_id_parts_count; $i++) {
- if ($_parts[$i] != $_cache_id_parts[$i]) continue 2;
- }
- }
- // expired ?
- if (isset($exp_time) && $_time - @filemtime($_file) < $exp_time) {
- continue;
- }
- $_count += @unlink((string) $_file) ? 1 : 0;
- }
- }
- }
- return $_count;
+ return Smarty_Internal_Extension_Clear::clear($smarty, $resource_name, $cache_id, $compile_id, $exp_time);
}
/**
* Check is cache is locked for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if cache is locked
+ *
+ * @return boolean true or false if cache is locked
*/
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -234,15 +187,21 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
} else {
clearstatcache();
}
- $t = @filemtime($cached->lock_id);
- return $t && (time() - $t < $smarty->locking_timeout);
+ if (is_file($cached->lock_id)) {
+ $t = @filemtime($cached->lock_id);
+ return $t && (time() - $t < $smarty->locking_timeout);
+ } else {
+ return false;
+ }
}
/**
* Lock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -253,8 +212,10 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
/**
* Unlock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -262,5 +223,3 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
@unlink($cached->lock_id);
}
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_append.php b/include/smarty/libs/sysplugins/smarty_internal_compile_append.php
index f6036e883..bd2ffe474 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_append.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_append.php
@@ -1,31 +1,31 @@
<?php
/**
* Smarty Internal Plugin Compile Append
- *
* Compiles the {append} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Append Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign {
-
+class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign
+{
/**
* Compiles code for the {append} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
// the following must be assigned at runtime because it will be overwritten in parent class
$this->required_attributes = array('var', 'value');
@@ -47,7 +47,4 @@ class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign {
// call compile assign
return parent::compile($_new_attr, $compiler, $_params);
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_assign.php b/include/smarty/libs/sysplugins/smarty_internal_compile_assign.php
index f2dfedfb8..5e3fce3cc 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_assign.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_assign.php
@@ -1,38 +1,46 @@
<?php
/**
* Smarty Internal Plugin Compile Assign
- *
* Compiles the {assign} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Assign Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase {
+class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase
+{
+ /**
+ * Valid scope names
+ *
+ * @var array
+ */
+ public $valid_scopes = array('local' => true, 'parent' => true, 'root' => true, 'global' => true,
+ 'smarty' => true, 'tpl_root' => true);
/**
* Compiles code for the {assign} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
// the following must be assigned at runtime because it will be overwritten in Smarty_Internal_Compile_Append
$this->required_attributes = array('var', 'value');
$this->shorttag_order = array('var', 'value');
- $this->optional_attributes = array('scope');
+ $this->optional_attributes = array('scope', 'bubble_up');
$_nocache = 'null';
- $_scope = Smarty::SCOPE_LOCAL;
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
// nocache ?
@@ -42,47 +50,49 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase {
if (isset($compiler->template->tpl_vars[trim($_attr['var'], "'")])) {
$compiler->template->tpl_vars[trim($_attr['var'], "'")]->nocache = true;
} else {
- $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_variable(null, true);
+ $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_Variable(null, true);
}
}
// scope setup
+ $_scope = Smarty::SCOPE_LOCAL;
if (isset($_attr['scope'])) {
$_attr['scope'] = trim($_attr['scope'], "'\"");
- if ($_attr['scope'] == 'parent') {
- $_scope = Smarty::SCOPE_PARENT;
- } elseif ($_attr['scope'] == 'root') {
- $_scope = Smarty::SCOPE_ROOT;
- } elseif ($_attr['scope'] == 'global') {
- $_scope = Smarty::SCOPE_GLOBAL;
- } else {
- $compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno);
+ if (!isset($this->valid_scopes[$_attr['scope']])) {
+ $compiler->trigger_template_error("illegal value '{$_attr['scope']}' for \"scope\" attribute", null, true);
+ }
+ if ($_attr['scope'] != 'local') {
+ if ($_attr['scope'] == 'parent') {
+ $_scope = Smarty::SCOPE_PARENT;
+ } elseif ($_attr['scope'] == 'root') {
+ $_scope = Smarty::SCOPE_ROOT;
+ } elseif ($_attr['scope'] == 'global') {
+ $_scope = Smarty::SCOPE_GLOBAL;
+ } elseif ($_attr['scope'] == 'smarty') {
+ $_scope = Smarty::SCOPE_SMARTY;
+ } elseif ($_attr['scope'] == 'tpl_root') {
+ $_scope = Smarty::SCOPE_TPL_ROOT;
+ }
+ $_scope += (isset($_attr['bubble_up']) && $_attr['bubble_up'] == 'false') ? 0 : Smarty::SCOPE_BUBBLE_UP;
}
}
// compiled output
if (isset($parameter['smarty_internal_index'])) {
- $output = "<?php \$_smarty_tpl->createLocalArrayVariable($_attr[var], $_nocache, $_scope);\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value$parameter[smarty_internal_index] = $_attr[value];";
+ $output =
+ "<?php \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, $_attr[var], $_nocache);\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value$parameter[smarty_internal_index] = $_attr[value];";
} else {
// implement Smarty2's behaviour of variables assigned by reference
if ($compiler->template->smarty instanceof SmartyBC) {
- $output = "<?php if (isset(\$_smarty_tpl->tpl_vars[$_attr[var]])) {\$_smarty_tpl->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];";
- $output .= "\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value = $_attr[value]; \$_smarty_tpl->tpl_vars[$_attr[var]]->nocache = $_nocache; \$_smarty_tpl->tpl_vars[$_attr[var]]->scope = $_scope;";
- $output .= "\n} else \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_variable($_attr[value], $_nocache, $_scope);";
+ $output =
+ "<?php if (isset(\$_smarty_tpl->tpl_vars[$_attr[var]])) {\$_smarty_tpl->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];";
+ $output .= "\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value = $_attr[value]; \$_smarty_tpl->tpl_vars[$_attr[var]]->nocache = $_nocache;";
+ $output .= "\n} else \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_Variable($_attr[value], $_nocache);";
} else {
- $output = "<?php \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_variable($_attr[value], $_nocache, $_scope);";
+ $output = "<?php \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_Variable($_attr[value], $_nocache);";
}
}
- if ($_scope == Smarty::SCOPE_PARENT) {
- $output .= "\nif (\$_smarty_tpl->parent != null) \$_smarty_tpl->parent->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];";
- } elseif ($_scope == Smarty::SCOPE_ROOT || $_scope == Smarty::SCOPE_GLOBAL) {
- $output .= "\n\$_ptr = \$_smarty_tpl->parent; while (\$_ptr != null) {\$_ptr->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]]; \$_ptr = \$_ptr->parent; }";
- }
- if ( $_scope == Smarty::SCOPE_GLOBAL) {
- $output .= "\nSmarty::\$global_tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];";
- }
+ $output .= "\n\$_smarty_tpl->ext->_updateScope->updateScope(\$_smarty_tpl, $_attr[var], $_scope);";
$output .= '?>';
+
return $output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_block.php b/include/smarty/libs/sysplugins/smarty_internal_compile_block.php
index f760e551d..ab1fc6e00 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_block.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_block.php
@@ -1,23 +1,20 @@
<?php
-
-/**
- * Smarty Internal Plugin Compile Block
+/*
+ * This file is part of Smarty.
*
- * Compiles the {block}{/block} tags
+ * (c) 2015 Uwe Tews
*
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
*/
/**
* Smarty Internal Plugin Compile Block Class
*
- * @package Smarty
- * @subpackage Compiler
+ * @author Uwe Tews <uwe.tews@googlemail.com>
*/
-class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inheritance
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -32,7 +29,7 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
* @var array
* @see Smarty_Internal_CompileBase
*/
- public $shorttag_order = array('name', 'hide');
+ public $shorttag_order = array('name');
/**
* Attribute definition: Overwrites base class.
@@ -40,243 +37,256 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
* @var array
* @see Smarty_Internal_CompileBase
*/
- public $optional_attributes = array('hide');
+ public $option_flags = array('hide', 'nocache');
/**
- * Compiles code for the {block} tag
+ * Attribute definition: Overwrites base class.
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @return boolean true
+ * @var array
+ * @see Smarty_Internal_CompileBase
*/
- public function compile($args, $compiler) {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $save = array($_attr, $compiler->parser->current_buffer, $compiler->nocache, $compiler->smarty->merge_compiled_includes, $compiler->merged_templates, $compiler->smarty->merged_templates_func, $compiler->template->properties, $compiler->template->has_nocache_code);
- $this->openTag($compiler, 'block', $save);
- if ($_attr['nocache'] == true) {
- $compiler->nocache = true;
- }
- // set flag for {block} tag
- $compiler->inheritance = true;
- // must merge includes
- $compiler->smarty->merge_compiled_includes = true;
+ public $optional_attributes = array('assign');
- $compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser);
- $compiler->has_code = false;
- return true;
- }
+ /**
+ * nesting level of block tags
+ *
+ * @var int
+ */
+ public static $blockTagNestingLevel = 0;
/**
- * Save or replace child block source by block name during parsing
+ * Saved compiler object
*
- * @param string $block_content block source content
- * @param string $block_tag opening block tag
- * @param object $template template object
- * @param string $filepath filepath of template source
+ * @var Smarty_Internal_TemplateCompilerBase
*/
- public static function saveBlockData($block_content, $block_tag, $template, $filepath) {
- $_rdl = preg_quote($template->smarty->right_delimiter);
- $_ldl = preg_quote($template->smarty->left_delimiter);
- if (!$template->smarty->auto_literal) {
- $al = '\s*';
- } else {
- $al = '';
- }
- if (0 == preg_match("!({$_ldl}{$al}block\s+)(name=)?(\w+|'.*'|\".*\")(\s*?)?((append|prepend|nocache)?(\s*)?(hide)?)?(\s*{$_rdl})!", $block_tag, $_match)) {
- $error_text = 'Syntax Error in template "' . $template->source->filepath . '" "' . htmlspecialchars($block_tag) . '" illegal options';
- throw new SmartyCompilerException($error_text);
- } else {
- $_name = trim($_match[3], '\'"');
- if ($_match[8] != 'hide' || isset($template->block_data[$_name])) { // replace {$smarty.block.child}
- // get nested block tags
- if (0 != preg_match_all("!({$_ldl}{$al}block\s+)(name=)?(\w+|'.*'|\".*\")([\s\S]*?)(hide)?(\s*{$_rdl})([\s\S]*?)(.*)?({$_ldl}{$al}/block\s*{$_rdl})!", $block_content, $_match2)) {
- foreach ($_match2[3] as $key => $name) {
- // get it's replacement
- $_name2 = trim($name, '\'"');
- if ($_match2[5][$key] != 'hide' || isset($template->block_data[$_name2])) {
- if (isset($template->block_data[$_name2])) {
- $replacement = $template->block_data[$_name2]['source'];
- } else {
- $replacement = '';
- }
- // replace {$smarty.block.child} tag
- if (preg_match("!{$_ldl}{$al}\\\$smarty\.block\.child\s*{$_rdl}!",$_match2[7][$key])) {
- $replacement = preg_replace("!({$_ldl}{$al}\\\$smarty\.block\.child\s*{$_rdl})!", $replacement, $_match2[7][$key]);
- $block_content = preg_replace("!(({$_ldl}{$al}block)(.*)?{$name}(.*)?({$_rdl}[\s\S]*?{$_ldl}{$al}/block\s*{$_rdl}))!", $replacement, $block_content);
- }
- if (preg_match("!{$_ldl}{$al}\\\$smarty\.block\.child\s*{$_rdl}!",$_match2[8][$key])) {
- $replacement = preg_replace("!{$_ldl}{$al}\\\$smarty\.block\.child\s*{$_rdl}!", $replacement, $_match2[8][$key]);
- $block_content = preg_replace("!(({$_ldl}{$al}block)(.*)?{$name}(.*)?({$_rdl})(.*)?({$_ldl}{$al}/block\s*{$_rdl}))!", $replacement, $block_content);
- }
- } else {
- // remove hidden blocks
- $block_content = preg_replace("!(({$_ldl}{$al}block)(.*)?{$name}(.*)?({$_rdl}[\s\S]*?{$_ldl}{$al}/block\s*{$_rdl}))!", '', $block_content);
- }
- }
- }
- // do we have not nested {$smart.block.child}
- if (0 != preg_match("!({$_ldl}{$al}\\\$smarty\.block\.child\s*{$_rdl})!", $block_content, $_match2)) {
- // get child replacement for this block
- if (isset($template->block_data[$_name])) {
- $replacement = $template->block_data[$_name]['source'];
- unset($template->block_data[$_name]);
- } else {
- $replacement = '';
- }
- $block_content = preg_replace("!({$_ldl}{$al}\\\$smarty\.block\.child\s*{$_rdl})!", $replacement, $block_content);
- }
- if (isset($template->block_data[$_name])) {
- if (strpos($template->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
- $template->block_data[$_name]['source'] =
- str_replace('%%%%SMARTY_PARENT%%%%', $block_content, $template->block_data[$_name]['source']);
- } elseif ($template->block_data[$_name]['mode'] == 'prepend') {
- $template->block_data[$_name]['source'] .= $block_content;
- } elseif ($template->block_data[$_name]['mode'] == 'append') {
- $template->block_data[$_name]['source'] = $block_content . $template->block_data[$_name]['source'];
- }
- } else {
- $template->block_data[$_name]['source'] = $block_content;
- $template->block_data[$_name]['file'] = $filepath;
- }
- if ($_match[6] == 'append') {
- $template->block_data[$_name]['mode'] = 'append';
- } elseif ($_match[6] == 'prepend') {
- $template->block_data[$_name]['mode'] = 'prepend';
- } else {
- $template->block_data[$_name]['mode'] = 'replace';
- }
- }
- }
- }
+ public $compiler = null;
/**
- * Compile saved child block source
+ * Compiles code for the {block} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
*
- * @param object $compiler compiler object
- * @param string $_name optional name of child block
- * @return string compiled code of schild block
+ * @return bool true
*/
- public static function compileChildBlock($compiler, $_name = null) {
- $_output = '';
- // if called by {$smarty.block.child} we must search the name of enclosing {block}
- if ($_name == null) {
- $stack_count = count($compiler->_tag_stack);
- while (--$stack_count >= 0) {
- if ($compiler->_tag_stack[$stack_count][0] == 'block') {
- $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "'\"");
- break;
- }
- }
- // flag that child is already compile by {$smarty.block.child} inclusion
- $compiler->template->block_data[$_name]['compiled'] = true;
- }
- if ($_name == null) {
- $compiler->trigger_template_error('{$smarty.block.child} used out of context', $compiler->lex->taglineno);
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
+ {
+ if (!isset($compiler->_cache['blockNesting'])) {
+ $compiler->_cache['blockNesting'] = 0;
}
- // undefined child?
- if (!isset($compiler->template->block_data[$_name]['source'])) {
- return '';
- }
- $_tpl = new Smarty_Internal_template('string:' . $compiler->template->block_data[$_name]['source'], $compiler->smarty, $compiler->template, $compiler->template->cache_id,
- $compiler->template->compile_id = null, $compiler->template->caching, $compiler->template->cache_lifetime);
- $_tpl->variable_filters = $compiler->template->variable_filters;
- $_tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash'];
- $_tpl->source->filepath = $compiler->template->block_data[$_name]['file'];
- $_tpl->allow_relative_path = true;
- if ($compiler->nocache) {
- $_tpl->compiler->forceNocache = 2;
+ if ($compiler->_cache['blockNesting'] == 0) {
+ // make sure that inheritance gets initialized in template code
+ $this->registerInit($compiler);
+ $this->option_flags = array('hide', 'nocache', 'append', 'prepend');
} else {
- $_tpl->compiler->forceNocache = 1;
+ $this->option_flags = array('hide', 'nocache');
}
- $_tpl->compiler->suppressHeader = true;
- $_tpl->compiler->suppressTemplatePropertyHeader = true;
- $_tpl->compiler->suppressMergedTemplates = true;
- if (strpos($compiler->template->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
- $_output = str_replace('%%%%SMARTY_PARENT%%%%', $compiler->parser->current_buffer->to_smarty_php(), $_tpl->compiler->compileTemplate($_tpl));
- } elseif ($compiler->template->block_data[$_name]['mode'] == 'prepend') {
- $_output = $_tpl->compiler->compileTemplate($_tpl) . $compiler->parser->current_buffer->to_smarty_php();
- } elseif ($compiler->template->block_data[$_name]['mode'] == 'append') {
- $_output = $compiler->parser->current_buffer->to_smarty_php() . $_tpl->compiler->compileTemplate($_tpl);
- } elseif (!empty($compiler->template->block_data[$_name])) {
- $_output = $_tpl->compiler->compileTemplate($_tpl);
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $compiler->_cache['blockNesting'] ++;
+ $compiler->_cache['blockName'][$compiler->_cache['blockNesting']] = $_attr['name'];
+ $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']][0] = 'block_' . preg_replace('![^\w]+!', '_', uniqid(rand(), true));
+ $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']][1] = false;
+ $this->openTag($compiler, 'block', array($_attr, $compiler->nocache, $compiler->parser->current_buffer,
+ $compiler->template->compiled->has_nocache_code,
+ $compiler->template->caching));
+ // must whole block be nocache ?
+ if ($compiler->tag_nocache) {
+ $i = 0;
}
- $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $_tpl->properties['file_dependency']);
- $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $_tpl->properties['function']);
- $compiler->merged_templates = array_merge($compiler->merged_templates, $_tpl->compiler->merged_templates);
- $compiler->template->variable_filters = $_tpl->variable_filters;
- if ($_tpl->has_nocache_code) {
- $compiler->template->has_nocache_code = true;
+ $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
+ // $compiler->suppressNocacheProcessing = true;
+ if ($_attr['nocache'] === true) {
+ //$compiler->trigger_template_error('nocache option not allowed', $compiler->parser->lex->taglineno);
}
- foreach ($_tpl->required_plugins as $key => $tmp1) {
- if ($compiler->nocache && $compiler->template->caching) {
- $code = 'nocache';
- } else {
- $code = $key;
- }
- foreach ($tmp1 as $name => $tmp) {
- foreach ($tmp as $type => $data) {
- $compiler->template->required_plugins[$code][$name][$type] = $data;
- }
- }
+ $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
+ $compiler->template->compiled->has_nocache_code = false;
+ $compiler->suppressNocacheProcessing = true;
+ }
+
+ /**
+ * Compile saved child block source
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase compiler object
+ * @param string $_name optional name of child block
+ *
+ * @return string compiled code of child block
+ */
+ static function compileChildBlock(Smarty_Internal_TemplateCompilerBase $compiler, $_name = null)
+ {
+ if (!isset($compiler->_cache['blockNesting'])) {
+ $compiler->trigger_template_error(' tag {$smarty.block.child} used outside {block} tags ',
+ $compiler->parser->lex->taglineno);
}
- unset($_tpl);
- return $_output;
+ $compiler->has_code = true;
+ $compiler->suppressNocacheProcessing = true;
+ $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']][1] = true;
+ $output = "<?php \n\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 2, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, null, \$_blockParentStack);\n?>\n";
+ return $output;
}
+ /**
+ * Compile $smarty.block.parent
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param string $_name optional name of child block
+ *
+ * @return string compiled code of child block
+ */
+ static function compileParentBlock(Smarty_Internal_TemplateCompilerBase $compiler, $_name = null)
+ {
+ if (!isset($compiler->_cache['blockNesting'])) {
+ $compiler->trigger_template_error(' tag {$smarty.block.parent} used outside {block} tags ',
+ $compiler->parser->lex->taglineno);
+ }
+ $compiler->suppressNocacheProcessing = true;
+ $compiler->has_code = true;
+ $output = "<?php \n\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 4, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, null, \$_blockParentStack);\n?>\n";
+ return $output;
+ }
}
/**
* Smarty Internal Plugin Compile BlockClose Class
*
- * @package Smarty
- * @subpackage Compiler
*/
-class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile_Shared_Inheritance
+{
/**
* Compiles code for the {/block} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @return string compiled code
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return bool true
*/
- public function compile($args, $compiler) {
- $compiler->has_code = true;
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $saved_data = $this->closeTag($compiler, array('block'));
- $_name = trim($saved_data[0]['name'], "\"'");
- if (isset($compiler->template->block_data[$_name]) && !isset($compiler->template->block_data[$_name]['compiled'])) {
- // restore to status before {block} tag as new subtemplate code of parent {block} is not needed
- // TODO: Below code was disabled in 3.1.8 because of problems with {include} in nested {block} tags in child templates
- // combined with append/prepend or $smarty.block.parent
- // For later versions it should be checked under which conditions it could run for optimisation
- //
- //$compiler->merged_templates = $saved_data[4];
- //$compiler->smarty->merged_templates_func = $saved_data[5];
- //$compiler->template->properties = $saved_data[6];
- //$compiler->template->has_nocache_code = $saved_data[7];
- $_output = Smarty_Internal_Compile_Block::compileChildBlock($compiler, $_name);
- } else {
- if (isset($saved_data[0]['hide']) && !isset($compiler->template->block_data[$_name]['source'])) {
- $_output = '';
- } else {
- $_output = $compiler->parser->current_buffer->to_smarty_php();
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
+ {
+ list($_attr, $_nocache, $_buffer, $_has_nocache_code, $_caching) = $this->closeTag($compiler, array('block'));
+ // init block parameter
+ $_block = $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']];
+ unset($compiler->_cache['blockParams'][$compiler->_cache['blockNesting']]);
+ $_block[2] = $_block[3] = 0;
+ $_name = trim($_attr['name'], "'\"");
+ $_assign = isset($_attr['assign']) ? $_attr['assign'] : null;
+ unset($_attr['assign'], $_attr['name']);
+ foreach ($_attr as $name => $stat) {
+ if ((is_bool($stat) && $stat !== false) || (!is_bool($stat) && $stat != 'false')) {
+ $_block[$name] = is_string($stat) ? trim($stat, "'\"") : $stat;
}
- unset($compiler->template->block_data[$_name]['compiled']);
}
- // reset flags
- $compiler->parser->current_buffer = $saved_data[1];
- $compiler->nocache = $saved_data[2];
- $compiler->smarty->merge_compiled_includes = $saved_data[3];
- // reset flag for {block} tag
- $compiler->inheritance = false;
- // $_output content has already nocache code processed
+ $_funcName = $_block[0];
+ // get compiled block code
+ $_functionCode = $compiler->parser->current_buffer;
+ // setup buffer for template function code
+ $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
+
+ if ($compiler->template->compiled->has_nocache_code) {
+ // $compiler->parent_compiler->template->tpl_function[$_name]['call_name_caching'] = $_funcNameCaching;
+ $_block[6] = $_funcNameCaching = $_funcName . '_nocache';
+ $output = "<?php\n";
+ $output .= "/* {block '{$_name}'} {$compiler->template->source->type}:{$compiler->template->source->name} */\n";
+ $output .= "function {$_funcNameCaching} (\$_smarty_tpl, \$_blockParentStack) {\n";
+ $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\n";
+ $output .= "\$_smarty_tpl->cached->hashes['{$compiler->template->compiled->nocache_hash}'] = true;\n";
+ if (isset($_assign)) {
+ $output .= "ob_start();\n";
+ }
+ $output .= "?>\n";
+ $compiler->parser->current_buffer->append_subtree($compiler->parser,
+ new Smarty_Internal_ParseTree_Tag($compiler->parser,
+ $output));
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
+ $output = "<?php\n";
+ if (isset($_assign)) {
+ $output .= "\$_smarty_tpl->tpl_vars[{$_assign}] = new Smarty_Variable(ob_get_clean());\n";
+ }
+ $output .= "/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\n";
+ $output .= "}\n";
+ $output .= "/* {/block '{$_name}'} */\n\n";
+ $output .= "?>\n";
+ $compiler->parser->current_buffer->append_subtree($compiler->parser,
+ new Smarty_Internal_ParseTree_Tag($compiler->parser,
+ $output));
+ $compiler->blockOrFunctionCode .= $f = $compiler->parser->current_buffer->to_smarty_php($compiler->parser);
+ $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
+ $this->compiler = $compiler;
+ $_functionCode = new Smarty_Internal_ParseTree_Tag($compiler->parser,
+ preg_replace_callback("/((<\?php )?echo '\/\*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/([\S\s]*?)\/\*\/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/",
+ array($this, 'removeNocache'),
+ $_functionCode->to_smarty_php($compiler->parser)));
+ $this->compiler = null;
+ }
+ $output = "<?php\n";
+ $output .= "/* {block '{$_name}'} {$compiler->template->source->type}:{$compiler->template->source->name} */\n";
+ $output .= "function {$_funcName}(\$_smarty_tpl, \$_blockParentStack) {\n";
+ if (isset($_assign)) {
+ $output .= "ob_start();\n";
+ }
+ $output .= "?>\n";
+ $compiler->parser->current_buffer->append_subtree($compiler->parser,
+ new Smarty_Internal_ParseTree_Tag($compiler->parser,
+ $output));
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
+ $output = "<?php\n";
+ if (isset($_assign)) {
+ $output .= "\$_smarty_tpl->tpl_vars[{$_assign}] = new Smarty_Variable(ob_get_clean());\n";
+ }
+ $output .= "}\n";
+ $output .= "/* {/block '{$_name}'} */\n\n";
+ $output .= "?>\n";
+ $compiler->parser->current_buffer->append_subtree($compiler->parser,
+ new Smarty_Internal_ParseTree_Tag($compiler->parser,
+ $output));
+ $compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser);
+ // nocache plugins must be copied
+ if (!empty($compiler->template->compiled->required_plugins['nocache'])) {
+ foreach ($compiler->template->compiled->required_plugins['nocache'] as $plugin => $tmp) {
+ foreach ($tmp as $type => $data) {
+ $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$plugin][$type] =
+ $data;
+ }
+ }
+ }
+
+
+ // restore old status
+ $compiler->template->compiled->has_nocache_code = $_has_nocache_code;
+ $compiler->tag_nocache = $compiler->nocache;
+ $compiler->nocache = $_nocache;
+ $compiler->parser->current_buffer = $_buffer;
+ $output = "<?php \n";
+ if ($compiler->_cache['blockNesting'] == 1) {
+ $output .= "\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 0, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, " .
+ var_export($_block, true) . ");\n";
+ } else {
+ $output .= "\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 0, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, " .
+ var_export($_block, true) . ", \$_blockParentStack);\n";
+
+ }
+ $output .= "?>\n";
+ $compiler->_cache['blockNesting'] --;
+ if ($compiler->_cache['blockNesting'] == 0) {
+ unset($compiler->_cache['blockNesting']);
+ }
+ $compiler->has_code = true;
$compiler->suppressNocacheProcessing = true;
- return $_output;
+ return $output;
}
+ /**
+ * @param $match
+ *
+ * @return mixed
+ */
+ function removeNocache($match)
+ {
+ $code =
+ preg_replace("/((<\?php )?echo '\/\*%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/)|(\/\*\/%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/",
+ '', $match[0]);
+ $code = str_replace(array('\\\'', '\\\\\''), array('\'', '\\\''), $code);
+ return $code;
+ }
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_break.php b/include/smarty/libs/sysplugins/smarty_internal_compile_break.php
index b25bef6c4..cbc73d36a 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_break.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_break.php
@@ -1,21 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Break
- *
* Compiles the {break} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
+
/**
* Smarty Internal Plugin Compile Break Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -23,6 +23,7 @@ class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $optional_attributes = array('levels');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -34,24 +35,26 @@ class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {break} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
if ($_attr['nocache'] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
+ $compiler->trigger_template_error('nocache option not allowed', null, true);
}
if (isset($_attr['levels'])) {
if (!is_numeric($_attr['levels'])) {
- $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno);
+ $compiler->trigger_template_error('level attribute must be a numeric constant', null, true);
}
$_levels = $_attr['levels'];
} else {
@@ -61,17 +64,14 @@ class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase {
$stack_count = count($compiler->_tag_stack) - 1;
while ($level_count > 0 && $stack_count >= 0) {
if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {
- $level_count--;
+ $level_count --;
}
- $stack_count--;
+ $stack_count --;
}
if ($level_count != 0) {
- $compiler->trigger_template_error("cannot break {$_levels} level(s)", $compiler->lex->taglineno);
+ $compiler->trigger_template_error("cannot break {$_levels} level(s)", null, true);
}
- $compiler->has_code = true;
- return "<?php break {$_levels}?>";
- }
+ return "<?php break {$_levels};?>";
+ }
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_call.php b/include/smarty/libs/sysplugins/smarty_internal_compile_call.php
index af12a048c..b7204bec0 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_call.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_call.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Function_Call
- *
* Compiles the calls of user defined tags defined by {function}
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Function_Call Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -24,6 +23,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $required_attributes = array('name');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -31,6 +31,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $shorttag_order = array('name');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -42,9 +43,9 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
/**
* Compiles the calls of user defined tags defined by {function}
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -53,16 +54,14 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
$_attr = $this->getAttributes($compiler, $args);
// save possible attributes
if (isset($_attr['assign'])) {
- // output will be stored in a smarty variable instead of beind displayed
+ // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign'];
}
+ //$_name = trim($_attr['name'], "'\"");
$_name = $_attr['name'];
- if ($compiler->compiles_template_function) {
- $compiler->called_functions[] = trim($_name, "'\"");
- }
unset($_attr['name'], $_attr['assign'], $_attr['nocache']);
// set flag (compiled code of {function} must be included in cache file
- if ($compiler->nocache || $compiler->tag_nocache) {
+ if (!$compiler->template->caching || $compiler->nocache || $compiler->tag_nocache) {
$_nocache = 'true';
} else {
$_nocache = 'false';
@@ -75,56 +74,16 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
$_paramsArray[] = "'$_key'=>$_value";
}
}
- if (isset($compiler->template->properties['function'][$_name]['parameter'])) {
- foreach ($compiler->template->properties['function'][$_name]['parameter'] as $_key => $_value) {
- if (!isset($_attr[$_key])) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- }
- } elseif (isset($compiler->smarty->template_functions[$_name]['parameter'])) {
- foreach ($compiler->smarty->template_functions[$_name]['parameter'] as $_key => $_value) {
- if (!isset($_attr[$_key])) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- }
- }
- //varibale name?
- if (!(strpos($_name, '$') === false)) {
- $call_cache = $_name;
- $call_function = '$tmp = "smarty_template_function_".' . $_name . '; $tmp';
- } else {
- $_name = trim($_name, "'\"");
- $call_cache = "'{$_name}'";
- $call_function = 'smarty_template_function_' . $_name;
- }
-
$_params = 'array(' . implode(",", $_paramsArray) . ')';
- $_hash = str_replace('-', '_', $compiler->template->properties['nocache_hash']);
+ //$compiler->suppressNocacheProcessing = true;
// was there an assign attribute
if (isset($_assign)) {
- if ($compiler->template->caching) {
- $_output = "<?php ob_start(); Smarty_Internal_Function_Call_Handler::call ({$call_cache},\$_smarty_tpl,{$_params},'{$_hash}',{$_nocache}); \$_smarty_tpl->assign({$_assign}, ob_get_clean());?>\n";
- } else {
- $_output = "<?php ob_start(); {$call_function}(\$_smarty_tpl,{$_params}); \$_smarty_tpl->assign({$_assign}, ob_get_clean());?>\n";
- }
+ $_output =
+ "<?php ob_start();\n\$_smarty_tpl->smarty->ext->_tplFunction->callTemplateFunction(\$_smarty_tpl, {$_name}, {$_params}, {$_nocache});\n\$_smarty_tpl->assign({$_assign}, ob_get_clean());?>\n";
} else {
- if ($compiler->template->caching) {
- $_output = "<?php Smarty_Internal_Function_Call_Handler::call ({$call_cache},\$_smarty_tpl,{$_params},'{$_hash}',{$_nocache});?>\n";
- } else {
- $_output = "<?php {$call_function}(\$_smarty_tpl,{$_params});?>\n";
- }
+ $_output =
+ "<?php \$_smarty_tpl->smarty->ext->_tplFunction->callTemplateFunction(\$_smarty_tpl, {$_name}, {$_params}, {$_nocache});?>\n";
}
return $_output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_capture.php b/include/smarty/libs/sysplugins/smarty_internal_compile_capture.php
index 9a5071ebe..be45f3e94 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_capture.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_capture.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Capture
- *
* Compiles the {capture} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Capture Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -24,6 +23,7 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $shorttag_order = array('name');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -35,11 +35,12 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {capture} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
* @return string compiled code
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
@@ -51,29 +52,49 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
$compiler->_capture_stack[0][] = array($buffer, $assign, $append, $compiler->nocache);
// maybe nocache because of nocache variables
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- $_output = "<?php \$_smarty_tpl->_capture_stack[0][] = array($buffer, $assign, $append); ob_start(); ?>";
+ $_output = "<?php \$_smarty_tpl->_cache['capture_stack'][] = array($buffer, $assign, $append); ob_start(); ?>";
return $_output;
}
+ /**
+ * Compiles code for the {$smarty.capture.xxx}
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \SmartyCompilerException
+ */
+ public static function compileSpecialVariable($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
+ {
+ $tag = strtolower(trim($parameter[ 0 ], '"\''));
+ $name = isset($parameter[ 1 ]) ? $compiler->getId($parameter[ 1 ]) : false;
+ if (!$name) {
+ $compiler->trigger_template_error("missing or illegal \$smarty.{$tag} name attribute", null, true);
+ }
+ return "(isset(\$_smarty_tpl->_cache['__smarty_capture']['{$name}']) ? \$_smarty_tpl->_cache['__smarty_capture']['{$name}'] : null)";
+ }
}
/**
* Smarty Internal Plugin Compile Captureclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/capture} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
* @return string compiled code
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
@@ -84,15 +105,13 @@ class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase {
list($buffer, $assign, $append, $compiler->nocache) = array_pop($compiler->_capture_stack[0]);
- $_output = "<?php list(\$_capture_buffer, \$_capture_assign, \$_capture_append) = array_pop(\$_smarty_tpl->_capture_stack[0]);\n";
+ $_output = "<?php list(\$_capture_buffer, \$_capture_assign, \$_capture_append) = array_pop(\$_smarty_tpl->_cache['capture_stack']);\n";
$_output .= "if (!empty(\$_capture_buffer)) {\n";
$_output .= " if (isset(\$_capture_assign)) \$_smarty_tpl->assign(\$_capture_assign, ob_get_contents());\n";
$_output .= " if (isset( \$_capture_append)) \$_smarty_tpl->append( \$_capture_append, ob_get_contents());\n";
- $_output .= " Smarty::\$_smarty_vars['capture'][\$_capture_buffer]=ob_get_clean();\n";
+ $_output .= "\$_smarty_tpl->_cache['__smarty_capture'][\$_capture_buffer]=ob_get_clean();\n";
$_output .= "} else \$_smarty_tpl->capture_error();?>";
+
return $_output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_config_load.php b/include/smarty/libs/sysplugins/smarty_internal_compile_config_load.php
index deaa052c5..d2e50a08f 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_config_load.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_config_load.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Config Load
- *
* Compiles the {config load} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Config Load Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -24,62 +23,82 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $required_attributes = array('file');
+
/**
* Attribute definition: Overwrites base class.
*
* @var array
* @see Smarty_Internal_CompileBase
*/
- public $shorttag_order = array('file','section');
+ public $shorttag_order = array('file', 'section');
+
/**
* Attribute definition: Overwrites base class.
*
* @var array
* @see Smarty_Internal_CompileBase
*/
- public $optional_attributes = array('section', 'scope');
+ public $optional_attributes = array('section', 'scope', 'bubble_up');
+
+ /**
+ * Valid scope names
+ *
+ * @var array
+ */
+ public $valid_scopes = array('local' => true, 'parent' => true, 'root' => true, 'global' => true,
+ 'smarty' => true, 'tpl_root' => true);
/**
* Compiles code for the {config_load} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
* @return string compiled code
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
- static $_is_legal_scope = array('local' => true,'parent' => true,'root' => true,'global' => true);
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
if ($_attr['nocache'] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
+ $compiler->trigger_template_error('nocache option not allowed', null, true);
}
-
- // save posible attributes
+ // save possible attributes
$conf_file = $_attr['file'];
if (isset($_attr['section'])) {
$section = $_attr['section'];
} else {
$section = 'null';
}
- $scope = 'local';
- // scope setup
+ $_scope = Smarty::SCOPE_LOCAL;
if (isset($_attr['scope'])) {
$_attr['scope'] = trim($_attr['scope'], "'\"");
- if (isset($_is_legal_scope[$_attr['scope']])) {
- $scope = $_attr['scope'];
- } else {
- $compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno);
- }
+ if (!isset($this->valid_scopes[$_attr['scope']])) {
+ $compiler->trigger_template_error("illegal value '{$_attr['scope']}' for \"scope\" attribute", null, true);
+ }
+ if ($_attr['scope'] != 'local') {
+ if ($_attr['scope'] == 'parent') {
+ $_scope = Smarty::SCOPE_PARENT;
+ } elseif ($_attr['scope'] == 'root') {
+ $_scope = Smarty::SCOPE_ROOT;
+ } elseif ($_attr['scope'] == 'global') {
+ $_scope = Smarty::SCOPE_GLOBAL;
+ } elseif ($_attr['scope'] == 'smarty') {
+ $_scope = Smarty::SCOPE_SMARTY;
+ } elseif ($_attr['scope'] == 'tpl_root') {
+ $_scope = Smarty::SCOPE_TPL_ROOT;
+ }
+ $_scope += (isset($_attr['bubble_up']) && $_attr['bubble_up'] == 'false') ? 0 : Smarty::SCOPE_BUBBLE_UP;
+ }
}
+
// create config object
- $_output = "<?php \$_config = new Smarty_Internal_Config($conf_file, \$_smarty_tpl->smarty, \$_smarty_tpl);";
- $_output .= "\$_config->loadConfigVars($section, '$scope'); ?>";
+ $_output =
+ "<?php\n\$_smarty_tpl->smarty->ext->configLoad->_loadConfigFile(\$_smarty_tpl, {$conf_file}, {$section}, {$_scope});\n?>\n";
+
return $_output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_continue.php b/include/smarty/libs/sysplugins/smarty_internal_compile_continue.php
index 72a5f8653..2ee04c94e 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_continue.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_continue.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Continue
- *
* Compiles the {continue} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Continue Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -24,6 +23,7 @@ class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $optional_attributes = array('levels');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -35,24 +35,26 @@ class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {continue} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
if ($_attr['nocache'] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
+ $compiler->trigger_template_error('nocache option not allowed', null, true);
}
if (isset($_attr['levels'])) {
if (!is_numeric($_attr['levels'])) {
- $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno);
+ $compiler->trigger_template_error('level attribute must be a numeric constant', null, true);
}
$_levels = $_attr['levels'];
} else {
@@ -62,17 +64,14 @@ class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase {
$stack_count = count($compiler->_tag_stack) - 1;
while ($level_count > 0 && $stack_count >= 0) {
if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {
- $level_count--;
+ $level_count --;
}
- $stack_count--;
+ $stack_count --;
}
if ($level_count != 0) {
- $compiler->trigger_template_error("cannot continue {$_levels} level(s)", $compiler->lex->taglineno);
+ $compiler->trigger_template_error("cannot continue {$_levels} level(s)", null, true);
}
- $compiler->has_code = true;
- return "<?php continue {$_levels}?>";
- }
+ return "<?php continue {$_levels};?>";
+ }
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_debug.php b/include/smarty/libs/sysplugins/smarty_internal_compile_debug.php
index f50c7aee2..d73c81a10 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_debug.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_debug.php
@@ -1,28 +1,28 @@
<?php
/**
* Smarty Internal Plugin Compile Debug
- *
* Compiles the {debug} tag.
* It opens a window the the Smarty Debugging Console.
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Debug Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {debug} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -34,10 +34,8 @@ class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase {
$compiler->tag_nocache = true;
// display debug template
- $_output = "<?php \$_smarty_tpl->smarty->loadPlugin('Smarty_Internal_Debug'); Smarty_Internal_Debug::display_debug(\$_smarty_tpl); ?>";
+ $_output = "<?php \$_smarty_debug = new Smarty_Internal_Debug;\n \$_smarty_debug->display_debug(\$_smarty_tpl);\n";
+ $_output .= "unset(\$_smarty_debug);\n?>";
return $_output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_eval.php b/include/smarty/libs/sysplugins/smarty_internal_compile_eval.php
index 6cf481b50..407482f07 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_eval.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_eval.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Eval
- *
* Compiles the {eval} tag.
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Eval Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -37,13 +36,14 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
* @var array
* @see Smarty_Internal_CompileBase
*/
- public $shorttag_order = array('var','assign');
+ public $shorttag_order = array('var', 'assign');
/**
* Compiles code for the {eval} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
public function compile($args, $compiler)
@@ -53,21 +53,19 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
if (isset($_attr['assign'])) {
- // output will be stored in a smarty variable instead of beind displayed
+ // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign'];
}
// create template object
- $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'.".$_attr['var'].", \$_smarty_tpl->smarty, \$_smarty_tpl);";
+ $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'." . $_attr['var'] . ", \$_smarty_tpl->smarty, \$_smarty_tpl);";
//was there an assign attribute?
if (isset($_assign)) {
$_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());";
} else {
$_output .= "echo \$_template->fetch();";
}
+
return "<?php $_output ?>";
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_extends.php b/include/smarty/libs/sysplugins/smarty_internal_compile_extends.php
index fe14a4081..7ce3dcf6f 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_extends.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_extends.php
@@ -1,133 +1,134 @@
<?php
/**
-* Smarty Internal Plugin Compile extend
-*
-* Compiles the {extends} tag
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile extend
+ * Compiles the {extends} tag
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
/**
-* Smarty Internal Plugin Compile extend Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile extend Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Shared_Inheritance
+{
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $required_attributes = array('file');
+
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $shorttag_order = array('file');
+ * Array of names of optional attribute required by tag
+ * use array('_any') if there is no restriction of attributes names
+ *
+ * @var array
+ */
+ public $optional_attributes = array('extends_resource');
+
/**
- * mbstring.overload flag
- *
- * @var int
- */
- public $mbstring_overload = 0;
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $shorttag_order = array('file');
/**
- * Compiles code for the {extends} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @return string compiled code
- */
- public function compile($args, $compiler)
+ * Compiles code for the {extends} tag extends: resource
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \SmartyCompilerException
+ * @throws \SmartyException
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
- static $_is_stringy = array('string' => true, 'eval' => true);
- $this->_rdl = preg_quote($compiler->smarty->right_delimiter);
- $this->_ldl = preg_quote($compiler->smarty->left_delimiter);
- if (!$compiler->smarty->auto_literal) {
- $al = '\s*';
- } else {
- $al = '';
- }
- $filepath = $compiler->template->source->filepath;
- $this->mbstring_overload = ini_get('mbstring.func_overload') & 2;
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
if ($_attr['nocache'] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
+ $compiler->trigger_template_error('nocache option not allowed', $compiler->parser->lex->line - 1);
}
-
- $_smarty_tpl = $compiler->template;
- $include_file = null;
if (strpos($_attr['file'], '$_tmp') !== false) {
- $compiler->trigger_template_error('illegal value for file attribute', $compiler->lex->taglineno);
+ $compiler->trigger_template_error('illegal value for file attribute', $compiler->parser->lex->line - 1);
}
- eval('$include_file = ' . $_attr['file'] . ';');
- // create template object
- $_template = new $compiler->smarty->template_class($include_file, $compiler->smarty, $compiler->template);
- // save file dependency
- if (isset($_is_stringy[$_template->source->type])) {
- $template_sha1 = sha1($include_file);
- } else {
- $template_sha1 = sha1($_template->source->filepath);
- }
- if (isset($compiler->template->properties['file_dependency'][$template_sha1])) {
- $compiler->trigger_template_error("illegal recursive call of \"{$include_file}\"", $compiler->lex->line - 1);
- }
- $compiler->template->properties['file_dependency'][$template_sha1] = array($_template->source->filepath, $_template->source->timestamp, $_template->source->type);
- $_content = ($this->mbstring_overload ? mb_substr($compiler->lex->data, $compiler->lex->counter - 1, 20000000, 'latin1') : substr($compiler->lex->data, $compiler->lex->counter - 1));
- if (preg_match_all("!({$this->_ldl}{$al}block\s(.+?)\s*{$this->_rdl})!", $_content, $s) !=
- preg_match_all("!({$this->_ldl}{$al}/block\s*{$this->_rdl})!", $_content, $c)) {
- $compiler->trigger_template_error('unmatched {block} {/block} pairs');
- }
- preg_match_all("!{$this->_ldl}{$al}block\s(.+?)\s*{$this->_rdl}|{$this->_ldl}{$al}/block\s*{$this->_rdl}|{$this->_ldl}\*([\S\s]*?)\*{$this->_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE);
- $_result_count = count($_result[0]);
- $_start = 0;
- while ($_start+1 < $_result_count) {
- $_end = 0;
- $_level = 1;
- if (($this->mbstring_overload ? mb_substr($_result[0][$_start][0],0,mb_strlen($compiler->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start][0],0,strlen($compiler->smarty->left_delimiter)+1)) == $compiler->smarty->left_delimiter.'*') {
- $_start++;
- continue;
- }
- while ($_level != 0) {
- $_end++;
- if (($this->mbstring_overload ? mb_substr($_result[0][$_start + $_end][0],0,mb_strlen($compiler->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start + $_end][0],0,strlen($compiler->smarty->left_delimiter)+1)) == $compiler->smarty->left_delimiter.'*') {
- continue;
- }
- if (!strpos($_result[0][$_start + $_end][0], '/')) {
- $_level++;
+ // add code to initialize inheritance
+ $this->registerInit($compiler, true);
+ $file = trim($_attr['file'], '\'"');
+ if (strlen($file) > 8 && substr($file, 0, 8) == 'extends:') {
+ // generate code for each template
+ $files = array_reverse(explode('|', substr($file, 8)));
+ $i = 0;
+ foreach ($files as $file) {
+ if ($file[0] == '"') {
+ $file = trim($file, '".');
} else {
- $_level--;
+ $file = "'{$file}'";
}
+ $i ++;
+ if ($i == count($files) && isset($_attr['extends_resource'])) {
+ $this->compileEndChild($compiler);
+ }
+ $this->compileInclude($compiler, $file);
}
- $_block_content = str_replace($compiler->smarty->left_delimiter . '$smarty.block.parent' . $compiler->smarty->right_delimiter, '%%%%SMARTY_PARENT%%%%',
- ($this->mbstring_overload ? mb_substr($_content, $_result[0][$_start][1] + mb_strlen($_result[0][$_start][0], 'latin1'), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + mb_strlen($_result[0][$_start][0], 'latin1'), 'latin1') : substr($_content, $_result[0][$_start][1] + strlen($_result[0][$_start][0]), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + strlen($_result[0][$_start][0]))));
- Smarty_Internal_Compile_Block::saveBlockData($_block_content, $_result[0][$_start][0], $compiler->template, $filepath);
- $_start = $_start + $_end + 1;
- }
- if ($_template->source->type == 'extends') {
- $_template->block_data = $compiler->template->block_data;
- }
- $compiler->template->source->content = $_template->source->content;
- if ($_template->source->type == 'extends') {
- $compiler->template->block_data = $_template->block_data;
- foreach ($_template->source->components as $key => $component) {
- $compiler->template->properties['file_dependency'][$key] = array($component->filepath, $component->timestamp, $component->type);
+ if (!isset($_attr['extends_resource'])) {
+ $this->compileEndChild($compiler);
}
+ } else {
+ $this->compileEndChild($compiler);
+ $this->compileInclude($compiler, $_attr['file']);
}
- $compiler->template->source->filepath = $_template->source->filepath;
- $compiler->abort_and_recompile = true;
+ $compiler->has_code = false;
return '';
}
-}
+ /**
+ * Add code for inheritance endChild() method to end of template
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ */
+ private function compileEndChild(Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser,
+ "<?php \$_smarty_tpl->ext->_inheritance->endChild(\$_smarty_tpl);\n?>\n");
+ }
-?> \ No newline at end of file
+ /**
+ * Add code for including subtemplate to end of template
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ * @param string $file subtemplate name
+ */
+ private function compileInclude(Smarty_Internal_TemplateCompilerBase $compiler, $file)
+ {
+ $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser,
+ $compiler->compileTag('include',
+ array($file,
+ array('scope' => 'parent'))));
+ }
+
+ /**
+ * Create source code for {extends} from source components array
+ *
+ * @param []\Smarty_Internal_Template_Source $components
+ *
+ * @return string
+ */
+ public static function extendsSourceArrayCode($components)
+ {
+ $resources = array();
+ foreach ($components as $source) {
+ $resources[] = $source->resource;
+ }
+ return '{extends file=\'extends:' . join('|', $resources) . '\' extends_resource=true}';
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_for.php b/include/smarty/libs/sysplugins/smarty_internal_compile_for.php
index 057f4fb79..7b86d4859 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_for.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_for.php
@@ -1,43 +1,40 @@
<?php
/**
* Smarty Internal Plugin Compile For
- *
* Compiles the {for} {forelse} {/for} tags
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile For Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {for} tag
- *
- * Smarty 3 does implement two different sytaxes:
- *
+ * Smarty 3 does implement two different syntax's:
* - {for $var in $array}
* For looping over arrays or iterators
- *
* - {for $x=0; $x<$y; $x++}
* For general loops
+ * The parser is generating different sets of attribute by which this compiler can
+ * determine which syntax is used.
*
- * The parser is gereration different sets of attribute by which this compiler can
- * determin which syntax is used.
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
{
+ $compiler->loopNesting++;
if ($parameter == 0) {
$this->required_attributes = array('start', 'to');
$this->optional_attributes = array('max', 'step');
@@ -48,30 +45,51 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
- $output = "<?php ";
+ $output = "<?php\n";
if ($parameter == 1) {
foreach ($_attr['start'] as $_statement) {
- $output .= " \$_smarty_tpl->tpl_vars[$_statement[var]] = new Smarty_Variable;";
- $output .= " \$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value];\n";
+ if (is_array($_statement['var'])) {
+ $var = $_statement['var']['var'];
+ $index = $_statement['var']['smarty_internal_index'];
+ } else {
+ $var = $_statement['var'];
+ $index = '';
+ }
+ $output .= "\$_smarty_tpl->tpl_vars[$var] = new Smarty_Variable;\n";
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->value{$index} = {$_statement['value']};\n";
}
- $output .= " if ($_attr[ifexp]){ for (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$_attr[var]]->value$_attr[step]){\n";
+ if (is_array($_attr['var'])) {
+ $var = $_attr['var']['var'];
+ $index = $_attr['var']['smarty_internal_index'];
+ } else {
+ $var = $_attr['var'];
+ $index = '';
+ }
+ $output .= "if ($_attr[ifexp]) {\nfor (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$var]->value{$index}$_attr[step]) {\n";
} else {
$_statement = $_attr['start'];
- $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]] = new Smarty_Variable;";
+ if (is_array($_statement['var'])) {
+ $var = $_statement['var']['var'];
+ $index = $_statement['var']['smarty_internal_index'];
+ } else {
+ $var = $_statement['var'];
+ $index = '';
+ }
+ $output .= "\$_smarty_tpl->tpl_vars[$var] = new Smarty_Variable;";
if (isset($_attr['step'])) {
- $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->step = $_attr[step];";
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->step = $_attr[step];";
} else {
- $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->step = 1;";
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->step = 1;";
}
if (isset($_attr['max'])) {
- $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int)min(ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step)),$_attr[max]);\n";
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->total = (int) min(ceil((\$_smarty_tpl->tpl_vars[$var]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$var]->step)),$_attr[max]);\n";
} else {
- $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int)ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step));\n";
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->total = (int) ceil((\$_smarty_tpl->tpl_vars[$var]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$var]->step));\n";
}
- $output .= "if (\$_smarty_tpl->tpl_vars[$_statement[var]]->total > 0){\n";
- $output .= "for (\$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value], \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration = 1;\$_smarty_tpl->tpl_vars[$_statement[var]]->iteration <= \$_smarty_tpl->tpl_vars[$_statement[var]]->total;\$_smarty_tpl->tpl_vars[$_statement[var]]->value += \$_smarty_tpl->tpl_vars[$_statement[var]]->step, \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration++){\n";
- $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->first = \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration == 1;";
- $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->last = \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration == \$_smarty_tpl->tpl_vars[$_statement[var]]->total;";
+ $output .= "if (\$_smarty_tpl->tpl_vars[$var]->total > 0) {\n";
+ $output .= "for (\$_smarty_tpl->tpl_vars[$var]->value{$index} = $_statement[value], \$_smarty_tpl->tpl_vars[$var]->iteration = 1;\$_smarty_tpl->tpl_vars[$var]->iteration <= \$_smarty_tpl->tpl_vars[$var]->total;\$_smarty_tpl->tpl_vars[$var]->value{$index} += \$_smarty_tpl->tpl_vars[$var]->step, \$_smarty_tpl->tpl_vars[$var]->iteration++) {\n";
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->first = \$_smarty_tpl->tpl_vars[$var]->iteration == 1;";
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->last = \$_smarty_tpl->tpl_vars[$var]->iteration == \$_smarty_tpl->tpl_vars[$var]->total;";
}
$output .= "?>";
@@ -81,55 +99,57 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
// return compiled code
return $output;
}
-
}
/**
* Smarty Internal Plugin Compile Forelse Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {forelse} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
{
// check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
+ $_attr = $this->getAttributes($compiler, $args);
list($openTag, $nocache) = $this->closeTag($compiler, array('for'));
$this->openTag($compiler, 'forelse', array('forelse', $nocache));
+
return "<?php }} else { ?>";
}
-
}
/**
* Smarty Internal Plugin Compile Forclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/for} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
public function compile($args, $compiler, $parameter)
{
+ $compiler->loopNesting--;
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
// must endblock be nocache?
@@ -139,13 +159,11 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase {
list($openTag, $compiler->nocache) = $this->closeTag($compiler, array('for', 'forelse'));
- if ($openTag == 'forelse') {
- return "<?php } ?>";
- } else {
- return "<?php }} ?>";
- }
+ $output = "<?php }\n";
+ if ($openTag != 'forelse') {
+ $output .= "}\n";
+ }
+ $output .= "?>\n";
+ return $output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_foreach.php b/include/smarty/libs/sysplugins/smarty_internal_compile_foreach.php
index 1354c89d5..178a0a52c 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_foreach.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_foreach.php
@@ -1,21 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Foreach
- *
* Compiles the {foreach} {foreachelse} {/foreach} tags
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Foreach Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
+class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_ForeachSection
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -23,6 +23,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $required_attributes = array('from', 'item');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -30,137 +31,241 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $optional_attributes = array('name', 'key');
+
/**
* Attribute definition: Overwrites base class.
*
* @var array
* @see Smarty_Internal_CompileBase
*/
- public $shorttag_order = array('from','item','key','name');
+ public $shorttag_order = array('from', 'item', 'key', 'name');
+
+ /**
+ * counter
+ *
+ * @var int
+ */
+ public $counter = 0;
+
+ /**
+ * Name of this tag
+ *
+ * @var string
+ */
+ public $tagName = 'foreach';
+
+ /**
+ * Valid properties of $smarty.foreach.name.xxx variable
+ *
+ * @var array
+ */
+ public $nameProperties = array('first', 'last', 'index', 'iteration', 'show', 'total');
+
+ /**
+ * Valid properties of $item@xxx variable
+ *
+ * @var array
+ */
+ public $itemProperties = array('first', 'last', 'index', 'iteration', 'show', 'total', 'key');
+
+ /**
+ * Flag if tag had name attribute
+ *
+ * @var bool
+ */
+ public $isNamed = false;
/**
* Compiles code for the {foreach} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
- $tpl = $compiler->template;
+ $compiler->loopNesting ++;
+ // init
+ $this->isNamed = false;
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
-
$from = $_attr['from'];
- $item = $_attr['item'];
- if (!strncmp("\$_smarty_tpl->tpl_vars[$item]", $from, strlen($item) + 24)) {
- $compiler->trigger_template_error("item variable {$item} may not be the same variable as at 'from'", $compiler->lex->taglineno);
+ $item = $compiler->getId($_attr['item']);
+ if ($item === false) {
+ $item = $compiler->getVariableName($_attr['item']);
}
-
+ $attributes = array('item' => $item);
if (isset($_attr['key'])) {
- $key = $_attr['key'];
- } else {
- $key = null;
+ $key = $compiler->getId($_attr['key']);
+ if ($key === false) {
+ $key = $compiler->getVariableName($_attr['key']);
+ }
+ $attributes['key'] = $key;
+ }
+ if (isset($_attr['name'])) {
+ $this->isNamed = true;
+ $attributes['name'] = $compiler->getId($_attr['name']);
+ }
+ foreach ($attributes as $a => $v) {
+ if ($v === false) {
+ $compiler->trigger_template_error("'{$a}' attribute/variable has illegal value", null, true);
+ }
+ }
+ $fromName = $compiler->getVariableName($_attr['from']);
+ if ($fromName) {
+ foreach (array('item', 'key') as $a) {
+ if (isset($attributes[$a]) && $attributes[$a] == $fromName) {
+ $compiler->trigger_template_error("'{$a}' and 'from' may not have same variable name '{$fromName}'",
+ null, true);
+ }
+ }
+ }
+
+ $itemVar = "\$_smarty_tpl->tpl_vars['{$item}']";
+ $local = '$__foreach_' . (isset($attributes['name']) ? $attributes['name'] : $attributes['item']) . '_' .
+ $this->counter ++ . '_';
+ $needIteration = false;
+ // search for used tag attributes
+ $itemAttr = array();
+ $namedAttr = array();
+ $this->scanForProperties($attributes, $compiler);
+ if (!empty($this->matchResults['item'])) {
+ $itemAttr = $this->matchResults['item'];
+ }
+ if (!empty($this->matchResults['named'])) {
+ $namedAttr = $this->matchResults['named'];
+ }
+ if (isset($itemAttr['last'])) {
+ $needIteration = true;
+ }
+ if (isset($namedAttr['last'])) {
+ $needIteration = true;
}
- $this->openTag($compiler, 'foreach', array('foreach', $compiler->nocache, $item, $key));
+ $keyTerm = '';
+ if (isset($itemAttr['key'])) {
+ $keyTerm = "{$itemVar}->key => ";
+ } elseif (isset($attributes['key'])) {
+ $keyTerm = "\$_smarty_tpl->tpl_vars['{$key}']->value => ";
+ }
+
+ $saveVars = array();
+ $restoreVars = array();
+ if ($this->isNamed) {
+ $foreachVar = "\$_smarty_tpl->tpl_vars['__smarty_foreach_{$attributes['name']}']";
+ if (!empty($namedAttr)) {
+ $saveVars['saved'] = "isset({$foreachVar}) ? {$foreachVar} : false;";
+ $restoreVars[] = "if ({$local}saved) {\n{$foreachVar} = {$local}saved;\n}\n";
+ }
+ }
+ foreach (array('item', 'key') as $a) {
+ if (isset($attributes[$a])) {
+ $saveVars['saved_' . $a] =
+ "isset(\$_smarty_tpl->tpl_vars['{$attributes[$a]}']) ? \$_smarty_tpl->tpl_vars['{$attributes[$a]}'] : false;";
+ $restoreVars[] =
+ "if ({$local}saved_{$a}) {\n\$_smarty_tpl->tpl_vars['{$attributes[$a]}'] = {$local}saved_{$a};\n}\n";
+ }
+ }
+ $this->openTag($compiler, 'foreach',
+ array('foreach', $compiler->nocache, $local, $restoreVars, $itemVar, true));
// maybe nocache because of nocache variables
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- if (isset($_attr['name'])) {
- $name = $_attr['name'];
- $has_name = true;
- $SmartyVarName = '$smarty.foreach.' . trim($name, '\'"') . '.';
- } else {
- $name = null;
- $has_name = false;
- }
- $ItemVarName = '$' . trim($item, '\'"') . '@';
- // evaluates which Smarty variables and properties have to be computed
- if ($has_name) {
- $usesSmartyFirst = strpos($tpl->source->content, $SmartyVarName . 'first') !== false;
- $usesSmartyLast = strpos($tpl->source->content, $SmartyVarName . 'last') !== false;
- $usesSmartyIndex = strpos($tpl->source->content, $SmartyVarName . 'index') !== false;
- $usesSmartyIteration = strpos($tpl->source->content, $SmartyVarName . 'iteration') !== false;
- $usesSmartyShow = strpos($tpl->source->content, $SmartyVarName . 'show') !== false;
- $usesSmartyTotal = strpos($tpl->source->content, $SmartyVarName . 'total') !== false;
- } else {
- $usesSmartyFirst = false;
- $usesSmartyLast = false;
- $usesSmartyTotal = false;
- $usesSmartyShow = false;
- }
-
- $usesPropFirst = $usesSmartyFirst || strpos($tpl->source->content, $ItemVarName . 'first') !== false;
- $usesPropLast = $usesSmartyLast || strpos($tpl->source->content, $ItemVarName . 'last') !== false;
- $usesPropIndex = $usesPropFirst || strpos($tpl->source->content, $ItemVarName . 'index') !== false;
- $usesPropIteration = $usesPropLast || strpos($tpl->source->content, $ItemVarName . 'iteration') !== false;
- $usesPropShow = strpos($tpl->source->content, $ItemVarName . 'show') !== false;
- $usesPropTotal = $usesSmartyTotal || $usesSmartyShow || $usesPropShow || $usesPropLast || strpos($tpl->source->content, $ItemVarName . 'total') !== false;
// generate output code
- $output = "<?php ";
- $output .= " \$_smarty_tpl->tpl_vars[$item] = new Smarty_Variable; \$_smarty_tpl->tpl_vars[$item]->_loop = false;\n";
- if ($key != null) {
- $output .= " \$_smarty_tpl->tpl_vars[$key] = new Smarty_Variable;\n";
- }
- $output .= " \$_from = $from; if (!is_array(\$_from) && !is_object(\$_from)) { settype(\$_from, 'array');}\n";
- if ($usesPropTotal) {
- $output .= " \$_smarty_tpl->tpl_vars[$item]->total= \$_smarty_tpl->_count(\$_from);\n";
+ $output = "<?php\n";
+ $output .= "\$_from = $from;\n";
+ $output .= "if (!is_array(\$_from) && !is_object(\$_from)) {\n";
+ $output .= "settype(\$_from, 'array');\n";
+ $output .= "}\n";
+ foreach ($saveVars as $k => $code) {
+ $output .= "{$local}{$k} = {$code}\n";
}
- if ($usesPropIteration) {
- $output .= " \$_smarty_tpl->tpl_vars[$item]->iteration=0;\n";
+ if (isset($itemAttr['show']) || isset($itemAttr['total']) || isset($namedAttr['total']) || isset($namedAttr['show']) || isset($itemAttr['last']) || isset($namedAttr['last'])) {
+ $output .= "{$local}total = \$_smarty_tpl->smarty->ext->_foreach->count(\$_from);\n";
}
- if ($usesPropIndex) {
- $output .= " \$_smarty_tpl->tpl_vars[$item]->index=-1;\n";
+ $output .= "{$itemVar} = new Smarty_Variable();\n";
+ if (isset($itemAttr['show'])) {
+ $output .= "{$itemVar}->show = ({$local}total > 0);\n";
}
- if ($usesPropShow) {
- $output .= " \$_smarty_tpl->tpl_vars[$item]->show = (\$_smarty_tpl->tpl_vars[$item]->total > 0);\n";
+ if (isset($itemAttr['total'])) {
+ $output .= "{$itemVar}->total= {$local}total;\n";
}
- if ($has_name) {
- if ($usesSmartyTotal) {
- $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['total'] = \$_smarty_tpl->tpl_vars[$item]->total;\n";
+ if ($this->isNamed) {
+ $prop = array();
+ if (isset($namedAttr['total'])) {
+ $prop['total'] = "'total' => {$local}total";
}
- if ($usesSmartyIteration) {
- $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['iteration']=0;\n";
+ if (isset($namedAttr['iteration'])) {
+ $prop['iteration'] = "'iteration' => 0";
}
- if ($usesSmartyIndex) {
- $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['index']=-1;\n";
+ if (isset($namedAttr['index'])) {
+ $prop['index'] = "'index' => -1";
}
- if ($usesSmartyShow) {
- $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['show']=(\$_smarty_tpl->tpl_vars[$item]->total > 0);\n";
+ if (isset($namedAttr['show'])) {
+ $prop['show'] = "'show' => ({$local}total > 0)";
}
+ if (!empty($namedAttr)) {
+ $_vars = 'array(' . join(', ', $prop) . ')';
+ $output .= "{$foreachVar} = new Smarty_Variable({$_vars});\n";
+ }
+ }
+ if (isset($attributes['key'])) {
+ $output .= "\$_smarty_tpl->tpl_vars['{$key}'] = new Smarty_Variable();\n";
+ }
+ if (isset($namedAttr['first']) || isset($itemAttr['first'])) {
+ $output .= "{$local}first = true;\n";
+ }
+ if (isset($itemAttr['iteration'])) {
+ $output .= "{$itemVar}->iteration=0;\n";
+ }
+ if (isset($itemAttr['index'])) {
+ $output .= "{$itemVar}->index=-1;\n";
+ }
+ if ($needIteration) {
+ $output .= "{$local}iteration=0;\n";
}
- $output .= "foreach (\$_from as \$_smarty_tpl->tpl_vars[$item]->key => \$_smarty_tpl->tpl_vars[$item]->value){\n\$_smarty_tpl->tpl_vars[$item]->_loop = true;\n";
- if ($key != null) {
- $output .= " \$_smarty_tpl->tpl_vars[$key]->value = \$_smarty_tpl->tpl_vars[$item]->key;\n";
+ $output .= "{$itemVar}->_loop = false;\n";
+ $output .= "foreach (\$_from as {$keyTerm}{$itemVar}->value) {\n";
+ $output .= "{$itemVar}->_loop = true;\n";
+ if (isset($attributes['key']) && isset($itemAttr['key'])) {
+ $output .= "\$_smarty_tpl->tpl_vars['{$key}']->value = {$itemVar}->key;\n";
}
- if ($usesPropIteration) {
- $output .= " \$_smarty_tpl->tpl_vars[$item]->iteration++;\n";
+ if (isset($itemAttr['iteration'])) {
+ $output .= "{$itemVar}->iteration++;\n";
}
- if ($usesPropIndex) {
- $output .= " \$_smarty_tpl->tpl_vars[$item]->index++;\n";
+ if (isset($itemAttr['index'])) {
+ $output .= "{$itemVar}->index++;\n";
}
- if ($usesPropFirst) {
- $output .= " \$_smarty_tpl->tpl_vars[$item]->first = \$_smarty_tpl->tpl_vars[$item]->index === 0;\n";
+ if ($needIteration) {
+ $output .= "{$local}iteration++;\n";
}
- if ($usesPropLast) {
- $output .= " \$_smarty_tpl->tpl_vars[$item]->last = \$_smarty_tpl->tpl_vars[$item]->iteration === \$_smarty_tpl->tpl_vars[$item]->total;\n";
+ if (isset($itemAttr['first'])) {
+ $output .= "{$itemVar}->first = {$local}first;\n";
}
- if ($has_name) {
- if ($usesSmartyFirst) {
- $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['first'] = \$_smarty_tpl->tpl_vars[$item]->first;\n";
+ if (isset($itemAttr['last'])) {
+ $output .= "{$itemVar}->last = {$local}iteration == {$local}total;\n";
+ }
+ if ($this->isNamed) {
+ if (isset($namedAttr['iteration'])) {
+ $output .= "{$foreachVar}->value['iteration']++;\n";
}
- if ($usesSmartyIteration) {
- $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['iteration']++;\n";
+ if (isset($namedAttr['index'])) {
+ $output .= "{$foreachVar}->value['index']++;\n";
}
- if ($usesSmartyIndex) {
- $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['index']++;\n";
+ if (isset($namedAttr['first'])) {
+ $output .= "{$foreachVar}->value['first'] = {$local}first;\n";
}
- if ($usesSmartyLast) {
- $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['last'] = \$_smarty_tpl->tpl_vars[$item]->last;\n";
+ if (isset($namedAttr['last'])) {
+ $output .= "{$foreachVar}->value['last'] = {$local}iteration == {$local}total;\n";
}
}
+ if (isset($namedAttr['first']) || isset($itemAttr['first'])) {
+ $output .= "{$local}first = false;\n";
+ }
+ $output .= "{$local}saved_local_item = {$itemVar};\n";
$output .= "?>";
return $output;
@@ -170,62 +275,73 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
/**
* Smarty Internal Plugin Compile Foreachelse Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {foreachelse} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
- list($openTag, $nocache, $item, $key) = $this->closeTag($compiler, array('foreach'));
- $this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $item, $key));
-
- return "<?php }\nif (!\$_smarty_tpl->tpl_vars[$item]->_loop) {\n?>";
+ list($openTag, $nocache, $local, $restoreVars, $itemVar, $foo) = $this->closeTag($compiler, array('foreach'));
+ $this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $local, $restoreVars, $itemVar, false));
+ $output = "<?php\n";
+ $output .= "{$itemVar} = {$local}saved_local_item;\n";
+ $output .= "}\n";
+ $output .= "if (!{$itemVar}->_loop) {\n?>";
+ return $output;
}
-
}
/**
* Smarty Internal Plugin Compile Foreachclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/foreach} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
+ $compiler->loopNesting --;
// must endblock be nocache?
if ($compiler->nocache) {
$compiler->tag_nocache = true;
}
- list($openTag, $compiler->nocache, $item, $key) = $this->closeTag($compiler, array('foreach', 'foreachelse'));
+ list($openTag, $compiler->nocache, $local, $restoreVars, $itemVar, $restore) =
+ $this->closeTag($compiler, array('foreach', 'foreachelse'));
+ $output = "<?php\n";
- return "<?php } ?>";
- }
+ if ($restore) {
+ $output .= "{$itemVar} = {$local}saved_local_item;\n";
+ }
+ $output .= "}\n";
+ foreach ($restoreVars as $restore) {
+ $output .= $restore;
+ }
+ $output .= "?>";
+ return $output;
+ }
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_function.php b/include/smarty/libs/sysplugins/smarty_internal_compile_function.php
index 7821d2038..28f335949 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_function.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_function.php
@@ -1,21 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Function
- *
* Compiles the {function} {/function} tags
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Function Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
+class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
@@ -24,6 +24,7 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $required_attributes = array('name');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -31,6 +32,7 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $shorttag_order = array('name');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -42,125 +44,167 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {function} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return boolean true
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return bool true
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
+ $compiler->loopNesting++;
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
if ($_attr['nocache'] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
+ $compiler->trigger_template_error('nocache option not allowed', null, true);
}
unset($_attr['nocache']);
- $save = array($_attr, $compiler->parser->current_buffer,
- $compiler->template->has_nocache_code, $compiler->template->required_plugins);
- $this->openTag($compiler, 'function', $save);
$_name = trim($_attr['name'], "'\"");
- unset($_attr['name']);
- // set flag that we are compiling a template function
- $compiler->compiles_template_function = true;
- $compiler->template->properties['function'][$_name]['parameter'] = array();
- $_smarty_tpl = $compiler->template;
- foreach ($_attr as $_key => $_data) {
- eval ('$tmp='.$_data.';');
- $compiler->template->properties['function'][$_name]['parameter'][$_key] = $tmp;
- }
- $compiler->smarty->template_functions[$_name]['parameter'] = $compiler->template->properties['function'][$_name]['parameter'];
- if ($compiler->template->caching) {
- $output = '';
- } else {
- $output = "<?php if (!function_exists('smarty_template_function_{$_name}')) {
- function smarty_template_function_{$_name}(\$_smarty_tpl,\$params) {
- \$saved_tpl_vars = \$_smarty_tpl->tpl_vars;
- foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);};
- foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";
- }
- // Init temporay context
- $compiler->template->required_plugins = array('compiled' => array(), 'nocache' => array());
- $compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser);
- $compiler->parser->current_buffer->append_subtree(new _smarty_tag($compiler->parser, $output));
- $compiler->template->has_nocache_code = false;
- $compiler->has_code = false;
- $compiler->template->properties['function'][$_name]['compiled'] = '';
+ $compiler->parent_compiler->tpl_function[$_name] = $compiler->parent_compiler->template->tpl_function[$_name] = array();
+ $save = array($_attr, $compiler->parser->current_buffer, $compiler->template->compiled->has_nocache_code,
+ $compiler->template->caching);
+ $this->openTag($compiler, 'function', $save);
+ // Init temporary context
+ $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
+ $compiler->template->compiled->has_nocache_code = false;
return true;
}
-
}
/**
* Smarty Internal Plugin Compile Functionclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase {
+class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
+{
+
+ /**
+ * Compiler object
+ *
+ * @var object
+ */
+ private $compiler = null;
/**
* Compiles code for the {/function} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return boolean true
+ * @param array $args array with attributes from parser
+ * @param object|\Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return bool true
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
- $_attr = $this->getAttributes($compiler, $args);
+ $compiler->loopNesting--;
+ $this->compiler = $compiler;
$saved_data = $this->closeTag($compiler, array('function'));
- $_name = trim($saved_data[0]['name'], "'\"");
- // build plugin include code
- $plugins_string = '';
- if (!empty($compiler->template->required_plugins['compiled'])) {
- $plugins_string = '<?php ';
- foreach($compiler->template->required_plugins['compiled'] as $tmp) {
- foreach($tmp as $data) {
- $plugins_string .= "if (!is_callable('{$data['function']}')) include '{$data['file']}';\n";
- }
+ $_attr = $saved_data[0];
+ $_name = trim($_attr['name'], "'\"");
+ $compiler->parent_compiler->tpl_function[$_name]['called_functions'] = $compiler->parent_compiler->template->tpl_function[$_name]['called_functions'] = $compiler->called_functions;
+ $compiler->parent_compiler->tpl_function[$_name]['compiled_filepath'] = $compiler->parent_compiler->template->tpl_function[$_name]['compiled_filepath'] = $compiler->parent_compiler->template->compiled->filepath;
+ $compiler->parent_compiler->tpl_function[$_name]['uid'] = $compiler->parent_compiler->template->tpl_function[$_name]['uid'] = $compiler->template->source->uid;
+ $compiler->called_functions = array();
+ $_parameter = $_attr;
+ unset($_parameter['name']);
+ // default parameter
+ $_paramsArray = array();
+ foreach ($_parameter as $_key => $_value) {
+ if (is_int($_key)) {
+ $_paramsArray[] = "$_key=>$_value";
+ } else {
+ $_paramsArray[] = "'$_key'=>$_value";
}
- $plugins_string .= '?>';
}
- if (!empty($compiler->template->required_plugins['nocache'])) {
- $plugins_string .= "<?php echo '/*%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/<?php ";
- foreach($compiler->template->required_plugins['nocache'] as $tmp) {
- foreach($tmp as $data) {
- $plugins_string .= "if (!is_callable(\'{$data['function']}\')) include \'{$data['file']}\';\n";
+ if (!empty($_paramsArray)) {
+ $_params = 'array(' . implode(",", $_paramsArray) . ')';
+ $_paramsCode = "\$params = array_merge($_params, \$params);\n";
+ } else {
+ $_paramsCode = '';
+ }
+ $_functionCode = $compiler->parser->current_buffer;
+ // setup buffer for template function code
+ $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
+
+ $_funcName = "smarty_template_function_{$_name}_{$compiler->template->compiled->nocache_hash}";
+ $_funcNameCaching = $_funcName . '_nocache';
+ if ($compiler->template->compiled->has_nocache_code) {
+ $compiler->parent_compiler->tpl_function[$_name]['call_name_caching'] = $compiler->parent_compiler->template->tpl_function[$_name]['call_name_caching'] = $_funcNameCaching;
+ $output = "<?php\n";
+ $output .= "/* {$_funcNameCaching} */\n";
+ $output .= "if (!function_exists('{$_funcNameCaching}')) {\n";
+ $output .= "function {$_funcNameCaching} (\$_smarty_tpl,\$params) {\n";
+ $output .= "ob_start();\n";
+ $output .= "\$_smarty_tpl->compiled->has_nocache_code = true;\n";
+ $output .= $_paramsCode;
+ $output .= "\$_smarty_tpl->_cache['saved_tpl_vars'][] = \$_smarty_tpl->tpl_vars;\n";
+ $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value);\n}";
+ $output .= "\$params = var_export(\$params, true);\n";
+ $output .= "echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/<?php ";
+ $output .= "\\\$saved_tpl_vars = \\\$_smarty_tpl->tpl_vars;\nforeach (\$params as \\\$key => \\\$value) {\n\\\$_smarty_tpl->tpl_vars[\\\$key] = new Smarty_Variable(\\\$value);\n}\n?>";
+ $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\n\";?>";
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output));
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
+ $output = "<?php echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/<?php ";
+ $output .= "foreach (Smarty::\\\$global_tpl_vars as \\\$key => \\\$value){\n";
+ $output .= "if (!isset(\\\$_smarty_tpl->tpl_vars[\\\$key]) || \\\$_smarty_tpl->tpl_vars[\\\$key] === \\\$value) \\\$saved_tpl_vars[\\\$key] = \\\$value;\n}\n";
+ $output .= "\\\$_smarty_tpl->tpl_vars = \\\$saved_tpl_vars;?>\n";
+ $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\";\n?>";
+ $output .= "<?php echo str_replace('{$compiler->template->compiled->nocache_hash}', \$_smarty_tpl->compiled->nocache_hash, ob_get_clean());\n";
+ $output .= "\$_smarty_tpl->tpl_vars = array_pop(\$_smarty_tpl->_cache['saved_tpl_vars']);\n}\n}\n";
+ $output .= "/*/ {$_funcName}_nocache */\n\n";
+ $output .= "?>\n";
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output));
+ $_functionCode = new Smarty_Internal_ParseTree_Tag($compiler->parser, preg_replace_callback("/((<\?php )?echo '\/\*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/([\S\s]*?)\/\*\/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/", array($this,
+ 'removeNocache'), $_functionCode->to_smarty_php($compiler->parser)));
+ }
+ $compiler->parent_compiler->tpl_function[$_name]['call_name'] = $compiler->parent_compiler->template->tpl_function[$_name]['call_name'] = $_funcName;
+ $output = "<?php\n";
+ $output .= "/* {$_funcName} */\n";
+ $output .= "if (!function_exists('{$_funcName}')) {\n";
+ $output .= "function {$_funcName}(\$_smarty_tpl,\$params) {\n";
+ $output .= "\$saved_tpl_vars = \$_smarty_tpl->tpl_vars;\n";
+ $output .= $_paramsCode;
+ $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value);\n}?>";
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output));
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
+ $output = "<?php foreach (Smarty::\$global_tpl_vars as \$key => \$value){\n";
+ $output .= "if (!isset(\$_smarty_tpl->tpl_vars[\$key]) || \$_smarty_tpl->tpl_vars[\$key] === \$value) \$saved_tpl_vars[\$key] = \$value;\n}\n";
+ $output .= "\$_smarty_tpl->tpl_vars = \$saved_tpl_vars;\n}\n}\n";
+ $output .= "/*/ {$_funcName} */\n\n";
+ $output .= "?>\n";
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output));
+ $compiler->parent_compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser);
+ // nocache plugins must be copied
+ if (!empty($compiler->template->compiled->required_plugins['nocache'])) {
+ foreach ($compiler->template->compiled->required_plugins['nocache'] as $plugin => $tmp) {
+ foreach ($tmp as $type => $data) {
+ $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$plugin][$type] = $data;
}
}
- $plugins_string .= "?>/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/';?>\n";
- }
- // remove last line break from function definition
- $last = count($compiler->parser->current_buffer->subtrees) - 1;
- if ($compiler->parser->current_buffer->subtrees[$last] instanceof _smarty_linebreak) {
- unset($compiler->parser->current_buffer->subtrees[$last]);
- }
- // if caching save template function for possible nocache call
- if ($compiler->template->caching) {
- $compiler->template->properties['function'][$_name]['compiled'] .= $plugins_string
- . $compiler->parser->current_buffer->to_smarty_php();
- $compiler->template->properties['function'][$_name]['nocache_hash'] = $compiler->template->properties['nocache_hash'];
- $compiler->template->properties['function'][$_name]['has_nocache_code'] = $compiler->template->has_nocache_code;
- $compiler->template->properties['function'][$_name]['called_functions'] = $compiler->called_functions;
- $compiler->called_functions = array();
- $compiler->smarty->template_functions[$_name] = $compiler->template->properties['function'][$_name];
- $compiler->has_code = false;
- $output = true;
- } else {
- $output = $plugins_string . $compiler->parser->current_buffer->to_smarty_php() . "<?php \$_smarty_tpl->tpl_vars = \$saved_tpl_vars;
-foreach (Smarty::\$global_tpl_vars as \$key => \$value) if(!isset(\$_smarty_tpl->tpl_vars[\$key])) \$_smarty_tpl->tpl_vars[\$key] = \$value;}}?>\n";
}
- // reset flag that we are compiling a template function
- $compiler->compiles_template_function = false;
- // restore old compiler status
+ // restore old buffer
+
$compiler->parser->current_buffer = $saved_data[1];
- $compiler->template->has_nocache_code = $compiler->template->has_nocache_code | $saved_data[2];
- $compiler->template->required_plugins = $saved_data[3];
- return $output;
+ // restore old status
+ $compiler->template->compiled->has_nocache_code = $saved_data[2];
+ $compiler->template->caching = $saved_data[3];
+ return true;
}
+ /**
+ * @param $match
+ *
+ * @return mixed
+ */
+ function removeNocache($match)
+ {
+ $code = preg_replace("/((<\?php )?echo '\/\*%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/)|(\/\*\/%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/", '', $match[0]);
+ $code = str_replace(array('\\\'', '\\\\\''), array('\'', '\\\''), $code);
+ return $code;
+ }
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_if.php b/include/smarty/libs/sysplugins/smarty_internal_compile_if.php
index 8794b014b..541e21816 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_if.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_if.php
@@ -1,31 +1,32 @@
<?php
/**
-* Smarty Internal Plugin Compile If
-*
-* Compiles the {if} {else} {elseif} {/if} tags
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile If
+ * Compiles the {if} {else} {elseif} {/if} tags
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
/**
-* Smarty Internal Plugin Compile If Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile If Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
+{
/**
- * Compiles code for the {if} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter)
+ * Compiles code for the {if} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \SmartyCompilerException
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
@@ -33,8 +34,8 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
// must whole block be nocache ?
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- if (!array_key_exists("if condition",$parameter)) {
- $compiler->trigger_template_error("missing if condition", $compiler->lex->taglineno);
+ if (!array_key_exists("if condition", $parameter)) {
+ $compiler->trigger_template_error("missing if condition", null, true);
}
if (is_array($parameter['if condition'])) {
@@ -42,79 +43,94 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
$_nocache = ',true';
// create nocache var to make it know for further compiling
if (is_array($parameter['if condition']['var'])) {
- $compiler->template->tpl_vars[trim($parameter['if condition']['var']['var'], "'")] = new Smarty_variable(null, true);
+ $var = trim($parameter['if condition']['var']['var'], "'");
+ } else {
+ $var = trim($parameter['if condition']['var'], "'");
+ }
+ if (isset($compiler->template->tpl_vars[$var])) {
+ $compiler->template->tpl_vars[$var]->nocache = true;
} else {
- $compiler->template->tpl_vars[trim($parameter['if condition']['var'], "'")] = new Smarty_variable(null, true);
+ $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true);
}
} else {
$_nocache = '';
}
if (is_array($parameter['if condition']['var'])) {
- $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]) || !is_array(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]->value)) \$_smarty_tpl->createLocalArrayVariable(".$parameter['if condition']['var']['var']."$_nocache);\n";
- $_output .= "if (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]->value".$parameter['if condition']['var']['smarty_internal_index']." = ".$parameter['if condition']['value']."){?>";
+ $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] .
+ "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] .
+ "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . $parameter['if condition']['var']['var'] .
+ "$_nocache);\n";
+ $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" .
+ $parameter['if condition']['var']['smarty_internal_index'] . " = " .
+ $parameter['if condition']['value'] . ") {?>";
} else {
- $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."])) \$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."] = new Smarty_Variable(null{$_nocache});";
- $_output .= "if (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."]->value = ".$parameter['if condition']['value']."){?>";
+ $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] .
+ "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] .
+ "] = new Smarty_Variable(null{$_nocache});";
+ $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " .
+ $parameter['if condition']['value'] . ") {?>";
}
+
return $_output;
} else {
- return "<?php if ({$parameter['if condition']}){?>";
+ return "<?php if ({$parameter['if condition']}) {?>";
}
}
-
}
/**
-* Smarty Internal Plugin Compile Else Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile Else Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase
+{
/**
- * Compiles code for the {else} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter)
+ * Compiles code for the {else} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
$this->openTag($compiler, 'else', array($nesting, $compiler->tag_nocache));
- return "<?php }else{ ?>";
+ return "<?php } else { ?>";
}
-
}
/**
-* Smarty Internal Plugin Compile ElseIf Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile ElseIf Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
+{
/**
- * Compiles code for the {elseif} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter)
+ * Compiles code for the {elseif} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \SmartyCompilerException
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
- if (!array_key_exists("if condition",$parameter)) {
- $compiler->trigger_template_error("missing elseif condition", $compiler->lex->taglineno);
+ if (!array_key_exists("if condition", $parameter)) {
+ $compiler->trigger_template_error("missing elseif condition", null, true);
}
if (is_array($parameter['if condition'])) {
@@ -123,9 +139,14 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase {
$_nocache = ',true';
// create nocache var to make it know for further compiling
if (is_array($parameter['if condition']['var'])) {
- $compiler->template->tpl_vars[trim($parameter['if condition']['var']['var'], "'")] = new Smarty_variable(null, true);
+ $var = trim($parameter['if condition']['var']['var'], "'");
+ } else {
+ $var = trim($parameter['if condition']['var'], "'");
+ }
+ if (isset($compiler->template->tpl_vars[$var])) {
+ $compiler->template->tpl_vars[$var]->nocache = true;
} else {
- $compiler->template->tpl_vars[trim($parameter['if condition']['var'], "'")] = new Smarty_variable(null, true);
+ $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true);
}
} else {
$_nocache = '';
@@ -138,57 +159,83 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase {
if ($condition_by_assign) {
$this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
if (is_array($parameter['if condition']['var'])) {
- $_output = "<?php }else{ if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
- $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . "){?>";
+ $_output = "<?php } else { if (!isset(\$_smarty_tpl->tpl_vars[" .
+ $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" .
+ $parameter['if condition']['var']['var'] .
+ "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " .
+ $parameter['if condition']['var']['var'] . "$_nocache);\n";
+ $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" .
+ $parameter['if condition']['var']['smarty_internal_index'] . " = " .
+ $parameter['if condition']['value'] . ") {?>";
} else {
- $_output = "<?php }else{ if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
- $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . "){?>";
+ $_output = "<?php } else { if (!isset(\$_smarty_tpl->tpl_vars[" .
+ $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" .
+ $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
+ $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " .
+ $parameter['if condition']['value'] . ") {?>";
}
+
return $_output;
} else {
$this->openTag($compiler, 'elseif', array($nesting, $compiler->tag_nocache));
- return "<?php }elseif({$parameter['if condition']}){?>";
+
+ return "<?php } elseif ({$parameter['if condition']}) {?>";
}
} else {
$tmp = '';
- foreach ($compiler->prefix_code as $code)
- $tmp .= $code;
+ foreach ($compiler->prefix_code as $code) {
+ $tmp = $compiler->appendCode($tmp, $code);
+ }
$compiler->prefix_code = array();
+ $tmp = $compiler->appendCode("<?php } else {?>", $tmp);
$this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
if ($condition_by_assign) {
if (is_array($parameter['if condition']['var'])) {
- $_output = "<?php }else{?>{$tmp}<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
- $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . "){?>";
+ $_output = $compiler->appendCode($tmp, "<?php if (!isset(\$_smarty_tpl->tpl_vars[" .
+ $parameter['if condition']['var']['var'] .
+ "]) || !is_array(\$_smarty_tpl->tpl_vars[" .
+ $parameter['if condition']['var']['var'] .
+ "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " .
+ $parameter['if condition']['var']['var'] . "$_nocache);\n");
+ $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" .
+ $parameter['if condition']['var']['smarty_internal_index'] . " = " .
+ $parameter['if condition']['value'] . ") {?>";
} else {
- $_output = "<?php }else{?>{$tmp}<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
- $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . "){?>";
+ $_output = $compiler->appendCode($tmp, "<?php if (!isset(\$_smarty_tpl->tpl_vars[" .
+ $parameter['if condition']['var'] .
+ "])) \$_smarty_tpl->tpl_vars[" .
+ $parameter['if condition']['var'] .
+ "] = new Smarty_Variable(null{$_nocache});");
+ $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " .
+ $parameter['if condition']['value'] . ") {?>";
}
+
return $_output;
} else {
- return "<?php }else{?>{$tmp}<?php if ({$parameter['if condition']}){?>";
+ return $compiler->appendCode($tmp, "<?php if ({$parameter['if condition']}) {?>");
}
}
}
-
}
/**
-* Smarty Internal Plugin Compile Ifclose Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile Ifclose Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase
+{
/**
- * Compiles code for the {/if} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter)
+ * Compiles code for the {/if} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
// must endblock be nocache?
if ($compiler->nocache) {
@@ -196,12 +243,10 @@ class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase {
}
list($nesting, $compiler->nocache) = $this->closeTag($compiler, array('if', 'else', 'elseif'));
$tmp = '';
- for ($i = 0; $i < $nesting; $i++) {
+ for ($i = 0; $i < $nesting; $i ++) {
$tmp .= '}';
}
+
return "<?php {$tmp}?>";
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_include.php b/include/smarty/libs/sysplugins/smarty_internal_compile_include.php
index 43a144f94..09fa11d6c 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_include.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_include.php
@@ -1,110 +1,213 @@
<?php
/**
-* Smarty Internal Plugin Compile Include
-*
-* Compiles the {include} tag
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile Include
+ * Compiles the {include} tag
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
/**
-* Smarty Internal Plugin Compile Include Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile Include Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
+{
/**
- * caching mode to create nocache code but no cache file
- */
+ * caching mode to create nocache code but no cache file
+ */
const CACHING_NOCACHE_CODE = 9999;
+
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $required_attributes = array('file');
+
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $shorttag_order = array('file');
+
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $option_flags = array('nocache', 'inline', 'caching');
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $option_flags = array('nocache', 'inline', 'caching', 'bubble_up');
+
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $optional_attributes = array('_any');
/**
- * Compiles code for the {include} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * Valid scope names
+ *
+ * @var array
+ */
+ public $valid_scopes = array('local' => true, 'parent' => true, 'root' => true, 'global' => true,
+ 'smarty' => true, 'tpl_root' => true);
+
+ /**
+ * Compiles code for the {include} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param Smarty_Internal_SmartyTemplateCompiler $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @throws SmartyCompilerException
* @return string compiled code
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_SmartyTemplateCompiler $compiler, $parameter)
{
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
- // save posible attributes
- $include_file = $_attr['file'];
+
+ $hashResourceName = $fullResourceName = $source_resource = $_attr['file'];
+ $variable_template = false;
+ $cache_tpl = false;
+ // parse resource_name
+ if (preg_match('/^([\'"])(([A-Za-z0-9_\-]{2,})[:])?(([^$()]+)|(.+))\1$/', $source_resource, $match)) {
+ $type = !empty($match[3]) ? $match[3] : $compiler->template->smarty->default_resource_type;
+ $name = !empty($match[5]) ? $match[5] : $match[6];
+ $handler = Smarty_Resource::load($compiler->smarty, $type);
+ if ($handler->recompiled || $handler->uncompiled) {
+ $variable_template = true;
+ }
+ if (!$variable_template) {
+ if ($type != 'string') {
+ $fullResourceName = "{$type}:{$name}";
+ $compiled = $compiler->parent_compiler->template->compiled;
+ if (isset($compiled->includes[$fullResourceName])) {
+ $compiled->includes[$fullResourceName] ++;
+ $cache_tpl = true;
+ } else {
+ $compiled->includes[$fullResourceName] = 1;
+ }
+ $fullResourceName = '"' . $fullResourceName . '"';
+ }
+ }
+ if (empty($match[5])) {
+ $variable_template = true;
+ }
+ } else {
+ $variable_template = true;
+ }
if (isset($_attr['assign'])) {
- // output will be stored in a smarty variable instead of beind displayed
+ // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign'];
}
- $_parent_scope = Smarty::SCOPE_LOCAL;
+ // scope setup
+ $_scope = Smarty::SCOPE_LOCAL;
if (isset($_attr['scope'])) {
$_attr['scope'] = trim($_attr['scope'], "'\"");
- if ($_attr['scope'] == 'parent') {
- $_parent_scope = Smarty::SCOPE_PARENT;
- } elseif ($_attr['scope'] == 'root') {
- $_parent_scope = Smarty::SCOPE_ROOT;
- } elseif ($_attr['scope'] == 'global') {
- $_parent_scope = Smarty::SCOPE_GLOBAL;
+ if (!isset($this->valid_scopes[$_attr['scope']])) {
+ $compiler->trigger_template_error("illegal value '{$_attr['scope']}' for \"scope\" attribute", null, true);
+ }
+ if ($_attr['scope'] != 'local') {
+ if ($_attr['scope'] == 'parent') {
+ $_scope = Smarty::SCOPE_PARENT;
+ } elseif ($_attr['scope'] == 'root') {
+ $_scope = Smarty::SCOPE_ROOT;
+ } elseif ($_attr['scope'] == 'global') {
+ $_scope = Smarty::SCOPE_GLOBAL;
+ } elseif ($_attr['scope'] == 'smarty') {
+ $_scope = Smarty::SCOPE_SMARTY;
+ } elseif ($_attr['scope'] == 'tpl_root') {
+ $_scope = Smarty::SCOPE_TPL_ROOT;
+ }
+ if ($_attr['bubble_up'] === true) {
+ $_scope = $_scope + Smarty::SCOPE_BUBBLE_UP;
+ }
}
}
- $_caching = 'null';
- if ($compiler->nocache || $compiler->tag_nocache) {
- $_caching = Smarty::CACHING_OFF;
+
+ // set flag to cache subtemplate object when called within loop or template name is variable.
+ if ($cache_tpl || $variable_template || $compiler->loopNesting > 0) {
+ $_cache_tpl = 'true';
+ } else {
+ $_cache_tpl = 'false';
}
- // default for included templates
+ // assume caching is off
+ $_caching = Smarty::CACHING_OFF;
+
+ if ($_attr['nocache'] === true) {
+ $compiler->tag_nocache = true;
+ }
+
+ $call_nocache = $compiler->tag_nocache || $compiler->nocache;
+
+ // caching was on and {include} is not in nocache mode
if ($compiler->template->caching && !$compiler->nocache && !$compiler->tag_nocache) {
$_caching = self::CACHING_NOCACHE_CODE;
}
+
+ // flag if included template code should be merged into caller
+ $merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || $_attr['inline'] === true) &&
+ !$compiler->template->source->handler->recompiled;
+
+ if ($merge_compiled_includes && $_attr['inline'] !== true) {
+ // variable template name ?
+ if ($variable_template) {
+ $merge_compiled_includes = false;
+ if ($compiler->template->caching) {
+ // must use individual cache file
+ //$_attr['caching'] = 1;
+ }
+ }
+ // variable compile_id?
+ if (isset($_attr['compile_id'])) {
+ if (!((substr_count($_attr['compile_id'], '"') == 2 || substr_count($_attr['compile_id'], "'") == 2 ||
+ is_numeric($_attr['compile_id']))) || substr_count($_attr['compile_id'], '(') != 0 ||
+ substr_count($_attr['compile_id'], '$_smarty_tpl->') != 0
+ ) {
+ $merge_compiled_includes = false;
+ if ($compiler->template->caching) {
+ // must use individual cache file
+ //$_attr['caching'] = 1;
+ }
+ }
+ }
+ }
+
/*
- * if the {include} tag provides individual parameter for caching
- * it will not be included into the common cache file and treated like
- * a nocache section
+ * if the {include} tag provides individual parameter for caching or compile_id
+ * the subtemplate must not be included into the common cache file and is treated like
+ * a call in nocache mode.
+ *
*/
+ if ($_attr['nocache'] !== true && $_attr['caching']) {
+ $_caching = $_new_caching = (int) $_attr['caching'];
+ $call_nocache = true;
+ } else {
+ $_new_caching = Smarty::CACHING_LIFETIME_CURRENT;
+ }
if (isset($_attr['cache_lifetime'])) {
$_cache_lifetime = $_attr['cache_lifetime'];
- $compiler->tag_nocache = true;
- $_caching = Smarty::CACHING_LIFETIME_CURRENT;
+ $call_nocache = true;
+ $_caching = $_new_caching;
} else {
- $_cache_lifetime = 'null';
+ $_cache_lifetime = '$_smarty_tpl->cache_lifetime';
}
if (isset($_attr['cache_id'])) {
$_cache_id = $_attr['cache_id'];
- $compiler->tag_nocache = true;
- $_caching = Smarty::CACHING_LIFETIME_CURRENT;
+ $call_nocache = true;
+ $_caching = $_new_caching;
} else {
$_cache_id = '$_smarty_tpl->cache_id';
}
@@ -113,103 +216,151 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
} else {
$_compile_id = '$_smarty_tpl->compile_id';
}
- if ($_attr['caching'] === true) {
- $_caching = Smarty::CACHING_LIFETIME_CURRENT;
- }
- if ($_attr['nocache'] === true) {
- $compiler->tag_nocache = true;
- $_caching = Smarty::CACHING_OFF;
+
+ // if subtemplate will be called in nocache mode do not merge
+ if ($compiler->template->caching && $call_nocache) {
+ $merge_compiled_includes = false;
}
$has_compiled_template = false;
- if (($compiler->smarty->merge_compiled_includes || $_attr['inline'] === true) && !$compiler->template->source->recompiled
- && !($compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache)) && $_caching != Smarty::CACHING_LIFETIME_CURRENT) {
- // check if compiled code can be merged (contains no variable part)
- if (!$compiler->has_variable_string && (substr_count($include_file, '"') == 2 or substr_count($include_file, "'") == 2)
- and substr_count($include_file, '(') == 0 and substr_count($include_file, '$_smarty_tpl->') == 0) {
- $tpl_name = null;
- eval("\$tpl_name = $include_file;");
- if (!isset($compiler->smarty->merged_templates_func[$tpl_name]) || $compiler->inheritance) {
- $tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id);
- // save unique function name
- $compiler->smarty->merged_templates_func[$tpl_name]['func'] = $tpl->properties['unifunc'] = 'content_'. str_replace('.', '_', uniqid('', true));
- // use current nocache hash for inlined code
- $compiler->smarty->merged_templates_func[$tpl_name]['nocache_hash'] = $tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash'];
- if ($compiler->template->caching) {
- // needs code for cached page but no cache file
- $tpl->caching = self::CACHING_NOCACHE_CODE;
- }
- // make sure whole chain gest compiled
- $tpl->mustCompile = true;
- if (!($tpl->source->uncompiled) && $tpl->source->exists) {
- // get compiled code
- $compiled_code = $tpl->compiler->compileTemplate($tpl);
- // release compiler object to free memory
- unset($tpl->compiler);
- // merge compiled code for {function} tags
- $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $tpl->properties['function']);
- // merge filedependency
- $tpl->properties['file_dependency'][$tpl->source->uid] = array($tpl->source->filepath, $tpl->source->timestamp,$tpl->source->type);
- $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $tpl->properties['file_dependency']);
- // remove header code
- $compiled_code = preg_replace("/(<\?php \/\*%%SmartyHeaderCode:{$tpl->properties['nocache_hash']}%%\*\/(.+?)\/\*\/%%SmartyHeaderCode%%\*\/\?>\n)/s", '', $compiled_code);
- if ($tpl->has_nocache_code) {
- // replace nocache_hash
- $compiled_code = str_replace("{$tpl->properties['nocache_hash']}", $compiler->template->properties['nocache_hash'], $compiled_code);
- $compiler->template->has_nocache_code = true;
- }
- $compiler->merged_templates[$tpl->properties['unifunc']] = $compiled_code;
- $has_compiled_template = true;
- }
- } else {
- $has_compiled_template = true;
- }
+ if ($merge_compiled_includes) {
+ $c_id = isset($_attr['compile_id']) ? $_attr['compile_id'] : $compiler->template->compile_id;
+ // we must observe different compile_id and caching
+ $t_hash = sha1($c_id . ($_caching ? '--caching' : '--nocaching'));
+ if (!isset($compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash])) {
+ $has_compiled_template =
+ $this->compileInlineTemplate($compiler, $fullResourceName, $_caching, $hashResourceName, $t_hash,
+ $c_id);
+ } else {
+ $has_compiled_template = true;
}
}
// delete {include} standard attributes
- unset($_attr['file'], $_attr['assign'], $_attr['cache_id'], $_attr['compile_id'], $_attr['cache_lifetime'], $_attr['nocache'], $_attr['caching'], $_attr['scope'], $_attr['inline']);
+ unset($_attr['file'], $_attr['assign'], $_attr['cache_id'], $_attr['compile_id'], $_attr['cache_lifetime'], $_attr['nocache'], $_attr['caching'], $_attr['scope'], $_attr['inline'], $_attr['bubble_up']);
// remaining attributes must be assigned as smarty variable
+ $_vars_nc = '';
if (!empty($_attr)) {
- if ($_parent_scope == Smarty::SCOPE_LOCAL) {
+ if ($_scope == Smarty::SCOPE_LOCAL) {
+ $_pairs = array();
// create variables
foreach ($_attr as $key => $value) {
$_pairs[] = "'$key'=>$value";
+ $_vars_nc .= "\$_smarty_tpl->tpl_vars['$key'] = new Smarty_Variable($value);\n";
}
- $_vars = 'array('.join(',',$_pairs).')';
- $_has_vars = true;
+ $_vars = 'array(' . join(',', $_pairs) . ')';
} else {
- $compiler->trigger_template_error('variable passing not allowed in parent/global scope', $compiler->lex->taglineno);
+ $compiler->trigger_template_error('variable passing not allowed in parent/global scope', null, true);
}
} else {
$_vars = 'array()';
- $_has_vars = false;
}
- if ($has_compiled_template) {
- $_hash = $compiler->smarty->merged_templates_func[$tpl_name]['nocache_hash'];
- $_output = "<?php /* Call merged included template \"" . $tpl_name . "\" */\n";
- $_output .= "\$_tpl_stack[] = \$_smarty_tpl;\n";
- $_output .= " \$_smarty_tpl = \$_smarty_tpl->setupInlineSubTemplate($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope, '$_hash');\n";
+ $update_compile_id = $compiler->template->caching && !$compiler->tag_nocache && !$compiler->nocache &&
+ $_compile_id != '$_smarty_tpl->compile_id';
+ if ($has_compiled_template && !$call_nocache) {
+ $_output = "<?php\n";
+ if ($update_compile_id) {
+ $_output .= $compiler->makeNocacheCode("\$_compile_id_save[] = \$_smarty_tpl->compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n");
+ }
+ if (!empty($_vars_nc) && $_caching == 9999 && $compiler->template->caching) {
+ //$compiler->suppressNocacheProcessing = false;
+ $_output .= substr($compiler->processNocacheCode('<?php ' . $_vars_nc . "?>\n", true), 6, - 3);
+ //$compiler->suppressNocacheProcessing = true;
+ }
if (isset($_assign)) {
- $_output .= 'ob_start(); ';
+ $_output .= "ob_start();\n";
}
- $_output .= $compiler->smarty->merged_templates_func[$tpl_name]['func']. "(\$_smarty_tpl);\n";
- $_output .= "\$_smarty_tpl = array_pop(\$_tpl_stack); ";
+ $_output .= "\$_smarty_tpl->smarty->ext->_subtemplate->render(\$_smarty_tpl, {$fullResourceName}, {$_cache_id}, {$_compile_id}, {$_caching}, {$_cache_lifetime}, {$_vars}, {$_scope}, {$_cache_tpl}, '{$compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['uid']}', '{$compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['func']}');\n";
if (isset($_assign)) {
- $_output .= " \$_smarty_tpl->tpl_vars[$_assign] = new Smarty_variable(ob_get_clean());";
+ $_output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n";
}
- $_output .= "/* End of included template \"" . $tpl_name . "\" */?>";
+ if ($update_compile_id) {
+ $_output .= $compiler->makeNocacheCode("\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n");
+ }
+ $_output .= "?>\n";
+
return $_output;
}
+ if ($call_nocache) {
+ $compiler->tag_nocache = true;
+ }
+ $_output = "<?php ";
+ if ($update_compile_id) {
+ $_output .= "\$_compile_id_save[] = \$_smarty_tpl->compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n";
+ }
// was there an assign attribute
if (isset($_assign)) {
- $_output = "<?php \$_smarty_tpl->tpl_vars[$_assign] = new Smarty_variable(\$_smarty_tpl->getSubTemplate ($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope));?>\n";;
- } else {
- $_output = "<?php echo \$_smarty_tpl->getSubTemplate ($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope);?>\n";
+ $_output .= "ob_start();\n";
+ }
+ $_output .= "\$_smarty_tpl->smarty->ext->_subtemplate->render(\$_smarty_tpl, {$fullResourceName}, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_scope, {$_cache_tpl});\n";
+ if (isset($_assign)) {
+ $_output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n";
+ }
+ if ($update_compile_id) {
+ $_output .= "\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n";
}
+ $_output .= "?>\n";
return $_output;
}
+ /**
+ * Compile inline sub template
+ *
+ * @param \Smarty_Internal_SmartyTemplateCompiler $compiler
+ * @param $fullResourceName
+ * @param $_caching
+ * @param $hashResourceName
+ * @param $t_hash
+ * @param $c_id
+ *
+ * @return bool
+ */
+ public function compileInlineTemplate(Smarty_Internal_SmartyTemplateCompiler $compiler, $fullResourceName,
+ $_caching, $hashResourceName, $t_hash, $c_id)
+ {
+ $compiler->smarty->allow_ambiguous_resources = true;
+ /* @var Smarty_Internal_Template $tpl */
+ $tpl =
+ new $compiler->smarty->template_class (trim($fullResourceName, '"\''), $compiler->smarty, $compiler->template,
+ $compiler->template->cache_id, $c_id, $_caching);
+ if (!($tpl->source->handler->uncompiled) && $tpl->source->exists) {
+ $compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['uid'] = $tpl->source->uid;
+ if (isset($compiler->template->_inheritance)) {
+ $tpl->_inheritance = clone $compiler->template->_inheritance;
+ }
+ $tpl->compiled = new Smarty_Template_Compiled();
+ $tpl->compiled->nocache_hash = $compiler->parent_compiler->template->compiled->nocache_hash;
+ $tpl->loadCompiler();
+ // save unique function name
+ $compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['func'] =
+ $tpl->compiled->unifunc = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
+ // make sure whole chain gets compiled
+ $tpl->mustCompile = true;
+ $compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['nocache_hash'] =
+ $tpl->compiled->nocache_hash;
+ // get compiled code
+ $compiled_code = "<?php\n\n";
+ $compiled_code .= "/* Start inline template \"{$tpl->source->type}:{$tpl->source->name}\" =============================*/\n";
+ $compiled_code .= "function {$tpl->compiled->unifunc} (\$_smarty_tpl) {\n";
+ $compiled_code .= "?>\n" . $tpl->compiler->compileTemplateSource($tpl, null, $compiler->parent_compiler);
+ $compiled_code .= "<?php\n";
+ $compiled_code .= "}\n?>\n";
+ $compiled_code .= $tpl->compiler->postFilter($tpl->compiler->blockOrFunctionCode);
+ $compiled_code .= "<?php\n\n";
+ $compiled_code .= "/* End inline template \"{$tpl->source->type}:{$tpl->source->name}\" =============================*/\n";
+ $compiled_code .= "?>";
+ unset($tpl->compiler);
+ if ($tpl->compiled->has_nocache_code) {
+ // replace nocache_hash
+ $compiled_code =
+ str_replace("{$tpl->compiled->nocache_hash}", $compiler->template->compiled->nocache_hash,
+ $compiled_code);
+ $compiler->template->compiled->has_nocache_code = true;
+ }
+ $compiler->parent_compiler->mergedSubTemplatesCode[$tpl->compiled->unifunc] = $compiled_code;
+ return true;
+ } else {
+ return false;
+ }
+ }
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_include_php.php b/include/smarty/libs/sysplugins/smarty_internal_compile_include_php.php
index d52712368..e7e62997c 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_include_php.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_include_php.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Include PHP
- *
* Compiles the {include_php} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Insert Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -24,6 +23,7 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $required_attributes = array('file');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -31,6 +31,7 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $shorttag_order = array('file');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -42,11 +43,14 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {include_php} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @return string compiled code
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
+ * @return string
+ * @throws \SmartyCompilerException
+ * @throws \SmartyException
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
if (!($compiler->smarty instanceof SmartyBC)) {
throw new SmartyException("{include_php} is deprecated, use SmartyBC class to enable");
@@ -54,13 +58,15 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
- $_output = '<?php ';
-
+ /** @var Smarty_Internal_Template $_smarty_tpl
+ * used in evaluated code
+ */
$_smarty_tpl = $compiler->template;
$_filepath = false;
- eval('$_file = ' . $_attr['file'] . ';');
+ $_file = null;
+ eval('$_file = @' . $_attr['file'] . ';');
if (!isset($compiler->smarty->security_policy) && file_exists($_file)) {
- $_filepath = $_file;
+ $_filepath = $compiler->smarty->_realpath($_file, true);
} else {
if (isset($compiler->smarty->security_policy)) {
$_dir = $compiler->smarty->security_policy->trusted_dir;
@@ -68,17 +74,17 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
$_dir = $compiler->smarty->trusted_dir;
}
if (!empty($_dir)) {
- foreach((array)$_dir as $_script_dir) {
- $_script_dir = rtrim($_script_dir, '/\\') . DS;
- if (file_exists($_script_dir . $_file)) {
- $_filepath = $_script_dir . $_file;
+ foreach ((array) $_dir as $_script_dir) {
+ $_path = $compiler->smarty->_realpath($_script_dir . DS . $_file, true);
+ if (file_exists($_path)) {
+ $_filepath = $_path;
break;
}
}
}
}
if ($_filepath == false) {
- $compiler->trigger_template_error("{include_php} file '{$_file}' is not readable", $compiler->lex->taglineno);
+ $compiler->trigger_template_error("{include_php} file '{$_file}' is not readable", null, true);
}
if (isset($compiler->smarty->security_policy)) {
@@ -97,12 +103,9 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
}
if (isset($_assign)) {
- return "<?php ob_start(); include{$_once} ('{$_filepath}'); \$_smarty_tpl->assign({$_assign},ob_get_contents()); ob_end_clean();?>";
+ return "<?php ob_start();\ninclude{$_once} ('{$_filepath}');\n\$_smarty_tpl->assign({$_assign},ob_get_clean());\n?>";
} else {
return "<?php include{$_once} ('{$_filepath}');?>\n";
}
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_insert.php b/include/smarty/libs/sysplugins/smarty_internal_compile_insert.php
index e4d3f9355..2ebde1661 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_insert.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_insert.php
@@ -2,22 +2,21 @@
/**
* Smarty Internal Plugin Compile Insert
- *
* Compiles the {insert} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Insert Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -25,6 +24,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $required_attributes = array('name');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -32,6 +32,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $shorttag_order = array('name');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -43,36 +44,46 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {insert} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
* @return string compiled code
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
- // never compile as nocache code
- $compiler->suppressNocacheProcessing = true;
+ $nocacheParam = $compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache);
+ if (!$nocacheParam) {
+ // do not compile as nocache code
+ $compiler->suppressNocacheProcessing = true;
+ }
$compiler->tag_nocache = true;
$_smarty_tpl = $compiler->template;
$_name = null;
$_script = null;
$_output = '<?php ';
- // save posible attributes
- eval('$_name = ' . $_attr['name'] . ';');
+ // save possible attributes
+ eval('$_name = @' . $_attr['name'] . ';');
if (isset($_attr['assign'])) {
// output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign'];
- // create variable to make shure that the compiler knows about its nocache status
- $compiler->template->tpl_vars[trim($_attr['assign'], "'")] = new Smarty_Variable(null, true);
+ // create variable to make sure that the compiler knows about its nocache status
+ $var = trim($_attr['assign'], "'");
+ if (isset($compiler->template->tpl_vars[$var])) {
+ $compiler->template->tpl_vars[$var]->nocache = true;
+ } else {
+ $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true);
+ }
}
if (isset($_attr['script'])) {
// script which must be included
$_function = "smarty_insert_{$_name}";
$_smarty_tpl = $compiler->template;
$_filepath = false;
- eval('$_script = ' . $_attr['script'] . ';');
+ eval('$_script = @' . $_attr['script'] . ';');
if (!isset($compiler->smarty->security_policy) && file_exists($_script)) {
$_filepath = $_script;
} else {
@@ -82,7 +93,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
$_dir = $compiler->smarty->trusted_dir;
}
if (!empty($_dir)) {
- foreach((array)$_dir as $_script_dir) {
+ foreach ((array) $_dir as $_script_dir) {
$_script_dir = rtrim($_script_dir, '/\\') . DS;
if (file_exists($_script_dir . $_script)) {
$_filepath = $_script_dir . $_script;
@@ -92,13 +103,13 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
}
}
if ($_filepath == false) {
- $compiler->trigger_template_error("{insert} missing script file '{$_script}'", $compiler->lex->taglineno);
+ $compiler->trigger_template_error("{insert} missing script file '{$_script}'", null, true);
}
// code for script file loading
$_output .= "require_once '{$_filepath}' ;";
require_once $_filepath;
if (!is_callable($_function)) {
- $compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'", $compiler->lex->taglineno);
+ $compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'", null, true);
}
} else {
$_filepath = 'null';
@@ -107,7 +118,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
if (!is_callable($_function)) {
// try plugin
if (!$_function = $compiler->getPlugin($_name, 'insert')) {
- $compiler->trigger_template_error("{insert} no function or plugin found for '{$_name}'", $compiler->lex->taglineno);
+ $compiler->trigger_template_error("{insert} no function or plugin found for '{$_name}'", null, true);
}
}
}
@@ -121,22 +132,20 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
$_params = 'array(' . implode(", ", $_paramsArray) . ')';
// call insert
if (isset($_assign)) {
- if ($_smarty_tpl->caching) {
+ if ($_smarty_tpl->caching && !$nocacheParam) {
$_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}',{$_assign});?>";
} else {
$_output .= "\$_smarty_tpl->assign({$_assign} , {$_function} ({$_params},\$_smarty_tpl), true);?>";
}
} else {
$compiler->has_output = true;
- if ($_smarty_tpl->caching) {
+ if ($_smarty_tpl->caching && !$nocacheParam) {
$_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}');?>";
} else {
$_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>";
}
}
+
return $_output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php b/include/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php
index 990632590..8c6b701e1 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php
@@ -1,41 +1,40 @@
<?php
/**
* Smarty Internal Plugin Compile Ldelim
- *
* Compiles the {ldelim} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Ldelim Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {ldelim} tag
- *
* This tag does output the left delimiter
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
* @return string compiled code
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
$_attr = $this->getAttributes($compiler, $args);
if ($_attr['nocache'] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
+ $compiler->trigger_template_error('nocache option not allowed', null, true);
}
// this tag does not return compiled code
$compiler->has_code = true;
+
return $compiler->smarty->left_delimiter;
}
-
}
-
-?>
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_nocache.php b/include/smarty/libs/sysplugins/smarty_internal_compile_nocache.php
index 5fb71b71d..b29a993aa 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_nocache.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_nocache.php
@@ -1,73 +1,75 @@
<?php
/**
* Smarty Internal Plugin Compile Nocache
- *
* Compiles the {nocache} {/nocache} tags.
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
- * Smarty Internal Plugin Compile Nocache Classv
+ * Smarty Internal Plugin Compile Nocache Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase {
+class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase
+{
+ /**
+ * Array of names of valid option flags
+ *
+ * @var array
+ */
+ public $option_flags = array();
/**
* Compiles code for the {nocache} tag
- *
* This tag does not generate compiled output. It only sets a compiler flag.
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
* @return bool
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
$_attr = $this->getAttributes($compiler, $args);
- if ($_attr['nocache'] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
- }
+ $this->openTag($compiler, 'nocache', array($compiler->nocache));
// enter nocache mode
$compiler->nocache = true;
// this tag does not return compiled code
$compiler->has_code = false;
+
return true;
}
-
}
/**
* Smarty Internal Plugin Compile Nocacheclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/nocache} tag
- *
* This tag does not generate compiled output. It only sets a compiler flag.
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
* @return bool
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
$_attr = $this->getAttributes($compiler, $args);
// leave nocache mode
- $compiler->nocache = false;
+ list($compiler->nocache) = $this->closeTag($compiler, array('nocache'));
// this tag does not return compiled code
$compiler->has_code = false;
+
return true;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php b/include/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
index 5288f4560..9e2eea233 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Block Plugin
- *
* Compiles code for the execution of block plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Block Plugin Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -28,23 +27,24 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
/**
* Compiles code for the execution of block plugin
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @param string $tag name of block plugin
- * @param string $function PHP function name
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of block plugin
+ * @param string $function PHP function name
+ *
* @return string compiled code
*/
- public function compile($args, $compiler, $parameter, $tag, $function)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $function)
{
- if (!isset($tag[5]) || substr($tag, -5) != 'close') {
+ if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
// opening tag of block plugin
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
if ($_attr['nocache'] === true) {
$compiler->tag_nocache = true;
}
- unset($_attr['nocache']);
+ unset($_attr['nocache']);
// convert attributes into parameter array string
$_paramsArray = array();
foreach ($_attr as $_key => $_value) {
@@ -60,28 +60,30 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
// maybe nocache because of nocache variables or nocache plugin
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
// compile code
- $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
+ $output = "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
} else {
// must endblock be nocache?
if ($compiler->nocache) {
$compiler->tag_nocache = true;
}
// closing tag of block plugin, restore nocache
- list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, -5));
+ list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, - 5));
// This tag does create output
$compiler->has_output = true;
// compile code
if (!isset($parameter['modifier_list'])) {
- $mod_pre = $mod_post ='';
+ $mod_pre = $mod_post = '';
} else {
$mod_pre = ' ob_start(); ';
- $mod_post = 'echo '.$compiler->compileTag('private_modifier',array(),array('modifierlist'=>$parameter['modifier_list'],'value'=>'ob_get_clean()')).';';
+ $mod_post = 'echo ' .
+ $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'],
+ 'value' => 'ob_get_clean()')) . ';';
}
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post." } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
+ $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre .
+ " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post .
+ " } array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>";
}
+
return $output . "\n";
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php b/include/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php
new file mode 100644
index 000000000..16f233359
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php
@@ -0,0 +1,220 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile ForeachSection
+ * Shared methods for {foreach} {section} tags
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile ForeachSection Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Internal_CompileBase
+{
+
+ /**
+ * Preg search pattern
+ *
+ * @var string
+ */
+ private $propertyPreg = '';
+
+ /**
+ * Offsets in preg match result
+ *
+ * @var array
+ */
+ private $resultOffsets = array();
+
+ /**
+ * Start offset
+ *
+ * @var int
+ */
+ private $startOffset = 0;
+
+ /**
+ * Name of this tag
+ *
+ * @var string
+ */
+ public $tagName = '';
+
+ /**
+ * Valid properties of $smarty.xxx variable
+ *
+ * @var array
+ */
+ public $nameProperties = array();
+
+ /**
+ * {section} tag has no item properties
+ *
+ * @var array
+ */
+ public $itemProperties = null;
+
+ /**
+ * {section} tag has always name attribute
+ *
+ * @var bool
+ */
+ public $isNamed = true;
+
+ /**
+ * @var array
+ */
+ public $matchResults = array();
+
+ /**
+ * Scan sources for used tag attributes
+ *
+ * @param array $attributes
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ */
+ public function scanForProperties($attributes, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ $this->propertyPreg = '~(';
+ $this->startOffset = 0;
+ $this->resultOffsets = array();
+ $this->matchResults = array('named' => array(), 'item' => array());
+ if ($this->isNamed) {
+ $this->buildPropertyPreg(true, $attributes);
+ }
+ if (isset($this->itemProperties)) {
+ if ($this->isNamed) {
+ $this->propertyPreg .= '|';
+ }
+ $this->buildPropertyPreg(false, $attributes);
+ }
+ $this->propertyPreg .= ')\W~i';
+ // Template source
+ $this->matchTemplateSource($compiler);
+ // Parent template source
+ $this->matchParentTemplateSource($compiler);
+ // {block} source
+ $this->matchBlockSource($compiler);
+ }
+
+ /**
+ * Build property preg string
+ *
+ * @param bool $named
+ * @param array $attributes
+ */
+ public function buildPropertyPreg($named, $attributes)
+ {
+ if ($named) {
+ $this->resultOffsets['named'] = $this->startOffset + 3;
+ $this->propertyPreg .= "([\$]smarty[.]{$this->tagName}[.]{$attributes['name']}[.](";
+ $properties = $this->nameProperties;
+ } else {
+ $this->resultOffsets['item'] = $this->startOffset + 3;
+ $this->propertyPreg .= "([\$]{$attributes['item']}[@](";
+ $properties = $this->itemProperties;
+ }
+ $this->startOffset += count($properties) + 2;
+ $propName = reset($properties);
+ while ($propName) {
+ $this->propertyPreg .= "({$propName})";
+ $propName = next($properties);
+ if ($propName) {
+ $this->propertyPreg .= '|';
+ }
+ }
+ $this->propertyPreg .= '))';
+ }
+
+ /**
+ * Find matches in source string
+ *
+ * @param string $source
+ */
+ public function matchProperty($source)
+ {
+ preg_match_all($this->propertyPreg, $source, $match, PREG_SET_ORDER);
+ foreach ($this->resultOffsets as $key => $offset) {
+ foreach ($match as $m) {
+ if (isset($m[$offset]) && !empty($m[$offset])) {
+ $this->matchResults[$key][strtolower($m[$offset])] = true;
+ }
+ }
+ }
+ }
+
+ /**
+ * Find matches in template source
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ */
+ public function matchTemplateSource(Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ $this->matchProperty($compiler->parser->lex->data);
+ }
+
+ /**
+ * Find matches in all parent template source
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ */
+ public function matchParentTemplateSource(Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ // search parent compiler template source
+ $nextCompiler = $compiler;
+ while ($nextCompiler !== $nextCompiler->parent_compiler) {
+ $nextCompiler = $nextCompiler->parent_compiler;
+ if ($compiler !== $nextCompiler) {
+ // get template source
+ $_content = $nextCompiler->template->source->getContent();
+ if ($_content != '') {
+ // run pre filter if required
+ if ((isset($nextCompiler->smarty->autoload_filters['pre']) ||
+ isset($nextCompiler->smarty->registered_filters['pre']))) {
+ $_content = $nextCompiler->smarty->ext->_filter_Handler->runFilter('pre', $_content, $nextCompiler->template);
+ }
+ $this->matchProperty($_content);
+ }
+ }
+ }
+ }
+
+ /**
+ * Find matches in {block} tag source
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ */
+ public function matchBlockSource(Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+
+ }
+
+ /**
+ * Compiles code for the {$smarty.foreach.xxx} or {$smarty.section.xxx}tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \SmartyCompilerException
+ */
+ public function compileSpecialVariable($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
+ {
+ $tag = strtolower(trim($parameter[ 0 ], '"\''));
+ $name = isset($parameter[ 1 ]) ? $compiler->getId($parameter[ 1 ]) : false;
+ if (!$name) {
+ $compiler->trigger_template_error("missing or illegal \$smarty.{$tag} name attribute", null, true);
+ }
+ $property = isset($parameter[ 2 ]) ? strtolower($compiler->getId($parameter[ 2 ])) : false;
+ if (!$property || !in_array($property, $this->nameProperties)) {
+ $compiler->trigger_template_error("missing or illegal \$smarty.{$tag} property attribute", null, true);
+ }
+ $tagVar = "'__smarty_{$tag}_{$name}'";
+ return "(isset(\$_smarty_tpl->tpl_vars[{$tagVar}]->value['{$property}']) ? \$_smarty_tpl->tpl_vars[{$tagVar}]->value['{$property}'] : null)";
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php b/include/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
index 70e764318..0d0ab8138 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Function Plugin
- *
* Compiles code for the execution of function plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Function Plugin Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -24,6 +23,7 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
* @see Smarty_Internal_CompileBase
*/
public $required_attributes = array();
+
/**
* Attribute definition: Overwrites base class.
*
@@ -35,14 +35,15 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
/**
* Compiles code for the execution of function plugin
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @param string $tag name of function plugin
- * @param string $function PHP function name
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of function plugin
+ * @param string $function PHP function name
+ *
* @return string compiled code
*/
- public function compile($args, $compiler, $parameter, $tag, $function)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $function)
{
// This tag does create output
$compiler->has_output = true;
@@ -65,9 +66,7 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
$_params = 'array(' . implode(",", $_paramsArray) . ')';
// compile code
$output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n";
+
return $output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php b/include/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
index a33109cc0..9594d2ae7 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
@@ -2,31 +2,33 @@
/**
* Smarty Internal Plugin Compile Modifier
- *
* Compiles code for modifier execution
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Modifier Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for modifier execution
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler, $parameter) {
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
+ {
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
$output = $parameter['value'];
@@ -51,7 +53,8 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
$output = "{$function}({$params})";
} else {
if (is_object($function[0])) {
- $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';
+ $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' .
+ $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';
} else {
$output = $function[0] . '::' . $function[1] . '(' . $params . ')';
}
@@ -72,7 +75,9 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
// modifiercompiler plugin
if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) {
// check if modifier allowed
- if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {
+ if (!is_object($compiler->smarty->security_policy) ||
+ $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
+ ) {
$plugin = 'smarty_modifiercompiler_' . $modifier;
$output = $plugin($single_modifier, $compiler);
}
@@ -84,7 +89,9 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
// modifier plugin
if ($function = $compiler->getPlugin($modifier, Smarty::PLUGIN_MODIFIER)) {
// check if modifier allowed
- if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {
+ if (!is_object($compiler->smarty->security_policy) ||
+ $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
+ ) {
$output = "{$function}({$params})";
}
$compiler->known_modifier_type[$modifier] = $type;
@@ -95,7 +102,9 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
// PHP function
if (is_callable($modifier)) {
// check if modifier allowed
- if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)) {
+ if (!is_object($compiler->smarty->security_policy) ||
+ $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)
+ ) {
$output = "{$modifier}({$params})";
}
$compiler->known_modifier_type[$modifier] = $type;
@@ -104,21 +113,29 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
break;
case 6:
// default plugin handler
- if (isset($compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier]) || (is_callable($compiler->smarty->default_plugin_handler_func) && $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER))) {
+ if (isset($compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier]) ||
+ (is_callable($compiler->smarty->default_plugin_handler_func) &&
+ $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER))
+ ) {
$function = $compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0];
// check if modifier allowed
- if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {
+ if (!is_object($compiler->smarty->security_policy) ||
+ $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
+ ) {
if (!is_array($function)) {
$output = "{$function}({$params})";
} else {
if (is_object($function[0])) {
- $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';
+ $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' .
+ $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';
} else {
$output = $function[0] . '::' . $function[1] . '(' . $params . ')';
}
}
}
- if (isset($compiler->template->required_plugins['nocache'][$modifier][Smarty::PLUGIN_MODIFIER]['file']) || isset($compiler->template->required_plugins['compiled'][$modifier][Smarty::PLUGIN_MODIFIER]['file'])) {
+ if (isset($compiler->parent_compiler->template->compiled->required_plugins['nocache'][$modifier][Smarty::PLUGIN_MODIFIER]['file']) ||
+ isset($compiler->parent_compiler->template->compiled->required_plugins['compiled'][$modifier][Smarty::PLUGIN_MODIFIER]['file'])
+ ) {
// was a plugin
$compiler->known_modifier_type[$modifier] = 4;
} else {
@@ -129,12 +146,10 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
}
}
if (!isset($compiler->known_modifier_type[$modifier])) {
- $compiler->trigger_template_error("unknown modifier \"" . $modifier . "\"", $compiler->lex->taglineno);
+ $compiler->trigger_template_error("unknown modifier \"" . $modifier . "\"", null, true);
}
}
+
return $output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php b/include/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
index cca924d10..d2bc5d60c 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Object Block Function
- *
* Compiles code for registered objects as block function
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Object Block Function Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -28,16 +27,17 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
/**
* Compiles code for the execution of block plugin
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @param string $tag name of block object
- * @param string $method name of method to call
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of block object
+ * @param string $method name of method to call
+ *
* @return string compiled code
*/
- public function compile($args, $compiler, $parameter, $tag, $method)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $method)
{
- if (!isset($tag[5]) || substr($tag, -5) != 'close') {
+ if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
// opening tag of block plugin
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
@@ -60,9 +60,10 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
// maybe nocache because of nocache variables or nocache plugin
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
// compile code
- $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}->{$method}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
+ $output =
+ "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}->{$method}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
} else {
- $base_tag = substr($tag, 0, -5);
+ $base_tag = substr($tag, 0, - 5);
// must endblock be nocache?
if ($compiler->nocache) {
$compiler->tag_nocache = true;
@@ -76,13 +77,15 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
$mod_pre = $mod_post = '';
} else {
$mod_pre = ' ob_start(); ';
- $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';';
+ $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(),
+ array('modifierlist' => $parameter['modifier_list'],
+ 'value' => 'ob_get_clean()')) . ';';
}
- $output = "<?php \$_block_content = ob_get_contents(); ob_end_clean(); \$_block_repeat=false;" . $mod_pre . " echo \$_smarty_tpl->smarty->registered_objects['{$base_tag}'][0]->{$method}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
+ $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre .
+ " echo \$_smarty_tpl->smarty->registered_objects['{$base_tag}'][0]->{$method}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " .
+ $mod_post . " } array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>";
}
+
return $output . "\n";
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php b/include/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php
index f649084c3..e306e0f6d 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php
@@ -1,22 +1,21 @@
<?php
/**
- * Smarty Internal Plugin Compile Object Funtion
- *
+ * Smarty Internal Plugin Compile Object Function
* Compiles code for registered objects as function
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Object Function Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -28,14 +27,15 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
/**
* Compiles code for the execution of function plugin
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @param string $tag name of function
- * @param string $method name of method to call
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of function
+ * @param string $method name of method to call
+ *
* @return string compiled code
*/
- public function compile($args, $compiler, $parameter, $tag, $method)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $method)
{
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
@@ -48,22 +48,29 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
$_assign = $_attr['assign'];
unset($_attr['assign']);
}
- // convert attributes into parameter array string
- if ($compiler->smarty->registered_objects[$tag][2]) {
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
+ // method or property ?
+ if (method_exists($compiler->smarty->registered_objects[$tag][0], $method)) {
+ // convert attributes into parameter array string
+ if ($compiler->smarty->registered_objects[$tag][2]) {
+ $_paramsArray = array();
+ foreach ($_attr as $_key => $_value) {
+ if (is_int($_key)) {
+ $_paramsArray[] = "$_key=>$_value";
+ } else {
+ $_paramsArray[] = "'$_key'=>$_value";
+ }
}
+ $_params = 'array(' . implode(",", $_paramsArray) . ')';
+ $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)";
+ } else {
+ $_params = implode(",", $_attr);
+ $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})";
}
- $_params = 'array(' . implode(",", $_paramsArray) . ')';
- $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)";
} else {
- $_params = implode(",", $_attr);
- $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})";
+ // object property
+ $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}";
}
+
if (empty($_assign)) {
// This tag does create output
$compiler->has_output = true;
@@ -71,9 +78,7 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
} else {
$output = "<?php \$_smarty_tpl->assign({$_assign},{$return});?>\n";
}
+
return $output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_private_php.php b/include/smarty/libs/sysplugins/smarty_internal_compile_private_php.php
new file mode 100644
index 000000000..3ca63a548
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_private_php.php
@@ -0,0 +1,209 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile PHP Expression
+ * Compiles any tag which will output an expression or variable
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile PHP Expression Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase
+{
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $required_attributes = array('code', 'type');
+
+ /**
+ * Compiles code for generating output from any expression
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string
+ * @throws \SmartyException
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $compiler->has_code = false;
+ if ($_attr['type'] == 'xml') {
+ $compiler->tag_nocache = true;
+ $save = $compiler->template->compiled->has_nocache_code;
+ $output = addcslashes($_attr['code'], "'\\");
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $compiler->processNocacheCode("<?php echo '" .
+ $output .
+ "';?>", $compiler, true)));
+ $compiler->template->compiled->has_nocache_code = $save;
+ return '';
+ }
+ if ($_attr['type'] != 'tag') {
+ if ($compiler->php_handling == Smarty::PHP_REMOVE) {
+ return '';
+ } elseif ($compiler->php_handling == Smarty::PHP_QUOTE) {
+ $output = preg_replace_callback('#(<\?(?:php|=)?)|(<%)|(<script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*>)|(\?>)|(%>)|(<\/script>)#i', array($this,
+ 'quote'), $_attr['code']);
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Text($output));
+ return '';
+ } elseif ($compiler->php_handling == Smarty::PHP_PASSTHRU || $_attr['type'] == 'unmatched') {
+ $compiler->tag_nocache = true;
+ $save = $compiler->template->compiled->has_nocache_code;
+ $output = addcslashes($_attr['code'], "'\\");
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $compiler->processNocacheCode("<?php echo '" .
+ $output .
+ "';?>", $compiler, true)));
+ $compiler->template->compiled->has_nocache_code = $save;
+ return '';
+ } elseif ($compiler->php_handling == Smarty::PHP_ALLOW) {
+ if (!($compiler->smarty instanceof SmartyBC)) {
+ $compiler->trigger_template_error('$smarty->php_handling PHP_ALLOW not allowed. Use SmartyBC to enable it', null, true);
+ }
+ $compiler->has_code = true;
+ return $_attr['code'];
+ } else {
+ $compiler->trigger_template_error('Illegal $smarty->php_handling value', null, true);
+ }
+ } else {
+ $compiler->has_code = true;
+ if (!($compiler->smarty instanceof SmartyBC)) {
+ $compiler->trigger_template_error('{php}{/php} tags not allowed. Use SmartyBC to enable them', null, true);
+ }
+ $ldel = preg_quote($compiler->smarty->left_delimiter, '#');
+ $rdel = preg_quote($compiler->smarty->right_delimiter, '#');
+ preg_match("#^({$ldel}php\\s*)((.)*?)({$rdel})#", $_attr['code'], $match);
+ if (!empty($match[2])) {
+ if ('nocache' == trim($match[2])) {
+ $compiler->tag_nocache = true;
+ } else {
+ $compiler->trigger_template_error("illegal value of option flag \"{$match[2]}\"", null, true);
+ }
+ }
+ return preg_replace(array("#^{$ldel}\\s*php\\s*(.)*?{$rdel}#",
+ "#{$ldel}\\s*/\\s*php\\s*{$rdel}$#"), array('<?php ', '?>'), $_attr['code']);
+ }
+ }
+
+ /**
+ * Lexer code for PHP tags
+ *
+ * This code has been moved from lexer here fo easier debugging and maintenance
+ *
+ * @param $lex
+ */
+ public function parsePhp($lex)
+ {
+ $lex->token = Smarty_Internal_Templateparser::TP_PHP;
+ $close = 0;
+ $lex->taglineno = $lex->line;
+ $closeTag = '?>';
+ if (strpos($lex->value, '<?xml') === 0) {
+ $lex->is_xml = true;
+ $lex->token = Smarty_Internal_Templateparser::TP_NOCACHE;
+ return;
+ } elseif (strpos($lex->value, '<?') === 0) {
+ $lex->phpType = 'php';
+ } elseif (strpos($lex->value, '<%') === 0) {
+ $lex->phpType = 'asp';
+ $closeTag = '%>';
+ } elseif (strpos($lex->value, '%>') === 0) {
+ $lex->phpType = 'unmatched';
+ } elseif (strpos($lex->value, '?>') === 0) {
+ if ($lex->is_xml) {
+ $lex->is_xml = false;
+ $lex->token = Smarty_Internal_Templateparser::TP_NOCACHE;
+ return;
+ }
+ $lex->phpType = 'unmatched';
+ } elseif (strpos($lex->value, '<s') === 0) {
+ $lex->phpType = 'script';
+ $closeTag = '</script>';
+ } elseif (strpos($lex->value, $lex->smarty->left_delimiter) === 0) {
+ if ($lex->isAutoLiteral()) {
+ $lex->token = Smarty_Internal_Templateparser::TP_TEXT;
+ return;
+ }
+ $closeTag = "{$lex->smarty->left_delimiter}/php{$lex->smarty->right_delimiter}";
+ if ($lex->value == $closeTag) {
+ $lex->compiler->trigger_template_error("unexpected closing tag '{$closeTag}'");
+ }
+ $lex->phpType = 'tag';
+ }
+ if ($lex->phpType == 'unmatched') {
+ return;
+ }
+ if (($lex->phpType == 'php' || $lex->phpType == 'asp') &&
+ ($lex->compiler->php_handling == Smarty::PHP_PASSTHRU || $lex->compiler->php_handling == Smarty::PHP_QUOTE)
+ ) {
+ return;
+ }
+ $start = $lex->counter + strlen($lex->value);
+ $body = true;
+ if (preg_match('~' . preg_quote($closeTag, '~') . '~i', $lex->data, $match, PREG_OFFSET_CAPTURE, $start)) {
+ $close = $match[0][1];
+ } else {
+ $lex->compiler->trigger_template_error("missing closing tag '{$closeTag}'");
+ }
+ while ($body) {
+ if (preg_match('~([/][*])|([/][/][^\n]*)|(\'[^\'\\\\]*(?:\\.[^\'\\\\]*)*\')|("[^"\\\\]*(?:\\.[^"\\\\]*)*")~', $lex->data, $match, PREG_OFFSET_CAPTURE, $start)) {
+ $value = $match[0][0];
+ $from = $pos = $match[0][1];
+ if ($pos > $close) {
+ $body = false;
+ } else {
+ $start = $pos + strlen($value);
+ $phpCommentStart = $value == '/*';
+ if ($phpCommentStart) {
+ $phpCommentEnd = preg_match('~([*][/])~', $lex->data, $match, PREG_OFFSET_CAPTURE, $start);
+ if ($phpCommentEnd) {
+ $pos2 = $match[0][1];
+ $start = $pos2 + strlen($match[0][0]);
+ }
+ }
+ while ($close > $pos && $close < $start) {
+ if (preg_match('~' . preg_quote($closeTag, '~') .
+ '~i', $lex->data, $match, PREG_OFFSET_CAPTURE, $from)) {
+ $close = $match[0][1];
+ $from = $close + strlen($match[0][0]);
+ } else {
+ $lex->compiler->trigger_template_error("missing closing tag '{$closeTag}'");
+ }
+ }
+ if ($phpCommentStart && (!$phpCommentEnd || $pos2 > $close)) {
+ $lex->taglineno = $lex->line + substr_count(substr($lex->data, $lex->counter, $start), "\n");
+ $lex->compiler->trigger_template_error("missing PHP comment closing tag '*/'");
+ }
+ }
+ } else {
+ $body = false;
+ }
+ }
+ $lex->value = substr($lex->data, $lex->counter, $close + strlen($closeTag) - $lex->counter);
+ }
+
+ /*
+ * Call back function for $php_handling = PHP_QUOTE
+ *
+ */
+ /**
+ * @param $match
+ *
+ * @return string
+ */
+ private function quote($match)
+ {
+ return htmlspecialchars($match[0], ENT_QUOTES);
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php b/include/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php
index a37119547..c0c089bff 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php
@@ -1,46 +1,48 @@
<?php
/**
-* Smarty Internal Plugin Compile Print Expression
-*
-* Compiles any tag which will output an expression or variable
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile Print Expression
+ * Compiles any tag which will output an expression or variable
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
/**
-* Smarty Internal Plugin Compile Print Expression Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile Print Expression Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase
+{
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $optional_attributes = array('assign');
+
/**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
public $option_flags = array('nocache', 'nofilter');
/**
- * Compiles code for gererting output from any expression
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter)
+ * Compiles code for generating output from any expression
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string
+ * @throws \SmartyException
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
@@ -48,12 +50,6 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
if ($_attr['nocache'] === true) {
$compiler->tag_nocache = true;
}
- // filter handling
- if ($_attr['nofilter'] === true) {
- $_filter = 'false';
- } else {
- $_filter = 'true';
- }
if (isset($_attr['assign'])) {
// assign output to variable
$output = "<?php \$_smarty_tpl->assign({$_attr['assign']},{$parameter['value']});?>";
@@ -62,7 +58,8 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
$output = $parameter['value'];
// tag modifier
if (!empty($parameter['modifierlist'])) {
- $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifierlist'], 'value' => $output));
+ $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifierlist'],
+ 'value' => $output));
}
if (!$_attr['nofilter']) {
// default modifier
@@ -71,27 +68,29 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
$modifierlist = array();
foreach ($compiler->smarty->default_modifiers as $key => $single_default_modifier) {
preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array);
- for ($i = 0, $count = count($mod_array[0]);$i < $count;$i++) {
+ for ($i = 0, $count = count($mod_array[0]); $i < $count; $i ++) {
if ($mod_array[0][$i] != ':') {
$modifierlist[$key][] = $mod_array[0][$i];
}
}
}
- $compiler->default_modifier_list = $modifierlist;
+ $compiler->default_modifier_list = $modifierlist;
}
- $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $compiler->default_modifier_list, 'value' => $output));
+ $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $compiler->default_modifier_list,
+ 'value' => $output));
}
// autoescape html
if ($compiler->template->smarty->escape_html) {
$output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')";
}
- // loop over registerd filters
+ // loop over registered filters
if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) {
- foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => $function) {
+ foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key =>
+ $function) {
if (!is_array($function)) {
$output = "{$function}({$output},\$_smarty_tpl)";
- } else if (is_object($function[0])) {
- $output = "\$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE][{$key}][0]->{$function[1]}({$output},\$_smarty_tpl)";
+ } elseif (is_object($function[0])) {
+ $output = "\$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE]['{$key}'][0]->{$function[1]}({$output},\$_smarty_tpl)";
} else {
$output = "{$function[0]}::{$function[1]}({$output},\$_smarty_tpl)";
}
@@ -99,7 +98,7 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
}
// auto loaded filters
if (isset($compiler->smarty->autoload_filters[Smarty::FILTER_VARIABLE])) {
- foreach ((array)$compiler->template->smarty->autoload_filters[Smarty::FILTER_VARIABLE] as $name) {
+ foreach ((array) $compiler->template->smarty->autoload_filters[Smarty::FILTER_VARIABLE] as $name) {
$result = $this->compile_output_filter($compiler, $name, $output);
if ($result !== false) {
$output = $result;
@@ -109,13 +108,14 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
}
}
}
- if (isset($compiler->template->variable_filters)) {
- foreach ($compiler->template->variable_filters as $filter) {
- if (count($filter) == 1 && ($result = $this->compile_output_filter($compiler, $filter[0], $output)) !== false) {
- $output = $result;
- } else {
- $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => array($filter), 'value' => $output));
- }
+ foreach ($compiler->variable_filters as $filter) {
+ if (count($filter) == 1 &&
+ ($result = $this->compile_output_filter($compiler, $filter[0], $output)) !== false
+ ) {
+ $output = $result;
+ } else {
+ $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => array($filter),
+ 'value' => $output));
}
}
}
@@ -123,34 +123,34 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
$compiler->has_output = true;
$output = "<?php echo {$output};?>";
}
+
return $output;
}
/**
- * @param object $compiler compiler object
- * @param string $name name of variable filter
- * @param type $output embedded output
- * @return string
- */
- private function compile_output_filter($compiler, $name, $output)
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param string $name name of variable filter
+ * @param string $output embedded output
+ *
+ * @return string
+ */
+ private function compile_output_filter(Smarty_Internal_TemplateCompilerBase $compiler, $name, $output)
{
$plugin_name = "smarty_variablefilter_{$name}";
$path = $compiler->smarty->loadPlugin($plugin_name, false);
if ($path) {
if ($compiler->template->caching) {
- $compiler->template->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['file'] = $path;
- $compiler->template->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name;
+ $compiler->parent_compiler->template->compiled->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['file'] = $path;
+ $compiler->parent_compiler->template->compiled->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name;
} else {
- $compiler->template->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['file'] = $path;
- $compiler->template->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name;
+ $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['file'] = $path;
+ $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name;
}
} else {
// not found
return false;
}
+
return "{$plugin_name}({$output},\$_smarty_tpl)";
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php b/include/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php
index f104853a8..78d95f720 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Registered Block
- *
* Compiles code for the execution of a registered block function
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Registered Block Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -28,34 +27,35 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
/**
* Compiles code for the execution of a block function
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @param string $tag name of block function
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of block function
+ *
* @return string compiled code
*/
- public function compile($args, $compiler, $parameter, $tag)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag)
{
- if (!isset($tag[5]) || substr($tag,-5) != 'close') {
+ if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
// opening tag of block plugin
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
if ($_attr['nocache']) {
$compiler->tag_nocache = true;
}
- unset($_attr['nocache']);
- if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) {
- $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag];
- } else {
- $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag];
- }
+ unset($_attr['nocache']);
+ if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) {
+ $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag];
+ } else {
+ $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag];
+ }
// convert attributes into parameter array string
$_paramsArray = array();
foreach ($_attr as $_key => $_value) {
if (is_int($_key)) {
$_paramsArray[] = "$_key=>$_value";
- } elseif ($compiler->template->caching && in_array($_key,$tag_info[2])) {
- $_value = str_replace("'","^#^",$_value);
+ } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) {
+ $_value = str_replace("'", "^#^", $_value);
$_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
} else {
$_paramsArray[] = "'$_key'=>$_value";
@@ -69,45 +69,51 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
$function = $tag_info[0];
// compile code
if (!is_array($function)) {
- $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
- } else if (is_object($function[0])) {
- $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
+ $output = "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
+ } elseif (is_object($function[0])) {
+ $output = "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
} else {
- $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function[0]}::{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
+ $output = "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function[0]}::{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
}
} else {
// must endblock be nocache?
if ($compiler->nocache) {
$compiler->tag_nocache = true;
}
- $base_tag = substr($tag, 0, -5);
+ $base_tag = substr($tag, 0, - 5);
// closing tag of block plugin, restore nocache
list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag);
// This tag does create output
$compiler->has_output = true;
- if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) {
- $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
- } else {
- $function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
- }
+ if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) {
+ $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
+ } else {
+ $function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
+ }
// compile code
if (!isset($parameter['modifier_list'])) {
- $mod_pre = $mod_post ='';
+ $mod_pre = $mod_post = '';
} else {
$mod_pre = ' ob_start(); ';
- $mod_post = 'echo '.$compiler->compileTag('private_modifier',array(),array('modifierlist'=>$parameter['modifier_list'],'value'=>'ob_get_clean()')).';';
+ $mod_post = 'echo ' .
+ $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'],
+ 'value' => 'ob_get_clean()')) . ';';
}
if (!is_array($function)) {
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat);".$mod_post." } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
- } else if (is_object($function[0])) {
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post."} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
+ $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre .
+ " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat);" . $mod_post .
+ " } array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>";
+ } elseif (is_object($function[0])) {
+ $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre .
+ " echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " .
+ $mod_post . "} array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>";
} else {
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post."} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
+ $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre .
+ " echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " .
+ $mod_post . "} array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>";
}
}
+
return $output . "\n";
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php b/include/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php
index e68a0244d..6bddc7529 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Registered Function
- *
* Compiles code for the execution of a registered function
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Registered Function Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Internal_CompileBase
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -28,13 +27,14 @@ class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Interna
/**
* Compiles code for the execution of a registered function
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @param string $tag name of function
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ * @param string $tag name of function
+ *
* @return string compiled code
*/
- public function compile($args, $compiler, $parameter, $tag)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag)
{
// This tag does create output
$compiler->has_output = true;
@@ -44,20 +44,20 @@ class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Interna
$compiler->tag_nocache = true;
}
unset($_attr['nocache']);
- if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag])) {
- $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag];
- } else {
- $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_FUNCTION][$tag];
- }
+ if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag])) {
+ $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag];
+ } else {
+ $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_FUNCTION][$tag];
+ }
// not cachable?
- $compiler->tag_nocache = $compiler->tag_nocache || !$tag_info[1];
+ $compiler->tag_nocache = $compiler->tag_nocache || !$tag_info[1];
// convert attributes into parameter array string
$_paramsArray = array();
foreach ($_attr as $_key => $_value) {
if (is_int($_key)) {
$_paramsArray[] = "$_key=>$_value";
- } elseif ($compiler->template->caching && in_array($_key,$tag_info[2])) {
- $_value = str_replace("'","^#^",$_value);
+ } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) {
+ $_value = str_replace("'", "^#^", $_value);
$_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
} else {
$_paramsArray[] = "'$_key'=>$_value";
@@ -68,14 +68,12 @@ class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Interna
// compile code
if (!is_array($function)) {
$output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n";
- } else if (is_object($function[0])) {
+ } elseif (is_object($function[0])) {
$output = "<?php echo \$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl);?>\n";
} else {
$output = "<?php echo {$function[0]}::{$function[1]}({$_params},\$_smarty_tpl);?>\n";
}
+
return $output;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php b/include/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
index af8fcd372..b83e824af 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
@@ -1,111 +1,126 @@
<?php
/**
* Smarty Internal Plugin Compile Special Smarty Variable
- *
* Compiles the special $smarty variables
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile special Smarty Variable Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase
+{
/**
- * Compiles code for the speical $smarty variables
+ * Compiles code for the special $smarty variables
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param $parameter
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
* @return string compiled code
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
- $_index = preg_split("/\]\[/",substr($parameter, 1, strlen($parameter)-2));
- $compiled_ref = ' ';
- $variable = trim($_index[0], "'");
- switch ($variable) {
- case 'foreach':
- return "\$_smarty_tpl->getVariable('smarty')->value$parameter";
- case 'section':
- return "\$_smarty_tpl->getVariable('smarty')->value$parameter";
- case 'capture':
- return "Smarty::\$_smarty_vars$parameter";
- case 'now':
- return 'time()';
- case 'cookies':
- if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_super_globals) {
- $compiler->trigger_template_error("(secure mode) super globals not permitted");
+ $_index = preg_split("/\]\[/", substr($parameter, 1, strlen($parameter) - 2));
+ $variable = strtolower($compiler->getId($_index[ 0 ]));
+ if ($variable === false) {
+ $compiler->trigger_template_error("special \$Smarty variable name index can not be variable", null, true);
+ }
+ if (!isset($compiler->smarty->security_policy) ||
+ $compiler->smarty->security_policy->isTrustedSpecialSmartyVar($variable, $compiler)
+ ) {
+ switch ($variable) {
+ case 'foreach':
+ case 'section':
+ if (!isset($compiler->_tag_objects[ $variable ])) {
+ $class = 'Smarty_Internal_Compile_' . ucfirst($variable);
+ $compiler->_tag_objects[ $variable ] = new $class;
+ }
+ return $compiler->_tag_objects[ $variable ]->compileSpecialVariable(array(), $compiler, $_index);
+ case 'capture':
+ if (class_exists('Smarty_Internal_Compile_Capture')) {
+ return Smarty_Internal_Compile_Capture::compileSpecialVariable(array(), $compiler, $_index);
+ }
+ return '';
+ case 'now':
+ return 'time()';
+ case 'cookies':
+ if (isset($compiler->smarty->security_policy) &&
+ !$compiler->smarty->security_policy->allow_super_globals
+ ) {
+ $compiler->trigger_template_error("(secure mode) super globals not permitted");
+ break;
+ }
+ $compiled_ref = '$_COOKIE';
break;
- }
- $compiled_ref = '$_COOKIE';
- break;
-
- case 'get':
- case 'post':
- case 'env':
- case 'server':
- case 'session':
- case 'request':
- if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_super_globals) {
- $compiler->trigger_template_error("(secure mode) super globals not permitted");
+ case 'get':
+ case 'post':
+ case 'env':
+ case 'server':
+ case 'session':
+ case 'request':
+ if (isset($compiler->smarty->security_policy) &&
+ !$compiler->smarty->security_policy->allow_super_globals
+ ) {
+ $compiler->trigger_template_error("(secure mode) super globals not permitted");
+ break;
+ }
+ $compiled_ref = '$_' . strtoupper($variable);
break;
- }
- $compiled_ref = '$_'.strtoupper($variable);
- break;
- case 'template':
- return 'basename($_smarty_tpl->source->filepath)';
+ case 'template':
+ return 'basename($_smarty_tpl->source->filepath)';
- case 'template_object':
- return '$_smarty_tpl';
+ case 'template_object':
+ return '$_smarty_tpl';
- case 'current_dir':
- return 'dirname($_smarty_tpl->source->filepath)';
+ case 'current_dir':
+ return 'dirname($_smarty_tpl->source->filepath)';
- case 'version':
- $_version = Smarty::SMARTY_VERSION;
- return "'$_version'";
+ case 'version':
+ return "Smarty::SMARTY_VERSION";
- case 'const':
- if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_constants) {
- $compiler->trigger_template_error("(secure mode) constants not permitted");
- break;
- }
- return "@constant({$_index[1]})";
+ case 'const':
+ if (isset($compiler->smarty->security_policy) &&
+ !$compiler->smarty->security_policy->allow_constants
+ ) {
+ $compiler->trigger_template_error("(secure mode) constants not permitted");
+ break;
+ }
+ if (strpos($_index[ 1 ], '$') === false && strpos($_index[ 1 ], '\'') === false) {
+ return "@constant('{$_index[1]}')";
+ } else {
+ return "@constant({$_index[1]})";
+ }
- case 'config':
- if (isset($_index[2])) {
- return "(is_array(\$tmp = \$_smarty_tpl->getConfigVariable($_index[1])) ? \$tmp[$_index[2]] : null)";
- } else {
- return "\$_smarty_tpl->getConfigVariable($_index[1])";
+ case 'config':
+ if (isset($_index[ 2 ])) {
+ return "(is_array(\$tmp = \$_smarty_tpl->smarty->ext->configload->_getConfigVariable(\$_smarty_tpl, $_index[1])) ? \$tmp[$_index[2]] : null)";
+ } else {
+ return "\$_smarty_tpl->smarty->ext->configload->_getConfigVariable(\$_smarty_tpl, $_index[1])";
+ }
+ case 'ldelim':
+ return "\$_smarty_tpl->smarty->left_delimiter";
+ case 'rdelim':
+ return "\$_smarty_tpl->smarty->right_delimiter";
+ default:
+ $compiler->trigger_template_error('$smarty.' . trim($_index[ 0 ], "'") . ' is not defined');
+ break;
+ }
+ if (isset($_index[ 1 ])) {
+ array_shift($_index);
+ foreach ($_index as $_ind) {
+ $compiled_ref = $compiled_ref . "[$_ind]";
}
- case 'ldelim':
- $_ldelim = $compiler->smarty->left_delimiter;
- return "'$_ldelim'";
-
- case 'rdelim':
- $_rdelim = $compiler->smarty->right_delimiter;
- return "'$_rdelim'";
-
- default:
- $compiler->trigger_template_error('$smarty.' . trim($_index[0], "'") . ' is invalid');
- break;
- }
- if (isset($_index[1])) {
- array_shift($_index);
- foreach ($_index as $_ind) {
- $compiled_ref = $compiled_ref . "[$_ind]";
}
+ return $compiled_ref;
}
- return $compiled_ref;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php b/include/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php
index 807c7e2b9..22b33eaa2 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php
@@ -1,41 +1,39 @@
<?php
/**
* Smarty Internal Plugin Compile Rdelim
- *
* Compiles the {rdelim} tag
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Rdelim Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {rdelim} tag
- *
* This tag does output the right delimiter.
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
$_attr = $this->getAttributes($compiler, $args);
if ($_attr['nocache'] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
+ $compiler->trigger_template_error('nocache option not allowed', null, true);
}
// this tag does not return compiled code
$compiler->has_code = true;
+
return $compiler->smarty->right_delimiter;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_section.php b/include/smarty/libs/sysplugins/smarty_internal_compile_section.php
index ccb7673d8..40b297a64 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_section.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_section.php
@@ -1,22 +1,21 @@
<?php
/**
* Smarty Internal Plugin Compile Section
- *
* Compiles the {section} {sectionelse} {/section} tags
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Section Class
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_ForeachSection
+{
/**
* Attribute definition: Overwrites base class.
*
@@ -24,6 +23,7 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $required_attributes = array('name', 'loop');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -31,6 +31,7 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
* @see Smarty_Internal_CompileBase
*/
public $shorttag_order = array('name', 'loop');
+
/**
* Attribute definition: Overwrites base class.
*
@@ -40,164 +41,414 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
public $optional_attributes = array('start', 'step', 'max', 'show');
/**
+ * counter
+ *
+ * @var int
+ */
+ public $counter = 0;
+
+ /**
+ * Name of this tag
+ *
+ * @var string
+ */
+ public $tagName = 'section';
+
+ /**
+ * Valid properties of $smarty.section.name.xxx variable
+ *
+ * @var array
+ */
+ public $nameProperties = array('first', 'last', 'index', 'iteration', 'show', 'total', 'rownum',
+ 'index_prev', 'index_next');
+
+ /**
+ * {section} tag has no item properties
+ *
+ * @var array
+ */
+ public $itemProperties = null;
+
+ /**
+ * {section} tag has always name attribute
+ *
+ * @var bool
+ */
+ public $isNamed = true;
+
+ /**
* Compiles code for the {section} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
* @return string compiled code
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
+ $compiler->loopNesting++;
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
-
- $this->openTag($compiler, 'section', array('section', $compiler->nocache));
+ $attributes = array('name' => $compiler->getId($_attr['name']));
+ unset($_attr['name']);
+ foreach ($attributes as $a => $v) {
+ if ($v === false) {
+ $compiler->trigger_template_error("'{$a}' attribute/variable has illegal value", null, true);
+ }
+ }
+ $local = "\$__section_{$attributes['name']}_" . $this->counter ++ . '_';
+ $sectionVar = "\$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}']";
+ $this->openTag($compiler, 'section', array('section', $compiler->nocache, $local, $sectionVar));
// maybe nocache because of nocache variables
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- $output = "<?php ";
-
- $section_name = $_attr['name'];
-
- $output .= "if (isset(\$_smarty_tpl->tpl_vars['smarty']->value['section'][$section_name])) unset(\$_smarty_tpl->tpl_vars['smarty']->value['section'][$section_name]);\n";
- $section_props = "\$_smarty_tpl->tpl_vars['smarty']->value['section'][$section_name]";
-
+ $initLocal = array('saved' => "isset(\$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}']) ? \$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}'] : false",);
+ $initNamedProperty = array();
+ $initFor = array();
+ $incFor = array();
+ $cmpFor = array();
+ $propValue = array('index' => "{$sectionVar}->value['index']", 'show' => 'true', 'step' => 1,
+ 'iteration' => "{$local}iteration",
+
+ );
+ $propType = array('index' => 2, 'iteration' => 2, 'show' => 0, 'step' => 0,);
+ // search for used tag attributes
+ $this->scanForProperties($attributes, $compiler);
+ if (!empty($this->matchResults['named'])) {
+ $namedAttr = $this->matchResults['named'];
+ }
+ $namedAttr['index'] = true;
+ $output = "<?php\n";
foreach ($_attr as $attr_name => $attr_value) {
switch ($attr_name) {
case 'loop':
- $output .= "{$section_props}['loop'] = is_array(\$_loop=$attr_value) ? count(\$_loop) : max(0, (int)\$_loop); unset(\$_loop);\n";
+ if (is_numeric($attr_value)) {
+ $v = (int) $attr_value;
+ $t = 0;
+ } else {
+ $v = "(is_array(@\$_loop=$attr_value) ? count(\$_loop) : max(0, (int) \$_loop))";
+ $t = 1;
+ }
+ if (isset($namedAttr['loop'])) {
+ $initNamedProperty['loop'] = "'loop' => {$v}";
+ if ($t == 1) {
+ $v = "{$sectionVar}->value['loop']";
+ }
+ } elseif ($t == 1) {
+ $initLocal['loop'] = $v;
+ $v = "{$local}loop";
+ }
break;
-
case 'show':
- if (is_bool($attr_value))
- $show_attr_value = $attr_value ? 'true' : 'false';
- else
- $show_attr_value = "(bool)$attr_value";
- $output .= "{$section_props}['show'] = $show_attr_value;\n";
+ if (is_bool($attr_value)) {
+ $v = $attr_value ? 'true' : 'false';
+ $t = 0;
+ } else {
+ $v = "(bool) $attr_value";
+ $t = 3;
+ }
break;
-
- case 'name':
- $output .= "{$section_props}['$attr_name'] = $attr_value;\n";
+ case 'step':
+ if (is_numeric($attr_value)) {
+ $v = (int) $attr_value;
+ $v = ($v == 0) ? 1 : $v;
+ $t = 0;
+ break;
+ }
+ $initLocal['step'] = "((int)@$attr_value) == 0 ? 1 : (int)@$attr_value";
+ $v = "{$local}step";
+ $t = 2;
break;
case 'max':
case 'start':
- $output .= "{$section_props}['$attr_name'] = (int)$attr_value;\n";
- break;
-
- case 'step':
- $output .= "{$section_props}['$attr_name'] = ((int)$attr_value) == 0 ? 1 : (int)$attr_value;\n";
+ if (is_numeric($attr_value)) {
+ $v = (int) $attr_value;
+ $t = 0;
+ break;
+ }
+ $v = "(int)@$attr_value";
+ $t = 3;
break;
}
+ if ($t == 3 && $compiler->getId($attr_value)) {
+ $t = 1;
+ }
+ $propValue[$attr_name] = $v;
+ $propType[$attr_name] = $t;
}
- if (!isset($_attr['show']))
- $output .= "{$section_props}['show'] = true;\n";
-
- if (!isset($_attr['loop']))
- $output .= "{$section_props}['loop'] = 1;\n";
-
- if (!isset($_attr['max']))
- $output .= "{$section_props}['max'] = {$section_props}['loop'];\n";
- else
- $output .= "if ({$section_props}['max'] < 0)\n" . " {$section_props}['max'] = {$section_props}['loop'];\n";
+ if (isset($namedAttr['step'])) {
+ $initNamedProperty['step'] = $propValue['step'];
+ }
+ if (isset($namedAttr['iteration'])) {
+ $propValue['iteration'] = "{$sectionVar}->value['iteration']";
+ }
+ $incFor['iteration'] = "{$propValue['iteration']}++";
+ $initFor['iteration'] = "{$propValue['iteration']} = 1";
+
+ if ($propType['step'] == 0) {
+ if ($propValue['step'] == 1) {
+ $incFor['index'] = "{$sectionVar}->value['index']++";
+ } elseif ($propValue['step'] > 1) {
+ $incFor['index'] = "{$sectionVar}->value['index'] += {$propValue['step']}";
+ } else {
+ $incFor['index'] = "{$sectionVar}->value['index'] -= " . - $propValue['step'];
+ }
+ } else {
+ $incFor['index'] = "{$sectionVar}->value['index'] += {$propValue['step']}";
+ }
- if (!isset($_attr['step']))
- $output .= "{$section_props}['step'] = 1;\n";
+ if (!isset($propValue['max'])) {
+ $propValue['max'] = $propValue['loop'];
+ $propType['max'] = $propType['loop'];
+ } elseif ($propType['max'] != 0) {
+ $propValue['max'] = "{$propValue['max']} < 0 ? {$propValue['loop']} : {$propValue['max']}";
+ $propType['max'] = 1;
+ } else {
+ if ($propValue['max'] < 0) {
+ $propValue['max'] = $propValue['loop'];
+ $propType['max'] = $propType['loop'];
+ }
+ }
- if (!isset($_attr['start']))
- $output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n";
- else {
- $output .= "if ({$section_props}['start'] < 0)\n" . " {$section_props}['start'] = max({$section_props}['step'] > 0 ? 0 : -1, {$section_props}['loop'] + {$section_props}['start']);\n" . "else\n" . " {$section_props}['start'] = min({$section_props}['start'], {$section_props}['step'] > 0 ? {$section_props}['loop'] : {$section_props}['loop']-1);\n";
+ if (!isset($propValue['start'])) {
+ $start_code = array(1 => "{$propValue['step']} > 0 ? ", 2 => '0', 3 => ' : ', 4 => $propValue['loop'],
+ 5 => ' - 1');
+ if ($propType['loop'] == 0) {
+ $start_code[5] = '';
+ $start_code[4] = $propValue['loop'] - 1;
+ }
+ if ($propType['step'] == 0) {
+ if ($propValue['step'] > 0) {
+ $start_code = array(1 => '0');
+ $propType['start'] = 0;
+ } else {
+ $start_code[1] = $start_code[2] = $start_code[3] = '';
+ $propType['start'] = $propType['loop'];
+ }
+ } else {
+ $propType['start'] = 1;
+ }
+ $propValue['start'] = join('', $start_code);
+ } else {
+ $start_code = array(1 => "{$propValue['start']} < 0 ? ", 2 => 'max(', 3 => "{$propValue['step']} > 0 ? ",
+ 4 => '0', 5 => ' : ', 6 => '-1', 7 => ', ',
+ 8 => "{$propValue['start']} + {$propValue['loop']}", 10 => ')', 11 => ' : ',
+ 12 => 'min(', 13 => $propValue['start'], 14 => ', ',
+ 15 => "{$propValue['step']} > 0 ? ", 16 => $propValue['loop'], 17 => ' : ',
+ 18 => $propType['loop'] == 0 ? $propValue['loop'] - 1 : "{$propValue['loop']} - 1",
+ 19 => ')');
+ if ($propType['step'] == 0) {
+ $start_code[3] = $start_code[5] = $start_code[15] = $start_code[17] = '';
+ if ($propValue['step'] > 0) {
+ $start_code[6] = $start_code[18] = '';
+ } else {
+ $start_code[4] = $start_code[16] = '';
+ }
+ }
+ if ($propType['start'] == 0) {
+ if ($propType['loop'] == 0) {
+ $start_code[8] = $propValue['start'] + $propValue['loop'];
+ }
+ $propType['start'] = $propType['step'] + $propType['loop'];
+ $start_code[1] = '';
+ if ($propValue['start'] < 0) {
+ for ($i = 11; $i <= 19; $i ++) {
+ $start_code[$i] = '';
+ }
+ if ($propType['start'] == 0) {
+ $start_code = array(max($propValue['step'] > 0 ? 0 : - 1, $propValue['start'] +
+ $propValue['loop']));
+ }
+ } else {
+ for ($i = 1; $i <= 11; $i ++) {
+ $start_code[$i] = '';
+ }
+ if ($propType['start'] == 0) {
+ $start_code = array(min($propValue['step'] > 0 ? $propValue['loop'] : $propValue['loop'] -
+ 1, $propValue['start']));
+ }
+ }
+ }
+ $propValue['start'] = join('', $start_code);
+ }
+ if ($propType['start'] != 0) {
+ $initLocal['start'] = $propValue['start'];
+ $propValue['start'] = "{$local}start";
}
- $output .= "if ({$section_props}['show']) {\n";
+ $initFor['index'] = "{$sectionVar}->value['index'] = {$propValue['start']}";
+
if (!isset($_attr['start']) && !isset($_attr['step']) && !isset($_attr['max'])) {
- $output .= " {$section_props}['total'] = {$section_props}['loop'];\n";
+ $propValue['total'] = $propValue['loop'];
+ $propType['total'] = $propType['loop'];
} else {
- $output .= " {$section_props}['total'] = min(ceil(({$section_props}['step'] > 0 ? {$section_props}['loop'] - {$section_props}['start'] : {$section_props}['start']+1)/abs({$section_props}['step'])), {$section_props}['max']);\n";
+ $propType['total'] = $propType['start'] + $propType['loop'] + $propType['step'] + $propType['max'];
+ if ($propType['total'] == 0) {
+ $propValue['total'] = min(ceil(($propValue['step'] > 0 ? $propValue['loop'] -
+ $propValue['start'] : (int) $propValue['start'] + 1) /
+ abs($propValue['step'])), $propValue['max']);
+ } else {
+ $total_code = array(1 => 'min(', 2 => 'ceil(', 3 => '(', 4 => "{$propValue['step']} > 0 ? ",
+ 5 => $propValue['loop'], 6 => ' - ', 7 => $propValue['start'], 8 => ' : ',
+ 9 => $propValue['start'], 10 => '+ 1', 11 => ')', 12 => '/ ', 13 => 'abs(',
+ 14 => $propValue['step'], 15 => ')', 16 => ')', 17 => ", {$propValue['max']})",);
+ if (!isset($propValue['max'])) {
+ $total_code[1] = $total_code[17] = '';
+ }
+ if ($propType['loop'] + $propType['start'] == 0) {
+ $total_code[5] = $propValue['loop'] - $propValue['start'];
+ $total_code[6] = $total_code[7] = '';
+ }
+ if ($propType['start'] == 0) {
+ $total_code[9] = (int) $propValue['start'] + 1;
+ $total_code[10] = '';
+ }
+ if ($propType['step'] == 0) {
+ $total_code[13] = $total_code[15] = '';
+ if ($propValue['step'] == 1 || $propValue['step'] == - 1) {
+ $total_code[2] = $total_code[12] = $total_code[14] = $total_code[16] = '';
+ } elseif ($propValue['step'] < 0) {
+ $total_code[14] = - $propValue['step'];
+ }
+ $total_code[4] = '';
+ if ($propValue['step'] > 0) {
+ $total_code[8] = $total_code[9] = $total_code[10] = '';
+ } else {
+ $total_code[5] = $total_code[6] = $total_code[7] = $total_code[8] = '';
+ }
+ }
+ $propValue['total'] = join('', $total_code);
+ }
+ }
+
+ if (isset($namedAttr['total'])) {
+ $initNamedProperty['total'] = "'total' => {$propValue['total']}";
+ if ($propType['total'] > 0) {
+ $propValue['total'] = "{$sectionVar}->value['total']";
+ }
+ } elseif ($propType['total'] > 0) {
+ $initLocal['total'] = $propValue['total'];
+ $propValue['total'] = "{$local}total";
}
- $output .= " if ({$section_props}['total'] == 0)\n" . " {$section_props}['show'] = false;\n" . "} else\n" . " {$section_props}['total'] = 0;\n";
- $output .= "if ({$section_props}['show']):\n";
- $output .= "
- for ({$section_props}['index'] = {$section_props}['start'], {$section_props}['iteration'] = 1;
- {$section_props}['iteration'] <= {$section_props}['total'];
- {$section_props}['index'] += {$section_props}['step'], {$section_props}['iteration']++):\n";
- $output .= "{$section_props}['rownum'] = {$section_props}['iteration'];\n";
- $output .= "{$section_props}['index_prev'] = {$section_props}['index'] - {$section_props}['step'];\n";
- $output .= "{$section_props}['index_next'] = {$section_props}['index'] + {$section_props}['step'];\n";
- $output .= "{$section_props}['first'] = ({$section_props}['iteration'] == 1);\n";
- $output .= "{$section_props}['last'] = ({$section_props}['iteration'] == {$section_props}['total']);\n";
+ $cmpFor['iteration'] = "{$propValue['iteration']} <= {$propValue['total']}";
+ foreach ($initLocal as $key => $code) {
+ $output .= "{$local}{$key} = {$code};\n";
+ }
+
+ $_vars = 'array(' . join(', ', $initNamedProperty) . ')';
+ $output .= "{$sectionVar} = new Smarty_Variable({$_vars});\n";
+ $cond_code = "{$propValue['total']} != 0";
+ if ($propType['total'] == 0) {
+ if ($propValue['total'] == 0) {
+ $cond_code = 'false';
+ } else {
+ $cond_code = 'true';
+ }
+ }
+ if ($propType['show'] > 0) {
+ $output .= "{$local}show = {$propValue['show']} ? {$cond_code} : false;\n";
+ $output .= "if ({$local}show) {\n";
+ } elseif ($propValue['show'] == 'true') {
+ $output .= "if ({$cond_code}) {\n";
+ } else {
+ $output .= "if (false) {\n";
+ }
+ $jinit = join(', ', $initFor);
+ $jcmp = join(', ', $cmpFor);
+ $jinc = join(', ', $incFor);
+ $output .= "for ({$jinit}; {$jcmp}; {$jinc}){\n";
+ if (isset($namedAttr['rownum'])) {
+ $output .= "{$sectionVar}->value['rownum'] = {$propValue['iteration']};\n";
+ }
+ if (isset($namedAttr['index_prev'])) {
+ $output .= "{$sectionVar}->value['index_prev'] = {$propValue['index']} - {$propValue['step']};\n";
+ }
+ if (isset($namedAttr['index_next'])) {
+ $output .= "{$sectionVar}->value['index_next'] = {$propValue['index']} + {$propValue['step']};\n";
+ }
+ if (isset($namedAttr['first'])) {
+ $output .= "{$sectionVar}->value['first'] = ({$propValue['iteration']} == 1);\n";
+ }
+ if (isset($namedAttr['last'])) {
+ $output .= "{$sectionVar}->value['last'] = ({$propValue['iteration']} == {$propValue['total']});\n";
+ }
$output .= "?>";
+
return $output;
}
-
}
/**
* Smarty Internal Plugin Compile Sectionelse Class
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {sectionelse} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
* @return string compiled code
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
- list($openTag, $nocache) = $this->closeTag($compiler, array('section'));
- $this->openTag($compiler, 'sectionelse', array('sectionelse', $nocache));
+ list($openTag, $nocache, $local, $sectionVar) = $this->closeTag($compiler, array('section'));
+ $this->openTag($compiler, 'sectionelse', array('sectionelse', $nocache, $local, $sectionVar));
- return "<?php endfor; else: ?>";
+ return "<?php }} else {\n ?>";
}
-
}
/**
* Smarty Internal Plugin Compile Sectionclose Class
- *
- * @package Smarty
+ *
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/section} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
* @return string compiled code
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
-
+ $compiler->loopNesting--;
// must endblock be nocache?
if ($compiler->nocache) {
$compiler->tag_nocache = true;
}
- list($openTag, $compiler->nocache) = $this->closeTag($compiler, array('section', 'sectionelse'));
+ list($openTag, $compiler->nocache, $local, $sectionVar) = $this->closeTag($compiler, array('section',
+ 'sectionelse'));
+ $output = "<?php\n";
if ($openTag == 'sectionelse') {
- return "<?php endif; ?>";
+ $output .= "}\n";
} else {
- return "<?php endfor; endif; ?>";
+ $output .= "}\n}\n";
}
- }
+ $output .= "if ({$local}saved) {\n";
+ $output .= "{$sectionVar} = {$local}saved;\n";
+ $output .= "}\n";
+ $output .= "?>";
+ return $output;
+ }
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php b/include/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php
index 50b4cab55..b4932c1e1 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php
@@ -1,72 +1,70 @@
<?php
/**
* Smarty Internal Plugin Compile Setfilter
- *
* Compiles code for setfilter tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Setfilter Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for setfilter tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
- $compiler->variable_filter_stack[] = $compiler->template->variable_filters;
- $compiler->template->variable_filters = $parameter['modifier_list'];
+ $compiler->variable_filter_stack[] = $compiler->variable_filters;
+ $compiler->variable_filters = $parameter['modifier_list'];
// this tag does not return compiled code
$compiler->has_code = false;
+
return true;
}
-
}
/**
* Smarty Internal Plugin Compile Setfilterclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/setfilter} tag
- *
* This tag does not generate compiled output. It resets variable filter.
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param object $compiler compiler object
+ *
* @return string compiled code
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
$_attr = $this->getAttributes($compiler, $args);
// reset variable filter to previous state
if (count($compiler->variable_filter_stack)) {
- $compiler->template->variable_filters = array_pop($compiler->variable_filter_stack);
+ $compiler->variable_filters = array_pop($compiler->variable_filter_stack);
} else {
- $compiler->template->variable_filters = array();
+ $compiler->variable_filters = array();
}
// this tag does not return compiled code
$compiler->has_code = false;
+
return true;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php b/include/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php
new file mode 100644
index 000000000..c7bf1f8fb
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Smarty Internal Plugin Compile Shared Inheritance
+ * Shared methods for {extends} and {block} tags
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Shared Inheritance Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Shared_Inheritance extends Smarty_Internal_CompileBase
+{
+ /**
+ * Register post compile callback to compile inheritance initialization code
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ * @param bool|false $initChildSequence if true force child template
+ */
+ public function registerInit(Smarty_Internal_TemplateCompilerBase $compiler, $initChildSequence = false)
+ {
+ if ($initChildSequence || !isset($compiler->_cache['inheritanceInit'])) {
+ $compiler->registerPostCompileCallback(array('Smarty_Internal_Compile_Shared_Inheritance', 'postCompile'),
+ array($initChildSequence), 'inheritanceInit', $initChildSequence);
+
+ $compiler->_cache['inheritanceInit'] = true;
+ }
+ }
+
+ /**
+ * Compile inheritance initialization code as prefix
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ * @param bool|false $initChildSequence if true force child template
+ */
+ static function postCompile(Smarty_Internal_TemplateCompilerBase $compiler, $initChildSequence = false)
+ {
+ $compiler->prefixCompiledCode .= "<?php \$_smarty_tpl->ext->_inheritance->init(\$_smarty_tpl, " .
+ var_export($initChildSequence, true) . ");\n?>\n";
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compile_while.php b/include/smarty/libs/sysplugins/smarty_internal_compile_while.php
index d7d986c34..bd31f6671 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compile_while.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compile_while.php
@@ -1,94 +1,108 @@
<?php
/**
* Smarty Internal Plugin Compile While
- *
* Compiles the {while} tag
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile While Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {while} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
* @return string compiled code
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
+ $compiler->loopNesting++;
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
$this->openTag($compiler, 'while', $compiler->nocache);
- if (!array_key_exists("if condition",$parameter)) {
- $compiler->trigger_template_error("missing while condition", $compiler->lex->taglineno);
+ if (!array_key_exists("if condition", $parameter)) {
+ $compiler->trigger_template_error("missing while condition", null, true);
}
// maybe nocache because of nocache variables
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
+ $_output = "<?php\n";
if (is_array($parameter['if condition'])) {
if ($compiler->nocache) {
$_nocache = ',true';
// create nocache var to make it know for further compiling
if (is_array($parameter['if condition']['var'])) {
- $compiler->template->tpl_vars[trim($parameter['if condition']['var']['var'], "'")] = new Smarty_variable(null, true);
+ $var = trim($parameter['if condition']['var']['var'], "'");
} else {
- $compiler->template->tpl_vars[trim($parameter['if condition']['var'], "'")] = new Smarty_variable(null, true);
+ $var = trim($parameter['if condition']['var'], "'");
+ }
+ if (isset($compiler->template->tpl_vars[$var])) {
+ $compiler->template->tpl_vars[$var]->nocache = true;
+ } else {
+ $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true);
}
} else {
$_nocache = '';
}
if (is_array($parameter['if condition']['var'])) {
- $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
- $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . "){?>";
+ $_output .= "if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] .
+ "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] .
+ "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . $parameter['if condition']['var']['var'] .
+ "$_nocache);\n";
+ $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" .
+ $parameter['if condition']['var']['smarty_internal_index'] . " = " .
+ $parameter['if condition']['value'] . ") {?>";
} else {
- $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
- $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . "){?>";
+ $_output .= "if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] .
+ "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] .
+ "] = new Smarty_Variable(null{$_nocache});";
+ $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " .
+ $parameter['if condition']['value'] . ") {?>";
}
- return $_output;
} else {
- return "<?php while ({$parameter['if condition']}){?>";
- }
+ $_output .= "while ({$parameter['if condition']}) {?>";
+ }
+ return $_output;
}
-
}
/**
* Smarty Internal Plugin Compile Whileclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/while} tag
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
* @return string compiled code
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
+ $compiler->loopNesting--;
// must endblock be nocache?
if ($compiler->nocache) {
$compiler->tag_nocache = true;
}
$compiler->nocache = $this->closeTag($compiler, array('while'));
- return "<?php }?>";
+ return "<?php }?>\n";
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_compilebase.php b/include/smarty/libs/sysplugins/smarty_internal_compilebase.php
index 5fb56f371..0803f27a6 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_compilebase.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_compilebase.php
@@ -2,25 +2,26 @@
/**
* Smarty Internal Plugin CompileBase
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* This class does extend all internal compile plugins
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-abstract class Smarty_Internal_CompileBase {
-
+abstract class Smarty_Internal_CompileBase
+{
/**
* Array of names of required attribute required by tag
*
* @var array
*/
public $required_attributes = array();
+
/**
* Array of names of optional attribute required by tag
* use array('_any') if there is no restriction of attributes names
@@ -28,12 +29,14 @@ abstract class Smarty_Internal_CompileBase {
* @var array
*/
public $optional_attributes = array();
+
/**
* Shorttag attribute order defined by its names
*
* @var array
*/
public $shorttag_order = array();
+
/**
* Array of names of valid option flags
*
@@ -43,15 +46,15 @@ abstract class Smarty_Internal_CompileBase {
/**
* This function checks if the attributes passed are valid
- *
* The attributes passed for the tag to compile are checked against the list of required and
* optional attributes. Required attributes must be present. Optional attributes are check against
* the corresponding list. The keyword '_any' specifies that any attribute will be accepted
* as valid
*
- * @param object $compiler compiler object
- * @param array $attributes attributes applied to the tag
- * @return array of mapped attributes for further processing
+ * @param object $compiler compiler object
+ * @param array $attributes attributes applied to the tag
+ *
+ * @return array of mapped attributes for further processing
*/
public function getAttributes($compiler, $attributes)
{
@@ -64,11 +67,11 @@ abstract class Smarty_Internal_CompileBase {
if (in_array(trim($mixed, '\'"'), $this->option_flags)) {
$_indexed_attr[trim($mixed, '\'"')] = true;
// shorthand attribute ?
- } else if (isset($this->shorttag_order[$key])) {
+ } elseif (isset($this->shorttag_order[$key])) {
$_indexed_attr[$this->shorttag_order[$key]] = $mixed;
} else {
// too many shorthands
- $compiler->trigger_template_error('too many shorthand attributes', $compiler->lex->taglineno);
+ $compiler->trigger_template_error('too many shorthand attributes', null, true);
}
// named attribute
} else {
@@ -77,20 +80,20 @@ abstract class Smarty_Internal_CompileBase {
if (in_array($kv['key'], $this->option_flags)) {
if (is_bool($kv['value'])) {
$_indexed_attr[$kv['key']] = $kv['value'];
- } else if (is_string($kv['value']) && in_array(trim($kv['value'], '\'"'), array('true', 'false'))) {
+ } elseif (is_string($kv['value']) && in_array(trim($kv['value'], '\'"'), array('true', 'false'))) {
if (trim($kv['value']) == 'true') {
$_indexed_attr[$kv['key']] = true;
} else {
$_indexed_attr[$kv['key']] = false;
}
- } else if (is_numeric($kv['value']) && in_array($kv['value'], array(0, 1))) {
+ } elseif (is_numeric($kv['value']) && in_array($kv['value'], array(0, 1))) {
if ($kv['value'] == 1) {
$_indexed_attr[$kv['key']] = true;
} else {
$_indexed_attr[$kv['key']] = false;
}
} else {
- $compiler->trigger_template_error("illegal value of option flag \"{$kv['key']}\"", $compiler->lex->taglineno);
+ $compiler->trigger_template_error("illegal value of option flag \"{$kv['key']}\"", null, true);
}
// must be named attribute
} else {
@@ -102,15 +105,15 @@ abstract class Smarty_Internal_CompileBase {
// check if all required attributes present
foreach ($this->required_attributes as $attr) {
if (!array_key_exists($attr, $_indexed_attr)) {
- $compiler->trigger_template_error("missing \"" . $attr . "\" attribute", $compiler->lex->taglineno);
+ $compiler->trigger_template_error("missing \"" . $attr . "\" attribute", null, true);
}
}
- // check for unallowed attributes
+ // check for not allowed attributes
if ($this->optional_attributes != array('_any')) {
$tmp_array = array_merge($this->required_attributes, $this->optional_attributes, $this->option_flags);
foreach ($_indexed_attr as $key => $dummy) {
if (!in_array($key, $tmp_array) && $key !== 0) {
- $compiler->trigger_template_error("unexpected \"" . $key . "\" attribute", $compiler->lex->taglineno);
+ $compiler->trigger_template_error("unexpected \"" . $key . "\" attribute", null, true);
}
}
}
@@ -126,12 +129,11 @@ abstract class Smarty_Internal_CompileBase {
/**
* Push opening tag name on stack
- *
* Optionally additional data can be saved on stack
*
- * @param object $compiler compiler object
- * @param string $openTag the opening tag's name
- * @param mixed $data optional data saved
+ * @param object $compiler compiler object
+ * @param string $openTag the opening tag's name
+ * @param mixed $data optional data saved
*/
public function openTag($compiler, $openTag, $data = null)
{
@@ -140,12 +142,12 @@ abstract class Smarty_Internal_CompileBase {
/**
* Pop closing tag
- *
* Raise an error if this stack-top doesn't match with expected opening tags
*
- * @param object $compiler compiler object
- * @param array|string $expectedTag the expected opening tag names
- * @return mixed any type the opening tag's name or saved data
+ * @param object $compiler compiler object
+ * @param array|string $expectedTag the expected opening tag names
+ *
+ * @return mixed any type the opening tag's name or saved data
*/
public function closeTag($compiler, $expectedTag)
{
@@ -163,14 +165,14 @@ abstract class Smarty_Internal_CompileBase {
}
}
// wrong nesting of tags
- $compiler->trigger_template_error("unclosed {" . $_openTag . "} tag");
+ $compiler->trigger_template_error("unclosed {$compiler->smarty->left_delimiter}" . $_openTag .
+ "{$compiler->smarty->right_delimiter} tag");
+
return;
}
// wrong nesting of tags
- $compiler->trigger_template_error("unexpected closing tag", $compiler->lex->taglineno);
+ $compiler->trigger_template_error("unexpected closing tag", null, true);
+
return;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_config.php b/include/smarty/libs/sysplugins/smarty_internal_config.php
deleted file mode 100644
index bcb3ce054..000000000
--- a/include/smarty/libs/sysplugins/smarty_internal_config.php
+++ /dev/null
@@ -1,302 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Config
- *
- * @package Smarty
- * @subpackage Config
- * @author Uwe Tews
- */
-
-/**
- * Smarty Internal Plugin Config
- *
- * Main class for config variables
- *
- * @package Smarty
- * @subpackage Config
- *
- * @property Smarty_Config_Source $source
- * @property Smarty_Config_Compiled $compiled
- * @ignore
- */
-class Smarty_Internal_Config {
-
- /**
- * Samrty instance
- *
- * @var Smarty object
- */
- public $smarty = null;
- /**
- * Object of config var storage
- *
- * @var object
- */
- public $data = null;
- /**
- * Config resource
- * @var string
- */
- public $config_resource = null;
- /**
- * Compiled config file
- *
- * @var string
- */
- public $compiled_config = null;
- /**
- * filepath of compiled config file
- *
- * @var string
- */
- public $compiled_filepath = null;
- /**
- * Filemtime of compiled config Filemtime
- *
- * @var int
- */
- public $compiled_timestamp = null;
- /**
- * flag if compiled config file is invalid and must be (re)compiled
- * @var bool
- */
- public $mustCompile = null;
- /**
- * Config file compiler object
- *
- * @var Smarty_Internal_Config_File_Compiler object
- */
- public $compiler_object = null;
-
- /**
- * Constructor of config file object
- *
- * @param string $config_resource config file resource name
- * @param Smarty $smarty Smarty instance
- * @param object $data object for config vars storage
- */
- public function __construct($config_resource, $smarty, $data = null)
- {
- $this->data = $data;
- $this->smarty = $smarty;
- $this->config_resource = $config_resource;
- }
-
- /**
- * Returns the compiled filepath
- *
- * @return string the compiled filepath
- */
- public function getCompiledFilepath()
- {
- return $this->compiled_filepath === null ?
- ($this->compiled_filepath = $this->buildCompiledFilepath()) :
- $this->compiled_filepath;
- }
-
- /**
- * Get file path.
- *
- * @return string
- */
- public function buildCompiledFilepath()
- {
- $_compile_id = isset($this->smarty->compile_id) ? preg_replace('![^\w\|]+!', '_', $this->smarty->compile_id) : null;
- $_flag = (int) $this->smarty->config_read_hidden + (int) $this->smarty->config_booleanize * 2
- + (int) $this->smarty->config_overwrite * 4;
- $_filepath = sha1($this->source->name . $_flag);
- // if use_sub_dirs, break file into directories
- if ($this->smarty->use_sub_dirs) {
- $_filepath = substr($_filepath, 0, 2) . DS
- . substr($_filepath, 2, 2) . DS
- . substr($_filepath, 4, 2) . DS
- . $_filepath;
- }
- $_compile_dir_sep = $this->smarty->use_sub_dirs ? DS : '^';
- if (isset($_compile_id)) {
- $_filepath = $_compile_id . $_compile_dir_sep . $_filepath;
- }
- $_compile_dir = $this->smarty->getCompileDir();
- return $_compile_dir . $_filepath . '.' . basename($this->source->name) . '.config' . '.php';
- }
-
- /**
- * Returns the timpestamp of the compiled file
- *
- * @return integer the file timestamp
- */
- public function getCompiledTimestamp()
- {
- return $this->compiled_timestamp === null
- ? ($this->compiled_timestamp = (file_exists($this->getCompiledFilepath())) ? filemtime($this->getCompiledFilepath()) : false)
- : $this->compiled_timestamp;
- }
-
- /**
- * Returns if the current config file must be compiled
- *
- * It does compare the timestamps of config source and the compiled config and checks the force compile configuration
- *
- * @return boolean true if the file must be compiled
- */
- public function mustCompile()
- {
- return $this->mustCompile === null ?
- $this->mustCompile = ($this->smarty->force_compile || $this->getCompiledTimestamp () === false || $this->smarty->compile_check && $this->getCompiledTimestamp () < $this->source->timestamp):
- $this->mustCompile;
- }
-
- /**
- * Returns the compiled config file
- *
- * It checks if the config file must be compiled or just read the compiled version
- *
- * @return string the compiled config file
- */
- public function getCompiledConfig()
- {
- if ($this->compiled_config === null) {
- // see if template needs compiling.
- if ($this->mustCompile()) {
- $this->compileConfigSource();
- } else {
- $this->compiled_config = file_get_contents($this->getCompiledFilepath());
- }
- }
- return $this->compiled_config;
- }
-
- /**
- * Compiles the config files
- *
- * @throws Exception
- */
- public function compileConfigSource()
- {
- // compile template
- if (!is_object($this->compiler_object)) {
- // load compiler
- $this->compiler_object = new Smarty_Internal_Config_File_Compiler($this->smarty);
- }
- // compile locking
- if ($this->smarty->compile_locking) {
- if ($saved_timestamp = $this->getCompiledTimestamp()) {
- touch($this->getCompiledFilepath());
- }
- }
- // call compiler
- try {
- $this->compiler_object->compileSource($this);
- } catch (Exception $e) {
- // restore old timestamp in case of error
- if ($this->smarty->compile_locking && $saved_timestamp) {
- touch($this->getCompiledFilepath(), $saved_timestamp);
- }
- throw $e;
- }
- // compiling succeded
- // write compiled template
- Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->getCompiledConfig(), $this->smarty);
- }
-
- /**
- * load config variables
- *
- * @param mixed $sections array of section names, single section or null
- * @param object $scope global,parent or local
- */
- public function loadConfigVars($sections = null, $scope = 'local')
- {
- if ($this->data instanceof Smarty_Internal_Template) {
- $this->data->properties['file_dependency'][sha1($this->source->filepath)] = array($this->source->filepath, $this->source->timestamp, 'file');
- }
- if ($this->mustCompile()) {
- $this->compileConfigSource();
- }
- // pointer to scope
- if ($scope == 'local') {
- $scope_ptr = $this->data;
- } elseif ($scope == 'parent') {
- if (isset($this->data->parent)) {
- $scope_ptr = $this->data->parent;
- } else {
- $scope_ptr = $this->data;
- }
- } elseif ($scope == 'root' || $scope == 'global') {
- $scope_ptr = $this->data;
- while (isset($scope_ptr->parent)) {
- $scope_ptr = $scope_ptr->parent;
- }
- }
- $_config_vars = array();
- include($this->getCompiledFilepath());
- // copy global config vars
- foreach ($_config_vars['vars'] as $variable => $value) {
- if ($this->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) {
- $scope_ptr->config_vars[$variable] = $value;
- } else {
- $scope_ptr->config_vars[$variable] = array_merge((array) $scope_ptr->config_vars[$variable], (array) $value);
- }
- }
- // scan sections
- if (!empty($sections)) {
- foreach ((array) $sections as $this_section) {
- if (isset($_config_vars['sections'][$this_section])) {
- foreach ($_config_vars['sections'][$this_section]['vars'] as $variable => $value) {
- if ($this->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) {
- $scope_ptr->config_vars[$variable] = $value;
- } else {
- $scope_ptr->config_vars[$variable] = array_merge((array) $scope_ptr->config_vars[$variable], (array) $value);
- }
- }
- }
- }
- }
- }
-
- /**
- * set Smarty property in template context
- *
- * @param string $property_name property name
- * @param mixed $value value
- * @throws SmartyException if $property_name is not valid
- */
- public function __set($property_name, $value)
- {
- switch ($property_name) {
- case 'source':
- case 'compiled':
- $this->$property_name = $value;
- return;
- }
-
- throw new SmartyException("invalid config property '$property_name'.");
- }
-
- /**
- * get Smarty property in template context
- *
- * @param string $property_name property name
- * @throws SmartyException if $property_name is not valid
- */
- public function __get($property_name)
- {
- switch ($property_name) {
- case 'source':
- if (empty($this->config_resource)) {
- throw new SmartyException("Unable to parse resource name \"{$this->config_resource}\"");
- }
- $this->source = Smarty_Resource::config($this);
- return $this->source;
-
- case 'compiled':
- $this->compiled = $this->source->getCompiled($this);
- return $this->compiled;
- }
-
- throw new SmartyException("config attribute '$property_name' does not exist.");
- }
-
-}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php b/include/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
index b16a6940d..56d3b0665 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
@@ -1,22 +1,35 @@
<?php
/**
* Smarty Internal Plugin Config File Compiler
- *
* This is the config file compiler class. It calls the lexer and parser to
* perform the compiling.
*
- * @package Smarty
+ * @package Smarty
* @subpackage Config
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Main config file compiler class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Config
*/
-class Smarty_Internal_Config_File_Compiler {
+class Smarty_Internal_Config_File_Compiler
+{
+ /**
+ * Lexer class name
+ *
+ * @var string
+ */
+ public $lexer_class;
+
+ /**
+ * Parser class name
+ *
+ * @var string
+ */
+ public $parser_class;
/**
* Lexer object
@@ -42,9 +55,9 @@ class Smarty_Internal_Config_File_Compiler {
/**
* Smarty object
*
- * @var Smarty_Internal_Config object
+ * @var Smarty_Internal_Template object
*/
- public $config;
+ public $template;
/**
* Compiled config data sections and variables
@@ -54,75 +67,115 @@ class Smarty_Internal_Config_File_Compiler {
public $config_data = array();
/**
+ * compiled config data must always be written
+ *
+ * @var bool
+ */
+ public $write_compiled_code = true;
+
+ /**
* Initialize compiler
*
- * @param Smarty $smarty base instance
+ * @param string $lexer_class class name
+ * @param string $parser_class class name
+ * @param Smarty $smarty global instance
*/
- public function __construct($smarty)
+ public function __construct($lexer_class, $parser_class, Smarty $smarty)
{
$this->smarty = $smarty;
+ // get required plugins
+ $this->lexer_class = $lexer_class;
+ $this->parser_class = $parser_class;
+ $this->smarty = $smarty;
$this->config_data['sections'] = array();
$this->config_data['vars'] = array();
}
/**
- * Method to compile a Smarty template.
+ * Method to compile Smarty config source.
+ *
+ * @param Smarty_Internal_Template $template
*
- * @param Smarty_Internal_Config $config config object
* @return bool true if compiling succeeded, false if it failed
*/
- public function compileSource(Smarty_Internal_Config $config)
+ public function compileTemplate(Smarty_Internal_Template $template)
{
- /* here is where the compiling takes place. Smarty
- tags in the templates are replaces with PHP code,
- then written to compiled files. */
- $this->config = $config;
- // get config file source
- $_content = $config->source->content . "\n";
- // on empty template just return
- if ($_content == '') {
- return true;
+ $this->template = $template;
+ $this->template->compiled->file_dependency[$this->template->source->uid] = array($this->template->source->filepath,
+ $this->template->source->getTimeStamp(),
+ $this->template->source->type);
+ if ($this->smarty->debugging) {
+ $this->smarty->_debug->start_compile($this->template);
}
// init the lexer/parser to compile the config file
- $lex = new Smarty_Internal_Configfilelexer($_content, $this->smarty);
- $parser = new Smarty_Internal_Configfileparser($lex, $this);
- if ($this->smarty->_parserdebug) $parser->PrintTrace();
+ /* @var Smarty_Internal_ConfigFileLexer $lex */
+ $lex = new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $template->source->getContent()) .
+ "\n", $this);
+ /* @var Smarty_Internal_ConfigFileParser $parser */
+ $parser = new $this->parser_class($lex, $this);
+
+ if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
+ $mbEncoding = mb_internal_encoding();
+ mb_internal_encoding('ASCII');
+ } else {
+ $mbEncoding = null;
+ }
+
+ if ($this->smarty->_parserdebug) {
+ $parser->PrintTrace();
+ }
// get tokens from lexer and parse them
while ($lex->yylex()) {
- if ($this->smarty->_parserdebug) echo "<br>Parsing {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n";
+ if ($this->smarty->_parserdebug) {
+ echo "<br>Parsing {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n";
+ }
$parser->doParse($lex->token, $lex->value);
}
// finish parsing process
$parser->doParse(0, 0);
- $config->compiled_config = '<?php $_config_vars = ' . var_export($this->config_data, true) . '; ?>';
+
+ if ($mbEncoding) {
+ mb_internal_encoding($mbEncoding);
+ }
+ if ($this->smarty->debugging) {
+ $this->smarty->_debug->end_compile($this->template);
+ }
+ // template header code
+ $template_header = "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " .
+ strftime("%Y-%m-%d %H:%M:%S") . "\n";
+ $template_header .= " compiled from \"" . $this->template->source->filepath . "\" */ ?>\n";
+
+ $code = '<?php $_smarty_tpl->smarty->ext->configLoad->_loadConfigVars($_smarty_tpl, ' .
+ var_export($this->config_data, true) . '); ?>';
+ return $template_header . $this->template->smarty->ext->_codeFrame->create($this->template, $code);
}
/**
* display compiler error messages without dying
- *
* If parameter $args is empty it is a parser detected syntax error.
- * In this case the parser is called to obtain information about exspected tokens.
- *
+ * In this case the parser is called to obtain information about expected tokens.
* If parameter $args contains a string this is used as error message
*
* @param string $args individual error message or null
+ *
+ * @throws SmartyCompilerException
*/
public function trigger_config_file_error($args = null)
{
$this->lex = Smarty_Internal_Configfilelexer::instance();
$this->parser = Smarty_Internal_Configfileparser::instance();
- // get template source line which has error
+ // get config source line which has error
$line = $this->lex->line;
if (isset($args)) {
// $line--;
}
$match = preg_split("/\n/", $this->lex->data);
- $error_text = "Syntax error in config file '{$this->config->source->filepath}' on line {$line} '{$match[$line-1]}' ";
+ $error_text = "Syntax error in config file '{$this->template->source->filepath}' on line {$line} '{$match[$line - 1]}' ";
if (isset($args)) {
// individual error message
$error_text .= $args;
} else {
- // exspected token from parser
+ // expected token from parser
foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) {
$exp_token = $this->parser->yyTokenName[$token];
if (isset($this->lex->smarty_token_names[$exp_token])) {
@@ -138,7 +191,4 @@ class Smarty_Internal_Config_File_Compiler {
}
throw new SmartyCompilerException($error_text);
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_configfilelexer.php b/include/smarty/libs/sysplugins/smarty_internal_configfilelexer.php
index bade2fe74..e62728c2c 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_configfilelexer.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_configfilelexer.php
@@ -1,115 +1,238 @@
<?php
/**
-* Smarty Internal Plugin Configfilelexer
-*
-* This is the lexer to break the config file source into tokens
-* @package Smarty
-* @subpackage Config
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Configfilelexer
+ *
+ * This is the lexer to break the config file source into tokens
+ *
+ * @package Smarty
+ * @subpackage Config
+ * @author Uwe Tews
+ */
+
/**
-* Smarty Internal Plugin Configfilelexer
-*/
+ * Smarty_Internal_Configfilelexer
+ *
+ * This is the config file lexer.
+ * It is generated from the smarty_internal_configfilelexer.plex file
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
class Smarty_Internal_Configfilelexer
{
-
+ /**
+ * Source
+ *
+ * @var string
+ */
public $data;
+
+ /**
+ * byte counter
+ *
+ * @var int
+ */
public $counter;
+
+ /**
+ * token number
+ *
+ * @var int
+ */
public $token;
+
+ /**
+ * token value
+ *
+ * @var string
+ */
public $value;
- public $node;
- public $line;
- private $state = 1;
- public $smarty_token_names = array ( // Text for parser error messages
- );
+ /**
+ * current line
+ *
+ * @var int
+ */
+ public $line;
- function __construct($data, $smarty)
+ /**
+ * state number
+ *
+ * @var int
+ */
+ public $state = 1;
+
+ /**
+ * Smarty object
+ *
+ * @var Smarty
+ */
+ public $smarty = null;
+
+ /**
+ * compiler object
+ *
+ * @var Smarty_Internal_Config_File_Compiler
+ */
+ private $compiler = null;
+
+ /**
+ * copy of config_booleanize
+ *
+ * @var bool
+ */
+ private $configBooleanize = false;
+
+ /**
+ * trace file
+ *
+ * @var resource
+ */
+ public $yyTraceFILE;
+
+ /**
+ * trace prompt
+ *
+ * @var string
+ */
+ public $yyTracePrompt;
+
+ /**
+ * state names
+ *
+ * @var array
+ */
+ public $state_name = array(1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION',
+ 6 => 'TRIPPLE');
+
+ /**
+ * storage for assembled token patterns
+ *
+ * @var sring
+ */
+ private $yy_global_pattern1 = null;
+
+ private $yy_global_pattern2 = null;
+
+ private $yy_global_pattern3 = null;
+
+ private $yy_global_pattern4 = null;
+
+ private $yy_global_pattern5 = null;
+
+ private $yy_global_pattern6 = null;
+
+ /**
+ * token names
+ *
+ * @var array
+ */
+ public $smarty_token_names = array( // Text for parser error messages
+ );
+
+ /**
+ * constructor
+ *
+ * @param string $data template source
+ * @param Smarty_Internal_Config_File_Compiler $compiler
+ */
+ function __construct($data, Smarty_Internal_Config_File_Compiler $compiler)
{
// set instance object
self::instance($this);
$this->data = $data . "\n"; //now all lines are \n-terminated
$this->counter = 0;
+ if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
+ $this->counter += strlen($match[0]);
+ }
$this->line = 1;
- $this->smarty = $smarty;
- $this->mbstring_overload = ini_get('mbstring.func_overload') & 2;
+ $this->compiler = $compiler;
+ $this->smarty = $compiler->smarty;
+ $this->configBooleanize = $this->smarty->config_booleanize;
}
+
public static function &instance($new_instance = null)
{
static $instance = null;
- if (isset($new_instance) && is_object($new_instance))
+ if (isset($new_instance) && is_object($new_instance)) {
$instance = $new_instance;
+ }
return $instance;
}
-
+ public function PrintTrace()
+ {
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = '<br>';
+ }
private $_yy_state = 1;
+
private $_yy_stack = array();
- function yylex()
+ public function yylex()
{
return $this->{'yylex' . $this->_yy_state}();
}
- function yypushstate($state)
+ public function yypushstate($state)
{
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
array_push($this->_yy_stack, $this->_yy_state);
$this->_yy_state = $state;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
}
- function yypopstate()
+ public function yypopstate()
{
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
$this->_yy_state = array_pop($this->_yy_stack);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
}
- function yybegin($state)
+ public function yybegin($state)
{
$this->_yy_state = $state;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+ }
}
-
-
-
- function yylex1()
+ public function yylex1()
{
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- 3 => 0,
- 4 => 0,
- 5 => 0,
- 6 => 0,
- 7 => 0,
- 8 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if (!isset($this->yy_global_pattern1)) {
+ $this->yy_global_pattern1 = "/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/isS";
+ }
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
- $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
- if (!count($yymatches)) {
- throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state START');
+ if (strlen($yysubmatches[0]) < 200) {
+ $yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
+ } else {
+ $yymatches = array_filter($yymatches, 'strlen');
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state START');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
- if ($tokenMap[$this->token]) {
- // extract sub-patterns for passing to lex function
- $yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
- } else {
- $yysubmatches = array();
- }
$this->value = current($yymatches); // token value
- $r = $this->{'yy_r1_' . $this->token}($yysubmatches);
+ $r = $this->{'yy_r1_' . $this->token}();
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -118,110 +241,100 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
- throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const START = 1;
- function yy_r1_1($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
- $this->yypushstate(self::COMMENT);
- }
- function yy_r1_2($yy_subpatterns)
+ function yy_r1_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
- $this->yypushstate(self::SECTION);
+ $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
+ $this->yypushstate(self::COMMENT);
}
- function yy_r1_3($yy_subpatterns)
+
+ function yy_r1_2()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
+ $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
+ $this->yypushstate(self::SECTION);
}
- function yy_r1_4($yy_subpatterns)
+
+ function yy_r1_3()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
- $this->yypushstate(self::VALUE);
+ $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
}
- function yy_r1_5($yy_subpatterns)
+
+ function yy_r1_4()
{
- return false;
+ $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
+ $this->yypushstate(self::VALUE);
}
- function yy_r1_6($yy_subpatterns)
+
+ function yy_r1_5()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+ return false;
}
- function yy_r1_7($yy_subpatterns)
+
+ function yy_r1_6()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_ID;
+ $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
}
- function yy_r1_8($yy_subpatterns)
+
+ function yy_r1_7()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
+ $this->token = Smarty_Internal_Configfileparser::TPC_ID;
}
+ function yy_r1_8()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
+ }
- function yylex2()
+ public function yylex2()
{
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- 3 => 0,
- 4 => 0,
- 5 => 0,
- 6 => 0,
- 7 => 0,
- 8 => 0,
- 9 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if (!isset($this->yy_global_pattern2)) {
+ $this->yy_global_pattern2 = "/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS";
+ }
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
- $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
- if (!count($yymatches)) {
- throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state VALUE');
+ if (strlen($yysubmatches[0]) < 200) {
+ $yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
+ } else {
+ $yymatches = array_filter($yymatches, 'strlen');
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state VALUE');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
- if ($tokenMap[$this->token]) {
- // extract sub-patterns for passing to lex function
- $yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
- } else {
- $yysubmatches = array();
- }
$this->value = current($yymatches); // token value
- $r = $this->{'yy_r2_' . $this->token}($yysubmatches);
+ $r = $this->{'yy_r2_' . $this->token}();
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -230,119 +343,120 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
- throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const VALUE = 2;
- function yy_r2_1($yy_subpatterns)
- {
- return false;
- }
- function yy_r2_2($yy_subpatterns)
+ function yy_r2_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
- $this->yypopstate();
+ return false;
}
- function yy_r2_3($yy_subpatterns)
+
+ function yy_r2_2()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_INT;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
+ $this->yypopstate();
}
- function yy_r2_4($yy_subpatterns)
+
+ function yy_r2_3()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
- $this->yypushstate(self::TRIPPLE);
+ $this->token = Smarty_Internal_Configfileparser::TPC_INT;
+ $this->yypopstate();
}
- function yy_r2_5($yy_subpatterns)
+
+ function yy_r2_4()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
+ $this->yypushstate(self::TRIPPLE);
}
- function yy_r2_6($yy_subpatterns)
+
+ function yy_r2_5()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
+ $this->yypopstate();
}
- function yy_r2_7($yy_subpatterns)
+
+ function yy_r2_6()
{
- if (!$this->smarty->config_booleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no")) ) {
- $this->yypopstate();
- $this->yypushstate(self::NAKED_STRING_VALUE);
- return true; //reprocess in new state
- } else {
- $this->token = Smarty_Internal_Configfileparser::TPC_BOOL;
+ $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
$this->yypopstate();
}
- }
- function yy_r2_8($yy_subpatterns)
+
+ function yy_r2_7()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- $this->yypopstate();
+ if (!$this->configBooleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes",
+ "no"))
+ ) {
+ $this->yypopstate();
+ $this->yypushstate(self::NAKED_STRING_VALUE);
+ return true; //reprocess in new state
+ } else {
+ $this->token = Smarty_Internal_Configfileparser::TPC_BOOL;
+ $this->yypopstate();
+ }
}
- function yy_r2_9($yy_subpatterns)
+
+ function yy_r2_8()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- $this->value = "";
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->yypopstate();
}
+ function yy_r2_9()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->value = "";
+ $this->yypopstate();
+ }
- function yylex3()
+ public function yylex3()
{
- $tokenMap = array (
- 1 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if (!isset($this->yy_global_pattern3)) {
+ $this->yy_global_pattern3 = "/\G([^\n]+?(?=[ \t\r]*\n))/isS";
+ }
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G([^\n]+?(?=[ \t\r]*\n))/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
- $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
- if (!count($yymatches)) {
- throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state NAKED_STRING_VALUE');
+ if (strlen($yysubmatches[0]) < 200) {
+ $yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
+ } else {
+ $yymatches = array_filter($yymatches, 'strlen');
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state NAKED_STRING_VALUE');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
- if ($tokenMap[$this->token]) {
- // extract sub-patterns for passing to lex function
- $yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
- } else {
- $yysubmatches = array();
- }
$this->value = current($yymatches); // token value
- $r = $this->{'yy_r3_' . $this->token}($yysubmatches);
+ $r = $this->{'yy_r3_' . $this->token}();
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -351,67 +465,56 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
- throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const NAKED_STRING_VALUE = 3;
- function yy_r3_1($yy_subpatterns)
+
+ function yy_r3_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->yypopstate();
}
-
-
- function yylex4()
+ public function yylex4()
{
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- 3 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if (!isset($this->yy_global_pattern4)) {
+ $this->yy_global_pattern4 = "/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS";
+ }
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
- $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
- if (!count($yymatches)) {
- throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state COMMENT');
+ if (strlen($yysubmatches[0]) < 200) {
+ $yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
+ } else {
+ $yymatches = array_filter($yymatches, 'strlen');
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state COMMENT');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
- if ($tokenMap[$this->token]) {
- // extract sub-patterns for passing to lex function
- $yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
- } else {
- $yysubmatches = array();
- }
$this->value = current($yymatches); // token value
- $r = $this->{'yy_r4_' . $this->token}($yysubmatches);
+ $r = $this->{'yy_r4_' . $this->token}();
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -420,76 +523,68 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
- throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const COMMENT = 4;
- function yy_r4_1($yy_subpatterns)
- {
- return false;
- }
- function yy_r4_2($yy_subpatterns)
+ function yy_r4_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ return false;
}
- function yy_r4_3($yy_subpatterns)
+
+ function yy_r4_2()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
}
+ function yy_r4_3()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+ $this->yypopstate();
+ }
- function yylex5()
+ public function yylex5()
{
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if (!isset($this->yy_global_pattern5)) {
+ $this->yy_global_pattern5 = "/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/isS";
+ }
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
- $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
- if (!count($yymatches)) {
- throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state SECTION');
+ if (strlen($yysubmatches[0]) < 200) {
+ $yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
+ } else {
+ $yymatches = array_filter($yymatches, 'strlen');
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state SECTION');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
- if ($tokenMap[$this->token]) {
- // extract sub-patterns for passing to lex function
- $yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
- } else {
- $yysubmatches = array();
- }
$this->value = current($yymatches); // token value
- $r = $this->{'yy_r5_' . $this->token}($yysubmatches);
+ $r = $this->{'yy_r5_' . $this->token}();
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -498,70 +593,62 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
- throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const SECTION = 5;
- function yy_r5_1($yy_subpatterns)
+
+ function yy_r5_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
+ $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
}
- function yy_r5_2($yy_subpatterns)
+
+ function yy_r5_2()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_SECTION;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Configfileparser::TPC_SECTION;
+ $this->yypopstate();
}
-
- function yylex6()
+ public function yylex6()
{
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if (!isset($this->yy_global_pattern6)) {
+ $this->yy_global_pattern6 = "/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/isS";
+ }
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($this->yy_global_pattern6, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
- $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
- if (!count($yymatches)) {
- throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state TRIPPLE');
+ if (strlen($yysubmatches[0]) < 200) {
+ $yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
+ } else {
+ $yymatches = array_filter($yymatches, 'strlen');
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state TRIPPLE');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
- if ($tokenMap[$this->token]) {
- // extract sub-patterns for passing to lex function
- $yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
- } else {
- $yysubmatches = array();
- }
$this->value = current($yymatches); // token value
- $r = $this->{'yy_r6_' . $this->token}($yysubmatches);
+ $r = $this->{'yy_r6_' . $this->token}();
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -570,53 +657,43 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
- throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]);
}
break;
} while (true);
-
} // end function
-
const TRIPPLE = 6;
- function yy_r6_1($yy_subpatterns)
+
+ function yy_r6_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END;
- $this->yypopstate();
- $this->yypushstate(self::START);
+ $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END;
+ $this->yypopstate();
+ $this->yypushstate(self::START);
}
- function yy_r6_2($yy_subpatterns)
+
+ function yy_r6_2()
{
- if ($this->mbstring_overload) {
- $to = mb_strlen($this->data,'latin1');
- } else {
- $to = strlen($this->data);
- }
- preg_match("/\"\"\"[ \t\r]*[\n#;]/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
- if (isset($match[0][1])) {
- $to = $match[0][1];
- } else {
- $this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
- }
- if ($this->mbstring_overload) {
- $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1');
- } else {
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- }
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT;
+ $to = strlen($this->data);
+ preg_match("/\"\"\"[ \t\r]*[\n#;]/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
+ if (isset($match[0][1])) {
+ $to = $match[0][1];
+ } else {
+ $this->compiler->trigger_template_error("missing or misspelled literal closing tag");
+ }
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT;
}
-
}
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_configfileparser.php b/include/smarty/libs/sysplugins/smarty_internal_configfileparser.php
index 784bc684d..69aaf990f 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_configfileparser.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_configfileparser.php
@@ -1,20 +1,12 @@
<?php
-/**
-* Smarty Internal Plugin Configfileparser
-*
-* This is the config file parser.
-* It is generated from the internal.configfileparser.y file
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
class TPC_yyToken implements ArrayAccess
{
public $string = '';
+
public $metadata = array();
- function __construct($s, $m = array())
+ public function __construct($s, $m = array())
{
if ($s instanceof TPC_yyToken) {
$this->string = $s->string;
@@ -29,28 +21,28 @@ class TPC_yyToken implements ArrayAccess
}
}
- function __toString()
+ public function __toString()
{
- return $this->_string;
+ return $this->string;
}
- function offsetExists($offset)
+ public function offsetExists($offset)
{
return isset($this->metadata[$offset]);
}
- function offsetGet($offset)
+ public function offsetGet($offset)
{
return $this->metadata[$offset];
}
- function offsetSet($offset, $value)
+ public function offsetSet($offset, $value)
{
if ($offset === null) {
if (isset($value[0])) {
- $x = ($value instanceof TPC_yyToken) ?
- $value->metadata : $value;
+ $x = ($value instanceof TPC_yyToken) ? $value->metadata : $value;
$this->metadata = array_merge($this->metadata, $x);
+
return;
}
$offset = count($this->metadata);
@@ -67,7 +59,7 @@ class TPC_yyToken implements ArrayAccess
}
}
- function offsetUnset($offset)
+ public function offsetUnset($offset)
{
unset($this->metadata[$offset]);
}
@@ -80,37 +72,136 @@ class TPC_yyStackEntry
** number for the token at this stack level */
public $minor; /* The user-supplied minor token value. This
** is the value of the token */
-};
+}
+
+;
+#line 12 "../smarty/lexer/smarty_internal_configfileparser.y"
-#line 12 "smarty_internal_configfileparser.y"
-class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser.php"
+/**
+ * Smarty Internal Plugin Configfileparse
+ *
+ * This is the config file parser.
+ * It is generated from the smarty_internal_configfileparser.y file
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Configfileparser
{
-#line 14 "smarty_internal_configfileparser.y"
+ #line 25 "../smarty/lexer/smarty_internal_configfileparser.y"
- // states whether the parse was successful or not
+ /**
+ * result status
+ *
+ * @var bool
+ */
public $successful = true;
+
+ /**
+ * return value
+ *
+ * @var mixed
+ */
public $retvalue = 0;
+
+ /**
+ * @var
+ */
+ public $yymajor;
+
+ /**
+ * lexer object
+ *
+ * @var Smarty_Internal_Configfilelexer
+ */
private $lex;
+
+ /**
+ * internal error flag
+ *
+ * @var bool
+ */
private $internalError = false;
- function __construct($lex, $compiler) {
+ /**
+ * compiler object
+ *
+ * @var Smarty_Internal_Config_File_Compiler
+ */
+ public $compiler = null;
+
+ /**
+ * smarty object
+ *
+ * @var Smarty
+ */
+ public $smarty = null;
+
+ /**
+ * copy of config_overwrite property
+ *
+ * @var bool
+ */
+ private $configOverwrite = false;
+
+ /**
+ * copy of config_read_hidden property
+ *
+ * @var bool
+ */
+ private $configReadHidden = false;
+
+ /**
+ * helper map
+ *
+ * @var array
+ */
+ private static $escapes_single = Array('\\' => '\\', '\'' => '\'');
+
+ /**
+ * constructor
+ *
+ * @param Smarty_Internal_Configfilelexer $lex
+ * @param Smarty_Internal_Config_File_Compiler $compiler
+ */
+ function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler)
+ {
// set instance object
self::instance($this);
$this->lex = $lex;
$this->smarty = $compiler->smarty;
$this->compiler = $compiler;
+ $this->configOverwrite = $this->smarty->config_overwrite;
+ $this->configReadHidden = $this->smarty->config_read_hidden;
}
+
+ /**
+ * @param null $new_instance
+ *
+ * @return null
+ */
public static function &instance($new_instance = null)
{
static $instance = null;
- if (isset($new_instance) && is_object($new_instance))
+ if (isset($new_instance) && is_object($new_instance)) {
$instance = $new_instance;
+ }
return $instance;
}
- private function parse_bool($str) {
- if (in_array(strtolower($str) ,array('on','yes','true'))) {
+ /**
+ * parse optional boolean keywords
+ *
+ * @param string $str
+ *
+ * @return bool
+ */
+ private function parse_bool($str)
+ {
+ $str = strtolower($str);
+ if (in_array($str, array('on', 'yes', 'true'))) {
$res = true;
} else {
$res = false;
@@ -118,12 +209,20 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
return $res;
}
- private static $escapes_single = Array('\\' => '\\',
- '\'' => '\'');
- private static function parse_single_quoted_string($qstr) {
- $escaped_string = substr($qstr, 1, strlen($qstr)-2); //remove outer quotes
+ /**
+ * parse single quoted string
+ * remove outer quotes
+ * unescape inner quotes
+ *
+ * @param string $qstr
+ *
+ * @return string
+ */
+ private static function parse_single_quoted_string($qstr)
+ {
+ $escaped_string = substr($qstr, 1, strlen($qstr) - 2); //remove outer quotes
- $ss = preg_split('/(\\\\.)/', $escaped_string, -1, PREG_SPLIT_DELIM_CAPTURE);
+ $ss = preg_split('/(\\\\.)/', $escaped_string, - 1, PREG_SPLIT_DELIM_CAPTURE);
$str = "";
foreach ($ss as $s) {
@@ -131,28 +230,49 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
if (isset(self::$escapes_single[$s[1]])) {
$s = self::$escapes_single[$s[1]];
}
- }
-
- $str .= $s;
+ }
+ $str .= $s;
}
-
return $str;
}
- private static function parse_double_quoted_string($qstr) {
- $inner_str = substr($qstr, 1, strlen($qstr)-2);
+ /**
+ * parse double quoted string
+ *
+ * @param string $qstr
+ *
+ * @return string
+ */
+ private static function parse_double_quoted_string($qstr)
+ {
+ $inner_str = substr($qstr, 1, strlen($qstr) - 2);
return stripcslashes($inner_str);
}
- private static function parse_tripple_double_quoted_string($qstr) {
+ /**
+ * parse triple quoted string
+ *
+ * @param string $qstr
+ *
+ * @return string
+ */
+ private static function parse_tripple_double_quoted_string($qstr)
+ {
return stripcslashes($qstr);
}
- private function set_var(Array $var, Array &$target_array) {
+ /**
+ * set a config variable in target array
+ *
+ * @param array $var
+ * @param array $target_array
+ */
+ private function set_var(Array $var, Array &$target_array)
+ {
$key = $var["key"];
$value = $var["value"];
- if ($this->smarty->config_overwrite || !isset($target_array['vars'][$key])) {
+ if ($this->configOverwrite || !isset($target_array['vars'][$key])) {
$target_array['vars'][$key] = $value;
} else {
settype($target_array['vars'][$key], 'array');
@@ -160,16 +280,29 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
}
}
- private function add_global_vars(Array $vars) {
+ /**
+ * add config variable to global vars
+ *
+ * @param array $vars
+ */
+ private function add_global_vars(Array $vars)
+ {
if (!isset($this->compiler->config_data['vars'])) {
- $this->compiler->config_data['vars'] = Array();
+ $this->compiler->config_data['vars'] = Array();
}
foreach ($vars as $var) {
$this->set_var($var, $this->compiler->config_data);
}
}
- private function add_section_vars($section_name, Array $vars) {
+ /**
+ * add config variable to section
+ *
+ * @param string $section_name
+ * @param array $vars
+ */
+ private function add_section_vars($section_name, Array $vars)
+ {
if (!isset($this->compiler->config_data['sections'][$section_name]['vars'])) {
$this->compiler->config_data['sections'][$section_name]['vars'] = Array();
}
@@ -177,167 +310,135 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
$this->set_var($var, $this->compiler->config_data['sections'][$section_name]);
}
}
-#line 173 "smarty_internal_configfileparser.php"
-
- const TPC_OPENB = 1;
- const TPC_SECTION = 2;
- const TPC_CLOSEB = 3;
- const TPC_DOT = 4;
- const TPC_ID = 5;
- const TPC_EQUAL = 6;
- const TPC_FLOAT = 7;
- const TPC_INT = 8;
- const TPC_BOOL = 9;
- const TPC_SINGLE_QUOTED_STRING = 10;
- const TPC_DOUBLE_QUOTED_STRING = 11;
- const TPC_TRIPPLE_QUOTES = 12;
- const TPC_TRIPPLE_TEXT = 13;
- const TPC_TRIPPLE_QUOTES_END = 14;
- const TPC_NAKED_STRING = 15;
- const TPC_OTHER = 16;
- const TPC_NEWLINE = 17;
- const TPC_COMMENTSTART = 18;
+
+ const TPC_OPENB = 1;
+
+ const TPC_SECTION = 2;
+
+ const TPC_CLOSEB = 3;
+
+ const TPC_DOT = 4;
+
+ const TPC_ID = 5;
+
+ const TPC_EQUAL = 6;
+
+ const TPC_FLOAT = 7;
+
+ const TPC_INT = 8;
+
+ const TPC_BOOL = 9;
+
+ const TPC_SINGLE_QUOTED_STRING = 10;
+
+ const TPC_DOUBLE_QUOTED_STRING = 11;
+
+ const TPC_TRIPPLE_QUOTES = 12;
+
+ const TPC_TRIPPLE_TEXT = 13;
+
+ const TPC_TRIPPLE_QUOTES_END = 14;
+
+ const TPC_NAKED_STRING = 15;
+
+ const TPC_OTHER = 16;
+
+ const TPC_NEWLINE = 17;
+
+ const TPC_COMMENTSTART = 18;
+
const YY_NO_ACTION = 60;
+
const YY_ACCEPT_ACTION = 59;
+
const YY_ERROR_ACTION = 58;
const YY_SZ_ACTTAB = 38;
-static public $yy_action = array(
- /* 0 */ 29, 30, 34, 33, 24, 13, 19, 25, 35, 21,
- /* 10 */ 59, 8, 3, 1, 20, 12, 14, 31, 20, 12,
- /* 20 */ 15, 17, 23, 18, 27, 26, 4, 5, 6, 32,
- /* 30 */ 2, 11, 28, 22, 16, 9, 7, 10,
- );
- static public $yy_lookahead = array(
- /* 0 */ 7, 8, 9, 10, 11, 12, 5, 27, 15, 16,
- /* 10 */ 20, 21, 23, 23, 17, 18, 13, 14, 17, 18,
- /* 20 */ 15, 2, 17, 4, 25, 26, 6, 3, 3, 14,
- /* 30 */ 23, 1, 24, 17, 2, 25, 22, 25,
-);
- const YY_SHIFT_USE_DFLT = -8;
+
+ static public $yy_action = array(29, 30, 34, 33, 24, 13, 19, 25, 35, 21, 59, 8, 3, 1, 20, 12, 14, 31, 20, 12, 15,
+ 17, 23, 18, 27, 26, 4, 5, 6, 32, 2, 11, 28, 22, 16, 9, 7, 10,);
+
+ static public $yy_lookahead = array(7, 8, 9, 10, 11, 12, 5, 27, 15, 16, 20, 21, 23, 23, 17, 18, 13, 14, 17, 18, 15,
+ 2, 17, 4, 25, 26, 6, 3, 3, 14, 23, 1, 24, 17, 2, 25, 22, 25,);
+
+ const YY_SHIFT_USE_DFLT = - 8;
+
const YY_SHIFT_MAX = 19;
- static public $yy_shift_ofst = array(
- /* 0 */ -8, 1, 1, 1, -7, -3, -3, 30, -8, -8,
- /* 10 */ -8, 19, 5, 3, 15, 16, 24, 25, 32, 20,
-);
- const YY_REDUCE_USE_DFLT = -21;
+
+ static public $yy_shift_ofst = array(- 8, 1, 1, 1, - 7, - 3, - 3, 30, - 8, - 8, - 8, 19, 5, 3, 15, 16, 24, 25, 32,
+ 20,);
+
+ const YY_REDUCE_USE_DFLT = - 21;
+
const YY_REDUCE_MAX = 10;
- static public $yy_reduce_ofst = array(
- /* 0 */ -10, -1, -1, -1, -20, 10, 12, 8, 14, 7,
- /* 10 */ -11,
-);
- static public $yyExpectedTokens = array(
- /* 0 */ array(),
- /* 1 */ array(5, 17, 18, ),
- /* 2 */ array(5, 17, 18, ),
- /* 3 */ array(5, 17, 18, ),
- /* 4 */ array(7, 8, 9, 10, 11, 12, 15, 16, ),
- /* 5 */ array(17, 18, ),
- /* 6 */ array(17, 18, ),
- /* 7 */ array(1, ),
- /* 8 */ array(),
- /* 9 */ array(),
- /* 10 */ array(),
- /* 11 */ array(2, 4, ),
- /* 12 */ array(15, 17, ),
- /* 13 */ array(13, 14, ),
- /* 14 */ array(14, ),
- /* 15 */ array(17, ),
- /* 16 */ array(3, ),
- /* 17 */ array(3, ),
- /* 18 */ array(2, ),
- /* 19 */ array(6, ),
- /* 20 */ array(),
- /* 21 */ array(),
- /* 22 */ array(),
- /* 23 */ array(),
- /* 24 */ array(),
- /* 25 */ array(),
- /* 26 */ array(),
- /* 27 */ array(),
- /* 28 */ array(),
- /* 29 */ array(),
- /* 30 */ array(),
- /* 31 */ array(),
- /* 32 */ array(),
- /* 33 */ array(),
- /* 34 */ array(),
- /* 35 */ array(),
-);
- static public $yy_default = array(
- /* 0 */ 44, 37, 41, 40, 58, 58, 58, 36, 39, 44,
- /* 10 */ 44, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- /* 20 */ 55, 54, 57, 56, 50, 45, 43, 42, 38, 46,
- /* 30 */ 47, 52, 51, 49, 48, 53,
-);
+
+ static public $yy_reduce_ofst = array(- 10, - 1, - 1, - 1, - 20, 10, 12, 8, 14, 7, - 11,);
+
+ static public $yyExpectedTokens = array(array(), array(5, 17, 18,), array(5, 17, 18,), array(5, 17, 18,),
+ array(7, 8, 9, 10, 11, 12, 15, 16,), array(17, 18,), array(17, 18,), array(1,), array(), array(), array(),
+ array(2, 4,), array(15, 17,), array(13, 14,), array(14,), array(17,), array(3,), array(3,), array(2,),
+ array(6,), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(),
+ array(), array(), array(), array(), array(),);
+
+ static public $yy_default = array(44, 37, 41, 40, 58, 58, 58, 36, 39, 44, 44, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 55, 54, 57, 56, 50, 45, 43, 42, 38, 46, 47, 52, 51, 49, 48, 53,);
+
const YYNOCODE = 29;
+
const YYSTACKDEPTH = 100;
+
const YYNSTATE = 36;
+
const YYNRULE = 22;
+
const YYERRORSYMBOL = 19;
+
const YYERRSYMDT = 'yy0';
+
const YYFALLBACK = 0;
- static public $yyFallback = array(
- );
- static function Trace($TraceFILE, $zTracePrompt)
+
+ public static $yyFallback = array();
+
+ public function Trace($TraceFILE, $zTracePrompt)
{
if (!$TraceFILE) {
$zTracePrompt = 0;
} elseif (!$zTracePrompt) {
$TraceFILE = 0;
}
- self::$yyTraceFILE = $TraceFILE;
- self::$yyTracePrompt = $zTracePrompt;
+ $this->yyTraceFILE = $TraceFILE;
+ $this->yyTracePrompt = $zTracePrompt;
}
- static function PrintTrace()
+ public function PrintTrace()
{
- self::$yyTraceFILE = fopen('php://output', 'w');
- self::$yyTracePrompt = '<br>';
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = '<br>';
}
- static public $yyTraceFILE;
- static public $yyTracePrompt;
+ public $yyTraceFILE;
+
+ public $yyTracePrompt;
+
public $yyidx; /* Index of top element in stack */
public $yyerrcnt; /* Shifts left before out of the error */
public $yystack = array(); /* The parser's stack */
- public $yyTokenName = array(
- '$', 'OPENB', 'SECTION', 'CLOSEB',
- 'DOT', 'ID', 'EQUAL', 'FLOAT',
- 'INT', 'BOOL', 'SINGLE_QUOTED_STRING', 'DOUBLE_QUOTED_STRING',
- 'TRIPPLE_QUOTES', 'TRIPPLE_TEXT', 'TRIPPLE_QUOTES_END', 'NAKED_STRING',
- 'OTHER', 'NEWLINE', 'COMMENTSTART', 'error',
- 'start', 'global_vars', 'sections', 'var_list',
- 'section', 'newline', 'var', 'value',
- );
-
- static public $yyRuleName = array(
- /* 0 */ "start ::= global_vars sections",
- /* 1 */ "global_vars ::= var_list",
- /* 2 */ "sections ::= sections section",
- /* 3 */ "sections ::=",
- /* 4 */ "section ::= OPENB SECTION CLOSEB newline var_list",
- /* 5 */ "section ::= OPENB DOT SECTION CLOSEB newline var_list",
- /* 6 */ "var_list ::= var_list newline",
- /* 7 */ "var_list ::= var_list var",
- /* 8 */ "var_list ::=",
- /* 9 */ "var ::= ID EQUAL value",
- /* 10 */ "value ::= FLOAT",
- /* 11 */ "value ::= INT",
- /* 12 */ "value ::= BOOL",
- /* 13 */ "value ::= SINGLE_QUOTED_STRING",
- /* 14 */ "value ::= DOUBLE_QUOTED_STRING",
- /* 15 */ "value ::= TRIPPLE_QUOTES TRIPPLE_TEXT TRIPPLE_QUOTES_END",
- /* 16 */ "value ::= TRIPPLE_QUOTES TRIPPLE_QUOTES_END",
- /* 17 */ "value ::= NAKED_STRING",
- /* 18 */ "value ::= OTHER",
- /* 19 */ "newline ::= NEWLINE",
- /* 20 */ "newline ::= COMMENTSTART NEWLINE",
- /* 21 */ "newline ::= COMMENTSTART NAKED_STRING NEWLINE",
- );
-
- function tokenName($tokenType)
+ public $yyTokenName = array('$', 'OPENB', 'SECTION', 'CLOSEB', 'DOT', 'ID', 'EQUAL', 'FLOAT', 'INT', 'BOOL',
+ 'SINGLE_QUOTED_STRING', 'DOUBLE_QUOTED_STRING', 'TRIPPLE_QUOTES', 'TRIPPLE_TEXT', 'TRIPPLE_QUOTES_END',
+ 'NAKED_STRING', 'OTHER', 'NEWLINE', 'COMMENTSTART', 'error', 'start', 'global_vars', 'sections', 'var_list',
+ 'section', 'newline', 'var', 'value',);
+
+ public static $yyRuleName = array('start ::= global_vars sections', 'global_vars ::= var_list',
+ 'sections ::= sections section', 'sections ::=', 'section ::= OPENB SECTION CLOSEB newline var_list',
+ 'section ::= OPENB DOT SECTION CLOSEB newline var_list', 'var_list ::= var_list newline',
+ 'var_list ::= var_list var', 'var_list ::=', 'var ::= ID EQUAL value', 'value ::= FLOAT', 'value ::= INT',
+ 'value ::= BOOL', 'value ::= SINGLE_QUOTED_STRING', 'value ::= DOUBLE_QUOTED_STRING',
+ 'value ::= TRIPPLE_QUOTES TRIPPLE_TEXT TRIPPLE_QUOTES_END', 'value ::= TRIPPLE_QUOTES TRIPPLE_QUOTES_END',
+ 'value ::= NAKED_STRING', 'value ::= OTHER', 'newline ::= NEWLINE', 'newline ::= COMMENTSTART NEWLINE',
+ 'newline ::= COMMENTSTART NAKED_STRING NEWLINE',);
+
+ public function tokenName($tokenType)
{
if ($tokenType === 0) {
return 'End of Input';
@@ -349,46 +450,54 @@ static public $yy_action = array(
}
}
- static function yy_destructor($yymajor, $yypminor)
+ public static function yy_destructor($yymajor, $yypminor)
{
switch ($yymajor) {
- default: break; /* If no destructor action specified: do nothing */
+ default:
+ break; /* If no destructor action specified: do nothing */
}
}
- function yy_pop_parser_stack()
+ public function yy_pop_parser_stack()
{
- if (!count($this->yystack)) {
+ if (empty($this->yystack)) {
return;
}
$yytos = array_pop($this->yystack);
- if (self::$yyTraceFILE && $this->yyidx >= 0) {
- fwrite(self::$yyTraceFILE,
- self::$yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
- "\n");
+ if ($this->yyTraceFILE && $this->yyidx >= 0) {
+ fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] . "\n");
}
$yymajor = $yytos->major;
self::yy_destructor($yymajor, $yytos->minor);
- $this->yyidx--;
+ $this->yyidx --;
+
return $yymajor;
}
- function __destruct()
+ public function __destruct()
{
while ($this->yystack !== Array()) {
$this->yy_pop_parser_stack();
}
- if (is_resource(self::$yyTraceFILE)) {
- fclose(self::$yyTraceFILE);
+ if (is_resource($this->yyTraceFILE)) {
+ fclose($this->yyTraceFILE);
}
}
- function yy_get_expected_tokens($token)
+ public function yy_get_expected_tokens($token)
{
+ static $res3 = array();
+ static $res4 = array();
$state = $this->yystack[$this->yyidx]->stateno;
$expected = self::$yyExpectedTokens[$state];
- if (in_array($token, self::$yyExpectedTokens[$state], true)) {
- return $expected;
+ if (isset($res3[$state][$token])) {
+ if ($res3[$state][$token]) {
+ return $expected;
+ }
+ } else {
+ if ($res3[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) {
+ return $expected;
+ }
}
$stack = $this->yystack;
$yyidx = $this->yyidx;
@@ -398,7 +507,7 @@ static public $yy_action = array(
// reduce action
$done = 0;
do {
- if ($done++ == 100) {
+ if ($done ++ == 100) {
$this->yyidx = $yyidx;
$this->yystack = $stack;
// too much recursion prevents proper detection
@@ -406,25 +515,30 @@ static public $yy_action = array(
return array_unique($expected);
}
$yyruleno = $yyact - self::YYNSTATE;
- $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs'];
- $nextstate = $this->yy_find_reduce_action(
- $this->yystack[$this->yyidx]->stateno,
- self::$yyRuleInfo[$yyruleno]['lhs']);
+ $this->yyidx -= self::$yyRuleInfo[$yyruleno][1];
+ $nextstate = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, self::$yyRuleInfo[$yyruleno][0]);
if (isset(self::$yyExpectedTokens[$nextstate])) {
- $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
- if (in_array($token,
- self::$yyExpectedTokens[$nextstate], true)) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return array_unique($expected);
+ $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
+ if (isset($res4[$nextstate][$token])) {
+ if ($res4[$nextstate][$token]) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return array_unique($expected);
+ }
+ } else {
+ if ($res4[$nextstate][$token] = in_array($token, self::$yyExpectedTokens[$nextstate], true)) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return array_unique($expected);
+ }
}
}
if ($nextstate < self::YYNSTATE) {
// we need to shift a non-terminal
- $this->yyidx++;
+ $this->yyidx ++;
$x = new TPC_yyStackEntry;
$x->stateno = $nextstate;
- $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
+ $x->major = self::$yyRuleInfo[$yyruleno][0];
$this->yystack[$this->yyidx] = $x;
continue 2;
} elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) {
@@ -446,19 +560,28 @@ static public $yy_action = array(
}
break;
} while (true);
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+
return array_unique($expected);
}
- function yy_is_expected_token($token)
+ public function yy_is_expected_token($token)
{
+ static $res = array();
+ static $res2 = array();
if ($token === 0) {
return true; // 0 is not part of this
}
$state = $this->yystack[$this->yyidx]->stateno;
- if (in_array($token, self::$yyExpectedTokens[$state], true)) {
- return true;
+ if (isset($res[$state][$token])) {
+ if ($res[$state][$token]) {
+ return true;
+ }
+ } else {
+ if ($res[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) {
+ return true;
+ }
}
$stack = $this->yystack;
$yyidx = $this->yyidx;
@@ -468,7 +591,7 @@ static public $yy_action = array(
// reduce action
$done = 0;
do {
- if ($done++ == 100) {
+ if ($done ++ == 100) {
$this->yyidx = $yyidx;
$this->yystack = $stack;
// too much recursion prevents proper detection
@@ -476,22 +599,27 @@ static public $yy_action = array(
return true;
}
$yyruleno = $yyact - self::YYNSTATE;
- $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs'];
- $nextstate = $this->yy_find_reduce_action(
- $this->yystack[$this->yyidx]->stateno,
- self::$yyRuleInfo[$yyruleno]['lhs']);
- if (isset(self::$yyExpectedTokens[$nextstate]) &&
- in_array($token, self::$yyExpectedTokens[$nextstate], true)) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return true;
+ $this->yyidx -= self::$yyRuleInfo[$yyruleno][1];
+ $nextstate = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, self::$yyRuleInfo[$yyruleno][0]);
+ if (isset($res2[$nextstate][$token])) {
+ if ($res2[$nextstate][$token]) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return true;
+ }
+ } else {
+ if ($res2[$nextstate][$token] = (isset(self::$yyExpectedTokens[$nextstate]) && in_array($token, self::$yyExpectedTokens[$nextstate], true))) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return true;
+ }
}
if ($nextstate < self::YYNSTATE) {
// we need to shift a non-terminal
- $this->yyidx++;
+ $this->yyidx ++;
$x = new TPC_yyStackEntry;
$x->stateno = $nextstate;
- $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
+ $x->major = self::$yyRuleInfo[$yyruleno][0];
$this->yystack[$this->yyidx] = $x;
continue 2;
} elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) {
@@ -519,10 +647,11 @@ static public $yy_action = array(
} while (true);
$this->yyidx = $yyidx;
$this->yystack = $stack;
+
return true;
}
- function yy_find_shift_action($iLookAhead)
+ public function yy_find_shift_action($iLookAhead)
{
$stateno = $this->yystack[$this->yyidx]->stateno;
@@ -539,24 +668,22 @@ static public $yy_action = array(
return self::YY_NO_ACTION;
}
$i += $iLookAhead;
- if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
- self::$yy_lookahead[$i] != $iLookAhead) {
- if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
- && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) {
- if (self::$yyTraceFILE) {
- fwrite(self::$yyTraceFILE, self::$yyTracePrompt . "FALLBACK " .
- $this->yyTokenName[$iLookAhead] . " => " .
- $this->yyTokenName[$iFallback] . "\n");
+ if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[$i] != $iLookAhead) {
+ if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback) && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) {
+ if ($this->yyTraceFILE) {
+ fwrite($this->yyTraceFILE, $this->yyTracePrompt . "FALLBACK " . $this->yyTokenName[$iLookAhead] . " => " . $this->yyTokenName[$iFallback] . "\n");
}
+
return $this->yy_find_shift_action($iFallback);
}
+
return self::$yy_default[$stateno];
} else {
return self::$yy_action[$i];
}
}
- function yy_find_reduce_action($stateno, $iLookAhead)
+ public function yy_find_reduce_action($stateno, $iLookAhead)
{
/* $stateno = $this->yystack[$this->yyidx]->stateno; */
@@ -571,213 +698,185 @@ static public $yy_action = array(
return self::YY_NO_ACTION;
}
$i += $iLookAhead;
- if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
- self::$yy_lookahead[$i] != $iLookAhead) {
+ if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[$i] != $iLookAhead) {
return self::$yy_default[$stateno];
} else {
return self::$yy_action[$i];
}
}
- function yy_shift($yyNewState, $yyMajor, $yypMinor)
+ public function yy_shift($yyNewState, $yyMajor, $yypMinor)
{
- $this->yyidx++;
+ $this->yyidx ++;
if ($this->yyidx >= self::YYSTACKDEPTH) {
- $this->yyidx--;
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sStack Overflow!\n", self::$yyTracePrompt);
+ $this->yyidx --;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
}
while ($this->yyidx >= 0) {
$this->yy_pop_parser_stack();
}
-#line 125 "smarty_internal_configfileparser.y"
+ #line 255 "../smarty/lexer/smarty_internal_configfileparser.y"
+
+ $this->internalError = true;
+ $this->compiler->trigger_config_file_error("Stack overflow in configfile parser");
- $this->internalError = true;
- $this->compiler->trigger_config_file_error("Stack overflow in configfile parser");
-#line 593 "smarty_internal_configfileparser.php"
return;
}
$yytos = new TPC_yyStackEntry;
$yytos->stateno = $yyNewState;
$yytos->major = $yyMajor;
$yytos->minor = $yypMinor;
- array_push($this->yystack, $yytos);
- if (self::$yyTraceFILE && $this->yyidx > 0) {
- fprintf(self::$yyTraceFILE, "%sShift %d\n", self::$yyTracePrompt,
- $yyNewState);
- fprintf(self::$yyTraceFILE, "%sStack:", self::$yyTracePrompt);
- for($i = 1; $i <= $this->yyidx; $i++) {
- fprintf(self::$yyTraceFILE, " %s",
- $this->yyTokenName[$this->yystack[$i]->major]);
+ $this->yystack[] = $yytos;
+ if ($this->yyTraceFILE && $this->yyidx > 0) {
+ fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt, $yyNewState);
+ fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
+ for ($i = 1; $i <= $this->yyidx; $i ++) {
+ fprintf($this->yyTraceFILE, " %s", $this->yyTokenName[$this->yystack[$i]->major]);
}
- fwrite(self::$yyTraceFILE,"\n");
- }
- }
-
- static public $yyRuleInfo = array(
- array( 'lhs' => 20, 'rhs' => 2 ),
- array( 'lhs' => 21, 'rhs' => 1 ),
- array( 'lhs' => 22, 'rhs' => 2 ),
- array( 'lhs' => 22, 'rhs' => 0 ),
- array( 'lhs' => 24, 'rhs' => 5 ),
- array( 'lhs' => 24, 'rhs' => 6 ),
- array( 'lhs' => 23, 'rhs' => 2 ),
- array( 'lhs' => 23, 'rhs' => 2 ),
- array( 'lhs' => 23, 'rhs' => 0 ),
- array( 'lhs' => 26, 'rhs' => 3 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 27, 'rhs' => 3 ),
- array( 'lhs' => 27, 'rhs' => 2 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 27, 'rhs' => 1 ),
- array( 'lhs' => 25, 'rhs' => 1 ),
- array( 'lhs' => 25, 'rhs' => 2 ),
- array( 'lhs' => 25, 'rhs' => 3 ),
- );
-
- static public $yyReduceMap = array(
- 0 => 0,
- 2 => 0,
- 3 => 0,
- 19 => 0,
- 20 => 0,
- 21 => 0,
- 1 => 1,
- 4 => 4,
- 5 => 5,
- 6 => 6,
- 7 => 7,
- 8 => 8,
- 9 => 9,
- 10 => 10,
- 11 => 11,
- 12 => 12,
- 13 => 13,
- 14 => 14,
- 15 => 15,
- 16 => 16,
- 17 => 17,
- 18 => 17,
- );
-#line 131 "smarty_internal_configfileparser.y"
- function yy_r0(){
- $this->_retvalue = null;
- }
-#line 666 "smarty_internal_configfileparser.php"
-#line 136 "smarty_internal_configfileparser.y"
- function yy_r1(){
- $this->add_global_vars($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = null;
- }
-#line 671 "smarty_internal_configfileparser.php"
-#line 149 "smarty_internal_configfileparser.y"
- function yy_r4(){
- $this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor);
- $this->_retvalue = null;
- }
-#line 677 "smarty_internal_configfileparser.php"
-#line 154 "smarty_internal_configfileparser.y"
- function yy_r5(){
- if ($this->smarty->config_read_hidden) {
- $this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor);
- }
- $this->_retvalue = null;
- }
-#line 685 "smarty_internal_configfileparser.php"
-#line 162 "smarty_internal_configfileparser.y"
- function yy_r6(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-#line 690 "smarty_internal_configfileparser.php"
-#line 166 "smarty_internal_configfileparser.y"
- function yy_r7(){
- $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor, Array($this->yystack[$this->yyidx + 0]->minor));
- }
-#line 695 "smarty_internal_configfileparser.php"
-#line 170 "smarty_internal_configfileparser.y"
- function yy_r8(){
- $this->_retvalue = Array();
- }
-#line 700 "smarty_internal_configfileparser.php"
-#line 176 "smarty_internal_configfileparser.y"
- function yy_r9(){
- $this->_retvalue = Array("key" => $this->yystack[$this->yyidx + -2]->minor, "value" => $this->yystack[$this->yyidx + 0]->minor);
- }
-#line 705 "smarty_internal_configfileparser.php"
-#line 181 "smarty_internal_configfileparser.y"
- function yy_r10(){
- $this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 710 "smarty_internal_configfileparser.php"
-#line 185 "smarty_internal_configfileparser.y"
- function yy_r11(){
- $this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 715 "smarty_internal_configfileparser.php"
-#line 189 "smarty_internal_configfileparser.y"
- function yy_r12(){
- $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 720 "smarty_internal_configfileparser.php"
-#line 193 "smarty_internal_configfileparser.y"
- function yy_r13(){
- $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 725 "smarty_internal_configfileparser.php"
-#line 197 "smarty_internal_configfileparser.y"
- function yy_r14(){
- $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 730 "smarty_internal_configfileparser.php"
-#line 201 "smarty_internal_configfileparser.y"
- function yy_r15(){
- $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + -1]->minor);
- }
-#line 735 "smarty_internal_configfileparser.php"
-#line 205 "smarty_internal_configfileparser.y"
- function yy_r16(){
- $this->_retvalue = '';
- }
-#line 740 "smarty_internal_configfileparser.php"
-#line 209 "smarty_internal_configfileparser.y"
- function yy_r17(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 745 "smarty_internal_configfileparser.php"
+ fwrite($this->yyTraceFILE, "\n");
+ }
+ }
+
+ public static $yyRuleInfo = array(array(0 => 20, 1 => 2), array(0 => 21, 1 => 1), array(0 => 22, 1 => 2),
+ array(0 => 22, 1 => 0), array(0 => 24, 1 => 5), array(0 => 24, 1 => 6), array(0 => 23, 1 => 2),
+ array(0 => 23, 1 => 2), array(0 => 23, 1 => 0), array(0 => 26, 1 => 3), array(0 => 27, 1 => 1),
+ array(0 => 27, 1 => 1), array(0 => 27, 1 => 1), array(0 => 27, 1 => 1), array(0 => 27, 1 => 1),
+ array(0 => 27, 1 => 3), array(0 => 27, 1 => 2), array(0 => 27, 1 => 1), array(0 => 27, 1 => 1),
+ array(0 => 25, 1 => 1), array(0 => 25, 1 => 2), array(0 => 25, 1 => 3),);
+
+ public static $yyReduceMap = array(0 => 0, 2 => 0, 3 => 0, 19 => 0, 20 => 0, 21 => 0, 1 => 1, 4 => 4, 5 => 5,
+ 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10, 11 => 11, 12 => 12, 13 => 13,
+ 14 => 14, 15 => 15, 16 => 16, 17 => 17, 18 => 17,);
+
+ #line 261 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r0()
+ {
+ $this->_retvalue = null;
+ }
+
+ #line 266 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r1()
+ {
+ $this->add_global_vars($this->yystack[$this->yyidx + 0]->minor);
+ $this->_retvalue = null;
+ }
+
+ #line 280 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r4()
+ {
+ $this->add_section_vars($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor);
+ $this->_retvalue = null;
+ }
+
+ #line 285 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r5()
+ {
+ if ($this->configReadHidden) {
+ $this->add_section_vars($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor);
+ }
+ $this->_retvalue = null;
+ }
+
+ #line 293 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r6()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor;
+ }
+
+ #line 297 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r7()
+ {
+ $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 1]->minor, Array($this->yystack[$this->yyidx + 0]->minor));
+ }
+
+ #line 301 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r8()
+ {
+ $this->_retvalue = Array();
+ }
+
+ #line 307 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r9()
+ {
+ $this->_retvalue = Array("key" => $this->yystack[$this->yyidx + - 2]->minor,
+ "value" => $this->yystack[$this->yyidx + 0]->minor);
+ }
+
+ #line 312 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r10()
+ {
+ $this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor;
+ }
+
+ #line 316 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r11()
+ {
+ $this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor;
+ }
+
+ #line 320 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r12()
+ {
+ $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor);
+ }
+
+ #line 324 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r13()
+ {
+ $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor);
+ }
+
+ #line 328 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r14()
+ {
+ $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor);
+ }
+
+ #line 332 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r15()
+ {
+ $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + - 1]->minor);
+ }
+
+ #line 336 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r16()
+ {
+ $this->_retvalue = '';
+ }
+
+ #line 340 "../smarty/lexer/smarty_internal_configfileparser.y"
+ function yy_r17()
+ {
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
private $_retvalue;
- function yy_reduce($yyruleno)
+ public function yy_reduce($yyruleno)
{
- $yymsp = $this->yystack[$this->yyidx];
- if (self::$yyTraceFILE && $yyruleno >= 0
- && $yyruleno < count(self::$yyRuleName)) {
- fprintf(self::$yyTraceFILE, "%sReduce (%d) [%s].\n",
- self::$yyTracePrompt, $yyruleno,
- self::$yyRuleName[$yyruleno]);
+ if ($this->yyTraceFILE && $yyruleno >= 0 && $yyruleno < count(self::$yyRuleName)) {
+ fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n", $this->yyTracePrompt, $yyruleno, self::$yyRuleName[$yyruleno]);
}
$this->_retvalue = $yy_lefthand_side = null;
- if (array_key_exists($yyruleno, self::$yyReduceMap)) {
+ if (isset(self::$yyReduceMap[$yyruleno])) {
// call the action
$this->_retvalue = null;
$this->{'yy_r' . self::$yyReduceMap[$yyruleno]}();
$yy_lefthand_side = $this->_retvalue;
}
- $yygoto = self::$yyRuleInfo[$yyruleno]['lhs'];
- $yysize = self::$yyRuleInfo[$yyruleno]['rhs'];
+ $yygoto = self::$yyRuleInfo[$yyruleno][0];
+ $yysize = self::$yyRuleInfo[$yyruleno][1];
$this->yyidx -= $yysize;
- for($i = $yysize; $i; $i--) {
+ for ($i = $yysize; $i; $i --) {
// pop all of the right-hand side parameters
array_pop($this->yystack);
}
$yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto);
if ($yyact < self::YYNSTATE) {
- if (!self::$yyTraceFILE && $yysize) {
- $this->yyidx++;
+ if (!$this->yyTraceFILE && $yysize) {
+ $this->yyidx ++;
$x = new TPC_yyStackEntry;
$x->stateno = $yyact;
$x->major = $yygoto;
@@ -791,73 +890,68 @@ static public $yy_action = array(
}
}
- function yy_parse_failed()
+ public function yy_parse_failed()
{
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sFail!\n", self::$yyTracePrompt);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
}
while ($this->yyidx >= 0) {
$this->yy_pop_parser_stack();
}
}
- function yy_syntax_error($yymajor, $TOKEN)
+ public function yy_syntax_error($yymajor, $TOKEN)
{
-#line 118 "smarty_internal_configfileparser.y"
+ #line 248 "../smarty/lexer/smarty_internal_configfileparser.y"
- $this->internalError = true;
- $this->yymajor = $yymajor;
- $this->compiler->trigger_config_file_error();
-#line 808 "smarty_internal_configfileparser.php"
+ $this->internalError = true;
+ $this->yymajor = $yymajor;
+ $this->compiler->trigger_config_file_error();
}
- function yy_accept()
+ public function yy_accept()
{
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sAccept!\n", self::$yyTracePrompt);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
}
while ($this->yyidx >= 0) {
- $stack = $this->yy_pop_parser_stack();
+ $this->yy_pop_parser_stack();
}
-#line 110 "smarty_internal_configfileparser.y"
+ #line 241 "../smarty/lexer/smarty_internal_configfileparser.y"
- $this->successful = !$this->internalError;
- $this->internalError = false;
- $this->retvalue = $this->_retvalue;
- //echo $this->retvalue."\n\n";
-#line 826 "smarty_internal_configfileparser.php"
+ $this->successful = !$this->internalError;
+ $this->internalError = false;
+ $this->retvalue = $this->_retvalue;
}
- function doParse($yymajor, $yytokenvalue)
+ public function doParse($yymajor, $yytokenvalue)
{
$yyerrorhit = 0; /* True if yymajor has invoked an error */
if ($this->yyidx === null || $this->yyidx < 0) {
$this->yyidx = 0;
- $this->yyerrcnt = -1;
+ $this->yyerrcnt = - 1;
$x = new TPC_yyStackEntry;
$x->stateno = 0;
$x->major = 0;
$this->yystack = array();
- array_push($this->yystack, $x);
+ $this->yystack[] = $x;
}
- $yyendofinput = ($yymajor==0);
+ $yyendofinput = ($yymajor == 0);
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sInput %s\n",
- self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sInput %s\n", $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
}
do {
$yyact = $this->yy_find_shift_action($yymajor);
- if ($yymajor < self::YYERRORSYMBOL &&
- !$this->yy_is_expected_token($yymajor)) {
+ if ($yymajor < self::YYERRORSYMBOL && !$this->yy_is_expected_token($yymajor)) {
// force a syntax error
$yyact = self::YY_ERROR_ACTION;
}
if ($yyact < self::YYNSTATE) {
$this->yy_shift($yyact, $yymajor, $yytokenvalue);
- $this->yyerrcnt--;
+ $this->yyerrcnt --;
if ($yyendofinput && $this->yyidx >= 0) {
$yymajor = 0;
} else {
@@ -866,30 +960,25 @@ static public $yy_action = array(
} elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
$this->yy_reduce($yyact - self::YYNSTATE);
} elseif ($yyact == self::YY_ERROR_ACTION) {
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sSyntax Error!\n",
- self::$yyTracePrompt);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sSyntax Error!\n", $this->yyTracePrompt);
}
if (self::YYERRORSYMBOL) {
if ($this->yyerrcnt < 0) {
$this->yy_syntax_error($yymajor, $yytokenvalue);
}
$yymx = $this->yystack[$this->yyidx]->major;
- if ($yymx == self::YYERRORSYMBOL || $yyerrorhit ){
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sDiscard input token %s\n",
- self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+ if ($yymx == self::YYERRORSYMBOL || $yyerrorhit) {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sDiscard input token %s\n", $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
}
$this->yy_destructor($yymajor, $yytokenvalue);
$yymajor = self::YYNOCODE;
} else {
- while ($this->yyidx >= 0 &&
- $yymx != self::YYERRORSYMBOL &&
- ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
- ){
+ while ($this->yyidx >= 0 && $yymx != self::YYERRORSYMBOL && ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE) {
$this->yy_pop_parser_stack();
}
- if ($this->yyidx < 0 || $yymajor==0) {
+ if ($this->yyidx < 0 || $yymajor == 0) {
$this->yy_destructor($yymajor, $yytokenvalue);
$this->yy_parse_failed();
$yymajor = self::YYNOCODE;
@@ -918,4 +1007,4 @@ static public $yy_action = array(
} while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);
}
}
-?> \ No newline at end of file
+
diff --git a/include/smarty/libs/sysplugins/smarty_internal_data.php b/include/smarty/libs/sysplugins/smarty_internal_data.php
index 1d7b1d334..bba95d303 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_data.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_data.php
@@ -1,21 +1,35 @@
<?php
/**
* Smarty Internal Plugin Data
+ * This file contains the basic classes and methods for template and variable creation
*
- * This file contains the basic classes and methodes for template and variable creation
- *
- * @package Smarty
+ * @package Smarty
* @subpackage Template
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
- * Base class with template and variable methodes
+ * Base class with template and variable methods
*
- * @package Smarty
+ * @package Smarty
* @subpackage Template
+ *
+ * @method mixed getConfigVars(string $varName = null, bool $searchParents = true)
+ * @method mixed getStreamVariable(string $variable)
+ * @method Smarty_Internal_Data clearAssign(mixed $tpl_var)
+ * @method Smarty_Internal_Data clearAllAssign()
+ * @method Smarty_Internal_Data clearConfig(string $varName = null)
+ * @method Smarty_Internal_Data configLoad(string $config_file, mixed $sections = null, string $scope = 'local')
+ * @property int $scope
*/
-class Smarty_Internal_Data {
+class Smarty_Internal_Data
+{
+ /**
+ * This object type (Smarty = 1, template = 2, data = 4)
+ *
+ * @var int
+ */
+ public $_objType = 4;
/**
* name of class used for templates
@@ -23,534 +37,204 @@ class Smarty_Internal_Data {
* @var string
*/
public $template_class = 'Smarty_Internal_Template';
+
/**
* template variables
*
- * @var array
+ * @var Smarty_Variable[]
*/
public $tpl_vars = array();
+
/**
* parent template (if any)
*
- * @var Smarty_Internal_Template
+ * @var Smarty|Smarty_Internal_Template|Smarty_Internal_Data
*/
public $parent = null;
+
/**
* configuration settings
*
- * @var array
+ * @var string[]
*/
public $config_vars = array();
/**
- * assigns a Smarty variable
+ * extension handler
*
- * @param array|string $tpl_var the template variable name(s)
- * @param mixed $value the value to assign
- * @param boolean $nocache if true any output of this variable will be not cached
- * @param boolean $scope the scope the variable will have (local,parent or root)
- * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
+ * @var Smarty_Internal_Extension_Handler
*/
- public function assign($tpl_var, $value = null, $nocache = false)
- {
- if (is_array($tpl_var)) {
- foreach ($tpl_var as $_key => $_val) {
- if ($_key != '') {
- $this->tpl_vars[$_key] = new Smarty_variable($_val, $nocache);
- }
- }
- } else {
- if ($tpl_var != '') {
- $this->tpl_vars[$tpl_var] = new Smarty_variable($value, $nocache);
- }
- }
-
- return $this;
- }
+ public $ext = null;
/**
- * assigns a global Smarty variable
+ * Smarty_Internal_Data constructor.
*
- * @param string $varname the global variable name
- * @param mixed $value the value to assign
- * @param boolean $nocache if true any output of this variable will be not cached
- * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
+ * Install extension handler
*/
- public function assignGlobal($varname, $value = null, $nocache = false)
+ public function __construct()
{
- if ($varname != '') {
- Smarty::$global_tpl_vars[$varname] = new Smarty_variable($value, $nocache);
- $ptr = $this;
- while ($ptr instanceof Smarty_Internal_Template) {
- $ptr->tpl_vars[$varname] = clone Smarty::$global_tpl_vars[$varname];
- $ptr = $ptr->parent;
- }
- }
-
- return $this;
- }
- /**
- * assigns values to template variables by reference
- *
- * @param string $tpl_var the template variable name
- * @param mixed $ &$value the referenced value to assign
- * @param boolean $nocache if true any output of this variable will be not cached
- * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
- */
- public function assignByRef($tpl_var, &$value, $nocache = false)
- {
- if ($tpl_var != '') {
- $this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache);
- $this->tpl_vars[$tpl_var]->value = &$value;
- }
-
- return $this;
+ $this->ext = new Smarty_Internal_Extension_Handler();
+ $this->ext->objType = $this->_objType;
}
/**
- * appends values to template variables
+ * assigns a Smarty variable
+ *
+ * @param array|string $tpl_var the template variable name(s)
+ * @param mixed $value the value to assign
+ * @param boolean $nocache if true any output of this variable will be not cached
*
- * @param array|string $tpl_var the template variable name(s)
- * @param mixed $value the value to append
- * @param boolean $merge flag if array elements shall be merged
- * @param boolean $nocache if true any output of this variable will be not cached
- * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
+ * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for
+ * chaining
*/
- public function append($tpl_var, $value = null, $merge = false, $nocache = false)
+ public function assign($tpl_var, $value = null, $nocache = false)
{
if (is_array($tpl_var)) {
- // $tpl_var is an array, ignore $value
foreach ($tpl_var as $_key => $_val) {
if ($_key != '') {
- if (!isset($this->tpl_vars[$_key])) {
- $tpl_var_inst = $this->getVariable($_key, null, true, false);
- if ($tpl_var_inst instanceof Undefined_Smarty_Variable) {
- $this->tpl_vars[$_key] = new Smarty_variable(null, $nocache);
- } else {
- $this->tpl_vars[$_key] = clone $tpl_var_inst;
- }
- }
- if (!(is_array($this->tpl_vars[$_key]->value) || $this->tpl_vars[$_key]->value instanceof ArrayAccess)) {
- settype($this->tpl_vars[$_key]->value, 'array');
- }
- if ($merge && is_array($_val)) {
- foreach($_val as $_mkey => $_mval) {
- $this->tpl_vars[$_key]->value[$_mkey] = $_mval;
- }
- } else {
- $this->tpl_vars[$_key]->value[] = $_val;
+ $this->tpl_vars[$_key] = new Smarty_Variable($_val, $nocache);
+ if ($this->_objType == 2 && $this->scope) {
+ $this->ext->_updateScope->updateScope($this, $_key);
}
}
}
} else {
- if ($tpl_var != '' && isset($value)) {
- if (!isset($this->tpl_vars[$tpl_var])) {
- $tpl_var_inst = $this->getVariable($tpl_var, null, true, false);
- if ($tpl_var_inst instanceof Undefined_Smarty_Variable) {
- $this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache);
- } else {
- $this->tpl_vars[$tpl_var] = clone $tpl_var_inst;
- }
- }
- if (!(is_array($this->tpl_vars[$tpl_var]->value) || $this->tpl_vars[$tpl_var]->value instanceof ArrayAccess)) {
- settype($this->tpl_vars[$tpl_var]->value, 'array');
- }
- if ($merge && is_array($value)) {
- foreach($value as $_mkey => $_mval) {
- $this->tpl_vars[$tpl_var]->value[$_mkey] = $_mval;
- }
- } else {
- $this->tpl_vars[$tpl_var]->value[] = $value;
- }
- }
- }
-
- return $this;
- }
-
- /**
- * appends values to template variables by reference
- *
- * @param string $tpl_var the template variable name
- * @param mixed &$value the referenced value to append
- * @param boolean $merge flag if array elements shall be merged
- * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
- */
- public function appendByRef($tpl_var, &$value, $merge = false)
- {
- if ($tpl_var != '' && isset($value)) {
- if (!isset($this->tpl_vars[$tpl_var])) {
- $this->tpl_vars[$tpl_var] = new Smarty_variable();
- }
- if (!is_array($this->tpl_vars[$tpl_var]->value)) {
- settype($this->tpl_vars[$tpl_var]->value, 'array');
- }
- if ($merge && is_array($value)) {
- foreach($value as $_key => $_val) {
- $this->tpl_vars[$tpl_var]->value[$_key] = &$value[$_key];
+ if ($tpl_var != '') {
+ $this->tpl_vars[$tpl_var] = new Smarty_Variable($value, $nocache);
+ if ($this->_objType == 2 && $this->scope) {
+ $this->ext->_updateScope->updateScope($this, $tpl_var);
}
- } else {
- $this->tpl_vars[$tpl_var]->value[] = &$value;
}
}
-
return $this;
}
/**
- * Returns a single or all template variables
- *
- * @param string $varname variable name or null
- * @param string $_ptr optional pointer to data object
- * @param boolean $search_parents include parent templates?
- * @return string variable value or or array of variables
- */
- public function getTemplateVars($varname = null, $_ptr = null, $search_parents = true)
- {
- if (isset($varname)) {
- $_var = $this->getVariable($varname, $_ptr, $search_parents, false);
- if (is_object($_var)) {
- return $_var->value;
- } else {
- return null;
- }
- } else {
- $_result = array();
- if ($_ptr === null) {
- $_ptr = $this;
- } while ($_ptr !== null) {
- foreach ($_ptr->tpl_vars AS $key => $var) {
- if (!array_key_exists($key, $_result)) {
- $_result[$key] = $var->value;
- }
- }
- // not found, try at parent
- if ($search_parents) {
- $_ptr = $_ptr->parent;
- } else {
- $_ptr = null;
- }
- }
- if ($search_parents && isset(Smarty::$global_tpl_vars)) {
- foreach (Smarty::$global_tpl_vars AS $key => $var) {
- if (!array_key_exists($key, $_result)) {
- $_result[$key] = $var->value;
- }
- }
- }
- return $_result;
- }
- }
-
- /**
- * clear the given assigned template variable.
+ * appends values to template variables
*
- * @param string|array $tpl_var the template variable(s) to clear
- * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
- */
- public function clearAssign($tpl_var)
- {
- if (is_array($tpl_var)) {
- foreach ($tpl_var as $curr_var) {
- unset($this->tpl_vars[$curr_var]);
- }
- } else {
- unset($this->tpl_vars[$tpl_var]);
- }
-
- return $this;
- }
-
- /**
- * clear all the assigned template variables.
- * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
- */
- public function clearAllAssign()
- {
- $this->tpl_vars = array();
- return $this;
- }
-
- /**
- * load a config file, optionally load just selected sections
+ * @api Smarty::append()
+ * @link http://www.smarty.net/docs/en/api.append.tpl
*
- * @param string $config_file filename
- * @param mixed $sections array of section names, single section or null
- * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
- */
- public function configLoad($config_file, $sections = null)
- {
- // load Config class
- $config = new Smarty_Internal_Config($config_file, $this->smarty, $this);
- $config->loadConfigVars($sections);
- return $this;
- }
-
- /**
- * gets the object of a Smarty variable
+ * @param array|string $tpl_var the template variable name(s)
+ * @param mixed $value the value to append
+ * @param bool $merge flag if array elements shall be merged
+ * @param bool $nocache if true any output of this variable will
+ * be not cached
*
- * @param string $variable the name of the Smarty variable
- * @param object $_ptr optional pointer to data object
- * @param boolean $search_parents search also in parent data
- * @return object the object of the variable
+ * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
*/
- public function getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true)
+ public function append($tpl_var, $value = null, $merge = false, $nocache = false)
{
- if ($_ptr === null) {
- $_ptr = $this;
- } while ($_ptr !== null) {
- if (isset($_ptr->tpl_vars[$variable])) {
- // found it, return it
- return $_ptr->tpl_vars[$variable];
- }
- // not found, try at parent
- if ($search_parents) {
- $_ptr = $_ptr->parent;
- } else {
- $_ptr = null;
- }
- }
- if (isset(Smarty::$global_tpl_vars[$variable])) {
- // found it, return it
- return Smarty::$global_tpl_vars[$variable];
- }
- if ($this->smarty->error_unassigned && $error_enable) {
- // force a notice
- $x = $$variable;
- }
- return new Undefined_Smarty_Variable;
+ return $this->ext->append->append($this, $tpl_var, $value, $merge, $nocache);
}
/**
- * gets a config variable
+ * assigns a global Smarty variable
*
- * @param string $variable the name of the config variable
- * @return mixed the value of the config variable
- */
- public function getConfigVariable($variable, $error_enable = true)
- {
- $_ptr = $this;
- while ($_ptr !== null) {
- if (isset($_ptr->config_vars[$variable])) {
- // found it, return it
- return $_ptr->config_vars[$variable];
- }
- // not found, try at parent
- $_ptr = $_ptr->parent;
- }
- if ($this->smarty->error_unassigned && $error_enable) {
- // force a notice
- $x = $$variable;
- }
- return null;
- }
-
- /**
- * gets a stream variable
+ * @param string $varName the global variable name
+ * @param mixed $value the value to assign
+ * @param boolean $nocache if true any output of this variable will be not cached
*
- * @param string $variable the stream of the variable
- * @return mixed the value of the stream variable
+ * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
*/
- public function getStreamVariable($variable)
+ public function assignGlobal($varName, $value = null, $nocache = false)
{
- $_result = '';
- $fp = fopen($variable, 'r+');
- if ($fp) {
- while (!feof($fp) && ($current_line = fgets($fp)) !== false ) {
- $_result .= $current_line;
- }
- fclose($fp);
- return $_result;
- }
-
- if ($this->smarty->error_unassigned) {
- throw new SmartyException('Undefined stream variable "' . $variable . '"');
- } else {
- return null;
- }
+ return $this->ext->assignGlobal->assignGlobal($this, $varName, $value, $nocache);
}
/**
- * Returns a single or all config variables
+ * appends values to template variables by reference
*
- * @param string $varname variable name or null
- * @return string variable value or or array of variables
- */
- public function getConfigVars($varname = null, $search_parents = true)
- {
- $_ptr = $this;
- $var_array = array();
- while ($_ptr !== null) {
- if (isset($varname)) {
- if (isset($_ptr->config_vars[$varname])) {
- return $_ptr->config_vars[$varname];
- }
- } else {
- $var_array = array_merge($_ptr->config_vars, $var_array);
- }
- // not found, try at parent
- if ($search_parents) {
- $_ptr = $_ptr->parent;
- } else {
- $_ptr = null;
- }
- }
- if (isset($varname)) {
- return '';
- } else {
- return $var_array;
- }
- }
-
- /**
- * Deassigns a single or all config variables
+ * @param string $tpl_var the template variable name
+ * @param mixed &$value the referenced value to append
+ * @param boolean $merge flag if array elements shall be merged
*
- * @param string $varname variable name or null
- * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
+ * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
*/
- public function clearConfig($varname = null)
+ public function appendByRef($tpl_var, &$value, $merge = false)
{
- if (isset($varname)) {
- unset($this->config_vars[$varname]);
- } else {
- $this->config_vars = array();
- }
- return $this;
+ return $this->ext->appendByRef->appendByRef($this, $tpl_var, $value, $merge);
}
-}
-
-/**
- * class for the Smarty data object
- *
- * The Smarty data object will hold Smarty variables in the current scope
- *
- * @package Smarty
- * @subpackage Template
- */
-class Smarty_Data extends Smarty_Internal_Data {
-
/**
- * Smarty object
+ * assigns values to template variables by reference
*
- * @var Smarty
- */
- public $smarty = null;
-
- /**
- * create Smarty data object
+ * @param string $tpl_var the template variable name
+ * @param $value
+ * @param boolean $nocache if true any output of this variable will be not cached
*
- * @param Smarty|array $_parent parent template
- * @param Smarty $smarty global smarty instance
+ * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
*/
- public function __construct ($_parent = null, $smarty = null)
+ public function assignByRef($tpl_var, &$value, $nocache = false)
{
- $this->smarty = $smarty;
- if (is_object($_parent)) {
- // when object set up back pointer
- $this->parent = $_parent;
- } elseif (is_array($_parent)) {
- // set up variable values
- foreach ($_parent as $_key => $_val) {
- $this->tpl_vars[$_key] = new Smarty_variable($_val);
- }
- } elseif ($_parent != null) {
- throw new SmartyException("Wrong type for template variables");
- }
+ return $this->ext->assignByRef->assignByRef($this, $tpl_var, $value, $nocache);
}
-}
-
-/**
- * class for the Smarty variable object
- *
- * This class defines the Smarty variable object
- *
- * @package Smarty
- * @subpackage Template
- */
-class Smarty_Variable {
-
/**
- * template variable
+ * Returns a single or all template variables
*
- * @var mixed
- */
- public $value = null;
- /**
- * if true any output of this variable will be not cached
+ * @api Smarty::getTemplateVars()
+ * @link http://www.smarty.net/docs/en/api.get.template.vars.tpl
*
- * @var boolean
- */
- public $nocache = false;
- /**
- * the scope the variable will have (local,parent or root)
- *
- * @var int
- */
- public $scope = Smarty::SCOPE_LOCAL;
-
- /**
- * create Smarty variable object
+ * @param string $varName variable name or null
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object
+ * @param bool $searchParents include parent templates?
*
- * @param mixed $value the value to assign
- * @param boolean $nocache if true any output of this variable will be not cached
- * @param int $scope the scope the variable will have (local,parent or root)
+ * @return mixed variable value or or array of variables
*/
- public function __construct($value = null, $nocache = false, $scope = Smarty::SCOPE_LOCAL)
+ public function getTemplateVars($varName = null, Smarty_Internal_Data $_ptr = null, $searchParents = true)
{
- $this->value = $value;
- $this->nocache = $nocache;
- $this->scope = $scope;
+ return $this->ext->getTemplateVars->getTemplateVars($this, $varName, $_ptr, $searchParents);
}
/**
- * <<magic>> String conversion
+ * gets the object of a Smarty variable
+ *
+ * @param string $variable the name of the Smarty variable
+ * @param Smarty_Internal_Data $_ptr optional pointer to data object
+ * @param boolean $searchParents search also in parent data
+ * @param bool $error_enable
*
- * @return string
+ * @return Smarty_Variable|Smarty_Undefined_Variable the object of the variable
+ * @deprecated since 3.1.28 please use Smarty_Internal_Data::getTemplateVars() instead.
*/
- public function __toString()
- {
- return (string) $this->value;
+ public function getVariable($variable = null, Smarty_Internal_Data $_ptr = null, $searchParents = true, $error_enable = true){
+ return $this->ext->getTemplateVars->_getVariable($this, $variable, $_ptr, $searchParents, $error_enable);
}
-
-}
-
-/**
- * class for undefined variable object
- *
- * This class defines an object for undefined variable handling
- *
- * @package Smarty
- * @subpackage Template
- */
-class Undefined_Smarty_Variable {
-
+
/**
- * Returns FALSE for 'nocache' and NULL otherwise.
+ * Follow the parent chain an merge template and config variables
*
- * @param string $name
- * @return bool
+ * @param \Smarty_Internal_Data|null $data
*/
- public function __get($name)
+ public function _mergeVars(Smarty_Internal_Data $data = null)
{
- if ($name == 'nocache') {
- return false;
+ if (isset($data)) {
+ if (!empty($this->tpl_vars)) {
+ $data->tpl_vars = array_merge($this->tpl_vars, $data->tpl_vars);
+ }
+ if (!empty($this->config_vars)) {
+ $data->config_vars = array_merge($this->config_vars, $data->config_vars);
+ }
} else {
- return null;
+ $data = $this;
+ }
+ if (isset($this->parent)) {
+ $this->parent->_mergeVars($data);
}
}
/**
- * Always returns an empty string.
+ * Handle unknown class methods
*
- * @return string
+ * @param string $name unknown method-name
+ * @param array $args argument array
+ *
+ * @return mixed
+ * @throws SmartyException
*/
- public function __toString()
+ public function __call($name, $args)
{
- return "";
+ return $this->ext->_callExternalMethod($this, $name, $args);
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_debug.php b/include/smarty/libs/sysplugins/smarty_internal_debug.php
index 2aea13f30..0cbd54955 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_debug.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_debug.php
@@ -1,184 +1,362 @@
<?php
/**
* Smarty Internal Plugin Debug
+ * Class to collect data for the Smarty Debugging Console
*
- * Class to collect data for the Smarty Debugging Consol
- *
- * @package Smarty
+ * @package Smarty
* @subpackage Debug
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Debug Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Debug
*/
-class Smarty_Internal_Debug extends Smarty_Internal_Data {
-
+class Smarty_Internal_Debug extends Smarty_Internal_Data
+{
/**
* template data
*
* @var array
*/
- public static $template_data = array();
+ public $template_data = array();
+
+ /**
+ * List of uid's which shall be ignored
+ *
+ * @var array
+ */
+ public $ignore_uid = array();
+
+ /**
+ * Index of display() and fetch() calls
+ *
+ * @var int
+ */
+ public $index = 0;
+
+ /**
+ * Counter for window offset
+ *
+ * @var int
+ */
+ public $offset = 0;
+
+ /**
+ * Start logging template
+ *
+ * @param \Smarty_Internal_Template $template template
+ * @param null $mode true: display false: fetch null: subtemplate
+ */
+ public function start_template(Smarty_Internal_Template $template, $mode = null)
+ {
+ if (isset($mode)) {
+ $this->index ++;
+ $this->offset ++;
+ $this->template_data[$this->index] = null;
+ }
+ $key = $this->get_key($template);
+ $this->template_data[$this->index][$key]['start_template_time'] = microtime(true);
+ }
+
+ /**
+ * End logging of cache time
+ *
+ * @param \Smarty_Internal_Template $template cached template
+ */
+ public function end_template(Smarty_Internal_Template $template)
+ {
+ $key = $this->get_key($template);
+ $this->template_data[$this->index][$key]['total_time'] +=
+ microtime(true) - $this->template_data[$this->index][$key]['start_template_time'];
+ //$this->template_data[$this->index][$key]['properties'] = $template->properties;
+ }
/**
* Start logging of compile time
*
- * @param object $template
+ * @param \Smarty_Internal_Template $template
*/
- public static function start_compile($template)
+ public function start_compile(Smarty_Internal_Template $template)
{
- $key = self::get_key($template);
- self::$template_data[$key]['start_time'] = microtime(true);
+ static $_is_stringy = array('string' => true, 'eval' => true);
+ if (!empty($template->compiler->trace_uid)) {
+ $key = $template->compiler->trace_uid;
+ if (!isset($this->template_data[$this->index][$key])) {
+ if (isset($_is_stringy[$template->source->type])) {
+ $this->template_data[$this->index][$key]['name'] =
+ '\'' . substr($template->source->name, 0, 25) . '...\'';
+ } else {
+ $this->template_data[$this->index][$key]['name'] = $template->source->filepath;
+ }
+ $this->template_data[$this->index][$key]['compile_time'] = 0;
+ $this->template_data[$this->index][$key]['render_time'] = 0;
+ $this->template_data[$this->index][$key]['cache_time'] = 0;
+ }
+ } else {
+ if (isset($this->ignore_uid[$template->source->uid])) {
+ return;
+ }
+ $key = $this->get_key($template);
+ }
+ $this->template_data[$this->index][$key]['start_time'] = microtime(true);
}
/**
* End logging of compile time
*
- * @param object $template
+ * @param \Smarty_Internal_Template $template
*/
- public static function end_compile($template)
+ public function end_compile(Smarty_Internal_Template $template)
{
- $key = self::get_key($template);
- self::$template_data[$key]['compile_time'] += microtime(true) - self::$template_data[$key]['start_time'];
+ if (!empty($template->compiler->trace_uid)) {
+ $key = $template->compiler->trace_uid;
+ } else {
+ if (isset($this->ignore_uid[$template->source->uid])) {
+ return;
+ }
+
+ $key = $this->get_key($template);
+ }
+ $this->template_data[$this->index][$key]['compile_time'] +=
+ microtime(true) - $this->template_data[$this->index][$key]['start_time'];
}
/**
* Start logging of render time
*
- * @param object $template
+ * @param \Smarty_Internal_Template $template
*/
- public static function start_render($template)
+ public function start_render(Smarty_Internal_Template $template)
{
- $key = self::get_key($template);
- self::$template_data[$key]['start_time'] = microtime(true);
+ $key = $this->get_key($template);
+ $this->template_data[$this->index][$key]['start_time'] = microtime(true);
}
/**
* End logging of compile time
*
- * @param object $template
+ * @param \Smarty_Internal_Template $template
*/
- public static function end_render($template)
+ public function end_render(Smarty_Internal_Template $template)
{
- $key = self::get_key($template);
- self::$template_data[$key]['render_time'] += microtime(true) - self::$template_data[$key]['start_time'];
+ $key = $this->get_key($template);
+ $this->template_data[$this->index][$key]['render_time'] +=
+ microtime(true) - $this->template_data[$this->index][$key]['start_time'];
}
/**
* Start logging of cache time
*
- * @param object $template cached template
+ * @param \Smarty_Internal_Template $template cached template
*/
- public static function start_cache($template)
+ public function start_cache(Smarty_Internal_Template $template)
{
- $key = self::get_key($template);
- self::$template_data[$key]['start_time'] = microtime(true);
+ $key = $this->get_key($template);
+ $this->template_data[$this->index][$key]['start_time'] = microtime(true);
}
/**
* End logging of cache time
*
- * @param object $template cached template
+ * @param \Smarty_Internal_Template $template cached template
+ */
+ public function end_cache(Smarty_Internal_Template $template)
+ {
+ $key = $this->get_key($template);
+ $this->template_data[$this->index][$key]['cache_time'] +=
+ microtime(true) - $this->template_data[$this->index][$key]['start_time'];
+ }
+
+ /**
+ * Register template object
+ *
+ * @param \Smarty_Internal_Template $template cached template
+ */
+ public function register_template(Smarty_Internal_Template $template)
+ {
+ }
+
+ /**
+ * Register data object
+ *
+ * @param \Smarty_Data $data data object
*/
- public static function end_cache($template)
+ public static function register_data(Smarty_Data $data)
{
- $key = self::get_key($template);
- self::$template_data[$key]['cache_time'] += microtime(true) - self::$template_data[$key]['start_time'];
}
/**
- * Opens a window for the Smarty Debugging Consol and display the data
+ * Opens a window for the Smarty Debugging Console and display the data
*
* @param Smarty_Internal_Template|Smarty $obj object to debug
+ * @param bool $full
*/
- public static function display_debug($obj)
+ public function display_debug($obj, $full = false)
{
- // prepare information of assigned variables
- $ptr = self::get_debug_vars($obj);
- if ($obj instanceof Smarty) {
- $smarty = clone $obj;
+ if (!$full) {
+ $this->offset ++;
+ $savedIndex = $this->index;
+ $this->index = 9999;
+ }
+ if ($obj->_objType == 1) {
+ $smarty = $obj;
} else {
- $smarty = clone $obj->smarty;
+ $smarty = $obj->smarty;
}
+ // create fresh instance of smarty for displaying the debug console
+ // to avoid problems if the application did overload the Smarty class
+ $debObj = new Smarty();
+ // copy the working dirs from application
+ $debObj->setCompileDir($smarty->getCompileDir());
+ // init properties by hand as user may have edited the original Smarty class
+ $debObj->setPluginsDir(is_dir(__DIR__ . '/../plugins') ? __DIR__ . '/../plugins' : $smarty->getPluginsDir());
+ $debObj->force_compile = false;
+ $debObj->compile_check = true;
+ $debObj->left_delimiter = '{';
+ $debObj->right_delimiter = '}';
+ $debObj->security_policy = null;
+ $debObj->debugging = false;
+ $debObj->debugging_ctrl = 'NONE';
+ $debObj->error_reporting = E_ALL & ~E_NOTICE;
+ $debObj->debug_tpl = isset($smarty->debug_tpl) ? $smarty->debug_tpl : 'file:' . __DIR__ . '/../debug.tpl';
+ $debObj->registered_plugins = array();
+ $debObj->registered_resources = array();
+ $debObj->registered_filters = array();
+ $debObj->autoload_filters = array();
+ $debObj->default_modifiers = array();
+ $debObj->escape_html = true;
+ $debObj->caching = false;
+ $debObj->compile_id = null;
+ $debObj->cache_id = null;
+ // prepare information of assigned variables
+ $ptr = $this->get_debug_vars($obj);
$_assigned_vars = $ptr->tpl_vars;
ksort($_assigned_vars);
$_config_vars = $ptr->config_vars;
ksort($_config_vars);
- $smarty->registered_filters = array();
- $smarty->autoload_filters = array();
- $smarty->default_modifiers = array();
- $smarty->force_compile = false;
- $smarty->left_delimiter = '{';
- $smarty->right_delimiter = '}';
- $smarty->debugging = false;
- $smarty->force_compile = false;
- $_template = new Smarty_Internal_Template($smarty->debug_tpl, $smarty);
- $_template->caching = false;
- $_template->disableSecurity();
- $_template->cache_id = null;
- $_template->compile_id = null;
- if ($obj instanceof Smarty_Internal_Template) {
+ $debugging = $smarty->debugging;
+
+ $_template = new Smarty_Internal_Template($debObj->debug_tpl, $debObj);
+ if ($obj->_objType == 2) {
$_template->assign('template_name', $obj->source->type . ':' . $obj->source->name);
}
- if ($obj instanceof Smarty) {
- $_template->assign('template_data', self::$template_data);
+ if ($obj->_objType == 1 || $full) {
+ $_template->assign('template_data', $this->template_data[$this->index]);
} else {
$_template->assign('template_data', null);
}
$_template->assign('assigned_vars', $_assigned_vars);
$_template->assign('config_vars', $_config_vars);
$_template->assign('execution_time', microtime(true) - $smarty->start_time);
+ $_template->assign('display_mode', $debugging == 2 || !$full);
+ $_template->assign('offset', $this->offset * 50);
echo $_template->fetch();
+ if (isset($full)) {
+ $this->index --;
+ }
+ if (!$full) {
+ $this->index = $savedIndex;
+ }
}
/**
* Recursively gets variables from all template/data scopes
*
- * @param Smarty_Internal_Template|Smarty_Data $obj object to debug
+ * @param Smarty_Internal_Template|Smarty_Data $obj object to debug
+ *
* @return StdClass
*/
- public static function get_debug_vars($obj)
+ public function get_debug_vars($obj)
{
- $config_vars = $obj->config_vars;
+ $config_vars = array();
+ foreach ($obj->config_vars as $key => $var) {
+ $config_vars[$key]['value'] = $var;
+ if ($obj->_objType == 2) {
+ $config_vars[$key]['scope'] = $obj->source->type . ':' . $obj->source->name;
+ } elseif ($obj->_objType == 4) {
+ $tpl_vars[$key]['scope'] = $obj->dataObjectName;
+ } else {
+ $config_vars[$key]['scope'] = 'Smarty object';
+ }
+ }
$tpl_vars = array();
foreach ($obj->tpl_vars as $key => $var) {
- $tpl_vars[$key] = clone $var;
- if ($obj instanceof Smarty_Internal_Template) {
- $tpl_vars[$key]->scope = $obj->source->type . ':' . $obj->source->name;
- } elseif ($obj instanceof Smarty_Data) {
- $tpl_vars[$key]->scope = 'Data object';
+ foreach ($var as $varkey => $varvalue) {
+ if ($varkey == 'value') {
+ $tpl_vars[$key][$varkey] = $varvalue;
+ } else {
+ if ($varkey == 'nocache') {
+ if ($varvalue == true) {
+ $tpl_vars[$key][$varkey] = $varvalue;
+ }
+ } else {
+ if ($varkey != 'scope' || $varvalue !== 0) {
+ $tpl_vars[$key]['attributes'][$varkey] = $varvalue;
+ }
+ }
+ }
+ }
+ if ($obj->_objType == 2) {
+ $tpl_vars[$key]['scope'] = $obj->source->type . ':' . $obj->source->name;
+ } elseif ($obj->_objType == 4) {
+ $tpl_vars[$key]['scope'] = $obj->dataObjectName;
} else {
- $tpl_vars[$key]->scope = 'Smarty root';
+ $tpl_vars[$key]['scope'] = 'Smarty object';
}
}
if (isset($obj->parent)) {
- $parent = self::get_debug_vars($obj->parent);
+ $parent = $this->get_debug_vars($obj->parent);
+ foreach ($parent->tpl_vars as $name => $pvar) {
+ if (isset($tpl_vars[$name]) && $tpl_vars[$name]['value'] === $pvar['value']) {
+ $tpl_vars[$name]['scope'] = $pvar['scope'];
+ }
+ }
$tpl_vars = array_merge($parent->tpl_vars, $tpl_vars);
+
+ foreach ($parent->config_vars as $name => $pvar) {
+ if (isset($config_vars[$name]) && $config_vars[$name]['value'] === $pvar['value']) {
+ $config_vars[$name]['scope'] = $pvar['scope'];
+ }
+ }
$config_vars = array_merge($parent->config_vars, $config_vars);
} else {
- foreach (Smarty::$global_tpl_vars as $name => $var) {
- if (!array_key_exists($name, $tpl_vars)) {
- $clone = clone $var;
- $clone->scope = 'Global';
- $tpl_vars[$name] = $clone;
+ foreach (Smarty::$global_tpl_vars as $key => $var) {
+ if (!array_key_exists($key, $tpl_vars)) {
+ foreach ($var as $varkey => $varvalue) {
+ if ($varkey == 'value') {
+ $tpl_vars[$key][$varkey] = $varvalue;
+ } else {
+ if ($varkey == 'nocache') {
+ if ($varvalue == true) {
+ $tpl_vars[$key][$varkey] = $varvalue;
+ }
+ } else {
+ if ($varkey != 'scope' || $varvalue !== 0) {
+ $tpl_vars[$key]['attributes'][$varkey] = $varvalue;
+ }
+ }
+ }
+ }
+ $tpl_vars[$key]['scope'] = 'Global';
}
}
}
+
return (object) array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars);
}
/**
* Return key into $template_data for template
*
- * @param object $template template object
- * @return string key into $template_data
+ * @param \Smarty_Internal_Template $template template object
+ *
+ * @return string key into $template_data
*/
- private static function get_key($template)
+ private function get_key(Smarty_Internal_Template $template)
{
static $_is_stringy = array('string' => true, 'eval' => true);
// calculate Uid if not already done
@@ -186,21 +364,67 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
$template->source->filepath;
}
$key = $template->source->uid;
- if (isset(self::$template_data[$key])) {
+ if (isset($this->template_data[$this->index][$key])) {
return $key;
} else {
if (isset($_is_stringy[$template->source->type])) {
- self::$template_data[$key]['name'] = '\''.substr($template->source->name,0,25).'...\'';
+ $this->template_data[$this->index][$key]['name'] =
+ '\'' . substr($template->source->name, 0, 25) . '...\'';
} else {
- self::$template_data[$key]['name'] = $template->source->filepath;
+ $this->template_data[$this->index][$key]['name'] = $template->source->filepath;
}
- self::$template_data[$key]['compile_time'] = 0;
- self::$template_data[$key]['render_time'] = 0;
- self::$template_data[$key]['cache_time'] = 0;
+ $this->template_data[$this->index][$key]['compile_time'] = 0;
+ $this->template_data[$this->index][$key]['render_time'] = 0;
+ $this->template_data[$this->index][$key]['cache_time'] = 0;
+ $this->template_data[$this->index][$key]['total_time'] = 0;
+
return $key;
}
}
-}
+ /**
+ * Ignore template
+ *
+ * @param \Smarty_Internal_Template $template
+ */
+ public function ignore(Smarty_Internal_Template $template)
+ {
+ // calculate Uid if not already done
+ if ($template->source->uid == '') {
+ $template->source->filepath;
+ }
+ $this->ignore_uid[$template->source->uid] = true;
+ }
-?> \ No newline at end of file
+ /**
+ * handle 'URL' debugging mode
+ *
+ * @param Smarty $smarty
+ */
+ public function debugUrl(Smarty $smarty)
+ {
+ if (isset($_SERVER['QUERY_STRING'])) {
+ $_query_string = $_SERVER['QUERY_STRING'];
+ } else {
+ $_query_string = '';
+ }
+ if (false !== strpos($_query_string, $smarty->smarty_debug_id)) {
+ if (false !== strpos($_query_string, $smarty->smarty_debug_id . '=on')) {
+ // enable debugging for this browser session
+ setcookie('SMARTY_DEBUG', true);
+ $smarty->debugging = true;
+ } elseif (false !== strpos($_query_string, $smarty->smarty_debug_id . '=off')) {
+ // disable debugging for this browser session
+ setcookie('SMARTY_DEBUG', false);
+ $smarty->debugging = false;
+ } else {
+ // enable debugging for this page
+ $smarty->debugging = true;
+ }
+ } else {
+ if (isset($_COOKIE['SMARTY_DEBUG'])) {
+ $smarty->debugging = true;
+ }
+ }
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_extension_clear.php b/include/smarty/libs/sysplugins/smarty_internal_extension_clear.php
new file mode 100644
index 000000000..00edc5abf
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_extension_clear.php
@@ -0,0 +1,126 @@
+<?php
+
+/**
+ * Smarty Extension Clear
+ *
+ * $smarty->clear() method file cache file resource
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Extension_Clear
+{
+ /**
+ * Empty cache for a specific template
+ *
+ * @param Smarty $smarty
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
+ * @return integer number of cache files deleted
+ */
+ public static function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
+ {
+ $_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null;
+ $_compile_id = isset($compile_id) ? preg_replace('![^\w]+!', '_', $compile_id) : null;
+ $_dir_sep = $smarty->use_sub_dirs ? '/' : '^';
+ $_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0;
+ $_dir = $smarty->getCacheDir();
+ if ($_dir == '/') { //We should never want to delete this!
+ return 0;
+ }
+ $_dir_length = strlen($_dir);
+ if (isset($_cache_id)) {
+ $_cache_id_parts = explode('|', $_cache_id);
+ $_cache_id_parts_count = count($_cache_id_parts);
+ if ($smarty->use_sub_dirs) {
+ foreach ($_cache_id_parts as $id_part) {
+ $_dir .= $id_part . DS;
+ }
+ }
+ }
+ if (isset($resource_name)) {
+ $_save_stat = $smarty->caching;
+ $smarty->caching = true;
+ $tpl = new $smarty->template_class($resource_name, $smarty);
+ $smarty->caching = $_save_stat;
+
+ // remove from template cache
+ $tpl->source; // have the template registered before unset()
+
+ if ($tpl->source->exists) {
+ $_resourcename_parts = basename(str_replace('^', '/', $tpl->cached->filepath));
+ } else {
+ return 0;
+ }
+ }
+ $_count = 0;
+ $_time = time();
+ if (file_exists($_dir)) {
+ $_cacheDirs = new RecursiveDirectoryIterator($_dir);
+ $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST);
+ foreach ($_cache as $_file) {
+ if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) {
+ continue;
+ }
+ // directory ?
+ if ($_file->isDir()) {
+ if (!$_cache->isDot()) {
+ // delete folder if empty
+ @rmdir($_file->getPathname());
+ }
+ } else {
+ $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string) $_file, $_dir_length)));
+ $_parts_count = count($_parts);
+ // check name
+ if (isset($resource_name)) {
+ if ($_parts[$_parts_count - 1] != $_resourcename_parts) {
+ continue;
+ }
+ }
+ // check compile id
+ if (isset($_compile_id) && (!isset($_parts[$_parts_count - 2 - $_compile_id_offset]) ||
+ $_parts[$_parts_count - 2 - $_compile_id_offset] != $_compile_id)
+ ) {
+ continue;
+ }
+ // check cache id
+ if (isset($_cache_id)) {
+ // count of cache id parts
+ $_parts_count = (isset($_compile_id)) ? $_parts_count - 2 - $_compile_id_offset :
+ $_parts_count - 1 - $_compile_id_offset;
+ if ($_parts_count < $_cache_id_parts_count) {
+ continue;
+ }
+ for ($i = 0; $i < $_cache_id_parts_count; $i ++) {
+ if ($_parts[$i] != $_cache_id_parts[$i]) {
+ continue 2;
+ }
+ }
+ }
+ // expired ?
+ if (isset($exp_time)) {
+ if ($exp_time < 0) {
+ preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_file), $match);
+ if ($_time < (@filemtime($_file) + $match[1])) {
+ continue;
+ }
+ } else {
+ if ($_time - @filemtime($_file) < $exp_time) {
+ continue;
+ }
+ }
+ }
+ $_count += @unlink((string) $_file) ? 1 : 0;
+ if (function_exists('opcache_invalidate')) {
+ opcache_invalidate((string) $_file);
+ }
+ }
+ }
+ }
+ return $_count;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_extension_handler.php b/include/smarty/libs/sysplugins/smarty_internal_extension_handler.php
new file mode 100644
index 000000000..68012d86f
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_extension_handler.php
@@ -0,0 +1,157 @@
+<?php
+
+/**
+ * Smarty Extension handler
+ *
+ * Load extensions dynamically
+ *
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ *
+ * @property Smarty_Internal_Runtime_Inheritance $_inheritance
+ * @property Smarty_Internal_Runtime_SubTemplate $_subTemplate
+ * @property Smarty_Internal_Runtime_TplFunction $_tplFunction
+ * @property Smarty_Internal_Runtime_Var $_var
+ * @property Smarty_Internal_Runtime_Config $_config
+ * @property Smarty_Internal_Runtime_Foreach $_foreach
+ * @property Smarty_Internal_Runtime_Hhvm $_hhvm
+ * @property Smarty_Internal_Runtime_WriteFile $_writeFile
+ * @property Smarty_Internal_Runtime_ValidateCompiled $_validateCompiled
+ * @property Smarty_Internal_Runtime_CodeFrame $_codeFrame
+ * @property Smarty_Internal_Runtime_FilterHandler $_filterHandler
+ * @property Smarty_Internal_Runtime_GetIncludePath $_getIncludePath
+ * @property Smarty_Internal_Runtime_UpdateScope $_updateScope
+ * @property Smarty_Internal_Runtime_IsCached $_isCached
+ * @property Smarty_Internal_Runtime_CacheModify $_cacheModify
+ * @property Smarty_Internal_Runtime_UpdateCache $_updateCache
+ * @property Smarty_Internal_Method_GetTemplateVars $getTemplateVars
+ * @property Smarty_Internal_Method_Append $append
+ * @property Smarty_Internal_Method_AppendByRef $appendByRef
+ * @property Smarty_Internal_Method_AssignGlobal $assignGlobal
+ * @property Smarty_Internal_Method_AssignByRef $assignByRef
+ * @property Smarty_Internal_Method_LoadFilter $loadFilter
+ * @property Smarty_Internal_Method_LoadPlugin $loadPlugin
+ * @property Smarty_Internal_Method_RegisterFilter $registerFilter
+ * @property Smarty_Internal_Method_RegisterObject $registerObject
+ * @property Smarty_Internal_Method_RegisterPlugin $registerPlugin
+ */
+class Smarty_Internal_Extension_Handler
+{
+
+ public $objType = null;
+
+ /**
+ * Cache for property information from generic getter/setter
+ * Preloaded with names which should not use with generic getter/setter
+ *
+ * @var array
+ */
+ private $_property_info = array('AutoloadFilters' => 0, 'DefaultModifiers' => 0, 'ConfigVars' => 0,
+ 'DebugTemplate' => 0, 'RegisteredObject' => 0, 'StreamVariable' => 0,
+ 'TemplateVars' => 0,);#
+
+ private $resolvedProperties = array();
+
+ /**
+ * Call external Method
+ *
+ * @param \Smarty_Internal_Data $data
+ * @param string $name external method names
+ * @param array $args argument array
+ *
+ * @return mixed
+ * @throws SmartyException
+ */
+ public function _callExternalMethod(Smarty_Internal_Data $data, $name, $args)
+ {
+ /* @var Smarty $data ->smarty */
+ $smarty = isset($data->smarty) ? $data->smarty : $data;
+ if (!isset($smarty->ext->$name)) {
+ $class = 'Smarty_Internal_Method_' . ucfirst($name);
+ if (preg_match('/^(set|get)([A-Z].*)$/', $name, $match)) {
+ if (!isset($this->_property_info[$prop = $match[2]])) {
+ // convert camel case to underscored name
+ $this->resolvedProperties[$prop] = $pn = strtolower(join('_',
+ preg_split('/([A-Z][^A-Z]*)/', $prop, - 1,
+ PREG_SPLIT_NO_EMPTY |
+ PREG_SPLIT_DELIM_CAPTURE)));
+ $this->_property_info[$prop] = property_exists($data, $pn) ? 1 :
+ ($data->_objType == 2 && property_exists($smarty, $pn) ? 2 : 0);
+ }
+ if ($this->_property_info[$prop]) {
+ $pn = $this->resolvedProperties[$prop];
+ if ($match[1] == 'get') {
+ return $this->_property_info[$prop] == 1 ? $data->$pn : $data->smarty->$pn;
+ } else {
+ return $this->_property_info[$prop] == 1 ? $data->$pn = $args[0] :
+ $data->smarty->$pn = $args[0];
+ }
+ } elseif (!class_exists($class)) {
+ throw new SmartyException("property '$pn' does not exist.");
+ }
+ }
+ if (class_exists($class)) {
+ $callback = array($smarty->ext->$name = new $class(), $name);
+ }
+ } else {
+ $callback = array($smarty->ext->$name, $name);
+ }
+ array_unshift($args, $data);
+ if (isset($callback) && $callback[0]->objMap | $data->_objType) {
+ return call_user_func_array($callback, $args);
+ }
+ return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), $args);
+ }
+
+ /**
+ * set extension property
+ *
+ * @param string $property_name property name
+ * @param mixed $value value
+ *
+ * @throws SmartyException
+ */
+ public function __set($property_name, $value)
+ {
+ $this->$property_name = $value;
+ }
+
+ /**
+ * get extension object
+ *
+ * @param string $property_name property name
+ *
+ * @return mixed|Smarty_Template_Cached
+ * @throws SmartyException
+ */
+ public function __get($property_name)
+ {
+ // object properties of runtime template extensions will start with '_'
+ if ($property_name[0] == '_') {
+ $class = 'Smarty_Internal_Runtime_' . ucfirst(substr($property_name, 1));
+ } else {
+ $class = 'Smarty_Internal_Method_' . ucfirst($property_name);
+ }
+ if (class_exists($class)) {
+ return $this->$property_name = new $class();
+ }
+ return $this;
+ }
+
+ /**
+ * 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)
+ {
+ return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), $args);
+ }
+
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_filter_handler.php b/include/smarty/libs/sysplugins/smarty_internal_filter_handler.php
deleted file mode 100644
index c9370e1ac..000000000
--- a/include/smarty/libs/sysplugins/smarty_internal_filter_handler.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Filter Handler
- *
- * Smarty filter handler class
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- */
-
-/**
- * Class for filter processing
- *
- * @package Smarty
- * @subpackage PluginsInternal
- */
-class Smarty_Internal_Filter_Handler {
-
- /**
- * Run filters over content
- *
- * The filters will be lazy loaded if required
- * class name format: Smarty_FilterType_FilterName
- * plugin filename format: filtertype.filtername.php
- * Smarty2 filter plugins could be used
- *
- * @param string $type the type of filter ('pre','post','output') which shall run
- * @param string $content the content which shall be processed by the filters
- * @param Smarty_Internal_Template $template template object
- * @return string the filtered content
- */
- public static function runFilter($type, $content, Smarty_Internal_Template $template)
- {
- $output = $content;
- // loop over autoload filters of specified type
- if (!empty($template->smarty->autoload_filters[$type])) {
- foreach ((array)$template->smarty->autoload_filters[$type] as $name) {
- $plugin_name = "Smarty_{$type}filter_{$name}";
- if ($template->smarty->loadPlugin($plugin_name)) {
- if (function_exists($plugin_name)) {
- // use loaded Smarty2 style plugin
- $output = $plugin_name($output, $template);
- } elseif (class_exists($plugin_name, false)) {
- // loaded class of filter plugin
- $output = call_user_func(array($plugin_name, 'execute'), $output, $template);
- }
- } else {
- // nothing found, throw exception
- throw new SmartyException("Unable to load filter {$plugin_name}");
- }
- }
- }
- // loop over registerd filters of specified type
- if (!empty($template->smarty->registered_filters[$type])) {
- foreach ($template->smarty->registered_filters[$type] as $key => $name) {
- if (is_array($template->smarty->registered_filters[$type][$key])) {
- $output = call_user_func($template->smarty->registered_filters[$type][$key], $output, $template);
- } else {
- $output = $template->smarty->registered_filters[$type][$key]($output, $template);
- }
- }
- }
- // return filtered output
- return $output;
- }
-
-}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_function_call_handler.php b/include/smarty/libs/sysplugins/smarty_internal_function_call_handler.php
deleted file mode 100644
index fa4b43b2a..000000000
--- a/include/smarty/libs/sysplugins/smarty_internal_function_call_handler.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Function Call Handler
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- */
-
-/**
- * This class does call function defined with the {function} tag
- *
- * @package Smarty
- * @subpackage PluginsInternal
- */
-class Smarty_Internal_Function_Call_Handler {
-
- /**
- * This function handles calls to template functions defined by {function}
- * It does create a PHP function at the first call
- *
- * @param string $_name template function name
- * @param Smarty_Internal_Template $_template template object
- * @param array $_params Smarty variables passed as call parameter
- * @param string $_hash nocache hash value
- * @param bool $_nocache nocache flag
- */
- public static function call($_name, Smarty_Internal_Template $_template, $_params, $_hash, $_nocache)
- {
- if ($_nocache) {
- $_function = "smarty_template_function_{$_name}_nocache";
- } else {
- $_function = "smarty_template_function_{$_hash}_{$_name}";
- }
- if (!is_callable($_function)) {
- $_code = "function {$_function}(\$_smarty_tpl,\$params) {
- \$saved_tpl_vars = \$_smarty_tpl->tpl_vars;
- foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);};
- foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";
- if ($_nocache) {
- $_code .= preg_replace(array("!<\?php echo \\'/\*%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/|/\*/%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/\\';\?>!",
- "!\\\'!"), array('', "'"), $_template->smarty->template_functions[$_name]['compiled']);
- $_template->smarty->template_functions[$_name]['called_nocache'] = true;
- } else {
- $_code .= preg_replace("/{$_template->smarty->template_functions[$_name]['nocache_hash']}/", $_template->properties['nocache_hash'], $_template->smarty->template_functions[$_name]['compiled']);
- }
- $_code .= "<?php \$_smarty_tpl->tpl_vars = \$saved_tpl_vars;}";
- eval($_code);
- }
- $_function($_template, $_params);
- }
-
-}
-
-?>
diff --git a/include/smarty/libs/sysplugins/smarty_internal_get_include_path.php b/include/smarty/libs/sysplugins/smarty_internal_get_include_path.php
deleted file mode 100644
index bafb72133..000000000
--- a/include/smarty/libs/sysplugins/smarty_internal_get_include_path.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/**
- * Smarty read include path plugin
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Monte Ohrt
- */
-
-/**
- * Smarty Internal Read Include Path Class
- *
- * @package Smarty
- * @subpackage PluginsInternal
- */
-class Smarty_Internal_Get_Include_Path {
-
- /**
- * Return full file path from PHP include_path
- *
- * @param string $filepath filepath
- * @return string|boolean full filepath or false
- */
- public static function getIncludePath($filepath)
- {
- static $_include_path = null;
-
- if (function_exists('stream_resolve_include_path')) {
- // available since PHP 5.3.2
- return stream_resolve_include_path($filepath);
- }
-
- if ($_include_path === null) {
- $_include_path = explode(PATH_SEPARATOR, get_include_path());
- }
-
- foreach ($_include_path as $_path) {
- if (file_exists($_path . DS . $filepath)) {
- return $_path . DS . $filepath;
- }
- }
-
- return false;
- }
-
-}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php b/include/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php
new file mode 100644
index 000000000..b739f0e3e
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Smarty Method AddAutoloadFilters
+ *
+ * Smarty::addAutoloadFilters() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_AddAutoloadFilters extends Smarty_Internal_Method_SetAutoloadFilters
+{
+
+ /**
+ * Add autoload filters
+ *
+ * @api Smarty::setAutoloadFilters()
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param array $filters filters to load automatically
+ * @param string $type "pre", "output", … specify the
+ * filter type to set. Defaults to
+ * none treating $filters' keys as
+ * the appropriate types
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ */
+ public function addAutoloadFilters(Smarty_Internal_TemplateBase $obj, $filters, $type = null)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if ($type !== null) {
+ $this->_checkFilterType($type);
+ if (!empty($smarty->autoload_filters[$type])) {
+ $smarty->autoload_filters[$type] = array_merge($smarty->autoload_filters[$type], (array) $filters);
+ } else {
+ $smarty->autoload_filters[$type] = (array) $filters;
+ }
+ } else {
+ foreach ((array) $filters as $type => $value) {
+ $this->_checkFilterType($type);
+ if (!empty($smarty->autoload_filters[$type])) {
+ $smarty->autoload_filters[$type] = array_merge($smarty->autoload_filters[$type], (array) $value);
+ } else {
+ $smarty->autoload_filters[$type] = (array) $value;
+ }
+ }
+ }
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php b/include/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php
new file mode 100644
index 000000000..55d2c9e71
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Smarty Method AddDefaultModifiers
+ *
+ * Smarty::addDefaultModifiers() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_AddDefaultModifiers
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Add default modifiers
+ *
+ * @api Smarty::addDefaultModifiers()
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param array|string $modifiers modifier or list of modifiers
+ * to add
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ */
+ public function addDefaultModifiers(Smarty_Internal_TemplateBase $obj, $modifiers)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if (is_array($modifiers)) {
+ $this->default_modifiers = array_merge($smarty->default_modifiers, $modifiers);
+ } else {
+ $smarty->default_modifiers[] = $modifiers;
+ }
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_append.php b/include/smarty/libs/sysplugins/smarty_internal_method_append.php
new file mode 100644
index 000000000..43df8803f
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_append.php
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * Smarty Method Append
+ *
+ * Smarty::append() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_Append
+{
+ /**
+ * Valid for all objects
+ *
+ * @var int
+ */
+ public $objMap = 7;
+
+ /**
+ * appends values to template variables
+ *
+ * @api Smarty::append()
+ * @link http://www.smarty.net/docs/en/api.append.tpl
+ *
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
+ * @param array|string $tpl_var the template variable name(s)
+ * @param mixed $value the value to append
+ * @param bool $merge flag if array elements shall be merged
+ * @param bool $nocache if true any output of this variable will
+ * be not cached
+ *
+ * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
+ */
+ public function append(Smarty_Internal_Data $data, $tpl_var, $value = null, $merge = false, $nocache = false)
+ {
+ if (is_array($tpl_var)) {
+ // $tpl_var is an array, ignore $value
+ foreach ($tpl_var as $_key => $_val) {
+ if ($_key != '') {
+ $this->append($data, $_key, $_val, $merge, $nocache);
+ }
+ }
+ } else {
+ if ($tpl_var != '' && isset($value)) {
+ if (!isset($data->tpl_vars[$tpl_var])) {
+ $tpl_var_inst = $data->ext->getTemplateVars->_getVariable($data, $tpl_var, null, true, false);
+ if ($tpl_var_inst instanceof Smarty_Undefined_Variable) {
+ $data->tpl_vars[$tpl_var] = new Smarty_Variable(null, $nocache);
+ } else {
+ $data->tpl_vars[$tpl_var] = clone $tpl_var_inst;
+ }
+ }
+ if (!(is_array($data->tpl_vars[$tpl_var]->value) ||
+ $data->tpl_vars[$tpl_var]->value instanceof ArrayAccess)
+ ) {
+ settype($data->tpl_vars[$tpl_var]->value, 'array');
+ }
+ if ($merge && is_array($value)) {
+ foreach ($value as $_mkey => $_mval) {
+ $data->tpl_vars[$tpl_var]->value[$_mkey] = $_mval;
+ }
+ } else {
+ $data->tpl_vars[$tpl_var]->value[] = $value;
+ }
+ }
+ if ($data->_objType == 2 && $data->scope) {
+ $data->ext->_updateScope->updateScope($data, $tpl_var);
+ }
+ }
+ return $data;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php b/include/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php
new file mode 100644
index 000000000..124bb803a
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * Smarty Method AppendByRef
+ *
+ * Smarty::appendByRef() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_AppendByRef
+{
+
+ /**
+ * appends values to template variables by reference
+ *
+ * @api Smarty::appendByRef()
+ * @link http://www.smarty.net/docs/en/api.append.by.ref.tpl
+ *
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
+ * @param string $tpl_var the template variable name
+ * @param mixed &$value the referenced value to append
+ * @param bool $merge flag if array elements shall be merged
+ *
+ * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
+ */
+ public static function appendByRef(Smarty_Internal_Data $data, $tpl_var, &$value, $merge = false)
+ {
+ if ($tpl_var != '' && isset($value)) {
+ if (!isset($data->tpl_vars[$tpl_var])) {
+ $data->tpl_vars[$tpl_var] = new Smarty_Variable();
+ }
+ if (!is_array($data->tpl_vars[$tpl_var]->value)) {
+ settype($data->tpl_vars[$tpl_var]->value, 'array');
+ }
+ if ($merge && is_array($value)) {
+ foreach ($value as $_key => $_val) {
+ $data->tpl_vars[$tpl_var]->value[$_key] = &$value[$_key];
+ }
+ } else {
+ $data->tpl_vars[$tpl_var]->value[] = &$value;
+ }
+ if ($data->_objType == 2 && $data->scope) {
+ $data->ext->_updateScope->updateScope($data, $tpl_var);
+ }
+ }
+ return $data;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php b/include/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php
new file mode 100644
index 000000000..a97125e30
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * Smarty Method AssignByRef
+ *
+ * Smarty::assignByRef() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_AssignByRef
+{
+
+ /**
+ * assigns values to template variables by reference
+ *
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
+ * @param string $tpl_var the template variable name
+ * @param $value
+ * @param boolean $nocache if true any output of this variable will be not cached
+ *
+ * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
+ */
+ public function assignByRef(Smarty_Internal_Data $data, $tpl_var, &$value, $nocache)
+ {
+ if ($tpl_var != '') {
+ $data->tpl_vars[$tpl_var] = new Smarty_Variable(null, $nocache);
+ $data->tpl_vars[$tpl_var]->value = &$value;
+ if ($data->_objType == 2 && $data->scope) {
+ $data->ext->_updateScope->updateScope($data, $tpl_var);
+ }
+ }
+ return $data;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php b/include/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php
new file mode 100644
index 000000000..23b13b3a2
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Smarty Method AssignGlobal
+ *
+ * Smarty::assignGlobal() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_AssignGlobal
+{
+ /**
+ * Valid for all objects
+ *
+ * @var int
+ */
+ public $objMap = 7;
+
+ /**
+ * assigns a global Smarty variable
+ *
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
+ * @param string $varName the global variable name
+ * @param mixed $value the value to assign
+ * @param boolean $nocache if true any output of this variable will be not cached
+ *
+ * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
+ */
+ public function assignGlobal(Smarty_Internal_Data $data, $varName, $value = null, $nocache = false)
+ {
+ if ($varName != '') {
+ Smarty::$global_tpl_vars[$varName] = new Smarty_Variable($value, $nocache);
+ $ptr = $data;
+ while ($ptr->_objType == 2) {
+ $ptr->tpl_vars[$varName] = clone Smarty::$global_tpl_vars[$varName];
+ $ptr = $ptr->parent;
+ }
+ }
+ return $data;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php b/include/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php
new file mode 100644
index 000000000..1e5fec4bd
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * Smarty Method ClearAllAssign
+ *
+ * Smarty::clearAllAssign() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_ClearAllAssign
+{
+ /**
+ * Valid for all objects
+ *
+ * @var int
+ */
+ public $objMap = 7;
+
+ /**
+ * clear all the assigned template variables.
+ *
+ * @api Smarty::clearAllAssign()
+ * @link http://www.smarty.net/docs/en/api.clear.all.assign.tpl
+ *
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
+ *
+ * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
+ */
+ public function clearAllAssign(Smarty_Internal_Data $data)
+ {
+ $data->tpl_vars = array();
+
+ return $data;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php b/include/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php
new file mode 100644
index 000000000..6ae0af15f
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * Smarty Method ClearAllCache
+ *
+ * Smarty::clearAllCache() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_ClearAllCache
+{
+ /**
+ * Valid for Smarty object
+ *
+ * @var int
+ */
+ public $objMap = 1;
+
+ /**
+ * Empty cache folder
+ *
+ * @api Smarty::clearAllCache()
+ * @link http://www.smarty.net/docs/en/api.clear.all.cache.tpl
+ *
+ * @param \Smarty $smarty
+ * @param integer $exp_time expiration time
+ * @param string $type resource type
+ *
+ * @return integer number of cache files deleted
+ */
+ public function clearAllCache(Smarty $smarty, $exp_time = null, $type = null)
+ {
+ // load cache resource and call clearAll
+ $_cache_resource = Smarty_CacheResource::load($smarty, $type);
+ $_cache_resource->invalidLoadedCache($smarty);
+ return $_cache_resource->clearAll($smarty, $exp_time);
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_clearassign.php b/include/smarty/libs/sysplugins/smarty_internal_method_clearassign.php
new file mode 100644
index 000000000..3a7bd1e47
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_clearassign.php
@@ -0,0 +1,44 @@
+<?php
+
+/**
+ * Smarty Method ClearAssign
+ *
+ * Smarty::clearAssign() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_ClearAssign
+{
+ /**
+ * Valid for all objects
+ *
+ * @var int
+ */
+ public $objMap = 7;
+
+ /**
+ * clear the given assigned template variable(s).
+ *
+ * @api Smarty::clearAssign()
+ * @link http://www.smarty.net/docs/en/api.clear.assign.tpl
+ *
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
+ * @param string|array $tpl_var the template variable(s) to clear
+ *
+ * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
+ */
+ public function clearAssign(Smarty_Internal_Data $data, $tpl_var)
+ {
+ if (is_array($tpl_var)) {
+ foreach ($tpl_var as $curr_var) {
+ unset($data->tpl_vars[$curr_var]);
+ }
+ } else {
+ unset($data->tpl_vars[$tpl_var]);
+ }
+
+ return $data;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_clearcache.php b/include/smarty/libs/sysplugins/smarty_internal_method_clearcache.php
new file mode 100644
index 000000000..063c57cde
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_clearcache.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Smarty Method ClearCache
+ *
+ * Smarty::clearCache() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_ClearCache
+{
+ /**
+ * Valid for Smarty object
+ *
+ * @var int
+ */
+ public $objMap = 1;
+
+ /**
+ * Empty cache for a specific template
+ *
+ * @api Smarty::clearCache()
+ * @link http://www.smarty.net/docs/en/api.clear.cache.tpl
+ *
+ * @param \Smarty $smarty
+ * @param string $template_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time
+ * @param string $type resource type
+ *
+ * @return integer number of cache files deleted
+ */
+ public function clearCache(Smarty $smarty, $template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null)
+ {
+ // load cache resource and call clear
+ $_cache_resource = Smarty_CacheResource::load($smarty, $type);
+ $_cache_resource->invalidLoadedCache($smarty);
+ return $_cache_resource->clear($smarty, $template_name, $cache_id, $compile_id, $exp_time);
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php b/include/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php
new file mode 100644
index 000000000..cce8553f5
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ * Smarty Method ClearCompiledTemplate
+ *
+ * Smarty::clearCompiledTemplate() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_ClearCompiledTemplate
+{
+ /**
+ * Valid for Smarty object
+ *
+ * @var int
+ */
+ public $objMap = 1;
+
+ /**
+ * Delete compiled template file
+ *
+ * @api Smarty::clearCompiledTemplate()
+ * @link http://www.smarty.net/docs/en/api.clear.compiled.template.tpl
+ *
+ * @param \Smarty $smarty
+ * @param string $resource_name template name
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time
+ *
+ * @return integer number of template files deleted
+ */
+ public function clearCompiledTemplate(Smarty $smarty, $resource_name = null, $compile_id = null, $exp_time = null)
+ {
+
+ $_compile_dir = $smarty->getCompileDir();
+ if ($_compile_dir == '/') { //We should never want to delete this!
+ return 0;
+ }
+ $_compile_id = isset($compile_id) ? preg_replace('![^\w]+!', '_', $compile_id) : null;
+ $_dir_sep = $smarty->use_sub_dirs ? DS : '^';
+ if (isset($resource_name)) {
+ $_save_stat = $smarty->caching;
+ $smarty->caching = false;
+ /* @var Smarty_Internal_Template $tpl */
+ $tpl = new $smarty->template_class($resource_name, $smarty);
+ $smarty->caching = $_save_stat;
+ if ($tpl->source->exists) {
+ // remove from compileds cache
+ $tpl->source->compileds = array();
+ $_resource_part_1 = basename(str_replace('^', DS, $tpl->compiled->filepath));
+ $_resource_part_1_length = strlen($_resource_part_1);
+ } else {
+ return 0;
+ }
+ $_resource_part_2 = str_replace('.php', '.cache.php', $_resource_part_1);
+ $_resource_part_2_length = strlen($_resource_part_2);
+ }
+ $_dir = $_compile_dir;
+ if ($smarty->use_sub_dirs && isset($_compile_id)) {
+ $_dir .= $_compile_id . $_dir_sep;
+ }
+ if (isset($_compile_id)) {
+ $_compile_id_part = $_compile_dir . $_compile_id . $_dir_sep;
+ $_compile_id_part_length = strlen($_compile_id_part);
+ }
+ $_count = 0;
+ try {
+ $_compileDirs = new RecursiveDirectoryIterator($_dir);
+ // NOTE: UnexpectedValueException thrown for PHP >= 5.3
+ }
+ catch (Exception $e) {
+ return 0;
+ }
+ $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST);
+ foreach ($_compile as $_file) {
+ if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) {
+ continue;
+ }
+
+ $_filepath = (string) $_file;
+
+ if ($_file->isDir()) {
+ if (!$_compile->isDot()) {
+ // delete folder if empty
+ @rmdir($_file->getPathname());
+ }
+ } else {
+ $unlink = false;
+ if ((!isset($_compile_id) || (isset($_filepath[$_compile_id_part_length]) &&
+ $a = !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length))) &&
+ (!isset($resource_name) || (isset($_filepath[$_resource_part_1_length]) &&
+ substr_compare($_filepath, $_resource_part_1, - $_resource_part_1_length,
+ $_resource_part_1_length) == 0) ||
+ (isset($_filepath[$_resource_part_2_length]) &&
+ substr_compare($_filepath, $_resource_part_2, - $_resource_part_2_length,
+ $_resource_part_2_length) == 0))
+ ) {
+ if (isset($exp_time)) {
+ if (time() - @filemtime($_filepath) >= $exp_time) {
+ $unlink = true;
+ }
+ } else {
+ $unlink = true;
+ }
+ }
+
+ if ($unlink && @unlink($_filepath)) {
+ $_count ++;
+ if (function_exists('opcache_invalidate')) {
+ opcache_invalidate($_filepath);
+ }
+ }
+ }
+ }
+ // clear template objects cache
+ $smarty->_cache['isCached'] = array();
+ if (isset($smarty->ext->_subtemplate)) {
+ $smarty->ext->_subtemplate->tplObjects = array();
+ }
+ return $_count;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php b/include/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php
new file mode 100644
index 000000000..9c6167f4d
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * Smarty Method ClearConfig
+ *
+ * Smarty::clearConfig() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_ClearConfig
+{
+ /**
+ * Valid for all objects
+ *
+ * @var int
+ */
+ public $objMap = 7;
+
+ /**
+ * clear a single or all config variables
+ *
+ * @api Smarty::clearConfig()
+ * @link http://www.smarty.net/docs/en/api.clear.config.tpl
+ *
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
+ * @param string|null $name variable name or null
+ *
+ * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
+ */
+ public function clearConfig(Smarty_Internal_Data $data, $name = null)
+ {
+ if (isset($name)) {
+ unset($data->config_vars[$name]);
+ } else {
+ $data->config_vars = array();
+ }
+ return $data;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php b/include/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php
new file mode 100644
index 000000000..4d6be65c4
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * Smarty Method CompileAllConfig
+ *
+ * Smarty::compileAllConfig() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_CompileAllConfig extends Smarty_Internal_Method_CompileAllTemplates
+{
+
+ /**
+ * Compile all config files
+ *
+ * @api Smarty::compileAllConfig()
+ *
+ * @param \Smarty $smarty
+ * @param string $extension file extension
+ * @param bool $force_compile force all to recompile
+ * @param int $time_limit
+ * @param int $max_errors
+ *
+ * @return integer number of template files recompiled
+ */
+ public function compileAllConfig(Smarty $smarty, $extension = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null)
+ {
+ return $this->compileAll($smarty, $extension, $force_compile, $time_limit, $max_errors, true);
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php b/include/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php
new file mode 100644
index 000000000..685fc0c0d
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php
@@ -0,0 +1,111 @@
+<?php
+
+/**
+ * Smarty Method CompileAllTemplates
+ *
+ * Smarty::compileAllTemplates() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_CompileAllTemplates
+{
+ /**
+ * Valid for Smarty object
+ *
+ * @var int
+ */
+ public $objMap = 1;
+
+ /**
+ * Compile all template files
+ *
+ * @api Smarty::compileAllTemplates()
+ *
+ * @param \Smarty $smarty
+ * @param string $extension file extension
+ * @param bool $force_compile force all to recompile
+ * @param int $time_limit
+ * @param int $max_errors
+ *
+ * @return integer number of template files recompiled
+ */
+ public function compileAllTemplates(Smarty $smarty, $extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
+ {
+ return $this->compileAll($smarty, $extension, $force_compile, $time_limit, $max_errors);
+ }
+
+ /**
+ * Compile all template or config files
+ *
+ * @param \Smarty $smarty
+ * @param string $extension template file name extension
+ * @param bool $force_compile force all to recompile
+ * @param int $time_limit set maximum execution time
+ * @param int $max_errors set maximum allowed errors
+ * @param bool $isConfig flag true if called for config files
+ *
+ * @return int number of template files compiled
+ */
+ protected function compileAll(Smarty $smarty, $extension, $force_compile, $time_limit, $max_errors, $isConfig = false)
+ {
+ // switch off time limit
+ if (function_exists('set_time_limit')) {
+ @set_time_limit($time_limit);
+ }
+ $_count = 0;
+ $_error_count = 0;
+ $sourceDir = $isConfig ? $smarty->getConfigDir() : $smarty->getTemplateDir();
+ // loop over array of source directories
+ foreach ($sourceDir as $_dir) {
+ $_dir_1 = new RecursiveDirectoryIterator($_dir);
+ $_dir_2 = new RecursiveIteratorIterator($_dir_1);
+ foreach ($_dir_2 as $_fileinfo) {
+ $_file = $_fileinfo->getFilename();
+ if (substr(basename($_fileinfo->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) {
+ continue;
+ }
+ if (!substr_compare($_file, $extension, - strlen($extension)) == 0) {
+ continue;
+ }
+ if ($_fileinfo->getPath() == !substr($_dir, 0, - 1)) {
+ $_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file;
+ }
+ echo "\n<br>", $_dir, '---', $_file;
+ flush();
+ $_start_time = microtime(true);
+ $_smarty = clone $smarty;
+ $_smarty->force_compile = $force_compile;
+ try {
+ /* @var Smarty_Internal_Template $_tpl */
+ $_tpl = new $smarty->template_class($_file, $_smarty);
+ $_tpl->caching = Smarty::CACHING_OFF;
+ $_tpl->source = $isConfig ? Smarty_Template_Config::load($_tpl) : Smarty_Template_Source::load($_tpl);
+ if ($_tpl->mustCompile()) {
+ $_tpl->compileTemplateSource();
+ $_count ++;
+ echo ' compiled in ', microtime(true) - $_start_time, ' seconds';
+ flush();
+ } else {
+ echo ' is up to date';
+ flush();
+ }
+ }
+ catch (Exception $e) {
+ echo "\n<br> ------>Error: ", $e->getMessage(), "<br><br>\n";
+ $_error_count ++;
+ }
+ // free memory
+ unset($_tpl);
+ $_smarty->_cache['template_objects'] = array();
+ if ($max_errors !== null && $_error_count == $max_errors) {
+ echo "\n<br><br>too many errors\n";
+ exit();
+ }
+ }
+ }
+ echo "\n<br>";
+ return $_count;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_configload.php b/include/smarty/libs/sysplugins/smarty_internal_method_configload.php
new file mode 100644
index 000000000..7b99e35c6
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_configload.php
@@ -0,0 +1,182 @@
+<?php
+
+/**
+ * Smarty Method ConfigLoad
+ *
+ * Smarty::configLoad() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_ConfigLoad
+{
+ /**
+ * Valid for all objects
+ *
+ * @var int
+ */
+ public $objMap = 7;
+
+ /**
+ * load a config file, optionally load just selected sections
+ *
+ * @api Smarty::configLoad()
+ * @link http://www.smarty.net/docs/en/api.config.load.tpl
+ *
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
+ * @param string $config_file filename
+ * @param mixed $sections array of section names, single
+ * section or null
+ *
+ * @return \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template
+ * @throws \SmartyException
+ */
+ public function configLoad(Smarty_Internal_Data $data, $config_file, $sections = null)
+ {
+ $this->_loadConfigFile($data, $config_file, $sections, 0);
+ return $data;
+ }
+
+ /**
+ * load a config file, optionally load just selected sections
+ *
+ * @api Smarty::configLoad()
+ * @link http://www.smarty.net/docs/en/api.config.load.tpl
+ *
+ * @param \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template $data
+ * @param string $config_file filename
+ * @param mixed $sections array of section names, single
+ * section or null
+ * @param int $scope scope into which config variables
+ * shall be loaded
+ *
+ * @return \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template
+ * @throws \SmartyException
+ */
+ public function _loadConfigFile(Smarty_Internal_Data $data, $config_file, $sections = null, $scope = 0)
+ {
+ /* @var \Smarty $smarty */
+ $smarty = isset($data->smarty) ? $data->smarty : $data;
+ /* @var \Smarty_Internal_Template $confObj */
+ $confObj = new Smarty_Internal_Template($config_file, $smarty, $data);
+ $confObj->caching = Smarty::CACHING_OFF;
+ $confObj->source = Smarty_Template_Config::load($confObj);
+ $confObj->source->config_sections = $sections;
+ $confObj->source->scope = $scope;
+ $confObj->compiled = Smarty_Template_Compiled::load($confObj);
+ $confObj->compiled->render($confObj);
+ if ($data->_objType == 2) {
+ $data->compiled->file_dependency[$confObj->source->uid] =
+ array($confObj->source->filepath, $confObj->source->getTimeStamp(), $confObj->source->type);
+ }
+ }
+
+ /**
+ * load config variables into template object
+ *
+ * @param \Smarty_Internal_Template $tpl
+ * @param array $_config_vars
+ *
+ */
+ public function _loadConfigVars(Smarty_Internal_Template $tpl, $_config_vars)
+ {
+ $this->_assignConfigVars($tpl->parent, $tpl, $_config_vars);
+ $scope = $tpl->source->scope;
+ if (!$scope && !$tpl->scope) {
+ return;
+ }
+ foreach (array($scope, $tpl->scope) as $s) {
+ $s = ($bubble_up = $s >= Smarty::SCOPE_BUBBLE_UP) ? $s - Smarty::SCOPE_BUBBLE_UP : $s;
+ if ($bubble_up && $s) {
+ $ptr = $tpl->parent->parent;
+ if (isset($ptr)) {
+ $this->_assignConfigVars($ptr, $tpl, $_config_vars);
+ $ptr = $ptr->parent;
+ }
+ if ($s == Smarty::SCOPE_PARENT) {
+ continue;
+ }
+ while (isset($ptr) && $ptr->_objType == 2) {
+ $this->_assignConfigVars($ptr, $tpl, $_config_vars);
+ $ptr = $ptr->parent;
+ }
+ if ($s == Smarty::SCOPE_TPL_ROOT) {
+ continue;
+ } elseif ($s == Smarty::SCOPE_SMARTY) {
+ $this->_assignConfigVars($tpl->smarty, $tpl, $_config_vars);
+ } elseif ($s == Smarty::SCOPE_GLOBAL) {
+ $this->_assignConfigVars($tpl->smarty, $tpl, $_config_vars);
+ } elseif ($s == Smarty::SCOPE_ROOT) {
+ while (isset($ptr->parent)) {
+ $ptr = $ptr->parent;
+ }
+ $this->_assignConfigVars($ptr, $tpl, $_config_vars);
+ }
+ }
+ }
+ }
+
+ /**
+ * Assign all config variables in given scope
+ *
+ * @param \Smarty_Internal_Data $scope_ptr
+ * @param \Smarty_Internal_Template $tpl
+ * @param array $_config_vars
+ */
+ public function _assignConfigVars(Smarty_Internal_Data $scope_ptr, Smarty_Internal_Template $tpl, $_config_vars)
+ {
+ // copy global config vars
+ foreach ($_config_vars['vars'] as $variable => $value) {
+ if ($tpl->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) {
+ $scope_ptr->config_vars[$variable] = $value;
+ } else {
+ $scope_ptr->config_vars[$variable] =
+ array_merge((array) $scope_ptr->config_vars[$variable], (array) $value);
+ }
+ }
+ // scan sections
+ $sections = $tpl->source->config_sections;
+ if (!empty($sections)) {
+ foreach ((array) $sections as $tpl_section) {
+ if (isset($_config_vars['sections'][$tpl_section])) {
+ foreach ($_config_vars['sections'][$tpl_section]['vars'] as $variable => $value) {
+ if ($tpl->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) {
+ $scope_ptr->config_vars[$variable] = $value;
+ } else {
+ $scope_ptr->config_vars[$variable] =
+ array_merge((array) $scope_ptr->config_vars[$variable], (array) $value);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * gets a config variable value
+ *
+ * @param \Smarty_Internal_Template $tpl template object
+ * @param string $varName the name of the config variable
+ * @param bool $errorEnable
+ *
+ * @return mixed the value of the config variable
+ */
+ public function _getConfigVariable(Smarty_Internal_Template $tpl, $varName, $errorEnable = true)
+ {
+ $_ptr = $tpl;
+ while ($_ptr !== null) {
+ if (isset($_ptr->config_vars[$varName])) {
+ // found it, return it
+ return $_ptr->config_vars[$varName];
+ }
+ // not found, try at parent
+ $_ptr = $_ptr->parent;
+ }
+ if ($tpl->smarty->error_unassigned && $errorEnable) {
+ // force a notice
+ $x = $$varName;
+ }
+ return null;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_createdata.php b/include/smarty/libs/sysplugins/smarty_internal_method_createdata.php
new file mode 100644
index 000000000..600bc777c
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_createdata.php
@@ -0,0 +1,44 @@
+<?php
+
+/**
+ * Smarty Method CreateData
+ *
+ * Smarty::createData() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_CreateData
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * creates a data object
+ *
+ * @api Smarty::createData()
+ * @link http://www.smarty.net/docs/en/api.create.data.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param \Smarty_Internal_Template|\Smarty_Internal_Data|\Smarty_Data|\Smarty $parent next higher level of Smarty
+ * variables
+ * @param string $name optional data block name
+ *
+ * @returns Smarty_Data data object
+ */
+ public function createData(Smarty_Internal_TemplateBase $obj, Smarty_Internal_Data $parent = null, $name = null)
+ {
+ /* @var Smarty $smarty */
+ $smarty = isset($this->smarty) ? $this->smarty : $obj;
+ $dataObj = new Smarty_Data($parent, $smarty, $name);
+ if ($smarty->debugging) {
+ Smarty_Internal_Debug::register_data($dataObj);
+ }
+ return $dataObj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php b/include/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php
new file mode 100644
index 000000000..e1a7801f7
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * Smarty Method GetAutoloadFilters
+ *
+ * Smarty::getAutoloadFilters() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_GetAutoloadFilters extends Smarty_Internal_Method_SetAutoloadFilters
+{
+
+ /**
+ * Get autoload filters
+ *
+ * @api Smarty::getAutoloadFilters()
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $type type of filter to get auto loads
+ * for. Defaults to all autoload
+ * filters
+ *
+ * @return array array( 'type1' => array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type
+ * was specified
+ */
+ public function getAutoloadFilters(Smarty_Internal_TemplateBase $obj, $type = null)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if ($type !== null) {
+ $this->_checkFilterType($type);
+ return isset($smarty->autoload_filters[$type]) ? $smarty->autoload_filters[$type] : array();
+ }
+ return $smarty->autoload_filters;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php b/include/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php
new file mode 100644
index 000000000..b15672168
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Smarty Method GetConfigVars
+ *
+ * Smarty::getConfigVars() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_GetConfigVars
+{
+ /**
+ * Valid for all objects
+ *
+ * @var int
+ */
+ public $objMap = 7;
+
+ /**
+ * Returns a single or all config variables
+ *
+ * @api Smarty::getConfigVars()
+ * @link http://www.smarty.net/docs/en/api.get.config.vars.tpl
+ *
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
+ * @param string $varname variable name or null
+ * @param bool $search_parents include parent templates?
+ *
+ * @return mixed variable value or or array of variables
+ */
+ public function getConfigVars(Smarty_Internal_Data $data, $varname = null, $search_parents = true)
+ {
+ $_ptr = $data;
+ $var_array = array();
+ while ($_ptr !== null) {
+ if (isset($varname)) {
+ if (isset($_ptr->config_vars[$varname])) {
+ return $_ptr->config_vars[$varname];
+ }
+ } else {
+ $var_array = array_merge($_ptr->config_vars, $var_array);
+ }
+ // not found, try at parent
+ if ($search_parents) {
+ $_ptr = $_ptr->parent;
+ } else {
+ $_ptr = null;
+ }
+ }
+ if (isset($varname)) {
+ return '';
+ } else {
+ return $var_array;
+ }
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php b/include/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php
new file mode 100644
index 000000000..3c3432ce1
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * Smarty Method GetDebugTemplate
+ *
+ * Smarty::getDebugTemplate() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_GetDebugTemplate
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * return name of debugging template
+ *
+ * @api Smarty::getDebugTemplate()
+
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ *
+ * @return string
+ */
+ public function getDebugTemplate(Smarty_Internal_TemplateBase $obj)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ return $smarty->debug_tpl;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php b/include/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php
new file mode 100644
index 000000000..32e0cc413
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * Smarty Method GetDefaultModifiers
+ *
+ * Smarty::getDefaultModifiers() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_GetDefaultModifiers
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Get default modifiers
+ *
+ * @api Smarty::getDefaultModifiers()
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ *
+ * @return array list of default modifiers
+ */
+ public function getDefaultModifiers(Smarty_Internal_TemplateBase $obj)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ return $smarty->default_modifiers;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php b/include/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php
new file mode 100644
index 000000000..be0c0dba2
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php
@@ -0,0 +1,44 @@
+<?php
+
+/**
+ * Smarty Method GetRegisteredObject
+ *
+ * Smarty::getRegisteredObject() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_GetRegisteredObject
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * return a reference to a registered object
+ *
+ * @api Smarty::getRegisteredObject()
+ * @link http://www.smarty.net/docs/en/api.get.registered.object.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $object_name object name
+ *
+ * @return object
+ * @throws \SmartyException if no such object is found
+ */
+ public function getRegisteredObject(Smarty_Internal_TemplateBase $obj, $object_name)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if (!isset($smarty->registered_objects[$object_name])) {
+ throw new SmartyException("'$object_name' is not a registered object");
+ }
+ if (!is_object($smarty->registered_objects[$object_name][0])) {
+ throw new SmartyException("registered '$object_name' is not an object");
+ }
+ return $smarty->registered_objects[$object_name][0];
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php b/include/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php
new file mode 100644
index 000000000..b922fd088
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Smarty Method GetStreamVariable
+ *
+ * Smarty::getStreamVariable() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_GetStreamVariable
+{
+ /**
+ * Valid for all objects
+ *
+ * @var int
+ */
+ public $objMap = 7;
+
+ /**
+ * gets a stream variable
+ *
+ * @api Smarty::getStreamVariable()
+ *
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
+ * @param string $variable the stream of the variable
+ *
+ * @return mixed
+ * @throws \SmartyException
+ */
+ public function getStreamVariable(Smarty_Internal_Data $data, $variable)
+ {
+ $_result = '';
+ $fp = fopen($variable, 'r+');
+ if ($fp) {
+ while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
+ $_result .= $current_line;
+ }
+ fclose($fp);
+
+ return $_result;
+ }
+ $smarty = isset($data->smarty) ? $data->smarty : $data;
+ if ($smarty->error_unassigned) {
+ throw new SmartyException('Undefined stream variable "' . $variable . '"');
+ } else {
+ return null;
+ }
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_gettags.php b/include/smarty/libs/sysplugins/smarty_internal_method_gettags.php
new file mode 100644
index 000000000..dd9e8d1ca
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_gettags.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Smarty Method GetTags
+ *
+ * Smarty::getTags() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_GetTags
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Return array of tag/attributes of all tags used by an template
+ *
+ * @api Smarty::getTags()
+ * @link http://www.smarty.net/docs/en/api.get.tags.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param null|string|Smarty_Internal_Template $template
+ *
+ * @return array of tag/attributes
+ * @throws \SmartyException
+ */
+ public function getTags(Smarty_Internal_TemplateBase $obj, $template = null)
+ {
+ /* @var Smarty $smarty */
+ $smarty = isset($this->smarty) ? $this->smarty : $obj;
+ if ($obj->_objType == 2 && !isset($template)) {
+ $tpl = clone $obj;
+ } elseif (isset($template) && $template->_objType == 2) {
+ $tpl = clone $template;
+ } elseif (isset($template) && is_string($template)) {
+ /* @var Smarty_Internal_Template $tpl */
+ $tpl = new $smarty->template_class($template, $smarty);
+ // checks if template exists
+ if (!$tpl->source->exists) {
+ throw new SmartyException("Unable to load template {$tpl->source->type} '{$tpl->source->name}'");
+ }
+ }
+ if (isset($tpl)) {
+ $tpl->smarty = clone $tpl->smarty;
+ $tpl->smarty->_cache['get_used_tags'] = true;
+ $tpl->_cache['used_tags'] = array();
+ $tpl->smarty->merge_compiled_includes = false;
+ $tpl->smarty->disableSecurity();
+ $tpl->caching = false;
+ $tpl->loadCompiler();
+ $tpl->compiler->compileTemplate($tpl);
+ return $tpl->_cache['used_tags'];
+ }
+ throw new SmartyException("Missing template specification");
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php b/include/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php
new file mode 100644
index 000000000..235bece46
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php
@@ -0,0 +1,114 @@
+<?php
+
+/**
+ * Smarty Method GetTemplateVars
+ *
+ * Smarty::getTemplateVars() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_GetTemplateVars
+{
+ /**
+ * Valid for all objects
+ *
+ * @var int
+ */
+ public $objMap = 7;
+
+ /**
+ * Returns a single or all template variables
+ *
+ * @api Smarty::getTemplateVars()
+ * @link http://www.smarty.net/docs/en/api.get.template.vars.tpl
+ *
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
+ * @param string $varName variable name or null
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object
+ * @param bool $searchParents include parent templates?
+ *
+ * @return mixed variable value or or array of variables
+ */
+ public function getTemplateVars(Smarty_Internal_Data $data, $varName = null, Smarty_Internal_Data $_ptr = null, $searchParents = true)
+ {
+ if (isset($varName)) {
+ $_var = $this->_getVariable($data, $varName, $_ptr, $searchParents, false);
+ if (is_object($_var)) {
+ return $_var->value;
+ } else {
+ return null;
+ }
+ } else {
+ $_result = array();
+ if ($_ptr === null) {
+ $_ptr = $data;
+ }
+ while ($_ptr !== null) {
+ foreach ($_ptr->tpl_vars AS $key => $var) {
+ if (!array_key_exists($key, $_result)) {
+ $_result[$key] = $var->value;
+ }
+ }
+ // not found, try at parent
+ if ($searchParents) {
+ $_ptr = $_ptr->parent;
+ } else {
+ $_ptr = null;
+ }
+ }
+ if ($searchParents && isset(Smarty::$global_tpl_vars)) {
+ foreach (Smarty::$global_tpl_vars AS $key => $var) {
+ if (!array_key_exists($key, $_result)) {
+ $_result[$key] = $var->value;
+ }
+ }
+ }
+ return $_result;
+ }
+ }
+
+ /**
+ * gets the object of a Smarty variable
+ *
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
+ * @param string $varName the name of the Smarty variable
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object
+ * @param bool $searchParents search also in parent data
+ * @param bool $errorEnable
+ *
+ * @return \Smarty_Variable
+ */
+ public function _getVariable(Smarty_Internal_Data $data, $varName, Smarty_Internal_Data $_ptr = null, $searchParents = true, $errorEnable = true)
+ {
+ if ($_ptr === null) {
+ $_ptr = $data;
+ }
+ while ($_ptr !== null) {
+ if (isset($_ptr->tpl_vars[$varName])) {
+ // found it, return it
+ return $_ptr->tpl_vars[$varName];
+ }
+ // not found, try at parent
+ if ($searchParents) {
+ $_ptr = $_ptr->parent;
+ } else {
+ $_ptr = null;
+ }
+ }
+ if (isset(Smarty::$global_tpl_vars[$varName])) {
+ // found it, return it
+ return Smarty::$global_tpl_vars[$varName];
+ }
+ /* @var \Smarty $smarty */
+ $smarty = isset($data->smarty) ? $data->smarty : $data;
+ if ($smarty->error_unassigned && $errorEnable) {
+ // force a notice
+ $x = $$varName;
+ }
+
+ return new Smarty_Undefined_Variable;
+ }
+
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php b/include/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php
new file mode 100644
index 000000000..7fb11179f
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * Smarty Method LoadFilter
+ *
+ * Smarty::loadFilter() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_LoadFilter
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Valid filter types
+ *
+ * @var array
+ */
+ private $filterTypes = array('pre' => true, 'post' => true, 'output' => true, 'variable' => true);
+
+ /**
+ * load a filter of specified type and name
+ *
+ * @api Smarty::loadFilter()
+ *
+ * @link http://www.smarty.net/docs/en/api.load.filter.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $type filter type
+ * @param string $name filter name
+ *
+ * @return bool
+ * @throws SmartyException if filter could not be loaded
+ */
+ public function loadFilter(Smarty_Internal_TemplateBase $obj, $type, $name)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ $this->_checkFilterType($type);
+ $_plugin = "smarty_{$type}filter_{$name}";
+ $_filter_name = $_plugin;
+ if (is_callable($_plugin)) {
+ $smarty->registered_filters[$type][$_filter_name] = $_plugin;
+ return true;
+ }
+ if ($smarty->loadPlugin($_plugin)) {
+ if (class_exists($_plugin, false)) {
+ $_plugin = array($_plugin, 'execute');
+ }
+ if (is_callable($_plugin)) {
+ $smarty->registered_filters[$type][$_filter_name] = $_plugin;
+ return true;
+ }
+ }
+ throw new SmartyException("{$type}filter \"{$name}\" not found or callable");
+ }
+
+ /**
+ * Check if filter type is valid
+ *
+ * @param string $type
+ *
+ * @throws \SmartyException
+ */
+ public function _checkFilterType($type)
+ {
+ if (!isset($this->filterTypes[$type])) {
+ throw new SmartyException("Illegal filter type \"{$type}\"");
+ }
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php b/include/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php
new file mode 100644
index 000000000..c153f55f0
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php
@@ -0,0 +1,111 @@
+<?php
+
+/**
+ * Smarty Extension Loadplugin
+ *
+ * $smarty->loadPlugin() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_LoadPlugin
+{
+ /**
+ * Cache of searched plugin files
+ *
+ * @var array
+ */
+ public $plugin_files = array();
+
+ /**
+ * Takes unknown classes and loads plugin files for them
+ * class name format: Smarty_PluginType_PluginName
+ * plugin filename format: plugintype.pluginname.php
+ *
+ * @param \Smarty $smarty
+ * @param string $plugin_name class plugin name to load
+ * @param bool $check check if already loaded
+ *
+ * @return bool|string
+ * @throws \SmartyException
+ */
+ public function loadPlugin(Smarty $smarty, $plugin_name, $check)
+ {
+ // if function or class exists, exit silently (already loaded)
+ if ($check && (is_callable($plugin_name) || class_exists($plugin_name, false))) {
+ return true;
+ }
+ if (!preg_match('#^smarty_((internal)|([^_]+))_(.+)$#i', $plugin_name, $match)) {
+ throw new SmartyException("plugin {$plugin_name} is not a valid name format");
+ }
+ if (!empty($match[2])) {
+ $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php';
+ if (isset($this->plugin_files[$file])) {
+ if ($this->plugin_files[$file] !== false) {
+ return $this->plugin_files[$file];
+ } else {
+ return false;
+ }
+ } else {
+ if (is_file($file)) {
+ $this->plugin_files[$file] = $file;
+ require_once($file);
+ return $file;
+ } else {
+ $this->plugin_files[$file] = false;
+ return false;
+ }
+ }
+ }
+ // plugin filename is expected to be: [type].[name].php
+ $_plugin_filename = "{$match[1]}.{$match[4]}.php";
+ $_lower_filename = strtolower($_plugin_filename);
+ if (isset($this->plugin_files)) {
+ if (isset($this->plugin_files['plugins_dir'][$_lower_filename])) {
+ if (!$smarty->use_include_path || $this->plugin_files['plugins_dir'][$_lower_filename] !== false) {
+ return $this->plugin_files['plugins_dir'][$_lower_filename];
+ }
+ }
+ if (!$smarty->use_include_path || $smarty->ext->_getIncludePath->isNewIncludePath($smarty)) {
+ unset($this->plugin_files['include_path']);
+ } else {
+ if (isset($this->plugin_files['include_path'][$_lower_filename])) {
+ return $this->plugin_files['include_path'][$_lower_filename];
+ }
+ }
+ }
+ $_file_names = array($_plugin_filename);
+ if ($_lower_filename != $_plugin_filename) {
+ $_file_names[] = $_lower_filename;
+ }
+ $_p_dirs = $smarty->getPluginsDir();
+ if (!isset($this->plugin_files['plugins_dir'][$_lower_filename])) {
+ // loop through plugin dirs and find the plugin
+ foreach ($_p_dirs as $_plugin_dir) {
+ foreach ($_file_names as $name) {
+ $file = $_plugin_dir . $name;
+ if (is_file($file)) {
+ $this->plugin_files['plugins_dir'][$_lower_filename] = $file;
+ require_once($file);
+ return $file;
+ }
+ $this->plugin_files['plugins_dir'][$_lower_filename] = false;
+ }
+ }
+ }
+ if ($smarty->use_include_path) {
+ foreach ($_file_names as $_file_name) {
+ // try PHP include_path
+ $file = $smarty->ext->_getIncludePath->getIncludePath($_p_dirs, $_file_name, $smarty);
+ $this->plugin_files['include_path'][$_lower_filename] = $file;
+ if ($file !== false) {
+ require_once($file);
+ return $file;
+ }
+ }
+ }
+ // no plugin loaded
+ return false;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php b/include/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php
new file mode 100644
index 000000000..f28a68e6d
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Smarty Method UnloadFilter
+ *
+ * Smarty_Internal_Template::mustCompile() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_MustCompile
+{
+ /**
+ * Valid for template object
+ *
+ * @var int
+ */
+ public $objMap = 2;
+
+ /**
+ * Returns if the current template must be compiled by the Smarty compiler
+ * It does compare the timestamps of template source and the compiled templates and checks the force compile
+ * configuration
+ *
+ * @param \Smarty_Internal_Template $_template
+ *
+ * @return bool
+ * @throws \SmartyException
+ */
+ public function mustCompile(Smarty_Internal_Template $_template)
+ {
+ if (!$_template->source->exists) {
+ if (isset($_template->parent) && $_template->parent->_objType == 2) {
+ $parent_resource = " in '$_template->parent->template_resource}'";
+ } else {
+ $parent_resource = '';
+ }
+ throw new SmartyException("Unable to load template {$_template->source->type} '{$_template->source->name}'{$parent_resource}");
+ }
+ if ($_template->mustCompile === null) {
+ $_template->mustCompile = (!$_template->source->handler->uncompiled &&
+ ($_template->smarty->force_compile || $_template->source->handler->recompiled || !$_template->compiled->exists ||
+ ($_template->smarty->compile_check && $_template->compiled->getTimeStamp() < $_template->source->getTimeStamp())));
+ }
+
+ return $_template->mustCompile;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php b/include/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php
new file mode 100644
index 000000000..55c5090ac
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * Smarty Method RegisterCacheResource
+ *
+ * Smarty::registerCacheResource() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_RegisterCacheResource
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Registers a resource to fetch a template
+ *
+ * @api Smarty::registerCacheResource()
+ * @link http://www.smarty.net/docs/en/api.register.cacheresource.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $name name of resource type
+ * @param \Smarty_CacheResource $resource_handler
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ */
+ public function registerCacheResource(Smarty_Internal_TemplateBase $obj, $name, Smarty_CacheResource $resource_handler)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ $smarty->registered_cache_resources[$name] = $resource_handler;
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_registerclass.php b/include/smarty/libs/sysplugins/smarty_internal_method_registerclass.php
new file mode 100644
index 000000000..d2e5e20bb
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_registerclass.php
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * Smarty Method RegisterClass
+ *
+ * Smarty::registerClass() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_RegisterClass
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Registers static classes to be used in templates
+ *
+ * @api Smarty::registerClass()
+ * @link http://www.smarty.net/docs/en/api.register.class.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $class_name
+ * @param string $class_impl the referenced PHP class to
+ * register
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws \SmartyException
+ */
+ public function registerClass(Smarty_Internal_TemplateBase $obj, $class_name, $class_impl)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ // test if exists
+ if (!class_exists($class_impl)) {
+ throw new SmartyException("Undefined class '$class_impl' in register template class");
+ }
+ // register the class
+ $smarty->registered_classes[$class_name] = $class_impl;
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php b/include/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php
new file mode 100644
index 000000000..370aa38dc
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Smarty Method RegisterDefaultConfigHandler
+ *
+ * Smarty::registerDefaultConfigHandler() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_RegisterDefaultConfigHandler
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Register config default handler
+ *
+ * @api Smarty::registerDefaultConfigHandler()
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param callable $callback class/method name
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws SmartyException if $callback is not callable
+ */
+ public function registerDefaultConfigHandler(Smarty_Internal_TemplateBase $obj, $callback)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if (is_callable($callback)) {
+ $smarty->default_config_handler_func = $callback;
+ } else {
+ throw new SmartyException("Default config handler not callable");
+ }
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php b/include/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php
new file mode 100644
index 000000000..80b801ce5
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Smarty Method RegisterDefaultPluginHandler
+ *
+ * Smarty::registerDefaultPluginHandler() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_RegisterDefaultPluginHandler
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Registers a default plugin handler
+ *
+ * @api Smarty::registerDefaultPluginHandler()
+ * @link http://www.smarty.net/docs/en/api.register.default.plugin.handler.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param callable $callback class/method name
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws SmartyException if $callback is not callable
+ */
+ public function registerDefaultPluginHandler(Smarty_Internal_TemplateBase $obj, $callback)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if (is_callable($callback)) {
+ $smarty->default_plugin_handler_func = $callback;
+ } else {
+ throw new SmartyException("Default plugin handler '$callback' not callable");
+ }
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php b/include/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php
new file mode 100644
index 000000000..40979e7a6
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php
@@ -0,0 +1,72 @@
+<?php
+
+/**
+ * Smarty Method RegisterDefaultTemplateHandler
+ *
+ * Smarty::registerDefaultTemplateHandler() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_RegisterDefaultTemplateHandler
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Register template default handler
+ *
+ * @api Smarty::registerDefaultTemplateHandler()
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param callable $callback class/method name
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws SmartyException if $callback is not callable
+ */
+ public function registerDefaultTemplateHandler(Smarty_Internal_TemplateBase $obj, $callback)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if (is_callable($callback)) {
+ $smarty->default_template_handler_func = $callback;
+ } else {
+ throw new SmartyException("Default template handler not callable");
+ }
+ return $obj;
+ }
+
+ /**
+ * get default content from template or config resource handler
+ *
+ * @param Smarty_Template_Source $source
+ */
+ public static function _getDefaultTemplate(Smarty_Template_Source $source)
+ {
+ if ($source->isConfig) {
+ $default_handler = $source->smarty->default_config_handler_func;
+ } else {
+ $default_handler = $source->smarty->default_template_handler_func;
+ }
+ $_content = $_timestamp = null;
+ $_return = call_user_func_array($default_handler, array($source->type, $source->name, &$_content, &$_timestamp,
+ $source->smarty));
+ if (is_string($_return)) {
+ $source->exists = is_file($_return);
+ if ($source->exists) {
+ $source->timestamp = filemtime($_return);
+ }
+ $source->filepath = $_return;
+ } elseif ($_return === true) {
+ $source->content = $_content;
+ $source->timestamp = $_timestamp;
+ $source->exists = true;
+ $source->handler->recompiled = true;
+ $source->filepath = false;
+ }
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php b/include/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php
new file mode 100644
index 000000000..84b2c2630
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * Smarty Method RegisterFilter
+ *
+ * Smarty::registerFilter() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_RegisterFilter
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Valid filter types
+ *
+ * @var array
+ */
+ private $filterTypes = array('pre' => true, 'post' => true, 'output' => true, 'variable' => true);
+
+ /**
+ * Registers a filter function
+ *
+ * @api Smarty::registerFilter()
+ *
+ * @link http://www.smarty.net/docs/en/api.register.filter.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $type filter type
+ * @param callback $callback
+ * @param string|null $name optional filter name
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws \SmartyException
+ */
+ public function registerFilter(Smarty_Internal_TemplateBase $obj, $type, $callback, $name = null)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ $this->_checkFilterType($type);
+ $name = isset($name) ? $name : $this->_getFilterName($callback);
+ if (!is_callable($callback)) {
+ throw new SmartyException("{$type}filter \"{$name}\" not callable");
+ }
+ $smarty->registered_filters[$type][$name] = $callback;
+ return $obj;
+ }
+
+ /**
+ * Return internal filter name
+ *
+ * @param callback $function_name
+ *
+ * @return string internal filter name
+ */
+ public function _getFilterName($function_name)
+ {
+ if (is_array($function_name)) {
+ $_class_name = (is_object($function_name[0]) ? get_class($function_name[0]) : $function_name[0]);
+
+ return $_class_name . '_' . $function_name[1];
+ } elseif (is_string($function_name)) {
+ return $function_name;
+ } else {
+ return 'closure';
+ }
+ }
+
+ /**
+ * Check if filter type is valid
+ *
+ * @param string $type
+ *
+ * @throws \SmartyException
+ */
+ public function _checkFilterType($type)
+ {
+ if (!isset($this->filterTypes[$type])) {
+ throw new SmartyException("Illegal filter type \"{$type}\"");
+ }
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_registerobject.php b/include/smarty/libs/sysplugins/smarty_internal_method_registerobject.php
new file mode 100644
index 000000000..f27f1720b
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_registerobject.php
@@ -0,0 +1,71 @@
+<?php
+
+/**
+ * Smarty Method RegisterObject
+ *
+ * Smarty::registerObject() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_RegisterObject
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Registers object to be used in templates
+ *
+ * @api Smarty::registerObject()
+ * @link http://www.smarty.net/docs/en/api.register.object.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $object_name
+ * @param object $object the
+ * referenced
+ * PHP object to
+ * register
+ * @param array $allowed_methods_properties list of
+ * allowed
+ * methods
+ * (empty = all)
+ * @param bool $format smarty
+ * argument
+ * format, else
+ * traditional
+ * @param array $block_methods list of
+ * block-methods
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws \SmartyException
+ */
+ public function registerObject(Smarty_Internal_TemplateBase $obj, $object_name, $object, $allowed_methods_properties = array(), $format = true, $block_methods = array())
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ // test if allowed methods callable
+ if (!empty($allowed_methods_properties)) {
+ foreach ((array) $allowed_methods_properties as $method) {
+ if (!is_callable(array($object, $method)) && !property_exists($object, $method)) {
+ throw new SmartyException("Undefined method or property '$method' in registered object");
+ }
+ }
+ }
+ // test if block methods callable
+ if (!empty($block_methods)) {
+ foreach ((array) $block_methods as $method) {
+ if (!is_callable(array($object, $method))) {
+ throw new SmartyException("Undefined method '$method' in registered object");
+ }
+ }
+ }
+ // register the object
+ $smarty->registered_objects[$object_name] = array($object, (array) $allowed_methods_properties,
+ (boolean) $format, (array) $block_methods);
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php b/include/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php
new file mode 100644
index 000000000..95814581d
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * Smarty Method RegisterPlugin
+ *
+ * Smarty::registerPlugin() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_RegisterPlugin
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Registers plugin to be used in templates
+ *
+ * @api Smarty::registerPlugin()
+ * @link http://www.smarty.net/docs/en/api.register.plugin.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $type plugin type
+ * @param string $name name of template tag
+ * @param callback $callback PHP callback to register
+ * @param bool $cacheable if true (default) this
+ * function is cache able
+ * @param mixed $cache_attr caching attributes if any
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws SmartyException when the plugin tag is invalid
+ */
+ public function registerPlugin(Smarty_Internal_TemplateBase $obj, $type, $name, $callback, $cacheable = true, $cache_attr = null)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if (isset($smarty->registered_plugins[$type][$name])) {
+ throw new SmartyException("Plugin tag \"{$name}\" already registered");
+ } elseif (!is_callable($callback)) {
+ throw new SmartyException("Plugin \"{$name}\" not callable");
+ } else {
+ $smarty->registered_plugins[$type][$name] = array($callback, (bool) $cacheable, (array) $cache_attr);
+ }
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_registerresource.php b/include/smarty/libs/sysplugins/smarty_internal_method_registerresource.php
new file mode 100644
index 000000000..43246ee9b
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_registerresource.php
@@ -0,0 +1,44 @@
+<?php
+
+/**
+ * Smarty Method RegisterResource
+ *
+ * Smarty::registerResource() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_RegisterResource
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Registers a resource to fetch a template
+ *
+ * @api Smarty::registerResource()
+ * @link http://www.smarty.net/docs/en/api.register.resource.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $name name of resource type
+ * @param Smarty_Resource|array $resource_handler or instance of
+ * Smarty_Resource, or
+ * array of callbacks to
+ * handle resource
+ * (deprecated)
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ */
+ public function registerResource(Smarty_Internal_TemplateBase $obj, $name, $resource_handler)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ $smarty->registered_resources[$name] = $resource_handler instanceof
+ Smarty_Resource ? $resource_handler : array($resource_handler, false);
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php b/include/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php
new file mode 100644
index 000000000..b1f965cd9
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * Smarty Method SetAutoloadFilters
+ *
+ * Smarty::setAutoloadFilters() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_SetAutoloadFilters
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Valid filter types
+ *
+ * @var array
+ */
+ private $filterTypes = array('pre' => true, 'post' => true, 'output' => true, 'variable' => true);
+
+ /**
+ * Set autoload filters
+ *
+ * @api Smarty::setAutoloadFilters()
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param array $filters filters to load automatically
+ * @param string $type "pre", "output", … specify the
+ * filter type to set. Defaults to
+ * none treating $filters' keys as
+ * the appropriate types
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ */
+ public function setAutoloadFilters(Smarty_Internal_TemplateBase $obj, $filters, $type = null)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if ($type !== null) {
+ $this->_checkFilterType($type);
+ $smarty->autoload_filters[$type] = (array) $filters;
+ } else {
+ foreach ((array) $filters as $type => $value) {
+ $this->_checkFilterType($type);
+ }
+ $smarty->autoload_filters = (array) $filters;
+ }
+ return $obj;
+ }
+
+ /**
+ * Check if filter type is valid
+ *
+ * @param string $type
+ *
+ * @throws \SmartyException
+ */
+ public function _checkFilterType($type)
+ {
+ if (!isset($this->filterTypes[$type])) {
+ throw new SmartyException("Illegal filter type \"{$type}\"");
+ }
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php b/include/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php
new file mode 100644
index 000000000..4ff5d7f82
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * Smarty Method SetDebugTemplate
+ *
+ * Smarty::setDebugTemplate() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_SetDebugTemplate
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * set the debug template
+ *
+ * @api Smarty::setDebugTemplate()
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $tpl_name
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws SmartyException if file is not readable
+ */
+ public function setDebugTemplate(Smarty_Internal_TemplateBase $obj, $tpl_name)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if (!is_readable($tpl_name)) {
+ throw new SmartyException("Unknown file '{$tpl_name}'");
+ }
+ $smarty->debug_tpl = $tpl_name;
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php b/include/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php
new file mode 100644
index 000000000..5a707287a
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * Smarty Method SetDefaultModifiers
+ *
+ * Smarty::setDefaultModifiers() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_SetDefaultModifiers
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Set default modifiers
+ *
+ * @api Smarty::setDefaultModifiers()
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param array|string $modifiers modifier or list of modifiers
+ * to set
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ */
+ public function setDefaultModifiers(Smarty_Internal_TemplateBase $obj, $modifiers)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ $smarty->default_modifiers = (array) $modifiers;
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php b/include/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php
new file mode 100644
index 000000000..e3d966e1c
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Smarty Method UnloadFilter
+ *
+ * Smarty::unloadFilter() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_UnloadFilter extends Smarty_Internal_Method_LoadFilter
+{
+ /**
+ * load a filter of specified type and name
+ *
+ * @api Smarty::unloadFilter()
+ *
+ * @link http://www.smarty.net/docs/en/api.unload.filter.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $type filter type
+ * @param string $name filter name
+ *
+ * @return bool
+ */
+ public function unloadFilter(Smarty_Internal_TemplateBase $obj, $type, $name)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ $this->_checkFilterType($type);
+ if (isset($smarty->registered_filters[$type])) {
+ $_filter_name = "smarty_{$type}filter_{$name}";
+ if (isset($smarty->registered_filters[$type][$_filter_name])) {
+ unset ($smarty->registered_filters[$type][$_filter_name]);
+ if (empty($smarty->registered_filters[$type])) {
+ unset($smarty->registered_filters[$type]);
+ }
+ }
+ }
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php b/include/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php
new file mode 100644
index 000000000..80381015a
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * Smarty Method UnregisterCacheResource
+ *
+ * Smarty::unregisterCacheResource() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_UnregisterCacheResource
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Registers a resource to fetch a template
+ *
+ * @api Smarty::unregisterCacheResource()
+ * @link http://www.smarty.net/docs/en/api.unregister.cacheresource.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $type name of cache resource type
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ */
+ public function unregisterCacheResource(Smarty_Internal_TemplateBase $obj, $name)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if (isset($smarty->registered_cache_resources[$name])) {
+ unset($smarty->registered_cache_resources[$name]);
+ }
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php b/include/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php
new file mode 100644
index 000000000..c80ae9a65
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Smarty Method UnregisterFilter
+ *
+ * Smarty::unregisterFilter() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_UnregisterFilter extends Smarty_Internal_Method_RegisterFilter
+{
+ /**
+ * Unregisters a filter function
+ *
+ * @api Smarty::unregisterFilter()
+ *
+ * @link http://www.smarty.net/docs/en/api.unregister.filter.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $type filter type
+ * @param callback|string $callback
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ */
+ public function unregisterFilter(Smarty_Internal_TemplateBase $obj, $type, $callback)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ $this->_checkFilterType($type);
+ if (isset($smarty->registered_filters[$type])) {
+ $name = is_string($callback) ? $callback : $this->_getFilterName($callback);
+ if (isset($smarty->registered_filters[$type][$name])) {
+ unset($smarty->registered_filters[$type][$name]);
+ if (empty($smarty->registered_filters[$type])) {
+ unset($smarty->registered_filters[$type]);
+ }
+ }
+ }
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php b/include/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php
new file mode 100644
index 000000000..a94331683
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * Smarty Method UnregisterObject
+ *
+ * Smarty::unregisterObject() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_UnregisterObject
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Registers plugin to be used in templates
+ *
+ * @api Smarty::unregisterObject()
+ * @link http://www.smarty.net/docs/en/api.unregister.object.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $object_name name of object
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ */
+ public function unregisterObject(Smarty_Internal_TemplateBase $obj, $object_name)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if (isset($smarty->registered_objects[$object_name])) {
+ unset($smarty->registered_objects[$object_name]);
+ }
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php b/include/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php
new file mode 100644
index 000000000..06cb2d354
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * Smarty Method UnregisterPlugin
+ *
+ * Smarty::unregisterPlugin() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_UnregisterPlugin
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Registers plugin to be used in templates
+ *
+ * @api Smarty::unregisterPlugin()
+ * @link http://www.smarty.net/docs/en/api.unregister.plugin.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $type plugin type
+ * @param string $name name of template tag
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ */
+ public function unregisterPlugin(Smarty_Internal_TemplateBase $obj, $type, $name)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if (isset($smarty->registered_plugins[$type][$name])) {
+ unset($smarty->registered_plugins[$type][$name]);
+ }
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php b/include/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php
new file mode 100644
index 000000000..767bd74ab
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * Smarty Method UnregisterResource
+ *
+ * Smarty::unregisterResource() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_UnregisterResource
+{
+ /**
+ * Valid for Smarty and template object
+ *
+ * @var int
+ */
+ public $objMap = 3;
+
+ /**
+ * Registers a resource to fetch a template
+ *
+ * @api Smarty::unregisterResource()
+ * @link http://www.smarty.net/docs/en/api.unregister.resource.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $type name of resource type
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ */
+ public function unregisterResource(Smarty_Internal_TemplateBase $obj, $type)
+ {
+ $smarty = isset($obj->smarty) ? $obj->smarty : $obj;
+ if (isset($smarty->registered_resources[$type])) {
+ unset($smarty->registered_resources[$type]);
+ }
+ return $obj;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_nocache_insert.php b/include/smarty/libs/sysplugins/smarty_internal_nocache_insert.php
index 64a2b1e1b..b3d5fa86a 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_nocache_insert.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_nocache_insert.php
@@ -1,31 +1,31 @@
<?php
/**
* Smarty Internal Plugin Nocache Insert
- *
* Compiles the {insert} tag into the cache file
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Insert Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Nocache_Insert {
-
+class Smarty_Internal_Nocache_Insert
+{
/**
* Compiles code for the {insert} tag into cache file
*
- * @param string $_function insert function name
- * @param array $_attr array with parameter
- * @param Smarty_Internal_Template $_template template object
- * @param string $_script script name to load or 'null'
- * @param string $_assign optional variable name
- * @return string compiled code
+ * @param string $_function insert function name
+ * @param array $_attr array with parameter
+ * @param Smarty_Internal_Template $_template template object
+ * @param string $_script script name to load or 'null'
+ * @param string $_assign optional variable name
+ *
+ * @return string compiled code
*/
public static function compile($_function, $_attr, $_template, $_script, $_assign = null)
{
@@ -42,12 +42,10 @@ class Smarty_Internal_Nocache_Insert {
$_output .= "echo {$_function}(" . var_export($_attr, true) . ",\$_smarty_tpl);?>";
}
$_tpl = $_template;
- while ($_tpl->parent instanceof Smarty_Internal_Template) {
+ while (isset($_tpl->parent) && $_tpl->parent->_objType == 2) {
$_tpl = $_tpl->parent;
}
- return "/*%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/";
- }
+ return "/*%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/";
+ }
}
-
-?>
diff --git a/include/smarty/libs/sysplugins/smarty_internal_parsetree.php b/include/smarty/libs/sysplugins/smarty_internal_parsetree.php
index 99f4c6566..32c9df094 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_parsetree.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_parsetree.php
@@ -1,395 +1,54 @@
<?php
/**
* Smarty Internal Plugin Templateparser Parsetrees
- *
* These are classes to build parsetrees in the template parser
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Thue Kristensen
- * @author Uwe Tews
+ * @author Thue Kristensen
+ * @author Uwe Tews
*/
/**
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
* @ignore
*/
-abstract class _smarty_parsetree {
+abstract class Smarty_Internal_ParseTree
+{
/**
- * Parser object
- * @var object
- */
- public $parser;
- /**
* Buffer content
+ *
* @var mixed
*/
public $data;
/**
- * Return buffer
- *
- * @return string buffer content
- */
- abstract public function to_smarty_php();
-
-}
-
-/**
- * A complete smarty tag.
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_tag extends _smarty_parsetree {
-
- /**
- * Saved block nesting level
- * @var int
- */
- public $saved_block_nesting;
-
- /**
- * Create parse tree buffer for Smarty tag
- *
- * @param object $parser parser object
- * @param string $data content
- */
- public function __construct($parser, $data)
- {
- $this->parser = $parser;
- $this->data = $data;
- $this->saved_block_nesting = $parser->block_nesting_level;
- }
-
- /**
- * Return buffer content
- *
- * @return string content
- */
- public function to_smarty_php()
- {
- return $this->data;
- }
-
- /**
- * Return complied code that loads the evaluated outout of buffer content into a temporary variable
- *
- * @return string template code
- */
- public function assign_to_var()
- {
- $var = sprintf('$_tmp%d', ++$this->parser->prefix_number);
- $this->parser->compiler->prefix_code[] = sprintf('<?php ob_start();?>%s<?php %s=ob_get_clean();?>', $this->data, $var);
- return $var;
- }
-
-}
-
-/**
- * Code fragment inside a tag.
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_code extends _smarty_parsetree {
-
-
- /**
- * Create parse tree buffer for code fragment
- *
- * @param object $parser parser object
- * @param string $data content
- */
- public function __construct($parser, $data)
- {
- $this->parser = $parser;
- $this->data = $data;
- }
-
- /**
- * Return buffer content in parentheses
- *
- * @return string content
- */
- public function to_smarty_php()
- {
- return sprintf("(%s)", $this->data);
- }
-
-}
-
-/**
- * Double quoted string inside a tag.
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_doublequoted extends _smarty_parsetree {
-
- /**
- * Create parse tree buffer for double quoted string subtrees
- *
- * @param object $parser parser object
- * @param _smarty_parsetree $subtree parsetree buffer
- */
- public function __construct($parser, _smarty_parsetree $subtree)
- {
- $this->parser = $parser;
- $this->subtrees[] = $subtree;
- if ($subtree instanceof _smarty_tag) {
- $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);
- }
- }
-
- /**
- * Append buffer to subtree
- *
- * @param _smarty_parsetree $subtree parsetree buffer
- */
- public function append_subtree(_smarty_parsetree $subtree)
- {
- $last_subtree = count($this->subtrees) - 1;
- if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof _smarty_tag && $this->subtrees[$last_subtree]->saved_block_nesting < $this->parser->block_nesting_level) {
- if ($subtree instanceof _smarty_code) {
- $this->subtrees[$last_subtree]->data .= '<?php echo ' . $subtree->data . ';?>';
- } elseif ($subtree instanceof _smarty_dq_content) {
- $this->subtrees[$last_subtree]->data .= '<?php echo "' . $subtree->data . '";?>';
- } else {
- $this->subtrees[$last_subtree]->data .= $subtree->data;
- }
- } else {
- $this->subtrees[] = $subtree;
- }
- if ($subtree instanceof _smarty_tag) {
- $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);
- }
- }
-
- /**
- * Merge subtree buffer content together
- *
- * @return string compiled template code
- */
- public function to_smarty_php()
- {
- $code = '';
- foreach ($this->subtrees as $subtree) {
- if ($code !== "") {
- $code .= ".";
- }
- if ($subtree instanceof _smarty_tag) {
- $more_php = $subtree->assign_to_var();
- } else {
- $more_php = $subtree->to_smarty_php();
- }
-
- $code .= $more_php;
-
- if (!$subtree instanceof _smarty_dq_content) {
- $this->parser->compiler->has_variable_string = true;
- }
- }
- return $code;
- }
-
-}
-
-/**
- * Raw chars as part of a double quoted string.
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_dq_content extends _smarty_parsetree {
-
-
- /**
- * Create parse tree buffer with string content
- *
- * @param object $parser parser object
- * @param string $data string section
- */
- public function __construct($parser, $data)
- {
- $this->parser = $parser;
- $this->data = $data;
- }
-
- /**
- * Return content as double quoted string
- *
- * @return string doubled quoted string
- */
- public function to_smarty_php()
- {
- return '"' . $this->data . '"';
- }
-
-}
-
-/**
- * Template element
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_template_buffer extends _smarty_parsetree {
-
- /**
- * Array of template elements
+ * Subtree array
*
* @var array
*/
- public $subtrees = Array();
-
- /**
- * Create root of parse tree for template elements
- *
- * @param object $parser parse object
- */
- public function __construct($parser)
- {
- $this->parser = $parser;
- }
-
- /**
- * Append buffer to subtree
- *
- * @param _smarty_parsetree $subtree
- */
- public function append_subtree(_smarty_parsetree $subtree)
- {
- $this->subtrees[] = $subtree;
- }
+ public $subtrees = array();
/**
- * Sanitize and merge subtree buffers together
+ * Return buffer
*
- * @return string template code content
- */
- public function to_smarty_php()
- {
- $code = '';
- for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key++) {
- if ($key + 2 < $cnt) {
- if ($this->subtrees[$key] instanceof _smarty_linebreak && $this->subtrees[$key + 1] instanceof _smarty_tag && $this->subtrees[$key + 1]->data == '' && $this->subtrees[$key + 2] instanceof _smarty_linebreak) {
- $key = $key + 1;
- continue;
- }
- if (substr($this->subtrees[$key]->data, -1) == '<' && $this->subtrees[$key + 1]->data == '' && substr($this->subtrees[$key + 2]->data, -1) == '?') {
- $key = $key + 2;
- continue;
- }
- }
- if (substr($code, -1) == '<') {
- $subtree = $this->subtrees[$key]->to_smarty_php();
- if (substr($subtree, 0, 1) == '?') {
- $code = substr($code, 0, strlen($code) - 1) . '<<?php ?>?' . substr($subtree, 1);
- } elseif ($this->parser->asp_tags && substr($subtree, 0, 1) == '%') {
- $code = substr($code, 0, strlen($code) - 1) . '<<?php ?>%' . substr($subtree, 1);
- } else {
- $code .= $subtree;
- }
- continue;
- }
- if ($this->parser->asp_tags && substr($code, -1) == '%') {
- $subtree = $this->subtrees[$key]->to_smarty_php();
- if (substr($subtree, 0, 1) == '>') {
- $code = substr($code, 0, strlen($code) - 1) . '%<?php ?>>' . substr($subtree, 1);
- } else {
- $code .= $subtree;
- }
- continue;
- }
- if (substr($code, -1) == '?') {
- $subtree = $this->subtrees[$key]->to_smarty_php();
- if (substr($subtree, 0, 1) == '>') {
- $code = substr($code, 0, strlen($code) - 1) . '?<?php ?>>' . substr($subtree, 1);
- } else {
- $code .= $subtree;
- }
- continue;
- }
- $code .= $this->subtrees[$key]->to_smarty_php();
- }
- return $code;
- }
-
-}
-
-/**
- * template text
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_text extends _smarty_parsetree {
-
-
- /**
- * Create template text buffer
+ * @param \Smarty_Internal_Templateparser $parser
*
- * @param object $parser parser object
- * @param string $data text
+ * @return string buffer content
*/
- public function __construct($parser, $data)
- {
- $this->parser = $parser;
- $this->data = $data;
- }
+ abstract public function to_smarty_php(Smarty_Internal_Templateparser $parser);
/**
- * Return buffer content
- *
- * @return strint text
+ * Template data object destructor
*/
- public function to_smarty_php()
+ public function __destruct()
{
- return $this->data;
+ $this->data = null;
+ $this->subtrees = null;
}
}
-/**
- * template linebreaks
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_linebreak extends _smarty_parsetree {
-
- /**
- * Create buffer with linebreak content
- *
- * @param object $parser parser object
- * @param string $data linebreak string
- */
- public function __construct($parser, $data)
- {
- $this->parser = $parser;
- $this->data = $data;
- }
-
- /**
- * Return linebrak
- *
- * @return string linebreak
- */
- public function to_smarty_php()
- {
- return $this->data;
- }
-
-}
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_parsetree_code.php b/include/smarty/libs/sysplugins/smarty_internal_parsetree_code.php
new file mode 100644
index 000000000..d0f0b3fd9
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_parsetree_code.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Smarty Internal Plugin Templateparser Parse Tree
+ * These are classes to build parse trees in the template parser
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Thue Kristensen
+ * @author Uwe Tews
+ */
+
+/**
+ * Code fragment inside a tag .
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class Smarty_Internal_ParseTree_Code extends Smarty_Internal_ParseTree
+{
+ /**
+ * Create parse tree buffer for code fragment
+ *
+ * @param string $data content
+ */
+ public function __construct($data)
+ {
+ $this->data = $data;
+ }
+
+ /**
+ * Return buffer content in parentheses
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string content
+ */
+ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ {
+ return sprintf("(%s)", $this->data);
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php b/include/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php
new file mode 100644
index 000000000..607389cb5
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * Double quoted string inside a tag.
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+
+/**
+ * Double quoted string inside a tag.
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class Smarty_Internal_ParseTree_Dq extends Smarty_Internal_ParseTree
+{
+ /**
+ * Create parse tree buffer for double quoted string subtrees
+ *
+ * @param object $parser parser object
+ * @param Smarty_Internal_ParseTree $subtree parse tree buffer
+ */
+ public function __construct($parser, Smarty_Internal_ParseTree $subtree)
+ {
+ $this->subtrees[] = $subtree;
+ if ($subtree instanceof Smarty_Internal_ParseTree_Tag) {
+ $parser->block_nesting_level = count($parser->compiler->_tag_stack);
+ }
+ }
+
+ /**
+ * Append buffer to subtree
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ * @param Smarty_Internal_ParseTree $subtree parse tree buffer
+ */
+ public function append_subtree(Smarty_Internal_Templateparser $parser, Smarty_Internal_ParseTree $subtree)
+ {
+ $last_subtree = count($this->subtrees) - 1;
+ if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof Smarty_Internal_ParseTree_Tag && $this->subtrees[$last_subtree]->saved_block_nesting < $parser->block_nesting_level) {
+ if ($subtree instanceof Smarty_Internal_ParseTree_Code) {
+ $this->subtrees[$last_subtree]->data = $parser->compiler->appendCode($this->subtrees[$last_subtree]->data, '<?php echo ' . $subtree->data . ';?>');
+ } elseif ($subtree instanceof Smarty_Internal_ParseTree_DqContent) {
+ $this->subtrees[$last_subtree]->data = $parser->compiler->appendCode($this->subtrees[$last_subtree]->data, '<?php echo "' . $subtree->data . '";?>');
+ } else {
+ $this->subtrees[$last_subtree]->data = $parser->compiler->appendCode($this->subtrees[$last_subtree]->data, $subtree->data);
+ }
+ } else {
+ $this->subtrees[] = $subtree;
+ }
+ if ($subtree instanceof Smarty_Internal_ParseTree_Tag) {
+ $parser->block_nesting_level = count($parser->compiler->_tag_stack);
+ }
+ }
+
+ /**
+ * Merge subtree buffer content together
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string compiled template code
+ */
+ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ {
+ $code = '';
+ foreach ($this->subtrees as $subtree) {
+ if ($code !== "") {
+ $code .= ".";
+ }
+ if ($subtree instanceof Smarty_Internal_ParseTree_Tag) {
+ $more_php = $subtree->assign_to_var($parser);
+ } else {
+ $more_php = $subtree->to_smarty_php($parser);
+ }
+
+ $code .= $more_php;
+
+ if (!$subtree instanceof Smarty_Internal_ParseTree_DqContent) {
+ $parser->compiler->has_variable_string = true;
+ }
+ }
+
+ return $code;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php b/include/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php
new file mode 100644
index 000000000..a8ca389d9
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Smarty Internal Plugin Templateparser Parse Tree
+ * These are classes to build parse tree in the template parser
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Thue Kristensen
+ * @author Uwe Tews
+ */
+
+/**
+ * Raw chars as part of a double quoted string.
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class Smarty_Internal_ParseTree_DqContent extends Smarty_Internal_ParseTree
+{
+ /**
+ * Create parse tree buffer with string content
+ *
+ * @param string $data string section
+ */
+ public function __construct($data)
+ {
+ $this->data = $data;
+ }
+
+ /**
+ * Return content as double quoted string
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string doubled quoted string
+ */
+ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ {
+ return '"' . $this->data . '"';
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php b/include/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php
new file mode 100644
index 000000000..575c8c9e8
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Smarty Internal Plugin Templateparser Parse Tree
+ * These are classes to build parse tree in the template parser
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Thue Kristensen
+ * @author Uwe Tews
+ */
+
+/**
+ * A complete smarty tag.
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class Smarty_Internal_ParseTree_Tag extends Smarty_Internal_ParseTree
+{
+
+ /**
+ * Saved block nesting level
+ *
+ * @var int
+ */
+ public $saved_block_nesting;
+
+ /**
+ * Create parse tree buffer for Smarty tag
+ *
+ * @param \Smarty_Internal_Templateparser $parser parser object
+ * @param string $data content
+ */
+ public function __construct(Smarty_Internal_Templateparser $parser, $data)
+ {
+ $this->data = $data;
+ $this->saved_block_nesting = $parser->block_nesting_level;
+ }
+
+ /**
+ * Return buffer content
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string content
+ */
+ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ {
+ return $this->data;
+ }
+
+ /**
+ * Return complied code that loads the evaluated output of buffer content into a temporary variable
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string template code
+ */
+ public function assign_to_var(Smarty_Internal_Templateparser $parser)
+ {
+ $var = sprintf('$_tmp%d', ++ Smarty_Internal_Templateparser::$prefix_number);
+ $tmp = $parser->compiler->appendCode('<?php ob_start();?>', $this->data);
+ $tmp = $parser->compiler->appendCode($tmp, "<?php {$var}=ob_get_clean();?>");
+ $parser->compiler->prefix_code[] = sprintf("%s", $tmp);
+
+ return $var;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_parsetree_template.php b/include/smarty/libs/sysplugins/smarty_internal_parsetree_template.php
new file mode 100644
index 000000000..623ae51a3
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_parsetree_template.php
@@ -0,0 +1,128 @@
+<?php
+/**
+ * Smarty Internal Plugin Templateparser Parse Tree
+ * These are classes to build parse tree in the template parser
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Thue Kristensen
+ * @author Uwe Tews
+ */
+
+/**
+ * Template element
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
+{
+
+ /**
+ * Array of template elements
+ *
+ * @var array
+ */
+ public $subtrees = Array();
+
+ /**
+ * Create root of parse tree for template elements
+ *
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Append buffer to subtree
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ * @param Smarty_Internal_ParseTree $subtree
+ */
+ public function append_subtree(Smarty_Internal_Templateparser $parser, Smarty_Internal_ParseTree $subtree)
+ {
+ if (!empty($subtree->subtrees)) {
+ $this->subtrees = array_merge($this->subtrees, $subtree->subtrees);
+ } else {
+ if ($subtree->data !== '') {
+ $this->subtrees[] = $subtree;
+ }
+ }
+ }
+
+ /**
+ * Append array to subtree
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty_Internal_ParseTree[] $array
+ */
+ public function append_array(Smarty_Internal_Templateparser $parser, $array = array())
+ {
+ if (!empty($array)) {
+ $this->subtrees = array_merge($this->subtrees, (array) $array);
+ }
+ }
+
+ /**
+ * Prepend array to subtree
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty_Internal_ParseTree[] $array
+ */
+ public function prepend_array(Smarty_Internal_Templateparser $parser, $array = array())
+ {
+ if (!empty($array)) {
+ $this->subtrees = array_merge((array) $array, $this->subtrees);
+ }
+ }
+
+ /**
+ * Sanitize and merge subtree buffers together
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string template code content
+ */
+ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ {
+ $code = '';
+ for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key ++) {
+ if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Text) {
+ $subtree = $this->subtrees[$key]->to_smarty_php($parser);
+ while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Text ||
+ $this->subtrees[$key + 1]->data == '')) {
+ $key ++;
+ if ($this->subtrees[$key]->data == '') {
+ continue;
+ }
+ $subtree .= $this->subtrees[$key]->to_smarty_php($parser);
+ }
+ if ($subtree == '') {
+ continue;
+ }
+ $code .= preg_replace('/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/', "<?php echo '\$1'; ?>\n",
+ $subtree);
+ continue;
+ }
+ if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Tag) {
+ $subtree = $this->subtrees[$key]->to_smarty_php($parser);
+ while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Tag ||
+ $this->subtrees[$key + 1]->data == '')) {
+ $key ++;
+ if ($this->subtrees[$key]->data == '') {
+ continue;
+ }
+ $subtree = $parser->compiler->appendCode($subtree, $this->subtrees[$key]->to_smarty_php($parser));
+ }
+ if ($subtree == '') {
+ continue;
+ }
+ $code .= $subtree;
+ continue;
+ }
+ $code .= $this->subtrees[$key]->to_smarty_php($parser);
+ }
+ return $code;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_parsetree_text.php b/include/smarty/libs/sysplugins/smarty_internal_parsetree_text.php
new file mode 100644
index 000000000..b3100fa09
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_parsetree_text.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * Smarty Internal Plugin Templateparser Parse Tree
+ * These are classes to build parse tree in the template parser
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Thue Kristensen
+ * @author Uwe Tews
+ * *
+ * template text
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class Smarty_Internal_ParseTree_Text extends Smarty_Internal_ParseTree
+{
+ /**
+ * Create template text buffer
+ *
+ * @param string $data text
+ */
+ public function __construct($data)
+ {
+ $this->data = $data;
+ }
+
+ /**
+ * Return buffer content
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string text
+ */
+ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ {
+ return $this->data;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_resource_eval.php b/include/smarty/libs/sysplugins/smarty_internal_resource_eval.php
index c025dc26d..aca710350 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_resource_eval.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_resource_eval.php
@@ -2,32 +2,31 @@
/**
* Smarty Internal Plugin Resource Eval
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
/**
* Smarty Internal Plugin Resource Eval
- *
* Implements the strings as resource for Smarty template
- *
* {@internal unlike string-resources the compiled state of eval-resources is NOT saved for subsequent access}}
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled {
-
+class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled
+{
/**
* populate Source Object with meta data from Resource
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
$source->uid = $source->filepath = sha1($source->name);
$source->timestamp = false;
@@ -38,18 +37,21 @@ class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled {
* Load template's source from $resource_name into current template object
*
* @uses decode() to decode base64 and urlencoded template_resources
- * @param Smarty_Template_Source $source source object
- * @return string template source
+ *
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string template source
*/
public function getContent(Smarty_Template_Source $source)
{
return $this->decode($source->name);
}
-
+
/**
* decode base64 and urlencode
*
- * @param string $string template_resource to decode
+ * @param string $string template_resource to decode
+ *
* @return string decoded template_resource
*/
protected function decode($string)
@@ -62,33 +64,33 @@ class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled {
return urldecode(substr($string, 10));
}
}
-
+
return $string;
}
-
+
/**
* modify resource_name according to resource handlers specifications
*
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
+ * @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
*/
- protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
+ public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
{
- return get_class($this) . '#' .$this->decode($resource_name);
+ return get_class($this) . '#' . $this->decode($resource_name);
}
/**
* Determine basename for compiled filename
*
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
*/
- protected function getBasename(Smarty_Template_Source $source)
+ public function getBasename(Smarty_Template_Source $source)
{
return '';
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_resource_extends.php b/include/smarty/libs/sysplugins/smarty_internal_resource_extends.php
index 29734ae05..3d687dca8 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_resource_extends.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_resource_extends.php
@@ -1,162 +1,124 @@
<?php
/**
-* Smarty Internal Plugin Resource Extends
-*
-* @package Smarty
-* @subpackage TemplateResources
-* @author Uwe Tews
-* @author Rodney Rehm
-*/
+ * Smarty Internal Plugin Resource Extends
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Uwe Tews
+ * @author Rodney Rehm
+ */
/**
-* Smarty Internal Plugin Resource Extends
-*
-* Implements the file system as resource for Smarty which {extend}s a chain of template files templates
-*
-* @package Smarty
-* @subpackage TemplateResources
-*/
-class Smarty_Internal_Resource_Extends extends Smarty_Resource {
-
+ * Smarty Internal Plugin Resource Extends
+ * Implements the file system as resource for Smarty which {extend}s a chain of template files templates
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ */
+class Smarty_Internal_Resource_Extends extends Smarty_Resource
+{
/**
- * mbstring.overload flag
- *
- * @var int
- */
+ * mbstring.overload flag
+ *
+ * @var int
+ */
public $mbstring_overload = 0;
/**
- * populate Source Object with meta data from Resource
- *
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
- */
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ * populate Source Object with meta data from Resource
+ *
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @throws SmartyException
+ */
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
$uid = '';
$sources = array();
$components = explode('|', $source->name);
$exists = true;
foreach ($components as $component) {
- $s = Smarty_Resource::source(null, $source->smarty, $component);
- if ($s->type == 'php') {
- throw new SmartyException("Resource type {$s->type} cannot be used with the extends resource type");
+ /* @var \Smarty_Template_Source $_s */
+ $_s = Smarty_Template_Source::load(null, $source->smarty, $component);
+ if ($_s->type == 'php') {
+ throw new SmartyException("Resource type {$_s->type} cannot be used with the extends resource type");
}
- $sources[$s->uid] = $s;
- $uid .= $s->filepath;
- if ($_template && $_template->smarty->compile_check) {
- $exists = $exists && $s->exists;
+ $sources[ $_s->uid ] = $_s;
+ $uid .= $_s->filepath;
+ if ($_template) {
+ $exists = $exists && $_s->exists;
}
}
$source->components = $sources;
- $source->filepath = $s->filepath;
+ $source->filepath = $_s->filepath;
$source->uid = sha1($uid);
- if ($_template && $_template->smarty->compile_check) {
- $source->timestamp = $s->timestamp;
- $source->exists = $exists;
+ $source->exists = $exists;
+ if ($_template) {
+ $source->timestamp = $_s->timestamp;
}
- // need the template at getContent()
- $source->template = $_template;
}
/**
- * populate Source Object with timestamp and exists from Resource
- *
- * @param Smarty_Template_Source $source source object
- */
+ * populate Source Object with timestamp and exists from Resource
+ *
+ * @param Smarty_Template_Source $source source object
+ */
public function populateTimestamp(Smarty_Template_Source $source)
{
$source->exists = true;
- foreach ($source->components as $s) {
- $source->exists = $source->exists && $s->exists;
+ /* @var \Smarty_Template_Source $_s */
+ foreach ($source->components as $_s) {
+ $source->exists = $source->exists && $_s->exists;
}
- $source->timestamp = $s->timestamp;
+ $source->timestamp = $source->exists ? $_s->getTimeStamp() : false;
}
/**
- * Load template's source from files into current template object
- *
- * @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
- */
+ * Load template's source from files 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)
{
if (!$source->exists) {
throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
}
- $this->mbstring_overload = ini_get('mbstring.func_overload') & 2;
- $_rdl = preg_quote($source->smarty->right_delimiter);
- $_ldl = preg_quote($source->smarty->left_delimiter);
- if (!$source->smarty->auto_literal) {
- $al = '\s*';
- } else {
- $al = '';
- }
$_components = array_reverse($source->components);
- $_first = reset($_components);
- $_last = end($_components);
-
- foreach ($_components as $_component) {
- // register dependency
- if ($_component != $_first) {
- $source->template->properties['file_dependency'][$_component->uid] = array($_component->filepath, $_component->timestamp, $_component->type);
- }
+ $_content = '';
+ /* @var \Smarty_Template_Source $_s */
+ foreach ($_components as $_s) {
// read content
- $source->filepath = $_component->filepath;
- $_content = $_component->content;
-
- // extend sources
- if ($_component != $_last) {
- if (preg_match_all("!({$_ldl}{$al}block\s(.+?)\s*{$_rdl})!", $_content, $_open) !=
- preg_match_all("!({$_ldl}{$al}/block\s*{$_rdl})!", $_content, $_close)) {
- throw new SmartyException("unmatched {block} {/block} pairs in template {$_component->type} '{$_component->name}'");
- }
- preg_match_all("!{$_ldl}{$al}block\s(.+?)\s*{$_rdl}|{$_ldl}{$al}/block\s*{$_rdl}|{$_ldl}\*([\S\s]*?)\*{$_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE);
- $_result_count = count($_result[0]);
- $_start = 0;
- while ($_start+1 < $_result_count) {
- $_end = 0;
- $_level = 1;
- if (($this->mbstring_overload ? mb_substr($_result[0][$_start][0],0,mb_strlen($source->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start][0],0,strlen($source->smarty->left_delimiter)+1)) == $source->smarty->left_delimiter.'*') {
- $_start++;
- continue;
- }
- while ($_level != 0) {
- $_end++;
- if (($this->mbstring_overload ? mb_substr($_result[0][$_start + $_end][0],0,mb_strlen($source->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start + $_end][0],0,strlen($source->smarty->left_delimiter)+1)) == $source->smarty->left_delimiter.'*') {
- continue;
- }
- if (!strpos($_result[0][$_start + $_end][0], '/')) {
- $_level++;
- } else {
- $_level--;
- }
- }
- $_block_content = str_replace($source->smarty->left_delimiter . '$smarty.block.parent' . $source->smarty->right_delimiter, '%%%%SMARTY_PARENT%%%%',
- ($this->mbstring_overload ? mb_substr($_content, $_result[0][$_start][1] + mb_strlen($_result[0][$_start][0], 'latin1'), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + mb_strlen($_result[0][$_start][0], 'latin1'), 'latin1') : substr($_content, $_result[0][$_start][1] + strlen($_result[0][$_start][0]), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + strlen($_result[0][$_start][0]))));
- Smarty_Internal_Compile_Block::saveBlockData($_block_content, $_result[0][$_start][0], $source->template, $_component->filepath);
- $_start = $_start + $_end + 1;
- }
- } else {
- return $_content;
- }
+ $_content .= $_s->getContent();
}
+ return $_content;
}
/**
- * Determine basename for compiled filename
- *
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
- */
+ * 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 str_replace(':', '.', basename($source->filepath));
}
+ /*
+ * Disable timestamp checks for extends resource.
+ * The individual source components will be checked.
+ *
+ * @return bool
+ */
+ public function checkTimestamps()
+ {
+ return false;
+ }
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_resource_file.php b/include/smarty/libs/sysplugins/smarty_internal_resource_file.php
index 48b391d20..b15e3cc6a 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_resource_file.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_resource_file.php
@@ -2,21 +2,111 @@
/**
* Smarty Internal Plugin Resource File
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
/**
* Smarty Internal Plugin Resource File
- *
* Implements the file system as resource for Smarty templates
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-class Smarty_Internal_Resource_File extends Smarty_Resource {
+class Smarty_Internal_Resource_File extends Smarty_Resource
+{
+ /**
+ * build template filepath by traversing the template_dir array
+ *
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return string fully qualified filepath
+ * @throws SmartyException
+ */
+ protected function buildFilepath(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
+ {
+ $file = $source->name;
+ // absolute file ?
+ if ($file[0] == '/' || $file[1] == ':') {
+ $file = $source->smarty->_realpath($file, true);
+ return is_file($file) ? $file : false;
+ }
+ // go relative to a given template?
+ if ($file[0] == '.' && $_template && isset($_template->parent) && $_template->parent->_objType == 2 &&
+ preg_match('#^[.]{1,2}[\\\/]#', $file)
+ ) {
+ if ($_template->parent->source->type != 'file' && $_template->parent->source->type != 'extends' &&
+ !isset($_template->parent->_cache['allow_relative_path'])
+ ) {
+ throw new SmartyException("Template '{$file}' cannot be relative to template of resource type '{$_template->parent->source->type}'");
+ }
+ $path = dirname($_template->parent->source->filepath) . DS . $file;
+ // normalize path
+ $path = $source->smarty->_realpath($path);
+ // files relative to a template only get one shot
+ return is_file($path) ? $path : false;
+ }
+ // normalize DS
+ if (strpos($file, DS == '/' ? '\\' : '/') !== false) {
+ $file = str_replace(DS == '/' ? '\\' : '/', DS, $file);
+ }
+
+ $_directories = $source->smarty->getTemplateDir(null, $source->isConfig);
+ // template_dir index?
+ if ($file[0] == '[' && preg_match('#^\[([^\]]+)\](.+)$#', $file, $fileMatch)) {
+ $file = $fileMatch[2];
+ $_indices = explode(',', $fileMatch[1]);
+ $_index_dirs = array();
+ foreach ($_indices as $index) {
+ $index = trim($index);
+ // try string indexes
+ if (isset($_directories[$index])) {
+ $_index_dirs[] = $_directories[$index];
+ } elseif (is_numeric($index)) {
+ // try numeric index
+ $index = (int) $index;
+ if (isset($_directories[$index])) {
+ $_index_dirs[] = $_directories[$index];
+ } else {
+ // try at location index
+ $keys = array_keys($_directories);
+ if (isset($_directories[$keys[$index]])) {
+ $_index_dirs[] = $_directories[$keys[$index]];
+ }
+ }
+ }
+ }
+ if (empty($_index_dirs)) {
+ // index not found
+ return false;
+ } else {
+ $_directories = $_index_dirs;
+ }
+ }
+
+ // relative file name?
+ foreach ($_directories as $_directory) {
+ $path = $_directory . $file;
+ if (is_file($path)) {
+ return (strpos($path, '.' . DS) !== false) ? $source->smarty->_realpath($path) : $path;
+ }
+ }
+ if (!isset($_index_dirs)) {
+ // Could be relative to cwd
+ $path = $source->smarty->_realpath($file, true);
+ if (is_file($path)) {
+ return $path;
+ }
+ }
+ // Use include path ?
+ if ($source->smarty->use_include_path) {
+ return $source->smarty->ext->_getIncludePath->getIncludePath($_directories, $file, $source->smarty);
+ }
+ return false;
+ }
/**
* populate Source Object with meta data from Resource
@@ -24,20 +114,22 @@ class Smarty_Internal_Resource_File extends Smarty_Resource {
* @param Smarty_Template_Source $source source object
* @param Smarty_Internal_Template $_template template object
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
$source->filepath = $this->buildFilepath($source, $_template);
if ($source->filepath !== false) {
- if (is_object($source->smarty->security_policy)) {
- $source->smarty->security_policy->isTrustedResourceDir($source->filepath);
+ if (isset($source->smarty->security_policy) && is_object($source->smarty->security_policy)) {
+ $source->smarty->security_policy->isTrustedResourceDir($source->filepath, $source->isConfig);
}
-
+ $source->exists = true;
$source->uid = sha1($source->filepath);
- if ($source->smarty->compile_check && !isset($source->timestamp)) {
- $source->timestamp = @filemtime($source->filepath);
- $source->exists = !!$source->timestamp;
+ if ($source->smarty->compile_check == 1) {
+ $source->timestamp = filemtime($source->filepath);
}
+ } else {
+ $source->timestamp = false;
+ $source->exists = false;
}
}
@@ -48,43 +140,40 @@ class Smarty_Internal_Resource_File extends Smarty_Resource {
*/
public function populateTimestamp(Smarty_Template_Source $source)
{
- $source->timestamp = @filemtime($source->filepath);
- $source->exists = !!$source->timestamp;
+ if (!$source->exists) {
+ $source->timestamp = $source->exists = is_file($source->filepath);
+ }
+ if ($source->exists) {
+ $source->timestamp = filemtime($source->filepath);
+ }
}
/**
* Load template's source from file into current template object
*
- * @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
+ * @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)
{
- if ($source->timestamp) {
+ if ($source->exists) {
return file_get_contents($source->filepath);
}
- if ($source instanceof Smarty_Config_Source) {
- throw new SmartyException("Unable to read config {$source->type} '{$source->name}'");
- }
- throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
+ throw new SmartyException('Unable to read ' . ($source->isConfig ? 'config' : 'template') .
+ " {$source->type} '{$source->name}'");
}
/**
* Determine basename for compiled filename
*
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
*/
public function getBasename(Smarty_Template_Source $source)
{
- $_file = $source->name;
- if (($_pos = strpos($_file, ']')) !== false) {
- $_file = substr($_file, $_pos + 1);
- }
- return basename($_file);
+ return basename($source->filepath);
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_resource_php.php b/include/smarty/libs/sysplugins/smarty_internal_resource_php.php
index 7cd8baeec..62680625c 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_resource_php.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_resource_php.php
@@ -2,76 +2,56 @@
/**
* Smarty Internal Plugin Resource PHP
- *
* Implements the file system as resource for PHP templates
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
-class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
+class Smarty_Internal_Resource_Php extends Smarty_Internal_Resource_File
+{
/**
- * container for short_open_tag directive's value before executing PHP templates
- * @var string
+ * Flag that it's an uncompiled resource
+ *
+ * @var bool
*/
- protected $short_open_tag;
-
+ public $uncompiled = true;
/**
- * Create a new PHP Resource
+ * container for short_open_tag directive's value before executing PHP templates
*
+ * @var string
*/
- public function __construct()
- {
- $this->short_open_tag = ini_get( 'short_open_tag' );
- }
+ protected $short_open_tag;
/**
- * populate Source Object with meta data from Resource
+ * Resource does implement populateCompiledFilepath() method
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
- * @return void
+ * @var bool
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
- {
- $source->filepath = $this->buildFilepath($source, $_template);
+ public $hasCompiledHandler = true;
- if ($source->filepath !== false) {
- if (is_object($source->smarty->security_policy)) {
- $source->smarty->security_policy->isTrustedResourceDir($source->filepath);
- }
-
- $source->uid = sha1($source->filepath);
- if ($source->smarty->compile_check) {
- $source->timestamp = @filemtime($source->filepath);
- $source->exists = !!$source->timestamp;
- }
- }
- }
/**
- * populate Source Object with timestamp and exists from Resource
- *
- * @param Smarty_Template_Source $source source object
- * @return void
+ * Create a new PHP Resource
+
*/
- public function populateTimestamp(Smarty_Template_Source $source)
+ public function __construct()
{
- $source->timestamp = @filemtime($source->filepath);
- $source->exists = !!$source->timestamp;
+ $this->short_open_tag = ini_get('short_open_tag');
}
/**
* Load template's source from file into current template object
*
- * @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
+ * @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)
{
- if ($source->timestamp) {
+ if ($source->exists) {
return '';
}
throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
@@ -80,20 +60,19 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
/**
* Render and output the template (without using the compiler)
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
- * @throws SmartyException if template cannot be loaded or allow_php_templates is disabled
+ * @throws SmartyException if template cannot be loaded or allow_php_templates is disabled
*/
public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template)
{
- $_smarty_template = $_template;
-
if (!$source->smarty->allow_php_templates) {
throw new SmartyException("PHP templates are disabled");
}
if (!$source->exists) {
- if ($_template->parent instanceof Smarty_Internal_Template) {
+ if (isset($_template->parent) && $_template->parent->_objType == 2) {
$parent_resource = " in '{$_template->parent->template_resource}'";
} else {
$parent_resource = '';
@@ -105,10 +84,25 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
extract($_template->getTemplateVars());
// include PHP template with short open tags enabled
- ini_set( 'short_open_tag', '1' );
+ ini_set('short_open_tag', '1');
+ /** @var Smarty_Internal_Template $_smarty_template
+ * used in included file
+ */
+ $_smarty_template = $_template;
include($source->filepath);
- ini_set( 'short_open_tag', $this->short_open_tag );
+ ini_set('short_open_tag', $this->short_open_tag);
}
-}
-?> \ No newline at end of file
+ /**
+ * populate compiled object with compiled filepath
+ *
+ * @param Smarty_Template_Compiled $compiled compiled object
+ * @param Smarty_Internal_Template $_template template object (is ignored)
+ */
+ public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template)
+ {
+ $compiled->filepath = false;
+ $compiled->timestamp = false;
+ $compiled->exists = false;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_resource_registered.php b/include/smarty/libs/sysplugins/smarty_internal_resource_registered.php
index 44497b922..69b396b6a 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_resource_registered.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_resource_registered.php
@@ -2,31 +2,31 @@
/**
* Smarty Internal Plugin Resource Registered
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
/**
* Smarty Internal Plugin Resource Registered
- *
* Implements the registered resource for Smarty template
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
* @deprecated
*/
-class Smarty_Internal_Resource_Registered extends Smarty_Resource {
-
+class Smarty_Internal_Resource_Registered extends Smarty_Resource
+{
/**
* populate Source Object with meta data from Resource
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
$source->filepath = $source->type . ':' . $source->name;
$source->uid = sha1($source->filepath);
@@ -39,7 +39,8 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource {
/**
* populate Source Object with timestamp and exists from Resource
*
- * @param Smarty_Template_Source $source source object
+ * @param Smarty_Template_Source $source source object
+ *
* @return void
*/
public function populateTimestamp(Smarty_Template_Source $source)
@@ -51,45 +52,48 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource {
/**
* Get timestamp (epoch) the template source was modified
*
- * @param Smarty_Template_Source $source source object
- * @return integer|boolean timestamp (epoch) the template was modified, false if resources has no timestamp
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return integer|boolean timestamp (epoch) the template was modified, false if resources has no timestamp
*/
public function getTemplateTimestamp(Smarty_Template_Source $source)
{
// return timestamp
$time_stamp = false;
call_user_func_array($source->smarty->registered_resources[$source->type][0][1], array($source->name, &$time_stamp, $source->smarty));
+
return is_numeric($time_stamp) ? (int) $time_stamp : $time_stamp;
}
/**
* Load template's source by invoking the registered callback into current template object
*
- * @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
+ * @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)
{
// return template string
- $t = call_user_func_array($source->smarty->registered_resources[$source->type][0][0], array($source->name, &$source->content, $source->smarty));
+ $content = null;
+ $t = call_user_func_array($source->smarty->registered_resources[$source->type][0][0], array($source->name, &$content, $source->smarty));
if (is_bool($t) && !$t) {
throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
}
- return $source->content;
+
+ return $content;
}
/**
* Determine basename for compiled filename
*
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
*/
- protected function getBasename(Smarty_Template_Source $source)
+ public function getBasename(Smarty_Template_Source $source)
{
return basename($source->name);
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_resource_stream.php b/include/smarty/libs/sysplugins/smarty_internal_resource_stream.php
index 58086c179..8a902268c 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_resource_stream.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_resource_stream.php
@@ -1,36 +1,35 @@
<?php
/**
-* Smarty Internal Plugin Resource Stream
-*
-* Implements the streams as resource for Smarty template
-*
-* @package Smarty
-* @subpackage TemplateResources
-* @author Uwe Tews
-* @author Rodney Rehm
-*/
+ * Smarty Internal Plugin Resource Stream
+ * Implements the streams as resource for Smarty template
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Uwe Tews
+ * @author Rodney Rehm
+ */
/**
-* Smarty Internal Plugin Resource Stream
-*
-* Implements the streams as resource for Smarty template
-*
-* @link http://php.net/streams
-* @package Smarty
-* @subpackage TemplateResources
-*/
-class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled {
-
+ * Smarty Internal Plugin Resource Stream
+ * Implements the streams as resource for Smarty template
+ *
+ * @link http://php.net/streams
+ * @package Smarty
+ * @subpackage TemplateResources
+ */
+class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled
+{
/**
- * populate Source Object with meta data from Resource
- *
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
- * @return void
- */
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ * populate Source Object with meta data from Resource
+ *
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return void
+ */
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
- if(strpos($source->resource, '://') !== false) {
+ if (strpos($source->resource, '://') !== false) {
$source->filepath = $source->resource;
} else {
$source->filepath = str_replace(':', '://', $source->resource);
@@ -42,12 +41,13 @@ class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled {
}
/**
- * Load template's source from stream into current template object
- *
- * @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
- */
+ * Load template's source from stream 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)
{
$t = '';
@@ -58,6 +58,7 @@ class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled {
$t .= $current_line;
}
fclose($fp);
+
return $t;
} else {
return false;
@@ -65,13 +66,15 @@ class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled {
}
/**
- * modify resource_name according to resource handlers specifications
- *
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
- * @return string unique resource name
- */
- protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
+ * 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)
{
return get_class($this) . '#' . $resource_name;
}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_resource_string.php b/include/smarty/libs/sysplugins/smarty_internal_resource_string.php
index 9571337b0..75e99e6fb 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_resource_string.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_resource_string.php
@@ -2,32 +2,31 @@
/**
* Smarty Internal Plugin Resource String
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
/**
* Smarty Internal Plugin Resource String
- *
* Implements the strings as resource for Smarty template
- *
* {@internal unlike eval-resources the compiled state of string-resources is saved for subsequent access}}
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-class Smarty_Internal_Resource_String extends Smarty_Resource {
-
+class Smarty_Internal_Resource_String extends Smarty_Resource
+{
/**
* populate Source Object with meta data from Resource
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
$source->uid = $source->filepath = sha1($source->name);
$source->timestamp = 0;
@@ -38,18 +37,21 @@ class Smarty_Internal_Resource_String extends Smarty_Resource {
* Load template's source from $resource_name into current template object
*
* @uses decode() to decode base64 and urlencoded template_resources
- * @param Smarty_Template_Source $source source object
- * @return string template source
+ *
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string template source
*/
public function getContent(Smarty_Template_Source $source)
{
return $this->decode($source->name);
}
-
+
/**
* decode base64 and urlencode
*
- * @param string $string template_resource to decode
+ * @param string $string template_resource to decode
+ *
* @return string decoded template_resource
*/
protected function decode($string)
@@ -62,35 +64,34 @@ class Smarty_Internal_Resource_String extends Smarty_Resource {
return urldecode(substr($string, 10));
}
}
-
+
return $string;
}
-
+
/**
* modify resource_name according to resource handlers specifications
*
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
+ * @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
*/
- protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
+ public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
{
- return get_class($this) . '#' .$this->decode($resource_name);
+ return get_class($this) . '#' . $this->decode($resource_name);
}
/**
* Determine basename for compiled filename
- *
* Always returns an empty string.
*
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
*/
- protected function getBasename(Smarty_Template_Source $source)
+ public function getBasename(Smarty_Template_Source $source)
{
return '';
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php
new file mode 100644
index 000000000..4e2fb83e6
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * Inline Runtime Methods render, setSourceByUid, setupSubTemplate
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ *
+ **/
+class Smarty_Internal_Runtime_CacheModify
+{
+ /**
+ * check client side cache
+ *
+ * @param Smarty_Internal_Template $_template
+ * @param string $content
+ */
+ public function cacheModifiedCheck(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content)
+ {
+ $_isCached = $_template->isCached() && !$_template->compiled->has_nocache_code;
+ $_last_modified_date =
+ @substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_SERVER['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3);
+ if ($_isCached && $cached->timestamp <= strtotime($_last_modified_date)) {
+ switch (PHP_SAPI) {
+ case 'cgi': // php-cgi < 5.3
+ case 'cgi-fcgi': // php-cgi >= 5.3
+ case 'fpm-fcgi': // php-fpm >= 5.3.3
+ header('Status: 304 Not Modified');
+ break;
+
+ case 'cli':
+ if ( /* ^phpunit */
+ !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */
+ ) {
+ $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified';
+ }
+ break;
+
+ default:
+ if ( /* ^phpunit */
+ !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */
+ ) {
+ $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified';
+ } else {
+ header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
+ }
+ break;
+ }
+ } else {
+ switch (PHP_SAPI) {
+ case 'cli':
+ if ( /* ^phpunit */
+ !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */
+ ) {
+ $_SERVER['SMARTY_PHPUNIT_HEADERS'][] =
+ 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT';
+ }
+ break;
+ default:
+ header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT');
+ break;
+ }
+ echo $content;
+ }
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php
new file mode 100644
index 000000000..ce6749770
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Smarty Internal Extension
+ * This file contains the Smarty template extension to create a code frame
+ *
+ * @package Smarty
+ * @subpackage Template
+ * @author Uwe Tews
+ */
+
+/**
+ * Class Smarty_Internal_Extension_CodeFrame
+ * Create code frame for compiled and cached templates
+ */
+class Smarty_Internal_Runtime_CodeFrame
+{
+ /**
+ * Create code frame for compiled and cached templates
+ *
+ * @param Smarty_Internal_Template $_template
+ * @param string $content optional template content
+ * @param string $functions compiled template function and block code
+ * @param bool $cache flag for cache file
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ *
+ * @return string
+ */
+ public function create(Smarty_Internal_Template $_template, $content = '', $functions = '', $cache = false,
+ Smarty_Internal_TemplateCompilerBase $compiler = null)
+ {
+ // build property code
+ $properties[ 'has_nocache_code' ] = $_template->compiled->has_nocache_code;
+ $properties[ 'version' ] = Smarty::SMARTY_VERSION;
+ $properties[ 'unifunc' ] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
+ if (!$cache) {
+ $properties[ 'file_dependency' ] = $_template->compiled->file_dependency;
+ $properties[ 'includes' ] = $_template->compiled->includes;
+ if (!empty($compiler->tpl_function)) {
+ $properties[ 'tpl_function' ] = $compiler->tpl_function;
+ }
+ } else {
+ $properties[ 'file_dependency' ] = $_template->cached->file_dependency;
+ $properties[ 'cache_lifetime' ] = $_template->cache_lifetime;
+ if (!empty($_template->tpl_function)) {
+ $properties[ 'tpl_function' ] = $_template->tpl_function;
+ }
+ }
+ $output = "<?php\n";
+ $output .= "/* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . strftime("%Y-%m-%d %H:%M:%S") .
+ "\n from \"" . $_template->source->filepath . "\" */\n\n";
+
+ $dec = "\$_smarty_tpl->smarty->ext->_validateCompiled->decodeProperties(\$_smarty_tpl, " .
+ var_export($properties, true) . ',' . ($cache ? 'true' : 'false') . ")";
+ $output .= "if ({$dec}) {\n";
+ $output .= "function {$properties['unifunc']} (\$_smarty_tpl) {\n";
+ // include code for plugins
+ if (!$cache) {
+ if (!empty($_template->compiled->required_plugins[ 'compiled' ])) {
+ foreach ($_template->compiled->required_plugins[ 'compiled' ] as $tmp) {
+ foreach ($tmp as $data) {
+ $file = addslashes($data[ 'file' ]);
+ if (is_array($data[ 'function' ])) {
+ $output .= "if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) require_once '{$file}';\n";
+ } else {
+ $output .= "if (!is_callable('{$data['function']}')) require_once '{$file}';\n";
+ }
+ }
+ }
+ }
+ if ($_template->caching && !empty($_template->compiled->required_plugins[ 'nocache' ])) {
+ $_template->compiled->has_nocache_code = true;
+ $output .= "echo '/*%%SmartyNocache:{$_template->compiled->nocache_hash}%%*/<?php \$_smarty = \$_smarty_tpl->smarty; ";
+ foreach ($_template->compiled->required_plugins[ 'nocache' ] as $tmp) {
+ foreach ($tmp as $data) {
+ $file = addslashes($data[ 'file' ]);
+ if (is_Array($data[ 'function' ])) {
+ $output .= addslashes("if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) require_once '{$file}';\n");
+ } else {
+ $output .= addslashes("if (!is_callable('{$data['function']}')) require_once '{$file}';\n");
+ }
+ }
+ }
+ $output .= "?>/*/%%SmartyNocache:{$_template->compiled->nocache_hash}%%*/';\n";
+ }
+ }
+ $output .= "?>\n";
+ $output .= $content;
+ $output .= "<?php }\n?>";
+ $output .= $functions;
+ $output .= "<?php }\n";
+ // remove unneeded PHP tags
+ return preg_replace(array('/\s*\?>[\n]?<\?php\s*/', '/\?>\s*$/'), array("\n", ''), $output);
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php
new file mode 100644
index 000000000..4b664c38e
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Smarty Internal Plugin Filter Handler
+ * Smarty filter handler class
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+
+/**
+ * Class for filter processing
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ */
+class Smarty_Internal_Runtime_FilterHandler
+{
+ /**
+ * Run filters over content
+ * The filters will be lazy loaded if required
+ * class name format: Smarty_FilterType_FilterName
+ * plugin filename format: filtertype.filtername.php
+ * Smarty2 filter plugins could be used
+ *
+ * @param string $type the type of filter ('pre','post','output') which shall run
+ * @param string $content the content which shall be processed by the filters
+ * @param Smarty_Internal_Template $template template object
+ *
+ * @throws SmartyException
+ * @return string the filtered content
+ */
+ public function runFilter($type, $content, Smarty_Internal_Template $template)
+ {
+ // loop over autoload filters of specified type
+ if (!empty($template->smarty->autoload_filters[$type])) {
+ foreach ((array) $template->smarty->autoload_filters[$type] as $name) {
+ $plugin_name = "Smarty_{$type}filter_{$name}";
+ if (function_exists($plugin_name)) {
+ $callback = $plugin_name;
+ } elseif (class_exists($plugin_name, false) && is_callable(array($plugin_name, 'execute'))) {
+ $callback = array($plugin_name, 'execute');
+ } elseif ($template->smarty->loadPlugin($plugin_name, false)) {
+ if (function_exists($plugin_name)) {
+ // use loaded Smarty2 style plugin
+ $callback = $plugin_name;
+ } elseif (class_exists($plugin_name, false) && is_callable(array($plugin_name, 'execute'))) {
+ // loaded class of filter plugin
+ $callback = array($plugin_name, 'execute');
+ } else {
+ throw new SmartyException("Auto load {$type}-filter plugin method \"{$plugin_name}::execute\" not callable");
+ }
+ } else {
+ // nothing found, throw exception
+ throw new SmartyException("Unable to auto load {$type}-filter plugin \"{$plugin_name}\"");
+ }
+ $content = call_user_func($callback, $content, $template);
+ }
+ }
+ // loop over registered filters of specified type
+ if (!empty($template->smarty->registered_filters[$type])) {
+ foreach ($template->smarty->registered_filters[$type] as $key => $name) {
+ if (is_array($template->smarty->registered_filters[$type][$key])) {
+ $content = call_user_func($template->smarty->registered_filters[$type][$key], $content, $template);
+ } else {
+ $content = $template->smarty->registered_filters[$type][$key]($content, $template);
+ }
+ }
+ }
+ // return filtered output
+ return $content;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php
new file mode 100644
index 000000000..689636adb
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php
@@ -0,0 +1,47 @@
+<?php
+
+/**
+ * Foreach Runtime Methods count
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ *
+ **/
+class Smarty_Internal_Runtime_Foreach
+{
+ /**
+ * [util function] counts an array, arrayAccess/traversable or PDOStatement object
+ *
+ * @param mixed $value
+ *
+ * @return int the count for arrays and objects that implement countable, 1 for other objects that don't, and 0
+ * for empty elements
+ */
+ public function count($value)
+ {
+ if (is_array($value) === true || $value instanceof Countable) {
+ return count($value);
+ } elseif ($value instanceof IteratorAggregate) {
+ // Note: getIterator() returns a Traversable, not an Iterator
+ // thus rewind() and valid() methods may not be present
+ return iterator_count($value->getIterator());
+ } elseif ($value instanceof Iterator) {
+ if ($value instanceof Generator) {
+ return 1;
+ }
+ return iterator_count($value);
+ } elseif ($value instanceof PDOStatement) {
+ return $value->rowCount();
+ } elseif ($value instanceof Traversable) {
+ return iterator_count($value);
+ } elseif ($value instanceof ArrayAccess) {
+ if ($value->offsetExists(0)) {
+ return 1;
+ }
+ } elseif (is_object($value)) {
+ return count($value);
+ }
+ return 0;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php
new file mode 100644
index 000000000..72149cd35
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php
@@ -0,0 +1,180 @@
+<?php
+/**
+ * Smarty read include path plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Monte Ohrt
+ */
+
+/**
+ * Smarty Internal Read Include Path Class
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ */
+class Smarty_Internal_Runtime_GetIncludePath
+{
+ /**
+ * include path cache
+ *
+ * @var string
+ */
+ public $_include_path = '';
+
+ /**
+ * include path directory cache
+ *
+ * @var array
+ */
+ public $_include_dirs = array();
+
+ /**
+ * include path directory cache
+ *
+ * @var array
+ */
+ public $_user_dirs = array();
+
+ /**
+ * stream cache
+ *
+ * @var string[]
+ */
+ public $isFile = array();
+
+ /**
+ * stream cache
+ *
+ * @var string[]
+ */
+ public $isPath = array();
+
+ /**
+ * stream cache
+ *
+ * @var int[]
+ */
+ public $number = array();
+
+ /**
+ * status cache
+ *
+ * @var bool
+ */
+ public $_has_stream_include = null;
+
+ /**
+ * Number for array index
+ *
+ * @var int
+ */
+ public $counter = 0;
+
+ /**
+ * Check if include path was updated
+ *
+ * @param \Smarty $smarty
+ *
+ * @return bool
+ */
+ public function isNewIncludePath(Smarty $smarty)
+ {
+ $_i_path = get_include_path();
+ if ($this->_include_path != $_i_path) {
+ $this->_include_dirs = array();
+ $this->_include_path = $_i_path;
+ $_dirs = (array) explode(PATH_SEPARATOR, $_i_path);
+ foreach ($_dirs as $_path) {
+ if (is_dir($_path)) {
+ $this->_include_dirs[] = $smarty->_realpath($_path . DS, true);
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * return array with include path directories
+ *
+ * @param \Smarty $smarty
+ *
+ * @return array
+ */
+ public function getIncludePathDirs(Smarty $smarty)
+ {
+ $this->isNewIncludePath($smarty);
+ return $this->_include_dirs;
+ }
+
+ /**
+ * Return full file path from PHP include_path
+ *
+ * @param string[] $dirs
+ * @param string $file
+ * @param \Smarty $smarty
+ *
+ * @return bool|string full filepath or false
+ *
+ */
+ public function getIncludePath($dirs, $file, Smarty $smarty)
+ {
+ //if (!(isset($this->_has_stream_include) ? $this->_has_stream_include : $this->_has_stream_include = false)) {
+ if (!(isset($this->_has_stream_include) ? $this->_has_stream_include : $this->_has_stream_include = function_exists('stream_resolve_include_path'))) {
+ $this->isNewIncludePath($smarty);
+ }
+ // try PHP include_path
+ foreach ($dirs as $dir) {
+ $dir_n = isset($this->number[$dir]) ? $this->number[$dir] : $this->number[$dir] = $this->counter ++;
+ if (isset($this->isFile[$dir_n][$file])) {
+ if ($this->isFile[$dir_n][$file]) {
+ return $this->isFile[$dir_n][$file];
+ } else {
+ continue;
+ }
+ }
+ if (isset($this->_user_dirs[$dir_n])) {
+ if (false === $this->_user_dirs[$dir_n]) {
+ continue;
+ } else {
+ $dir = $this->_user_dirs[$dir_n];
+ }
+ } else {
+ if ($dir[0] == '/' || $dir[1] == ':') {
+ $dir = str_ireplace(getcwd(), '.', $dir);
+ if ($dir[0] == '/' || $dir[1] == ':') {
+ $this->_user_dirs[$dir_n] = false;
+ continue;
+ }
+ }
+ $dir = substr($dir, 2);
+ $this->_user_dirs[$dir_n] = $dir;
+ }
+ if ($this->_has_stream_include) {
+ $path = stream_resolve_include_path($dir . (isset($file) ? $file : ''));
+ if ($path) {
+ return $this->isFile[$dir_n][$file] = $path;
+ }
+ } else {
+ foreach ($this->_include_dirs as $key => $_i_path) {
+ $path = isset($this->isPath[$key][$dir_n]) ? $this->isPath[$key][$dir_n] : $this->isPath[$key][$dir_n] = is_dir($_dir_path = $_i_path .
+ $dir) ? $_dir_path : false;
+ if ($path === false) {
+ continue;
+ }
+ if (isset($file)) {
+ $_file = $this->isFile[$dir_n][$file] = (is_file($path . $file)) ? $path . $file : false;
+ if ($_file) {
+ return $_file;
+ }
+ } else {
+ // no file was given return directory path
+ return $path;
+ }
+ }
+ }
+ }
+ return false;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_hhvm.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_hhvm.php
new file mode 100644
index 000000000..117cd8166
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_hhvm.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * Runtime Extension Hhvm
+ *
+ * include patch for modified compiled or cached templates
+ * HHVM does not check if file was modified when including same file multiple times
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Runtime_Hhvm
+{
+ /**
+ * @param \Smarty_Internal_Template $_template
+ * @param string $file file name
+ *
+ * @return mixed
+ */
+ static function includeHhvm(Smarty_Internal_Template $_template, $file)
+ {
+ $_smarty_tpl = $_template;
+ $tmp_file = $file . preg_replace('![^\w]+!', '_', uniqid(rand(), true)) . '.php';
+ file_put_contents($tmp_file, file_get_contents($file));
+ $result = @include $tmp_file;
+ @unlink($tmp_file);
+ return $result;
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php
new file mode 100644
index 000000000..08a560606
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php
@@ -0,0 +1,233 @@
+<?php
+
+/**
+ * Inheritance Runtime Methods processBlock, endChild, init
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ *
+ **/
+class Smarty_Internal_Runtime_Inheritance
+{
+
+ /**
+ * State machine
+ * - 0 idle next extends will create a new inheritance tree
+ * - 1 processing child template
+ * - 2 wait for next inheritance template
+ * - 3 assume parent template, if child will loaded goto state 1
+ * a call to a sub template resets the state to 0
+ *
+ * @var int
+ */
+ public $state = 0;
+
+ /**
+ * Array of block parameter of known {block} tags
+ *
+ * @var array
+ */
+ public $blockParameter = array();
+
+ /**
+ * inheritance template nesting level
+ *
+ * @var int
+ */
+ public $inheritanceLevel = 0;
+
+ /**
+ * inheritance template index
+ *
+ * @var int
+ */
+ public $tplIndex = - 1;
+
+ /**
+ * Array of compiled template file path
+ * - key template index
+ * only used when caching is enabled
+ *
+ * @var []string
+ */
+ public $compiledFilePath = array();
+
+ /**
+ * Current {block} nesting level
+ *
+ * @var int
+ */
+ public $blockNesting = 0;
+
+ /**
+ * Initialize inheritance
+ *
+ * @param \Smarty_Internal_Template $tpl template object of caller
+ * @param bool $initChild if true init for child template
+ * @param array $blockNames outer level block name
+ *
+ */
+ public function init(Smarty_Internal_Template $tpl, $initChild, $blockNames = array())
+ {
+ // if template was from an inner block or template is a parent template create new inheritance root
+ if ($initChild && ($this->blockNesting || $this->state == 3)) {
+ $tpl->ext->_inheritance = new Smarty_Internal_Runtime_Inheritance();
+ $tpl->ext->_inheritance->init($tpl, $initChild, $blockNames);
+ return;
+ }
+ // start of child sub template(s)
+ if ($initChild) {
+ $this->state = 1;
+ if (!$this->inheritanceLevel) {
+ //grab any output of child templates
+ ob_start();
+ }
+ $this->inheritanceLevel ++;
+ }
+ // in parent state {include} will not increment template index
+ if ($this->state != 3) {
+ $this->tplIndex ++;
+ }
+ // if state was waiting for parent change state to parent
+ if ($this->state == 2) {
+ $this->state = 3;
+ }
+ }
+
+ /**
+ * End of child template(s)
+ * - if outer level is reached flush output buffer and switch to wait for parent template state
+ *
+ * @param \Smarty_Internal_Template $tpl template object of caller
+ */
+ public function endChild(Smarty_Internal_Template $tpl)
+ {
+ $this->inheritanceLevel --;
+ if (!$this->inheritanceLevel) {
+ ob_end_clean();
+ $this->state = 2;
+ }
+ }
+
+ /**
+ * Process inheritance {block} tag
+ *
+ * $type 0 = {block}:
+ * - search in inheritance template hierarchy for child blocks
+ * if found call it, otherwise call current block
+ * - ignored for outer level blocks in child templates
+ *
+ * $type 1 = {block}:
+ * - nested {block}
+ * - search in inheritance template hierarchy for child blocks
+ * if found call it, otherwise call current block
+ *
+ * $type 2 = {$smarty.block.child}:
+ * - search in inheritance template hierarchy for child blocks
+ * if found call it, otherwise ignore
+ *
+ * $type 3 = {block append} {block prepend}:
+ * - call parent block
+ *
+ * $type 4 = {$smarty.block.parent}:
+ * - call parent block
+ *
+ * @param \Smarty_Internal_Template $tpl template object of caller
+ * @param int $type call type see above
+ * @param string $name block name
+ * @param array $block block parameter
+ * @param array $callStack call stack with block parameters
+ *
+ * @throws \SmartyException
+ */
+ public function processBlock(Smarty_Internal_Template $tpl, $type = 0, $name, $block, $callStack = array())
+ {
+ if (!isset($this->blockParameter[ $name ])) {
+ $this->blockParameter[ $name ] = array();
+ }
+ if ($this->state == 1) {
+ $block[ 2 ] = count($this->blockParameter[ $name ]);
+ $block[ 3 ] = $this->tplIndex;
+ $this->blockParameter[ $name ][] = $block;
+ return;
+ }
+ if ($type == 3) {
+ if (!empty($callStack)) {
+ $block = array_shift($callStack);
+ } else {
+ return;
+ }
+ } elseif ($type == 4) {
+ if (!empty($callStack)) {
+ array_shift($callStack);
+ if (empty($callStack)) {
+ throw new SmartyException("inheritance: tag {\$smarty.block.parent} used in parent template block '{$name}'");
+ }
+ $block = array_shift($callStack);
+ } else {
+ return;
+ }
+ } else {
+ $index = 0;
+ $blockParameter = &$this->blockParameter[ $name ];
+ if ($type == 0) {
+ $index = $block[ 2 ] = count($blockParameter);
+ $block[ 3 ] = $this->tplIndex;
+ $callStack = array(&$block);
+ } elseif ($type == 1) {
+ $block[ 3 ] = $callStack[ 0 ][ 3 ];
+ for ($i = 0; $i < count($blockParameter); $i ++) {
+ if ($blockParameter[ $i ][ 3 ] <= $block[ 3 ]) {
+ $index = $blockParameter[ $i ][ 2 ];
+ }
+ }
+ $block[ 2 ] = $index;
+ $callStack = array(&$block);
+ } elseif ($type == 2) {
+ $index = $callStack[ 0 ][ 2 ];
+ if ($index == 0) {
+ return;
+ }
+ $callStack = $block = array(1 => false);
+ }
+ $index --;
+ // find lowest level child block
+ while ($index >= 0 && ($type || !$block[ 1 ])) {
+ $block = &$blockParameter[ $index ];
+ array_unshift($callStack, $block);
+ if ($block[ 1 ]) {
+ break;
+ }
+ $index --;
+ }
+ if (isset($block[ 'hide' ]) && $index <= 0) {
+ return;
+ }
+ }
+ $this->blockNesting ++;
+ // {block append} ?
+ if (isset($block[ 'append' ])) {
+ $appendStack = $callStack;
+ if ($type == 0) {
+ array_shift($appendStack);
+ }
+ $this->processBlock($tpl, 3, $name, null, $appendStack);
+ }
+ // call block of current stack level
+ if (isset($block[6])) {
+ $block[6]($tpl, $callStack);
+ } else {
+ $block[0]($tpl, $callStack);
+ }
+ // {block prepend} ?
+ if (isset($block[ 'prepend' ])) {
+ $prependStack = $callStack;
+ if ($type == 0) {
+ array_shift($prependStack);
+ }
+ $this->processBlock($tpl, 3, $name, null, $prependStack);
+ }
+ $this->blockNesting --;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_subtemplate.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_subtemplate.php
new file mode 100644
index 000000000..2c7623f93
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_subtemplate.php
@@ -0,0 +1,203 @@
+<?php
+
+/**
+ * Sub Template Runtime Methods render, setupSubTemplate
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ *
+ **/
+class Smarty_Internal_Runtime_SubTemplate
+{
+
+ /**
+ * Subtemplate template object cache
+ *
+ * @var Smarty_Internal_Template[]
+ */
+ public $tplObjects = array();
+
+ /**
+ * Subtemplate call count
+ *
+ * @var int[]
+ */
+ public $subTplInfo = array();
+
+ /**
+ * Runtime function to render subtemplate
+ *
+ * @param \Smarty_Internal_Template $parent
+ * @param string $template template name
+ * @param mixed $cache_id cache id
+ * @param mixed $compile_id compile id
+ * @param integer $caching cache mode
+ * @param integer $cache_lifetime life time of cache data
+ * @param array $data passed parameter template variables
+ * @param int $scope scope in which {include} should execute
+ * @param bool $forceTplCache cache template object
+ * @param string $uid file dependency uid
+ * @param string $content_func function name
+ *
+ */
+ public function render(Smarty_Internal_Template $parent, $template, $cache_id, $compile_id, $caching,
+ $cache_lifetime, $data, $scope, $forceTplCache, $uid = null, $content_func = null)
+ {
+ // if there are cached template objects calculate $templateID
+ $_templateId =
+ !empty($this->tplObjects) ? $parent->smarty->_getTemplateId($template, $cache_id, $compile_id, $caching) :
+ null;
+ // already in template cache?
+ /* @var Smarty_Internal_Template $tpl */
+ if (isset($_templateId) && isset($this->tplObjects[$_templateId])) {
+ // clone cached template object because of possible recursive call
+ $tpl = clone $this->tplObjects[$_templateId];
+ $tpl->parent = $parent;
+ // if $caching mode changed the compiled resource is invalid
+ if ((bool) $tpl->caching !== (bool) $caching) {
+ unset($tpl->compiled);
+ }
+ // get variables from calling scope
+ $tpl->tpl_vars = $parent->tpl_vars;
+ $tpl->config_vars = $parent->config_vars;
+ // get template functions
+ $tpl->tpl_function = $parent->tpl_function;
+ // copy inheritance object?
+ if (isset($parent->ext->_inheritance)) {
+ $tpl->ext->_inheritance = $parent->ext->_inheritance;
+ } else {
+ unset($tpl->ext->_inheritance);
+ }
+ } else {
+ $tpl = clone $parent;
+ $tpl->parent = $parent;
+ if (!isset($tpl->templateId) || $tpl->templateId !== $_templateId) {
+ $tpl->templateId = $_templateId;
+ $tpl->template_resource = $template;
+ $tpl->cache_id = $cache_id;
+ $tpl->compile_id = $compile_id;
+ if (isset($uid)) {
+ // for inline templates we can get all resource information from file dependency
+ if (isset($tpl->compiled->file_dependency[$uid])) {
+ list($filepath, $timestamp, $resource) = $tpl->compiled->file_dependency[$uid];
+ $tpl->source =
+ new Smarty_Template_Source(isset($tpl->smarty->_cache['resource_handlers'][$resource]) ?
+ $tpl->smarty->_cache['resource_handlers'][$resource] :
+ Smarty_Resource::load($tpl->smarty, $resource), $tpl->smarty,
+ $filepath, $resource, $filepath);
+ $tpl->source->filepath = $filepath;
+ $tpl->source->timestamp = $timestamp;
+ $tpl->source->exists = true;
+ $tpl->source->uid = $uid;
+ } else {
+ $tpl->source = null;
+ }
+ } else {
+ $tpl->source = null;
+ }
+ if (!isset($tpl->source)) {
+ $tpl->source = Smarty_Template_Source::load($tpl);
+ unset($tpl->compiled);
+ }
+ unset($tpl->cached);
+ }
+ }
+ $tpl->caching = $caching;
+ $tpl->cache_lifetime = $cache_lifetime;
+ if ($caching == 9999) {
+ $tpl->cached = $parent->cached;
+ }
+ // set template scope
+ $tpl->scope = $scope;
+ $scopePtr = false;
+ if ($scope & ~Smarty::SCOPE_BUBBLE_UP) {
+ if ($scope == Smarty::SCOPE_GLOBAL) {
+ $tpl->tpl_vars = Smarty::$global_tpl_vars;
+ $tpl->config_vars = $tpl->smarty->config_vars;
+ $scopePtr = true;
+ } else {
+ if ($scope == Smarty::SCOPE_PARENT) {
+ $scopePtr = $parent;
+ } elseif ($scope == Smarty::SCOPE_SMARTY) {
+ $scopePtr = $tpl->smarty;
+ } else {
+ $scopePtr = $tpl;
+ while (isset($scopePtr->parent)) {
+ if ($scopePtr->parent->_objType != 2 && $scope & Smarty::SCOPE_TPL_ROOT) {
+ break;
+ }
+ $scopePtr = $scopePtr->parent;
+ }
+ }
+ $tpl->tpl_vars = $scopePtr->tpl_vars;
+ $tpl->config_vars = $scopePtr->config_vars;
+ }
+ }
+
+ if (!isset($this->tplObjects[$tpl->_getTemplateId()]) && !$tpl->source->handler->recompiled) {
+ // if template is called multiple times set flag to to cache template objects
+ $forceTplCache = $forceTplCache ||
+ (isset($this->subTplInfo[$tpl->template_resource]) && $this->subTplInfo[$tpl->template_resource] > 1);
+ // check if template object should be cached
+ if ($tpl->parent->_objType == 2 && isset($this->tplObjects[$tpl->parent->templateId]) ||
+ ($forceTplCache && $tpl->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_AUTOMATIC) ||
+ ($tpl->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON)
+ ) {
+ $this->tplObjects[$tpl->_getTemplateId()] = $tpl;
+ }
+ }
+
+ if (!empty($data)) {
+ // set up variable values
+ foreach ($data as $_key => $_val) {
+ $tpl->tpl_vars[$_key] = new Smarty_Variable($_val);
+ }
+ }
+ if (isset($uid)) {
+ if ($parent->smarty->debugging) {
+ $parent->smarty->_debug->start_template($tpl);
+ $parent->smarty->_debug->start_render($tpl);
+ }
+ $tpl->compiled->getRenderedTemplateCode($tpl, $content_func);
+ if ($parent->smarty->debugging) {
+ $parent->smarty->_debug->end_template($tpl);
+ $parent->smarty->_debug->end_render($tpl);
+ }
+ if ($tpl->caching == 9999 && $tpl->compiled->has_nocache_code) {
+ $parent->cached->hashes[$tpl->compiled->nocache_hash] = true;
+ }
+ } else {
+ if (isset($tpl->compiled)) {
+ $tpl->compiled->render($tpl);
+ } else {
+ $tpl->render();
+ }
+ }
+ if ($scopePtr) {
+ if ($scope == Smarty::SCOPE_GLOBAL) {
+ Smarty::$global_tpl_vars = $tpl->tpl_vars;
+ $tpl->smarty->config_vars = $tpl->config_vars;
+ } else {
+ $scopePtr->tpl_vars = $tpl->tpl_vars;
+ $scopePtr->config_vars = $tpl->config_vars;
+ }
+ }
+ }
+
+ /**
+ * Get called subtemplates from compiled template and save call count
+ *
+ * @param \Smarty_Internal_Template $tpl
+ */
+ public function registerSubTemplates(Smarty_Internal_Template $tpl)
+ {
+ foreach ($tpl->compiled->includes as $name => $count) {
+ if (isset($this->subTplInfo[$name])) {
+ $this->subTplInfo[$name] += $count;
+ } else {
+ $this->subTplInfo[$name] = $count;
+ }
+ }
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php
new file mode 100644
index 000000000..634ed5dc6
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php
@@ -0,0 +1,97 @@
+<?php
+
+/**
+ * Tplfunc Runtime Methods callTemplateFunction
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ *
+ **/
+class Smarty_Internal_Runtime_TplFunction
+{
+ /**
+ * Call template function
+ *
+ * @param \Smarty_Internal_Template $tpl template object
+ * @param string $name template function name
+ * @param array $params parameter array
+ * @param bool $nocache true if called nocache
+ *
+ * @throws \SmartyException
+ */
+ public function callTemplateFunction(Smarty_Internal_Template $tpl, $name, $params, $nocache)
+ {
+ if (isset($tpl->tpl_function[$name])) {
+ if (!$tpl->caching || ($tpl->caching && $nocache)) {
+ $function = $tpl->tpl_function[$name]['call_name'];
+ } else {
+ if (isset($tpl->tpl_function[$name]['call_name_caching'])) {
+ $function = $tpl->tpl_function[$name]['call_name_caching'];
+ } else {
+ $function = $tpl->tpl_function[$name]['call_name'];
+ }
+ }
+ if (function_exists($function)) {
+ $function ($tpl, $params);
+ return;
+ }
+ // try to load template function dynamically
+ if ($this->addTplFuncToCache($tpl, $name, $function)) {
+ $function ($tpl, $params);
+ return;
+ }
+ }
+ throw new SmartyException("Unable to find template function '{$name}'");
+ }
+
+ /**
+ *
+ * Add template function to cache file for nocache calls
+ *
+ * @param Smarty_Internal_Template $tpl
+ * @param string $_name template function name
+ * @param string $_function PHP function name
+ *
+ * @return bool
+ */
+ public function addTplFuncToCache(Smarty_Internal_Template $tpl, $_name, $_function)
+ {
+ $funcParam = $tpl->tpl_function[$_name];
+ if (is_file($funcParam['compiled_filepath'])) {
+ // read compiled file
+ $code = file_get_contents($funcParam['compiled_filepath']);
+ // grab template function
+ if (preg_match("/\/\* {$_function} \*\/([\S\s]*?)\/\*\/ {$_function} \*\//", $code, $match)) {
+ // grab source info from file dependency
+ preg_match("/\s*'{$funcParam['uid']}'([\S\s]*?)\),/", $code, $match1);
+ unset($code);
+ // make PHP function known
+ eval($match[0]);
+ if (function_exists($_function)) {
+ // search cache file template
+ $tplPtr = $tpl;
+ while (!isset($tplPtr->cached) && isset($tplPtr->parent)) {
+ $tplPtr = $tplPtr->parent;
+ }
+ // add template function code to cache file
+ if (isset($tplPtr->cached)) {
+ $cache = $tplPtr->cached;
+ $content = $cache->read($tplPtr);
+ if ($content) {
+ // check if we must update file dependency
+ if (!preg_match("/'{$funcParam['uid']}'(.*?)'nocache_hash'/", $content, $match2)) {
+ $content = preg_replace("/('file_dependency'(.*?)\()/", "\\1{$match1[0]}", $content);
+ }
+ $tplPtr->smarty->ext->_updateCache->write($cache, $tplPtr, preg_replace('/\s*\?>\s*$/', "\n", $content) . "\n" .
+ preg_replace(array('/^\s*<\?php\s+/', '/\s*\?>\s*$/'), "\n",
+ $match[0]));
+ }
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php
new file mode 100644
index 000000000..a895a3070
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php
@@ -0,0 +1,170 @@
+<?php
+
+/**
+ * Inline Runtime Methods render, setSourceByUid, setupSubTemplate
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ *
+ **/
+class Smarty_Internal_Runtime_UpdateCache
+{
+ /**
+ * check client side cache
+ *
+ * @param \Smarty_Template_Cached $cached
+ * @param Smarty_Internal_Template $_template
+ * @param string $content
+ */
+ public function cacheModifiedCheck(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content)
+ {
+ }
+
+ /**
+ * Sanitize content and write it to cache resource
+ *
+ * @param \Smarty_Template_Cached $cached
+ * @param Smarty_Internal_Template $_template
+ * @param bool $no_output_filter
+ *
+ * @throws \SmartyException
+ */
+ public function removeNoCacheHash(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template,
+ $no_output_filter)
+ {
+ $content = ob_get_clean();
+ unset($cached->hashes[$_template->compiled->nocache_hash]);
+ if (!empty($cached->hashes)) {
+ $hash_array = array();
+ foreach ($cached->hashes as $hash => $foo) {
+ $hash_array[] = "/{$hash}/";
+ }
+ $content = preg_replace($hash_array, $_template->compiled->nocache_hash, $content);
+ }
+ $_template->cached->has_nocache_code = false;
+ // get text between non-cached items
+ $cache_split =
+ preg_split("!/\*%%SmartyNocache:{$_template->compiled->nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$_template->compiled->nocache_hash}%%\*/!s",
+ $content);
+ // get non-cached items
+ preg_match_all("!/\*%%SmartyNocache:{$_template->compiled->nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$_template->compiled->nocache_hash}%%\*/!s",
+ $content, $cache_parts);
+ $content = '';
+ // loop over items, stitch back together
+ foreach ($cache_split as $curr_idx => $curr_split) {
+ // escape PHP tags in template content
+ $content .= preg_replace('/(<%|%>|<\?php|<\?|\?>|<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>)/',
+ "<?php echo '\$1'; ?>\n", $curr_split);
+ if (isset($cache_parts[0][$curr_idx])) {
+ $_template->cached->has_nocache_code = true;
+ $content .= $cache_parts[1][$curr_idx];
+ }
+ }
+ if (!$no_output_filter && !$_template->compiled->has_nocache_code &&
+ (isset($_template->smarty->autoload_filters['output']) ||
+ isset($_template->smarty->registered_filters['output']))
+ ) {
+ $content = $_template->smarty->ext->_filterHandler->runFilter('output', $content, $_template);
+ }
+ // write cache file content
+ $this->writeCachedContent($cached, $_template, $content);
+ }
+
+ /**
+ * Cache was invalid , so render from compiled and write to cache
+ *
+ * @param \Smarty_Template_Cached $cached
+ * @param \Smarty_Internal_Template $_template
+ * @param $no_output_filter
+ *
+ * @throws \Exception
+ */
+ public function updateCache(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $no_output_filter)
+ {
+ if ($_template->source->handler->uncompiled) {
+ ob_start();
+ $_template->source->render($_template);
+ } else {
+ ob_start();
+ if (!isset($_template->compiled)) {
+ $_template->loadCompiled();
+ }
+ $_template->compiled->render($_template);
+ }
+ if ($_template->smarty->debugging) {
+ $_template->smarty->_debug->start_cache($_template);
+ }
+ $this->removeNoCacheHash($cached, $_template, $no_output_filter);
+ $compile_check = $_template->smarty->compile_check;
+ $_template->smarty->compile_check = false;
+ if (isset($_template->parent) && $_template->parent->_objType == 2) {
+ $_template->compiled->unifunc = $_template->parent->compiled->unifunc;
+ }
+ if (!$_template->cached->processed) {
+ $_template->cached->process($_template, true);
+ }
+ $_template->smarty->compile_check = $compile_check;
+ $cached->getRenderedTemplateCode($_template);
+ if ($_template->smarty->debugging) {
+ $_template->smarty->_debug->end_cache($_template);
+ }
+ }
+
+ /**
+ * Writes the content to cache resource
+ *
+ * @param \Smarty_Template_Cached $cached
+ * @param Smarty_Internal_Template $_template
+ * @param string $content
+ *
+ * @return bool
+ */
+ public function writeCachedContent(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content)
+ {
+ if ($_template->source->handler->recompiled || !($_template->caching == Smarty::CACHING_LIFETIME_CURRENT ||
+ $_template->caching == Smarty::CACHING_LIFETIME_SAVED)
+ ) {
+ // don't write cache file
+ return false;
+ }
+ $content = $_template->smarty->ext->_codeFrame->create($_template, $content, '', true);
+ return $this->write($cached, $_template, $content);
+ }
+
+ /**
+ * Write this cache object to handler
+ *
+ * @param \Smarty_Template_Cached $cached
+ * @param Smarty_Internal_Template $_template template object
+ * @param string $content content to cache
+ *
+ * @return bool success
+ */
+ public function write(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content)
+ {
+ if (!$_template->source->handler->recompiled) {
+ if ($cached->handler->writeCachedContent($_template, $content)) {
+ $cached->content = null;
+ $cached->timestamp = time();
+ $cached->exists = true;
+ $cached->valid = true;
+ $cached->cache_lifetime = $_template->cache_lifetime;
+ $cached->processed = false;
+ if ($_template->smarty->cache_locking) {
+ $cached->handler->releaseLock($_template->smarty, $cached);
+ }
+
+ return true;
+ }
+ $cached->content = null;
+ $cached->timestamp = false;
+ $cached->exists = false;
+ $cached->valid = false;
+ $cached->processed = false;
+ }
+
+ return false;
+ }
+
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php
new file mode 100644
index 000000000..5a125a4a7
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * Runtime Methods updateScope
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ *
+ **/
+class Smarty_Internal_Runtime_UpdateScope
+{
+ /**
+ * Update new assigned template variable in other effected scopes
+ *
+ * @param \Smarty_Internal_Template $tpl template object
+ * @param string $varName variable name
+ * @param int $scope scope to which bubble up variable value
+ */
+ public function updateScope(Smarty_Internal_Template $tpl, $varName, $scope = Smarty::SCOPE_LOCAL)
+ {
+ if (!$scope && !$tpl->scope) {
+ return;
+ }
+ foreach (array($scope, $tpl->scope) as $s) {
+ $s = ($bubble_up = $s >= Smarty::SCOPE_BUBBLE_UP) ? $s - Smarty::SCOPE_BUBBLE_UP : $s;
+ if ($bubble_up && $s) {
+ $ptr = $tpl->parent;
+ if (isset($ptr)) {
+ $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName];
+ $ptr = $ptr->parent;
+ }
+ if ($s == Smarty::SCOPE_PARENT) {
+ continue;
+ }
+ while (isset($ptr) && $ptr->_objType == 2) {
+ $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName];
+ $ptr = $ptr->parent;
+ }
+ if ($s == Smarty::SCOPE_TPL_ROOT) {
+ continue;
+ } elseif ($s == Smarty::SCOPE_SMARTY) {
+ $tpl->smarty->tpl_vars[$varName] = $tpl->tpl_vars[$varName];
+ } elseif ($s == Smarty::SCOPE_GLOBAL) {
+ Smarty::$global_tpl_vars[$varName] = $tpl->tpl_vars[$varName];
+ } elseif ($s == Smarty::SCOPE_ROOT) {
+ while (isset($ptr->parent)) {
+ $ptr = $ptr->parent;
+ }
+ $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName];
+ }
+ }
+ }
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_validatecompiled.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_validatecompiled.php
new file mode 100644
index 000000000..7defd6c92
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_validatecompiled.php
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * Runtime Methods decodeProperties
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ *
+ **/
+class Smarty_Internal_Runtime_ValidateCompiled
+{
+ /**
+ * This function is executed automatically when a compiled or cached template file is included
+ * - Decode saved properties from compiled template and cache files
+ * - Check if compiled or cache file is valid
+ *
+ * @param array $properties special template properties
+ * @param bool $cache flag if called from cache file
+ *
+ * @return bool flag if compiled or cache file is valid
+ */
+ public function decodeProperties(Smarty_Internal_Template $tpl, $properties, $cache = false)
+ {
+ $is_valid = true;
+ if (Smarty::SMARTY_VERSION != $properties['version']) {
+ // new version must rebuild
+ $is_valid = false;
+ } elseif ($is_valid && !empty($properties['file_dependency']) &&
+ ((!$cache && $tpl->smarty->compile_check) || $tpl->smarty->compile_check == 1)
+ ) {
+ // check file dependencies at compiled code
+ foreach ($properties['file_dependency'] as $_file_to_check) {
+ if ($_file_to_check[2] == 'file' || $_file_to_check[2] == 'extends' || $_file_to_check[2] == 'php') {
+ if ($tpl->source->filepath == $_file_to_check[0]) {
+ // do not recheck current template
+ continue;
+ //$mtime = $tpl->source->getTimeStamp();
+ } else {
+ // file and php types can be checked without loading the respective resource handlers
+ $mtime = is_file($_file_to_check[0]) ? filemtime($_file_to_check[0]) : false;
+ }
+ } elseif ($_file_to_check[2] == 'string') {
+ continue;
+ } else {
+ $handler = Smarty_Resource::load($tpl->smarty, $_file_to_check[2]);
+ if ($handler->checkTimestamps()) {
+ $source = Smarty_Template_Source::load($tpl, $tpl->smarty, $_file_to_check[ 0 ]);
+ $mtime = $source->getTimeStamp();
+ } else {
+ continue;
+ }
+ }
+ if (!$mtime || $mtime > $_file_to_check[1]) {
+ $is_valid = false;
+ break;
+ }
+ }
+ }
+ if ($cache) {
+ // CACHING_LIFETIME_SAVED cache expiry has to be validated here since otherwise we'd define the unifunc
+ if ($tpl->caching === Smarty::CACHING_LIFETIME_SAVED && $properties['cache_lifetime'] >= 0 &&
+ (time() > ($tpl->cached->timestamp + $properties['cache_lifetime']))
+ ) {
+ $is_valid = false;
+ }
+ $tpl->cached->cache_lifetime = $properties['cache_lifetime'];
+ $tpl->cached->valid = $is_valid;
+ $resource = $tpl->cached;
+ } else {
+ $tpl->mustCompile = !$is_valid;
+ $resource = $tpl->compiled;
+ $resource->includes = isset($properties['includes']) ? $properties['includes'] : array();
+ }
+ if ($is_valid) {
+ $resource->unifunc = $properties['unifunc'];
+ $resource->has_nocache_code = $properties['has_nocache_code'];
+ // $tpl->compiled->nocache_hash = $properties['nocache_hash'];
+ $resource->file_dependency = $properties['file_dependency'];
+ if (isset($properties['tpl_function'])) {
+ $tpl->tpl_function = $properties['tpl_function'];
+ }
+ }
+ return $is_valid && !function_exists($properties['unifunc']);
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_var.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_var.php
new file mode 100644
index 000000000..8e09108fe
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_var.php
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * Runtime Methods createLocalArrayVariable
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ *
+ **/
+class Smarty_Internal_Runtime_Var
+{
+ /**
+ * Template code runtime function to create a local Smarty variable for array assignments
+ *
+ * @param \Smarty_Internal_Template $tpl template object
+ * @param string $varName template variable name
+ * @param bool $nocache cache mode of variable
+ */
+ public function createLocalArrayVariable(Smarty_Internal_Template $tpl, $varName, $nocache = false)
+ {
+ if (!isset($tpl->tpl_vars[$varName])) {
+ $tpl->tpl_vars[$varName] = new Smarty_Variable(array(), $nocache);
+ } else {
+ $tpl->tpl_vars[$varName] = clone $tpl->tpl_vars[$varName];
+ if (!(is_array($tpl->tpl_vars[$varName]->value) ||
+ $tpl->tpl_vars[$varName]->value instanceof ArrayAccess)
+ ) {
+ settype($tpl->tpl_vars[$varName]->value, 'array');
+ }
+ }
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_write_file.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php
index e5d19ce8d..05c973783 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_write_file.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php
@@ -2,59 +2,64 @@
/**
* Smarty write file plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsInternal
- * @author Monte Ohrt
+ * @author Monte Ohrt
*/
/**
* Smarty Internal Write File Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsInternal
*/
-class Smarty_Internal_Write_File {
-
+class Smarty_Internal_Runtime_WriteFile
+{
/**
* Writes file in a safe way to disk
*
- * @param string $_filepath complete filepath
- * @param string $_contents file content
- * @param Smarty $smarty smarty instance
+ * @param string $_filepath complete filepath
+ * @param string $_contents file content
+ * @param Smarty $smarty smarty instance
+ *
+ * @throws SmartyException
* @return boolean true
*/
- public static function writeFile($_filepath, $_contents, Smarty $smarty)
+ public function writeFile($_filepath, $_contents, Smarty $smarty)
{
$_error_reporting = error_reporting();
error_reporting($_error_reporting & ~E_NOTICE & ~E_WARNING);
- if ($smarty->_file_perms !== null) {
+ $_file_perms = property_exists($smarty, '_file_perms') ? $smarty->_file_perms : 0644;
+ $_dir_perms = property_exists($smarty, '_dir_perms') ? (isset($smarty->_dir_perms) ? $smarty->_dir_perms : 0777) : 0771;
+ if ($_file_perms !== null) {
$old_umask = umask(0);
}
$_dirpath = dirname($_filepath);
// if subdirs, create dir structure
if ($_dirpath !== '.' && !file_exists($_dirpath)) {
- mkdir($_dirpath, $smarty->_dir_perms === null ? 0777 : $smarty->_dir_perms, true);
+ mkdir($_dirpath, $_dir_perms, true);
}
// write to tmp file, then move to overt file lock race condition
- $_tmp_file = $_dirpath . DS . uniqid('wrt', true);
+ $_tmp_file = $_dirpath . DS . str_replace(array('.', ','), '_', uniqid('wrt', true));
if (!file_put_contents($_tmp_file, $_contents)) {
error_reporting($_error_reporting);
throw new SmartyException("unable to write file {$_tmp_file}");
- return false;
- }
-
+ }
+
/*
* Windows' rename() fails if the destination exists,
* Linux' rename() properly handles the overwrite.
- * Simply unlink()ing a file might cause other processes
+ * Simply unlink()ing a file might cause other processes
* currently reading that file to fail, but linux' rename()
* seems to be smart enough to handle that for us.
*/
if (Smarty::$_IS_WINDOWS) {
// remove original file
- @unlink($_filepath);
+ if (is_file($_filepath)) {
+ @unlink($_filepath);
+ }
// rename tmp file
$success = @rename($_tmp_file, $_filepath);
} else {
@@ -62,27 +67,24 @@ class Smarty_Internal_Write_File {
$success = @rename($_tmp_file, $_filepath);
if (!$success) {
// remove original file
- @unlink($_filepath);
+ if (is_file($_filepath)) {
+ @unlink($_filepath);
+ }
// rename tmp file
$success = @rename($_tmp_file, $_filepath);
}
}
-
if (!$success) {
error_reporting($_error_reporting);
throw new SmartyException("unable to write file {$_filepath}");
- return false;
}
-
- if ($smarty->_file_perms !== null) {
+ if ($_file_perms !== null) {
// set file permissions
- chmod($_filepath, $smarty->_file_perms);
+ chmod($_filepath, $_file_perms);
umask($old_umask);
}
error_reporting($_error_reporting);
+
return true;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php b/include/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php
index 1ec1aa430..116bbea7b 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php
@@ -1,27 +1,21 @@
<?php
/**
* Smarty Internal Plugin Smarty Template Compiler Base
+ * This file contains the basic classes and methods for compiling Smarty templates with lexer/parser
*
- * This file contains the basic classes and methodes for compiling Smarty templates with lexer/parser
- *
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
- * @ignore
- */
-include ("smarty_internal_parsetree.php");
-
-/**
* Class SmartyTemplateCompiler
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCompilerBase {
-
+class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCompilerBase
+{
/**
* Lexer class name
*
@@ -37,32 +31,32 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
public $parser_class;
/**
- * Lexer object
+ * array of vars which can be compiled in local scope
*
- * @var object
+ * @var array
*/
- public $lex;
+ public $local_var = array();
/**
- * Parser object
+ * array of callbacks called when the normal compile process of template is finished
*
- * @var object
+ * @var array
*/
- public $parser;
+ public $postCompileCallbacks = array();
/**
- * Smarty object
+ * prefix code
*
- * @var object
+ * @var string
*/
- public $smarty;
+ public $prefixCompiledCode = '';
/**
- * array of vars which can be compiled in local scope
+ * postfix code
*
- * @var array
+ * @var string
*/
- public $local_var = array();
+ public $postfixCompiledCode = '';
/**
* Initialize compiler
@@ -71,57 +65,105 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
* @param string $parser_class class name
* @param Smarty $smarty global instance
*/
- public function __construct($lexer_class, $parser_class, $smarty)
+ public function __construct($lexer_class, $parser_class, Smarty $smarty)
{
- $this->smarty = $smarty;
- parent::__construct();
+ parent::__construct($smarty);
// get required plugins
$this->lexer_class = $lexer_class;
$this->parser_class = $parser_class;
}
/**
- * Methode to compile a Smarty template
+ * method to compile a Smarty template
*
* @param mixed $_content template source
+ * @param bool $isTemplateSource
+ *
* @return bool true if compiling succeeded, false if it failed
+ * @throws \SmartyCompilerException
*/
- protected function doCompile($_content)
+ protected function doCompile($_content, $isTemplateSource = false)
{
/* here is where the compiling takes place. Smarty
tags in the templates are replaces with PHP code,
then written to compiled files. */
// init the lexer/parser to compile the template
- $this->lex = new $this->lexer_class($_content, $this);
- $this->parser = new $this->parser_class($this->lex, $this);
- if ($this->smarty->_parserdebug)
+ $this->parser =
+ new $this->parser_class(new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $_content), $this),
+ $this);
+ if ($isTemplateSource && $this->template->caching) {
+ $this->parser->insertPhpCode("<?php\n\$_smarty_tpl->compiled->nocache_hash = '{$this->nocache_hash}';\n?>\n");
+ }
+ if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
+ $mbEncoding = mb_internal_encoding();
+ mb_internal_encoding('ASCII');
+ } else {
+ $mbEncoding = null;
+ }
+
+ if ($this->smarty->_parserdebug) {
$this->parser->PrintTrace();
+ $this->parser->lex->PrintTrace();
+ }
// get tokens from lexer and parse them
- while ($this->lex->yylex() && !$this->abort_and_recompile) {
+ while ($this->parser->lex->yylex()) {
if ($this->smarty->_parserdebug) {
- echo "<pre>Line {$this->lex->line} Parsing {$this->parser->yyTokenName[$this->lex->token]} Token " .
- htmlentities($this->lex->value) . "</pre>";
+ echo "<pre>Line {$this->parser->lex->line} Parsing {$this->parser->yyTokenName[$this->parser->lex->token]} Token " .
+ htmlentities($this->parser->lex->value) . "</pre>";
}
- $this->parser->doParse($this->lex->token, $this->lex->value);
+ $this->parser->doParse($this->parser->lex->token, $this->parser->lex->value);
}
- if ($this->abort_and_recompile) {
- // exit here on abort
- return false;
- }
// finish parsing process
$this->parser->doParse(0, 0);
+ if ($mbEncoding) {
+ mb_internal_encoding($mbEncoding);
+ }
// check for unclosed tags
if (count($this->_tag_stack) > 0) {
// get stacked info
list($openTag, $_data) = array_pop($this->_tag_stack);
- $this->trigger_template_error("unclosed {" . $openTag . "} tag");
+ $this->trigger_template_error("unclosed {$this->smarty->left_delimiter}" . $openTag .
+ "{$this->smarty->right_delimiter} tag");
+ }
+ // call post compile callbacks
+ foreach ($this->postCompileCallbacks as $cb) {
+ $parameter = $cb;
+ $parameter[0] = $this;
+ call_user_func_array($cb[0], $parameter);
}
// return compiled code
- // return str_replace(array("? >\n<?php","? ><?php"), array('',''), $this->parser->retvalue);
- return $this->parser->retvalue;
+ return $this->prefixCompiledCode . $this->parser->retvalue . $this->postfixCompiledCode;
}
-}
+ /**
+ * Register a post compile callback
+ * - when the callback is called after template compiling the compiler object will be inserted as first parameter
+ *
+ * @param callback $callback
+ * @param array $parameter optional parameter array
+ * @param string $key optional key for callback
+ * @param bool $replace if true replace existing keyed callback
+ */
+ public function registerPostCompileCallback($callback, $parameter = array(), $key = null, $replace = false)
+ {
+ array_unshift($parameter, $callback);
+ if (isset($key)) {
+ if ($replace || !isset($this->postCompileCallbacks[$key])) {
+ $this->postCompileCallbacks[$key] = $parameter;
+ }
+ } else {
+ $this->postCompileCallbacks[] = $parameter;
+ }
+ }
-?> \ No newline at end of file
+ /**
+ * Remove a post compile callback
+ *
+ * @param string $key callback key
+ */
+ public function unregisterPostCompileCallback($key)
+ {
+ unset($this->postCompileCallbacks[$key]);
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_template.php b/include/smarty/libs/sysplugins/smarty_internal_template.php
index 29017edbb..7c16a53db 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_template.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_template.php
@@ -1,623 +1,335 @@
<?php
/**
* Smarty Internal Plugin Template
- *
* This file contains the Smarty template engine
*
- * @package Smarty
+ * @package Smarty
* @subpackage Template
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Main class with template data structures and methods
*
- * @package Smarty
+ * @package Smarty
* @subpackage Template
*
- * @property Smarty_Template_Source $source
- * @property Smarty_Template_Compiled $compiled
- * @property Smarty_Template_Cached $cached
+ * @property Smarty_Template_Source|Smarty_Template_Config $source
+ * @property Smarty_Template_Compiled $compiled
+ * @property Smarty_Template_Cached $cached
+ * @method bool mustCompile()
*/
-class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
-
- /**
- * cache_id
- * @var string
- */
- public $cache_id = null;
+class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
+{
/**
- * $compile_id
- * @var string
+ * This object type (Smarty = 1, template = 2, data = 4)
+ *
+ * @var int
*/
- public $compile_id = null;
+ public $_objType = 2;
+
/**
- * caching enabled
- * @var boolean
+ * Global smarty instance
+ *
+ * @var Smarty
*/
- public $caching = null;
+ public $smarty = null;
+
/**
- * cache lifetime in seconds
- * @var integer
+ * Source instance
+ *
+ * @var Smarty_Template_Source|Smarty_Template_Config
*/
- public $cache_lifetime = null;
+ public $source = null;
+
/**
* Template resource
+ *
* @var string
*/
public $template_resource = null;
+
/**
* flag if compiled template is invalid and must be (re)compiled
+ *
* @var bool
*/
public $mustCompile = null;
+
/**
- * flag if template does contain nocache code sections
- * @var bool
- */
- public $has_nocache_code = false;
- /**
- * special compiled and cached template properties
- * @var array
- */
- public $properties = array('file_dependency' => array(),
- 'nocache_hash' => '',
- 'function' => array());
- /**
- * required plugins
- * @var array
- */
- public $required_plugins = array('compiled' => array(), 'nocache' => array());
- /**
- * Global smarty instance
- * @var Smarty
- */
- public $smarty = null;
- /**
- * blocks for template inheritance
- * @var array
- */
- public $block_data = array();
- /**
- * variable filters
- * @var array
+ * Template Id
+ *
+ * @var null|string
*/
- public $variable_filters = array();
+ public $templateId = null;
+
/**
- * optional log of tag/attributes
+ * Known template functions
+ *
* @var array
*/
- public $used_tags = array();
- /**
- * internal flag to allow relative path in child template blocks
- * @var bool
- */
- public $allow_relative_path = false;
+ public $tpl_function = array();
+
/**
- * internal capture runtime stack
- * @var array
+ * Scope in which template is rendered
+ *
+ * @var int
*/
- public $_capture_stack = array(0 => array());
+ public $scope = 0;
/**
* Create template data object
- *
* Some of the global Smarty settings copied to template scope
- * It load the required template resources and cacher plugins
+ * It load the required template resources and caching plugins
+ *
+ * @param string $template_resource template resource string
+ * @param Smarty $smarty Smarty instance
+ * @param \Smarty_Internal_Template|\Smarty|\Smarty_Internal_Data $_parent back pointer to parent object
+ * with variables or null
+ * @param mixed $_cache_id cache id or null
+ * @param mixed $_compile_id compile id or null
+ * @param bool $_caching use caching?
+ * @param int $_cache_lifetime cache life-time in seconds
*
- * @param string $template_resource template resource string
- * @param Smarty $smarty Smarty instance
- * @param Smarty_Internal_Template $_parent back pointer to parent object with variables or null
- * @param mixed $_cache_id cache id or null
- * @param mixed $_compile_id compile id or null
- * @param bool $_caching use caching?
- * @param int $_cache_lifetime cache life-time in seconds
+ * @throws \SmartyException
*/
- public function __construct($template_resource, $smarty, $_parent = null, $_cache_id = null, $_compile_id = null, $_caching = null, $_cache_lifetime = null)
+ public function __construct($template_resource, Smarty $smarty, Smarty_Internal_Data $_parent = null,
+ $_cache_id = null, $_compile_id = null, $_caching = null, $_cache_lifetime = null)
{
$this->smarty = &$smarty;
// Smarty parameter
$this->cache_id = $_cache_id === null ? $this->smarty->cache_id : $_cache_id;
$this->compile_id = $_compile_id === null ? $this->smarty->compile_id : $_compile_id;
$this->caching = $_caching === null ? $this->smarty->caching : $_caching;
- if ($this->caching === true)
+ if ($this->caching === true) {
$this->caching = Smarty::CACHING_LIFETIME_CURRENT;
+ }
$this->cache_lifetime = $_cache_lifetime === null ? $this->smarty->cache_lifetime : $_cache_lifetime;
$this->parent = $_parent;
// Template resource
$this->template_resource = $template_resource;
- // copy block data of template inheritance
- if ($this->parent instanceof Smarty_Internal_Template) {
- $this->block_data = $this->parent->block_data;
- }
+ $this->source = Smarty_Template_Source::load($this);
+ parent::__construct();
}
/**
- * Returns if the current template must be compiled by the Smarty compiler
+ * render template
*
- * It does compare the timestamps of template source and the compiled templates and checks the force compile configuration
+ * @param bool $merge_tpl_vars if true parent template variables merged in to local scope
+ * @param bool $no_output_filter if true do not run output filter
+ * @param bool $display true: display, false: fetch null: subtemplate
*
- * @return boolean true if the template must be compiled
+ * @throws Exception
+ * @throws SmartyException
+ * @return string rendered template output
*/
- public function mustCompile()
+ public function render($no_output_filter = true, $display = null)
{
+ $parentIsTpl = isset($this->parent) && $this->parent->_objType == 2;
+ if ($this->smarty->debugging) {
+ $this->smarty->_debug->start_template($this, $display);
+ }
+ // checks if template exists
if (!$this->source->exists) {
- if ($this->parent instanceof Smarty_Internal_Template) {
- $parent_resource = " in '$this->parent->template_resource}'";
+ if ($parentIsTpl) {
+ $parent_resource = " in '{$this->parent->template_resource}'";
} else {
$parent_resource = '';
}
throw new SmartyException("Unable to load template {$this->source->type} '{$this->source->name}'{$parent_resource}");
}
- if ($this->mustCompile === null) {
- $this->mustCompile = (!$this->source->uncompiled && ($this->smarty->force_compile || $this->source->recompiled || $this->compiled->timestamp === false ||
- ($this->smarty->compile_check && $this->compiled->timestamp < $this->source->timestamp)));
+ // disable caching for evaluated code
+ if ($this->source->handler->recompiled) {
+ $this->caching = false;
+ }
+ // read from cache or render
+ $isCacheTpl =
+ $this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED;
+ if ($isCacheTpl) {
+ if (!isset($this->cached)) {
+ $this->loadCached();
+ }
+ $this->cached->render($this, $no_output_filter);
+ } elseif ($this->source->handler->uncompiled) {
+ $this->source->render($this);
+ } else {
+ if (!isset($this->compiled)) {
+ $this->loadCompiled();
+ }
+ $this->compiled->render($this);
}
- return $this->mustCompile;
- }
- /**
- * Compiles the template
- *
- * If the template is not evaluated the compiled template is saved on disk
- */
- public function compileTemplateSource()
- {
- if (!$this->source->recompiled) {
- $this->properties['file_dependency'] = array();
- if ($this->source->components) {
- // uses real resource for file dependency
- $source = end($this->source->components);
- $this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $source->type);
+ // display or fetch
+ if ($display) {
+ if ($this->caching && $this->smarty->cache_modified_check) {
+ $this->smarty->ext->_cachemodify->cacheModifiedCheck($this->cached, $this,
+ isset($content) ? $content : ob_get_clean());
} else {
- $this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $this->source->type);
+ if ((!$this->caching || $this->cached->has_nocache_code || $this->source->handler->recompiled) &&
+ !$no_output_filter && (isset($this->smarty->autoload_filters['output']) ||
+ isset($this->smarty->registered_filters['output']))
+ ) {
+ echo $this->smarty->ext->_filterHandler->runFilter('output', ob_get_clean(), $this);
+ } else {
+ ob_end_flush();
+ flush();
+ }
}
- }
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::start_compile($this);
- }
- // compile locking
- if ($this->smarty->compile_locking && !$this->source->recompiled) {
- if ($saved_timestamp = $this->compiled->timestamp) {
- touch($this->compiled->filepath);
+ if ($this->smarty->debugging) {
+ $this->smarty->_debug->end_template($this);
+ // debug output
+ $this->smarty->_debug->display_debug($this, true);
}
- }
- // call compiler
- try {
- $code = $this->compiler->compileTemplate($this);
- } catch (Exception $e) {
- // restore old timestamp in case of error
- if ($this->smarty->compile_locking && !$this->source->recompiled && $saved_timestamp) {
- touch($this->compiled->filepath, $saved_timestamp);
+ return '';
+ } else {
+ if ($this->smarty->debugging) {
+ $this->smarty->_debug->end_template($this);
+ if ($this->smarty->debugging === 2 && $display === false) {
+ $this->smarty->_debug->display_debug($this, true);
+ }
}
- throw $e;
- }
- // compiling succeded
- if (!$this->source->recompiled && $this->compiler->write_compiled_code) {
- // write compiled template
- $_filepath = $this->compiled->filepath;
- if ($_filepath === false)
- throw new SmartyException('getCompiledFilepath() did not return a destination to save the compiled template to');
- Smarty_Internal_Write_File::writeFile($_filepath, $code, $this->smarty);
- $this->compiled->exists = true;
- $this->compiled->isCompiled = true;
- }
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::end_compile($this);
+ if ($parentIsTpl) {
+ if (!empty($this->tpl_function)) {
+ $this->parent->tpl_function = array_merge($this->parent->tpl_function, $this->tpl_function);
+ }
+ foreach ($this->compiled->required_plugins as $code => $tmp1) {
+ foreach ($tmp1 as $name => $tmp) {
+ foreach ($tmp as $type => $data) {
+ $this->parent->compiled->required_plugins[$code][$name][$type] = $data;
+ }
+ }
+ }
+ }
+ if (!$no_output_filter &&
+ (!$this->caching || $this->cached->has_nocache_code || $this->source->handler->recompiled) &&
+ (isset($this->smarty->autoload_filters['output']) || isset($this->smarty->registered_filters['output']))
+ ) {
+ return $this->smarty->ext->_filterHandler->runFilter('output', ob_get_clean(), $this);
+ }
+ // return cache content
+ return null;
}
- // release compiler object to free memory
- unset($this->compiler);
}
/**
- * Writes the cached template output
- *
- * @return bool
+ * Compiles the template
+ * If the template is not evaluated the compiled template is saved on disk
*/
- public function writeCachedContent($content)
+ public function compileTemplateSource()
{
- if ($this->source->recompiled || !($this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED)) {
- // don't write cache file
- return false;
- }
- $this->properties['cache_lifetime'] = $this->cache_lifetime;
- $this->properties['unifunc'] = 'content_' . str_replace('.', '_', uniqid('', true));
- $content = $this->createTemplateCodeFrame($content, true);
- $_smarty_tpl = $this;
- eval("?>" . $content);
- $this->cached->valid = true;
- $this->cached->processed = true;
- return $this->cached->write($this, $content);
+ return $this->compiled->compileTemplateSource($this);
}
/**
- * Template code runtime function to get subtemplate content
+ * Writes the content to cache resource
*
- * @param string $template the resource handle of the template file
- * @param mixed $cache_id cache id to be used with this template
- * @param mixed $compile_id compile id to be used with this template
- * @param integer $caching cache mode
- * @param integer $cache_lifetime life time of cache data
- * @param array $vars optional variables to assign
- * @param int $parent_scope scope in which {include} should execute
- * @returns string template content
- */
- public function getSubTemplate($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $parent_scope)
- {
- // already in template cache?
- if ($this->smarty->allow_ambiguous_resources) {
- $_templateId = Smarty_Resource::getUniqueTemplateName($this->smarty, $template) . $cache_id . $compile_id;
- } else {
- $_templateId = $this->smarty->joined_template_dir . '#' . $template . $cache_id . $compile_id;
- }
-
- if (isset($_templateId[150])) {
- $_templateId = sha1($_templateId);
- }
- if (isset($this->smarty->template_objects[$_templateId])) {
- // clone cached template object because of possible recursive call
- $tpl = clone $this->smarty->template_objects[$_templateId];
- $tpl->parent = $this;
- $tpl->caching = $caching;
- $tpl->cache_lifetime = $cache_lifetime;
- } else {
- $tpl = new $this->smarty->template_class($template, $this->smarty, $this, $cache_id, $compile_id, $caching, $cache_lifetime);
- }
- // get variables from calling scope
- if ($parent_scope == Smarty::SCOPE_LOCAL) {
- $tpl->tpl_vars = $this->tpl_vars;
- $tpl->tpl_vars['smarty'] = clone $this->tpl_vars['smarty'];
- } elseif ($parent_scope == Smarty::SCOPE_PARENT) {
- $tpl->tpl_vars = &$this->tpl_vars;
- } elseif ($parent_scope == Smarty::SCOPE_GLOBAL) {
- $tpl->tpl_vars = &Smarty::$global_tpl_vars;
- } elseif (($scope_ptr = $this->getScopePointer($parent_scope)) == null) {
- $tpl->tpl_vars = &$this->tpl_vars;
- } else {
- $tpl->tpl_vars = &$scope_ptr->tpl_vars;
- }
- $tpl->config_vars = $this->config_vars;
- if (!empty($data)) {
- // set up variable values
- foreach ($data as $_key => $_val) {
- $tpl->tpl_vars[$_key] = new Smarty_variable($_val);
- }
- }
- return $tpl->fetch(null, null, null, null, false, false, true);
- }
-
- /**
- * Template code runtime function to set up an inline subtemplate
+ * @param string $content
*
- * @param string $template the resource handle of the template file
- * @param mixed $cache_id cache id to be used with this template
- * @param mixed $compile_id compile id to be used with this template
- * @param integer $caching cache mode
- * @param integer $cache_lifetime life time of cache data
- * @param array $vars optional variables to assign
- * @param int $parent_scope scope in which {include} should execute
- * @param string $hash nocache hash code
- * @returns string template content
+ * @return bool
*/
- public function setupInlineSubTemplate($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $parent_scope, $hash)
+ public function writeCachedContent($content)
{
- $tpl = new $this->smarty->template_class($template, $this->smarty, $this, $cache_id, $compile_id, $caching, $cache_lifetime);
- $tpl->properties['nocache_hash'] = $hash;
- // get variables from calling scope
- if ($parent_scope == Smarty::SCOPE_LOCAL ) {
- $tpl->tpl_vars = $this->tpl_vars;
- $tpl->tpl_vars['smarty'] = clone $this->tpl_vars['smarty'];
- } elseif ($parent_scope == Smarty::SCOPE_PARENT) {
- $tpl->tpl_vars = &$this->tpl_vars;
- } elseif ($parent_scope == Smarty::SCOPE_GLOBAL) {
- $tpl->tpl_vars = &Smarty::$global_tpl_vars;
- } elseif (($scope_ptr = $this->getScopePointer($parent_scope)) == null) {
- $tpl->tpl_vars = &$this->tpl_vars;
- } else {
- $tpl->tpl_vars = &$scope_ptr->tpl_vars;
- }
- $tpl->config_vars = $this->config_vars;
- if (!empty($data)) {
- // set up variable values
- foreach ($data as $_key => $_val) {
- $tpl->tpl_vars[$_key] = new Smarty_variable($_val);
- }
- }
- return $tpl;
+ return $this->smarty->ext->_updateCache->writeCachedContent($this->cached, $this, $content);
}
-
/**
- * Create code frame for compiled and cached templates
+ * Get unique template id
*
- * @param string $content optional template content
- * @param bool $cache flag for cache file
* @return string
*/
- public function createTemplateCodeFrame($content = '', $cache = false)
+ public function _getTemplateId()
{
- $plugins_string = '';
- // include code for plugins
- if (!$cache) {
- if (!empty($this->required_plugins['compiled'])) {
- $plugins_string = '<?php ';
- foreach ($this->required_plugins['compiled'] as $tmp) {
- foreach ($tmp as $data) {
- $file = addslashes($data['file']);
- if (is_Array($data['function'])){
- $plugins_string .= "if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) include '{$file}';\n";
- } else {
- $plugins_string .= "if (!is_callable('{$data['function']}')) include '{$file}';\n";
- }
- }
- }
- $plugins_string .= '?>';
- }
- if (!empty($this->required_plugins['nocache'])) {
- $this->has_nocache_code = true;
- $plugins_string .= "<?php echo '/*%%SmartyNocache:{$this->properties['nocache_hash']}%%*/<?php \$_smarty = \$_smarty_tpl->smarty; ";
- foreach ($this->required_plugins['nocache'] as $tmp) {
- foreach ($tmp as $data) {
- $file = addslashes($data['file']);
- if (is_Array($data['function'])){
- $plugins_string .= addslashes("if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) include '{$file}';\n");
- } else {
- $plugins_string .= addslashes("if (!is_callable('{$data['function']}')) include '{$file}';\n");
- }
- }
- }
- $plugins_string .= "?>/*/%%SmartyNocache:{$this->properties['nocache_hash']}%%*/';?>\n";
- }
- }
- // build property code
- $this->properties['has_nocache_code'] = $this->has_nocache_code;
- $output = '';
- if (!$this->source->recompiled) {
- $output = "<?php /*%%SmartyHeaderCode:{$this->properties['nocache_hash']}%%*/";
- if ($this->smarty->direct_access_security) {
- $output .= "if(!defined('SMARTY_DIR')) exit('no direct access allowed');\n";
- }
- }
- if ($cache) {
- // remove compiled code of{function} definition
- unset($this->properties['function']);
- if (!empty($this->smarty->template_functions)) {
- // copy code of {function} tags called in nocache mode
- foreach ($this->smarty->template_functions as $name => $function_data) {
- if (isset($function_data['called_nocache'])) {
- foreach ($function_data['called_functions'] as $func_name) {
- $this->smarty->template_functions[$func_name]['called_nocache'] = true;
- }
- }
- }
- foreach ($this->smarty->template_functions as $name => $function_data) {
- if (isset($function_data['called_nocache'])) {
- unset($function_data['called_nocache'], $function_data['called_functions'], $this->smarty->template_functions[$name]['called_nocache']);
- $this->properties['function'][$name] = $function_data;
- }
- }
- }
- }
- $this->properties['version'] = Smarty::SMARTY_VERSION;
- if (!isset($this->properties['unifunc'])) {
- $this->properties['unifunc'] = 'content_' . str_replace('.', '_', uniqid('', true));
- }
- if (!$this->source->recompiled) {
- $output .= "\$_valid = \$_smarty_tpl->decodeProperties(" . var_export($this->properties, true) . ',' . ($cache ? 'true' : 'false') . "); /*/%%SmartyHeaderCode%%*/?>\n";
- $output .= '<?php if ($_valid && !is_callable(\'' . $this->properties['unifunc'] . '\')) {function ' . $this->properties['unifunc'] . '($_smarty_tpl) {?>';
- }
- $output .= $plugins_string;
- $output .= $content;
- if (!$this->source->recompiled) {
- $output .= '<?php }} ?>';
- }
- return $output;
+ return isset($this->templateId) ? $this->templateId : $this->templateId =
+ $this->smarty->_getTemplateId($this->template_resource, $this->cache_id, $this->compile_id);
}
/**
- * This function is executed automatically when a compiled or cached template file is included
- *
- * - Decode saved properties from compiled template and cache files
- * - Check if compiled or cache file is valid
- *
- * @param array $properties special template properties
- * @param bool $cache flag if called from cache file
- * @return bool flag if compiled or cache file is valid
+ * runtime error not matching capture tags
*/
- public function decodeProperties($properties, $cache = false)
+ public function capture_error()
{
- $this->has_nocache_code = $properties['has_nocache_code'];
- $this->properties['nocache_hash'] = $properties['nocache_hash'];
- if (isset($properties['cache_lifetime'])) {
- $this->properties['cache_lifetime'] = $properties['cache_lifetime'];
- }
- if (isset($properties['file_dependency'])) {
- $this->properties['file_dependency'] = array_merge($this->properties['file_dependency'], $properties['file_dependency']);
- }
- if (!empty($properties['function'])) {
- $this->properties['function'] = array_merge($this->properties['function'], $properties['function']);
- $this->smarty->template_functions = array_merge($this->smarty->template_functions, $properties['function']);
- }
- $this->properties['version'] = (isset($properties['version'])) ? $properties['version'] : '';
- $this->properties['unifunc'] = $properties['unifunc'];
- // check file dependencies at compiled code
- $is_valid = true;
- if ($this->properties['version'] != Smarty::SMARTY_VERSION) {
- $is_valid = false;
- } else if (((!$cache && $this->smarty->compile_check && empty($this->compiled->_properties) && !$this->compiled->isCompiled) || $cache && ($this->smarty->compile_check === true || $this->smarty->compile_check === Smarty::COMPILECHECK_ON)) && !empty($this->properties['file_dependency'])) {
- foreach ($this->properties['file_dependency'] as $_file_to_check) {
- if ($_file_to_check[2] == 'file' || $_file_to_check[2] == 'php') {
- if ($this->source->filepath == $_file_to_check[0] && isset($this->source->timestamp)) {
- // do not recheck current template
- $mtime = $this->source->timestamp;
- } else {
- // file and php types can be checked without loading the respective resource handlers
- $mtime = @filemtime($_file_to_check[0]);
- }
- } elseif ($_file_to_check[2] == 'string') {
- continue;
- } else {
- $source = Smarty_Resource::source(null, $this->smarty, $_file_to_check[0]);
- $mtime = $source->timestamp;
- }
- if (!$mtime || $mtime > $_file_to_check[1]) {
- $is_valid = false;
- break;
- }
- }
- }
- if ($cache) {
- $this->cached->valid = $is_valid;
- } else {
- $this->mustCompile = !$is_valid;
- }
- // store data in reusable Smarty_Template_Compiled
- if (!$cache) {
- $this->compiled->_properties = $properties;
- }
- return $is_valid;
+ throw new SmartyException("Not matching {capture} open/close in \"{$this->template_resource}\"");
}
/**
- * Template code runtime function to create a local Smarty variable for array assignments
+ * Load compiled object
*
- * @param string $tpl_var tempate variable name
- * @param bool $nocache cache mode of variable
- * @param int $scope scope of variable
*/
- public function createLocalArrayVariable($tpl_var, $nocache = false, $scope = Smarty::SCOPE_LOCAL)
+ public function loadCompiled()
{
- if (!isset($this->tpl_vars[$tpl_var])) {
- $this->tpl_vars[$tpl_var] = new Smarty_variable(array(), $nocache, $scope);
- } else {
- $this->tpl_vars[$tpl_var] = clone $this->tpl_vars[$tpl_var];
- if ($scope != Smarty::SCOPE_LOCAL) {
- $this->tpl_vars[$tpl_var]->scope = $scope;
- }
- if (!(is_array($this->tpl_vars[$tpl_var]->value) || $this->tpl_vars[$tpl_var]->value instanceof ArrayAccess)) {
- settype($this->tpl_vars[$tpl_var]->value, 'array');
- }
+ if (!isset($this->compiled)) {
+ $this->compiled = Smarty_Template_Compiled::load($this);
}
}
/**
- * Template code runtime function to get pointer to template variable array of requested scope
+ * Load cached object
*
- * @param int $scope requested variable scope
- * @return array array of template variables
*/
- public function &getScope($scope)
+ public function loadCached()
{
- if ($scope == Smarty::SCOPE_PARENT && !empty($this->parent)) {
- return $this->parent->tpl_vars;
- } elseif ($scope == Smarty::SCOPE_ROOT && !empty($this->parent)) {
- $ptr = $this->parent;
- while (!empty($ptr->parent)) {
- $ptr = $ptr->parent;
- }
- return $ptr->tpl_vars;
- } elseif ($scope == Smarty::SCOPE_GLOBAL) {
- return Smarty::$global_tpl_vars;
+ if (!isset($this->cached)) {
+ $this->cached = Smarty_Template_Cached::load($this);
}
- $null = null;
- return $null;
}
/**
- * Get parent or root of template parent chain
+ * Load compiler object
*
- * @param int $scope pqrent or root scope
- * @return mixed object
+ * @throws \SmartyException
*/
- public function getScopePointer($scope)
+ public function loadCompiler()
{
- if ($scope == Smarty::SCOPE_PARENT && !empty($this->parent)) {
- return $this->parent;
- } elseif ($scope == Smarty::SCOPE_ROOT && !empty($this->parent)) {
- $ptr = $this->parent;
- while (!empty($ptr->parent)) {
- $ptr = $ptr->parent;
- }
- return $ptr;
+ if (!class_exists($this->source->handler->compiler_class)) {
+ $this->smarty->loadPlugin($this->source->handler->compiler_class);
}
- return null;
+ $this->compiler = new $this->source->handler->compiler_class($this->source->handler->template_lexer_class,
+ $this->source->handler->template_parser_class,
+ $this->smarty);
}
/**
- * [util function] counts an array, arrayaccess/traversable or PDOStatement object
+ * Handle unknown class methods
*
- * @param mixed $value
- * @return int the count for arrays and objects that implement countable, 1 for other objects that don't, and 0 for empty elements
- */
- public function _count($value)
- {
- if (is_array($value) === true || $value instanceof Countable) {
- return count($value);
- } elseif ($value instanceof IteratorAggregate) {
- // Note: getIterator() returns a Traversable, not an Iterator
- // thus rewind() and valid() methods may not be present
- return iterator_count($value->getIterator());
- } elseif ($value instanceof Iterator) {
- return iterator_count($value);
- } elseif ($value instanceof PDOStatement) {
- return $value->rowCount();
- } elseif ($value instanceof Traversable) {
- return iterator_count($value);
- } elseif ($value instanceof ArrayAccess) {
- if ($value->offsetExists(0)) {
- return 1;
- }
- } elseif (is_object($value)) {
- return count($value);
- }
- return 0;
- }
-
- /**
- * runtime error not matching capture tags
+ * @param string $name unknown method-name
+ * @param array $args argument array
*
+ * @return mixed
+ * @throws SmartyException
*/
- public function capture_error()
+ public function __call($name, $args)
{
- throw new SmartyException("Not matching {capture} open/close in \"{$this->template_resource}\"");
+ // method of Smarty object?
+ if (method_exists($this->smarty, $name)) {
+ return call_user_func_array(array($this->smarty, $name), $args);
+ }
+ // parent
+ return parent::__call($name, $args);
}
/**
- * Empty cache for this template
- *
- * @param integer $exp_time expiration time
- * @return integer number of cache files deleted
- */
- public function clearCache($exp_time=null)
- {
- Smarty_CacheResource::invalidLoadedCache($this->smarty);
- return $this->cached->handler->clear($this->smarty, $this->template_name, $this->cache_id, $this->compile_id, $exp_time);
- }
-
- /**
* set Smarty property in template context
*
* @param string $property_name property name
* @param mixed $value value
+ *
+ * @throws SmartyException
*/
public function __set($property_name, $value)
{
switch ($property_name) {
- case 'source':
case 'compiled':
case 'cached':
case 'compiler':
$this->$property_name = $value;
return;
-
- // FIXME: routing of template -> smarty attributes
default:
+ // Smarty property ?
if (property_exists($this->smarty, $property_name)) {
$this->smarty->$property_name = $value;
return;
}
}
-
throw new SmartyException("invalid template property '$property_name'.");
}
@@ -625,60 +337,35 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
* get Smarty property in template context
*
* @param string $property_name property name
+ *
+ * @return mixed|Smarty_Template_Cached
+ * @throws SmartyException
*/
public function __get($property_name)
{
switch ($property_name) {
- case 'source':
- if (strlen($this->template_resource) == 0) {
- throw new SmartyException('Missing template name');
- }
- $this->source = Smarty_Resource::source($this);
- // cache template object under a unique ID
- // do not cache eval resources
- if ($this->source->type != 'eval') {
- if ($this->smarty->allow_ambiguous_resources) {
- $_templateId = $this->source->unique_resource . $this->cache_id . $this->compile_id;
- } else {
- $_templateId = $this->smarty->joined_template_dir . '#' . $this->template_resource . $this->cache_id . $this->compile_id;
- }
-
- if (isset($_templateId[150])) {
- $_templateId = sha1($_templateId);
- }
- $this->smarty->template_objects[$_templateId] = $this;
- }
- return $this->source;
-
case 'compiled':
- $this->compiled = $this->source->getCompiled($this);
+ $this->loadCompiled();
return $this->compiled;
case 'cached':
- if (!class_exists('Smarty_Template_Cached')) {
- include SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php';
- }
- $this->cached = new Smarty_Template_Cached($this);
+ $this->loadCached();
return $this->cached;
case 'compiler':
- $this->smarty->loadPlugin($this->source->compiler_class);
- $this->compiler = new $this->source->compiler_class($this->source->template_lexer_class, $this->source->template_parser_class, $this->smarty);
+ $this->loadCompiler();
return $this->compiler;
-
- // FIXME: routing of template -> smarty attributes
default:
+ // Smarty property ?
if (property_exists($this->smarty, $property_name)) {
return $this->smarty->$property_name;
}
}
-
throw new SmartyException("template property '$property_name' does not exist.");
}
/**
- * Template data object destrutor
- *
+ * Template data object destructor
*/
public function __destruct()
{
@@ -686,7 +373,4 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
$this->cached->handler->releaseLock($this->smarty, $this->cached);
}
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_templatebase.php b/include/smarty/libs/sysplugins/smarty_internal_templatebase.php
index 1cb9bb949..9b4953dee 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_templatebase.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_templatebase.php
@@ -1,811 +1,316 @@
<?php
/**
* Smarty Internal Plugin Smarty Template Base
+ * This file contains the basic shared methods for template handling
*
- * This file contains the basic shared methodes for template handling
- *
- * @package Smarty
+ * @package Smarty
* @subpackage Template
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
- * Class with shared template methodes
+ * Class with shared template methods
*
- * @package Smarty
- * @subpackage Template
+ * @package Smarty
+ * @subpackage Template
+ *
+ * @property Smarty $smarty
+ * @method Smarty_Internal_TemplateBase setAutoloadFilters(mixed $filters, string $type = null)
+ * @method Smarty_Internal_TemplateBase addAutoloadFilters(mixed $filters, string $type = null)
+ * @method array getAutoloadFilters(string $type = null)
+ * @local_method Smarty_Internal_TemplateBase registerFilter(string $type, callback $callback, string $name = null)
+ * @method Smarty_Internal_TemplateBase unregisterFilter(string $type, mixed $callback)
+ * @method Smarty_Internal_TemplateBase unloadFilter(string $type, string $name)
+ * @method string getDebugTemplate()
+ * @method Smarty_Internal_TemplateBase setDebugTemplate(string $tpl_name)
+ * @method Smarty_Internal_TemplateBase setDefaultModifier(mixed $modifiers)
+ * @method Smarty_Internal_TemplateBase addDefaultModifier(mixed $modifiers)
+ * @method array getDefaultModifier()
+ * @method Smarty_Internal_TemplateBase registerDefaultPluginHandler(callback $callback)
+ * @method Smarty_Internal_TemplateBase registerResource(string $name, Smarty_Resource $resource_handler)
+ * @method Smarty_Internal_TemplateBase unregisterResource(string $name)
+ * @method Smarty_Internal_TemplateBase registerCacheResource(string $name, Smarty_CacheResource $resource_handler)
+ * @method Smarty_Internal_TemplateBase unregisterCacheResource(string $name)
+ * @method Smarty_Internal_TemplateBase unregisterPlugin(string $type, string $name)
+ * @method Smarty_Internal_TemplateBase unregisterObject(string $object_name)
+ * @method object getRegisteredObject(string $object_name)
+ * @method Smarty_Internal_TemplateBase registerClass(string $class_name, string $class_impl)
+ * @method Smarty_Internal_TemplateBase createData(Smarty_Internal_Data $parent = null, string $name = null)
+ * @method array getTags(mixed $template = null)
*/
-abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
-
+abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data
+{
/**
- * fetches a rendered Smarty template
+ * Set this if you want different sets of cache files for the same
+ * templates.
*
- * @param string $template the resource handle of the template file or template object
- * @param mixed $cache_id cache id to be used with this template
- * @param mixed $compile_id compile id to be used with this template
- * @param object $parent next higher level of Smarty variables
- * @param bool $display true: display, false: fetch
- * @param bool $merge_tpl_vars if true parent template variables merged in to local scope
- * @param bool $no_output_filter if true do not run output filter
- * @return string rendered template output
+ * @var string
*/
- public function fetch($template = null, $cache_id = null, $compile_id = null, $parent = null, $display = false, $merge_tpl_vars = true, $no_output_filter = false)
- {
- if ($template === null && $this instanceof $this->template_class) {
- $template = $this;
- }
- if (!empty($cache_id) && is_object($cache_id)) {
- $parent = $cache_id;
- $cache_id = null;
- }
- if ($parent === null && ($this instanceof Smarty || is_string($template))) {
- $parent = $this;
- }
- // create template object if necessary
- $_template = ($template instanceof $this->template_class)
- ? $template
- : $this->smarty->createTemplate($template, $cache_id, $compile_id, $parent, false);
- // if called by Smarty object make sure we use current caching status
- if ($this instanceof Smarty) {
- $_template->caching = $this->caching;
- }
- // merge all variable scopes into template
- if ($merge_tpl_vars) {
- // save local variables
- $save_tpl_vars = $_template->tpl_vars;
- $save_config_vars = $_template->config_vars;
- $ptr_array = array($_template);
- $ptr = $_template;
- while (isset($ptr->parent)) {
- $ptr_array[] = $ptr = $ptr->parent;
- }
- $ptr_array = array_reverse($ptr_array);
- $parent_ptr = reset($ptr_array);
- $tpl_vars = $parent_ptr->tpl_vars;
- $config_vars = $parent_ptr->config_vars;
- while ($parent_ptr = next($ptr_array)) {
- if (!empty($parent_ptr->tpl_vars)) {
- $tpl_vars = array_merge($tpl_vars, $parent_ptr->tpl_vars);
- }
- if (!empty($parent_ptr->config_vars)) {
- $config_vars = array_merge($config_vars, $parent_ptr->config_vars);
- }
- }
- if (!empty(Smarty::$global_tpl_vars)) {
- $tpl_vars = array_merge(Smarty::$global_tpl_vars, $tpl_vars);
- }
- $_template->tpl_vars = $tpl_vars;
- $_template->config_vars = $config_vars;
- }
- // dummy local smarty variable
- if (!isset($_template->tpl_vars['smarty'])) {
- $_template->tpl_vars['smarty'] = new Smarty_Variable;
- }
- if (isset($this->smarty->error_reporting)) {
- $_smarty_old_error_level = error_reporting($this->smarty->error_reporting);
- }
- // check URL debugging control
- if (!$this->smarty->debugging && $this->smarty->debugging_ctrl == 'URL') {
- if (isset($_SERVER['QUERY_STRING'])) {
- $_query_string = $_SERVER['QUERY_STRING'];
- } else {
- $_query_string = '';
- }
- if (false !== strpos($_query_string, $this->smarty->smarty_debug_id)) {
- if (false !== strpos($_query_string, $this->smarty->smarty_debug_id . '=on')) {
- // enable debugging for this browser session
- setcookie('SMARTY_DEBUG', true);
- $this->smarty->debugging = true;
- } elseif (false !== strpos($_query_string, $this->smarty->smarty_debug_id . '=off')) {
- // disable debugging for this browser session
- setcookie('SMARTY_DEBUG', false);
- $this->smarty->debugging = false;
- } else {
- // enable debugging for this page
- $this->smarty->debugging = true;
- }
- } else {
- if (isset($_COOKIE['SMARTY_DEBUG'])) {
- $this->smarty->debugging = true;
- }
- }
- }
- // must reset merge template date
- $_template->smarty->merged_templates_func = array();
- // get rendered template
- // disable caching for evaluated code
- if ($_template->source->recompiled) {
- $_template->caching = false;
- }
- // checks if template exists
- if (!$_template->source->exists) {
- if ($_template->parent instanceof Smarty_Internal_Template) {
- $parent_resource = " in '{$_template->parent->template_resource}'";
- } else {
- $parent_resource = '';
- }
- throw new SmartyException("Unable to load template {$_template->source->type} '{$_template->source->name}'{$parent_resource}");
- }
- // read from cache or render
- if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || !$_template->cached->valid) {
- // render template (not loaded and not in cache)
- if (!$_template->source->uncompiled) {
- $_smarty_tpl = $_template;
- if ($_template->source->recompiled) {
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::start_compile($_template);
- }
- $code = $_template->compiler->compileTemplate($_template);
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::end_compile($_template);
- }
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::start_render($_template);
- }
- try {
- ob_start();
- eval("?>" . $code);
- unset($code);
- } catch (Exception $e) {
- ob_get_clean();
- throw $e;
- }
- } else {
- if (!$_template->compiled->exists || ($_template->smarty->force_compile && !$_template->compiled->isCompiled)) {
- $_template->compileTemplateSource();
- }
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::start_render($_template);
- }
- if (!$_template->compiled->loaded) {
- include($_template->compiled->filepath);
- if ($_template->mustCompile) {
- // recompile and load again
- $_template->compileTemplateSource();
- include($_template->compiled->filepath);
- }
- $_template->compiled->loaded = true;
- } else {
- $_template->decodeProperties($_template->compiled->_properties, false);
- }
- try {
- ob_start();
- if (empty($_template->properties['unifunc']) || !is_callable($_template->properties['unifunc'])) {
- throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'");
- }
- array_unshift($_template->_capture_stack,array());
- //
- // render compiled template
- //
- $_template->properties['unifunc']($_template);
- // any unclosed {capture} tags ?
- if (isset($_template->_capture_stack[0][0])) {
- $_template->capture_error();
- }
- array_shift($_template->_capture_stack);
- } catch (Exception $e) {
- ob_get_clean();
- throw $e;
- }
- }
- } else {
- if ($_template->source->uncompiled) {
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::start_render($_template);
- }
- try {
- ob_start();
- $_template->source->renderUncompiled($_template);
- } catch (Exception $e) {
- ob_get_clean();
- throw $e;
- }
- } else {
- throw new SmartyException("Resource '$_template->source->type' must have 'renderUncompiled' method");
- }
- }
- $_output = ob_get_clean();
- if (!$_template->source->recompiled && empty($_template->properties['file_dependency'][$_template->source->uid])) {
- $_template->properties['file_dependency'][$_template->source->uid] = array($_template->source->filepath, $_template->source->timestamp, $_template->source->type);
- }
- if ($_template->parent instanceof Smarty_Internal_Template) {
- $_template->parent->properties['file_dependency'] = array_merge($_template->parent->properties['file_dependency'], $_template->properties['file_dependency']);
- foreach ($_template->required_plugins as $code => $tmp1) {
- foreach ($tmp1 as $name => $tmp) {
- foreach ($tmp as $type => $data) {
- $_template->parent->required_plugins[$code][$name][$type] = $data;
- }
- }
- }
- }
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::end_render($_template);
- }
- // write to cache when nessecary
- if (!$_template->source->recompiled && ($_template->caching == Smarty::CACHING_LIFETIME_SAVED || $_template->caching == Smarty::CACHING_LIFETIME_CURRENT)) {
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::start_cache($_template);
- }
- $_template->properties['has_nocache_code'] = false;
- // get text between non-cached items
- $cache_split = preg_split("!/\*%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*\/(.+?)/\*/%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*/!s", $_output);
- // get non-cached items
- preg_match_all("!/\*%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*\/(.+?)/\*/%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*/!s", $_output, $cache_parts);
- $output = '';
- // loop over items, stitch back together
- foreach ($cache_split as $curr_idx => $curr_split) {
- // escape PHP tags in template content
- $output .= preg_replace('/(<%|%>|<\?php|<\?|\?>)/', '<?php echo \'$1\'; ?>', $curr_split);
- if (isset($cache_parts[0][$curr_idx])) {
- $_template->properties['has_nocache_code'] = true;
- // remove nocache tags from cache output
- $output .= preg_replace("!/\*/?%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*/!", '', $cache_parts[0][$curr_idx]);
- }
- }
- if (!$no_output_filter && !$_template->has_nocache_code && (isset($this->smarty->autoload_filters['output']) || isset($this->smarty->registered_filters['output']))) {
- $output = Smarty_Internal_Filter_Handler::runFilter('output', $output, $_template);
- }
- // rendering (must be done before writing cache file because of {function} nocache handling)
- $_smarty_tpl = $_template;
- try {
- ob_start();
- eval("?>" . $output);
- $_output = ob_get_clean();
- } catch (Exception $e) {
- ob_get_clean();
- throw $e;
- }
- // write cache file content
- $_template->writeCachedContent($output);
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::end_cache($_template);
- }
- } else {
- // var_dump('renderTemplate', $_template->has_nocache_code, $_template->template_resource, $_template->properties['nocache_hash'], $_template->parent->properties['nocache_hash'], $_output);
- if (!empty($_template->properties['nocache_hash']) && !empty($_template->parent->properties['nocache_hash'])) {
- // replace nocache_hash
- $_output = str_replace("{$_template->properties['nocache_hash']}", $_template->parent->properties['nocache_hash'], $_output);
- $_template->parent->has_nocache_code = $_template->parent->has_nocache_code || $_template->has_nocache_code;
- }
- }
- } else {
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::start_cache($_template);
- }
- try {
- ob_start();
- array_unshift($_template->_capture_stack,array());
- //
- // render cached template
- //
- $_template->properties['unifunc']($_template);
- // any unclosed {capture} tags ?
- if (isset($_template->_capture_stack[0][0])) {
- $_template->capture_error();
- }
- array_shift($_template->_capture_stack);
- $_output = ob_get_clean();
- } catch (Exception $e) {
- ob_get_clean();
- throw $e;
- }
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::end_cache($_template);
- }
- }
- if ((!$this->caching || $_template->has_nocache_code || $_template->source->recompiled) && !$no_output_filter && (isset($this->smarty->autoload_filters['output']) || isset($this->smarty->registered_filters['output']))) {
- $_output = Smarty_Internal_Filter_Handler::runFilter('output', $_output, $_template);
- }
- if (isset($this->error_reporting)) {
- error_reporting($_smarty_old_error_level);
- }
- // display or fetch
- if ($display) {
- if ($this->caching && $this->cache_modified_check) {
- $_isCached = $_template->isCached() && !$_template->has_nocache_code;
- $_last_modified_date = @substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_SERVER['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3);
- if ($_isCached && $_template->cached->timestamp <= strtotime($_last_modified_date)) {
- switch (PHP_SAPI) {
- case 'cgi': // php-cgi < 5.3
- case 'cgi-fcgi': // php-cgi >= 5.3
- case 'fpm-fcgi': // php-fpm >= 5.3.3
- header('Status: 304 Not Modified');
- break;
-
- case 'cli':
- if (/* ^phpunit */!empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS'])/* phpunit$ */) {
- $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified';
- }
- break;
-
- default:
- header($_SERVER['SERVER_PROTOCOL'].' 304 Not Modified');
- break;
- }
- } else {
- switch (PHP_SAPI) {
- case 'cli':
- if (/* ^phpunit */!empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS'])/* phpunit$ */) {
- $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $_template->cached->timestamp) . ' GMT';
- }
- break;
-
- default:
- header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $_template->cached->timestamp) . ' GMT');
- break;
- }
- echo $_output;
- }
- } else {
- echo $_output;
- }
- // debug output
- if ($this->smarty->debugging) {
- Smarty_Internal_Debug::display_debug($this);
- }
- if ($merge_tpl_vars) {
- // restore local variables
- $_template->tpl_vars = $save_tpl_vars;
- $_template->config_vars = $save_config_vars;
- }
- return;
- } else {
- if ($merge_tpl_vars) {
- // restore local variables
- $_template->tpl_vars = $save_tpl_vars;
- $_template->config_vars = $save_config_vars;
- }
- // return fetched content
- return $_output;
- }
- }
+ public $cache_id = null;
/**
- * displays a Smarty template
+ * Set this if you want different sets of compiled files for the same
+ * templates.
*
- * @param string $template the resource handle of the template file or template object
- * @param mixed $cache_id cache id to be used with this template
- * @param mixed $compile_id compile id to be used with this template
- * @param object $parent next higher level of Smarty variables
+ * @var string
*/
- public function display($template = null, $cache_id = null, $compile_id = null, $parent = null)
- {
- // display template
- $this->fetch($template, $cache_id, $compile_id, $parent, true);
- }
+ public $compile_id = null;
/**
- * test if cache is valid
+ * caching enabled
*
- * @param string|object $template the resource handle of the template file or template object
- * @param mixed $cache_id cache id to be used with this template
- * @param mixed $compile_id compile id to be used with this template
- * @param object $parent next higher level of Smarty variables
- * @return boolean cache status
+ * @var boolean
*/
- public function isCached($template = null, $cache_id = null, $compile_id = null, $parent = null)
- {
- if ($template === null && $this instanceof $this->template_class) {
- return $this->cached->valid;
- }
- if (!($template instanceof $this->template_class)) {
- if ($parent === null) {
- $parent = $this;
- }
- $template = $this->smarty->createTemplate($template, $cache_id, $compile_id, $parent, false);
- }
- // return cache status of template
- return $template->cached->valid;
- }
+ public $caching = false;
/**
- * creates a data object
+ * cache lifetime in seconds
*
- * @param object $parent next higher level of Smarty variables
- * @returns Smarty_Data data object
+ * @var integer
*/
- public function createData($parent = null)
- {
- return new Smarty_Data($parent, $this);
- }
+ public $cache_lifetime = 3600;
/**
- * Registers plugin to be used in templates
+ * universal cache
*
- * @param string $type plugin type
- * @param string $tag name of template tag
- * @param callback $callback PHP callback to register
- * @param boolean $cacheable if true (default) this fuction is cachable
- * @param array $cache_attr caching attributes if any
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- * @throws SmartyException when the plugin tag is invalid
+ * @var array()
*/
- public function registerPlugin($type, $tag, $callback, $cacheable = true, $cache_attr = null)
- {
- if (isset($this->smarty->registered_plugins[$type][$tag])) {
- throw new SmartyException("Plugin tag \"{$tag}\" already registered");
- } elseif (!is_callable($callback)) {
- throw new SmartyException("Plugin \"{$tag}\" not callable");
- } else {
- $this->smarty->registered_plugins[$type][$tag] = array($callback, (bool) $cacheable, (array) $cache_attr);
- }
-
- return $this;
- }
+ public $_cache = array();
/**
- * Unregister Plugin
+ * fetches a rendered Smarty template
*
- * @param string $type of plugin
- * @param string $tag name of plugin
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- */
- public function unregisterPlugin($type, $tag)
- {
- if (isset($this->smarty->registered_plugins[$type][$tag])) {
- unset($this->smarty->registered_plugins[$type][$tag]);
- }
-
- return $this;
- }
-
- /**
- * Registers a resource to fetch a template
+ * @param string $template the resource handle of the template file or template object
+ * @param mixed $cache_id cache id to be used with this template
+ * @param mixed $compile_id compile id to be used with this template
+ * @param object $parent next higher level of Smarty variables
*
- * @param string $type name of resource type
- * @param Smarty_Resource|array $callback or instance of Smarty_Resource, or array of callbacks to handle resource (deprecated)
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
+ * @throws Exception
+ * @throws SmartyException
+ * @return string rendered template output
*/
- public function registerResource($type, $callback)
+ public function fetch($template = null, $cache_id = null, $compile_id = null, $parent = null)
{
- $this->smarty->registered_resources[$type] = $callback instanceof Smarty_Resource ? $callback : array($callback, false);
- return $this;
+ $result = $this->_execute($template, $cache_id, $compile_id, $parent, 0);
+ return $result === null ? ob_get_clean() : $result;
}
/**
- * Unregisters a resource
+ * displays a Smarty template
*
- * @param string $type name of resource type
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
+ * @param string $template the resource handle of the template file or template object
+ * @param mixed $cache_id cache id to be used with this template
+ * @param mixed $compile_id compile id to be used with this template
+ * @param object $parent next higher level of Smarty variables
*/
- public function unregisterResource($type)
+ public function display($template = null, $cache_id = null, $compile_id = null, $parent = null)
{
- if (isset($this->smarty->registered_resources[$type])) {
- unset($this->smarty->registered_resources[$type]);
- }
-
- return $this;
+ // display template
+ $this->_execute($template, $cache_id, $compile_id, $parent, 1);
}
/**
- * Registers a cache resource to cache a template's output
+ * test if cache is valid
*
- * @param string $type name of cache resource type
- * @param Smarty_CacheResource $callback instance of Smarty_CacheResource to handle output caching
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- */
- public function registerCacheResource($type, Smarty_CacheResource $callback)
- {
- $this->smarty->registered_cache_resources[$type] = $callback;
- return $this;
- }
-
- /**
- * Unregisters a cache resource
+ * @api Smarty::isCached()
+ * @link http://www.smarty.net/docs/en/api.is.cached.tpl
+ *
+ * @param null|string|\Smarty_Internal_Template $template the resource handle of the template file or template object
+ * @param mixed $cache_id cache id to be used with this template
+ * @param mixed $compile_id compile id to be used with this template
+ * @param object $parent next higher level of Smarty variables
*
- * @param string $type name of cache resource type
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
+ * @return boolean cache status
*/
- public function unregisterCacheResource($type)
+ public function isCached($template = null, $cache_id = null, $compile_id = null, $parent = null)
{
- if (isset($this->smarty->registered_cache_resources[$type])) {
- unset($this->smarty->registered_cache_resources[$type]);
- }
-
- return $this;
+ return $this->_execute($template, $cache_id, $compile_id, $parent, 2);
}
/**
- * Registers object to be used in templates
+ * fetches a rendered Smarty template
*
- * @param string $object name of template object
- * @param object $object_impl the referenced PHP object to register
- * @param array $allowed list of allowed methods (empty = all)
- * @param boolean $smarty_args smarty argument format, else traditional
- * @param array $block_methods list of block-methods
- * @param array $block_functs list of methods that are block format
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- * @throws SmartyException if any of the methods in $allowed or $block_methods are invalid
+ * @param string $template the resource handle of the template file or template object
+ * @param mixed $cache_id cache id to be used with this template
+ * @param mixed $compile_id compile id to be used with this template
+ * @param object $parent next higher level of Smarty variables
+ * @param string $function function type 0 = fetch, 1 = display, 2 = isCache
+ *
+ * @return mixed
+ * @throws \Exception
+ * @throws \SmartyException
*/
- public function registerObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array())
+ private function _execute($template, $cache_id, $compile_id, $parent, $function)
{
- // test if allowed methodes callable
- if (!empty($allowed)) {
- foreach ((array) $allowed as $method) {
- if (!is_callable(array($object_impl, $method))) {
- throw new SmartyException("Undefined method '$method' in registered object");
- }
+ $smarty = $this->_objType == 1 ? $this : $this->smarty;
+ if ($template === null) {
+ if ($this->_objType != 2) {
+ throw new SmartyException($function . '():Missing \'$template\' parameter');
+ } else {
+ $template = clone $this;
+ }
+ } elseif (is_object($template)) {
+ if (!isset($template->_objType) || $template->_objType != 2) {
+ throw new SmartyException($function . '():Template object expected');
+ } else {
+ /* @var Smarty_Internal_Template $template */
+ $template = clone $template;
+ }
+ } else {
+ // get template object
+ /* @var Smarty_Internal_Template $template */
+ $template = $smarty->createTemplate($template, $cache_id, $compile_id, $parent, false);
+ if ($this->_objType == 1) {
+ // set caching in template object
+ $template->caching = $this->caching;
}
}
- // test if block methodes callable
- if (!empty($block_methods)) {
- foreach ((array) $block_methods as $method) {
- if (!is_callable(array($object_impl, $method))) {
- throw new SmartyException("Undefined method '$method' in registered object");
+ // fetch template content
+ $level = ob_get_level();
+ try {
+ $_smarty_old_error_level =
+ ($this->_objType == 1 && isset($smarty->error_reporting)) ? error_reporting($smarty->error_reporting) :
+ null;
+ if ($function == 2) {
+ if ($template->caching) {
+ // return cache status of template
+ if (!isset($template->cached)) {
+ $template->loadCached();
+ }
+ $result = $template->cached->isCached($template);
+ $template->smarty->_cache['isCached'][$template->_getTemplateId()] = $template;
+ } else {
+ return false;
+ }
+ } else {
+ ob_start();
+ $template->_mergeVars();
+ if (!empty(Smarty::$global_tpl_vars)) {
+ $template->tpl_vars = array_merge(Smarty::$global_tpl_vars, $template->tpl_vars);
}
+ $result = $template->render(false, $function);
}
+ if (isset($_smarty_old_error_level)) {
+ error_reporting($_smarty_old_error_level);
+ }
+ return $result;
}
- // register the object
- $this->smarty->registered_objects[$object_name] =
- array($object_impl, (array) $allowed, (boolean) $smarty_args, (array) $block_methods);
- return $this;
- }
-
- /**
- * return a reference to a registered object
- *
- * @param string $name object name
- * @return object
- * @throws SmartyException if no such object is found
- */
- public function getRegisteredObject($name)
- {
- if (!isset($this->smarty->registered_objects[$name])) {
- throw new SmartyException("'$name' is not a registered object");
- }
- if (!is_object($this->smarty->registered_objects[$name][0])) {
- throw new SmartyException("registered '$name' is not an object");
+ catch (Exception $e) {
+ while (ob_get_level() > $level) {
+ ob_end_clean();
+ }
+ throw $e;
}
- return $this->smarty->registered_objects[$name][0];
}
/**
- * unregister an object
+ * Registers plugin to be used in templates
*
- * @param string $name object name
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- */
- public function unregisterObject($name)
- {
- if (isset($this->smarty->registered_objects[$name])) {
- unset($this->smarty->registered_objects[$name]);
- }
-
- return $this;
- }
-
- /**
- * Registers static classes to be used in templates
+ * @api Smarty::registerPlugin()
+ * @link http://www.smarty.net/docs/en/api.register.plugin.tpl
*
- * @param string $class name of template class
- * @param string $class_impl the referenced PHP class to register
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- * @throws SmartyException if $class_impl does not refer to an existing class
- */
- public function registerClass($class_name, $class_impl)
- {
- // test if exists
- if (!class_exists($class_impl)) {
- throw new SmartyException("Undefined class '$class_impl' in register template class");
- }
- // register the class
- $this->smarty->registered_classes[$class_name] = $class_impl;
- return $this;
- }
-
- /**
- * Registers a default plugin handler
+ * @param string $type plugin type
+ * @param string $name name of template tag
+ * @param callback $callback PHP callback to register
+ * @param bool $cacheable if true (default) this function is cache able
+ * @param mixed $cache_attr caching attributes if any
*
- * @param callable $callback class/method name
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- * @throws SmartyException if $callback is not callable
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws SmartyException when the plugin tag is invalid
*/
- public function registerDefaultPluginHandler($callback)
+ public function registerPlugin($type, $name, $callback, $cacheable = true, $cache_attr = null)
{
- if (is_callable($callback)) {
- $this->smarty->default_plugin_handler_func = $callback;
- } else {
- throw new SmartyException("Default plugin handler '$callback' not callable");
- }
-
- return $this;
+ return $this->ext->registerPlugin->registerPlugin($this, $type, $name, $callback, $cacheable, $cache_attr);
}
/**
- * Registers a default template handler
+ * load a filter of specified type and name
*
- * @param callable $callback class/method name
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- * @throws SmartyException if $callback is not callable
- */
- public function registerDefaultTemplateHandler($callback)
- {
- if (is_callable($callback)) {
- $this->smarty->default_template_handler_func = $callback;
- } else {
- throw new SmartyException("Default template handler '$callback' not callable");
- }
-
- return $this;
- }
-
- /**
- * Registers a default template handler
+ * @api Smarty::loadFilter()
+ * @link http://www.smarty.net/docs/en/api.load.filter.tpl
+ *
+ * @param string $type filter type
+ * @param string $name filter name
*
- * @param callable $callback class/method name
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- * @throws SmartyException if $callback is not callable
+ * @return bool
+ * @throws SmartyException if filter could not be loaded
*/
- public function registerDefaultConfigHandler($callback)
+ public function loadFilter($type, $name)
{
- if (is_callable($callback)) {
- $this->smarty->default_config_handler_func = $callback;
- } else {
- throw new SmartyException("Default config handler '$callback' not callable");
- }
-
- return $this;
+ return $this->ext->loadFilter->loadFilter($this, $type, $name);
}
/**
* Registers a filter function
*
- * @param string $type filter type
- * @param callback $callback
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
- */
- public function registerFilter($type, $callback)
- {
- $this->smarty->registered_filters[$type][$this->_get_filter_name($callback)] = $callback;
- return $this;
- }
-
- /**
- * Unregisters a filter function
+ * @api Smarty::registerFilter()
+ * @link http://www.smarty.net/docs/en/api.register.filter.tpl
+ *
+ * @param string $type filter type
+ * @param callback $callback
+ * @param string|null $name optional filter name
*
- * @param string $type filter type
- * @param callback $callback
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws \SmartyException
*/
- public function unregisterFilter($type, $callback)
+ public function registerFilter($type, $callback, $name = null)
{
- $name = $this->_get_filter_name($callback);
- if (isset($this->smarty->registered_filters[$type][$name])) {
- unset($this->smarty->registered_filters[$type][$name]);
- }
-
- return $this;
+ return $this->ext->registerFilter->registerFilter($this, $type, $callback, $name);
}
/**
- * Return internal filter name
+ * Registers object to be used in templates
*
- * @param callback $function_name
- * @return string internal filter name
+ * @api Smarty::registerObject()
+ * @link http://www.smarty.net/docs/en/api.register.object.tpl
+ *
+ * @param string $object_name
+ * @param object $object the referenced PHP object to register
+ * @param array $allowed_methods_properties list of allowed methods (empty = all)
+ * @param bool $format smarty argument format, else traditional
+ * @param array $block_methods list of block-methods
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws \SmartyException
*/
- public function _get_filter_name($function_name)
+ public function registerObject($object_name, $object, $allowed_methods_properties = array(), $format = true,
+ $block_methods = array())
{
- if (is_array($function_name)) {
- $_class_name = (is_object($function_name[0]) ?
- get_class($function_name[0]) : $function_name[0]);
- return $_class_name . '_' . $function_name[1];
- } else {
- return $function_name;
- }
+ return $this->ext->registerObject->registerObject($this, $object_name, $object, $allowed_methods_properties,
+ $format, $block_methods);
}
/**
- * load a filter of specified type and name
- *
- * @param string $type filter type
- * @param string $name filter name
- * @throws SmartyException if filter could not be loaded
+ * @param boolean $caching
*/
- public function loadFilter($type, $name)
+ public function setCaching($caching)
{
- $_plugin = "smarty_{$type}filter_{$name}";
- $_filter_name = $_plugin;
- if ($this->smarty->loadPlugin($_plugin)) {
- if (class_exists($_plugin, false)) {
- $_plugin = array($_plugin, 'execute');
- }
- if (is_callable($_plugin)) {
- $this->smarty->registered_filters[$type][$_filter_name] = $_plugin;
- return true;
- }
- }
- throw new SmartyException("{$type}filter \"{$name}\" not callable");
+ $this->caching = $caching;
}
/**
- * unload a filter of specified type and name
- *
- * @param string $type filter type
- * @param string $name filter name
- * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining
+ * @param int $cache_lifetime
*/
- public function unloadFilter($type, $name)
+ public function setCacheLifetime($cache_lifetime)
{
- $_filter_name = "smarty_{$type}filter_{$name}";
- if (isset($this->smarty->registered_filters[$type][$_filter_name])) {
- unset ($this->smarty->registered_filters[$type][$_filter_name]);
- }
-
- return $this;
+ $this->cache_lifetime = $cache_lifetime;
}
/**
- * preg_replace callback to convert camelcase getter/setter to underscore property names
- *
- * @param string $match match string
- * @return string replacemant
+ * @param string $compile_id
*/
- private function replaceCamelcase($match) {
- return "_" . strtolower($match[1]);
+ public function setCompileId($compile_id)
+ {
+ $this->compile_id = $compile_id;
}
/**
- * Handle unknown class methods
- *
- * @param string $name unknown method-name
- * @param array $args argument array
+ * @param string $cache_id
*/
- public function __call($name, $args)
+ public function setCacheId($cache_id)
{
- static $_prefixes = array('set' => true, 'get' => true);
- static $_resolved_property_name = array();
- static $_resolved_property_source = array();
-
- // method of Smarty object?
- if (method_exists($this->smarty, $name)) {
- return call_user_func_array(array($this->smarty, $name), $args);
- }
- // see if this is a set/get for a property
- $first3 = strtolower(substr($name, 0, 3));
- if (isset($_prefixes[$first3]) && isset($name[3]) && $name[3] !== '_') {
- if (isset($_resolved_property_name[$name])) {
- $property_name = $_resolved_property_name[$name];
- } else {
- // try to keep case correct for future PHP 6.0 case-sensitive class methods
- // lcfirst() not available < PHP 5.3.0, so improvise
- $property_name = strtolower(substr($name, 3, 1)) . substr($name, 4);
- // convert camel case to underscored name
- $property_name = preg_replace_callback('/([A-Z])/', array($this,'replaceCamelcase'), $property_name);
- $_resolved_property_name[$name] = $property_name;
- }
- if (isset($_resolved_property_source[$property_name])) {
- $_is_this = $_resolved_property_source[$property_name];
- } else {
- $_is_this = null;
- if (property_exists($this, $property_name)) {
- $_is_this = true;
- } else if (property_exists($this->smarty, $property_name)) {
- $_is_this = false;
- }
- $_resolved_property_source[$property_name] = $_is_this;
- }
- if ($_is_this) {
- if ($first3 == 'get')
- return $this->$property_name;
- else
- return $this->$property_name = $args[0];
- } else if ($_is_this === false) {
- if ($first3 == 'get')
- return $this->smarty->$property_name;
- else
- return $this->smarty->$property_name = $args[0];
- } else {
- throw new SmartyException("property '$property_name' does not exist.");
- return false;
- }
- }
- if ($name == 'Smarty') {
- throw new SmartyException("PHP5 requires you to call __construct() instead of Smarty()");
- }
- // must be unknown
- throw new SmartyException("Call of unknown method '$name'.");
+ $this->cache_id = $cache_id;
}
}
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php b/include/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php
index c745d294d..6c3ea5f5d 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php
@@ -2,49 +2,61 @@
/**
* Smarty Internal Plugin Smarty Template Compiler Base
+ * This file contains the basic classes and methods for compiling Smarty templates with lexer/parser
*
- * This file contains the basic classes and methodes for compiling Smarty templates with lexer/parser
- *
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* Main abstract compiler class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
+ *
+ * @property Smarty_Internal_SmartyTemplateCompiler $prefixCompiledCode = ''
+ * @property Smarty_Internal_SmartyTemplateCompiler $postfixCompiledCode = ''
+ * @method Smarty_Internal_SmartyTemplateCompiler registerPostCompileCallback($callback, $parameter = array(), $key = null, $replace = false)
+ * @method Smarty_Internal_SmartyTemplateCompiler unregisterPostCompileCallback($key)
*/
-abstract class Smarty_Internal_TemplateCompilerBase {
+abstract class Smarty_Internal_TemplateCompilerBase
+{
/**
- * hash for nocache sections
+ * Smarty object
*
- * @var mixed
+ * @var Smarty
*/
- private $nocache_hash = null;
+ public $smarty = null;
/**
- * suppress generation of nocache code
+ * Parser object
*
- * @var bool
+ * @var Smarty_Internal_Templateparser
*/
- public $suppressNocacheProcessing = false;
+ public $parser = null;
/**
- * suppress generation of merged template code
+ * hash for nocache sections
+ *
+ * @var mixed
+ */
+ public $nocache_hash = null;
+
+ /**
+ * suppress generation of nocache code
*
* @var bool
*/
- public $suppressMergedTemplates = false;
+ public $suppressNocacheProcessing = false;
/**
- * compile tag objects
+ * compile tag objects cache
*
* @var array
*/
- public static $_tag_objects = array();
+ public $_tag_objects = array();
/**
* tag stack
@@ -61,18 +73,53 @@ abstract class Smarty_Internal_TemplateCompilerBase {
public $template = null;
/**
- * merged templates
+ * merged included sub template data
*
* @var array
*/
- public $merged_templates = array();
+ public $mergedSubTemplatesData = array();
/**
- * flag when compiling {block}
+ * merged sub template code
*
- * @var bool
+ * @var array
+ */
+ public $mergedSubTemplatesCode = array();
+
+ /**
+ * collected template properties during compilation
+ *
+ * @var array
+ */
+ public $templateProperties = array();
+
+ /**
+ * source line offset for error messages
+ *
+ * @var int
+ */
+ public $trace_line_offset = 0;
+
+ /**
+ * trace uid
+ *
+ * @var string
+ */
+ public $trace_uid = '';
+
+ /**
+ * trace file path
+ *
+ * @var string
*/
- public $inheritance = false;
+ public $trace_filepath = '';
+
+ /**
+ * stack for tracing file and line of nested {block} tags
+ *
+ * @var array
+ */
+ public $trace_stack = array();
/**
* plugins loaded by default plugin handler
@@ -90,174 +137,380 @@ abstract class Smarty_Internal_TemplateCompilerBase {
/**
* force compilation of complete template as nocache
+ *
* @var boolean
*/
public $forceNocache = false;
/**
- * suppress Smarty header code in compiled template
+ * flag if compiled template file shall we written
+ *
* @var bool
*/
- public $suppressHeader = false;
+ public $write_compiled_code = true;
/**
- * suppress template property header code in compiled template
- * @var bool
+ * Template functions
+ *
+ * @var array
*/
- public $suppressTemplatePropertyHeader = false;
+ public $tpl_function = array();
/**
- * flag if compiled template file shall we written
- * @var bool
+ * called sub functions from template function
+ *
+ * @var array
*/
- public $write_compiled_code = true;
+ public $called_functions = array();
/**
- * flag if currently a template function is compiled
- * @var bool
+ * compiled template or block function code
+ *
+ * @var string
*/
- public $compiles_template_function = false;
+ public $blockOrFunctionCode = '';
/**
- * called subfuntions from template function
- * @var array
+ * php_handling setting either from Smarty or security
+ *
+ * @var int
*/
- public $called_functions = array();
+ public $php_handling = 0;
/**
* flags for used modifier plugins
+ *
* @var array
*/
public $modifier_plugins = array();
/**
* type of already compiled modifier
+ *
* @var array
*/
public $known_modifier_type = array();
/**
- * Methode to compile a Smarty template
+ * parent compiler object for merged subtemplates and template functions
+ *
+ * @var Smarty_Internal_TemplateCompilerBase
+ */
+ public $parent_compiler = null;
+
+ /**
+ * Flag true when compiling nocache section
+ *
+ * @var bool
+ */
+ public $nocache = false;
+
+ /**
+ * Flag true when tag is compiled as nocache
+ *
+ * @var bool
+ */
+ public $tag_nocache = false;
+
+ /**
+ * Compiled tag prefix code
+ *
+ * @var array
+ */
+ public $prefix_code = array();
+
+ /**
+ * Prefix code stack
+ *
+ * @var array
+ */
+ public $prefixCodeStack = array();
+
+ /**
+ * Tag has compiled code
+ *
+ * @var bool
+ */
+ public $has_code = false;
+
+ /**
+ * A variable string was compiled
+ *
+ * @var bool
+ */
+ public $has_variable_string = false;
+
+ /**
+ * Tag creates output
+ *
+ * @var bool
+ */
+ public $has_output = false;
+
+ /**
+ * Stack for {setfilter} {/setfilter}
+ *
+ * @var array
+ */
+ public $variable_filter_stack = array();
+
+ /**
+ * variable filters for {setfilter} {/setfilter}
+ *
+ * @var array
+ */
+ public $variable_filters = array();
+
+ /**
+ * Nesting count of looping tags like {foreach}, {for}, {section}, {while}
+ *
+ * @var int
+ */
+ public $loopNesting = 0;
+
+ /**
+ * Strip preg pattern
+ *
+ * @var string
+ */
+ public $stripRegEx = '![\t ]*[\r\n]+[\t ]*!';
+
+ /**
+ * plugin search order
+ *
+ * @var array
+ */
+ public $plugin_search_order = array('function', 'block', 'compiler', 'class');
+
+ /**
+ * General storage area for tag compiler plugins
+ *
+ * @var array
+ */
+ public $_cache = array();
+
+ /**
+ * method to compile a Smarty template
+ *
+ * @param mixed $_content template source
+ * @param bool $isTemplateSource
*
- * @param mixed $_content template source
* @return bool true if compiling succeeded, false if it failed
*/
- abstract protected function doCompile($_content);
+ abstract protected function doCompile($_content, $isTemplateSource = false);
/**
* Initialize compiler
+ *
+ * @param Smarty $smarty global instance
*/
- public function __construct() {
- $this->nocache_hash = str_replace('.', '-', uniqid(rand(), true));
+ public function __construct(Smarty $smarty)
+ {
+ $this->smarty = $smarty;
+ $this->nocache_hash = str_replace(array('.', ','), '_', uniqid(rand(), true));
}
/**
* Method to compile a Smarty template
*
- * @param Smarty_Internal_Template $template template object to compile
+ * @param Smarty_Internal_Template $template template object to compile
+ * @param bool $nocache true is shall be compiled in nocache mode
+ * @param null|Smarty_Internal_TemplateCompilerBase $parent_compiler
+ *
* @return bool true if compiling succeeded, false if it failed
+ * @throws \Exception
*/
- public function compileTemplate(Smarty_Internal_Template $template) {
- if (empty($template->properties['nocache_hash'])) {
- $template->properties['nocache_hash'] = $this->nocache_hash;
- } else {
- $this->nocache_hash = $template->properties['nocache_hash'];
- }
- // flag for nochache sections
- $this->nocache = false;
- $this->tag_nocache = false;
- // save template object in compiler class
- $this->template = $template;
- // reset has noche code flag
- $this->template->has_nocache_code = false;
- $this->smarty->_current_file = $saved_filepath = $this->template->source->filepath;
- // template header code
- $template_header = '';
- if (!$this->suppressHeader) {
- $template_header .= "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . strftime("%Y-%m-%d %H:%M:%S") . "\n";
- $template_header .= " compiled from \"" . $this->template->source->filepath . "\" */ ?>\n";
- }
+ public function compileTemplate(Smarty_Internal_Template $template, $nocache = null,
+ Smarty_Internal_TemplateCompilerBase $parent_compiler = null)
+ {
+ // get code frame of compiled template
+ $_compiled_code = $template->smarty->ext->_codeFrame->create($template,
+ $this->compileTemplateSource($template, $nocache,
+ $parent_compiler),
+ $this->postFilter($this->blockOrFunctionCode) .
+ join('', $this->mergedSubTemplatesCode), false,
+ $this);
+ return $_compiled_code;
+ }
- do {
- // flag for aborting current and start recompile
- $this->abort_and_recompile = false;
- // get template source
- $_content = $template->source->content;
- // run prefilter if required
- if (isset($this->smarty->autoload_filters['pre']) || isset($this->smarty->registered_filters['pre'])) {
- $_content = Smarty_Internal_Filter_Handler::runFilter('pre', $_content, $template);
+ /**
+ * Compile template source and run optional post filter
+ *
+ * @param \Smarty_Internal_Template $template
+ * @param null|bool $nocache flag if template must be compiled in nocache mode
+ * @param \Smarty_Internal_TemplateCompilerBase $parent_compiler
+ *
+ * @return string
+ * @throws \Exception
+ */
+ public function compileTemplateSource(Smarty_Internal_Template $template, $nocache = null,
+ Smarty_Internal_TemplateCompilerBase $parent_compiler = null)
+ {
+ try {
+ // save template object in compiler class
+ $this->template = $template;
+ if (property_exists($this->template->smarty, 'plugin_search_order')) {
+ $this->plugin_search_order = $this->template->smarty->plugin_search_order;
}
- // on empty template just return header
- if ($_content == '') {
- if ($this->suppressTemplatePropertyHeader) {
- $code = '';
- } else {
- $code = $template_header . $template->createTemplateCodeFrame();
- }
- return $code;
+ if ($this->smarty->debugging) {
+ $this->smarty->_debug->start_compile($this->template);
+ }
+ if (isset($this->template->smarty->security_policy)) {
+ $this->php_handling = $this->template->smarty->security_policy->php_handling;
+ } else {
+ $this->php_handling = $this->template->smarty->php_handling;
+ }
+ $this->parent_compiler = $parent_compiler ? $parent_compiler : $this;
+ $nocache = isset($nocache) ? $nocache : false;
+ if (empty($template->compiled->nocache_hash)) {
+ $template->compiled->nocache_hash = $this->nocache_hash;
+ } else {
+ $this->nocache_hash = $template->compiled->nocache_hash;
}
- // call compiler
- $_compiled_code = $this->doCompile($_content);
- } while ($this->abort_and_recompile);
- $this->template->source->filepath = $saved_filepath;
- // free memory
- unset($this->parser->root_buffer, $this->parser->current_buffer, $this->parser, $this->lex, $this->template);
- self::$_tag_objects = array();
- // return compiled code to template object
- $merged_code = '';
- if (!$this->suppressMergedTemplates && !empty($this->merged_templates)) {
- foreach ($this->merged_templates as $code) {
- $merged_code .= $code;
+ // flag for nocache sections
+ $this->nocache = $nocache;
+ $this->tag_nocache = false;
+ // reset has nocache code flag
+ $this->template->compiled->has_nocache_code = false;
+ $this->has_variable_string = false;
+ $this->prefix_code = array();
+ // add file dependency
+ $this->parent_compiler->template->compiled->file_dependency[ $this->template->source->uid ] =
+ array($this->template->source->filepath, $this->template->source->getTimeStamp(),
+ $this->template->source->type);
+ $this->smarty->_current_file = $this->template->source->filepath;
+ // get template source
+ if (!empty($this->template->source->components)) {
+ // we have array of inheritance templates by extends: resource
+ // generate corresponding source code sequence
+ $_content =
+ Smarty_Internal_Compile_Extends::extendsSourceArrayCode($this->template->source->components);
+ } else {
+ // get template source
+ $_content = $this->template->source->getContent();
}
- // run postfilter if required on merged code
- if (isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) {
- $merged_code = Smarty_Internal_Filter_Handler::runFilter('post', $merged_code, $template);
+ $_compiled_code = $this->postFilter($this->doCompile($this->preFilter($_content), true));
+ }
+ catch (Exception $e) {
+ if ($this->smarty->debugging) {
+ $this->smarty->_debug->end_compile($this->template);
}
+ $this->_tag_stack = array();
+ $this->_tag_objects = array();
+ // free memory
+ $this->parent_compiler = null;
+ $this->template = null;
+ $this->parser = null;
+ throw $e;
}
- // run postfilter if required on compiled template code
- if (isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) {
- $_compiled_code = Smarty_Internal_Filter_Handler::runFilter('post', $_compiled_code, $template);
+ if ($this->smarty->debugging) {
+ $this->smarty->_debug->end_compile($this->template);
}
- if ($this->suppressTemplatePropertyHeader) {
- $code = $_compiled_code . $merged_code;
+ $this->parent_compiler = null;
+ $this->template = null;
+ $this->parser = null;
+ return $_compiled_code;
+ }
+
+ /**
+ * Optionally process compiled code by post filter
+ *
+ * @param string $code compiled code
+ *
+ * @return string
+ * @throws \SmartyException
+ */
+ public function postFilter($code)
+ {
+ // run post filter if on code
+ if (!empty($code) &&
+ (isset($this->smarty->autoload_filters[ 'post' ]) || isset($this->smarty->registered_filters[ 'post' ]))
+ ) {
+ return $this->smarty->ext->_filterHandler->runFilter('post', $code, $this->template);
} else {
- $code = $template_header . $template->createTemplateCodeFrame($_compiled_code) . $merged_code;
+ return $code;
}
- // unset content because template inheritance could have replace source with parent code
- unset ($template->source->content);
- return $code;
}
/**
- * Compile Tag
+ * Run optional prefilter
+ *
+ * @param string $_content template source
*
+ * @return string
+ * @throws \SmartyException
+ */
+ public function preFilter($_content)
+ {
+ // run pre filter if required
+ if ($_content != '' &&
+ ((isset($this->smarty->autoload_filters[ 'pre' ]) || isset($this->smarty->registered_filters[ 'pre' ])))
+ ) {
+ return $this->smarty->ext->_filterHandler->runFilter('pre', $_content, $this->template);
+ } else {
+ return $_content;
+ }
+ }
+
+ /**
+ * Compile Tag
* This is a call back from the lexer/parser
- * It executes the required compile plugin for the Smarty tag
*
- * @param string $tag tag name
- * @param array $args array with tag attributes
- * @param array $parameter array with compilation parameter
+ * Save current prefix code
+ * Compile tag
+ * Merge tag prefix code with saved one
+ * (required nested tags in attributes)
+ *
+ * @param string $tag tag name
+ * @param array $args array with tag attributes
+ * @param array $parameter array with compilation parameter
+ *
+ * @throws SmartyCompilerException
+ * @throws SmartyException
+ * @return string compiled code
+ */
+ public function compileTag($tag, $args, $parameter = array())
+ {
+ $this->prefixCodeStack[] = $this->prefix_code;
+ $this->prefix_code = array();
+ $result = $this->compileTag2($tag, $args, $parameter);
+ $this->prefix_code = array_merge($this->prefix_code, array_pop($this->prefixCodeStack));
+ return $result;
+ }
+
+ /**
+ * Compile Tag
+ *
+ * @param string $tag tag name
+ * @param array $args array with tag attributes
+ * @param array $parameter array with compilation parameter
+ *
+ * @throws SmartyCompilerException
+ * @throws SmartyException
* @return string compiled code
*/
- public function compileTag($tag, $args, $parameter = array()) {
+ private function compileTag2($tag, $args, $parameter)
+ {
+ $plugin_type = '';
// $args contains the attributes parsed and compiled by the lexer/parser
// assume that tag does compile into code, but creates no HTML output
$this->has_code = true;
$this->has_output = false;
// log tag/attributes
- if (isset($this->smarty->get_used_tags) && $this->smarty->get_used_tags) {
- $this->template->used_tags[] = array($tag, $args);
+ if (isset($this->smarty->_cache[ 'get_used_tags' ])) {
+ $this->template->_cache[ 'used_tags' ][] = array($tag, $args);
}
// check nocache option flag
- if (in_array("'nocache'", $args) || in_array(array('nocache' => 'true'), $args)
- || in_array(array('nocache' => '"true"'), $args) || in_array(array('nocache' => "'true'"), $args)) {
+ if (in_array("'nocache'", $args) || in_array(array('nocache' => 'true'), $args) ||
+ in_array(array('nocache' => '"true"'), $args) || in_array(array('nocache' => "'true'"), $args)
+ ) {
$this->tag_nocache = true;
}
- // compile the smarty tag (required compile classes to compile the tag are autoloaded)
+ // compile the smarty tag (required compile classes to compile the tag are auto loaded)
if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) {
- if (isset($this->smarty->template_functions[$tag])) {
+ if (isset($this->parent_compiler->template->tpl_function[ $tag ])) {
// template defined by {template} tag
- $args['_attr']['name'] = "'" . $tag . "'";
+ $args[ '_attr' ][ 'name' ] = "'" . $tag . "'";
$_output = $this->callTagCompiler('call', $args, $parameter);
}
}
@@ -274,33 +527,39 @@ abstract class Smarty_Internal_TemplateCompilerBase {
}
}
// tag did not produce compiled code
- return '';
+ return null;
} else {
// map_named attributes
- if (isset($args['_attr'])) {
- foreach ($args['_attr'] as $key => $attribute) {
+ if (isset($args[ '_attr' ])) {
+ foreach ($args[ '_attr' ] as $key => $attribute) {
if (is_array($attribute)) {
$args = array_merge($args, $attribute);
}
}
}
// not an internal compiler tag
- if (strlen($tag) < 6 || substr($tag, -5) != 'close') {
+ if (strlen($tag) < 6 || substr($tag, - 5) != 'close') {
// check if tag is a registered object
- if (isset($this->smarty->registered_objects[$tag]) && isset($parameter['object_methode'])) {
- $methode = $parameter['object_methode'];
- if (!in_array($methode, $this->smarty->registered_objects[$tag][3]) &&
- (empty($this->smarty->registered_objects[$tag][1]) || in_array($methode, $this->smarty->registered_objects[$tag][1]))) {
- return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $methode);
- } elseif (in_array($methode, $this->smarty->registered_objects[$tag][3])) {
- return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $methode);
+ if (isset($this->smarty->registered_objects[ $tag ]) && isset($parameter[ 'object_method' ])) {
+ $method = $parameter[ 'object_method' ];
+ if (!in_array($method, $this->smarty->registered_objects[ $tag ][ 3 ]) &&
+ (empty($this->smarty->registered_objects[ $tag ][ 1 ]) ||
+ in_array($method, $this->smarty->registered_objects[ $tag ][ 1 ]))
+ ) {
+ return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $method);
+ } elseif (in_array($method, $this->smarty->registered_objects[ $tag ][ 3 ])) {
+ return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag,
+ $method);
} else {
- return $this->trigger_template_error('unallowed methode "' . $methode . '" in registered object "' . $tag . '"', $this->lex->taglineno);
+ // throw exception
+ $this->trigger_template_error('not allowed method "' . $method . '" in registered object "' .
+ $tag . '"', null, true);
}
}
// check if tag is registered
- foreach (array(Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK) as $plugin_type) {
- if (isset($this->smarty->registered_plugins[$plugin_type][$tag])) {
+ foreach (array(Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK) as $plugin_type)
+ {
+ if (isset($this->smarty->registered_plugins[ $plugin_type ][ $tag ])) {
// if compiler function plugin call it now
if ($plugin_type == Smarty::PLUGIN_COMPILER) {
$new_args = array();
@@ -308,30 +567,36 @@ abstract class Smarty_Internal_TemplateCompilerBase {
if (is_array($mixed)) {
$new_args = array_merge($new_args, $mixed);
} else {
- $new_args[$key] = $mixed;
+ $new_args[ $key ] = $mixed;
}
}
- if (!$this->smarty->registered_plugins[$plugin_type][$tag][1]) {
+ if (!$this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 1 ]) {
$this->tag_nocache = true;
}
- $function = $this->smarty->registered_plugins[$plugin_type][$tag][0];
+ $function = $this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ];
if (!is_array($function)) {
return $function($new_args, $this);
- } else if (is_object($function[0])) {
- return $this->smarty->registered_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this);
+ } elseif (is_object($function[ 0 ])) {
+ return $this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ][ 0 ]->{$function[ 1 ]}($new_args,
+ $this);
} else {
return call_user_func_array($function, array($new_args, $this));
}
}
// compile registered function or block function
if ($plugin_type == Smarty::PLUGIN_FUNCTION || $plugin_type == Smarty::PLUGIN_BLOCK) {
- return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag);
+ return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter,
+ $tag);
}
}
}
// check plugins from plugins folder
- foreach ($this->smarty->plugin_search_order as $plugin_type) {
- if ($plugin_type == Smarty::PLUGIN_BLOCK && $this->smarty->loadPlugin('smarty_compiler_' . $tag) && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))) {
+ foreach ($this->plugin_search_order as $plugin_type) {
+ if ($plugin_type == Smarty::PLUGIN_COMPILER &&
+ $this->smarty->loadPlugin('smarty_compiler_' . $tag) &&
+ (!isset($this->smarty->security_policy) ||
+ $this->smarty->security_policy->isTrustedTag($tag, $this))
+ ) {
$plugin = 'smarty_compiler_' . $tag;
if (is_callable($plugin)) {
// convert arguments format for old compiler plugins
@@ -340,9 +605,10 @@ abstract class Smarty_Internal_TemplateCompilerBase {
if (is_array($mixed)) {
$new_args = array_merge($new_args, $mixed);
} else {
- $new_args[$key] = $mixed;
+ $new_args[ $key ] = $mixed;
}
}
+
return $plugin($new_args, $this->smarty);
}
if (class_exists($plugin, false)) {
@@ -354,8 +620,11 @@ abstract class Smarty_Internal_TemplateCompilerBase {
throw new SmartyException("Plugin \"{$tag}\" not callable");
} else {
if ($function = $this->getPlugin($tag, $plugin_type)) {
- if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) {
- return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $parameter, $tag, $function);
+ if (!isset($this->smarty->security_policy) ||
+ $this->smarty->security_policy->isTrustedTag($tag, $this)
+ ) {
+ return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $parameter,
+ $tag, $function);
}
}
}
@@ -363,15 +632,15 @@ abstract class Smarty_Internal_TemplateCompilerBase {
if (is_callable($this->smarty->default_plugin_handler_func)) {
$found = false;
// look for already resolved tags
- foreach ($this->smarty->plugin_search_order as $plugin_type) {
- if (isset($this->default_handler_plugins[$plugin_type][$tag])) {
+ foreach ($this->plugin_search_order as $plugin_type) {
+ if (isset($this->default_handler_plugins[ $plugin_type ][ $tag ])) {
$found = true;
break;
}
}
if (!$found) {
// call default handler
- foreach ($this->smarty->plugin_search_order as $plugin_type) {
+ foreach ($this->plugin_search_order as $plugin_type) {
if ($this->getPluginFromDefaultHandler($tag, $plugin_type)) {
$found = true;
break;
@@ -385,51 +654,71 @@ abstract class Smarty_Internal_TemplateCompilerBase {
foreach ($args as $mixed) {
$new_args = array_merge($new_args, $mixed);
}
- $function = $this->default_handler_plugins[$plugin_type][$tag][0];
+ $function = $this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ];
if (!is_array($function)) {
return $function($new_args, $this);
- } else if (is_object($function[0])) {
- return $this->default_handler_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this);
+ } elseif (is_object($function[ 0 ])) {
+ return $this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ][ 0 ]->$function[ 1 ]($new_args,
+ $this);
} else {
return call_user_func_array($function, array($new_args, $this));
}
} else {
- return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag);
+ return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter,
+ $tag);
}
}
}
} else {
// compile closing tag of block function
- $base_tag = substr($tag, 0, -5);
+ $base_tag = substr($tag, 0, - 5);
// check if closing tag is a registered object
- if (isset($this->smarty->registered_objects[$base_tag]) && isset($parameter['object_methode'])) {
- $methode = $parameter['object_methode'];
- if (in_array($methode, $this->smarty->registered_objects[$base_tag][3])) {
- return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $methode);
+ if (isset($this->smarty->registered_objects[ $base_tag ]) && isset($parameter[ 'object_method' ])) {
+ $method = $parameter[ 'object_method' ];
+ if (in_array($method, $this->smarty->registered_objects[ $base_tag ][ 3 ])) {
+ return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag,
+ $method);
} else {
- return $this->trigger_template_error('unallowed closing tag methode "' . $methode . '" in registered object "' . $base_tag . '"', $this->lex->taglineno);
+ // throw exception
+ $this->trigger_template_error('not allowed closing tag method "' . $method .
+ '" in registered object "' . $base_tag . '"', null, true);
}
}
// registered block tag ?
- if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag]) || isset($this->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) {
+ if (isset($this->smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $base_tag ]) ||
+ isset($this->default_handler_plugins[ Smarty::PLUGIN_BLOCK ][ $base_tag ])
+ ) {
return $this->callTagCompiler('private_registered_block', $args, $parameter, $tag);
}
+ // registered function tag ?
+ if (isset($this->smarty->registered_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ])) {
+ return $this->callTagCompiler('private_registered_function', $args, $parameter, $tag);
+ }
// block plugin?
if ($function = $this->getPlugin($base_tag, Smarty::PLUGIN_BLOCK)) {
return $this->callTagCompiler('private_block_plugin', $args, $parameter, $tag, $function);
}
+ // function plugin?
+ if ($function = $this->getPlugin($tag, Smarty::PLUGIN_FUNCTION)) {
+ if (!isset($this->smarty->security_policy) ||
+ $this->smarty->security_policy->isTrustedTag($tag, $this)
+ ) {
+ return $this->callTagCompiler('private_function_plugin', $args, $parameter, $tag, $function);
+ }
+ }
// registered compiler plugin ?
- if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag])) {
+ if (isset($this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ])) {
// if compiler function plugin call it now
$args = array();
- if (!$this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][1]) {
+ if (!$this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 1 ]) {
$this->tag_nocache = true;
}
- $function = $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0];
+ $function = $this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ];
if (!is_array($function)) {
return $function($args, $this);
- } else if (is_object($function[0])) {
- return $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0][0]->$function[1]($args, $this);
+ } elseif (is_object($function[ 0 ])) {
+ return $this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ][ 0 ]->$function[ 1 ]($args,
+ $this);
} else {
return call_user_func_array($function, array($args, $this));
}
@@ -448,73 +737,178 @@ abstract class Smarty_Internal_TemplateCompilerBase {
throw new SmartyException("Plugin \"{$tag}\" not callable");
}
}
- $this->trigger_template_error("unknown tag \"" . $tag . "\"", $this->lex->taglineno);
+ $this->trigger_template_error("unknown tag \"" . $tag . "\"", null, true);
+ }
+ }
+
+ /**
+ * compile variable
+ *
+ * @param string $variable
+ *
+ * @return string
+ */
+ public function compileVariable($variable)
+ {
+ if (strpos($variable, '(') == 0) {
+ // not a variable variable
+ $var = trim($variable, '\'');
+ $this->tag_nocache = $this->tag_nocache |
+ $this->template->ext->getTemplateVars->_getVariable($this->template, $var, null, true, false)->nocache;
+ // todo $this->template->compiled->properties['variables'][$var] = $this->tag_nocache | $this->nocache;
}
+ return '$_smarty_tpl->tpl_vars[' . $variable . ']->value';
+ }
+
+ /**
+ * compile config variable
+ *
+ * @param string $variable
+ *
+ * @return string
+ */
+ public function compileConfigVariable($variable)
+ {
+ // return '$_smarty_tpl->config_vars[' . $variable . ']';
+ return '$_smarty_tpl->smarty->ext->configLoad->_getConfigVariable($_smarty_tpl, ' . $variable . ')';
}
/**
- * lazy loads internal compile plugin for tag and calls the compile methode
+ * This method is called from parser to process a text content section
+ * - remove text from inheritance child templates as they may generate output
+ * - strip text if strip is enabled
*
+ * @param string $text
+ *
+ * @return null|\Smarty_Internal_ParseTree_Text
+ */
+ public function processText($text)
+ {
+ if ((string) $text != '') {
+ $store = array();
+ $_store = 0;
+ $_offset = 0;
+ if ($this->parser->strip) {
+ if (strpos($text, '<') !== false) {
+ // capture html elements not to be messed with
+ $_offset = 0;
+ if (preg_match_all('#(<script[^>]*>.*?</script[^>]*>)|(<textarea[^>]*>.*?</textarea[^>]*>)|(<pre[^>]*>.*?</pre[^>]*>)#is',
+ $text, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
+ foreach ($matches as $match) {
+ $store[] = $match[ 0 ][ 0 ];
+ $_length = strlen($match[ 0 ][ 0 ]);
+ $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
+ $text = substr_replace($text, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
+
+ $_offset += $_length - strlen($replace);
+ $_store ++;
+ }
+ }
+
+ $expressions = array(// replace multiple spaces between tags by a single space
+ // can't remove them entirely, becaue that might break poorly implemented CSS display:inline-block elements
+ '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',
+ // remove spaces between attributes (but not in attribute values!)
+ '#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5',
+ '#^\s+<#Ss' => '<',
+ '#>\s+$#Ss' => '>',
+ $this->stripRegEx => '');
+
+ $text = preg_replace(array_keys($expressions), array_values($expressions), $text);
+ $_offset = 0;
+ if (preg_match_all('#@!@SMARTY:([0-9]+):SMARTY@!@#is', $text, $matches,
+ PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
+ foreach ($matches as $match) {
+ $_length = strlen($match[ 0 ][ 0 ]);
+ $replace = $store[ $match[ 1 ][ 0 ] ];
+ $text = substr_replace($text, $replace, $match[ 0 ][ 1 ] + $_offset, $_length);
+
+ $_offset += strlen($replace) - $_length;
+ $_store ++;
+ }
+ }
+ } else {
+ $text = preg_replace($this->stripRegEx, '', $text);
+ }
+ }
+ return new Smarty_Internal_ParseTree_Text($text);
+ }
+ return null;
+ }
+
+ /**
+ * lazy loads internal compile plugin for tag and calls the compile method
* compile objects cached for reuse.
* class name format: Smarty_Internal_Compile_TagName
- * plugin filename format: Smarty_Internal_Tagname.php
+ * plugin filename format: Smarty_Internal_TagName.php
+ *
+ * @param string $tag tag name
+ * @param array $args list of tag attributes
+ * @param mixed $param1 optional parameter
+ * @param mixed $param2 optional parameter
+ * @param mixed $param3 optional parameter
*
- * @param string $tag tag name
- * @param array $args list of tag attributes
- * @param mixed $param1 optional parameter
- * @param mixed $param2 optional parameter
- * @param mixed $param3 optional parameter
* @return string compiled code
*/
- public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null) {
+ public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null)
+ {
// re-use object if already exists
- if (isset(self::$_tag_objects[$tag])) {
- // compile this tag
- return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3);
- }
- // lazy load internal compiler plugin
- $class_name = 'Smarty_Internal_Compile_' . $tag;
- if ($this->smarty->loadPlugin($class_name)) {
- // check if tag allowed by security
- if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) {
- // use plugin if found
- self::$_tag_objects[$tag] = new $class_name;
- // compile this tag
- return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3);
+ if (!isset($this->_tag_objects[ $tag ])) {
+ // lazy load internal compiler plugin
+ $_tag = explode('_', $tag);
+ $_tag = array_map('ucfirst', $_tag);
+ $class_name = 'Smarty_Internal_Compile_' . implode('_', $_tag);
+ if (class_exists($class_name) &&
+ (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))
+ ) {
+ $this->_tag_objects[ $tag ] = new $class_name;
+ } else {
+ $this->_tag_objects[ $tag ] = false;
+ return false;
}
}
- // no internal compile plugin for this tag
- return false;
+ // compile this tag
+ return $this->_tag_objects[ $tag ] === false ? false :
+ $this->_tag_objects[ $tag ]->compile($args, $this, $param1, $param2, $param3);
}
/**
* Check for plugins and return function name
*
- * @param string $pugin_name name of plugin or function
- * @param string $plugin_type type of plugin
+ * @param $plugin_name
+ * @param string $plugin_type type of plugin
+ *
* @return string call name of function
*/
- public function getPlugin($plugin_name, $plugin_type) {
+ public function getPlugin($plugin_name, $plugin_type)
+ {
$function = null;
if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {
- if (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) {
- $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'];
- } else if (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) {
- $this->template->required_plugins['nocache'][$plugin_name][$plugin_type] = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type];
- $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'];
+ if (isset($this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ])) {
+ $function =
+ $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ];
+ } elseif (isset($this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ])) {
+ $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ] =
+ $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ];
+ $function =
+ $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ];
}
} else {
- if (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) {
- $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'];
- } else if (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) {
- $this->template->required_plugins['compiled'][$plugin_name][$plugin_type] = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type];
- $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'];
+ if (isset($this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ])) {
+ $function =
+ $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ];
+ } elseif (isset($this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ])) {
+ $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ] =
+ $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ];
+ $function =
+ $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ];
}
}
if (isset($function)) {
if ($plugin_type == 'modifier') {
- $this->modifier_plugins[$plugin_name] = true;
+ $this->modifier_plugins[ $plugin_name ] = true;
}
+
return $function;
}
// loop through plugin dirs and find the plugin
@@ -523,92 +917,130 @@ abstract class Smarty_Internal_TemplateCompilerBase {
if (is_string($file)) {
if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {
- $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['file'] = $file;
- $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'] = $function;
+ $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'file' ] =
+ $file;
+ $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ] =
+ $function;
} else {
- $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['file'] = $file;
- $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'] = $function;
+ $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'file' ] =
+ $file;
+ $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ] =
+ $function;
}
if ($plugin_type == 'modifier') {
- $this->modifier_plugins[$plugin_name] = true;
+ $this->modifier_plugins[ $plugin_name ] = true;
}
+
return $function;
}
if (is_callable($function)) {
// plugin function is defined in the script
return $function;
}
+
return false;
}
/**
* Check for plugins by default plugin handler
*
- * @param string $tag name of tag
- * @param string $plugin_type type of plugin
+ * @param string $tag name of tag
+ * @param string $plugin_type type of plugin
+ *
* @return boolean true if found
*/
- public function getPluginFromDefaultHandler($tag, $plugin_type) {
+ public function getPluginFromDefaultHandler($tag, $plugin_type)
+ {
$callback = null;
$script = null;
$cacheable = true;
- $result = call_user_func_array(
- $this->smarty->default_plugin_handler_func, array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable)
- );
+ $result = call_user_func_array($this->smarty->default_plugin_handler_func,
+ array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable));
if ($result) {
$this->tag_nocache = $this->tag_nocache || !$cacheable;
if ($script !== null) {
if (is_file($script)) {
if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {
- $this->template->required_plugins['nocache'][$tag][$plugin_type]['file'] = $script;
- $this->template->required_plugins['nocache'][$tag][$plugin_type]['function'] = $callback;
+ $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $tag ][ $plugin_type ][ 'file' ] =
+ $script;
+ $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $tag ][ $plugin_type ][ 'function' ] =
+ $callback;
} else {
- $this->template->required_plugins['compiled'][$tag][$plugin_type]['file'] = $script;
- $this->template->required_plugins['compiled'][$tag][$plugin_type]['function'] = $callback;
+ $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $tag ][ $plugin_type ][ 'file' ] =
+ $script;
+ $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $tag ][ $plugin_type ][ 'function' ] =
+ $callback;
}
- include_once $script;
+ require_once $script;
} else {
$this->trigger_template_error("Default plugin handler: Returned script file \"{$script}\" for \"{$tag}\" not found");
}
}
- if (!is_string($callback) && !(is_array($callback) && is_string($callback[0]) && is_string($callback[1]))) {
+ if (!is_string($callback) &&
+ !(is_array($callback) && is_string($callback[ 0 ]) && is_string($callback[ 1 ]))
+ ) {
$this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" must be a static function name or array of class and function name");
}
if (is_callable($callback)) {
- $this->default_handler_plugins[$plugin_type][$tag] = array($callback, true, array());
+ $this->default_handler_plugins[ $plugin_type ][ $tag ] = array($callback, true, array());
+
return true;
} else {
$this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" not callable");
}
}
+
return false;
}
/**
- * Inject inline code for nocache template sections
+ * Append code segments and remove unneeded ?> <?php transitions
*
+ * @param string $left
+ * @param string $right
+ *
+ * @return string
+ */
+ public function appendCode($left, $right)
+ {
+ if (preg_match('/\s*\?>\s*$/', $left) && preg_match('/^\s*<\?php\s+/', $right)) {
+ $left = preg_replace('/\s*\?>\s*$/', "\n", $left);
+ $left .= preg_replace('/^\s*<\?php\s+/', '', $right);
+ } else {
+ $left .= $right;
+ }
+ return $left;
+ }
+
+ /**
+ * Inject inline code for nocache template sections
* This method gets the content of each template element from the parser.
* If the content is compiled code and it should be not cached the code is injected
* into the rendered output.
*
- * @param string $content content of template element
- * @param boolean $is_code true if content is compiled code
- * @return string content
+ * @param string $content content of template element
+ * @param boolean $is_code true if content is compiled code
+ *
+ * @return string content
*/
- public function processNocacheCode($content, $is_code) {
+ public function processNocacheCode($content, $is_code)
+ {
// If the template is not evaluated and we have a nocache section and or a nocache tag
if ($is_code && !empty($content)) {
// generate replacement code
- if ((!($this->template->source->recompiled) || $this->forceNocache) && $this->template->caching && !$this->suppressNocacheProcessing &&
- ($this->nocache || $this->tag_nocache || $this->forceNocache == 2)) {
- $this->template->has_nocache_code = true;
- $_output = addcslashes($content,'\'\\');
+ if ((!($this->template->source->handler->recompiled) || $this->forceNocache) && $this->template->caching &&
+ !$this->suppressNocacheProcessing && ($this->nocache || $this->tag_nocache)
+ ) {
+ $this->template->compiled->has_nocache_code = true;
+ $_output = addcslashes($content, '\'\\');
$_output = str_replace("^#^", "'", $_output);
- $_output = "<?php echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n";
- // make sure we include modifer plugins for nocache code
+ $_output = "<?php echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/" . $_output .
+ "/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n";
+ // make sure we include modifier plugins for nocache code
foreach ($this->modifier_plugins as $plugin_name => $dummy) {
- if (isset($this->template->required_plugins['compiled'][$plugin_name]['modifier'])) {
- $this->template->required_plugins['nocache'][$plugin_name]['modifier'] = $this->template->required_plugins['compiled'][$plugin_name]['modifier'];
+ if (isset($this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ 'modifier' ])) {
+ $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ 'modifier' ] =
+ $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ 'modifier' ];
}
}
} else {
@@ -620,51 +1052,119 @@ abstract class Smarty_Internal_TemplateCompilerBase {
$this->modifier_plugins = array();
$this->suppressNocacheProcessing = false;
$this->tag_nocache = false;
+
return $_output;
}
/**
- * display compiler error messages without dying
+ * Get Id
+ *
+ * @param string $input
+ *
+ * @return bool|string
+ */
+ public function getId($input)
+ {
+ if (preg_match('~^[\'"]*([0-9]*[a-zA-Z_]\w*)[\'"]*$~', $input, $match)) {
+ return $match[ 1 ];
+ }
+ return false;
+ }
+
+ /**
+ * Get variable name from string
+ *
+ * @param string $input
+ *
+ * @return bool|string
+ */
+ public function getVariableName($input)
+ {
+ if (preg_match('~^[$]_smarty_tpl->tpl_vars\[[\'"]*([0-9]*[a-zA-Z_]\w*)[\'"]*\]->value$~', $input, $match)) {
+ return $match[ 1 ];
+ }
+ return false;
+ }
+
+ /**
+ * Generate nocache code string
+ *
+ * @param string $code PHP code
*
+ * @return string
+ */
+ public function makeNocacheCode($code)
+ {
+ return "echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/<?php " .
+ str_replace("^#^", "'", addcslashes($code, '\'\\')) . "?>/*/%%SmartyNocache:{$this->nocache_hash}%%*/';\n";
+ }
+
+ /**
+ * display compiler error messages without dying
* If parameter $args is empty it is a parser detected syntax error.
* In this case the parser is called to obtain information about expected tokens.
- *
* If parameter $args contains a string this is used as error message
*
- * @param string $args individual error message or null
- * @param string $line line-number
- * @throws SmartyCompilerException when an unexpected token is found
+ * @param string $args individual error message or null
+ * @param string $line line-number
+ * @param null|bool $tagline if true the line number of last tag
+ *
+ * @throws \SmartyCompilerException when an unexpected token is found
*/
- public function trigger_template_error($args = null, $line = null) {
- // get template source line which has error
- if (!isset($line)) {
- $line = $this->lex->line;
+ public function trigger_template_error($args = null, $line = null, $tagline = null)
+ {
+ $lex = $this->parser->lex;
+ if ($tagline === true) {
+ // get line number of Tag
+ $line = $lex->taglineno;
+ } elseif (!isset($line)) {
+ // get template source line which has error
+ $line = $lex->line;
+ } else {
+ $line = (int) $line;
+ }
+
+ if (in_array($this->template->source->type, array('eval', 'string'))) {
+ $templateName = $this->template->source->type . ':' . trim(preg_replace('![\t\r\n]+!', ' ',
+ strlen($lex->data) > 40 ?
+ substr($lex->data, 0, 40) .
+ '...' : $lex->data));
+ } else {
+ $templateName = $this->template->source->type . ':' . $this->template->source->filepath;
}
- $match = preg_split("/\n/", $this->lex->data);
- $error_text = 'Syntax Error in template "' . $this->template->source->filepath . '" on line ' . $line . ' "' . htmlspecialchars(trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1]))) . '" ';
+
+ // $line += $this->trace_line_offset;
+ $match = preg_split("/\n/", $lex->data);
+ $error_text =
+ 'Syntax error in template "' . (empty($this->trace_filepath) ? $templateName : $this->trace_filepath) .
+ '" on line ' . ($line + $this->trace_line_offset) . ' "' .
+ trim(preg_replace('![\t\r\n]+!', ' ', $match[ $line - 1 ])) . '" ';
if (isset($args)) {
// individual error message
$error_text .= $args;
} else {
+ $expect = array();
// expected token from parser
- $error_text .= ' - Unexpected "' . $this->lex->value . '"';
+ $error_text .= ' - Unexpected "' . $lex->value . '"';
if (count($this->parser->yy_get_expected_tokens($this->parser->yymajor)) <= 4) {
foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) {
- $exp_token = $this->parser->yyTokenName[$token];
- if (isset($this->lex->smarty_token_names[$exp_token])) {
+ $exp_token = $this->parser->yyTokenName[ $token ];
+ if (isset($lex->smarty_token_names[ $exp_token ])) {
// token type from lexer
- $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"';
+ $expect[] = '"' . $lex->smarty_token_names[ $exp_token ] . '"';
} else {
// otherwise internal token name
- $expect[] = $this->parser->yyTokenName[$token];
+ $expect[] = $this->parser->yyTokenName[ $token ];
}
}
$error_text .= ', expected one of: ' . implode(' , ', $expect);
}
}
- throw new SmartyCompilerException($error_text);
+ $e = new SmartyCompilerException($error_text);
+ $e->line = $line;
+ $e->source = trim(preg_replace('![\t\r\n]+!', ' ', $match[ $line - 1 ]));
+ $e->desc = $args;
+ $e->template = $this->template->source->filepath;
+ throw $e;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_templatelexer.php b/include/smarty/libs/sysplugins/smarty_internal_templatelexer.php
index a7d5fa9a5..993b7be62 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_templatelexer.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_templatelexer.php
@@ -1,176 +1,319 @@
<?php
+/*
+ * This file is part of Smarty.
+ *
+ * (c) 2015 Uwe Tews
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
/**
-* Smarty Internal Plugin Templatelexer
-*
-* This is the lexer to break the template source into tokens
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
-/**
-* Smarty Internal Plugin Templatelexer
-*/
+ * Smarty_Internal_Templatelexer
+ * This is the template file lexer.
+ * It is generated from the smarty_internal_templatelexer.plex file
+ *
+ *
+ * @author Uwe Tews <uwe.tews@googlemail.com>
+ */
class Smarty_Internal_Templatelexer
{
+ /**
+ * Source
+ *
+ * @var string
+ */
public $data;
+
+ /**
+ * byte counter
+ *
+ * @var int
+ */
public $counter;
+
+ /**
+ * token number
+ *
+ * @var int
+ */
public $token;
+
+ /**
+ * token value
+ *
+ * @var string
+ */
public $value;
- public $node;
+
+ /**
+ * current line
+ *
+ * @var int
+ */
public $line;
+
+ /**
+ * tag start line
+ *
+ * @var
+ */
public $taglineno;
+
+ /**
+ * php code type
+ *
+ * @var string
+ */
+ public $phpType = '';
+
+ /**
+ * escaped left delimiter
+ *
+ * @var string
+ */
+ public $ldel = '';
+
+ /**
+ * escaped left delimiter length
+ *
+ * @var int
+ */
+ public $ldel_length = 0;
+
+ /**
+ * escaped right delimiter
+ *
+ * @var string
+ */
+ public $rdel = '';
+
+ /**
+ * escaped right delimiter length
+ *
+ * @var int
+ */
+ public $rdel_length = 0;
+
+ /**
+ * state number
+ *
+ * @var int
+ */
public $state = 1;
- private $heredoc_id_stack = Array();
- public $smarty_token_names = array ( // Text for parser error messages
- 'IDENTITY' => '===',
- 'NONEIDENTITY' => '!==',
- 'EQUALS' => '==',
- 'NOTEQUALS' => '!=',
- 'GREATEREQUAL' => '(>=,ge)',
- 'LESSEQUAL' => '(<=,le)',
- 'GREATERTHAN' => '(>,gt)',
- 'LESSTHAN' => '(<,lt)',
- 'MOD' => '(%,mod)',
- 'NOT' => '(!,not)',
- 'LAND' => '(&&,and)',
- 'LOR' => '(||,or)',
- 'LXOR' => 'xor',
- 'OPENP' => '(',
- 'CLOSEP' => ')',
- 'OPENB' => '[',
- 'CLOSEB' => ']',
- 'PTR' => '->',
- 'APTR' => '=>',
- 'EQUAL' => '=',
- 'NUMBER' => 'number',
- 'UNIMATH' => '+" , "-',
- 'MATH' => '*" , "/" , "%',
- 'INCDEC' => '++" , "--',
- 'SPACE' => ' ',
- 'DOLLAR' => '$',
- 'SEMICOLON' => ';',
- 'COLON' => ':',
- 'DOUBLECOLON' => '::',
- 'AT' => '@',
- 'HATCH' => '#',
- 'QUOTE' => '"',
- 'BACKTICK' => '`',
- 'VERT' => '|',
- 'DOT' => '.',
- 'COMMA' => '","',
- 'ANDSYM' => '"&"',
- 'QMARK' => '"?"',
- 'ID' => 'identifier',
- 'TEXT' => 'text',
- 'FAKEPHPSTARTTAG' => 'Fake PHP start tag',
- 'PHPSTARTTAG' => 'PHP start tag',
- 'PHPENDTAG' => 'PHP end tag',
- 'LITERALSTART' => 'Literal start',
- 'LITERALEND' => 'Literal end',
- 'LDELSLASH' => 'closing tag',
- 'COMMENT' => 'comment',
- 'AS' => 'as',
- 'TO' => 'to',
- );
-
-
- function __construct($data,$compiler)
- {
-// $this->data = preg_replace("/(\r\n|\r|\n)/", "\n", $data);
+
+ /**
+ * Smarty object
+ *
+ * @var Smarty
+ */
+ public $smarty = null;
+
+ /**
+ * compiler object
+ *
+ * @var Smarty_Internal_TemplateCompilerBase
+ */
+ public $compiler = null;
+
+ /**
+ * literal tag nesting level
+ *
+ * @var int
+ */
+ private $literal_cnt = 0;
+
+ /**
+ * PHP start tag string
+ *
+ * @var string
+ */
+
+ /**
+ * trace file
+ *
+ * @var resource
+ */
+ public $yyTraceFILE;
+
+ /**
+ * trace prompt
+ *
+ * @var string
+ */
+ public $yyTracePrompt;
+
+ /**
+ * XML flag true while processing xml
+ *
+ * @var bool
+ */
+ public $is_xml = false;
+
+ /**
+ * state names
+ *
+ * @var array
+ */
+ public $state_name = array(1 => 'TEXT', 2 => 'TAG', 3 => 'TAGBODY', 4 => 'LITERAL', 5 => 'DOUBLEQUOTEDSTRING',);
+
+ /**
+ * storage for assembled token patterns
+ *
+ * @var string
+ */
+ private $yy_global_pattern1 = null;
+
+ private $yy_global_pattern2 = null;
+
+ private $yy_global_pattern3 = null;
+
+ private $yy_global_pattern4 = null;
+
+ private $yy_global_pattern5 = null;
+
+ /**
+ * token names
+ *
+ * @var array
+ */
+ public $smarty_token_names = array( // Text for parser error messages
+ 'NOT' => '(!,not)', 'OPENP' => '(', 'CLOSEP' => ')',
+ 'OPENB' => '[', 'CLOSEB' => ']', 'PTR' => '->', 'APTR' => '=>',
+ 'EQUAL' => '=', 'NUMBER' => 'number', 'UNIMATH' => '+" , "-',
+ 'MATH' => '*" , "/" , "%', 'INCDEC' => '++" , "--',
+ 'SPACE' => ' ', 'DOLLAR' => '$', 'SEMICOLON' => ';',
+ 'COLON' => ':', 'DOUBLECOLON' => '::', 'AT' => '@', 'HATCH' => '#',
+ 'QUOTE' => '"', 'BACKTICK' => '`', 'VERT' => '"|" modifier',
+ 'DOT' => '.', 'COMMA' => '","', 'QMARK' => '"?"',
+ 'ID' => 'id, name', 'TEXT' => 'text',
+ 'LDELSLASH' => '{/..} closing tag', 'LDEL' => '{...} Smarty tag',
+ 'COMMENT' => 'comment', 'AS' => 'as', 'TO' => 'to',
+ 'PHP' => '"<?php", "<%", "{php}" tag',
+ 'LOGOP' => '"<", "==" ... logical operator',
+ 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition',
+ 'SCOND' => '"is even" ... if condition',);
+
+ /**
+ * constructor
+ *
+ * @param string $data template source
+ * @param Smarty_Internal_TemplateCompilerBase $compiler
+ */
+ function __construct($data, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
$this->data = $data;
$this->counter = 0;
+ if (preg_match('~^\xEF\xBB\xBF~i', $this->data, $match)) {
+ $this->counter += strlen($match[ 0 ]);
+ }
$this->line = 1;
$this->smarty = $compiler->smarty;
$this->compiler = $compiler;
- $this->ldel = preg_quote($this->smarty->left_delimiter,'/');
+ $this->ldel = preg_quote($this->smarty->left_delimiter, '~');
$this->ldel_length = strlen($this->smarty->left_delimiter);
- $this->rdel = preg_quote($this->smarty->right_delimiter,'/');
+ $this->rdel = preg_quote($this->smarty->right_delimiter, '~');
$this->rdel_length = strlen($this->smarty->right_delimiter);
- $this->smarty_token_names['LDEL'] = $this->smarty->left_delimiter;
- $this->smarty_token_names['RDEL'] = $this->smarty->right_delimiter;
- $this->mbstring_overload = ini_get('mbstring.func_overload') & 2;
- }
+ $this->smarty_token_names[ 'LDEL' ] = $this->smarty->left_delimiter;
+ $this->smarty_token_names[ 'RDEL' ] = $this->smarty->right_delimiter;
+ }
+ public function PrintTrace()
+ {
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = '<br>';
+ }
+
+ /*
+ * Check if this tag is autoliteral
+ */
+ public function isAutoLiteral()
+ {
+ return $this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ?
+ strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false;
+ }
private $_yy_state = 1;
+
private $_yy_stack = array();
- function yylex()
+ public function yylex()
{
return $this->{'yylex' . $this->_yy_state}();
}
- function yypushstate($state)
+ public function yypushstate($state)
{
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt,
+ isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
+ $this->_yy_state);
+ }
array_push($this->_yy_stack, $this->_yy_state);
$this->_yy_state = $state;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt,
+ isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
+ $this->_yy_state);
+ }
}
- function yypopstate()
+ public function yypopstate()
{
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt,
+ isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
+ $this->_yy_state);
+ }
$this->_yy_state = array_pop($this->_yy_stack);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt,
+ isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
+ $this->_yy_state);
+ }
}
- function yybegin($state)
+ public function yybegin($state)
{
$this->_yy_state = $state;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt,
+ isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
+ $this->_yy_state);
+ }
}
-
-
- function yylex1()
- {
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- 3 => 1,
- 5 => 0,
- 6 => 0,
- 7 => 0,
- 8 => 0,
- 9 => 0,
- 10 => 0,
- 11 => 1,
- 13 => 0,
- 14 => 0,
- 15 => 0,
- 16 => 0,
- 17 => 0,
- 18 => 0,
- 19 => 0,
- 20 => 0,
- 21 => 0,
- 22 => 0,
- 23 => 0,
- 24 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ public function yylex1()
+ {
+ if (!isset($this->yy_global_pattern1)) {
+ $this->yy_global_pattern1 =
+ "/\G([{][}])|\G(" . $this->ldel . "[*])|\G((" . $this->ldel . "\\s*php(.*?)" . $this->rdel . ")|(" .
+ $this->ldel . "\\s*[\/]php" . $this->rdel . "))|\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel .
+ ")|\G(" . $this->ldel . "\\s*)|\G(\\s*" . $this->rdel .
+ ")|\G((<[?]((php\\s+|=)|\\s+))|(<[%])|(<[?]xml\\s+)|(<script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*>)|([?][>])|([%][>]))|\G([\S\s])/isS";
+ }
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(".$this->ldel."[$]smarty\\.block\\.child".$this->rdel.")|\G(\\{\\})|\G(".$this->ldel."\\*([\S\s]*?)\\*".$this->rdel.")|\G(".$this->ldel."strip".$this->rdel.")|\G(".$this->ldel."\\s{1,}strip\\s{1,}".$this->rdel.")|\G(".$this->ldel."\/strip".$this->rdel.")|\G(".$this->ldel."\\s{1,}\/strip\\s{1,}".$this->rdel.")|\G(".$this->ldel."\\s*literal\\s*".$this->rdel.")|\G(".$this->ldel."\\s{1,}\/)|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s*setfilter\\s+)|\G(".$this->ldel."\\s{1,})|\G(".$this->ldel."\/)|\G(".$this->ldel.")|\G(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|\G(\\?>)|\G(".$this->rdel.")|\G(<%)|\G(%>)|\G([\S\s])/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
- $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
- if (!count($yymatches)) {
- throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state TEXT');
+ if (strlen($yysubmatches[ 0 ]) < 200) {
+ $yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
+ } else {
+ $yymatches = array_filter($yymatches, 'strlen');
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
+ substr($this->data, $this->counter, 5) . '... state TEXT');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
- if ($tokenMap[$this->token]) {
- // extract sub-patterns for passing to lex function
- $yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
- } else {
- $yysubmatches = array();
- }
$this->value = current($yymatches); // token value
- $r = $this->{'yy_r1_' . $this->token}($yysubmatches);
+ $r = $this->{'yy_r1_' . $this->token}();
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -179,305 +322,134 @@ class Smarty_Internal_Templatelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
- throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]);
}
break;
} while (true);
-
} // end function
-
const TEXT = 1;
- function yy_r1_1($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILD;
- }
- function yy_r1_2($yy_subpatterns)
+ function yy_r1_1()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
- function yy_r1_3($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_COMMENT;
- }
- function yy_r1_5($yy_subpatterns)
+ function yy_r1_2()
{
- $this->token = Smarty_Internal_Templateparser::TP_STRIPON;
+ preg_match("~[*]{$this->rdel}~", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
+ if (isset($match[ 0 ][ 1 ])) {
+ $to = $match[ 0 ][ 1 ] + strlen($match[ 0 ][ 0 ]);
+ } else {
+ $this->compiler->trigger_template_error("missing or misspelled comment closing tag '*{$this->smarty->right_delimiter}'");
+ }
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ return false;
}
- function yy_r1_6($yy_subpatterns)
- {
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_STRIPON;
- }
- }
- function yy_r1_7($yy_subpatterns)
+ function yy_r1_3()
{
- $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF;
+ $obj = new Smarty_Internal_Compile_Private_Php();
+ $obj->parsePhp($this);
}
- function yy_r1_8($yy_subpatterns)
- {
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF;
- }
- }
- function yy_r1_9($yy_subpatterns)
+ function yy_r1_7()
{
- $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
- $this->yypushstate(self::LITERAL);
+ if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ?
+ strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false
+ ) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
+ $this->yypushstate(self::LITERAL);
+ }
}
- function yy_r1_10($yy_subpatterns)
- {
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
- }
- function yy_r1_11($yy_subpatterns)
+ function yy_r1_8()
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ?
+ strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false
+ ) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->yypushstate(self::TAG);
+ return true;
+ }
}
- function yy_r1_13($yy_subpatterns)
- {
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
- }
- function yy_r1_14($yy_subpatterns)
+ function yy_r1_9()
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
- function yy_r1_15($yy_subpatterns)
- {
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
- }
- function yy_r1_16($yy_subpatterns)
+ function yy_r1_10()
{
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ $obj = new Smarty_Internal_Compile_Private_Php();
+ $obj->parsePhp($this);
}
- function yy_r1_17($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
- function yy_r1_18($yy_subpatterns)
+ function yy_r1_19()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
+ $to = strlen($this->data);
+ preg_match("~($this->ldel)|(<[?]((php\s+|=)|\s+))|(<[%])|(<[?]xml\s+)|(<script\s+language\s*=\s*[\"']?\s*php\s*[\"']?\s*>)|([?][>])|([%][>])~i",
+ $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
+ if (isset($match[ 0 ][ 1 ])) {
+ $to = $match[ 0 ][ 1 ];
+ }
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
- function yy_r1_19($yy_subpatterns)
- {
- if (in_array($this->value, Array('<?', '<?=', '<?php'))) {
- $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
- } elseif ($this->value == '<?xml') {
- $this->token = Smarty_Internal_Templateparser::TP_XMLTAG;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
- $this->value = substr($this->value, 0, 2);
- }
- }
- function yy_r1_20($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
- }
- function yy_r1_21($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- function yy_r1_22($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
- }
- function yy_r1_23($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
- }
- function yy_r1_24($yy_subpatterns)
- {
-
- if ($this->mbstring_overload) {
- $to = mb_strlen($this->data,'latin1');
- } else {
- $to = strlen($this->data);
- }
- preg_match("/{$this->ldel}|<\?|\?>|<%|%>/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
- if (isset($match[0][1])) {
- $to = $match[0][1];
- }
- if ($this->mbstring_overload) {
- $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1');
- } else {
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- }
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
-
-
- function yylex2()
- {
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- 3 => 1,
- 5 => 0,
- 6 => 0,
- 7 => 0,
- 8 => 0,
- 9 => 0,
- 10 => 0,
- 11 => 0,
- 12 => 0,
- 13 => 0,
- 14 => 0,
- 15 => 0,
- 16 => 0,
- 17 => 0,
- 18 => 0,
- 19 => 0,
- 20 => 1,
- 22 => 1,
- 24 => 1,
- 26 => 0,
- 27 => 0,
- 28 => 0,
- 29 => 0,
- 30 => 0,
- 31 => 0,
- 32 => 0,
- 33 => 0,
- 34 => 0,
- 35 => 0,
- 36 => 0,
- 37 => 0,
- 38 => 0,
- 39 => 0,
- 40 => 0,
- 41 => 0,
- 42 => 0,
- 43 => 3,
- 47 => 0,
- 48 => 0,
- 49 => 0,
- 50 => 0,
- 51 => 0,
- 52 => 0,
- 53 => 0,
- 54 => 0,
- 55 => 1,
- 57 => 1,
- 59 => 0,
- 60 => 0,
- 61 => 0,
- 62 => 0,
- 63 => 0,
- 64 => 0,
- 65 => 0,
- 66 => 0,
- 67 => 0,
- 68 => 0,
- 69 => 0,
- 70 => 0,
- 71 => 0,
- 72 => 0,
- 73 => 0,
- 74 => 0,
- 75 => 0,
- 76 => 0,
- 77 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ public function yylex2()
+ {
+ if (!isset($this->yy_global_pattern2)) {
+ $this->yy_global_pattern2 =
+ "/\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" .
+ $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*setfilter\\s+)|\G(" . $this->ldel .
+ "\\s*[0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . ")|\G(" . $this->ldel .
+ "\\s*[\/](?:(?!block)[0-9]*[a-zA-Z_]\\w*)\\s*" . $this->rdel . ")|\G(" . $this->ldel .
+ "\\s*[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/])|\G(" .
+ $this->ldel . "\\s*)/isS";
+ }
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G(".$this->ldel."\\s{1,}\/)|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s{1,})|\G(\\s{1,}".$this->rdel.")|\G(".$this->ldel."\/)|\G(".$this->ldel.")|\G(".$this->rdel.")|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*===\\s*)|\G(\\s*!==\\s*)|\G(\\s*==\\s*|\\s+eq\\s+)|\G(\\s*!=\\s*|\\s*<>\\s*|\\s+(ne|neq)\\s+)|\G(\\s*>=\\s*|\\s+(ge|gte)\\s+)|\G(\\s*<=\\s*|\\s+(le|lte)\\s+)|\G(\\s*>\\s*|\\s+gt\\s+)|\G(\\s*<\\s*|\\s+lt\\s+)|\G(\\s+mod\\s+)|\G(!\\s*|not\\s+)|\G(\\s*&&\\s*|\\s*and\\s+)|\G(\\s*\\|\\|\\s*|\\s*or\\s+)|\G(\\s*xor\\s+)|\G(\\s+is\\s+odd\\s+by\\s+)|\G(\\s+is\\s+not\\s+odd\\s+by\\s+)|\G(\\s+is\\s+odd)|\G(\\s+is\\s+not\\s+odd)|\G(\\s+is\\s+even\\s+by\\s+)|\G(\\s+is\\s+not\\s+even\\s+by\\s+)|\G(\\s+is\\s+even)|\G(\\s+is\\s+not\\s+even)|\G(\\s+is\\s+div\\s+by\\s+)|\G(\\s+is\\s+not\\s+div\\s+by\\s+)|\G(\\((int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)\\)\\s*)|\G(\\s*\\(\\s*)|\G(\\s*\\))|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*->\\s*)|\G(\\s*=>\\s*)|\G(\\s*=\\s*)|\G(\\+\\+|--)|\G(\\s*(\\+|-)\\s*)|\G(\\s*(\\*|\/|%)\\s*)|\G(\\$)|\G(\\s*;)|\G(::)|\G(\\s*:\\s*)|\G(@)|\G(#)|\G(\")|\G(`)|\G(\\|)|\G(\\.)|\G(\\s*,\\s*)|\G(\\s*&\\s*)|\G(\\s*\\?\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*=\\s*)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G(\\s+)|\G([\S\s])/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
- $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
- if (!count($yymatches)) {
- throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state SMARTY');
+ if (strlen($yysubmatches[ 0 ]) < 200) {
+ $yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
+ } else {
+ $yymatches = array_filter($yymatches, 'strlen');
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
+ substr($this->data, $this->counter, 5) . '... state TAG');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
- if ($tokenMap[$this->token]) {
- // extract sub-patterns for passing to lex function
- $yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
- } else {
- $yysubmatches = array();
- }
$this->value = current($yymatches); // token value
- $r = $this->{'yy_r2_' . $this->token}($yysubmatches);
+ $r = $this->{'yy_r2_' . $this->token}();
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -486,450 +458,468 @@ class Smarty_Internal_Templatelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
- throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]);
}
break;
} while (true);
-
} // end function
+ const TAG = 2;
- const SMARTY = 2;
- function yy_r2_1($yy_subpatterns)
+ function yy_r2_1()
{
- $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
+ $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
}
- function yy_r2_2($yy_subpatterns)
- {
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
- }
- function yy_r2_3($yy_subpatterns)
+ function yy_r2_3()
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
}
- function yy_r2_5($yy_subpatterns)
- {
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
- }
- function yy_r2_6($yy_subpatterns)
+ function yy_r2_4()
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
}
- function yy_r2_7($yy_subpatterns)
- {
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
- }
- function yy_r2_8($yy_subpatterns)
+ function yy_r2_5()
{
- $this->token = Smarty_Internal_Templateparser::TP_RDEL;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
}
- function yy_r2_9($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
- function yy_r2_10($yy_subpatterns)
+ function yy_r2_6()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
+ $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG;
+ $this->taglineno = $this->line;
}
- function yy_r2_11($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_RDEL;
- $this->yypopstate();
- }
- function yy_r2_12($yy_subpatterns)
+ function yy_r2_8()
{
- $this->token = Smarty_Internal_Templateparser::TP_ISIN;
+ $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG;
+ $this->taglineno = $this->line;
}
- function yy_r2_13($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_AS;
- }
- function yy_r2_14($yy_subpatterns)
+ function yy_r2_9()
{
- $this->token = Smarty_Internal_Templateparser::TP_TO;
+ if ($this->_yy_stack[ count($this->_yy_stack) - 1 ] == self::TEXT) {
+ $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_SIMPELOUTPUT;
+ $this->taglineno = $this->line;
+ } else {
+ $this->value = $this->smarty->left_delimiter;
+ $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
}
- function yy_r2_15($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_STEP;
- }
- function yy_r2_16($yy_subpatterns)
+ function yy_r2_11()
{
- $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF;
+ $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
}
- function yy_r2_17($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_IDENTITY;
- }
- function yy_r2_18($yy_subpatterns)
+ function yy_r2_12()
{
- $this->token = Smarty_Internal_Templateparser::TP_NONEIDENTITY;
+ $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
}
- function yy_r2_19($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_EQUALS;
- }
- function yy_r2_20($yy_subpatterns)
+ public function yylex3()
{
+ if (!isset($this->yy_global_pattern3)) {
+ $this->yy_global_pattern3 = "/\G(\\s*" . $this->rdel . ")|\G(" . $this->ldel .
+ "\\s*)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$]smarty\\.block\\.(child|parent))|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*(([!=][=]{1,2})|([<][=>]?)|([>][=]?)|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor|(is\\s+(not\\s+)?(odd|even|div)\\s+by))\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G(([!]\\s*)|(not\\s+))|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|])|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS";
+ }
+ if ($this->counter >= strlen($this->data)) {
+ return false; // end of input
+ }
- $this->token = Smarty_Internal_Templateparser::TP_NOTEQUALS;
- }
- function yy_r2_22($yy_subpatterns)
- {
+ do {
+ if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) {
+ $yysubmatches = $yymatches;
+ if (strlen($yysubmatches[ 0 ]) < 200) {
+ $yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
+ } else {
+ $yymatches = array_filter($yymatches, 'strlen');
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
+ substr($this->data, $this->counter, 5) . '... state TAGBODY');
+ }
+ next($yymatches); // skip global match
+ $this->token = key($yymatches); // token number
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r3_' . $this->token}();
+ if ($r === null) {
+ $this->counter += strlen($this->value);
+ $this->line += substr_count($this->value, "\n");
+ // accept this token
+ return true;
+ } elseif ($r === true) {
+ // we have changed state
+ // process this token in the new state
+ return $this->yylex();
+ } elseif ($r === false) {
+ $this->counter += strlen($this->value);
+ $this->line += substr_count($this->value, "\n");
+ if ($this->counter >= strlen($this->data)) {
+ return false; // end of input
+ }
+ // skip this token
+ continue;
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]);
+ }
+ break;
+ } while (true);
+ } // end function
- $this->token = Smarty_Internal_Templateparser::TP_GREATEREQUAL;
- }
- function yy_r2_24($yy_subpatterns)
- {
+ const TAGBODY = 3;
- $this->token = Smarty_Internal_Templateparser::TP_LESSEQUAL;
- }
- function yy_r2_26($yy_subpatterns)
+ function yy_r3_1()
{
- $this->token = Smarty_Internal_Templateparser::TP_GREATERTHAN;
+ $this->token = Smarty_Internal_Templateparser::TP_RDEL;
+ $this->yypopstate();
}
- function yy_r2_27($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_LESSTHAN;
- }
- function yy_r2_28($yy_subpatterns)
+ function yy_r3_2()
{
- $this->token = Smarty_Internal_Templateparser::TP_MOD;
+ if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ?
+ strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false
+ ) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->yypushstate(self::TAG);
+ return true;
+ }
}
- function yy_r2_29($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_NOT;
- }
- function yy_r2_30($yy_subpatterns)
+ function yy_r3_3()
{
- $this->token = Smarty_Internal_Templateparser::TP_LAND;
+ $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->yypushstate(self::DOUBLEQUOTEDSTRING);
}
- function yy_r2_31($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_LOR;
- }
- function yy_r2_32($yy_subpatterns)
+ function yy_r3_4()
{
- $this->token = Smarty_Internal_Templateparser::TP_LXOR;
+ $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
}
- function yy_r2_33($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_ISODDBY;
- }
- function yy_r2_34($yy_subpatterns)
+ function yy_r3_5()
{
- $this->token = Smarty_Internal_Templateparser::TP_ISNOTODDBY;
+ $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT;
+ $this->taglineno = $this->line;
}
- function yy_r2_35($yy_subpatterns)
+
+ function yy_r3_7()
{
- $this->token = Smarty_Internal_Templateparser::TP_ISODD;
+ $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
}
- function yy_r2_36($yy_subpatterns)
+
+ function yy_r3_8()
{
- $this->token = Smarty_Internal_Templateparser::TP_ISNOTODD;
+ $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
}
- function yy_r2_37($yy_subpatterns)
+
+ function yy_r3_9()
{
- $this->token = Smarty_Internal_Templateparser::TP_ISEVENBY;
+ $this->token = Smarty_Internal_Templateparser::TP_ISIN;
}
- function yy_r2_38($yy_subpatterns)
+
+ function yy_r3_10()
{
- $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVENBY;
+ $this->token = Smarty_Internal_Templateparser::TP_AS;
}
- function yy_r2_39($yy_subpatterns)
+
+ function yy_r3_11()
{
- $this->token = Smarty_Internal_Templateparser::TP_ISEVEN;
+ $this->token = Smarty_Internal_Templateparser::TP_TO;
}
- function yy_r2_40($yy_subpatterns)
+
+ function yy_r3_12()
{
- $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVEN;
+ $this->token = Smarty_Internal_Templateparser::TP_STEP;
}
- function yy_r2_41($yy_subpatterns)
+
+ function yy_r3_13()
{
- $this->token = Smarty_Internal_Templateparser::TP_ISDIVBY;
+ $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF;
}
- function yy_r2_42($yy_subpatterns)
+
+ function yy_r3_14()
{
- $this->token = Smarty_Internal_Templateparser::TP_ISNOTDIVBY;
+ $this->token = Smarty_Internal_Templateparser::TP_LOGOP;
}
- function yy_r2_43($yy_subpatterns)
+
+ function yy_r3_19()
{
- $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
+ $this->token = Smarty_Internal_Templateparser::TP_TLOGOP;
}
- function yy_r2_47($yy_subpatterns)
+
+ function yy_r3_24()
{
- $this->token = Smarty_Internal_Templateparser::TP_OPENP;
+ $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND;
}
- function yy_r2_48($yy_subpatterns)
+
+ function yy_r3_27()
{
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
+ $this->token = Smarty_Internal_Templateparser::TP_NOT;
}
- function yy_r2_49($yy_subpatterns)
+
+ function yy_r3_30()
{
- $this->token = Smarty_Internal_Templateparser::TP_OPENB;
+ $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
}
- function yy_r2_50($yy_subpatterns)
+
+ function yy_r3_34()
{
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
+ $this->token = Smarty_Internal_Templateparser::TP_OPENP;
}
- function yy_r2_51($yy_subpatterns)
+
+ function yy_r3_35()
{
- $this->token = Smarty_Internal_Templateparser::TP_PTR;
+ $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
}
- function yy_r2_52($yy_subpatterns)
+
+ function yy_r3_36()
{
- $this->token = Smarty_Internal_Templateparser::TP_APTR;
+ $this->token = Smarty_Internal_Templateparser::TP_OPENB;
}
- function yy_r2_53($yy_subpatterns)
+
+ function yy_r3_37()
{
- $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
+ $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
}
- function yy_r2_54($yy_subpatterns)
+
+ function yy_r3_38()
{
- $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
+ $this->token = Smarty_Internal_Templateparser::TP_PTR;
}
- function yy_r2_55($yy_subpatterns)
+
+ function yy_r3_39()
{
- $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
+ $this->token = Smarty_Internal_Templateparser::TP_APTR;
}
- function yy_r2_57($yy_subpatterns)
+
+ function yy_r3_40()
{
- $this->token = Smarty_Internal_Templateparser::TP_MATH;
+ $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
}
- function yy_r2_59($yy_subpatterns)
+
+ function yy_r3_41()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
+ $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
}
- function yy_r2_60($yy_subpatterns)
+
+ function yy_r3_43()
{
- $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
+ $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
}
- function yy_r2_61($yy_subpatterns)
+
+ function yy_r3_45()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
+ $this->token = Smarty_Internal_Templateparser::TP_MATH;
}
- function yy_r2_62($yy_subpatterns)
+
+ function yy_r3_47()
{
- $this->token = Smarty_Internal_Templateparser::TP_COLON;
+ $this->token = Smarty_Internal_Templateparser::TP_AT;
}
- function yy_r2_63($yy_subpatterns)
+
+ function yy_r3_48()
{
- $this->token = Smarty_Internal_Templateparser::TP_AT;
+ $this->token = Smarty_Internal_Templateparser::TP_HATCH;
}
- function yy_r2_64($yy_subpatterns)
+
+ function yy_r3_49()
{
- $this->token = Smarty_Internal_Templateparser::TP_HATCH;
+ // resolve conflicts with shorttag and right_delimiter starting with '='
+ if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->rdel_length) ==
+ $this->smarty->right_delimiter
+ ) {
+ preg_match("~\s+~", $this->value, $match);
+ $this->value = $match[ 0 ];
+ $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_ATTR;
+ }
}
- function yy_r2_65($yy_subpatterns)
+
+ function yy_r3_50()
{
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
- $this->yypushstate(self::DOUBLEQUOTEDSTRING);
+ $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE;
}
- function yy_r2_66($yy_subpatterns)
+
+ function yy_r3_53()
{
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_ID;
}
- function yy_r2_67($yy_subpatterns)
+
+ function yy_r3_54()
{
- $this->token = Smarty_Internal_Templateparser::TP_VERT;
+ $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
}
- function yy_r2_68($yy_subpatterns)
+
+ function yy_r3_55()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOT;
+ $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->yypopstate();
}
- function yy_r2_69($yy_subpatterns)
+
+ function yy_r3_56()
{
- $this->token = Smarty_Internal_Templateparser::TP_COMMA;
+ $this->token = Smarty_Internal_Templateparser::TP_VERT;
}
- function yy_r2_70($yy_subpatterns)
+
+ function yy_r3_57()
{
- $this->token = Smarty_Internal_Templateparser::TP_ANDSYM;
+ $this->token = Smarty_Internal_Templateparser::TP_DOT;
}
- function yy_r2_71($yy_subpatterns)
+
+ function yy_r3_58()
{
- $this->token = Smarty_Internal_Templateparser::TP_QMARK;
+ $this->token = Smarty_Internal_Templateparser::TP_COMMA;
}
- function yy_r2_72($yy_subpatterns)
+
+ function yy_r3_59()
{
- $this->token = Smarty_Internal_Templateparser::TP_HEX;
+ $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
}
- function yy_r2_73($yy_subpatterns)
+
+ function yy_r3_60()
{
- // resolve conflicts with shorttag and right_delimiter starting with '='
- if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->rdel_length) == $this->smarty->right_delimiter) {
- preg_match("/\s+/",$this->value,$match);
- $this->value = $match[0];
- $this->token = Smarty_Internal_Templateparser::TP_SPACE;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_ATTR;
- }
+ $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
}
- function yy_r2_74($yy_subpatterns)
+
+ function yy_r3_61()
{
- $this->token = Smarty_Internal_Templateparser::TP_ID;
+ $this->token = Smarty_Internal_Templateparser::TP_COLON;
}
- function yy_r2_75($yy_subpatterns)
+
+ function yy_r3_62()
{
- $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
+ $this->token = Smarty_Internal_Templateparser::TP_QMARK;
}
- function yy_r2_76($yy_subpatterns)
+
+ function yy_r3_63()
{
- $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ $this->token = Smarty_Internal_Templateparser::TP_HEX;
}
- function yy_r2_77($yy_subpatterns)
+
+ function yy_r3_64()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = Smarty_Internal_Templateparser::TP_SPACE;
}
+ function yy_r3_65()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
- function yylex3()
+ public function yylex4()
{
- $tokenMap = array (
- 1 => 0,
- 2 => 0,
- 3 => 0,
- 4 => 0,
- 5 => 0,
- 6 => 0,
- 7 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if (!isset($this->yy_global_pattern4)) {
+ $this->yy_global_pattern4 =
+ "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/]literal\\s*" .
+ $this->rdel . ")|\G([\S\s])/isS";
+ }
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(".$this->ldel."\\s*literal\\s*".$this->rdel.")|\G(".$this->ldel."\\s*\/literal\\s*".$this->rdel.")|\G(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|\G(\\?>)|\G(<%)|\G(%>)|\G([\S\s])/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
- $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
- if (!count($yymatches)) {
- throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state LITERAL');
+ if (strlen($yysubmatches[ 0 ]) < 200) {
+ $yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
+ } else {
+ $yymatches = array_filter($yymatches, 'strlen');
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
+ substr($this->data, $this->counter, 5) . '... state LITERAL');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
- if ($tokenMap[$this->token]) {
- // extract sub-patterns for passing to lex function
- $yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
- } else {
- $yysubmatches = array();
- }
$this->value = current($yymatches); // token value
- $r = $this->{'yy_r3_' . $this->token}($yysubmatches);
+ $r = $this->{'yy_r4_' . $this->token}();
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -938,128 +928,89 @@ class Smarty_Internal_Templatelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
- throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]);
}
break;
} while (true);
-
} // end function
+ const LITERAL = 4;
- const LITERAL = 3;
- function yy_r3_1($yy_subpatterns)
+ function yy_r4_1()
{
- $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
- $this->yypushstate(self::LITERAL);
+ $this->literal_cnt ++;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
}
- function yy_r3_2($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
- $this->yypopstate();
- }
- function yy_r3_3($yy_subpatterns)
+ function yy_r4_2()
{
- if (in_array($this->value, Array('<?', '<?=', '<?php'))) {
- $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
- $this->value = substr($this->value, 0, 2);
- }
- }
- function yy_r3_4($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
- }
- function yy_r3_5($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
+ if ($this->literal_cnt) {
+ $this->literal_cnt --;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+ $this->yypopstate();
+ }
}
- function yy_r3_6($yy_subpatterns)
- {
- $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
- }
- function yy_r3_7($yy_subpatterns)
+ function yy_r4_3()
{
- if ($this->mbstring_overload) {
- $to = mb_strlen($this->data,'latin1');
- } else {
- $to = strlen($this->data);
- }
- preg_match("/{$this->ldel}\/?literal{$this->rdel}|<\?|<%|\?>|%>/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
- if (isset($match[0][1])) {
- $to = $match[0][1];
- } else {
- $this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
- }
- if ($this->mbstring_overload) {
- $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1');
- } else {
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- }
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ $to = strlen($this->data);
+ preg_match("~{$this->ldel}[/]?literal{$this->rdel}~i", $this->data, $match, PREG_OFFSET_CAPTURE,
+ $this->counter);
+ if (isset($match[ 0 ][ 1 ])) {
+ $to = $match[ 0 ][ 1 ];
+ } else {
+ $this->compiler->trigger_template_error("missing or misspelled literal closing tag");
+ }
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
}
-
- function yylex4()
+ public function yylex5()
{
- $tokenMap = array (
- 1 => 0,
- 2 => 1,
- 4 => 0,
- 5 => 0,
- 6 => 0,
- 7 => 0,
- 8 => 0,
- 9 => 0,
- 10 => 0,
- 11 => 0,
- 12 => 0,
- 13 => 3,
- 17 => 0,
- );
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if (!isset($this->yy_global_pattern5)) {
+ $this->yy_global_pattern5 =
+ "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/]literal\\s*" .
+ $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/])|\G(" . $this->ldel . "\\s*[0-9]*[a-zA-Z_]\\w*)|\G(" .
+ $this->ldel .
+ "\\s*)|\G([\"])|\G([`][$])|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" .
+ $this->ldel . "|\\$|`\\$|\")))|\G([\S\s])/isS";
+ }
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(".$this->ldel."\\s{1,}\/)|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s{1,})|\G(".$this->ldel."\/)|\G(".$this->ldel.")|\G(\")|\G(`\\$)|\G(\\$[0-9]*[a-zA-Z_]\\w*)|\G(\\$)|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(".$this->ldel."|\\$|`\\$|\")))|\G([\S\s])/iS";
do {
- if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+ if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches;
- $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
- if (!count($yymatches)) {
- throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr($this->data,
- $this->counter, 5) . '... state DOUBLEQUOTEDSTRING');
+ if (strlen($yysubmatches[ 0 ]) < 200) {
+ $yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
+ } else {
+ $yymatches = array_filter($yymatches, 'strlen');
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
+ substr($this->data, $this->counter, 5) . '... state DOUBLEQUOTEDSTRING');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
- if ($tokenMap[$this->token]) {
- // extract sub-patterns for passing to lex function
- $yysubmatches = array_slice($yysubmatches, $this->token + 1,
- $tokenMap[$this->token]);
- } else {
- $yysubmatches = array();
- }
$this->value = current($yymatches); // token value
- $r = $this->{'yy_r4_' . $this->token}($yysubmatches);
+ $r = $this->{'yy_r5_' . $this->token}();
if ($r === null) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
// accept this token
return true;
@@ -1068,136 +1019,117 @@ class Smarty_Internal_Templatelexer
// process this token in the new state
return $this->yylex();
} elseif ($r === false) {
- $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+ $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+ if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
// skip this token
continue;
- } } else {
- throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[$this->counter]);
+ }
+ } else {
+ throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]);
}
break;
} while (true);
-
} // end function
+ const DOUBLEQUOTEDSTRING = 5;
- const DOUBLEQUOTEDSTRING = 4;
- function yy_r4_1($yy_subpatterns)
+ function yy_r5_1()
{
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
- function yy_r4_2($yy_subpatterns)
- {
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
- }
- function yy_r4_4($yy_subpatterns)
+ function yy_r5_2()
{
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
- function yy_r4_5($yy_subpatterns)
- {
- if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
- }
- function yy_r4_6($yy_subpatterns)
+ function yy_r5_3()
{
- if ($this->smarty->auto_literal) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
- }
+ if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ?
+ strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false
+ ) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->yypushstate(self::TAG);
+ return true;
+ }
}
- function yy_r4_7($yy_subpatterns)
+
+ function yy_r5_4()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
+ if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ?
+ strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false
+ ) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->yypushstate(self::TAG);
+ return true;
+ }
}
- function yy_r4_8($yy_subpatterns)
+
+ function yy_r5_5()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
+ if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ?
+ strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false
+ ) {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->taglineno = $this->line;
+ $this->yypushstate(self::TAGBODY);
+ }
}
- function yy_r4_9($yy_subpatterns)
+
+ function yy_r5_6()
{
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
- $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->yypopstate();
}
- function yy_r4_10($yy_subpatterns)
+
+ function yy_r5_7()
{
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
- $this->value = substr($this->value,0,-1);
- $this->yypushstate(self::SMARTY);
- $this->taglineno = $this->line;
+ $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->value = substr($this->value, 0, - 1);
+ $this->yypushstate(self::TAGBODY);
+ $this->taglineno = $this->line;
}
- function yy_r4_11($yy_subpatterns)
+
+ function yy_r5_8()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+ $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
}
- function yy_r4_12($yy_subpatterns)
+
+ function yy_r5_9()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
- function yy_r4_13($yy_subpatterns)
+
+ function yy_r5_10()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
- function yy_r4_17($yy_subpatterns)
+
+ function yy_r5_14()
{
- if ($this->mbstring_overload) {
- $to = mb_strlen($this->data,'latin1');
- } else {
- $to = strlen($this->data);
- }
- if ($this->mbstring_overload) {
- $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1');
- } else {
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- }
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $to = strlen($this->data);
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
}
+
+ \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_templateparser.php b/include/smarty/libs/sysplugins/smarty_internal_templateparser.php
index b0393c694..a745d1dc2 100644
--- a/include/smarty/libs/sysplugins/smarty_internal_templateparser.php
+++ b/include/smarty/libs/sysplugins/smarty_internal_templateparser.php
@@ -1,20 +1,12 @@
<?php
-/**
-* Smarty Internal Plugin Templateparser
-*
-* This is the template parser.
-* It is generated from the internal.templateparser.y file
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
class TP_yyToken implements ArrayAccess
{
public $string = '';
+
public $metadata = array();
- function __construct($s, $m = array())
+ public function __construct($s, $m = array())
{
if ($s instanceof TP_yyToken) {
$this->string = $s->string;
@@ -29,28 +21,28 @@ class TP_yyToken implements ArrayAccess
}
}
- function __toString()
+ public function __toString()
{
- return $this->_string;
+ return $this->string;
}
- function offsetExists($offset)
+ public function offsetExists($offset)
{
- return isset($this->metadata[$offset]);
+ return isset($this->metadata[ $offset ]);
}
- function offsetGet($offset)
+ public function offsetGet($offset)
{
- return $this->metadata[$offset];
+ return $this->metadata[ $offset ];
}
- function offsetSet($offset, $value)
+ public function offsetSet($offset, $value)
{
if ($offset === null) {
- if (isset($value[0])) {
- $x = ($value instanceof TP_yyToken) ?
- $value->metadata : $value;
+ if (isset($value[ 0 ])) {
+ $x = ($value instanceof TP_yyToken) ? $value->metadata : $value;
$this->metadata = array_merge($this->metadata, $x);
+
return;
}
$offset = count($this->metadata);
@@ -60,16 +52,16 @@ class TP_yyToken implements ArrayAccess
}
if ($value instanceof TP_yyToken) {
if ($value->metadata) {
- $this->metadata[$offset] = $value->metadata;
+ $this->metadata[ $offset ] = $value->metadata;
}
} elseif ($value) {
- $this->metadata[$offset] = $value;
+ $this->metadata[ $offset ] = $value;
}
}
- function offsetUnset($offset)
+ public function offsetUnset($offset)
{
- unset($this->metadata[$offset]);
+ unset($this->metadata[ $offset ]);
}
}
@@ -80,1446 +72,1007 @@ class TP_yyStackEntry
** number for the token at this stack level */
public $minor; /* The user-supplied minor token value. This
** is the value of the token */
-};
+}
+
+;
+#line 11 "../smarty/lexer/smarty_internal_templateparser.y"
-#line 12 "smarty_internal_templateparser.y"
-class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php"
+/**
+ * Smarty Template Parser Class
+ *
+ * This is the template parser.
+ * It is generated from the smarty_internal_templateparser.y file
+ *
+ * @author Uwe Tews <uwe.tews@googlemail.com>
+ */
+class Smarty_Internal_Templateparser
{
-#line 14 "smarty_internal_templateparser.y"
+ #line 23 "../smarty/lexer/smarty_internal_templateparser.y"
const Err1 = "Security error: Call to private object member not allowed";
+
const Err2 = "Security error: Call to dynamic object member not allowed";
+
const Err3 = "PHP in template not allowed. Use SmartyBC to enable it";
- // states whether the parse was successful or not
+
+ /**
+ * result status
+ *
+ * @var bool
+ */
public $successful = true;
+
+ /**
+ * return value
+ *
+ * @var mixed
+ */
public $retvalue = 0;
- private $lex;
+
+ /**
+ * counter for prefix code
+ *
+ * @var int
+ */
+ public static $prefix_number = 0;
+
+ /**
+ * @var
+ */
+ public $yymajor;
+
+ /**
+ * last index of array variable
+ *
+ * @var mixed
+ */
+ public $last_index;
+
+ /**
+ * last variable name
+ *
+ * @var string
+ */
+ public $last_variable;
+
+ /**
+ * root parse tree buffer
+ *
+ * @var Smarty_Internal_ParseTree
+ */
+ public $root_buffer;
+
+ /**
+ * current parse tree object
+ *
+ * @var Smarty_Internal_ParseTree
+ */
+ public $current_buffer;
+
+ /**
+ * lexer object
+ *
+ * @var Smarty_Internal_Templatelexer
+ */
+ public $lex;
+
+ /**
+ * internal error flag
+ *
+ * @var bool
+ */
private $internalError = false;
- private $strip = false;
- function __construct($lex, $compiler) {
+ /**
+ * {strip} status
+ *
+ * @var bool
+ */
+ public $strip = false;
+
+ /**
+ * compiler object
+ *
+ * @var Smarty_Internal_TemplateCompilerBase
+ */
+ public $compiler = null;
+
+ /**
+ * smarty object
+ *
+ * @var Smarty
+ */
+ public $smarty = null;
+
+ /**
+ * template object
+ *
+ * @var Smarty_Internal_Template
+ */
+ public $template = null;
+
+ /**
+ * block nesting level
+ *
+ * @var int
+ */
+ public $block_nesting_level = 0;
+
+ /**
+ * security object
+ *
+ * @var Smarty_Security
+ */
+ public $security = null;
+
+ /**
+ * template prefix array
+ *
+ * @var \Smarty_Internal_ParseTree[]
+ */
+ public $template_prefix = array();
+
+ /**
+ * security object
+ *
+ * @var \Smarty_Internal_ParseTree[]
+ */
+ public $template_postfix = array();
+
+ /**
+ * constructor
+ *
+ * @param Smarty_Internal_Templatelexer $lex
+ * @param Smarty_Internal_TemplateCompilerBase $compiler
+ */
+ function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
$this->lex = $lex;
$this->compiler = $compiler;
- $this->smarty = $this->compiler->smarty;
$this->template = $this->compiler->template;
- $this->compiler->has_variable_string = false;
- $this->compiler->prefix_code = array();
- $this->prefix_number = 0;
- $this->block_nesting_level = 0;
- if ($this->security = isset($this->smarty->security_policy)) {
- $this->php_handling = $this->smarty->security_policy->php_handling;
- } else {
- $this->php_handling = $this->smarty->php_handling;
- }
- $this->is_xml = false;
- $this->asp_tags = (ini_get('asp_tags') != '0');
- $this->current_buffer = $this->root_buffer = new _smarty_template_buffer($this);
+ $this->smarty = $this->template->smarty;
+ $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false;
+ $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template();
}
- public static function escape_start_tag($tag_text) {
- $tag = preg_replace('/\A<\?(.*)\z/', '<<?php ?>?\1', $tag_text, -1 , $count); //Escape tag
- return $tag;
+ /**
+ * insert PHP code in current buffer
+ *
+ * @param string $code
+ */
+ public function insertPhpCode($code)
+ {
+ $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $code));
}
- public static function escape_end_tag($tag_text) {
- return '?<?php ?>>';
+ /**
+ * merge PHP code with prefix code and return parse tree tag object
+ *
+ * @param string $code
+ *
+ * @return Smarty_Internal_ParseTree_Tag
+ */
+ public function mergePrefixCode($code)
+ {
+ $tmp = '';
+ foreach ($this->compiler->prefix_code as $preCode) {
+ $tmp .= $preCode;
+ }
+ $this->compiler->prefix_code = array();
+ $tmp .= $code;
+ return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp, true));
}
- public function compileVariable($variable) {
- if (strpos($variable,'(') == 0) {
- // not a variable variable
- $var = trim($variable,'\'');
- $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable($var, null, true, false)->nocache;
- $this->template->properties['variables'][$var] = $this->compiler->tag_nocache|$this->compiler->nocache;
- }
-// return '(isset($_smarty_tpl->tpl_vars['. $variable .'])?$_smarty_tpl->tpl_vars['. $variable .']->value:$_smarty_tpl->getVariable('. $variable .')->value)';
- return '$_smarty_tpl->tpl_vars['. $variable .']->value';
- }
-#line 132 "smarty_internal_templateparser.php"
-
- const TP_VERT = 1;
- const TP_COLON = 2;
- const TP_COMMENT = 3;
- const TP_PHPSTARTTAG = 4;
- const TP_PHPENDTAG = 5;
- const TP_ASPSTARTTAG = 6;
- const TP_ASPENDTAG = 7;
- const TP_FAKEPHPSTARTTAG = 8;
- const TP_XMLTAG = 9;
- const TP_TEXT = 10;
- const TP_STRIPON = 11;
- const TP_STRIPOFF = 12;
- const TP_LITERALSTART = 13;
- const TP_LITERALEND = 14;
- const TP_LITERAL = 15;
- const TP_LDEL = 16;
- const TP_RDEL = 17;
- const TP_DOLLAR = 18;
- const TP_ID = 19;
- const TP_EQUAL = 20;
- const TP_PTR = 21;
- const TP_LDELIF = 22;
- const TP_LDELFOR = 23;
- const TP_SEMICOLON = 24;
- const TP_INCDEC = 25;
- const TP_TO = 26;
- const TP_STEP = 27;
- const TP_LDELFOREACH = 28;
- const TP_SPACE = 29;
- const TP_AS = 30;
- const TP_APTR = 31;
- const TP_LDELSETFILTER = 32;
- const TP_SMARTYBLOCKCHILD = 33;
- const TP_LDELSLASH = 34;
- const TP_ATTR = 35;
- const TP_INTEGER = 36;
- const TP_COMMA = 37;
- const TP_OPENP = 38;
- const TP_CLOSEP = 39;
- const TP_MATH = 40;
- const TP_UNIMATH = 41;
- const TP_ANDSYM = 42;
- const TP_ISIN = 43;
- const TP_ISDIVBY = 44;
- const TP_ISNOTDIVBY = 45;
- const TP_ISEVEN = 46;
- const TP_ISNOTEVEN = 47;
- const TP_ISEVENBY = 48;
- const TP_ISNOTEVENBY = 49;
- const TP_ISODD = 50;
- const TP_ISNOTODD = 51;
- const TP_ISODDBY = 52;
- const TP_ISNOTODDBY = 53;
- const TP_INSTANCEOF = 54;
- const TP_QMARK = 55;
- const TP_NOT = 56;
- const TP_TYPECAST = 57;
- const TP_HEX = 58;
- const TP_DOT = 59;
- const TP_SINGLEQUOTESTRING = 60;
- const TP_DOUBLECOLON = 61;
- const TP_AT = 62;
- const TP_HATCH = 63;
- const TP_OPENB = 64;
- const TP_CLOSEB = 65;
- const TP_EQUALS = 66;
- const TP_NOTEQUALS = 67;
- const TP_GREATERTHAN = 68;
- const TP_LESSTHAN = 69;
- const TP_GREATEREQUAL = 70;
- const TP_LESSEQUAL = 71;
- const TP_IDENTITY = 72;
- const TP_NONEIDENTITY = 73;
- const TP_MOD = 74;
- const TP_LAND = 75;
- const TP_LOR = 76;
- const TP_LXOR = 77;
- const TP_QUOTE = 78;
- const TP_BACKTICK = 79;
- const TP_DOLLARID = 80;
- const YY_NO_ACTION = 597;
- const YY_ACCEPT_ACTION = 596;
- const YY_ERROR_ACTION = 595;
-
- const YY_SZ_ACTTAB = 2383;
-static public $yy_action = array(
- /* 0 */ 225, 275, 263, 276, 259, 257, 260, 390, 356, 359,
- /* 10 */ 353, 193, 18, 127, 42, 317, 381, 351, 196, 350,
- /* 20 */ 6, 108, 24, 98, 128, 190, 134, 318, 41, 41,
- /* 30 */ 249, 329, 231, 18, 43, 43, 317, 26, 298, 50,
- /* 40 */ 47, 48, 44, 10, 13, 305, 306, 12, 11, 340,
- /* 50 */ 341, 40, 20, 387, 308, 307, 309, 374, 254, 248,
- /* 60 */ 252, 217, 193, 385, 291, 375, 376, 377, 373, 372,
- /* 70 */ 368, 367, 369, 370, 371, 378, 379, 225, 312, 255,
- /* 80 */ 225, 225, 118, 2, 207, 76, 135, 596, 95, 281,
- /* 90 */ 271, 264, 2, 366, 315, 386, 461, 383, 232, 294,
- /* 100 */ 303, 388, 313, 389, 227, 41, 144, 225, 461, 245,
- /* 110 */ 282, 43, 218, 358, 461, 144, 50, 47, 48, 44,
- /* 120 */ 10, 13, 305, 306, 12, 11, 340, 341, 40, 20,
- /* 130 */ 105, 177, 522, 46, 46, 41, 19, 522, 143, 297,
- /* 140 */ 325, 43, 375, 376, 377, 373, 372, 368, 367, 369,
- /* 150 */ 370, 371, 378, 379, 225, 312, 293, 206, 225, 141,
- /* 160 */ 124, 225, 54, 119, 123, 225, 459, 38, 173, 246,
- /* 170 */ 319, 315, 386, 347, 455, 232, 294, 303, 459, 313,
- /* 180 */ 139, 321, 41, 31, 459, 41, 41, 2, 43, 188,
- /* 190 */ 2, 43, 43, 50, 47, 48, 44, 10, 13, 305,
- /* 200 */ 306, 12, 11, 340, 341, 40, 20, 225, 136, 301,
- /* 210 */ 144, 194, 350, 144, 46, 202, 206, 328, 198, 375,
- /* 220 */ 376, 377, 373, 372, 368, 367, 369, 370, 371, 378,
- /* 230 */ 379, 21, 9, 28, 185, 41, 318, 225, 265, 271,
- /* 240 */ 264, 43, 206, 27, 173, 206, 50, 47, 48, 44,
- /* 250 */ 10, 13, 305, 306, 12, 11, 340, 341, 40, 20,
- /* 260 */ 225, 178, 18, 212, 330, 317, 17, 32, 8, 14,
- /* 270 */ 325, 267, 375, 376, 377, 373, 372, 368, 367, 369,
- /* 280 */ 370, 371, 378, 379, 136, 363, 363, 207, 41, 4,
- /* 290 */ 46, 5, 131, 233, 43, 25, 186, 289, 318, 50,
- /* 300 */ 47, 48, 44, 10, 13, 305, 306, 12, 11, 340,
- /* 310 */ 341, 40, 20, 225, 100, 161, 18, 355, 361, 317,
- /* 320 */ 26, 109, 360, 346, 325, 375, 376, 377, 373, 372,
- /* 330 */ 368, 367, 369, 370, 371, 378, 379, 106, 201, 172,
- /* 340 */ 25, 206, 288, 25, 18, 261, 181, 317, 325, 45,
- /* 350 */ 339, 129, 50, 47, 48, 44, 10, 13, 305, 306,
- /* 360 */ 12, 11, 340, 341, 40, 20, 225, 104, 162, 18,
- /* 370 */ 16, 205, 317, 206, 248, 238, 43, 325, 375, 376,
- /* 380 */ 377, 373, 372, 368, 367, 369, 370, 371, 378, 379,
- /* 390 */ 255, 354, 243, 229, 206, 342, 18, 239, 242, 241,
- /* 400 */ 248, 266, 300, 330, 240, 50, 47, 48, 44, 10,
- /* 410 */ 13, 305, 306, 12, 11, 340, 341, 40, 20, 225,
- /* 420 */ 165, 176, 184, 18, 18, 18, 253, 215, 251, 325,
- /* 430 */ 325, 375, 376, 377, 373, 372, 368, 367, 369, 370,
- /* 440 */ 371, 378, 379, 304, 268, 159, 207, 207, 247, 206,
- /* 450 */ 148, 41, 195, 350, 325, 27, 33, 43, 50, 47,
- /* 460 */ 48, 44, 10, 13, 305, 306, 12, 11, 340, 341,
- /* 470 */ 40, 20, 163, 225, 328, 199, 133, 29, 187, 23,
- /* 480 */ 250, 325, 101, 225, 375, 376, 377, 373, 372, 368,
- /* 490 */ 367, 369, 370, 371, 378, 379, 225, 298, 207, 334,
- /* 500 */ 225, 45, 312, 103, 299, 192, 154, 364, 18, 302,
- /* 510 */ 135, 317, 285, 35, 173, 203, 320, 3, 236, 6,
- /* 520 */ 108, 41, 232, 294, 303, 134, 313, 43, 130, 249,
- /* 530 */ 329, 231, 250, 225, 280, 50, 47, 48, 44, 10,
- /* 540 */ 13, 305, 306, 12, 11, 340, 341, 40, 20, 336,
- /* 550 */ 36, 166, 212, 230, 332, 228, 338, 8, 132, 330,
- /* 560 */ 325, 375, 376, 377, 373, 372, 368, 367, 369, 370,
- /* 570 */ 371, 378, 379, 225, 312, 345, 37, 362, 141, 312,
- /* 580 */ 94, 77, 135, 156, 236, 182, 173, 135, 122, 204,
- /* 590 */ 315, 386, 365, 225, 232, 294, 303, 137, 313, 232,
- /* 600 */ 294, 303, 125, 313, 41, 222, 333, 180, 277, 337,
- /* 610 */ 43, 225, 50, 47, 48, 44, 10, 13, 305, 306,
- /* 620 */ 12, 11, 340, 341, 40, 20, 136, 335, 316, 5,
- /* 630 */ 22, 197, 269, 34, 173, 148, 126, 116, 375, 376,
- /* 640 */ 377, 373, 372, 368, 367, 369, 370, 371, 378, 379,
- /* 650 */ 225, 312, 298, 225, 292, 141, 312, 258, 77, 135,
- /* 660 */ 153, 183, 318, 301, 135, 175, 284, 315, 386, 461,
- /* 670 */ 117, 232, 294, 303, 325, 313, 232, 294, 303, 382,
- /* 680 */ 313, 461, 220, 110, 329, 298, 318, 461, 329, 50,
- /* 690 */ 47, 48, 44, 10, 13, 305, 306, 12, 11, 340,
- /* 700 */ 341, 40, 20, 225, 30, 191, 46, 189, 314, 107,
- /* 710 */ 329, 329, 146, 97, 102, 375, 376, 377, 373, 372,
- /* 720 */ 368, 367, 369, 370, 371, 378, 379, 298, 298, 298,
- /* 730 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
- /* 740 */ 329, 329, 50, 47, 48, 44, 10, 13, 305, 306,
- /* 750 */ 12, 11, 340, 341, 40, 20, 225, 329, 329, 329,
- /* 760 */ 329, 329, 329, 329, 329, 114, 160, 115, 375, 376,
- /* 770 */ 377, 373, 372, 368, 367, 369, 370, 371, 378, 379,
- /* 780 */ 298, 298, 298, 329, 329, 329, 329, 329, 329, 329,
- /* 790 */ 329, 329, 329, 329, 283, 50, 47, 48, 44, 10,
- /* 800 */ 13, 305, 306, 12, 11, 340, 341, 40, 20, 329,
- /* 810 */ 225, 329, 329, 329, 329, 329, 329, 329, 329, 329,
- /* 820 */ 329, 375, 376, 377, 373, 372, 368, 367, 369, 370,
- /* 830 */ 371, 378, 379, 200, 329, 329, 329, 329, 329, 329,
- /* 840 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 50,
- /* 850 */ 47, 48, 44, 10, 13, 305, 306, 12, 11, 340,
- /* 860 */ 341, 40, 20, 225, 329, 329, 329, 329, 329, 329,
- /* 870 */ 329, 329, 329, 329, 329, 375, 376, 377, 373, 372,
- /* 880 */ 368, 367, 369, 370, 371, 378, 379, 329, 329, 329,
- /* 890 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
- /* 900 */ 329, 329, 50, 47, 48, 44, 10, 13, 305, 306,
- /* 910 */ 12, 11, 340, 341, 40, 20, 329, 329, 329, 329,
- /* 920 */ 329, 329, 329, 329, 329, 329, 329, 290, 375, 376,
- /* 930 */ 377, 373, 372, 368, 367, 369, 370, 371, 378, 379,
- /* 940 */ 225, 312, 329, 225, 329, 141, 312, 329, 77, 135,
- /* 950 */ 152, 329, 329, 329, 135, 158, 208, 315, 386, 458,
- /* 960 */ 329, 232, 294, 303, 325, 313, 232, 294, 303, 329,
- /* 970 */ 313, 458, 223, 329, 329, 329, 318, 458, 329, 50,
- /* 980 */ 47, 48, 44, 10, 13, 305, 306, 12, 11, 340,
- /* 990 */ 341, 40, 20, 225, 329, 329, 46, 329, 329, 329,
- /* 1000 */ 329, 329, 329, 329, 329, 375, 376, 377, 373, 372,
- /* 1010 */ 368, 367, 369, 370, 371, 378, 379, 329, 329, 329,
- /* 1020 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
- /* 1030 */ 329, 329, 50, 47, 48, 44, 10, 13, 305, 306,
- /* 1040 */ 12, 11, 340, 341, 40, 20, 329, 329, 329, 329,
- /* 1050 */ 329, 329, 329, 329, 329, 329, 329, 329, 375, 376,
- /* 1060 */ 377, 373, 372, 368, 367, 369, 370, 371, 378, 379,
- /* 1070 */ 329, 329, 329, 50, 47, 48, 44, 10, 13, 305,
- /* 1080 */ 306, 12, 11, 340, 341, 40, 20, 329, 329, 329,
- /* 1090 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 375,
- /* 1100 */ 376, 377, 373, 372, 368, 367, 369, 370, 371, 378,
- /* 1110 */ 379, 329, 329, 329, 329, 329, 42, 329, 145, 211,
- /* 1120 */ 329, 329, 6, 108, 329, 279, 329, 312, 134, 329,
- /* 1130 */ 329, 150, 249, 329, 231, 135, 235, 41, 39, 329,
- /* 1140 */ 329, 52, 329, 43, 311, 329, 312, 232, 294, 303,
- /* 1150 */ 147, 313, 329, 170, 135, 329, 51, 49, 331, 237,
- /* 1160 */ 296, 329, 325, 106, 1, 278, 232, 294, 303, 329,
- /* 1170 */ 313, 155, 329, 42, 318, 145, 216, 329, 96, 6,
- /* 1180 */ 108, 18, 329, 226, 317, 134, 329, 313, 329, 249,
- /* 1190 */ 329, 231, 329, 235, 41, 39, 256, 329, 52, 329,
- /* 1200 */ 43, 329, 312, 329, 329, 329, 141, 329, 329, 66,
- /* 1210 */ 119, 238, 329, 51, 49, 331, 237, 296, 315, 386,
- /* 1220 */ 106, 1, 232, 294, 303, 329, 313, 270, 329, 329,
- /* 1230 */ 42, 329, 140, 92, 329, 96, 6, 108, 18, 41,
- /* 1240 */ 169, 317, 134, 329, 273, 43, 249, 329, 231, 325,
- /* 1250 */ 235, 41, 39, 244, 329, 52, 41, 43, 329, 312,
- /* 1260 */ 329, 318, 43, 141, 329, 329, 67, 135, 225, 329,
- /* 1270 */ 51, 49, 331, 237, 296, 315, 386, 106, 1, 224,
- /* 1280 */ 294, 303, 329, 313, 310, 329, 329, 42, 329, 145,
- /* 1290 */ 213, 329, 96, 6, 108, 329, 41, 329, 329, 134,
- /* 1300 */ 329, 323, 43, 249, 329, 231, 329, 235, 329, 39,
- /* 1310 */ 329, 329, 52, 41, 329, 329, 312, 329, 329, 43,
- /* 1320 */ 141, 46, 329, 86, 135, 329, 329, 51, 49, 331,
- /* 1330 */ 237, 296, 315, 386, 106, 1, 232, 294, 303, 329,
- /* 1340 */ 313, 274, 329, 329, 42, 329, 142, 216, 329, 96,
- /* 1350 */ 6, 108, 329, 41, 329, 329, 134, 329, 348, 43,
- /* 1360 */ 249, 329, 231, 329, 235, 329, 7, 329, 329, 52,
- /* 1370 */ 41, 329, 329, 312, 329, 329, 43, 141, 329, 329,
- /* 1380 */ 90, 135, 329, 329, 51, 49, 331, 237, 296, 315,
- /* 1390 */ 386, 106, 1, 232, 294, 303, 329, 313, 295, 329,
- /* 1400 */ 329, 42, 329, 138, 216, 329, 96, 6, 108, 329,
- /* 1410 */ 41, 329, 329, 134, 329, 322, 43, 249, 329, 231,
- /* 1420 */ 329, 235, 329, 39, 329, 329, 52, 41, 329, 329,
- /* 1430 */ 312, 329, 329, 43, 141, 329, 329, 87, 135, 329,
- /* 1440 */ 329, 51, 49, 331, 237, 296, 315, 386, 106, 1,
- /* 1450 */ 232, 294, 303, 329, 313, 384, 329, 329, 42, 329,
- /* 1460 */ 131, 216, 329, 96, 6, 108, 329, 41, 329, 329,
- /* 1470 */ 134, 329, 380, 43, 249, 329, 231, 329, 235, 329,
- /* 1480 */ 15, 329, 329, 52, 41, 329, 329, 312, 329, 329,
- /* 1490 */ 43, 141, 329, 329, 79, 135, 329, 329, 51, 49,
- /* 1500 */ 331, 237, 296, 315, 386, 106, 1, 232, 294, 303,
- /* 1510 */ 329, 313, 272, 329, 329, 42, 329, 145, 210, 329,
- /* 1520 */ 96, 6, 108, 329, 41, 329, 329, 134, 329, 349,
- /* 1530 */ 43, 249, 329, 231, 329, 221, 329, 39, 329, 329,
- /* 1540 */ 52, 41, 329, 329, 312, 329, 329, 43, 141, 329,
- /* 1550 */ 329, 70, 135, 329, 329, 51, 49, 331, 237, 296,
- /* 1560 */ 315, 386, 106, 1, 232, 294, 303, 329, 313, 324,
- /* 1570 */ 329, 329, 42, 329, 145, 209, 329, 96, 6, 108,
- /* 1580 */ 329, 41, 329, 329, 134, 329, 326, 43, 249, 329,
- /* 1590 */ 231, 329, 235, 329, 39, 329, 329, 52, 41, 329,
- /* 1600 */ 329, 312, 329, 329, 43, 141, 329, 329, 74, 135,
- /* 1610 */ 329, 329, 51, 49, 331, 237, 296, 315, 386, 106,
- /* 1620 */ 1, 232, 294, 303, 329, 313, 262, 329, 329, 42,
- /* 1630 */ 329, 131, 214, 329, 96, 6, 108, 329, 41, 329,
- /* 1640 */ 329, 134, 329, 327, 43, 249, 329, 231, 329, 235,
- /* 1650 */ 329, 15, 329, 329, 52, 41, 329, 329, 312, 329,
- /* 1660 */ 329, 43, 141, 329, 329, 53, 135, 329, 329, 51,
- /* 1670 */ 49, 331, 237, 296, 315, 386, 106, 329, 232, 294,
- /* 1680 */ 303, 329, 313, 286, 329, 329, 42, 329, 131, 216,
- /* 1690 */ 329, 96, 6, 108, 329, 41, 329, 329, 134, 329,
- /* 1700 */ 343, 43, 249, 329, 231, 329, 235, 329, 15, 329,
- /* 1710 */ 329, 52, 41, 329, 329, 312, 329, 329, 43, 118,
- /* 1720 */ 329, 329, 76, 135, 329, 329, 51, 49, 331, 237,
- /* 1730 */ 296, 315, 386, 106, 329, 232, 294, 303, 329, 313,
- /* 1740 */ 329, 329, 329, 329, 504, 329, 329, 329, 96, 329,
- /* 1750 */ 357, 504, 329, 504, 504, 364, 504, 504, 329, 329,
- /* 1760 */ 329, 35, 504, 329, 504, 2, 504, 6, 108, 329,
- /* 1770 */ 198, 174, 329, 134, 329, 329, 329, 249, 329, 231,
- /* 1780 */ 325, 504, 329, 21, 9, 329, 329, 329, 144, 329,
- /* 1790 */ 329, 329, 504, 329, 312, 99, 179, 206, 141, 329,
- /* 1800 */ 329, 58, 135, 329, 329, 325, 504, 329, 21, 9,
- /* 1810 */ 315, 386, 329, 312, 232, 294, 303, 141, 313, 329,
- /* 1820 */ 71, 135, 206, 344, 37, 362, 329, 329, 329, 315,
- /* 1830 */ 386, 329, 329, 232, 294, 303, 312, 313, 329, 329,
- /* 1840 */ 141, 329, 329, 72, 135, 329, 329, 312, 329, 329,
- /* 1850 */ 329, 141, 315, 386, 65, 135, 232, 294, 303, 329,
- /* 1860 */ 313, 329, 329, 315, 386, 329, 329, 232, 294, 303,
- /* 1870 */ 329, 313, 329, 329, 312, 198, 167, 329, 141, 329,
- /* 1880 */ 329, 69, 135, 329, 329, 325, 329, 329, 21, 9,
- /* 1890 */ 315, 386, 329, 329, 232, 294, 303, 312, 313, 329,
- /* 1900 */ 329, 141, 206, 329, 85, 135, 329, 312, 329, 329,
- /* 1910 */ 329, 149, 329, 315, 386, 135, 312, 232, 294, 303,
- /* 1920 */ 141, 313, 329, 81, 135, 329, 329, 232, 294, 303,
- /* 1930 */ 329, 313, 315, 386, 329, 329, 232, 294, 303, 312,
- /* 1940 */ 313, 329, 329, 141, 329, 329, 82, 135, 329, 329,
- /* 1950 */ 312, 329, 329, 329, 141, 315, 386, 63, 135, 232,
- /* 1960 */ 294, 303, 329, 313, 329, 329, 315, 386, 329, 329,
- /* 1970 */ 232, 294, 303, 329, 313, 329, 312, 329, 329, 329,
- /* 1980 */ 141, 329, 329, 73, 135, 329, 329, 312, 329, 329,
- /* 1990 */ 329, 141, 315, 386, 83, 135, 232, 294, 303, 329,
- /* 2000 */ 313, 329, 329, 315, 386, 329, 312, 232, 294, 303,
- /* 2010 */ 141, 313, 329, 89, 135, 329, 329, 329, 329, 329,
- /* 2020 */ 329, 329, 315, 386, 329, 312, 232, 294, 303, 111,
- /* 2030 */ 313, 329, 68, 135, 329, 329, 312, 329, 329, 329,
- /* 2040 */ 141, 315, 386, 62, 135, 232, 294, 303, 329, 313,
- /* 2050 */ 329, 329, 315, 386, 329, 329, 232, 294, 303, 329,
- /* 2060 */ 313, 329, 312, 329, 329, 329, 141, 329, 329, 61,
- /* 2070 */ 135, 329, 329, 312, 329, 329, 329, 141, 315, 386,
- /* 2080 */ 91, 135, 232, 294, 303, 329, 313, 329, 329, 315,
- /* 2090 */ 386, 329, 312, 232, 294, 303, 141, 313, 329, 78,
- /* 2100 */ 135, 329, 329, 329, 329, 329, 329, 329, 315, 386,
- /* 2110 */ 329, 312, 232, 294, 303, 141, 313, 329, 66, 135,
- /* 2120 */ 329, 329, 312, 329, 329, 329, 141, 315, 386, 80,
- /* 2130 */ 135, 232, 294, 303, 329, 313, 329, 329, 315, 386,
- /* 2140 */ 329, 329, 232, 294, 303, 329, 313, 329, 312, 329,
- /* 2150 */ 329, 329, 113, 329, 329, 88, 135, 329, 329, 312,
- /* 2160 */ 329, 329, 329, 112, 315, 386, 84, 135, 232, 294,
- /* 2170 */ 303, 329, 313, 329, 329, 315, 386, 329, 312, 232,
- /* 2180 */ 294, 303, 141, 313, 329, 57, 135, 329, 329, 329,
- /* 2190 */ 329, 329, 329, 329, 315, 386, 329, 312, 232, 294,
- /* 2200 */ 303, 93, 313, 329, 59, 121, 329, 329, 312, 329,
- /* 2210 */ 329, 329, 141, 315, 386, 75, 135, 232, 294, 303,
- /* 2220 */ 329, 313, 329, 329, 315, 386, 329, 329, 232, 294,
- /* 2230 */ 303, 329, 313, 329, 312, 329, 329, 329, 141, 329,
- /* 2240 */ 329, 60, 135, 329, 329, 312, 329, 329, 329, 141,
- /* 2250 */ 315, 386, 64, 135, 232, 294, 303, 329, 313, 329,
- /* 2260 */ 329, 315, 386, 329, 312, 232, 294, 303, 120, 313,
- /* 2270 */ 329, 55, 135, 329, 329, 329, 329, 329, 329, 329,
- /* 2280 */ 315, 386, 329, 312, 232, 294, 303, 93, 313, 329,
- /* 2290 */ 56, 121, 225, 329, 312, 329, 198, 164, 157, 315,
- /* 2300 */ 386, 329, 135, 219, 294, 303, 325, 313, 352, 21,
- /* 2310 */ 9, 287, 234, 329, 232, 294, 303, 329, 313, 329,
- /* 2320 */ 41, 329, 329, 206, 312, 329, 43, 329, 151, 2,
- /* 2330 */ 329, 329, 135, 329, 329, 329, 329, 329, 329, 329,
- /* 2340 */ 198, 168, 329, 329, 232, 294, 303, 329, 313, 329,
- /* 2350 */ 325, 329, 144, 21, 9, 198, 171, 329, 329, 329,
- /* 2360 */ 329, 329, 329, 329, 329, 325, 329, 206, 21, 9,
- /* 2370 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
- /* 2380 */ 329, 329, 206,
- );
- static public $yy_lookahead = array(
- /* 0 */ 1, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- /* 10 */ 12, 13, 16, 98, 16, 19, 17, 17, 113, 114,
- /* 20 */ 22, 23, 16, 97, 18, 19, 28, 112, 29, 29,
- /* 30 */ 32, 33, 34, 16, 35, 35, 19, 20, 112, 40,
- /* 40 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- /* 50 */ 51, 52, 53, 4, 5, 6, 7, 8, 62, 93,
- /* 60 */ 94, 95, 13, 14, 15, 66, 67, 68, 69, 70,
- /* 70 */ 71, 72, 73, 74, 75, 76, 77, 1, 85, 62,
- /* 80 */ 1, 1, 89, 38, 117, 92, 93, 82, 83, 84,
- /* 90 */ 85, 86, 38, 17, 101, 102, 17, 17, 105, 106,
- /* 100 */ 107, 86, 109, 88, 59, 29, 61, 1, 29, 30,
- /* 110 */ 65, 35, 119, 120, 35, 61, 40, 41, 42, 43,
- /* 120 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- /* 130 */ 90, 91, 59, 54, 54, 29, 16, 64, 18, 19,
- /* 140 */ 100, 35, 66, 67, 68, 69, 70, 71, 72, 73,
- /* 150 */ 74, 75, 76, 77, 1, 85, 36, 117, 1, 89,
- /* 160 */ 18, 1, 92, 93, 94, 1, 17, 20, 21, 20,
- /* 170 */ 17, 101, 102, 17, 17, 105, 106, 107, 29, 109,
- /* 180 */ 38, 17, 29, 31, 35, 29, 29, 38, 35, 90,
- /* 190 */ 38, 35, 35, 40, 41, 42, 43, 44, 45, 46,
- /* 200 */ 47, 48, 49, 50, 51, 52, 53, 1, 61, 111,
- /* 210 */ 61, 113, 114, 61, 54, 90, 117, 118, 90, 66,
- /* 220 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- /* 230 */ 77, 103, 104, 27, 110, 29, 112, 1, 84, 85,
- /* 240 */ 86, 35, 117, 20, 21, 117, 40, 41, 42, 43,
- /* 250 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- /* 260 */ 1, 91, 16, 59, 25, 19, 20, 31, 64, 16,
- /* 270 */ 100, 25, 66, 67, 68, 69, 70, 71, 72, 73,
- /* 280 */ 74, 75, 76, 77, 61, 85, 85, 117, 29, 37,
- /* 290 */ 54, 38, 18, 19, 35, 37, 110, 39, 112, 40,
- /* 300 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- /* 310 */ 51, 52, 53, 1, 90, 91, 16, 65, 79, 19,
- /* 320 */ 20, 121, 122, 122, 100, 66, 67, 68, 69, 70,
- /* 330 */ 71, 72, 73, 74, 75, 76, 77, 63, 24, 91,
- /* 340 */ 37, 117, 39, 37, 16, 39, 90, 19, 100, 2,
- /* 350 */ 19, 37, 40, 41, 42, 43, 44, 45, 46, 47,
- /* 360 */ 48, 49, 50, 51, 52, 53, 1, 90, 91, 16,
- /* 370 */ 29, 19, 19, 117, 93, 94, 35, 100, 66, 67,
- /* 380 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- /* 390 */ 62, 79, 96, 62, 117, 17, 16, 18, 19, 19,
- /* 400 */ 93, 94, 19, 25, 39, 40, 41, 42, 43, 44,
- /* 410 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 1,
- /* 420 */ 91, 91, 90, 16, 16, 16, 19, 19, 19, 100,
- /* 430 */ 100, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- /* 440 */ 75, 76, 77, 108, 29, 91, 117, 117, 30, 117,
- /* 450 */ 115, 29, 113, 114, 100, 20, 96, 35, 40, 41,
- /* 460 */ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- /* 470 */ 52, 53, 91, 1, 118, 99, 18, 26, 110, 20,
- /* 480 */ 2, 100, 97, 1, 66, 67, 68, 69, 70, 71,
- /* 490 */ 72, 73, 74, 75, 76, 77, 1, 112, 117, 17,
- /* 500 */ 1, 2, 85, 99, 19, 110, 89, 10, 16, 19,
- /* 510 */ 93, 19, 17, 16, 21, 99, 17, 38, 59, 22,
- /* 520 */ 23, 29, 105, 106, 107, 28, 109, 35, 18, 32,
- /* 530 */ 33, 34, 2, 1, 65, 40, 41, 42, 43, 44,
- /* 540 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 17,
- /* 550 */ 20, 91, 59, 21, 36, 19, 19, 64, 19, 25,
- /* 560 */ 100, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- /* 570 */ 75, 76, 77, 1, 85, 78, 79, 80, 89, 85,
- /* 580 */ 19, 92, 93, 89, 59, 63, 21, 93, 19, 17,
- /* 590 */ 101, 102, 17, 1, 105, 106, 107, 18, 109, 105,
- /* 600 */ 106, 107, 18, 109, 29, 116, 36, 63, 19, 17,
- /* 610 */ 35, 1, 40, 41, 42, 43, 44, 45, 46, 47,
- /* 620 */ 48, 49, 50, 51, 52, 53, 61, 17, 108, 38,
- /* 630 */ 2, 19, 39, 55, 21, 115, 18, 97, 66, 67,
- /* 640 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- /* 650 */ 1, 85, 112, 1, 100, 89, 85, 115, 92, 93,
- /* 660 */ 89, 110, 112, 111, 93, 91, 17, 101, 102, 17,
- /* 670 */ 97, 105, 106, 107, 100, 109, 105, 106, 107, 14,
- /* 680 */ 109, 29, 116, 87, 123, 112, 112, 35, 123, 40,
- /* 690 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- /* 700 */ 51, 52, 53, 1, 2, 110, 54, 110, 114, 110,
- /* 710 */ 123, 123, 97, 97, 97, 66, 67, 68, 69, 70,
- /* 720 */ 71, 72, 73, 74, 75, 76, 77, 112, 112, 112,
- /* 730 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
- /* 740 */ 123, 123, 40, 41, 42, 43, 44, 45, 46, 47,
- /* 750 */ 48, 49, 50, 51, 52, 53, 1, 123, 123, 123,
- /* 760 */ 123, 123, 123, 123, 123, 97, 97, 97, 66, 67,
- /* 770 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- /* 780 */ 112, 112, 112, 123, 123, 123, 123, 123, 123, 123,
- /* 790 */ 123, 123, 123, 123, 39, 40, 41, 42, 43, 44,
- /* 800 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 123,
- /* 810 */ 1, 123, 123, 123, 123, 123, 123, 123, 123, 123,
- /* 820 */ 123, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- /* 830 */ 75, 76, 77, 24, 123, 123, 123, 123, 123, 123,
- /* 840 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 40,
- /* 850 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- /* 860 */ 51, 52, 53, 1, 123, 123, 123, 123, 123, 123,
- /* 870 */ 123, 123, 123, 123, 123, 66, 67, 68, 69, 70,
- /* 880 */ 71, 72, 73, 74, 75, 76, 77, 123, 123, 123,
- /* 890 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
- /* 900 */ 123, 123, 40, 41, 42, 43, 44, 45, 46, 47,
- /* 910 */ 48, 49, 50, 51, 52, 53, 123, 123, 123, 123,
- /* 920 */ 123, 123, 123, 123, 123, 123, 123, 65, 66, 67,
- /* 930 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- /* 940 */ 1, 85, 123, 1, 123, 89, 85, 123, 92, 93,
- /* 950 */ 89, 123, 123, 123, 93, 91, 17, 101, 102, 17,
- /* 960 */ 123, 105, 106, 107, 100, 109, 105, 106, 107, 123,
- /* 970 */ 109, 29, 116, 123, 123, 123, 112, 35, 123, 40,
- /* 980 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- /* 990 */ 51, 52, 53, 1, 123, 123, 54, 123, 123, 123,
- /* 1000 */ 123, 123, 123, 123, 123, 66, 67, 68, 69, 70,
- /* 1010 */ 71, 72, 73, 74, 75, 76, 77, 123, 123, 123,
- /* 1020 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
- /* 1030 */ 123, 123, 40, 41, 42, 43, 44, 45, 46, 47,
- /* 1040 */ 48, 49, 50, 51, 52, 53, 123, 123, 123, 123,
- /* 1050 */ 123, 123, 123, 123, 123, 123, 123, 123, 66, 67,
- /* 1060 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- /* 1070 */ 123, 123, 123, 40, 41, 42, 43, 44, 45, 46,
- /* 1080 */ 47, 48, 49, 50, 51, 52, 53, 123, 123, 123,
- /* 1090 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 66,
- /* 1100 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- /* 1110 */ 77, 123, 123, 123, 123, 123, 16, 123, 18, 19,
- /* 1120 */ 123, 123, 22, 23, 123, 17, 123, 85, 28, 123,
- /* 1130 */ 123, 89, 32, 33, 34, 93, 36, 29, 38, 123,
- /* 1140 */ 123, 41, 123, 35, 102, 123, 85, 105, 106, 107,
- /* 1150 */ 89, 109, 123, 91, 93, 123, 56, 57, 58, 59,
- /* 1160 */ 60, 123, 100, 63, 64, 65, 105, 106, 107, 123,
- /* 1170 */ 109, 93, 123, 16, 112, 18, 19, 123, 78, 22,
- /* 1180 */ 23, 16, 123, 105, 19, 28, 123, 109, 123, 32,
- /* 1190 */ 33, 34, 123, 36, 29, 38, 31, 123, 41, 123,
- /* 1200 */ 35, 123, 85, 123, 123, 123, 89, 123, 123, 92,
- /* 1210 */ 93, 94, 123, 56, 57, 58, 59, 60, 101, 102,
- /* 1220 */ 63, 64, 105, 106, 107, 123, 109, 17, 123, 123,
- /* 1230 */ 16, 123, 18, 19, 123, 78, 22, 23, 16, 29,
- /* 1240 */ 91, 19, 28, 123, 17, 35, 32, 33, 34, 100,
- /* 1250 */ 36, 29, 38, 31, 123, 41, 29, 35, 123, 85,
- /* 1260 */ 123, 112, 35, 89, 123, 123, 92, 93, 1, 123,
- /* 1270 */ 56, 57, 58, 59, 60, 101, 102, 63, 64, 105,
- /* 1280 */ 106, 107, 123, 109, 17, 123, 123, 16, 123, 18,
- /* 1290 */ 19, 123, 78, 22, 23, 123, 29, 123, 123, 28,
- /* 1300 */ 123, 17, 35, 32, 33, 34, 123, 36, 123, 38,
- /* 1310 */ 123, 123, 41, 29, 123, 123, 85, 123, 123, 35,
- /* 1320 */ 89, 54, 123, 92, 93, 123, 123, 56, 57, 58,
- /* 1330 */ 59, 60, 101, 102, 63, 64, 105, 106, 107, 123,
- /* 1340 */ 109, 17, 123, 123, 16, 123, 18, 19, 123, 78,
- /* 1350 */ 22, 23, 123, 29, 123, 123, 28, 123, 17, 35,
- /* 1360 */ 32, 33, 34, 123, 36, 123, 38, 123, 123, 41,
- /* 1370 */ 29, 123, 123, 85, 123, 123, 35, 89, 123, 123,
- /* 1380 */ 92, 93, 123, 123, 56, 57, 58, 59, 60, 101,
- /* 1390 */ 102, 63, 64, 105, 106, 107, 123, 109, 17, 123,
- /* 1400 */ 123, 16, 123, 18, 19, 123, 78, 22, 23, 123,
- /* 1410 */ 29, 123, 123, 28, 123, 17, 35, 32, 33, 34,
- /* 1420 */ 123, 36, 123, 38, 123, 123, 41, 29, 123, 123,
- /* 1430 */ 85, 123, 123, 35, 89, 123, 123, 92, 93, 123,
- /* 1440 */ 123, 56, 57, 58, 59, 60, 101, 102, 63, 64,
- /* 1450 */ 105, 106, 107, 123, 109, 17, 123, 123, 16, 123,
- /* 1460 */ 18, 19, 123, 78, 22, 23, 123, 29, 123, 123,
- /* 1470 */ 28, 123, 17, 35, 32, 33, 34, 123, 36, 123,
- /* 1480 */ 38, 123, 123, 41, 29, 123, 123, 85, 123, 123,
- /* 1490 */ 35, 89, 123, 123, 92, 93, 123, 123, 56, 57,
- /* 1500 */ 58, 59, 60, 101, 102, 63, 64, 105, 106, 107,
- /* 1510 */ 123, 109, 17, 123, 123, 16, 123, 18, 19, 123,
- /* 1520 */ 78, 22, 23, 123, 29, 123, 123, 28, 123, 17,
- /* 1530 */ 35, 32, 33, 34, 123, 36, 123, 38, 123, 123,
- /* 1540 */ 41, 29, 123, 123, 85, 123, 123, 35, 89, 123,
- /* 1550 */ 123, 92, 93, 123, 123, 56, 57, 58, 59, 60,
- /* 1560 */ 101, 102, 63, 64, 105, 106, 107, 123, 109, 17,
- /* 1570 */ 123, 123, 16, 123, 18, 19, 123, 78, 22, 23,
- /* 1580 */ 123, 29, 123, 123, 28, 123, 17, 35, 32, 33,
- /* 1590 */ 34, 123, 36, 123, 38, 123, 123, 41, 29, 123,
- /* 1600 */ 123, 85, 123, 123, 35, 89, 123, 123, 92, 93,
- /* 1610 */ 123, 123, 56, 57, 58, 59, 60, 101, 102, 63,
- /* 1620 */ 64, 105, 106, 107, 123, 109, 17, 123, 123, 16,
- /* 1630 */ 123, 18, 19, 123, 78, 22, 23, 123, 29, 123,
- /* 1640 */ 123, 28, 123, 17, 35, 32, 33, 34, 123, 36,
- /* 1650 */ 123, 38, 123, 123, 41, 29, 123, 123, 85, 123,
- /* 1660 */ 123, 35, 89, 123, 123, 92, 93, 123, 123, 56,
- /* 1670 */ 57, 58, 59, 60, 101, 102, 63, 123, 105, 106,
- /* 1680 */ 107, 123, 109, 17, 123, 123, 16, 123, 18, 19,
- /* 1690 */ 123, 78, 22, 23, 123, 29, 123, 123, 28, 123,
- /* 1700 */ 17, 35, 32, 33, 34, 123, 36, 123, 38, 123,
- /* 1710 */ 123, 41, 29, 123, 123, 85, 123, 123, 35, 89,
- /* 1720 */ 123, 123, 92, 93, 123, 123, 56, 57, 58, 59,
- /* 1730 */ 60, 101, 102, 63, 123, 105, 106, 107, 123, 109,
- /* 1740 */ 123, 123, 123, 123, 17, 123, 123, 123, 78, 123,
- /* 1750 */ 120, 24, 123, 26, 27, 10, 29, 30, 123, 123,
- /* 1760 */ 123, 16, 35, 123, 37, 38, 39, 22, 23, 123,
- /* 1770 */ 90, 91, 123, 28, 123, 123, 123, 32, 33, 34,
- /* 1780 */ 100, 54, 123, 103, 104, 123, 123, 123, 61, 123,
- /* 1790 */ 123, 123, 65, 123, 85, 90, 91, 117, 89, 123,
- /* 1800 */ 123, 92, 93, 123, 123, 100, 79, 123, 103, 104,
- /* 1810 */ 101, 102, 123, 85, 105, 106, 107, 89, 109, 123,
- /* 1820 */ 92, 93, 117, 78, 79, 80, 123, 123, 123, 101,
- /* 1830 */ 102, 123, 123, 105, 106, 107, 85, 109, 123, 123,
- /* 1840 */ 89, 123, 123, 92, 93, 123, 123, 85, 123, 123,
- /* 1850 */ 123, 89, 101, 102, 92, 93, 105, 106, 107, 123,
- /* 1860 */ 109, 123, 123, 101, 102, 123, 123, 105, 106, 107,
- /* 1870 */ 123, 109, 123, 123, 85, 90, 91, 123, 89, 123,
- /* 1880 */ 123, 92, 93, 123, 123, 100, 123, 123, 103, 104,
- /* 1890 */ 101, 102, 123, 123, 105, 106, 107, 85, 109, 123,
- /* 1900 */ 123, 89, 117, 123, 92, 93, 123, 85, 123, 123,
- /* 1910 */ 123, 89, 123, 101, 102, 93, 85, 105, 106, 107,
- /* 1920 */ 89, 109, 123, 92, 93, 123, 123, 105, 106, 107,
- /* 1930 */ 123, 109, 101, 102, 123, 123, 105, 106, 107, 85,
- /* 1940 */ 109, 123, 123, 89, 123, 123, 92, 93, 123, 123,
- /* 1950 */ 85, 123, 123, 123, 89, 101, 102, 92, 93, 105,
- /* 1960 */ 106, 107, 123, 109, 123, 123, 101, 102, 123, 123,
- /* 1970 */ 105, 106, 107, 123, 109, 123, 85, 123, 123, 123,
- /* 1980 */ 89, 123, 123, 92, 93, 123, 123, 85, 123, 123,
- /* 1990 */ 123, 89, 101, 102, 92, 93, 105, 106, 107, 123,
- /* 2000 */ 109, 123, 123, 101, 102, 123, 85, 105, 106, 107,
- /* 2010 */ 89, 109, 123, 92, 93, 123, 123, 123, 123, 123,
- /* 2020 */ 123, 123, 101, 102, 123, 85, 105, 106, 107, 89,
- /* 2030 */ 109, 123, 92, 93, 123, 123, 85, 123, 123, 123,
- /* 2040 */ 89, 101, 102, 92, 93, 105, 106, 107, 123, 109,
- /* 2050 */ 123, 123, 101, 102, 123, 123, 105, 106, 107, 123,
- /* 2060 */ 109, 123, 85, 123, 123, 123, 89, 123, 123, 92,
- /* 2070 */ 93, 123, 123, 85, 123, 123, 123, 89, 101, 102,
- /* 2080 */ 92, 93, 105, 106, 107, 123, 109, 123, 123, 101,
- /* 2090 */ 102, 123, 85, 105, 106, 107, 89, 109, 123, 92,
- /* 2100 */ 93, 123, 123, 123, 123, 123, 123, 123, 101, 102,
- /* 2110 */ 123, 85, 105, 106, 107, 89, 109, 123, 92, 93,
- /* 2120 */ 123, 123, 85, 123, 123, 123, 89, 101, 102, 92,
- /* 2130 */ 93, 105, 106, 107, 123, 109, 123, 123, 101, 102,
- /* 2140 */ 123, 123, 105, 106, 107, 123, 109, 123, 85, 123,
- /* 2150 */ 123, 123, 89, 123, 123, 92, 93, 123, 123, 85,
- /* 2160 */ 123, 123, 123, 89, 101, 102, 92, 93, 105, 106,
- /* 2170 */ 107, 123, 109, 123, 123, 101, 102, 123, 85, 105,
- /* 2180 */ 106, 107, 89, 109, 123, 92, 93, 123, 123, 123,
- /* 2190 */ 123, 123, 123, 123, 101, 102, 123, 85, 105, 106,
- /* 2200 */ 107, 89, 109, 123, 92, 93, 123, 123, 85, 123,
- /* 2210 */ 123, 123, 89, 101, 102, 92, 93, 105, 106, 107,
- /* 2220 */ 123, 109, 123, 123, 101, 102, 123, 123, 105, 106,
- /* 2230 */ 107, 123, 109, 123, 85, 123, 123, 123, 89, 123,
- /* 2240 */ 123, 92, 93, 123, 123, 85, 123, 123, 123, 89,
- /* 2250 */ 101, 102, 92, 93, 105, 106, 107, 123, 109, 123,
- /* 2260 */ 123, 101, 102, 123, 85, 105, 106, 107, 89, 109,
- /* 2270 */ 123, 92, 93, 123, 123, 123, 123, 123, 123, 123,
- /* 2280 */ 101, 102, 123, 85, 105, 106, 107, 89, 109, 123,
- /* 2290 */ 92, 93, 1, 123, 85, 123, 90, 91, 89, 101,
- /* 2300 */ 102, 123, 93, 105, 106, 107, 100, 109, 17, 103,
- /* 2310 */ 104, 102, 21, 123, 105, 106, 107, 123, 109, 123,
- /* 2320 */ 29, 123, 123, 117, 85, 123, 35, 123, 89, 38,
- /* 2330 */ 123, 123, 93, 123, 123, 123, 123, 123, 123, 123,
- /* 2340 */ 90, 91, 123, 123, 105, 106, 107, 123, 109, 123,
- /* 2350 */ 100, 123, 61, 103, 104, 90, 91, 123, 123, 123,
- /* 2360 */ 123, 123, 123, 123, 123, 100, 123, 117, 103, 104,
- /* 2370 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
- /* 2380 */ 123, 123, 117,
-);
- const YY_SHIFT_USE_DFLT = -5;
- const YY_SHIFT_MAX = 256;
- static public $yy_shift_ofst = array(
- /* 0 */ -2, 1271, 1157, 1157, 1271, 1157, 1328, 1328, 1100, 1157,
- /* 10 */ 1157, 1157, 1157, 1157, 1157, 1157, 1499, 1157, 1157, 1157,
- /* 20 */ 1157, 1157, 1556, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
- /* 30 */ 1157, 1157, 1157, 1157, 1385, 1214, 1157, 1157, 1157, 1157,
- /* 40 */ 1157, 1499, 1214, 1157, 1442, 1442, 1613, 1670, 1670, 1670,
- /* 50 */ 1670, 1670, 1670, 206, 153, 76, -1, 259, 259, 259,
- /* 60 */ 809, 939, 755, 862, 702, 649, 365, 312, 418, 495,
- /* 70 */ 572, 992, 992, 992, 992, 992, 992, 992, 992, 992,
- /* 80 */ 992, 992, 992, 992, 992, 992, 992, 992, 992, 992,
- /* 90 */ 1033, 1033, 2291, 1267, 106, -2, 1745, 1222, 1165, 157,
- /* 100 */ 157, 492, 492, 499, 106, 106, 274, 493, 142, 497,
- /* 110 */ 49, 79, 942, 652, 246, 17, 328, 300, 236, 223,
- /* 120 */ 80, 147, 532, 1227, 353, 353, 353, 422, 407, 142,
- /* 130 */ 353, 353, 610, 353, 341, 565, 379, 353, 380, 142,
- /* 140 */ 408, 160, 409, 353, 379, 409, 353, 472, 613, 472,
- /* 150 */ 472, 472, 472, 472, 472, 613, 472, -5, 1284, 1210,
- /* 160 */ -4, 1108, 0, 156, 575, 1683, 1552, 1512, 1569, 1609,
- /* 170 */ 1666, 1324, 1626, 6, 1495, 1398, 1381, 1341, 1438, 1455,
- /* 180 */ 73, 482, 73, 204, 592, 204, 204, 204, 164, 204,
- /* 190 */ 253, 204, 204, 665, 613, 613, 613, 479, 472, 347,
- /* 200 */ 415, 415, 472, 347, -5, -5, -5, -5, -5, 1727,
- /* 210 */ 149, 45, 120, 152, 54, 530, 54, 314, 252, 378,
- /* 220 */ 306, 459, 258, 303, 239, 331, 522, 536, 469, 537,
- /* 230 */ 539, 569, 534, 544, 561, 525, 518, 570, 593, 612,
- /* 240 */ 578, 628, 591, 579, 510, 584, 589, 458, 435, 352,
- /* 250 */ 485, 478, 451, 479, 490, 383, 618,
-);
- const YY_REDUCE_USE_DFLT = -96;
- const YY_REDUCE_MAX = 208;
- static public $yy_reduce_ofst = array(
- /* 0 */ 5, -7, 489, 566, 1630, 856, 70, 1117, 1865, 1854,
- /* 10 */ 1831, 1812, 1891, 1902, 1977, 1951, 1940, 1921, 1789, 1762,
- /* 20 */ 1402, 1345, 1288, 1231, 1459, 1516, 1751, 1728, 1709, 1573,
- /* 30 */ 1988, 2007, 2123, 2149, 2160, 2198, 2179, 1174, 2093, 2026,
- /* 40 */ 2037, 2063, 2112, 2074, 1042, 2209, 1822, 2239, 1061, 861,
- /* 50 */ 494, 417, 571, 2265, 2250, 2206, 1705, 1785, 1680, 1705,
- /* 60 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- /* 70 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- /* 80 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- /* 90 */ 128, 128, 277, 224, 40, 154, 200, 864, 1062, 170,
- /* 100 */ 330, 574, 1149, 99, 329, 381, 1078, 98, -34, 201,
- /* 110 */ 15, 125, 125, 125, -85, 124, 124, 124, 125, -95,
- /* 120 */ 125, -95, 332, 354, 573, 616, 617, 460, 615, 307,
- /* 130 */ 385, 540, 256, -74, 248, -95, 335, 668, 540, 281,
- /* 140 */ 540, 125, 670, 669, 520, 540, 186, 125, 339, 125,
- /* 150 */ 125, 125, 125, 125, 125, -95, 125, 125, 554, 554,
- /* 160 */ 550, 554, 554, 554, 554, 554, 554, 554, 554, 554,
- /* 170 */ 554, 554, 554, 542, 554, 554, 554, 554, 554, 554,
- /* 180 */ 595, -33, 551, 552, -33, 552, 552, 552, -33, 552,
- /* 190 */ 597, 552, 552, 596, 594, 594, 594, 599, -33, 356,
- /* 200 */ 296, 360, -33, 356, 395, 404, 376, 416, 368,
-);
- static public $yyExpectedTokens = array(
- /* 0 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 22, 23, 28, 32, 33, 34, ),
- /* 1 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 2 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 3 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 4 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 5 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 6 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 7 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 8 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 65, 78, ),
- /* 9 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 10 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 11 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 12 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 13 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 14 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 15 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 16 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 17 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 18 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 19 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 20 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 21 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 22 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 23 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 24 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 25 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 26 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 27 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 28 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 29 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 30 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 31 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 32 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 33 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 34 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 35 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 36 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 37 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 38 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 39 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 40 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 41 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 42 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 43 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 44 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 45 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
- /* 46 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 47 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 48 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 49 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 50 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 51 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 52 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
- /* 53 */ array(1, 27, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 54 */ array(1, 17, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 55 */ array(1, 17, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 56 */ array(1, 17, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 57 */ array(1, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 58 */ array(1, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 59 */ array(1, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 60 */ array(1, 24, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 61 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 62 */ array(1, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 63 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 64 */ array(1, 2, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 65 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 66 */ array(1, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 67 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, ),
- /* 68 */ array(1, 30, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 69 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 70 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 71 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 72 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 73 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 74 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 75 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 76 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 77 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 78 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 79 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 80 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 81 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 82 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 83 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 84 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 85 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 86 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 87 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 88 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 89 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 90 */ array(40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 91 */ array(40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
- /* 92 */ array(1, 17, 21, 29, 35, 38, 61, ),
- /* 93 */ array(1, 17, 29, 35, 54, ),
- /* 94 */ array(1, 29, 35, ),
- /* 95 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 22, 23, 28, 32, 33, 34, ),
- /* 96 */ array(10, 16, 22, 23, 28, 32, 33, 34, 78, 79, 80, ),
- /* 97 */ array(16, 19, 29, 31, 35, ),
- /* 98 */ array(16, 19, 29, 31, 35, ),
- /* 99 */ array(1, 17, 29, 35, ),
- /* 100 */ array(1, 17, 29, 35, ),
- /* 101 */ array(16, 19, 29, 35, ),
- /* 102 */ array(16, 19, 29, 35, ),
- /* 103 */ array(1, 2, 17, ),
- /* 104 */ array(1, 29, 35, ),
- /* 105 */ array(1, 29, 35, ),
- /* 106 */ array(18, 19, 63, ),
- /* 107 */ array(21, 59, 64, ),
- /* 108 */ array(18, 38, ),
- /* 109 */ array(10, 16, 22, 23, 28, 32, 33, 34, 78, 79, 80, ),
- /* 110 */ array(4, 5, 6, 7, 8, 13, 14, 15, ),
- /* 111 */ array(1, 17, 29, 30, 35, 54, ),
- /* 112 */ array(1, 17, 29, 35, 54, ),
- /* 113 */ array(1, 17, 29, 35, 54, ),
- /* 114 */ array(16, 19, 20, 25, ),
- /* 115 */ array(16, 19, 20, 62, ),
- /* 116 */ array(16, 19, 62, ),
- /* 117 */ array(16, 19, 20, ),
- /* 118 */ array(1, 31, 54, ),
- /* 119 */ array(20, 21, 61, ),
- /* 120 */ array(1, 17, 54, ),
- /* 121 */ array(20, 21, 61, ),
- /* 122 */ array(1, 17, 21, ),
- /* 123 */ array(17, 29, 35, ),
- /* 124 */ array(16, 19, ),
- /* 125 */ array(16, 19, ),
- /* 126 */ array(16, 19, ),
- /* 127 */ array(29, 35, ),
- /* 128 */ array(16, 19, ),
- /* 129 */ array(18, 38, ),
- /* 130 */ array(16, 19, ),
- /* 131 */ array(16, 19, ),
- /* 132 */ array(1, 17, ),
- /* 133 */ array(16, 19, ),
- /* 134 */ array(29, 35, ),
- /* 135 */ array(21, 61, ),
- /* 136 */ array(18, 19, ),
- /* 137 */ array(16, 19, ),
- /* 138 */ array(16, 19, ),
- /* 139 */ array(18, 38, ),
- /* 140 */ array(16, 19, ),
- /* 141 */ array(1, 54, ),
- /* 142 */ array(16, 19, ),
- /* 143 */ array(16, 19, ),
- /* 144 */ array(18, 19, ),
- /* 145 */ array(16, 19, ),
- /* 146 */ array(16, 19, ),
- /* 147 */ array(1, ),
- /* 148 */ array(21, ),
- /* 149 */ array(1, ),
- /* 150 */ array(1, ),
- /* 151 */ array(1, ),
- /* 152 */ array(1, ),
- /* 153 */ array(1, ),
- /* 154 */ array(1, ),
- /* 155 */ array(21, ),
- /* 156 */ array(1, ),
- /* 157 */ array(),
- /* 158 */ array(17, 29, 35, ),
- /* 159 */ array(17, 29, 35, ),
- /* 160 */ array(16, 19, 62, ),
- /* 161 */ array(17, 29, 35, ),
- /* 162 */ array(17, 29, 35, ),
- /* 163 */ array(17, 29, 35, ),
- /* 164 */ array(17, 29, 35, ),
- /* 165 */ array(17, 29, 35, ),
- /* 166 */ array(17, 29, 35, ),
- /* 167 */ array(17, 29, 35, ),
- /* 168 */ array(17, 29, 35, ),
- /* 169 */ array(17, 29, 35, ),
- /* 170 */ array(17, 29, 35, ),
- /* 171 */ array(17, 29, 35, ),
- /* 172 */ array(17, 29, 35, ),
- /* 173 */ array(16, 18, 19, ),
- /* 174 */ array(17, 29, 35, ),
- /* 175 */ array(17, 29, 35, ),
- /* 176 */ array(17, 29, 35, ),
- /* 177 */ array(17, 29, 35, ),
- /* 178 */ array(17, 29, 35, ),
- /* 179 */ array(17, 29, 35, ),
- /* 180 */ array(59, 64, ),
- /* 181 */ array(1, 17, ),
- /* 182 */ array(59, 64, ),
- /* 183 */ array(59, 64, ),
- /* 184 */ array(1, 17, ),
- /* 185 */ array(59, 64, ),
- /* 186 */ array(59, 64, ),
- /* 187 */ array(59, 64, ),
- /* 188 */ array(1, 17, ),
- /* 189 */ array(59, 64, ),
- /* 190 */ array(16, 38, ),
- /* 191 */ array(59, 64, ),
- /* 192 */ array(59, 64, ),
- /* 193 */ array(14, ),
- /* 194 */ array(21, ),
- /* 195 */ array(21, ),
- /* 196 */ array(21, ),
- /* 197 */ array(38, ),
- /* 198 */ array(1, ),
- /* 199 */ array(2, ),
- /* 200 */ array(29, ),
- /* 201 */ array(29, ),
- /* 202 */ array(1, ),
- /* 203 */ array(2, ),
- /* 204 */ array(),
- /* 205 */ array(),
- /* 206 */ array(),
- /* 207 */ array(),
- /* 208 */ array(),
- /* 209 */ array(17, 24, 26, 27, 29, 30, 35, 37, 38, 39, 54, 61, 65, 79, ),
- /* 210 */ array(17, 20, 29, 35, 38, 61, ),
- /* 211 */ array(38, 59, 61, 65, ),
- /* 212 */ array(16, 18, 19, 36, ),
- /* 213 */ array(31, 38, 61, ),
- /* 214 */ array(38, 61, ),
- /* 215 */ array(2, 20, ),
- /* 216 */ array(38, 61, ),
- /* 217 */ array(24, 37, ),
- /* 218 */ array(37, 65, ),
- /* 219 */ array(17, 25, ),
- /* 220 */ array(37, 39, ),
- /* 221 */ array(20, 59, ),
- /* 222 */ array(37, 39, ),
- /* 223 */ array(37, 39, ),
- /* 224 */ array(25, 79, ),
- /* 225 */ array(19, 62, ),
- /* 226 */ array(63, ),
- /* 227 */ array(19, ),
- /* 228 */ array(65, ),
- /* 229 */ array(19, ),
- /* 230 */ array(19, ),
- /* 231 */ array(19, ),
- /* 232 */ array(25, ),
- /* 233 */ array(63, ),
- /* 234 */ array(19, ),
- /* 235 */ array(59, ),
- /* 236 */ array(36, ),
- /* 237 */ array(36, ),
- /* 238 */ array(39, ),
- /* 239 */ array(19, ),
- /* 240 */ array(55, ),
- /* 241 */ array(2, ),
- /* 242 */ array(38, ),
- /* 243 */ array(18, ),
- /* 244 */ array(18, ),
- /* 245 */ array(18, ),
- /* 246 */ array(19, ),
- /* 247 */ array(18, ),
- /* 248 */ array(20, ),
- /* 249 */ array(19, ),
- /* 250 */ array(19, ),
- /* 251 */ array(2, ),
- /* 252 */ array(26, ),
- /* 253 */ array(38, ),
- /* 254 */ array(19, ),
- /* 255 */ array(19, ),
- /* 256 */ array(18, ),
- /* 257 */ array(),
- /* 258 */ array(),
- /* 259 */ array(),
- /* 260 */ array(),
- /* 261 */ array(),
- /* 262 */ array(),
- /* 263 */ array(),
- /* 264 */ array(),
- /* 265 */ array(),
- /* 266 */ array(),
- /* 267 */ array(),
- /* 268 */ array(),
- /* 269 */ array(),
- /* 270 */ array(),
- /* 271 */ array(),
- /* 272 */ array(),
- /* 273 */ array(),
- /* 274 */ array(),
- /* 275 */ array(),
- /* 276 */ array(),
- /* 277 */ array(),
- /* 278 */ array(),
- /* 279 */ array(),
- /* 280 */ array(),
- /* 281 */ array(),
- /* 282 */ array(),
- /* 283 */ array(),
- /* 284 */ array(),
- /* 285 */ array(),
- /* 286 */ array(),
- /* 287 */ array(),
- /* 288 */ array(),
- /* 289 */ array(),
- /* 290 */ array(),
- /* 291 */ array(),
- /* 292 */ array(),
- /* 293 */ array(),
- /* 294 */ array(),
- /* 295 */ array(),
- /* 296 */ array(),
- /* 297 */ array(),
- /* 298 */ array(),
- /* 299 */ array(),
- /* 300 */ array(),
- /* 301 */ array(),
- /* 302 */ array(),
- /* 303 */ array(),
- /* 304 */ array(),
- /* 305 */ array(),
- /* 306 */ array(),
- /* 307 */ array(),
- /* 308 */ array(),
- /* 309 */ array(),
- /* 310 */ array(),
- /* 311 */ array(),
- /* 312 */ array(),
- /* 313 */ array(),
- /* 314 */ array(),
- /* 315 */ array(),
- /* 316 */ array(),
- /* 317 */ array(),
- /* 318 */ array(),
- /* 319 */ array(),
- /* 320 */ array(),
- /* 321 */ array(),
- /* 322 */ array(),
- /* 323 */ array(),
- /* 324 */ array(),
- /* 325 */ array(),
- /* 326 */ array(),
- /* 327 */ array(),
- /* 328 */ array(),
- /* 329 */ array(),
- /* 330 */ array(),
- /* 331 */ array(),
- /* 332 */ array(),
- /* 333 */ array(),
- /* 334 */ array(),
- /* 335 */ array(),
- /* 336 */ array(),
- /* 337 */ array(),
- /* 338 */ array(),
- /* 339 */ array(),
- /* 340 */ array(),
- /* 341 */ array(),
- /* 342 */ array(),
- /* 343 */ array(),
- /* 344 */ array(),
- /* 345 */ array(),
- /* 346 */ array(),
- /* 347 */ array(),
- /* 348 */ array(),
- /* 349 */ array(),
- /* 350 */ array(),
- /* 351 */ array(),
- /* 352 */ array(),
- /* 353 */ array(),
- /* 354 */ array(),
- /* 355 */ array(),
- /* 356 */ array(),
- /* 357 */ array(),
- /* 358 */ array(),
- /* 359 */ array(),
- /* 360 */ array(),
- /* 361 */ array(),
- /* 362 */ array(),
- /* 363 */ array(),
- /* 364 */ array(),
- /* 365 */ array(),
- /* 366 */ array(),
- /* 367 */ array(),
- /* 368 */ array(),
- /* 369 */ array(),
- /* 370 */ array(),
- /* 371 */ array(),
- /* 372 */ array(),
- /* 373 */ array(),
- /* 374 */ array(),
- /* 375 */ array(),
- /* 376 */ array(),
- /* 377 */ array(),
- /* 378 */ array(),
- /* 379 */ array(),
- /* 380 */ array(),
- /* 381 */ array(),
- /* 382 */ array(),
- /* 383 */ array(),
- /* 384 */ array(),
- /* 385 */ array(),
- /* 386 */ array(),
- /* 387 */ array(),
- /* 388 */ array(),
- /* 389 */ array(),
- /* 390 */ array(),
-);
- static public $yy_default = array(
- /* 0 */ 394, 578, 549, 549, 595, 549, 595, 595, 595, 595,
- /* 10 */ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
- /* 20 */ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
- /* 30 */ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
- /* 40 */ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
- /* 50 */ 595, 595, 595, 455, 595, 595, 595, 455, 455, 455,
- /* 60 */ 595, 595, 595, 595, 595, 595, 595, 595, 460, 595,
- /* 70 */ 595, 466, 465, 484, 547, 579, 581, 548, 580, 489,
- /* 80 */ 488, 480, 479, 481, 457, 485, 462, 476, 460, 437,
- /* 90 */ 492, 493, 504, 468, 455, 391, 595, 455, 455, 475,
- /* 100 */ 512, 455, 455, 595, 455, 455, 595, 561, 595, 595,
- /* 110 */ 595, 468, 468, 468, 595, 522, 522, 522, 468, 513,
- /* 120 */ 468, 513, 595, 595, 595, 595, 595, 455, 595, 595,
- /* 130 */ 595, 595, 595, 595, 455, 513, 595, 595, 595, 595,
- /* 140 */ 595, 468, 595, 595, 595, 595, 522, 473, 558, 491,
- /* 150 */ 478, 472, 497, 495, 496, 513, 471, 556, 595, 595,
- /* 160 */ 523, 595, 595, 595, 595, 595, 595, 595, 595, 595,
- /* 170 */ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
- /* 180 */ 516, 595, 518, 519, 595, 520, 540, 542, 595, 539,
- /* 190 */ 522, 517, 541, 410, 562, 559, 536, 522, 475, 551,
- /* 200 */ 594, 594, 512, 550, 522, 555, 555, 555, 522, 470,
- /* 210 */ 504, 504, 595, 504, 490, 534, 504, 595, 595, 494,
- /* 220 */ 595, 500, 595, 595, 494, 595, 595, 595, 595, 595,
- /* 230 */ 595, 595, 494, 595, 595, 500, 502, 595, 595, 595,
- /* 240 */ 506, 534, 560, 595, 595, 595, 595, 595, 595, 595,
- /* 250 */ 595, 534, 463, 534, 595, 595, 595, 401, 543, 400,
- /* 260 */ 402, 546, 445, 398, 397, 393, 464, 438, 593, 467,
- /* 270 */ 435, 395, 440, 434, 439, 396, 399, 456, 531, 420,
- /* 280 */ 529, 392, 528, 506, 527, 535, 444, 557, 545, 544,
- /* 290 */ 530, 412, 453, 526, 505, 419, 507, 525, 532, 470,
- /* 300 */ 514, 521, 524, 508, 510, 482, 483, 416, 415, 417,
- /* 310 */ 418, 477, 511, 515, 538, 469, 509, 534, 533, 432,
- /* 320 */ 446, 447, 443, 442, 436, 454, 433, 441, 554, 448,
- /* 330 */ 498, 499, 501, 503, 452, 451, 449, 450, 552, 553,
- /* 340 */ 486, 487, 589, 430, 582, 583, 584, 431, 429, 426,
- /* 350 */ 537, 427, 428, 406, 587, 575, 404, 577, 576, 405,
- /* 360 */ 585, 586, 588, 591, 592, 425, 424, 569, 568, 570,
- /* 370 */ 571, 572, 567, 566, 414, 563, 564, 565, 573, 574,
- /* 380 */ 422, 590, 407, 423, 421, 408, 474, 413, 411, 409,
- /* 390 */ 403,
-);
- const YYNOCODE = 124;
- const YYSTACKDEPTH = 100;
- const YYNSTATE = 391;
- const YYNRULE = 204;
- const YYERRORSYMBOL = 81;
+ const TP_VERT = 1;
+
+ const TP_COLON = 2;
+
+ const TP_PHP = 3;
+
+ const TP_NOCACHE = 4;
+
+ const TP_TEXT = 5;
+
+ const TP_STRIPON = 6;
+
+ const TP_STRIPOFF = 7;
+
+ const TP_LITERALSTART = 8;
+
+ const TP_LITERALEND = 9;
+
+ const TP_LITERAL = 10;
+
+ const TP_RDEL = 11;
+
+ const TP_SIMPELOUTPUT = 12;
+
+ const TP_LDEL = 13;
+
+ const TP_DOLLARID = 14;
+
+ const TP_EQUAL = 15;
+
+ const TP_SIMPLETAG = 16;
+
+ const TP_ID = 17;
+
+ const TP_PTR = 18;
+
+ const TP_LDELIF = 19;
+
+ const TP_LDELFOR = 20;
+
+ const TP_SEMICOLON = 21;
+
+ const TP_INCDEC = 22;
+
+ const TP_TO = 23;
+
+ const TP_STEP = 24;
+
+ const TP_LDELFOREACH = 25;
+
+ const TP_SPACE = 26;
+
+ const TP_AS = 27;
+
+ const TP_APTR = 28;
+
+ const TP_LDELSETFILTER = 29;
+
+ const TP_SMARTYBLOCKCHILDPARENT = 30;
+
+ const TP_CLOSETAG = 31;
+
+ const TP_LDELSLASH = 32;
+
+ const TP_ATTR = 33;
+
+ const TP_INTEGER = 34;
+
+ const TP_COMMA = 35;
+
+ const TP_OPENP = 36;
+
+ const TP_CLOSEP = 37;
+
+ const TP_MATH = 38;
+
+ const TP_UNIMATH = 39;
+
+ const TP_ISIN = 40;
+
+ const TP_INSTANCEOF = 41;
+
+ const TP_QMARK = 42;
+
+ const TP_NOT = 43;
+
+ const TP_TYPECAST = 44;
+
+ const TP_HEX = 45;
+
+ const TP_DOT = 46;
+
+ const TP_SINGLEQUOTESTRING = 47;
+
+ const TP_DOUBLECOLON = 48;
+
+ const TP_NAMESPACE = 49;
+
+ const TP_AT = 50;
+
+ const TP_HATCH = 51;
+
+ const TP_OPENB = 52;
+
+ const TP_CLOSEB = 53;
+
+ const TP_DOLLAR = 54;
+
+ const TP_LOGOP = 55;
+
+ const TP_TLOGOP = 56;
+
+ const TP_SINGLECOND = 57;
+
+ const TP_QUOTE = 58;
+
+ const TP_BACKTICK = 59;
+
+ const YY_NO_ACTION = 527;
+
+ const YY_ACCEPT_ACTION = 526;
+
+ const YY_ERROR_ACTION = 525;
+
+ const YY_SZ_ACTTAB = 2021;
+
+ static public $yy_action = array(242, 10, 131, 178, 255, 76, 157, 5, 83, 293, 12, 149, 152, 116, 292, 93, 331, 217,
+ 284, 295, 221, 331, 226, 36, 21, 169, 35, 43, 308, 99, 26, 42, 39, 294, 235, 244,
+ 30, 200, 187, 80, 1, 251, 320, 206, 442, 123, 53, 242, 10, 130, 98, 255, 194, 399,
+ 5, 83, 442, 240, 298, 107, 116, 310, 174, 220, 217, 36, 295, 221, 399, 208, 135,
+ 21, 26, 161, 43, 399, 8, 174, 42, 39, 294, 235, 218, 331, 200, 187, 80, 1, 312,
+ 320, 11, 290, 313, 53, 242, 10, 133, 306, 255, 205, 187, 5, 83, 264, 266, 267, 211,
+ 116, 353, 220, 52, 217, 298, 295, 221, 206, 226, 220, 21, 290, 290, 43, 321, 36,
+ 249, 42, 39, 294, 235, 244, 26, 200, 206, 80, 1, 11, 320, 283, 52, 52, 53, 242, 10,
+ 132, 248, 255, 205, 455, 5, 83, 84, 301, 151, 455, 116, 323, 92, 36, 217, 2, 295,
+ 221, 331, 226, 26, 21, 290, 304, 43, 137, 36, 111, 42, 39, 294, 235, 244, 26, 200,
+ 187, 80, 1, 225, 320, 320, 52, 123, 53, 242, 10, 133, 98, 255, 193, 175, 5, 83,
+ 177, 280, 273, 234, 116, 310, 23, 278, 217, 13, 295, 221, 320, 203, 223, 21, 290,
+ 442, 43, 138, 187, 326, 42, 39, 294, 235, 244, 216, 200, 442, 80, 1, 4, 320, 329,
+ 52, 15, 53, 242, 10, 134, 91, 255, 205, 176, 5, 83, 293, 12, 16, 90, 116, 292, 300,
+ 99, 217, 241, 295, 221, 320, 226, 215, 28, 213, 201, 43, 105, 187, 286, 42, 39,
+ 294, 235, 244, 215, 200, 214, 80, 1, 105, 320, 11, 135, 285, 53, 242, 10, 133, 8,
+ 255, 205, 164, 5, 83, 442, 215, 19, 239, 116, 99, 105, 331, 217, 6, 295, 221, 442,
+ 192, 311, 21, 182, 289, 43, 308, 443, 32, 42, 39, 294, 235, 244, 296, 200, 17, 80,
+ 1, 443, 320, 262, 107, 26, 53, 242, 10, 133, 122, 255, 191, 172, 5, 83, 183, 188,
+ 148, 231, 116, 223, 168, 331, 217, 181, 295, 221, 331, 226, 206, 21, 331, 141, 43,
+ 308, 206, 38, 42, 39, 294, 235, 244, 331, 200, 188, 80, 1, 187, 320, 155, 206, 308,
+ 53, 242, 10, 133, 25, 255, 198, 188, 5, 83, 206, 145, 160, 308, 116, 228, 146, 206,
+ 217, 180, 295, 221, 331, 226, 286, 21, 331, 359, 43, 179, 289, 38, 42, 39, 294,
+ 235, 244, 250, 200, 271, 80, 1, 272, 320, 122, 94, 103, 53, 242, 10, 129, 3, 255,
+ 205, 144, 5, 83, 185, 289, 170, 99, 116, 270, 322, 331, 217, 184, 295, 221, 331,
+ 226, 99, 7, 171, 35, 43, 308, 89, 105, 42, 39, 294, 235, 244, 120, 200, 328, 80, 1,
+ 187, 320, 82, 223, 4, 53, 242, 10, 134, 142, 255, 205, 107, 5, 83, 309, 324, 302,
+ 20, 116, 316, 206, 291, 217, 290, 295, 221, 33, 226, 277, 28, 399, 243, 43, 257,
+ 219, 189, 42, 39, 294, 235, 244, 110, 200, 140, 80, 399, 147, 320, 253, 327, 258,
+ 53, 399, 14, 236, 220, 207, 154, 113, 65, 108, 319, 159, 238, 311, 98, 471, 471,
+ 330, 237, 279, 471, 210, 325, 245, 299, 310, 86, 308, 143, 268, 263, 259, 260, 269,
+ 177, 204, 287, 136, 242, 10, 150, 87, 255, 320, 139, 5, 83, 293, 12, 22, 195, 116,
+ 292, 247, 258, 217, 153, 295, 221, 220, 207, 36, 126, 50, 104, 109, 112, 88, 26,
+ 98, 246, 397, 330, 237, 85, 212, 210, 325, 245, 258, 310, 102, 299, 299, 220, 207,
+ 397, 113, 65, 108, 320, 299, 134, 397, 98, 222, 442, 330, 237, 299, 299, 210, 325,
+ 245, 258, 310, 299, 299, 442, 220, 207, 299, 126, 69, 108, 299, 288, 31, 299, 98,
+ 299, 299, 330, 237, 299, 299, 210, 325, 245, 80, 310, 299, 320, 299, 258, 299, 299,
+ 209, 299, 220, 207, 299, 126, 69, 108, 206, 299, 299, 455, 98, 299, 206, 330, 237,
+ 455, 365, 210, 325, 245, 299, 310, 355, 227, 258, 299, 299, 299, 199, 220, 207, 36,
+ 126, 64, 104, 299, 214, 36, 26, 98, 299, 442, 330, 237, 26, 299, 210, 325, 245,
+ 258, 310, 471, 471, 442, 220, 207, 471, 126, 69, 108, 293, 12, 299, 299, 98, 292,
+ 299, 330, 237, 299, 299, 210, 325, 245, 36, 310, 163, 299, 258, 299, 299, 26, 202,
+ 220, 207, 299, 126, 44, 108, 471, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299,
+ 210, 325, 245, 299, 310, 299, 299, 258, 134, 299, 299, 252, 220, 207, 206, 126, 72,
+ 108, 299, 299, 299, 299, 98, 299, 396, 330, 237, 299, 299, 210, 325, 245, 258, 310,
+ 299, 299, 299, 220, 207, 396, 126, 74, 108, 254, 299, 80, 396, 98, 320, 299, 330,
+ 237, 299, 297, 210, 325, 245, 299, 310, 299, 242, 9, 299, 299, 255, 299, 258, 5,
+ 83, 299, 299, 220, 207, 116, 126, 68, 108, 217, 299, 295, 221, 98, 299, 299, 330,
+ 237, 299, 299, 210, 325, 245, 299, 310, 299, 258, 299, 299, 299, 299, 220, 207,
+ 299, 100, 70, 108, 299, 303, 29, 299, 98, 299, 299, 330, 237, 299, 297, 210, 325,
+ 245, 299, 310, 299, 242, 9, 299, 299, 255, 299, 299, 5, 83, 299, 299, 299, 299,
+ 116, 299, 299, 258, 217, 299, 295, 221, 220, 207, 299, 126, 66, 108, 299, 299, 299,
+ 299, 98, 293, 12, 330, 237, 299, 292, 210, 325, 245, 299, 310, 258, 299, 299, 305,
+ 29, 220, 207, 299, 126, 60, 108, 299, 293, 12, 299, 98, 299, 292, 330, 237, 299,
+ 299, 210, 325, 245, 299, 310, 232, 299, 258, 299, 206, 299, 299, 220, 207, 299,
+ 126, 49, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 230, 210, 325, 245,
+ 299, 310, 258, 167, 299, 299, 299, 220, 207, 299, 126, 58, 108, 299, 41, 40, 37,
+ 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282,
+ 220, 97, 299, 81, 45, 106, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299,
+ 210, 325, 245, 299, 310, 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 63,
+ 108, 299, 186, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310,
+ 258, 299, 299, 299, 299, 220, 197, 299, 114, 59, 108, 299, 41, 40, 37, 98, 299,
+ 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220,
+ 207, 299, 126, 55, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210,
+ 325, 245, 299, 310, 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 57, 108,
+ 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258,
+ 299, 256, 275, 282, 220, 95, 299, 81, 48, 106, 233, 41, 40, 37, 98, 299, 299, 330,
+ 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299,
+ 126, 78, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245,
+ 299, 310, 299, 299, 258, 299, 206, 18, 299, 220, 207, 299, 96, 61, 108, 299, 299,
+ 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299,
+ 299, 299, 220, 207, 299, 126, 47, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237,
+ 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 126, 75,
+ 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310,
+ 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 64, 108, 299, 299, 299, 299,
+ 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299,
+ 220, 207, 299, 126, 56, 108, 317, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299,
+ 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 115, 46, 108, 299,
+ 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299,
+ 258, 299, 206, 299, 299, 220, 207, 299, 126, 79, 108, 299, 190, 299, 299, 98, 299,
+ 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220,
+ 207, 299, 126, 62, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210,
+ 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 126, 71, 108, 299, 299,
+ 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258,
+ 299, 206, 299, 299, 220, 207, 299, 101, 67, 108, 299, 318, 299, 299, 98, 299, 299,
+ 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, 207,
+ 299, 126, 77, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325,
+ 245, 299, 310, 258, 299, 256, 275, 282, 220, 196, 299, 126, 54, 108, 299, 299, 299,
+ 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258, 299,
+ 206, 299, 299, 220, 207, 299, 126, 73, 108, 299, 274, 299, 299, 98, 299, 299, 330,
+ 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, 224, 299,
+ 118, 299, 108, 299, 41, 40, 37, 98, 299, 299, 299, 261, 299, 299, 210, 325, 245,
+ 299, 310, 258, 299, 256, 275, 282, 220, 224, 299, 128, 299, 108, 299, 299, 299,
+ 299, 98, 299, 299, 229, 315, 206, 299, 210, 325, 245, 299, 310, 299, 471, 471, 307,
+ 27, 299, 471, 455, 526, 51, 265, 266, 267, 211, 299, 299, 220, 299, 36, 299, 409,
+ 409, 299, 299, 299, 26, 299, 299, 299, 299, 41, 40, 37, 206, 299, 455, 299, 455,
+ 299, 471, 299, 455, 299, 299, 299, 299, 299, 256, 275, 282, 229, 299, 299, 117,
+ 299, 442, 299, 409, 409, 409, 471, 471, 299, 299, 299, 471, 455, 442, 299, 299, 41,
+ 40, 37, 299, 409, 409, 409, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 256,
+ 275, 282, 299, 299, 299, 299, 455, 299, 455, 258, 471, 299, 455, 281, 220, 224,
+ 299, 127, 299, 108, 299, 299, 299, 299, 98, 299, 299, 299, 299, 299, 299, 210, 325,
+ 245, 258, 310, 206, 156, 299, 220, 224, 175, 121, 299, 108, 299, 299, 331, 299, 98,
+ 23, 278, 299, 299, 299, 299, 210, 325, 245, 34, 310, 36, 299, 299, 187, 299, 299,
+ 299, 26, 299, 299, 258, 299, 41, 40, 37, 220, 224, 299, 125, 299, 108, 299, 299,
+ 299, 299, 98, 299, 299, 229, 256, 275, 282, 210, 325, 245, 299, 310, 299, 471, 471,
+ 258, 31, 299, 471, 455, 220, 224, 299, 124, 299, 108, 299, 299, 299, 299, 98, 299,
+ 299, 299, 299, 299, 299, 210, 325, 245, 258, 310, 206, 299, 299, 220, 224, 455,
+ 119, 455, 108, 471, 299, 455, 299, 98, 299, 299, 229, 299, 299, 24, 210, 325, 245,
+ 299, 310, 299, 471, 471, 299, 471, 471, 471, 455, 299, 471, 455, 206, 41, 40, 37,
+ 299, 299, 299, 471, 471, 299, 299, 299, 471, 455, 299, 299, 276, 299, 256, 275,
+ 282, 299, 299, 299, 455, 36, 455, 455, 471, 455, 455, 471, 26, 455, 299, 206, 403,
+ 41, 40, 37, 206, 455, 299, 455, 299, 471, 403, 455, 403, 299, 299, 403, 299, 299,
+ 256, 275, 282, 299, 403, 299, 403, 299, 403, 299, 299, 299, 299, 299, 299, 299,
+ 299, 223, 41, 40, 37, 299, 299, 41, 40, 37, 299, 299, 299, 299, 299, 299, 299, 299,
+ 173, 256, 275, 282, 175, 314, 256, 275, 282, 299, 331, 166, 299, 23, 278, 175, 162,
+ 299, 299, 299, 175, 331, 299, 299, 23, 278, 331, 187, 299, 23, 278, 158, 299, 299,
+ 299, 175, 299, 299, 187, 299, 299, 331, 165, 187, 23, 278, 175, 299, 299, 299, 299,
+ 299, 331, 299, 299, 23, 278, 299, 187, 299, 299, 299, 299, 299, 299, 299, 299, 299,
+ 299, 187,);
+
+ static public $yy_lookahead = array(12, 13, 14, 80, 16, 17, 71, 19, 20, 12, 13, 71, 91, 25, 17, 75, 81, 29, 30, 31,
+ 32, 81, 34, 26, 36, 28, 15, 39, 93, 18, 33, 43, 44, 45, 46, 47, 28, 49, 98, 51,
+ 52, 70, 54, 1, 36, 74, 58, 12, 13, 14, 79, 16, 17, 11, 19, 20, 48, 86, 64, 48,
+ 25, 90, 75, 69, 29, 26, 31, 32, 26, 34, 46, 36, 33, 71, 39, 33, 52, 75, 43, 44,
+ 45, 46, 47, 81, 49, 98, 51, 52, 53, 54, 35, 22, 37, 58, 12, 13, 14, 103, 16, 17,
+ 98, 19, 20, 63, 64, 65, 66, 25, 11, 69, 41, 29, 64, 31, 32, 1, 34, 69, 36, 22,
+ 22, 39, 53, 26, 95, 43, 44, 45, 46, 47, 33, 49, 1, 51, 52, 35, 54, 37, 41, 41,
+ 58, 12, 13, 14, 14, 16, 17, 46, 19, 20, 102, 103, 71, 52, 25, 11, 75, 26, 29,
+ 36, 31, 32, 81, 34, 33, 36, 22, 17, 39, 14, 26, 48, 43, 44, 45, 46, 47, 33, 49,
+ 98, 51, 52, 70, 54, 54, 41, 74, 58, 12, 13, 14, 79, 16, 17, 75, 19, 20, 8, 9,
+ 10, 50, 25, 90, 84, 85, 29, 13, 31, 32, 54, 34, 46, 36, 22, 36, 39, 14, 98, 53,
+ 43, 44, 45, 46, 47, 46, 49, 48, 51, 52, 36, 54, 53, 41, 21, 58, 12, 13, 14, 36,
+ 16, 17, 75, 19, 20, 12, 13, 15, 35, 25, 17, 59, 18, 29, 22, 31, 32, 54, 34, 74,
+ 36, 76, 77, 39, 79, 98, 99, 43, 44, 45, 46, 47, 74, 49, 76, 51, 52, 79, 54, 35,
+ 46, 37, 58, 12, 13, 14, 52, 16, 17, 71, 19, 20, 36, 74, 15, 76, 25, 18, 79, 81,
+ 29, 35, 31, 32, 48, 34, 92, 36, 94, 95, 39, 93, 36, 15, 43, 44, 45, 46, 47, 53,
+ 49, 26, 51, 52, 48, 54, 89, 48, 33, 58, 12, 13, 14, 96, 16, 17, 71, 19, 20, 14,
+ 98, 71, 17, 25, 46, 71, 81, 29, 75, 31, 32, 81, 34, 1, 36, 81, 71, 39, 93, 1, 2,
+ 43, 44, 45, 46, 47, 81, 49, 98, 51, 52, 98, 54, 91, 1, 93, 58, 12, 13, 14, 28,
+ 16, 17, 98, 19, 20, 1, 91, 71, 93, 25, 18, 71, 1, 29, 80, 31, 32, 81, 34, 99,
+ 36, 81, 11, 39, 94, 95, 2, 43, 44, 45, 46, 47, 89, 49, 65, 51, 52, 68, 54, 96,
+ 80, 79, 58, 12, 13, 14, 36, 16, 17, 71, 19, 20, 94, 95, 71, 18, 25, 53, 96, 81,
+ 29, 75, 31, 32, 81, 34, 18, 36, 74, 15, 39, 93, 91, 79, 43, 44, 45, 46, 47, 17,
+ 49, 17, 51, 52, 98, 54, 17, 46, 36, 58, 12, 13, 14, 51, 16, 17, 48, 19, 20, 17,
+ 34, 17, 42, 25, 17, 1, 34, 29, 22, 31, 32, 23, 34, 37, 36, 11, 17, 39, 5, 17,
+ 17, 43, 44, 45, 46, 47, 17, 49, 51, 51, 26, 27, 54, 11, 53, 64, 58, 33, 13, 14,
+ 69, 70, 17, 72, 73, 74, 53, 91, 81, 92, 79, 12, 13, 82, 83, 9, 17, 86, 87, 88,
+ 104, 90, 79, 93, 91, 3, 4, 5, 6, 7, 8, 100, 101, 79, 12, 13, 91, 79, 16, 54, 91,
+ 19, 20, 12, 13, 13, 14, 25, 17, 17, 64, 29, 91, 31, 32, 69, 70, 26, 72, 73, 74,
+ 78, 76, 79, 33, 79, 34, 11, 82, 83, 79, 15, 86, 87, 88, 64, 90, 67, 104, 104,
+ 69, 70, 26, 72, 73, 74, 54, 104, 14, 33, 79, 17, 36, 82, 83, 104, 104, 86, 87,
+ 88, 64, 90, 104, 104, 48, 69, 70, 104, 72, 73, 74, 104, 101, 15, 104, 79, 104,
+ 104, 82, 83, 104, 104, 86, 87, 88, 51, 90, 104, 54, 104, 64, 104, 104, 97, 104,
+ 69, 70, 104, 72, 73, 74, 1, 104, 104, 46, 79, 104, 1, 82, 83, 52, 11, 86, 87,
+ 88, 104, 90, 11, 18, 64, 104, 104, 104, 97, 69, 70, 26, 72, 73, 74, 104, 76, 26,
+ 33, 79, 104, 36, 82, 83, 33, 104, 86, 87, 88, 64, 90, 12, 13, 48, 69, 70, 17,
+ 72, 73, 74, 12, 13, 104, 104, 79, 17, 104, 82, 83, 104, 104, 86, 87, 88, 26, 90,
+ 28, 104, 64, 104, 104, 33, 97, 69, 70, 104, 72, 73, 74, 50, 104, 104, 104, 79,
+ 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 14, 104, 104, 17,
+ 69, 70, 1, 72, 73, 74, 104, 104, 104, 104, 79, 104, 11, 82, 83, 104, 104, 86,
+ 87, 88, 64, 90, 104, 104, 104, 69, 70, 26, 72, 73, 74, 49, 104, 51, 33, 79, 54,
+ 104, 82, 83, 104, 5, 86, 87, 88, 104, 90, 104, 12, 13, 14, 104, 16, 104, 64, 19,
+ 20, 104, 104, 69, 70, 25, 72, 73, 74, 29, 104, 31, 32, 79, 104, 104, 82, 83,
+ 104, 104, 86, 87, 88, 104, 90, 104, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73,
+ 74, 104, 58, 59, 104, 79, 104, 104, 82, 83, 104, 5, 86, 87, 88, 104, 90, 104,
+ 12, 13, 14, 104, 16, 104, 104, 19, 20, 104, 104, 104, 104, 25, 104, 104, 64, 29,
+ 104, 31, 32, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 12, 13, 82, 83,
+ 104, 17, 86, 87, 88, 104, 90, 64, 104, 104, 58, 59, 69, 70, 104, 72, 73, 74,
+ 104, 12, 13, 104, 79, 104, 17, 82, 83, 104, 104, 86, 87, 88, 104, 90, 50, 104,
+ 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104,
+ 82, 83, 104, 50, 86, 87, 88, 104, 90, 64, 27, 104, 104, 104, 69, 70, 104, 72,
+ 73, 74, 104, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90,
+ 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104,
+ 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70,
+ 104, 72, 73, 74, 104, 11, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88,
+ 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, 40, 79,
+ 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70,
+ 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88,
+ 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39,
+ 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57,
+ 69, 70, 104, 72, 73, 74, 37, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87,
+ 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104,
+ 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 2,
+ 104, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104,
+ 104, 86, 87, 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104,
+ 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55,
+ 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104,
+ 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73,
+ 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64,
+ 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 37, 38, 39, 40, 79, 104, 104, 82,
+ 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74,
+ 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104,
+ 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 11, 104, 104, 79, 104,
+ 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104,
+ 72, 73, 74, 104, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104,
+ 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104,
+ 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69,
+ 70, 104, 72, 73, 74, 104, 11, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87,
+ 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, 40,
+ 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69,
+ 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87,
+ 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 11,
+ 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 104,
+ 104, 104, 69, 70, 104, 72, 104, 74, 104, 38, 39, 40, 79, 104, 104, 104, 83, 104,
+ 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 104, 74, 104,
+ 104, 104, 104, 79, 104, 104, 2, 83, 1, 104, 86, 87, 88, 104, 90, 104, 12, 13,
+ 11, 15, 104, 17, 18, 61, 62, 63, 64, 65, 66, 104, 104, 69, 104, 26, 104, 1, 2,
+ 104, 104, 104, 33, 104, 104, 104, 104, 38, 39, 40, 1, 104, 46, 104, 48, 104, 50,
+ 104, 52, 104, 104, 104, 104, 104, 55, 56, 57, 2, 104, 104, 21, 104, 36, 104, 38,
+ 39, 40, 12, 13, 104, 104, 104, 17, 18, 48, 104, 104, 38, 39, 40, 104, 55, 56,
+ 57, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 55, 56, 57, 104, 104, 104,
+ 104, 46, 104, 48, 64, 50, 104, 52, 53, 69, 70, 104, 72, 104, 74, 104, 104, 104,
+ 104, 79, 104, 104, 104, 104, 104, 104, 86, 87, 88, 64, 90, 1, 71, 104, 69, 70,
+ 75, 72, 104, 74, 104, 104, 81, 104, 79, 84, 85, 104, 104, 104, 104, 86, 87, 88,
+ 24, 90, 26, 104, 104, 98, 104, 104, 104, 33, 104, 104, 64, 104, 38, 39, 40, 69,
+ 70, 104, 72, 104, 74, 104, 104, 104, 104, 79, 104, 104, 2, 55, 56, 57, 86, 87,
+ 88, 104, 90, 104, 12, 13, 64, 15, 104, 17, 18, 69, 70, 104, 72, 104, 74, 104,
+ 104, 104, 104, 79, 104, 104, 104, 104, 104, 104, 86, 87, 88, 64, 90, 1, 104,
+ 104, 69, 70, 46, 72, 48, 74, 50, 104, 52, 104, 79, 104, 104, 2, 104, 104, 2, 86,
+ 87, 88, 104, 90, 104, 12, 13, 104, 12, 13, 17, 18, 104, 17, 18, 1, 38, 39, 40,
+ 104, 104, 104, 12, 13, 104, 104, 104, 17, 18, 104, 104, 53, 104, 55, 56, 57,
+ 104, 104, 104, 46, 26, 48, 46, 50, 48, 52, 50, 33, 52, 104, 1, 11, 38, 39, 40,
+ 1, 46, 104, 48, 104, 50, 21, 52, 23, 104, 104, 26, 104, 104, 55, 56, 57, 104,
+ 33, 104, 35, 104, 37, 104, 104, 104, 104, 104, 104, 104, 104, 46, 38, 39, 40,
+ 104, 104, 38, 39, 40, 104, 104, 104, 104, 104, 104, 104, 104, 71, 55, 56, 57,
+ 75, 59, 55, 56, 57, 104, 81, 71, 104, 84, 85, 75, 71, 104, 104, 104, 75, 81,
+ 104, 104, 84, 85, 81, 98, 104, 84, 85, 71, 104, 104, 104, 75, 104, 104, 98, 104,
+ 104, 81, 71, 98, 84, 85, 75, 104, 104, 104, 104, 104, 81, 104, 104, 84, 85, 104,
+ 98, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 98,);
+
+ const YY_SHIFT_USE_DFLT = - 13;
+
+ const YY_SHIFT_MAX = 236;
+
+ static public $yy_shift_ofst = array(542, 364, 82, 82, 82, 411, 364, 411, 35, - 12, - 12, 82, 82, 82, 82, 82, 82,
+ 176, 82, 82, 129, 82, 82, 82, 317, 82, 82, 82, 82, 82, 82, 270, 82, 82, 82, 82,
+ 176, 223, 223, 458, 458, 458, 458, 458, 1734, 1603, 1862, 1862, 1862, 1862,
+ 1862, 542, 749, 803, 1897, 1448, 1531, 1199, 1643, 1826, 1365, 950, 1282, 1033,
+ 1116, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 660,
+ 1902, 1089, 1089, 594, 666, 131, 202, 865, - 3, 703, 551, 551, 233, 202, 202,
+ 131, 131, 357, 97, 484, 144, 920, 505, 42, 768, 189, 232, 11, 232, 278, 324,
+ 428, 39, 372, 324, 39, 351, 384, 391, 294, 155, 114, 114, 114, 114, 417, 417,
+ 114, 114, 114, 114, - 13, 1786, 1659, 1600, 1844, 1841, 1858, 552, 897, 519,
+ 618, 24, 101, 39, 101, 24, 39, 24, 39, 130, 39, 39, 24, 39, 24, 24, 193, 24,
+ 39, 39, 39, 24, 39, 39, 39, 130, 39, 39, 39, 130, 39, 130, 39, 231, 39, 39,
+ 114, 114, 114, 526, 404, 417, 404, 114, 417, 390, 114, 417, - 13, - 13, - 13,
+ - 13, - 13, 1630, 1888, 576, 178, 694, 191, 69, 8, 100, 275, 212, 243, 297,
+ 265, 255, 150, 98, 165, 55, 123, 493, 479, 468, 456, 434, 482, 483, 473, 461,
+ 502, 489, 457, 452, 466, 422, 421, 449, 442, 444, 462, 432, 467, 440, 464, 446,
+ 390,);
+
+ const YY_REDUCE_USE_DFLT = - 80;
+
+ const YY_REDUCE_MAX = 190;
+
+ static public $yy_reduce_ofst = array(1558, 451, 556, 640, 586, 506, 531, 615, 995, 939, 1078, 723, 1244, 968, 856,
+ 912, 1354, 1134, 1105, 1161, 1051, 1217, 1022, 1188, 1300, 1466, 1383, 1271,
+ 1327, 1437, 1410, 757, 698, 669, 885, 829, 785, 1493, 1520, 1761, 1706, 1669,
+ 1644, 1736, 1880, 1665, 1896, 1911, 1665, 1891, 1922, 40, - 29, 48, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 81, 119, 119, 119, 112, 2, - 60, 184, - 6, 264, 358,
+ - 65, 217, 213, 218, 197, 284, 269, 166, 363, - 13, 363, 295, 342, - 13, - 13,
+ 349, 281, 310, 295, 310, 323, 310, 316, 272, 236, 273, - 13, - 13, - 13, 320,
+ 374, - 13, - 13, 366, - 13, 338, 310, - 13, - 13, - 13, - 13, - 13, 465, 465,
+ 465, 465, 465, 465, 474, 450, 465, 465, 437, 469, 447, 453, 437, 447, 437,
+ 447, 463, 447, 447, 437, 447, 437, 437, 481, 437, 447, 447, 447, 437, 447,
+ 447, 447, 478, 447, 447, 447, 511, 447, 504, 447, 503, 447, 447, 241, 241,
+ 241, 530, 300, 29, 300, 241, 29, 361, 241, 29, - 79, - 77, 314, 340, 436,);
+
+ static public $yyExpectedTokens = array(array(3, 4, 5, 6, 7, 8, 12, 13, 16, 19, 20, 25, 29, 31, 32,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 53, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 30, 31, 32, 34, 36, 39, 43, 44,
+ 45, 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 30, 31, 32, 34, 36, 39, 43, 44,
+ 45, 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 52, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 54, 58,),
+ array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45,
+ 46, 47, 49, 51, 54, 58,),
+ array(1, 24, 26, 33, 38, 39, 40, 55, 56, 57,),
+ array(1, 11, 26, 33, 38, 39, 40, 55, 56, 57,),
+ array(1, 26, 33, 38, 39, 40, 55, 56, 57,),
+ array(1, 26, 33, 38, 39, 40, 55, 56, 57,),
+ array(1, 26, 33, 38, 39, 40, 55, 56, 57,),
+ array(1, 26, 33, 38, 39, 40, 55, 56, 57,),
+ array(1, 26, 33, 38, 39, 40, 55, 56, 57,),
+ array(3, 4, 5, 6, 7, 8, 12, 13, 16, 19, 20, 25, 29, 31, 32,),
+ array(14, 17, 49, 51, 54,),
+ array(5, 12, 13, 14, 16, 19, 20, 25, 29, 31, 32, 58, 59,),
+ array(1, 38, 39, 40, 55, 56, 57, 59,),
+ array(1, 11, 38, 39, 40, 55, 56, 57,),
+ array(1, 11, 38, 39, 40, 55, 56, 57,), array(1, 2, 38, 39, 40, 55, 56, 57,),
+ array(1, 21, 38, 39, 40, 55, 56, 57,),
+ array(1, 38, 39, 40, 53, 55, 56, 57,),
+ array(1, 11, 38, 39, 40, 55, 56, 57,),
+ array(1, 27, 38, 39, 40, 55, 56, 57,),
+ array(1, 37, 38, 39, 40, 55, 56, 57,),
+ array(1, 11, 38, 39, 40, 55, 56, 57,),
+ array(1, 37, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,),
+ array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,),
+ array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,),
+ array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,),
+ array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,),
+ array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,),
+ array(1, 11, 18, 26, 33, 36, 48,), array(1, 38, 39, 40, 55, 56, 57,),
+ array(38, 39, 40, 55, 56, 57,), array(38, 39, 40, 55, 56, 57,),
+ array(14, 17, 51, 54,), array(1, 11, 26, 33,), array(1, 26, 33,),
+ array(14, 36, 54,),
+ array(5, 12, 13, 14, 16, 19, 20, 25, 29, 31, 32, 58, 59,),
+ array(12, 13, 17, 26, 28, 33,), array(12, 13, 17, 26, 28, 33,),
+ array(12, 13, 17, 26, 33,), array(12, 13, 17, 26, 33,), array(18, 46, 52,),
+ array(14, 36, 54,), array(14, 36, 54,), array(1, 26, 33,),
+ array(1, 26, 33,), array(1, 2,), array(11, 22, 26, 33, 41,),
+ array(1, 11, 26, 27, 33,), array(11, 22, 26, 33, 41,),
+ array(12, 13, 17, 50,), array(13, 14, 17, 54,), array(1, 11, 26, 33,),
+ array(1, 11, 26, 33,), array(8, 9, 10,), array(12, 13, 17,),
+ array(15, 18, 48,), array(12, 13, 17,), array(15, 18, 48,), array(14, 17,),
+ array(18, 48,), array(26, 33,), array(1, 18,), array(14, 17,),
+ array(26, 33,), array(1, 28,), array(1, 53,), array(1, 11,), array(26, 33,),
+ array(14, 54,), array(1,), array(1,), array(1,), array(1,), array(18,),
+ array(18,), array(1,), array(1,), array(1,), array(1,), array(),
+ array(2, 12, 13, 15, 17, 18, 46, 48, 50, 52,),
+ array(2, 12, 13, 17, 18, 46, 48, 50, 52, 53,),
+ array(2, 12, 13, 15, 17, 18, 46, 48, 50, 52,),
+ array(2, 12, 13, 17, 18, 46, 48, 50, 52,),
+ array(2, 12, 13, 17, 18, 46, 48, 50, 52,),
+ array(12, 13, 17, 18, 46, 48, 50, 52,), array(13, 14, 17, 34, 54,),
+ array(12, 13, 17, 50,), array(12, 13, 17,), array(15, 46, 52,),
+ array(46, 52,), array(46, 52,), array(26, 33,), array(46, 52,),
+ array(46, 52,), array(26, 33,), array(46, 52,), array(26, 33,),
+ array(14, 54,), array(26, 33,), array(26, 33,), array(46, 52,),
+ array(26, 33,), array(46, 52,), array(46, 52,), array(13, 36,),
+ array(46, 52,), array(26, 33,), array(26, 33,), array(26, 33,),
+ array(46, 52,), array(26, 33,), array(26, 33,), array(26, 33,),
+ array(14, 54,), array(26, 33,), array(26, 33,), array(26, 33,),
+ array(14, 54,), array(26, 33,), array(14, 54,), array(26, 33,),
+ array(15, 22,), array(26, 33,), array(26, 33,), array(1,), array(1,),
+ array(1,), array(9,), array(2,), array(18,), array(2,), array(1,),
+ array(18,), array(36,), array(1,), array(18,), array(), array(), array(),
+ array(), array(), array(1, 2, 36, 38, 39, 40, 48, 55, 56, 57,),
+ array(11, 21, 23, 26, 33, 35, 37, 46,), array(11, 15, 26, 33, 36, 48,),
+ array(36, 46, 48, 53,), array(12, 13, 17, 50,), array(22, 41, 59,),
+ array(22, 41, 53,), array(28, 36, 48,), array(35, 37,), array(36, 48,),
+ array(21, 35,), array(35, 37,), array(15, 46,), array(35, 53,),
+ array(36, 48,), array(17, 50,), array(22, 41,), array(46, 53,),
+ array(35, 37,), array(36, 48,), array(5,), array(17,), array(23,),
+ array(37,), array(15,), array(17,), array(17,), array(53,), array(53,),
+ array(11,), array(17,), array(51,), array(34,), array(22,), array(51,),
+ array(46,), array(17,), array(17,), array(17,), array(17,), array(36,),
+ array(17,), array(42,), array(17,), array(34,), array(36,), array(),
+ array(), array(), array(), array(), array(), array(), array(), array(),
+ array(), array(), array(), array(), array(), array(), array(), array(),
+ array(), array(), array(), array(), array(), array(), array(), array(),
+ array(), array(), array(), array(), array(), array(), array(), array(),
+ array(), array(), array(), array(), array(), array(), array(), array(),
+ array(), array(), array(), array(), array(), array(), array(), array(),
+ array(), array(), array(), array(), array(), array(), array(), array(),
+ array(), array(), array(), array(), array(), array(), array(), array(),
+ array(), array(), array(), array(), array(), array(), array(), array(),
+ array(), array(), array(), array(), array(), array(), array(), array(),
+ array(), array(), array(), array(), array(), array(), array(), array(),
+ array(), array(), array(), array(), array(), array(),);
+
+ static public $yy_default = array(335, 510, 490, 490, 490, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525,
+ 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525,
+ 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 393, 525, 360, 393,
+ 357, 393, 369, 332, 525, 525, 525, 525, 525, 525, 525, 525, 525, 398, 525, 525,
+ 525, 513, 405, 395, 404, 489, 398, 374, 400, 511, 488, 414, 432, 512, 421, 420,
+ 525, 407, 393, 525, 525, 393, 393, 393, 393, 502, 525, 525, 393, 393, 383, 422,
+ 407, 422, 455, 525, 407, 407, 525, 455, 445, 455, 445, 525, 445, 393, 387, 525,
+ 371, 407, 407, 407, 393, 525, 417, 425, 389, 410, 499, 445, 423, 411, 407, 424,
+ 497, 444, 444, 444, 444, 444, 444, 525, 457, 455, 471, 449, 448, 366, 450, 451,
+ 379, 453, 378, 525, 368, 367, 452, 364, 483, 480, 455, 481, 358, 380, 362, 482,
+ 373, 356, 361, 525, 382, 370, 377, 525, 372, 525, 354, 525, 381, 376, 439, 413,
+ 384, 348, 492, 477, 491, 388, 503, 455, 390, 500, 455, 496, 496, 496, 455, 432,
+ 428, 432, 432, 456, 422, 422, 432, 525, 440, 525, 525, 428, 525, 432, 525, 422,
+ 428, 525, 525, 340, 525, 401, 525, 525, 525, 525, 435, 525, 525, 525, 525, 430,
+ 422, 525, 428, 525, 525, 525, 525, 501, 525, 434, 525, 525, 471, 412, 391, 402,
+ 418, 375, 352, 394, 435, 436, 460, 459, 471, 479, 437, 419, 442, 351, 443, 363,
+ 504, 342, 438, 341, 343, 416, 441, 339, 334, 333, 336, 337, 338, 344, 468, 349,
+ 347, 350, 476, 505, 469, 406, 415, 345, 346, 466, 506, 486, 385, 487, 495, 508,
+ 509, 478, 426, 429, 474, 475, 427, 386, 507, 524, 523, 520, 518, 517, 493, 514,
+ 494, 515, 516, 522, 473, 446, 447, 454, 470, 485, 519, 498, 458, 434, 461, 464,
+ 472, 467, 484, 521, 431, 433, 465, 463, 409, 462, 408, 392,);
+
+ const YYNOCODE = 105;
+
+ const YYSTACKDEPTH = 500;
+
+ const YYNSTATE = 332;
+
+ const YYNRULE = 193;
+
+ const YYERRORSYMBOL = 60;
+
const YYERRSYMDT = 'yy0';
+
const YYFALLBACK = 0;
- static public $yyFallback = array(
- );
- static function Trace($TraceFILE, $zTracePrompt)
+
+ public static $yyFallback = array();
+
+ public function Trace($TraceFILE, $zTracePrompt)
{
if (!$TraceFILE) {
$zTracePrompt = 0;
} elseif (!$zTracePrompt) {
$TraceFILE = 0;
}
- self::$yyTraceFILE = $TraceFILE;
- self::$yyTracePrompt = $zTracePrompt;
+ $this->yyTraceFILE = $TraceFILE;
+ $this->yyTracePrompt = $zTracePrompt;
}
- static function PrintTrace()
+ public function PrintTrace()
{
- self::$yyTraceFILE = fopen('php://output', 'w');
- self::$yyTracePrompt = '<br>';
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = '<br>';
}
- static public $yyTraceFILE;
- static public $yyTracePrompt;
+ public $yyTraceFILE;
+
+ public $yyTracePrompt;
+
public $yyidx; /* Index of top element in stack */
public $yyerrcnt; /* Shifts left before out of the error */
public $yystack = array(); /* The parser's stack */
- public $yyTokenName = array(
- '$', 'VERT', 'COLON', 'COMMENT',
- 'PHPSTARTTAG', 'PHPENDTAG', 'ASPSTARTTAG', 'ASPENDTAG',
- 'FAKEPHPSTARTTAG', 'XMLTAG', 'TEXT', 'STRIPON',
- 'STRIPOFF', 'LITERALSTART', 'LITERALEND', 'LITERAL',
- 'LDEL', 'RDEL', 'DOLLAR', 'ID',
- 'EQUAL', 'PTR', 'LDELIF', 'LDELFOR',
- 'SEMICOLON', 'INCDEC', 'TO', 'STEP',
- 'LDELFOREACH', 'SPACE', 'AS', 'APTR',
- 'LDELSETFILTER', 'SMARTYBLOCKCHILD', 'LDELSLASH', 'ATTR',
- 'INTEGER', 'COMMA', 'OPENP', 'CLOSEP',
- 'MATH', 'UNIMATH', 'ANDSYM', 'ISIN',
- 'ISDIVBY', 'ISNOTDIVBY', 'ISEVEN', 'ISNOTEVEN',
- 'ISEVENBY', 'ISNOTEVENBY', 'ISODD', 'ISNOTODD',
- 'ISODDBY', 'ISNOTODDBY', 'INSTANCEOF', 'QMARK',
- 'NOT', 'TYPECAST', 'HEX', 'DOT',
- 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'AT', 'HATCH',
- 'OPENB', 'CLOSEB', 'EQUALS', 'NOTEQUALS',
- 'GREATERTHAN', 'LESSTHAN', 'GREATEREQUAL', 'LESSEQUAL',
- 'IDENTITY', 'NONEIDENTITY', 'MOD', 'LAND',
- 'LOR', 'LXOR', 'QUOTE', 'BACKTICK',
- 'DOLLARID', 'error', 'start', 'template',
- 'template_element', 'smartytag', 'literal', 'literal_elements',
- 'literal_element', 'value', 'modifierlist', 'attributes',
- 'expr', 'varindexed', 'statement', 'statements',
- 'optspace', 'varvar', 'foraction', 'modparameters',
- 'attribute', 'ternary', 'array', 'ifcond',
- 'lop', 'variable', 'function', 'doublequoted_with_quotes',
- 'static_class_access', 'object', 'arrayindex', 'indexdef',
- 'varvarele', 'objectchain', 'objectelement', 'method',
- 'params', 'modifier', 'modparameter', 'arrayelements',
- 'arrayelement', 'doublequoted', 'doublequotedcontent',
- );
-
- static public $yyRuleName = array(
- /* 0 */ "start ::= template",
- /* 1 */ "template ::= template_element",
- /* 2 */ "template ::= template template_element",
- /* 3 */ "template ::=",
- /* 4 */ "template_element ::= smartytag",
- /* 5 */ "template_element ::= COMMENT",
- /* 6 */ "template_element ::= literal",
- /* 7 */ "template_element ::= PHPSTARTTAG",
- /* 8 */ "template_element ::= PHPENDTAG",
- /* 9 */ "template_element ::= ASPSTARTTAG",
- /* 10 */ "template_element ::= ASPENDTAG",
- /* 11 */ "template_element ::= FAKEPHPSTARTTAG",
- /* 12 */ "template_element ::= XMLTAG",
- /* 13 */ "template_element ::= TEXT",
- /* 14 */ "template_element ::= STRIPON",
- /* 15 */ "template_element ::= STRIPOFF",
- /* 16 */ "literal ::= LITERALSTART LITERALEND",
- /* 17 */ "literal ::= LITERALSTART literal_elements LITERALEND",
- /* 18 */ "literal_elements ::= literal_elements literal_element",
- /* 19 */ "literal_elements ::=",
- /* 20 */ "literal_element ::= literal",
- /* 21 */ "literal_element ::= LITERAL",
- /* 22 */ "literal_element ::= PHPSTARTTAG",
- /* 23 */ "literal_element ::= FAKEPHPSTARTTAG",
- /* 24 */ "literal_element ::= PHPENDTAG",
- /* 25 */ "literal_element ::= ASPSTARTTAG",
- /* 26 */ "literal_element ::= ASPENDTAG",
- /* 27 */ "smartytag ::= LDEL value RDEL",
- /* 28 */ "smartytag ::= LDEL value modifierlist attributes RDEL",
- /* 29 */ "smartytag ::= LDEL value attributes RDEL",
- /* 30 */ "smartytag ::= LDEL expr modifierlist attributes RDEL",
- /* 31 */ "smartytag ::= LDEL expr attributes RDEL",
- /* 32 */ "smartytag ::= LDEL DOLLAR ID EQUAL value RDEL",
- /* 33 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr RDEL",
- /* 34 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes RDEL",
- /* 35 */ "smartytag ::= LDEL varindexed EQUAL expr attributes RDEL",
- /* 36 */ "smartytag ::= LDEL ID attributes RDEL",
- /* 37 */ "smartytag ::= LDEL ID RDEL",
- /* 38 */ "smartytag ::= LDEL ID PTR ID attributes RDEL",
- /* 39 */ "smartytag ::= LDEL ID modifierlist attributes RDEL",
- /* 40 */ "smartytag ::= LDEL ID PTR ID modifierlist attributes RDEL",
- /* 41 */ "smartytag ::= LDELIF expr RDEL",
- /* 42 */ "smartytag ::= LDELIF expr attributes RDEL",
- /* 43 */ "smartytag ::= LDELIF statement RDEL",
- /* 44 */ "smartytag ::= LDELIF statement attributes RDEL",
- /* 45 */ "smartytag ::= LDELFOR statements SEMICOLON optspace expr SEMICOLON optspace DOLLAR varvar foraction attributes RDEL",
- /* 46 */ "foraction ::= EQUAL expr",
- /* 47 */ "foraction ::= INCDEC",
- /* 48 */ "smartytag ::= LDELFOR statement TO expr attributes RDEL",
- /* 49 */ "smartytag ::= LDELFOR statement TO expr STEP expr attributes RDEL",
- /* 50 */ "smartytag ::= LDELFOREACH attributes RDEL",
- /* 51 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar attributes RDEL",
- /* 52 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar attributes RDEL",
- /* 53 */ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar attributes RDEL",
- /* 54 */ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar APTR DOLLAR varvar attributes RDEL",
- /* 55 */ "smartytag ::= LDELSETFILTER ID modparameters RDEL",
- /* 56 */ "smartytag ::= LDELSETFILTER ID modparameters modifierlist RDEL",
- /* 57 */ "smartytag ::= SMARTYBLOCKCHILD",
- /* 58 */ "smartytag ::= LDELSLASH ID RDEL",
- /* 59 */ "smartytag ::= LDELSLASH ID modifierlist RDEL",
- /* 60 */ "smartytag ::= LDELSLASH ID PTR ID RDEL",
- /* 61 */ "smartytag ::= LDELSLASH ID PTR ID modifierlist RDEL",
- /* 62 */ "attributes ::= attributes attribute",
- /* 63 */ "attributes ::= attribute",
- /* 64 */ "attributes ::=",
- /* 65 */ "attribute ::= SPACE ID EQUAL ID",
- /* 66 */ "attribute ::= ATTR expr",
- /* 67 */ "attribute ::= ATTR value",
- /* 68 */ "attribute ::= SPACE ID",
- /* 69 */ "attribute ::= SPACE expr",
- /* 70 */ "attribute ::= SPACE value",
- /* 71 */ "attribute ::= SPACE INTEGER EQUAL expr",
- /* 72 */ "statements ::= statement",
- /* 73 */ "statements ::= statements COMMA statement",
- /* 74 */ "statement ::= DOLLAR varvar EQUAL expr",
- /* 75 */ "statement ::= varindexed EQUAL expr",
- /* 76 */ "statement ::= OPENP statement CLOSEP",
- /* 77 */ "expr ::= value",
- /* 78 */ "expr ::= ternary",
- /* 79 */ "expr ::= DOLLAR ID COLON ID",
- /* 80 */ "expr ::= expr MATH value",
- /* 81 */ "expr ::= expr UNIMATH value",
- /* 82 */ "expr ::= expr ANDSYM value",
- /* 83 */ "expr ::= array",
- /* 84 */ "expr ::= expr modifierlist",
- /* 85 */ "expr ::= expr ifcond expr",
- /* 86 */ "expr ::= expr ISIN array",
- /* 87 */ "expr ::= expr ISIN value",
- /* 88 */ "expr ::= expr lop expr",
- /* 89 */ "expr ::= expr ISDIVBY expr",
- /* 90 */ "expr ::= expr ISNOTDIVBY expr",
- /* 91 */ "expr ::= expr ISEVEN",
- /* 92 */ "expr ::= expr ISNOTEVEN",
- /* 93 */ "expr ::= expr ISEVENBY expr",
- /* 94 */ "expr ::= expr ISNOTEVENBY expr",
- /* 95 */ "expr ::= expr ISODD",
- /* 96 */ "expr ::= expr ISNOTODD",
- /* 97 */ "expr ::= expr ISODDBY expr",
- /* 98 */ "expr ::= expr ISNOTODDBY expr",
- /* 99 */ "expr ::= value INSTANCEOF ID",
- /* 100 */ "expr ::= value INSTANCEOF value",
- /* 101 */ "ternary ::= OPENP expr CLOSEP QMARK DOLLAR ID COLON expr",
- /* 102 */ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr",
- /* 103 */ "value ::= variable",
- /* 104 */ "value ::= UNIMATH value",
- /* 105 */ "value ::= NOT value",
- /* 106 */ "value ::= TYPECAST value",
- /* 107 */ "value ::= variable INCDEC",
- /* 108 */ "value ::= HEX",
- /* 109 */ "value ::= INTEGER",
- /* 110 */ "value ::= INTEGER DOT INTEGER",
- /* 111 */ "value ::= INTEGER DOT",
- /* 112 */ "value ::= DOT INTEGER",
- /* 113 */ "value ::= ID",
- /* 114 */ "value ::= function",
- /* 115 */ "value ::= OPENP expr CLOSEP",
- /* 116 */ "value ::= SINGLEQUOTESTRING",
- /* 117 */ "value ::= doublequoted_with_quotes",
- /* 118 */ "value ::= ID DOUBLECOLON static_class_access",
- /* 119 */ "value ::= varindexed DOUBLECOLON static_class_access",
- /* 120 */ "value ::= smartytag",
- /* 121 */ "value ::= value modifierlist",
- /* 122 */ "variable ::= varindexed",
- /* 123 */ "variable ::= DOLLAR varvar AT ID",
- /* 124 */ "variable ::= object",
- /* 125 */ "variable ::= HATCH ID HATCH",
- /* 126 */ "variable ::= HATCH ID HATCH arrayindex",
- /* 127 */ "variable ::= HATCH variable HATCH",
- /* 128 */ "variable ::= HATCH variable HATCH arrayindex",
- /* 129 */ "varindexed ::= DOLLAR varvar arrayindex",
- /* 130 */ "arrayindex ::= arrayindex indexdef",
- /* 131 */ "arrayindex ::=",
- /* 132 */ "indexdef ::= DOT DOLLAR varvar",
- /* 133 */ "indexdef ::= DOT DOLLAR varvar AT ID",
- /* 134 */ "indexdef ::= DOT ID",
- /* 135 */ "indexdef ::= DOT INTEGER",
- /* 136 */ "indexdef ::= DOT LDEL expr RDEL",
- /* 137 */ "indexdef ::= OPENB ID CLOSEB",
- /* 138 */ "indexdef ::= OPENB ID DOT ID CLOSEB",
- /* 139 */ "indexdef ::= OPENB expr CLOSEB",
- /* 140 */ "indexdef ::= OPENB CLOSEB",
- /* 141 */ "varvar ::= varvarele",
- /* 142 */ "varvar ::= varvar varvarele",
- /* 143 */ "varvarele ::= ID",
- /* 144 */ "varvarele ::= LDEL expr RDEL",
- /* 145 */ "object ::= varindexed objectchain",
- /* 146 */ "objectchain ::= objectelement",
- /* 147 */ "objectchain ::= objectchain objectelement",
- /* 148 */ "objectelement ::= PTR ID arrayindex",
- /* 149 */ "objectelement ::= PTR DOLLAR varvar arrayindex",
- /* 150 */ "objectelement ::= PTR LDEL expr RDEL arrayindex",
- /* 151 */ "objectelement ::= PTR ID LDEL expr RDEL arrayindex",
- /* 152 */ "objectelement ::= PTR method",
- /* 153 */ "function ::= ID OPENP params CLOSEP",
- /* 154 */ "method ::= ID OPENP params CLOSEP",
- /* 155 */ "method ::= DOLLAR ID OPENP params CLOSEP",
- /* 156 */ "params ::= params COMMA expr",
- /* 157 */ "params ::= expr",
- /* 158 */ "params ::=",
- /* 159 */ "modifierlist ::= modifierlist modifier modparameters",
- /* 160 */ "modifierlist ::= modifier modparameters",
- /* 161 */ "modifier ::= VERT AT ID",
- /* 162 */ "modifier ::= VERT ID",
- /* 163 */ "modparameters ::= modparameters modparameter",
- /* 164 */ "modparameters ::=",
- /* 165 */ "modparameter ::= COLON value",
- /* 166 */ "modparameter ::= COLON array",
- /* 167 */ "static_class_access ::= method",
- /* 168 */ "static_class_access ::= method objectchain",
- /* 169 */ "static_class_access ::= ID",
- /* 170 */ "static_class_access ::= DOLLAR ID arrayindex",
- /* 171 */ "static_class_access ::= DOLLAR ID arrayindex objectchain",
- /* 172 */ "ifcond ::= EQUALS",
- /* 173 */ "ifcond ::= NOTEQUALS",
- /* 174 */ "ifcond ::= GREATERTHAN",
- /* 175 */ "ifcond ::= LESSTHAN",
- /* 176 */ "ifcond ::= GREATEREQUAL",
- /* 177 */ "ifcond ::= LESSEQUAL",
- /* 178 */ "ifcond ::= IDENTITY",
- /* 179 */ "ifcond ::= NONEIDENTITY",
- /* 180 */ "ifcond ::= MOD",
- /* 181 */ "lop ::= LAND",
- /* 182 */ "lop ::= LOR",
- /* 183 */ "lop ::= LXOR",
- /* 184 */ "array ::= OPENB arrayelements CLOSEB",
- /* 185 */ "arrayelements ::= arrayelement",
- /* 186 */ "arrayelements ::= arrayelements COMMA arrayelement",
- /* 187 */ "arrayelements ::=",
- /* 188 */ "arrayelement ::= value APTR expr",
- /* 189 */ "arrayelement ::= ID APTR expr",
- /* 190 */ "arrayelement ::= expr",
- /* 191 */ "doublequoted_with_quotes ::= QUOTE QUOTE",
- /* 192 */ "doublequoted_with_quotes ::= QUOTE doublequoted QUOTE",
- /* 193 */ "doublequoted ::= doublequoted doublequotedcontent",
- /* 194 */ "doublequoted ::= doublequotedcontent",
- /* 195 */ "doublequotedcontent ::= BACKTICK variable BACKTICK",
- /* 196 */ "doublequotedcontent ::= BACKTICK expr BACKTICK",
- /* 197 */ "doublequotedcontent ::= DOLLARID",
- /* 198 */ "doublequotedcontent ::= LDEL variable RDEL",
- /* 199 */ "doublequotedcontent ::= LDEL expr RDEL",
- /* 200 */ "doublequotedcontent ::= smartytag",
- /* 201 */ "doublequotedcontent ::= TEXT",
- /* 202 */ "optspace ::= SPACE",
- /* 203 */ "optspace ::=",
- );
-
- function tokenName($tokenType)
+ public $yyTokenName = array('$', 'VERT', 'COLON', 'PHP', 'NOCACHE', 'TEXT', 'STRIPON', 'STRIPOFF', 'LITERALSTART',
+ 'LITERALEND', 'LITERAL', 'RDEL', 'SIMPELOUTPUT', 'LDEL', 'DOLLARID', 'EQUAL',
+ 'SIMPLETAG', 'ID', 'PTR', 'LDELIF', 'LDELFOR', 'SEMICOLON', 'INCDEC', 'TO', 'STEP',
+ 'LDELFOREACH', 'SPACE', 'AS', 'APTR', 'LDELSETFILTER', 'SMARTYBLOCKCHILDPARENT',
+ 'CLOSETAG', 'LDELSLASH', 'ATTR', 'INTEGER', 'COMMA', 'OPENP', 'CLOSEP', 'MATH',
+ 'UNIMATH', 'ISIN', 'INSTANCEOF', 'QMARK', 'NOT', 'TYPECAST', 'HEX', 'DOT',
+ 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'NAMESPACE', 'AT', 'HATCH', 'OPENB', 'CLOSEB',
+ 'DOLLAR', 'LOGOP', 'TLOGOP', 'SINGLECOND', 'QUOTE', 'BACKTICK', 'error', 'start',
+ 'template', 'template_element', 'smartytag', 'literal', 'text_content',
+ 'literal_elements', 'literal_element', 'tag', 'variable', 'attributes', 'value', 'expr',
+ 'varindexed', 'modifierlist', 'statement', 'statements', 'foraction', 'varvar',
+ 'modparameters', 'attribute', 'ternary', 'array', 'lop', 'scond', 'ns1', 'function',
+ 'doublequoted_with_quotes', 'static_class_access', 'object', 'arrayindex', 'indexdef',
+ 'varvarele', 'objectchain', 'objectelement', 'method', 'params', 'modifier',
+ 'modparameter', 'arrayelements', 'arrayelement', 'doublequoted',
+ 'doublequotedcontent',);
+
+ public static $yyRuleName = array('start ::= template', 'template ::= template_element',
+ 'template ::= template template_element', 'template ::=',
+ 'template_element ::= smartytag', 'template_element ::= literal',
+ 'template_element ::= PHP', 'template_element ::= NOCACHE',
+ 'template_element ::= text_content', 'text_content ::= TEXT',
+ 'text_content ::= text_content TEXT', 'template_element ::= STRIPON',
+ 'template_element ::= STRIPOFF', 'literal ::= LITERALSTART LITERALEND',
+ 'literal ::= LITERALSTART literal_elements LITERALEND',
+ 'literal_elements ::= literal_elements literal_element', 'literal_elements ::=',
+ 'literal_element ::= literal', 'literal_element ::= LITERAL',
+ 'smartytag ::= tag RDEL', 'smartytag ::= SIMPELOUTPUT', 'tag ::= LDEL variable',
+ 'tag ::= LDEL variable attributes', 'tag ::= LDEL value',
+ 'tag ::= LDEL value attributes', 'tag ::= LDEL expr',
+ 'tag ::= LDEL expr attributes', 'tag ::= LDEL DOLLARID EQUAL value',
+ 'tag ::= LDEL DOLLARID EQUAL expr', 'tag ::= LDEL DOLLARID EQUAL expr attributes',
+ 'tag ::= LDEL varindexed EQUAL expr attributes', 'smartytag ::= SIMPLETAG',
+ 'tag ::= LDEL ID attributes', 'tag ::= LDEL ID',
+ 'tag ::= LDEL ID modifierlist attributes', 'tag ::= LDEL ID PTR ID attributes',
+ 'tag ::= LDEL ID PTR ID modifierlist attributes', 'tag ::= LDELIF expr',
+ 'tag ::= LDELIF expr attributes', 'tag ::= LDELIF statement',
+ 'tag ::= LDELIF statement attributes',
+ 'tag ::= LDELFOR statements SEMICOLON expr SEMICOLON varindexed foraction attributes',
+ 'foraction ::= EQUAL expr', 'foraction ::= INCDEC',
+ 'tag ::= LDELFOR statement TO expr attributes',
+ 'tag ::= LDELFOR statement TO expr STEP expr attributes',
+ 'tag ::= LDELFOREACH attributes',
+ 'tag ::= LDELFOREACH SPACE value AS varvar attributes',
+ 'tag ::= LDELFOREACH SPACE value AS varvar APTR varvar attributes',
+ 'tag ::= LDELFOREACH SPACE expr AS varvar attributes',
+ 'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes',
+ 'tag ::= LDELSETFILTER ID modparameters',
+ 'tag ::= LDELSETFILTER ID modparameters modifierlist',
+ 'tag ::= LDEL SMARTYBLOCKCHILDPARENT', 'smartytag ::= CLOSETAG',
+ 'tag ::= LDELSLASH ID', 'tag ::= LDELSLASH ID modifierlist',
+ 'tag ::= LDELSLASH ID PTR ID', 'tag ::= LDELSLASH ID PTR ID modifierlist',
+ 'attributes ::= attributes attribute', 'attributes ::= attribute',
+ 'attributes ::=', 'attribute ::= SPACE ID EQUAL ID', 'attribute ::= ATTR expr',
+ 'attribute ::= ATTR value', 'attribute ::= SPACE ID', 'attribute ::= SPACE expr',
+ 'attribute ::= SPACE value', 'attribute ::= SPACE INTEGER EQUAL expr',
+ 'statements ::= statement', 'statements ::= statements COMMA statement',
+ 'statement ::= DOLLARID EQUAL INTEGER', 'statement ::= DOLLARID EQUAL expr',
+ 'statement ::= varindexed EQUAL expr', 'statement ::= OPENP statement CLOSEP',
+ 'expr ::= value', 'expr ::= ternary', 'expr ::= DOLLARID COLON ID',
+ 'expr ::= expr MATH value', 'expr ::= expr UNIMATH value', 'expr ::= array',
+ 'expr ::= expr modifierlist', 'expr ::= expr lop expr', 'expr ::= expr scond',
+ 'expr ::= expr ISIN array', 'expr ::= expr ISIN value',
+ 'expr ::= variable INSTANCEOF ns1', 'expr ::= variable INSTANCEOF variable',
+ 'ternary ::= OPENP expr CLOSEP QMARK DOLLARID COLON expr',
+ 'ternary ::= OPENP expr CLOSEP QMARK expr COLON expr', 'value ::= variable',
+ 'value ::= UNIMATH value', 'value ::= NOT value', 'value ::= TYPECAST value',
+ 'value ::= variable INCDEC', 'value ::= HEX', 'value ::= INTEGER',
+ 'value ::= INTEGER DOT INTEGER', 'value ::= INTEGER DOT', 'value ::= DOT INTEGER',
+ 'value ::= ID', 'value ::= function', 'value ::= OPENP expr CLOSEP',
+ 'value ::= SINGLEQUOTESTRING', 'value ::= doublequoted_with_quotes',
+ 'value ::= varindexed DOUBLECOLON static_class_access', 'value ::= smartytag',
+ 'value ::= value modifierlist', 'value ::= NAMESPACE',
+ 'value ::= ns1 DOUBLECOLON static_class_access', 'ns1 ::= ID',
+ 'ns1 ::= NAMESPACE', 'variable ::= DOLLARID', 'variable ::= varindexed',
+ 'variable ::= varvar AT ID', 'variable ::= object', 'variable ::= HATCH ID HATCH',
+ 'variable ::= HATCH ID HATCH arrayindex', 'variable ::= HATCH variable HATCH',
+ 'variable ::= HATCH variable HATCH arrayindex',
+ 'varindexed ::= DOLLARID arrayindex', 'varindexed ::= varvar arrayindex',
+ 'arrayindex ::= arrayindex indexdef', 'arrayindex ::=',
+ 'indexdef ::= DOT DOLLARID', 'indexdef ::= DOT varvar',
+ 'indexdef ::= DOT varvar AT ID', 'indexdef ::= DOT ID',
+ 'indexdef ::= DOT INTEGER', 'indexdef ::= DOT LDEL expr RDEL',
+ 'indexdef ::= OPENB ID CLOSEB', 'indexdef ::= OPENB ID DOT ID CLOSEB',
+ 'indexdef ::= OPENB SINGLEQUOTESTRING CLOSEB',
+ 'indexdef ::= OPENB INTEGER CLOSEB', 'indexdef ::= OPENB DOLLARID CLOSEB',
+ 'indexdef ::= OPENB variable CLOSEB', 'indexdef ::= OPENB value CLOSEB',
+ 'indexdef ::= OPENB expr CLOSEB', 'indexdef ::= OPENB CLOSEB',
+ 'varvar ::= DOLLARID', 'varvar ::= DOLLAR', 'varvar ::= varvar varvarele',
+ 'varvarele ::= ID', 'varvarele ::= SIMPELOUTPUT', 'varvarele ::= LDEL expr RDEL',
+ 'object ::= varindexed objectchain', 'objectchain ::= objectelement',
+ 'objectchain ::= objectchain objectelement',
+ 'objectelement ::= PTR ID arrayindex', 'objectelement ::= PTR varvar arrayindex',
+ 'objectelement ::= PTR LDEL expr RDEL arrayindex',
+ 'objectelement ::= PTR ID LDEL expr RDEL arrayindex',
+ 'objectelement ::= PTR method', 'function ::= ns1 OPENP params CLOSEP',
+ 'method ::= ID OPENP params CLOSEP', 'method ::= DOLLARID OPENP params CLOSEP',
+ 'params ::= params COMMA expr', 'params ::= expr', 'params ::=',
+ 'modifierlist ::= modifierlist modifier modparameters',
+ 'modifierlist ::= modifier modparameters', 'modifier ::= VERT AT ID',
+ 'modifier ::= VERT ID', 'modparameters ::= modparameters modparameter',
+ 'modparameters ::=', 'modparameter ::= COLON value',
+ 'modparameter ::= COLON array', 'static_class_access ::= method',
+ 'static_class_access ::= method objectchain', 'static_class_access ::= ID',
+ 'static_class_access ::= DOLLARID arrayindex',
+ 'static_class_access ::= DOLLARID arrayindex objectchain', 'lop ::= LOGOP',
+ 'lop ::= TLOGOP', 'scond ::= SINGLECOND', 'array ::= OPENB arrayelements CLOSEB',
+ 'arrayelements ::= arrayelement',
+ 'arrayelements ::= arrayelements COMMA arrayelement', 'arrayelements ::=',
+ 'arrayelement ::= value APTR expr', 'arrayelement ::= ID APTR expr',
+ 'arrayelement ::= expr', 'doublequoted_with_quotes ::= QUOTE QUOTE',
+ 'doublequoted_with_quotes ::= QUOTE doublequoted QUOTE',
+ 'doublequoted ::= doublequoted doublequotedcontent',
+ 'doublequoted ::= doublequotedcontent',
+ 'doublequotedcontent ::= BACKTICK variable BACKTICK',
+ 'doublequotedcontent ::= BACKTICK expr BACKTICK',
+ 'doublequotedcontent ::= DOLLARID', 'doublequotedcontent ::= LDEL variable RDEL',
+ 'doublequotedcontent ::= LDEL expr RDEL', 'doublequotedcontent ::= smartytag',
+ 'doublequotedcontent ::= TEXT',);
+
+ public function tokenName($tokenType)
{
if ($tokenType === 0) {
return 'End of Input';
}
if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) {
- return $this->yyTokenName[$tokenType];
+ return $this->yyTokenName[ $tokenType ];
} else {
return "Unknown";
}
}
- static function yy_destructor($yymajor, $yypminor)
+ public static function yy_destructor($yymajor, $yypminor)
{
switch ($yymajor) {
- default: break; /* If no destructor action specified: do nothing */
+ default:
+ break; /* If no destructor action specified: do nothing */
}
}
- function yy_pop_parser_stack()
+ public function yy_pop_parser_stack()
{
- if (!count($this->yystack)) {
+ if (empty($this->yystack)) {
return;
}
$yytos = array_pop($this->yystack);
- if (self::$yyTraceFILE && $this->yyidx >= 0) {
- fwrite(self::$yyTraceFILE,
- self::$yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
- "\n");
+ if ($this->yyTraceFILE && $this->yyidx >= 0) {
+ fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[ $yytos->major ] . "\n");
}
$yymajor = $yytos->major;
self::yy_destructor($yymajor, $yytos->minor);
- $this->yyidx--;
+ $this->yyidx --;
+
return $yymajor;
}
- function __destruct()
+ public function __destruct()
{
while ($this->yystack !== Array()) {
$this->yy_pop_parser_stack();
}
- if (is_resource(self::$yyTraceFILE)) {
- fclose(self::$yyTraceFILE);
+ if (is_resource($this->yyTraceFILE)) {
+ fclose($this->yyTraceFILE);
}
}
- function yy_get_expected_tokens($token)
+ public function yy_get_expected_tokens($token)
{
- $state = $this->yystack[$this->yyidx]->stateno;
- $expected = self::$yyExpectedTokens[$state];
- if (in_array($token, self::$yyExpectedTokens[$state], true)) {
- return $expected;
+ static $res3 = array();
+ static $res4 = array();
+ $state = $this->yystack[ $this->yyidx ]->stateno;
+ $expected = self::$yyExpectedTokens[ $state ];
+ if (isset($res3[ $state ][ $token ])) {
+ if ($res3[ $state ][ $token ]) {
+ return $expected;
+ }
+ } else {
+ if ($res3[ $state ][ $token ] = in_array($token, self::$yyExpectedTokens[ $state ], true)) {
+ return $expected;
+ }
}
$stack = $this->yystack;
$yyidx = $this->yyidx;
@@ -1529,7 +1082,7 @@ static public $yy_action = array(
// reduce action
$done = 0;
do {
- if ($done++ == 100) {
+ if ($done ++ == 100) {
$this->yyidx = $yyidx;
$this->yystack = $stack;
// too much recursion prevents proper detection
@@ -1537,26 +1090,34 @@ static public $yy_action = array(
return array_unique($expected);
}
$yyruleno = $yyact - self::YYNSTATE;
- $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs'];
- $nextstate = $this->yy_find_reduce_action(
- $this->yystack[$this->yyidx]->stateno,
- self::$yyRuleInfo[$yyruleno]['lhs']);
- if (isset(self::$yyExpectedTokens[$nextstate])) {
- $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
- if (in_array($token,
- self::$yyExpectedTokens[$nextstate], true)) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return array_unique($expected);
+ $this->yyidx -= self::$yyRuleInfo[ $yyruleno ][ 1 ];
+ $nextstate = $this->yy_find_reduce_action($this->yystack[ $this->yyidx ]->stateno,
+ self::$yyRuleInfo[ $yyruleno ][ 0 ]);
+ if (isset(self::$yyExpectedTokens[ $nextstate ])) {
+ $expected = array_merge($expected, self::$yyExpectedTokens[ $nextstate ]);
+ if (isset($res4[ $nextstate ][ $token ])) {
+ if ($res4[ $nextstate ][ $token ]) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return array_unique($expected);
+ }
+ } else {
+ if ($res4[ $nextstate ][ $token ] =
+ in_array($token, self::$yyExpectedTokens[ $nextstate ], true)
+ ) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return array_unique($expected);
+ }
}
}
if ($nextstate < self::YYNSTATE) {
// we need to shift a non-terminal
- $this->yyidx++;
+ $this->yyidx ++;
$x = new TP_yyStackEntry;
$x->stateno = $nextstate;
- $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
- $this->yystack[$this->yyidx] = $x;
+ $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ];
+ $this->yystack[ $this->yyidx ] = $x;
continue 2;
} elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) {
$this->yyidx = $yyidx;
@@ -1577,19 +1138,28 @@ static public $yy_action = array(
}
break;
} while (true);
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+
return array_unique($expected);
}
- function yy_is_expected_token($token)
+ public function yy_is_expected_token($token)
{
+ static $res = array();
+ static $res2 = array();
if ($token === 0) {
return true; // 0 is not part of this
}
- $state = $this->yystack[$this->yyidx]->stateno;
- if (in_array($token, self::$yyExpectedTokens[$state], true)) {
- return true;
+ $state = $this->yystack[ $this->yyidx ]->stateno;
+ if (isset($res[ $state ][ $token ])) {
+ if ($res[ $state ][ $token ]) {
+ return true;
+ }
+ } else {
+ if ($res[ $state ][ $token ] = in_array($token, self::$yyExpectedTokens[ $state ], true)) {
+ return true;
+ }
}
$stack = $this->yystack;
$yyidx = $this->yyidx;
@@ -1599,7 +1169,7 @@ static public $yy_action = array(
// reduce action
$done = 0;
do {
- if ($done++ == 100) {
+ if ($done ++ == 100) {
$this->yyidx = $yyidx;
$this->yystack = $stack;
// too much recursion prevents proper detection
@@ -1607,23 +1177,31 @@ static public $yy_action = array(
return true;
}
$yyruleno = $yyact - self::YYNSTATE;
- $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs'];
- $nextstate = $this->yy_find_reduce_action(
- $this->yystack[$this->yyidx]->stateno,
- self::$yyRuleInfo[$yyruleno]['lhs']);
- if (isset(self::$yyExpectedTokens[$nextstate]) &&
- in_array($token, self::$yyExpectedTokens[$nextstate], true)) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return true;
+ $this->yyidx -= self::$yyRuleInfo[ $yyruleno ][ 1 ];
+ $nextstate = $this->yy_find_reduce_action($this->yystack[ $this->yyidx ]->stateno,
+ self::$yyRuleInfo[ $yyruleno ][ 0 ]);
+ if (isset($res2[ $nextstate ][ $token ])) {
+ if ($res2[ $nextstate ][ $token ]) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return true;
+ }
+ } else {
+ if ($res2[ $nextstate ][ $token ] = (isset(self::$yyExpectedTokens[ $nextstate ]) &&
+ in_array($token, self::$yyExpectedTokens[ $nextstate ], true))
+ ) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return true;
+ }
}
if ($nextstate < self::YYNSTATE) {
// we need to shift a non-terminal
- $this->yyidx++;
+ $this->yyidx ++;
$x = new TP_yyStackEntry;
$x->stateno = $nextstate;
- $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
- $this->yystack[$this->yyidx] = $x;
+ $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ];
+ $this->yystack[ $this->yyidx ] = $x;
continue 2;
} elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) {
$this->yyidx = $yyidx;
@@ -1650,1473 +1228,1481 @@ static public $yy_action = array(
} while (true);
$this->yyidx = $yyidx;
$this->yystack = $stack;
+
return true;
}
- function yy_find_shift_action($iLookAhead)
+ public function yy_find_shift_action($iLookAhead)
{
- $stateno = $this->yystack[$this->yyidx]->stateno;
+ $stateno = $this->yystack[ $this->yyidx ]->stateno;
/* if ($this->yyidx < 0) return self::YY_NO_ACTION; */
- if (!isset(self::$yy_shift_ofst[$stateno])) {
+ if (!isset(self::$yy_shift_ofst[ $stateno ])) {
// no shift actions
- return self::$yy_default[$stateno];
+ return self::$yy_default[ $stateno ];
}
- $i = self::$yy_shift_ofst[$stateno];
+ $i = self::$yy_shift_ofst[ $stateno ];
if ($i === self::YY_SHIFT_USE_DFLT) {
- return self::$yy_default[$stateno];
+ return self::$yy_default[ $stateno ];
}
if ($iLookAhead == self::YYNOCODE) {
return self::YY_NO_ACTION;
}
$i += $iLookAhead;
- if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
- self::$yy_lookahead[$i] != $iLookAhead) {
- if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
- && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) {
- if (self::$yyTraceFILE) {
- fwrite(self::$yyTraceFILE, self::$yyTracePrompt . "FALLBACK " .
- $this->yyTokenName[$iLookAhead] . " => " .
- $this->yyTokenName[$iFallback] . "\n");
+ if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[ $i ] != $iLookAhead) {
+ if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback) &&
+ ($iFallback = self::$yyFallback[ $iLookAhead ]) != 0
+ ) {
+ if ($this->yyTraceFILE) {
+ fwrite($this->yyTraceFILE,
+ $this->yyTracePrompt . "FALLBACK " . $this->yyTokenName[ $iLookAhead ] . " => " .
+ $this->yyTokenName[ $iFallback ] . "\n");
}
+
return $this->yy_find_shift_action($iFallback);
}
- return self::$yy_default[$stateno];
+
+ return self::$yy_default[ $stateno ];
} else {
- return self::$yy_action[$i];
+ return self::$yy_action[ $i ];
}
}
- function yy_find_reduce_action($stateno, $iLookAhead)
+ public function yy_find_reduce_action($stateno, $iLookAhead)
{
/* $stateno = $this->yystack[$this->yyidx]->stateno; */
- if (!isset(self::$yy_reduce_ofst[$stateno])) {
- return self::$yy_default[$stateno];
+ if (!isset(self::$yy_reduce_ofst[ $stateno ])) {
+ return self::$yy_default[ $stateno ];
}
- $i = self::$yy_reduce_ofst[$stateno];
+ $i = self::$yy_reduce_ofst[ $stateno ];
if ($i == self::YY_REDUCE_USE_DFLT) {
- return self::$yy_default[$stateno];
+ return self::$yy_default[ $stateno ];
}
if ($iLookAhead == self::YYNOCODE) {
return self::YY_NO_ACTION;
}
$i += $iLookAhead;
- if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
- self::$yy_lookahead[$i] != $iLookAhead) {
- return self::$yy_default[$stateno];
+ if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[ $i ] != $iLookAhead) {
+ return self::$yy_default[ $stateno ];
} else {
- return self::$yy_action[$i];
+ return self::$yy_action[ $i ];
}
}
- function yy_shift($yyNewState, $yyMajor, $yypMinor)
+ public function yy_shift($yyNewState, $yyMajor, $yypMinor)
{
- $this->yyidx++;
+ $this->yyidx ++;
if ($this->yyidx >= self::YYSTACKDEPTH) {
- $this->yyidx--;
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sStack Overflow!\n", self::$yyTracePrompt);
+ $this->yyidx --;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
}
while ($this->yyidx >= 0) {
$this->yy_pop_parser_stack();
}
-#line 84 "smarty_internal_templateparser.y"
+ #line 214 "../smarty/lexer/smarty_internal_templateparser.y"
+
+ $this->internalError = true;
+ $this->compiler->trigger_template_error("Stack overflow in template parser");
- $this->internalError = true;
- $this->compiler->trigger_template_error("Stack overflow in template parser");
-#line 1724 "smarty_internal_templateparser.php"
return;
}
$yytos = new TP_yyStackEntry;
$yytos->stateno = $yyNewState;
$yytos->major = $yyMajor;
$yytos->minor = $yypMinor;
- array_push($this->yystack, $yytos);
- if (self::$yyTraceFILE && $this->yyidx > 0) {
- fprintf(self::$yyTraceFILE, "%sShift %d\n", self::$yyTracePrompt,
- $yyNewState);
- fprintf(self::$yyTraceFILE, "%sStack:", self::$yyTracePrompt);
- for($i = 1; $i <= $this->yyidx; $i++) {
- fprintf(self::$yyTraceFILE, " %s",
- $this->yyTokenName[$this->yystack[$i]->major]);
+ $this->yystack[] = $yytos;
+ if ($this->yyTraceFILE && $this->yyidx > 0) {
+ fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt, $yyNewState);
+ fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
+ for ($i = 1; $i <= $this->yyidx; $i ++) {
+ fprintf($this->yyTraceFILE, " %s", $this->yyTokenName[ $this->yystack[ $i ]->major ]);
}
- fwrite(self::$yyTraceFILE,"\n");
+ fwrite($this->yyTraceFILE, "\n");
+ }
+ }
+
+ public static $yyRuleInfo = array(array(0 => 61, 1 => 1), array(0 => 62, 1 => 1), array(0 => 62, 1 => 2),
+ array(0 => 62, 1 => 0), array(0 => 63, 1 => 1), array(0 => 63, 1 => 1),
+ array(0 => 63, 1 => 1), array(0 => 63, 1 => 1), array(0 => 63, 1 => 1),
+ array(0 => 66, 1 => 1), array(0 => 66, 1 => 2), array(0 => 63, 1 => 1),
+ array(0 => 63, 1 => 1), array(0 => 65, 1 => 2), array(0 => 65, 1 => 3),
+ array(0 => 67, 1 => 2), array(0 => 67, 1 => 0), array(0 => 68, 1 => 1),
+ array(0 => 68, 1 => 1), array(0 => 64, 1 => 2), array(0 => 64, 1 => 1),
+ array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), array(0 => 69, 1 => 2),
+ array(0 => 69, 1 => 3), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3),
+ array(0 => 69, 1 => 4), array(0 => 69, 1 => 4), array(0 => 69, 1 => 5),
+ array(0 => 69, 1 => 5), array(0 => 64, 1 => 1), array(0 => 69, 1 => 3),
+ array(0 => 69, 1 => 2), array(0 => 69, 1 => 4), array(0 => 69, 1 => 5),
+ array(0 => 69, 1 => 6), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3),
+ array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), array(0 => 69, 1 => 8),
+ array(0 => 78, 1 => 2), array(0 => 78, 1 => 1), array(0 => 69, 1 => 5),
+ array(0 => 69, 1 => 7), array(0 => 69, 1 => 2), array(0 => 69, 1 => 6),
+ array(0 => 69, 1 => 8), array(0 => 69, 1 => 6), array(0 => 69, 1 => 8),
+ array(0 => 69, 1 => 3), array(0 => 69, 1 => 4), array(0 => 69, 1 => 2),
+ array(0 => 64, 1 => 1), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3),
+ array(0 => 69, 1 => 4), array(0 => 69, 1 => 5), array(0 => 71, 1 => 2),
+ array(0 => 71, 1 => 1), array(0 => 71, 1 => 0), array(0 => 81, 1 => 4),
+ array(0 => 81, 1 => 2), array(0 => 81, 1 => 2), array(0 => 81, 1 => 2),
+ array(0 => 81, 1 => 2), array(0 => 81, 1 => 2), array(0 => 81, 1 => 4),
+ array(0 => 77, 1 => 1), array(0 => 77, 1 => 3), array(0 => 76, 1 => 3),
+ array(0 => 76, 1 => 3), array(0 => 76, 1 => 3), array(0 => 76, 1 => 3),
+ array(0 => 73, 1 => 1), array(0 => 73, 1 => 1), array(0 => 73, 1 => 3),
+ array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), array(0 => 73, 1 => 1),
+ array(0 => 73, 1 => 2), array(0 => 73, 1 => 3), array(0 => 73, 1 => 2),
+ array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), array(0 => 73, 1 => 3),
+ array(0 => 73, 1 => 3), array(0 => 82, 1 => 7), array(0 => 82, 1 => 7),
+ array(0 => 72, 1 => 1), array(0 => 72, 1 => 2), array(0 => 72, 1 => 2),
+ array(0 => 72, 1 => 2), array(0 => 72, 1 => 2), array(0 => 72, 1 => 1),
+ array(0 => 72, 1 => 1), array(0 => 72, 1 => 3), array(0 => 72, 1 => 2),
+ array(0 => 72, 1 => 2), array(0 => 72, 1 => 1), array(0 => 72, 1 => 1),
+ array(0 => 72, 1 => 3), array(0 => 72, 1 => 1), array(0 => 72, 1 => 1),
+ array(0 => 72, 1 => 3), array(0 => 72, 1 => 1), array(0 => 72, 1 => 2),
+ array(0 => 72, 1 => 1), array(0 => 72, 1 => 3), array(0 => 86, 1 => 1),
+ array(0 => 86, 1 => 1), array(0 => 70, 1 => 1), array(0 => 70, 1 => 1),
+ array(0 => 70, 1 => 3), array(0 => 70, 1 => 1), array(0 => 70, 1 => 3),
+ array(0 => 70, 1 => 4), array(0 => 70, 1 => 3), array(0 => 70, 1 => 4),
+ array(0 => 74, 1 => 2), array(0 => 74, 1 => 2), array(0 => 91, 1 => 2),
+ array(0 => 91, 1 => 0), array(0 => 92, 1 => 2), array(0 => 92, 1 => 2),
+ array(0 => 92, 1 => 4), array(0 => 92, 1 => 2), array(0 => 92, 1 => 2),
+ array(0 => 92, 1 => 4), array(0 => 92, 1 => 3), array(0 => 92, 1 => 5),
+ array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), array(0 => 92, 1 => 3),
+ array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), array(0 => 92, 1 => 3),
+ array(0 => 92, 1 => 2), array(0 => 79, 1 => 1), array(0 => 79, 1 => 1),
+ array(0 => 79, 1 => 2), array(0 => 93, 1 => 1), array(0 => 93, 1 => 1),
+ array(0 => 93, 1 => 3), array(0 => 90, 1 => 2), array(0 => 94, 1 => 1),
+ array(0 => 94, 1 => 2), array(0 => 95, 1 => 3), array(0 => 95, 1 => 3),
+ array(0 => 95, 1 => 5), array(0 => 95, 1 => 6), array(0 => 95, 1 => 2),
+ array(0 => 87, 1 => 4), array(0 => 96, 1 => 4), array(0 => 96, 1 => 4),
+ array(0 => 97, 1 => 3), array(0 => 97, 1 => 1), array(0 => 97, 1 => 0),
+ array(0 => 75, 1 => 3), array(0 => 75, 1 => 2), array(0 => 98, 1 => 3),
+ array(0 => 98, 1 => 2), array(0 => 80, 1 => 2), array(0 => 80, 1 => 0),
+ array(0 => 99, 1 => 2), array(0 => 99, 1 => 2), array(0 => 89, 1 => 1),
+ array(0 => 89, 1 => 2), array(0 => 89, 1 => 1), array(0 => 89, 1 => 2),
+ array(0 => 89, 1 => 3), array(0 => 84, 1 => 1), array(0 => 84, 1 => 1),
+ array(0 => 85, 1 => 1), array(0 => 83, 1 => 3), array(0 => 100, 1 => 1),
+ array(0 => 100, 1 => 3), array(0 => 100, 1 => 0), array(0 => 101, 1 => 3),
+ array(0 => 101, 1 => 3), array(0 => 101, 1 => 1), array(0 => 88, 1 => 2),
+ array(0 => 88, 1 => 3), array(0 => 102, 1 => 2), array(0 => 102, 1 => 1),
+ array(0 => 103, 1 => 3), array(0 => 103, 1 => 3), array(0 => 103, 1 => 1),
+ array(0 => 103, 1 => 3), array(0 => 103, 1 => 3), array(0 => 103, 1 => 1),
+ array(0 => 103, 1 => 1),);
+
+ public static $yyReduceMap = array(0 => 0, 1 => 1, 2 => 2, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9,
+ 17 => 9, 18 => 9, 43 => 9, 66 => 9, 67 => 9, 75 => 9, 76 => 9, 80 => 9, 90 => 9,
+ 95 => 9, 96 => 9, 101 => 9, 103 => 9, 104 => 9, 108 => 9, 110 => 9, 115 => 9,
+ 176 => 9, 181 => 9, 10 => 10, 11 => 11, 12 => 12, 13 => 13, 16 => 13, 14 => 14,
+ 74 => 14, 15 => 15, 91 => 15, 93 => 15, 94 => 15, 122 => 15, 19 => 19, 20 => 20,
+ 21 => 21, 23 => 21, 25 => 21, 22 => 22, 24 => 22, 26 => 22, 27 => 27, 28 => 27,
+ 29 => 29, 30 => 30, 31 => 31, 32 => 32, 33 => 33, 34 => 34, 35 => 35, 36 => 36,
+ 37 => 37, 38 => 38, 40 => 38, 39 => 39, 41 => 41, 42 => 42, 44 => 44, 45 => 45,
+ 46 => 46, 47 => 47, 49 => 47, 48 => 48, 50 => 48, 51 => 51, 52 => 52, 53 => 53,
+ 54 => 54, 55 => 55, 56 => 56, 57 => 57, 58 => 58, 59 => 59, 60 => 60, 69 => 60,
+ 157 => 60, 161 => 60, 165 => 60, 166 => 60, 61 => 61, 158 => 61, 164 => 61,
+ 62 => 62, 63 => 63, 64 => 63, 65 => 65, 142 => 65, 68 => 68, 70 => 70, 71 => 71,
+ 72 => 71, 73 => 73, 77 => 77, 78 => 78, 79 => 78, 81 => 81, 107 => 81, 82 => 82,
+ 83 => 83, 84 => 84, 85 => 85, 86 => 86, 87 => 86, 88 => 88, 89 => 89, 92 => 92,
+ 97 => 97, 98 => 98, 99 => 99, 100 => 100, 102 => 102, 105 => 105, 106 => 106,
+ 109 => 109, 111 => 111, 112 => 112, 113 => 113, 114 => 114, 116 => 116,
+ 117 => 117, 118 => 118, 119 => 119, 120 => 120, 121 => 121, 123 => 123,
+ 178 => 123, 124 => 124, 125 => 125, 126 => 126, 127 => 127, 128 => 128,
+ 129 => 129, 137 => 129, 130 => 130, 131 => 131, 132 => 132, 133 => 132,
+ 135 => 132, 136 => 132, 134 => 134, 138 => 138, 139 => 139, 140 => 140,
+ 182 => 140, 141 => 141, 143 => 143, 144 => 144, 145 => 145, 146 => 146,
+ 147 => 147, 148 => 148, 149 => 149, 150 => 150, 151 => 151, 152 => 152,
+ 153 => 153, 154 => 154, 155 => 155, 156 => 156, 159 => 159, 160 => 160,
+ 162 => 162, 163 => 163, 167 => 167, 168 => 168, 169 => 169, 170 => 170,
+ 171 => 171, 172 => 172, 173 => 173, 174 => 174, 175 => 175, 177 => 177,
+ 179 => 179, 180 => 180, 183 => 183, 184 => 184, 185 => 185, 186 => 186,
+ 187 => 186, 189 => 186, 188 => 188, 190 => 190, 191 => 191, 192 => 192,);
+
+ #line 225 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r0()
+ {
+ $this->root_buffer->prepend_array($this, $this->template_prefix);
+ $this->root_buffer->append_array($this, $this->template_postfix);
+ $this->_retvalue = $this->root_buffer->to_smarty_php($this);
+ }
+
+ #line 235 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r1()
+ {
+ if ($this->yystack[ $this->yyidx + 0 ]->minor != null) {
+ $this->current_buffer->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+ }
+
+ #line 242 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r2()
+ {
+ if ($this->yystack[ $this->yyidx + 0 ]->minor != null) {
+ // because of possible code injection
+ $this->current_buffer->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor);
}
}
- static public $yyRuleInfo = array(
- array( 'lhs' => 82, 'rhs' => 1 ),
- array( 'lhs' => 83, 'rhs' => 1 ),
- array( 'lhs' => 83, 'rhs' => 2 ),
- array( 'lhs' => 83, 'rhs' => 0 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 84, 'rhs' => 1 ),
- array( 'lhs' => 86, 'rhs' => 2 ),
- array( 'lhs' => 86, 'rhs' => 3 ),
- array( 'lhs' => 87, 'rhs' => 2 ),
- array( 'lhs' => 87, 'rhs' => 0 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 88, 'rhs' => 1 ),
- array( 'lhs' => 85, 'rhs' => 3 ),
- array( 'lhs' => 85, 'rhs' => 5 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 5 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 6 ),
- array( 'lhs' => 85, 'rhs' => 6 ),
- array( 'lhs' => 85, 'rhs' => 7 ),
- array( 'lhs' => 85, 'rhs' => 6 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 3 ),
- array( 'lhs' => 85, 'rhs' => 6 ),
- array( 'lhs' => 85, 'rhs' => 5 ),
- array( 'lhs' => 85, 'rhs' => 7 ),
- array( 'lhs' => 85, 'rhs' => 3 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 3 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 12 ),
- array( 'lhs' => 98, 'rhs' => 2 ),
- array( 'lhs' => 98, 'rhs' => 1 ),
- array( 'lhs' => 85, 'rhs' => 6 ),
- array( 'lhs' => 85, 'rhs' => 8 ),
- array( 'lhs' => 85, 'rhs' => 3 ),
- array( 'lhs' => 85, 'rhs' => 8 ),
- array( 'lhs' => 85, 'rhs' => 11 ),
- array( 'lhs' => 85, 'rhs' => 8 ),
- array( 'lhs' => 85, 'rhs' => 11 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 5 ),
- array( 'lhs' => 85, 'rhs' => 1 ),
- array( 'lhs' => 85, 'rhs' => 3 ),
- array( 'lhs' => 85, 'rhs' => 4 ),
- array( 'lhs' => 85, 'rhs' => 5 ),
- array( 'lhs' => 85, 'rhs' => 6 ),
- array( 'lhs' => 91, 'rhs' => 2 ),
- array( 'lhs' => 91, 'rhs' => 1 ),
- array( 'lhs' => 91, 'rhs' => 0 ),
- array( 'lhs' => 100, 'rhs' => 4 ),
- array( 'lhs' => 100, 'rhs' => 2 ),
- array( 'lhs' => 100, 'rhs' => 2 ),
- array( 'lhs' => 100, 'rhs' => 2 ),
- array( 'lhs' => 100, 'rhs' => 2 ),
- array( 'lhs' => 100, 'rhs' => 2 ),
- array( 'lhs' => 100, 'rhs' => 4 ),
- array( 'lhs' => 95, 'rhs' => 1 ),
- array( 'lhs' => 95, 'rhs' => 3 ),
- array( 'lhs' => 94, 'rhs' => 4 ),
- array( 'lhs' => 94, 'rhs' => 3 ),
- array( 'lhs' => 94, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 1 ),
- array( 'lhs' => 92, 'rhs' => 1 ),
- array( 'lhs' => 92, 'rhs' => 4 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 1 ),
- array( 'lhs' => 92, 'rhs' => 2 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 2 ),
- array( 'lhs' => 92, 'rhs' => 2 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 2 ),
- array( 'lhs' => 92, 'rhs' => 2 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 92, 'rhs' => 3 ),
- array( 'lhs' => 101, 'rhs' => 8 ),
- array( 'lhs' => 101, 'rhs' => 7 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 3 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 3 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 3 ),
- array( 'lhs' => 89, 'rhs' => 3 ),
- array( 'lhs' => 89, 'rhs' => 1 ),
- array( 'lhs' => 89, 'rhs' => 2 ),
- array( 'lhs' => 105, 'rhs' => 1 ),
- array( 'lhs' => 105, 'rhs' => 4 ),
- array( 'lhs' => 105, 'rhs' => 1 ),
- array( 'lhs' => 105, 'rhs' => 3 ),
- array( 'lhs' => 105, 'rhs' => 4 ),
- array( 'lhs' => 105, 'rhs' => 3 ),
- array( 'lhs' => 105, 'rhs' => 4 ),
- array( 'lhs' => 93, 'rhs' => 3 ),
- array( 'lhs' => 110, 'rhs' => 2 ),
- array( 'lhs' => 110, 'rhs' => 0 ),
- array( 'lhs' => 111, 'rhs' => 3 ),
- array( 'lhs' => 111, 'rhs' => 5 ),
- array( 'lhs' => 111, 'rhs' => 2 ),
- array( 'lhs' => 111, 'rhs' => 2 ),
- array( 'lhs' => 111, 'rhs' => 4 ),
- array( 'lhs' => 111, 'rhs' => 3 ),
- array( 'lhs' => 111, 'rhs' => 5 ),
- array( 'lhs' => 111, 'rhs' => 3 ),
- array( 'lhs' => 111, 'rhs' => 2 ),
- array( 'lhs' => 97, 'rhs' => 1 ),
- array( 'lhs' => 97, 'rhs' => 2 ),
- array( 'lhs' => 112, 'rhs' => 1 ),
- array( 'lhs' => 112, 'rhs' => 3 ),
- array( 'lhs' => 109, 'rhs' => 2 ),
- array( 'lhs' => 113, 'rhs' => 1 ),
- array( 'lhs' => 113, 'rhs' => 2 ),
- array( 'lhs' => 114, 'rhs' => 3 ),
- array( 'lhs' => 114, 'rhs' => 4 ),
- array( 'lhs' => 114, 'rhs' => 5 ),
- array( 'lhs' => 114, 'rhs' => 6 ),
- array( 'lhs' => 114, 'rhs' => 2 ),
- array( 'lhs' => 106, 'rhs' => 4 ),
- array( 'lhs' => 115, 'rhs' => 4 ),
- array( 'lhs' => 115, 'rhs' => 5 ),
- array( 'lhs' => 116, 'rhs' => 3 ),
- array( 'lhs' => 116, 'rhs' => 1 ),
- array( 'lhs' => 116, 'rhs' => 0 ),
- array( 'lhs' => 90, 'rhs' => 3 ),
- array( 'lhs' => 90, 'rhs' => 2 ),
- array( 'lhs' => 117, 'rhs' => 3 ),
- array( 'lhs' => 117, 'rhs' => 2 ),
- array( 'lhs' => 99, 'rhs' => 2 ),
- array( 'lhs' => 99, 'rhs' => 0 ),
- array( 'lhs' => 118, 'rhs' => 2 ),
- array( 'lhs' => 118, 'rhs' => 2 ),
- array( 'lhs' => 108, 'rhs' => 1 ),
- array( 'lhs' => 108, 'rhs' => 2 ),
- array( 'lhs' => 108, 'rhs' => 1 ),
- array( 'lhs' => 108, 'rhs' => 3 ),
- array( 'lhs' => 108, 'rhs' => 4 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 103, 'rhs' => 1 ),
- array( 'lhs' => 104, 'rhs' => 1 ),
- array( 'lhs' => 104, 'rhs' => 1 ),
- array( 'lhs' => 104, 'rhs' => 1 ),
- array( 'lhs' => 102, 'rhs' => 3 ),
- array( 'lhs' => 119, 'rhs' => 1 ),
- array( 'lhs' => 119, 'rhs' => 3 ),
- array( 'lhs' => 119, 'rhs' => 0 ),
- array( 'lhs' => 120, 'rhs' => 3 ),
- array( 'lhs' => 120, 'rhs' => 3 ),
- array( 'lhs' => 120, 'rhs' => 1 ),
- array( 'lhs' => 107, 'rhs' => 2 ),
- array( 'lhs' => 107, 'rhs' => 3 ),
- array( 'lhs' => 121, 'rhs' => 2 ),
- array( 'lhs' => 121, 'rhs' => 1 ),
- array( 'lhs' => 122, 'rhs' => 3 ),
- array( 'lhs' => 122, 'rhs' => 3 ),
- array( 'lhs' => 122, 'rhs' => 1 ),
- array( 'lhs' => 122, 'rhs' => 3 ),
- array( 'lhs' => 122, 'rhs' => 3 ),
- array( 'lhs' => 122, 'rhs' => 1 ),
- array( 'lhs' => 122, 'rhs' => 1 ),
- array( 'lhs' => 96, 'rhs' => 1 ),
- array( 'lhs' => 96, 'rhs' => 0 ),
- );
-
- static public $yyReduceMap = array(
- 0 => 0,
- 1 => 1,
- 2 => 1,
- 4 => 4,
- 5 => 5,
- 6 => 6,
- 7 => 7,
- 8 => 8,
- 9 => 9,
- 10 => 10,
- 11 => 11,
- 12 => 12,
- 13 => 13,
- 14 => 14,
- 15 => 15,
- 16 => 16,
- 19 => 16,
- 203 => 16,
- 17 => 17,
- 76 => 17,
- 18 => 18,
- 104 => 18,
- 106 => 18,
- 107 => 18,
- 130 => 18,
- 168 => 18,
- 20 => 20,
- 21 => 20,
- 47 => 20,
- 69 => 20,
- 70 => 20,
- 77 => 20,
- 78 => 20,
- 83 => 20,
- 103 => 20,
- 108 => 20,
- 109 => 20,
- 114 => 20,
- 116 => 20,
- 117 => 20,
- 124 => 20,
- 141 => 20,
- 167 => 20,
- 169 => 20,
- 185 => 20,
- 190 => 20,
- 202 => 20,
- 22 => 22,
- 23 => 22,
- 24 => 24,
- 25 => 25,
- 26 => 26,
- 27 => 27,
- 28 => 28,
- 29 => 29,
- 31 => 29,
- 30 => 30,
- 32 => 32,
- 33 => 32,
- 34 => 34,
- 35 => 35,
- 36 => 36,
- 37 => 37,
- 38 => 38,
- 39 => 39,
- 40 => 40,
- 41 => 41,
- 42 => 42,
- 44 => 42,
- 43 => 43,
- 45 => 45,
- 46 => 46,
- 48 => 48,
- 49 => 49,
- 50 => 50,
- 51 => 51,
- 52 => 52,
- 53 => 53,
- 54 => 54,
- 55 => 55,
- 56 => 56,
- 57 => 57,
- 58 => 58,
- 59 => 59,
- 60 => 60,
- 61 => 61,
- 62 => 62,
- 63 => 63,
- 72 => 63,
- 157 => 63,
- 161 => 63,
- 165 => 63,
- 166 => 63,
- 64 => 64,
- 158 => 64,
- 164 => 64,
- 65 => 65,
- 66 => 66,
- 67 => 66,
- 68 => 68,
- 71 => 71,
- 73 => 73,
- 74 => 74,
- 75 => 74,
- 79 => 79,
- 80 => 80,
- 81 => 80,
- 82 => 80,
- 84 => 84,
- 121 => 84,
- 85 => 85,
- 88 => 85,
- 99 => 85,
- 86 => 86,
- 87 => 87,
- 89 => 89,
- 90 => 90,
- 91 => 91,
- 96 => 91,
- 92 => 92,
- 95 => 92,
- 93 => 93,
- 98 => 93,
- 94 => 94,
- 97 => 94,
- 100 => 100,
- 101 => 101,
- 102 => 102,
- 105 => 105,
- 110 => 110,
- 111 => 111,
- 112 => 112,
- 113 => 113,
- 115 => 115,
- 118 => 118,
- 119 => 119,
- 120 => 120,
- 122 => 122,
- 123 => 123,
- 125 => 125,
- 126 => 126,
- 127 => 127,
- 128 => 128,
- 129 => 129,
- 131 => 131,
- 187 => 131,
- 132 => 132,
- 133 => 133,
- 134 => 134,
- 135 => 135,
- 136 => 136,
- 139 => 136,
- 137 => 137,
- 138 => 138,
- 140 => 140,
- 142 => 142,
- 143 => 143,
- 144 => 144,
- 145 => 145,
- 146 => 146,
- 147 => 147,
- 148 => 148,
- 149 => 149,
- 150 => 150,
- 151 => 151,
- 152 => 152,
- 153 => 153,
- 154 => 154,
- 155 => 155,
- 156 => 156,
- 159 => 159,
- 160 => 160,
- 162 => 162,
- 163 => 163,
- 170 => 170,
- 171 => 171,
- 172 => 172,
- 173 => 173,
- 174 => 174,
- 175 => 175,
- 176 => 176,
- 177 => 177,
- 178 => 178,
- 179 => 179,
- 180 => 180,
- 181 => 181,
- 182 => 182,
- 183 => 183,
- 184 => 184,
- 186 => 186,
- 188 => 188,
- 189 => 189,
- 191 => 191,
- 192 => 192,
- 193 => 193,
- 194 => 194,
- 195 => 195,
- 196 => 195,
- 198 => 195,
- 197 => 197,
- 199 => 199,
- 200 => 200,
- 201 => 201,
- );
-#line 95 "smarty_internal_templateparser.y"
- function yy_r0(){
- $this->_retvalue = $this->root_buffer->to_smarty_php();
- }
-#line 2160 "smarty_internal_templateparser.php"
-#line 103 "smarty_internal_templateparser.y"
- function yy_r1(){
- $this->current_buffer->append_subtree($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2165 "smarty_internal_templateparser.php"
-#line 119 "smarty_internal_templateparser.y"
- function yy_r4(){
- if ($this->compiler->has_code) {
- $tmp =''; foreach ($this->compiler->prefix_code as $code) {$tmp.=$code;} $this->compiler->prefix_code=array();
- $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode($tmp.$this->yystack[$this->yyidx + 0]->minor,true));
- } else {
- $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + 0]->minor);
- }
- $this->compiler->has_variable_string = false;
- $this->block_nesting_level = count($this->compiler->_tag_stack);
- }
-#line 2177 "smarty_internal_templateparser.php"
-#line 131 "smarty_internal_templateparser.y"
- function yy_r5(){
- $this->_retvalue = new _smarty_tag($this, '');
- }
-#line 2182 "smarty_internal_templateparser.php"
-#line 136 "smarty_internal_templateparser.y"
- function yy_r6(){
- $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2187 "smarty_internal_templateparser.php"
-#line 141 "smarty_internal_templateparser.y"
- function yy_r7(){
- if ($this->php_handling == Smarty::PHP_PASSTHRU) {
- $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor));
- } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
- $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES));
- } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
- if (!($this->smarty instanceof SmartyBC)) {
- $this->compiler->trigger_template_error (self::Err3);
+ #line 256 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r4()
+ {
+ if ($this->compiler->has_code) {
+ $this->_retvalue = $this->mergePrefixCode($this->yystack[ $this->yyidx + 0 ]->minor);
+ } else {
+ $this->_retvalue = null;
}
- $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('<?php', true));
- } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
- $this->_retvalue = new _smarty_text($this, '');
+ $this->compiler->has_variable_string = false;
+ $this->block_nesting_level = count($this->compiler->_tag_stack);
}
+
+ #line 267 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r5()
+ {
+ $this->_retvalue = new Smarty_Internal_ParseTree_Text($this->yystack[ $this->yyidx + 0 ]->minor);
}
-#line 2203 "smarty_internal_templateparser.php"
-#line 157 "smarty_internal_templateparser.y"
- function yy_r8(){
- if ($this->is_xml) {
+
+ #line 271 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r6()
+ {
+ $code = $this->compiler->compileTag('private_php',
+ array(array('code' => $this->yystack[ $this->yyidx + 0 ]->minor),
+ array('type' => $this->lex->phpType)), array());
+ if ($this->compiler->has_code && !empty($code)) {
+ $tmp = '';
+ foreach ($this->compiler->prefix_code as $code) {
+ $tmp .= $code;
+ }
+ $this->compiler->prefix_code = array();
+ $this->_retvalue =
+ new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp . $code, true));
+ } else {
+ $this->_retvalue = null;
+ }
+ }
+
+ #line 282 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r7()
+ {
$this->compiler->tag_nocache = true;
- $this->is_xml = false;
- $save = $this->template->has_nocache_code;
- $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode("<?php echo '?>';?>\n", $this->compiler, true));
- $this->template->has_nocache_code = $save;
- } elseif ($this->php_handling == Smarty::PHP_PASSTHRU) {
- $this->_retvalue = new _smarty_text($this, '?<?php ?>>');
- } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
- $this->_retvalue = new _smarty_text($this, htmlspecialchars('?>', ENT_QUOTES));
- } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
- $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('?>', true));
- } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
- $this->_retvalue = new _smarty_text($this, '');
- }
- }
-#line 2222 "smarty_internal_templateparser.php"
-#line 176 "smarty_internal_templateparser.y"
- function yy_r9(){
- if ($this->php_handling == Smarty::PHP_PASSTHRU) {
- $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
- } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
- $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES));
- } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
- if ($this->asp_tags) {
- if (!($this->smarty instanceof SmartyBC)) {
- $this->compiler->trigger_template_error (self::Err3);
+ $save = $this->template->compiled->has_nocache_code;
+ $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this,
+ $this->compiler->processNocacheCode("<?php echo '{$this->yystack[$this->yyidx + 0]->minor}';?>\n",
+ $this->compiler,
+ true));
+ $this->template->compiled->has_nocache_code = $save;
+ }
+
+ #line 289 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r8()
+ {
+ $this->_retvalue = $this->compiler->processText($this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ #line 293 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r9()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 297 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r10()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 302 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r11()
+ {
+ $this->strip = true;
+ }
+
+ #line 306 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r12()
+ {
+ $this->strip = false;
+ }
+
+ #line 311 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r13()
+ {
+ $this->_retvalue = '';
+ }
+
+ #line 315 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r14()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor;
+ }
+
+ #line 319 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r15()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 335 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r19()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor;
+ }
+
+ #line 341 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r20()
+ {
+ $var =
+ trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length),
+ ' $');
+ if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) {
+ $this->_retvalue = $this->compiler->compileTag('private_print_expression', array('nocache'),
+ array('value' => $this->compiler->compileVariable('\'' .
+ $match[ 1 ] .
+ '\'')));
+ } else {
+ $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(),
+ array('value' => $this->compiler->compileVariable('\'' .
+ $var .
+ '\'')));
+ }
+ }
+
+ #line 351 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r21()
+ {
+ $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(),
+ array('value' => $this->yystack[ $this->yyidx + 0 ]->minor));
+ }
+
+ #line 355 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r22()
+ {
+ $this->_retvalue =
+ $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor,
+ array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor));
+ }
+
+ #line 378 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r27()
+ {
+ $this->_retvalue = $this->compiler->compileTag('assign', array(array('value' => $this->yystack[ $this->yyidx +
+ 0 ]->minor), array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '\'')));
+ }
+
+ #line 386 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r29()
+ {
+ $this->_retvalue = $this->compiler->compileTag('assign',
+ array_merge(array(array('value' => $this->yystack[ $this->yyidx +
+ - 1 ]->minor), array('var' => '\'' .
+ substr($this->yystack[ $this->yyidx + - 3 ]->minor, 1) .
+ '\'')), $this->yystack[ $this->yyidx + 0 ]->minor));
+ }
+
+ #line 390 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r30()
+ {
+ $this->_retvalue = $this->compiler->compileTag('assign',
+ array_merge(array(array('value' => $this->yystack[ $this->yyidx +
+ - 1 ]->minor), array('var' => $this->yystack[ $this->yyidx +
+ - 3 ]->minor[ 'var' ])),
+ $this->yystack[ $this->yyidx + 0 ]->minor),
+ array('smarty_internal_index' => $this->yystack[ $this->yyidx +
+ - 3 ]->minor[ 'smarty_internal_index' ]));
+ }
+
+ #line 395 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r31()
+ {
+ $tag =
+ trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length));
+ if ($tag == 'strip') {
+ $this->strip = true;
+ $this->_retvalue = null;;
+ } else {
+ if (defined($tag)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($tag, $this->compiler);
+ }
+ $this->_retvalue =
+ $this->compiler->compileTag('private_print_expression', array(), array('value' => $tag));
+ } else {
+ if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) {
+ $this->_retvalue = $this->compiler->compileTag($match[ 1 ], array("'nocache'"));
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($tag, array());
+ }
+ }
+ }
+ }
+
+ #line 417 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r32()
+ {
+ if (defined($this->yystack[ $this->yyidx + - 1 ]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[ $this->yyidx + - 1 ]->minor, $this->compiler);
+ }
+ $this->_retvalue =
+ $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor,
+ array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor));
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 1 ]->minor,
+ $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+ }
+
+ #line 427 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r33()
+ {
+ if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler);
}
- $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('<%', true));
+ $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(),
+ array('value' => $this->yystack[ $this->yyidx + 0 ]->minor));
} else {
- $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + 0 ]->minor, array());
}
- } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
- if ($this->asp_tags) {
- $this->_retvalue = new _smarty_text($this, '');
+ }
+
+ #line 440 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r34()
+ {
+ if (defined($this->yystack[ $this->yyidx + - 2 ]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[ $this->yyidx + - 2 ]->minor, $this->compiler);
+ }
+ $this->_retvalue =
+ $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor,
+ array('value' => $this->yystack[ $this->yyidx + - 2 ]->minor,
+ 'modifierlist' => $this->yystack[ $this->yyidx + - 1 ]->minor));
} else {
- $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
+ $this->_retvalue = '<?php ob_start();?>' .
+ $this->compiler->compileTag($this->yystack[ $this->yyidx + - 2 ]->minor,
+ $this->yystack[ $this->yyidx + 0 ]->minor) . '<?php echo ';
+ $this->_retvalue .= $this->compiler->compileTag('private_modifier', array(),
+ array('modifierlist' => $this->yystack[ $this->yyidx +
+ - 1 ]->minor, 'value' => 'ob_get_clean()')) . ';?>';
}
}
+
+ #line 453 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r35()
+ {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 3 ]->minor,
+ $this->yystack[ $this->yyidx + 0 ]->minor,
+ array('object_method' => $this->yystack[ $this->yyidx +
+ - 1 ]->minor));
+ }
+
+ #line 458 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r36()
+ {
+ $this->_retvalue = '<?php ob_start();?>' .
+ $this->compiler->compileTag($this->yystack[ $this->yyidx + - 4 ]->minor,
+ $this->yystack[ $this->yyidx + 0 ]->minor,
+ array('object_method' => $this->yystack[ $this->yyidx + - 2 ]->minor)) .
+ '<?php echo ';
+ $this->_retvalue .= $this->compiler->compileTag('private_modifier', array(),
+ array('modifierlist' => $this->yystack[ $this->yyidx +
+ - 1 ]->minor, 'value' => 'ob_get_clean()')) . ';?>';
+ }
+
+ #line 464 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r37()
+ {
+ $tag = trim(substr($this->yystack[ $this->yyidx + - 1 ]->minor, $this->lex->ldel_length));
+ $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(),
+ array('if condition' => $this->yystack[ $this->yyidx +
+ 0 ]->minor));
+ }
+
+ #line 469 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r38()
+ {
+ $tag = trim(substr($this->yystack[ $this->yyidx + - 2 ]->minor, $this->lex->ldel_length));
+ $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag,
+ $this->yystack[ $this->yyidx + 0 ]->minor,
+ array('if condition' => $this->yystack[ $this->yyidx +
+ - 1 ]->minor));
+ }
+
+ #line 474 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r39()
+ {
+ $tag = trim(substr($this->yystack[ $this->yyidx + - 1 ]->minor, $this->lex->ldel_length));
+ $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(),
+ array('if condition' => $this->yystack[ $this->yyidx +
+ 0 ]->minor));
+ }
+
+ #line 485 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r41()
+ {
+ $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor,
+ array(array('start' => $this->yystack[ $this->yyidx +
+ - 6 ]->minor),
+ array('ifexp' => $this->yystack[ $this->yyidx +
+ - 4 ]->minor),
+ array('var' => $this->yystack[ $this->yyidx +
+ - 2 ]->minor),
+ array('step' => $this->yystack[ $this->yyidx +
+ - 1 ]->minor))), 1);
+ }
+
+ #line 489 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r42()
+ {
+ $this->_retvalue = '=' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 497 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r44()
+ {
+ $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor,
+ array(array('start' => $this->yystack[ $this->yyidx +
+ - 3 ]->minor),
+ array('to' => $this->yystack[ $this->yyidx +
+ - 1 ]->minor))), 0);
}
-#line 2246 "smarty_internal_templateparser.php"
-#line 200 "smarty_internal_templateparser.y"
- function yy_r10(){
- if ($this->php_handling == Smarty::PHP_PASSTHRU) {
- $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
- } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
- $this->_retvalue = new _smarty_text($this, htmlspecialchars('%>', ENT_QUOTES));
- } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
- if ($this->asp_tags) {
- $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('%>', true));
+
+ #line 501 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r45()
+ {
+ $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor,
+ array(array('start' => $this->yystack[ $this->yyidx +
+ - 5 ]->minor),
+ array('to' => $this->yystack[ $this->yyidx +
+ - 3 ]->minor),
+ array('step' => $this->yystack[ $this->yyidx +
+ - 1 ]->minor))), 0);
+ }
+
+ #line 506 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r46()
+ {
+ $this->_retvalue = $this->compiler->compileTag('foreach', $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ #line 511 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r47()
+ {
+ $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[ $this->yyidx + 0 ]->minor,
+ array(array('from' => $this->yystack[ $this->yyidx +
+ - 3 ]->minor),
+ array('item' => $this->yystack[ $this->yyidx +
+ - 1 ]->minor))));
+ }
+
+ #line 515 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r48()
+ {
+ $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[ $this->yyidx + 0 ]->minor,
+ array(array('from' => $this->yystack[ $this->yyidx +
+ - 5 ]->minor),
+ array('item' => $this->yystack[ $this->yyidx +
+ - 1 ]->minor),
+ array('key' => $this->yystack[ $this->yyidx +
+ - 3 ]->minor))));
+ }
+
+ #line 528 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r51()
+ {
+ $this->_retvalue = $this->compiler->compileTag('setfilter', array(),
+ array('modifier_list' => array(array_merge(array($this->yystack[ $this->yyidx +
+ - 1 ]->minor), $this->yystack[ $this->yyidx + 0 ]->minor))));
+ }
+
+ #line 532 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r52()
+ {
+ $this->_retvalue = $this->compiler->compileTag('setfilter', array(),
+ array('modifier_list' => array_merge(array(array_merge(array($this->yystack[ $this->yyidx +
+ - 2 ]->minor), $this->yystack[ $this->yyidx + - 1 ]->minor)),
+ $this->yystack[ $this->yyidx +
+ 0 ]->minor)));
+ }
+
+ #line 537 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r53()
+ {
+ $j = strrpos($this->yystack[ $this->yyidx + 0 ]->minor, '.');
+ if ($this->yystack[ $this->yyidx + 0 ]->minor[ $j + 1 ] == 'c') {
+ // {$smarty.block.child}
+ $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler);
} else {
- $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
+ // {$smarty.block.parent}
+ $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileParentBlock($this->compiler);
}
- } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
- if ($this->asp_tags) {
- $this->_retvalue = new _smarty_text($this, '');
+ }
+
+ #line 550 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r54()
+ {
+ $tag =
+ trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length),
+ ' /');
+ if ($tag == 'strip') {
+ $this->strip = false;
+ $this->_retvalue = null;
} else {
- $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
+ $this->_retvalue = $this->compiler->compileTag($tag . 'close', array());
}
}
+
+ #line 559 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r55()
+ {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + 0 ]->minor . 'close', array());
+ }
+
+ #line 563 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r56()
+ {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 1 ]->minor . 'close', array(),
+ array('modifier_list' => $this->yystack[ $this->yyidx +
+ 0 ]->minor));
+ }
+
+ #line 568 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r57()
+ {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 2 ]->minor . 'close', array(),
+ array('object_method' => $this->yystack[ $this->yyidx +
+ 0 ]->minor));
+ }
+
+ #line 572 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r58()
+ {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 3 ]->minor . 'close', array(),
+ array('object_method' => $this->yystack[ $this->yyidx +
+ - 1 ]->minor, 'modifier_list' => $this->yystack[ $this->yyidx +
+ 0 ]->minor));
+ }
+
+ #line 580 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r59()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor;
+ $this->_retvalue[] = $this->yystack[ $this->yyidx + 0 ]->minor;
}
-#line 2267 "smarty_internal_templateparser.php"
-#line 220 "smarty_internal_templateparser.y"
- function yy_r11(){
- if ($this->strip) {
- $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', ' ', self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor)));
- } else {
- $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor));
- }
- }
-#line 2276 "smarty_internal_templateparser.php"
-#line 229 "smarty_internal_templateparser.y"
- function yy_r12(){
- $this->compiler->tag_nocache = true;
- $this->is_xml = true;
- $save = $this->template->has_nocache_code;
- $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode("<?php echo '<?xml';?>", $this->compiler, true));
- $this->template->has_nocache_code = $save;
- }
-#line 2285 "smarty_internal_templateparser.php"
-#line 238 "smarty_internal_templateparser.y"
- function yy_r13(){
- if ($this->strip) {
- $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', ' ', $this->yystack[$this->yyidx + 0]->minor));
- } else {
- $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
- }
- }
-#line 2294 "smarty_internal_templateparser.php"
-#line 247 "smarty_internal_templateparser.y"
- function yy_r14(){
- $this->strip = true;
- $this->_retvalue = new _smarty_text($this, '');
- }
-#line 2300 "smarty_internal_templateparser.php"
-#line 252 "smarty_internal_templateparser.y"
- function yy_r15(){
- $this->strip = false;
- $this->_retvalue = new _smarty_text($this, '');
- }
-#line 2306 "smarty_internal_templateparser.php"
-#line 258 "smarty_internal_templateparser.y"
- function yy_r16(){
- $this->_retvalue = '';
- }
-#line 2311 "smarty_internal_templateparser.php"
-#line 262 "smarty_internal_templateparser.y"
- function yy_r17(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-#line 2316 "smarty_internal_templateparser.php"
-#line 266 "smarty_internal_templateparser.y"
- function yy_r18(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2321 "smarty_internal_templateparser.php"
-#line 274 "smarty_internal_templateparser.y"
- function yy_r20(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2326 "smarty_internal_templateparser.php"
-#line 282 "smarty_internal_templateparser.y"
- function yy_r22(){
- $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2331 "smarty_internal_templateparser.php"
-#line 290 "smarty_internal_templateparser.y"
- function yy_r24(){
- $this->_retvalue = self::escape_end_tag($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2336 "smarty_internal_templateparser.php"
-#line 294 "smarty_internal_templateparser.y"
- function yy_r25(){
- $this->_retvalue = '<<?php ?>%';
- }
-#line 2341 "smarty_internal_templateparser.php"
-#line 298 "smarty_internal_templateparser.y"
- function yy_r26(){
- $this->_retvalue = '%<?php ?>>';
- }
-#line 2346 "smarty_internal_templateparser.php"
-#line 307 "smarty_internal_templateparser.y"
- function yy_r27(){
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2351 "smarty_internal_templateparser.php"
-#line 311 "smarty_internal_templateparser.y"
- function yy_r28(){
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -3]->minor, 'modifierlist'=>$this->yystack[$this->yyidx + -2]->minor));
- }
-#line 2356 "smarty_internal_templateparser.php"
-#line 315 "smarty_internal_templateparser.y"
- function yy_r29(){
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -2]->minor));
- }
-#line 2361 "smarty_internal_templateparser.php"
-#line 319 "smarty_internal_templateparser.y"
- function yy_r30(){
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -3]->minor,'modifierlist'=>$this->yystack[$this->yyidx + -2]->minor));
- }
-#line 2366 "smarty_internal_templateparser.php"
-#line 332 "smarty_internal_templateparser.y"
- function yy_r32(){
- $this->_retvalue = $this->compiler->compileTag('assign',array(array('value'=>$this->yystack[$this->yyidx + -1]->minor),array('var'=>"'".$this->yystack[$this->yyidx + -3]->minor."'")));
- }
-#line 2371 "smarty_internal_templateparser.php"
-#line 340 "smarty_internal_templateparser.y"
- function yy_r34(){
- $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + -2]->minor),array('var'=>"'".$this->yystack[$this->yyidx + -4]->minor."'")),$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2376 "smarty_internal_templateparser.php"
-#line 344 "smarty_internal_templateparser.y"
- function yy_r35(){
- $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + -2]->minor),array('var'=>$this->yystack[$this->yyidx + -4]->minor['var'])),$this->yystack[$this->yyidx + -1]->minor),array('smarty_internal_index'=>$this->yystack[$this->yyidx + -4]->minor['smarty_internal_index']));
- }
-#line 2381 "smarty_internal_templateparser.php"
-#line 349 "smarty_internal_templateparser.y"
- function yy_r36(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + -1]->minor);
- }
-#line 2386 "smarty_internal_templateparser.php"
-#line 353 "smarty_internal_templateparser.y"
- function yy_r37(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,array());
- }
-#line 2391 "smarty_internal_templateparser.php"
-#line 358 "smarty_internal_templateparser.y"
- function yy_r38(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor,array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor));
- }
-#line 2396 "smarty_internal_templateparser.php"
-#line 363 "smarty_internal_templateparser.y"
- function yy_r39(){
- $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor,$this->yystack[$this->yyidx + -1]->minor).'<?php echo ';
- $this->_retvalue .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>$this->yystack[$this->yyidx + -2]->minor,'value'=>'ob_get_clean()')).'?>';
- }
-#line 2402 "smarty_internal_templateparser.php"
-#line 369 "smarty_internal_templateparser.y"
- function yy_r40(){
- $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -5]->minor,$this->yystack[$this->yyidx + -1]->minor,array('object_methode'=>$this->yystack[$this->yyidx + -3]->minor)).'<?php echo ';
- $this->_retvalue .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>$this->yystack[$this->yyidx + -2]->minor,'value'=>'ob_get_clean()')).'?>';
- }
-#line 2408 "smarty_internal_templateparser.php"
-#line 375 "smarty_internal_templateparser.y"
- function yy_r41(){
- $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->lex->ldel_length));
- $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2414 "smarty_internal_templateparser.php"
-#line 380 "smarty_internal_templateparser.y"
- function yy_r42(){
- $tag = trim(substr($this->yystack[$this->yyidx + -3]->minor,$this->lex->ldel_length));
- $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,$this->yystack[$this->yyidx + -1]->minor,array('if condition'=>$this->yystack[$this->yyidx + -2]->minor));
- }
-#line 2420 "smarty_internal_templateparser.php"
-#line 385 "smarty_internal_templateparser.y"
- function yy_r43(){
- $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->lex->ldel_length));
- $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2426 "smarty_internal_templateparser.php"
-#line 396 "smarty_internal_templateparser.y"
- function yy_r45(){
- $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -10]->minor),array('ifexp'=>$this->yystack[$this->yyidx + -7]->minor),array('var'=>$this->yystack[$this->yyidx + -3]->minor),array('step'=>$this->yystack[$this->yyidx + -2]->minor))),1);
- }
-#line 2431 "smarty_internal_templateparser.php"
-#line 400 "smarty_internal_templateparser.y"
- function yy_r46(){
- $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2436 "smarty_internal_templateparser.php"
-#line 408 "smarty_internal_templateparser.y"
- function yy_r48(){
- $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -4]->minor),array('to'=>$this->yystack[$this->yyidx + -2]->minor))),0);
- }
-#line 2441 "smarty_internal_templateparser.php"
-#line 412 "smarty_internal_templateparser.y"
- function yy_r49(){
- $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -6]->minor),array('to'=>$this->yystack[$this->yyidx + -4]->minor),array('step'=>$this->yystack[$this->yyidx + -2]->minor))),0);
- }
-#line 2446 "smarty_internal_templateparser.php"
-#line 417 "smarty_internal_templateparser.y"
- function yy_r50(){
- $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + -1]->minor);
- }
-#line 2451 "smarty_internal_templateparser.php"
-#line 422 "smarty_internal_templateparser.y"
- function yy_r51(){
- $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor))));
- }
-#line 2456 "smarty_internal_templateparser.php"
-#line 426 "smarty_internal_templateparser.y"
- function yy_r52(){
- $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -8]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor),array('key'=>$this->yystack[$this->yyidx + -5]->minor))));
- }
-#line 2461 "smarty_internal_templateparser.php"
-#line 430 "smarty_internal_templateparser.y"
- function yy_r53(){
- $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor))));
- }
-#line 2466 "smarty_internal_templateparser.php"
-#line 434 "smarty_internal_templateparser.y"
- function yy_r54(){
- $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -8]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor),array('key'=>$this->yystack[$this->yyidx + -5]->minor))));
- }
-#line 2471 "smarty_internal_templateparser.php"
-#line 439 "smarty_internal_templateparser.y"
- function yy_r55(){
- $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array(array_merge(array($this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor))));
- }
-#line 2476 "smarty_internal_templateparser.php"
-#line 443 "smarty_internal_templateparser.y"
- function yy_r56(){
- $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array_merge(array(array_merge(array($this->yystack[$this->yyidx + -3]->minor),$this->yystack[$this->yyidx + -2]->minor)),$this->yystack[$this->yyidx + -1]->minor)));
- }
-#line 2481 "smarty_internal_templateparser.php"
-#line 448 "smarty_internal_templateparser.y"
- function yy_r57(){
- $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler);
- }
-#line 2486 "smarty_internal_templateparser.php"
-#line 454 "smarty_internal_templateparser.y"
- function yy_r58(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array());
- }
-#line 2491 "smarty_internal_templateparser.php"
-#line 458 "smarty_internal_templateparser.y"
- function yy_r59(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',array(),array('modifier_list'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2496 "smarty_internal_templateparser.php"
-#line 463 "smarty_internal_templateparser.y"
- function yy_r60(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array(),array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2501 "smarty_internal_templateparser.php"
-#line 467 "smarty_internal_templateparser.y"
- function yy_r61(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor.'close',array(),array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor, 'modifier_list'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-#line 2506 "smarty_internal_templateparser.php"
-#line 475 "smarty_internal_templateparser.y"
- function yy_r62(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2512 "smarty_internal_templateparser.php"
-#line 481 "smarty_internal_templateparser.y"
- function yy_r63(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2517 "smarty_internal_templateparser.php"
-#line 486 "smarty_internal_templateparser.y"
- function yy_r64(){
- $this->_retvalue = array();
- }
-#line 2522 "smarty_internal_templateparser.php"
-#line 491 "smarty_internal_templateparser.y"
- function yy_r65(){
- if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'true');
- } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'false');
- } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'null');
- } else {
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>"'".$this->yystack[$this->yyidx + 0]->minor."'");
- }
- }
-#line 2535 "smarty_internal_templateparser.php"
-#line 503 "smarty_internal_templateparser.y"
- function yy_r66(){
- $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor," =\n\r\t")=>$this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2540 "smarty_internal_templateparser.php"
-#line 511 "smarty_internal_templateparser.y"
- function yy_r68(){
- $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'";
- }
-#line 2545 "smarty_internal_templateparser.php"
-#line 523 "smarty_internal_templateparser.y"
- function yy_r71(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2550 "smarty_internal_templateparser.php"
-#line 536 "smarty_internal_templateparser.y"
- function yy_r73(){
- $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor;
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;
- }
-#line 2556 "smarty_internal_templateparser.php"
-#line 541 "smarty_internal_templateparser.y"
- function yy_r74(){
- $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2561 "smarty_internal_templateparser.php"
-#line 569 "smarty_internal_templateparser.y"
- function yy_r79(){
- $this->_retvalue = '$_smarty_tpl->getStreamVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'://'. $this->yystack[$this->yyidx + 0]->minor . '\')';
- }
-#line 2566 "smarty_internal_templateparser.php"
-#line 574 "smarty_internal_templateparser.y"
- function yy_r80(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2571 "smarty_internal_templateparser.php"
-#line 593 "smarty_internal_templateparser.y"
- function yy_r84(){
- $this->_retvalue = $this->compiler->compileTag('private_modifier',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor,'modifierlist'=>$this->yystack[$this->yyidx + 0]->minor));
- }
-#line 2576 "smarty_internal_templateparser.php"
-#line 599 "smarty_internal_templateparser.y"
- function yy_r85(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2581 "smarty_internal_templateparser.php"
-#line 603 "smarty_internal_templateparser.y"
- function yy_r86(){
- $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-#line 2586 "smarty_internal_templateparser.php"
-#line 607 "smarty_internal_templateparser.y"
- function yy_r87(){
- $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-#line 2591 "smarty_internal_templateparser.php"
-#line 615 "smarty_internal_templateparser.y"
- function yy_r89(){
- $this->_retvalue = '!('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-#line 2596 "smarty_internal_templateparser.php"
-#line 619 "smarty_internal_templateparser.y"
- function yy_r90(){
- $this->_retvalue = '('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-#line 2601 "smarty_internal_templateparser.php"
-#line 623 "smarty_internal_templateparser.y"
- function yy_r91(){
- $this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';
- }
-#line 2606 "smarty_internal_templateparser.php"
-#line 627 "smarty_internal_templateparser.y"
- function yy_r92(){
- $this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';
- }
-#line 2611 "smarty_internal_templateparser.php"
-#line 631 "smarty_internal_templateparser.y"
- function yy_r93(){
- $this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-#line 2616 "smarty_internal_templateparser.php"
-#line 635 "smarty_internal_templateparser.y"
- function yy_r94(){
- $this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-#line 2621 "smarty_internal_templateparser.php"
-#line 659 "smarty_internal_templateparser.y"
- function yy_r100(){
- $this->prefix_number++;
- $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'='.$this->yystack[$this->yyidx + 0]->minor.';?>';
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.'$_tmp'.$this->prefix_number;
- }
-#line 2628 "smarty_internal_templateparser.php"
-#line 668 "smarty_internal_templateparser.y"
- function yy_r101(){
- $this->_retvalue = $this->yystack[$this->yyidx + -6]->minor.' ? '. $this->compileVariable("'".$this->yystack[$this->yyidx + -2]->minor."'") . ' : '.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2633 "smarty_internal_templateparser.php"
-#line 672 "smarty_internal_templateparser.y"
- function yy_r102(){
- $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2638 "smarty_internal_templateparser.php"
-#line 687 "smarty_internal_templateparser.y"
- function yy_r105(){
- $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2643 "smarty_internal_templateparser.php"
-#line 708 "smarty_internal_templateparser.y"
- function yy_r110(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2648 "smarty_internal_templateparser.php"
-#line 712 "smarty_internal_templateparser.y"
- function yy_r111(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.';
- }
-#line 2653 "smarty_internal_templateparser.php"
-#line 716 "smarty_internal_templateparser.y"
- function yy_r112(){
- $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2658 "smarty_internal_templateparser.php"
-#line 721 "smarty_internal_templateparser.y"
- function yy_r113(){
- if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {
- $this->_retvalue = 'true';
- } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {
- $this->_retvalue = 'false';
- } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {
- $this->_retvalue = 'null';
- } else {
- $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'";
- }
- }
-#line 2671 "smarty_internal_templateparser.php"
-#line 739 "smarty_internal_templateparser.y"
- function yy_r115(){
- $this->_retvalue = "(". $this->yystack[$this->yyidx + -1]->minor .")";
- }
-#line 2676 "smarty_internal_templateparser.php"
-#line 754 "smarty_internal_templateparser.y"
- function yy_r118(){
- if (!$this->security || isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor]) || $this->smarty->security_policy->isTrustedStaticClass($this->yystack[$this->yyidx + -2]->minor, $this->compiler)) {
- if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor])) {
- $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor].'::'.$this->yystack[$this->yyidx + 0]->minor;
+
+ #line 586 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r60()
+ {
+ $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ #line 591 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r61()
+ {
+ $this->_retvalue = array();
+ }
+
+ #line 596 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r62()
+ {
+ if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler);
+ }
+ $this->_retvalue =
+ array($this->yystack[ $this->yyidx + - 2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor);
} else {
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor;
+ $this->_retvalue =
+ array($this->yystack[ $this->yyidx + - 2 ]->minor => '\'' . $this->yystack[ $this->yyidx + 0 ]->minor .
+ '\'');
}
- } else {
- $this->compiler->trigger_template_error ("static class '".$this->yystack[$this->yyidx + -2]->minor."' is undefined or not allowed by security setting");
- }
- }
-#line 2689 "smarty_internal_templateparser.php"
-#line 766 "smarty_internal_templateparser.y"
- function yy_r119(){
- if ($this->yystack[$this->yyidx + -2]->minor['var'] == '\'smarty\'') {
- $this->_retvalue = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).'::'.$this->yystack[$this->yyidx + 0]->minor;
- } else {
- $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + -2]->minor['var']).$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].'::'.$this->yystack[$this->yyidx + 0]->minor;
- }
- }
-#line 2698 "smarty_internal_templateparser.php"
-#line 775 "smarty_internal_templateparser.y"
- function yy_r120(){
- $this->prefix_number++;
- $this->compiler->prefix_code[] = '<?php ob_start();?>'.$this->yystack[$this->yyidx + 0]->minor.'<?php $_tmp'.$this->prefix_number.'=ob_get_clean();?>';
- $this->_retvalue = '$_tmp'.$this->prefix_number;
- }
-#line 2705 "smarty_internal_templateparser.php"
-#line 790 "smarty_internal_templateparser.y"
- function yy_r122(){
- if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') {
- $smarty_var = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);
- $this->_retvalue = $smarty_var;
- } else {
- // used for array reset,next,prev,end,current
- $this->last_variable = $this->yystack[$this->yyidx + 0]->minor['var'];
- $this->last_index = $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
- $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + 0]->minor['var']).$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
- }
- }
-#line 2718 "smarty_internal_templateparser.php"
-#line 803 "smarty_internal_templateparser.y"
- function yy_r123(){
- $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + -2]->minor .']->'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2723 "smarty_internal_templateparser.php"
-#line 813 "smarty_internal_templateparser.y"
- function yy_r125(){
- $this->_retvalue = '$_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -1]->minor .'\')';
- }
-#line 2728 "smarty_internal_templateparser.php"
-#line 817 "smarty_internal_templateparser.y"
- function yy_r126(){
- $this->_retvalue = '(is_array($tmp = $_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'\')) ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' :null)';
- }
-#line 2733 "smarty_internal_templateparser.php"
-#line 821 "smarty_internal_templateparser.y"
- function yy_r127(){
- $this->_retvalue = '$_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -1]->minor .')';
- }
-#line 2738 "smarty_internal_templateparser.php"
-#line 825 "smarty_internal_templateparser.y"
- function yy_r128(){
- $this->_retvalue = '(is_array($tmp = $_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -2]->minor .')) ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' : null)';
- }
-#line 2743 "smarty_internal_templateparser.php"
-#line 829 "smarty_internal_templateparser.y"
- function yy_r129(){
- $this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2748 "smarty_internal_templateparser.php"
-#line 842 "smarty_internal_templateparser.y"
- function yy_r131(){
- return;
- }
-#line 2753 "smarty_internal_templateparser.php"
-#line 848 "smarty_internal_templateparser.y"
- function yy_r132(){
- $this->_retvalue = '['.$this->compileVariable($this->yystack[$this->yyidx + 0]->minor).']';
- }
-#line 2758 "smarty_internal_templateparser.php"
-#line 852 "smarty_internal_templateparser.y"
- function yy_r133(){
- $this->_retvalue = '['.$this->compileVariable($this->yystack[$this->yyidx + -2]->minor).'->'.$this->yystack[$this->yyidx + 0]->minor.']';
- }
-#line 2763 "smarty_internal_templateparser.php"
-#line 856 "smarty_internal_templateparser.y"
- function yy_r134(){
- $this->_retvalue = "['". $this->yystack[$this->yyidx + 0]->minor ."']";
- }
-#line 2768 "smarty_internal_templateparser.php"
-#line 860 "smarty_internal_templateparser.y"
- function yy_r135(){
- $this->_retvalue = "[". $this->yystack[$this->yyidx + 0]->minor ."]";
- }
-#line 2773 "smarty_internal_templateparser.php"
-#line 864 "smarty_internal_templateparser.y"
- function yy_r136(){
- $this->_retvalue = "[". $this->yystack[$this->yyidx + -1]->minor ."]";
- }
-#line 2778 "smarty_internal_templateparser.php"
-#line 869 "smarty_internal_templateparser.y"
- function yy_r137(){
- $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']';
- }
-#line 2783 "smarty_internal_templateparser.php"
-#line 873 "smarty_internal_templateparser.y"
- function yy_r138(){
- $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']';
- }
-#line 2788 "smarty_internal_templateparser.php"
-#line 883 "smarty_internal_templateparser.y"
- function yy_r140(){
- $this->_retvalue = '[]';
- }
-#line 2793 "smarty_internal_templateparser.php"
-#line 896 "smarty_internal_templateparser.y"
- function yy_r142(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2798 "smarty_internal_templateparser.php"
-#line 901 "smarty_internal_templateparser.y"
- function yy_r143(){
- $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';
- }
-#line 2803 "smarty_internal_templateparser.php"
-#line 906 "smarty_internal_templateparser.y"
- function yy_r144(){
- $this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';
- }
-#line 2808 "smarty_internal_templateparser.php"
-#line 913 "smarty_internal_templateparser.y"
- function yy_r145(){
- if ($this->yystack[$this->yyidx + -1]->minor['var'] == '\'smarty\'') {
- $this->_retvalue = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor;
- } else {
- $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + -1]->minor['var']).$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor;
- }
- }
-#line 2817 "smarty_internal_templateparser.php"
-#line 922 "smarty_internal_templateparser.y"
- function yy_r146(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2822 "smarty_internal_templateparser.php"
-#line 927 "smarty_internal_templateparser.y"
- function yy_r147(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2827 "smarty_internal_templateparser.php"
-#line 932 "smarty_internal_templateparser.y"
- function yy_r148(){
- if ($this->security && substr($this->yystack[$this->yyidx + -1]->minor,0,1) == '_') {
- $this->compiler->trigger_template_error (self::Err1);
- }
- $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2835 "smarty_internal_templateparser.php"
-#line 939 "smarty_internal_templateparser.y"
- function yy_r149(){
- if ($this->security) {
- $this->compiler->trigger_template_error (self::Err2);
- }
- $this->_retvalue = '->{'.$this->compileVariable($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor.'}';
- }
-#line 2843 "smarty_internal_templateparser.php"
-#line 946 "smarty_internal_templateparser.y"
- function yy_r150(){
- if ($this->security) {
- $this->compiler->trigger_template_error (self::Err2);
- }
- $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
- }
-#line 2851 "smarty_internal_templateparser.php"
-#line 953 "smarty_internal_templateparser.y"
- function yy_r151(){
- if ($this->security) {
- $this->compiler->trigger_template_error (self::Err2);
- }
- $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
- }
-#line 2859 "smarty_internal_templateparser.php"
-#line 961 "smarty_internal_templateparser.y"
- function yy_r152(){
- $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2864 "smarty_internal_templateparser.php"
-#line 969 "smarty_internal_templateparser.y"
- function yy_r153(){
- if (!$this->security || $this->smarty->security_policy->isTrustedPhpFunction($this->yystack[$this->yyidx + -3]->minor, $this->compiler)) {
- if (strcasecmp($this->yystack[$this->yyidx + -3]->minor,'isset') === 0 || strcasecmp($this->yystack[$this->yyidx + -3]->minor,'empty') === 0 || strcasecmp($this->yystack[$this->yyidx + -3]->minor,'array') === 0 || is_callable($this->yystack[$this->yyidx + -3]->minor)) {
- $func_name = strtolower($this->yystack[$this->yyidx + -3]->minor);
- if ($func_name == 'isset') {
- if (count($this->yystack[$this->yyidx + -1]->minor) == 0) {
- $this->compiler->trigger_template_error ('Illegal number of paramer in "isset()"');
- }
- $par = implode(',',$this->yystack[$this->yyidx + -1]->minor);
- if (strncasecmp($par,'$_smarty_tpl->getConfigVariable',strlen('$_smarty_tpl->getConfigVariable')) === 0) {
- $this->prefix_number++;
- $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'='.str_replace(')',', false)',$par).';?>';
- $isset_par = '$_tmp'.$this->prefix_number;
- } else {
- $isset_par=str_replace("')->value","',null,true,false)->value",$par);
- }
- $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $isset_par .")";
- } elseif (in_array($func_name,array('empty','reset','current','end','prev','next'))){
- if (count($this->yystack[$this->yyidx + -1]->minor) != 1) {
- $this->compiler->trigger_template_error ('Illegal number of paramer in "empty()"');
- }
- if ($func_name == 'empty') {
- $this->_retvalue = $func_name.'('.str_replace("')->value","',null,true,false)->value",$this->yystack[$this->yyidx + -1]->minor[0]).')';
+ }
+
+ #line 607 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r63()
+ {
+ $this->_retvalue =
+ array(trim($this->yystack[ $this->yyidx + - 1 ]->minor, " =\n\r\t") => $this->yystack[ $this->yyidx +
+ 0 ]->minor);
+ }
+
+ #line 615 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r65()
+ {
+ $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\'';
+ }
+
+ #line 627 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r68()
+ {
+ $this->_retvalue =
+ array($this->yystack[ $this->yyidx + - 2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ #line 640 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r70()
+ {
+ $this->yystack[ $this->yyidx + - 2 ]->minor[] = $this->yystack[ $this->yyidx + 0 ]->minor;
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor;
+ }
+
+ #line 645 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r71()
+ {
+ $this->_retvalue = array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '\'',
+ 'value' => $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ #line 652 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r73()
+ {
+ $this->_retvalue = array('var' => $this->yystack[ $this->yyidx + - 2 ]->minor,
+ 'value' => $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ #line 676 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r77()
+ {
+ $this->_retvalue =
+ '$_smarty_tpl->getStreamVariable(\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '://' .
+ $this->yystack[ $this->yyidx + 0 ]->minor . '\')';
+ }
+
+ #line 681 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r78()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + - 2 ]->minor . trim($this->yystack[ $this->yyidx + - 1 ]->minor) .
+ $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 695 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r81()
+ {
+ $this->_retvalue = $this->compiler->compileTag('private_modifier', array(),
+ array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor,
+ 'modifierlist' => $this->yystack[ $this->yyidx +
+ 0 ]->minor));
+ }
+
+ #line 701 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r82()
+ {
+ $this->_retvalue = (isset($this->yystack[ $this->yyidx + - 1 ]->minor[ 'pre' ]) ?
+ $this->yystack[ $this->yyidx + - 1 ]->minor[ 'pre' ] : '') .
+ $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor[ 'op' ] .
+ $this->yystack[ $this->yyidx + 0 ]->minor .
+ (isset($this->yystack[ $this->yyidx + - 1 ]->minor[ 'pre' ]) ? ')' : '');
+ }
+
+ #line 704 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r83()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + 0 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor . ')';
+ }
+
+ #line 708 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r84()
+ {
+ $this->_retvalue = 'in_array(' . $this->yystack[ $this->yyidx + - 2 ]->minor . ',' .
+ $this->yystack[ $this->yyidx + 0 ]->minor . ')';
+ }
+
+ #line 712 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r85()
+ {
+ $this->_retvalue = 'in_array(' . $this->yystack[ $this->yyidx + - 2 ]->minor . ',(array)' .
+ $this->yystack[ $this->yyidx + 0 ]->minor . ')';
+ }
+
+ #line 716 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r86()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor .
+ $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 728 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r88()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 5 ]->minor . ' ? ' .
+ $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '\'') .
+ ' : ' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 732 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r89()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + - 5 ]->minor . ' ? ' . $this->yystack[ $this->yyidx + - 2 ]->minor . ' : ' .
+ $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 747 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r92()
+ {
+ $this->_retvalue = '!' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 768 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r97()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + - 2 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 772 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r98()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . '.';
+ }
+
+ #line 776 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r99()
+ {
+ $this->_retvalue = '.' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 781 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r100()
+ {
+ if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler);
+ }
+ $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
+ } else {
+ $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\'';
+ }
+ }
+
+ #line 798 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r102()
+ {
+ $this->_retvalue = "(" . $this->yystack[ $this->yyidx + - 1 ]->minor . ")";
+ }
+
+ #line 813 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r105()
+ {
+ self::$prefix_number ++;
+ if ($this->yystack[ $this->yyidx + - 2 ]->minor[ 'var' ] == '\'smarty\'') {
+ $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . ' = ' .
+ $this->compiler->compileTag('private_special_variable', array(),
+ $this->yystack[ $this->yyidx + - 2 ]->minor[ 'smarty_internal_index' ]) .
+ ';?>';
+ } else {
+ $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . ' = ' .
+ $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 2 ]->minor[ 'var' ]) .
+ $this->yystack[ $this->yyidx + - 2 ]->minor[ 'smarty_internal_index' ] . ';?>';
+ }
+ $this->_retvalue = '$_tmp' . self::$prefix_number . '::' . $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] .
+ $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ];
+ }
+
+ #line 824 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r106()
+ {
+ self::$prefix_number ++;
+ $tmp = $this->compiler->appendCode('<?php ob_start();?>', $this->yystack[ $this->yyidx + 0 ]->minor);
+ $this->compiler->prefix_code[] =
+ $this->compiler->appendCode($tmp, '<?php $_tmp' . self::$prefix_number . '=ob_get_clean();?>');
+ $this->_retvalue = '$_tmp' . self::$prefix_number;
+ }
+
+ #line 841 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r109()
+ {
+ if (!in_array(strtolower($this->yystack[ $this->yyidx + - 2 ]->minor), array('self', 'parent')) &&
+ (!$this->security ||
+ $this->security->isTrustedStaticClassAccess($this->yystack[ $this->yyidx + - 2 ]->minor,
+ $this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler))
+ ) {
+ if (isset($this->smarty->registered_classes[ $this->yystack[ $this->yyidx + - 2 ]->minor ])) {
+ $this->_retvalue =
+ $this->smarty->registered_classes[ $this->yystack[ $this->yyidx + - 2 ]->minor ] . '::' .
+ $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] . $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ];
+ } else {
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . '::' .
+ $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] . $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ];
+ }
+ } else {
+ $this->compiler->trigger_template_error("static class '" . $this->yystack[ $this->yyidx + - 2 ]->minor .
+ "' is undefined or not allowed by security setting");
+ }
+ }
+
+ #line 860 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r111()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 871 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r112()
+ {
+ $this->_retvalue =
+ $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'');
+ }
+
+ #line 874 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r113()
+ {
+ if ($this->yystack[ $this->yyidx + 0 ]->minor[ 'var' ] == '\'smarty\'') {
+ $smarty_var = $this->compiler->compileTag('private_special_variable', array(),
+ $this->yystack[ $this->yyidx +
+ 0 ]->minor[ 'smarty_internal_index' ]);
+ $this->_retvalue = $smarty_var;
+ } else {
+ // used for array reset,next,prev,end,current
+ $this->last_variable = $this->yystack[ $this->yyidx + 0 ]->minor[ 'var' ];
+ $this->last_index = $this->yystack[ $this->yyidx + 0 ]->minor[ 'smarty_internal_index' ];
+ $this->_retvalue = $this->compiler->compileVariable($this->yystack[ $this->yyidx + 0 ]->minor[ 'var' ]) .
+ $this->yystack[ $this->yyidx + 0 ]->minor[ 'smarty_internal_index' ];
+ }
+ }
+
+ #line 887 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r114()
+ {
+ $this->_retvalue = '$_smarty_tpl->tpl_vars[' . $this->yystack[ $this->yyidx + - 2 ]->minor . ']->' .
+ $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 897 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r116()
+ {
+ $this->_retvalue =
+ $this->compiler->compileConfigVariable("'" . $this->yystack[ $this->yyidx + - 1 ]->minor . "'");
+ }
+
+ #line 901 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r117()
+ {
+ $this->_retvalue = '(is_array($tmp = ' .
+ $this->compiler->compileConfigVariable("'" . $this->yystack[ $this->yyidx + - 2 ]->minor . "'") .
+ ') ? $tmp' . $this->yystack[ $this->yyidx + 0 ]->minor . ' :null)';
+ }
+
+ #line 905 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r118()
+ {
+ $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + - 1 ]->minor);
+ }
+
+ #line 909 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r119()
+ {
+ $this->_retvalue =
+ '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + - 2 ]->minor) .
+ ') ? $tmp' . $this->yystack[ $this->yyidx + 0 ]->minor . ' : null)';
+ }
+
+ #line 913 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r120()
+ {
+ $this->_retvalue = array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 1 ]->minor, 1) . '\'',
+ 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ #line 916 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r121()
+ {
+ $this->_retvalue = array('var' => $this->yystack[ $this->yyidx + - 1 ]->minor,
+ 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ #line 929 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r123()
+ {
+ return;
+ }
+
+ #line 935 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r124()
+ {
+ $this->_retvalue =
+ '[' . $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'') .
+ ']';
+ }
+
+ #line 938 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r125()
+ {
+ $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + 0 ]->minor) . ']';
+ }
+
+ #line 942 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r126()
+ {
+ $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 2 ]->minor) . '->' .
+ $this->yystack[ $this->yyidx + 0 ]->minor . ']';
+ }
+
+ #line 946 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r127()
+ {
+ if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler);
+ }
+ $this->_retvalue = '[' . $this->yystack[ $this->yyidx + 0 ]->minor . ']';
+ } else {
+ $this->_retvalue = "['" . $this->yystack[ $this->yyidx + 0 ]->minor . "']";
+ }
+ }
+
+ #line 957 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r128()
+ {
+ $this->_retvalue = '[' . $this->yystack[ $this->yyidx + 0 ]->minor . ']';
+ }
+
+ #line 962 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r129()
+ {
+ $this->_retvalue = '[' . $this->yystack[ $this->yyidx + - 1 ]->minor . ']';
+ }
+
+ #line 967 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r130()
+ {
+ $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' .
+ $this->yystack[ $this->yyidx +
+ - 1 ]->minor .
+ '\'][\'index\']') . ']';
+ }
+
+ #line 971 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r131()
+ {
+ $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' .
+ $this->yystack[ $this->yyidx +
+ - 3 ]->minor . '\'][\'' .
+ $this->yystack[ $this->yyidx +
+ - 1 ]->minor . '\']') . ']';
+ }
+
+ #line 974 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r132()
+ {
+ $this->_retvalue = '[' . $this->yystack[ $this->yyidx + - 1 ]->minor . ']';
+ }
+
+ #line 980 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r134()
+ {
+ $this->_retvalue = '[' .
+ $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + - 1 ]->minor, 1) . '\'') .
+ ']';;
+ }
+
+ #line 996 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r138()
+ {
+ $this->_retvalue = '[]';
+ }
+
+ #line 1006 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r139()
+ {
+ $this->_retvalue = '\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'';
+ }
+
+ #line 1010 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r140()
+ {
+ $this->_retvalue = "''";
+ }
+
+ #line 1015 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r141()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + - 1 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 1023 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r143()
+ {
+ $var =
+ trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length),
+ ' $');
+ $this->_retvalue = $this->compiler->compileVariable('\'' . $var . '\'');
+ }
+
+ #line 1029 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r144()
+ {
+ $this->_retvalue = '(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')';
+ }
+
+ #line 1036 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r145()
+ {
+ if ($this->yystack[ $this->yyidx + - 1 ]->minor[ 'var' ] == '\'smarty\'') {
+ $this->_retvalue = $this->compiler->compileTag('private_special_variable', array(),
+ $this->yystack[ $this->yyidx +
+ - 1 ]->minor[ 'smarty_internal_index' ]) .
+ $this->yystack[ $this->yyidx + 0 ]->minor;
+ } else {
+ $this->_retvalue = $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 1 ]->minor[ 'var' ]) .
+ $this->yystack[ $this->yyidx + - 1 ]->minor[ 'smarty_internal_index' ] .
+ $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+ }
+
+ #line 1045 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r146()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 1050 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r147()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 1055 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r148()
+ {
+ if ($this->security && substr($this->yystack[ $this->yyidx + - 1 ]->minor, 0, 1) == '_') {
+ $this->compiler->trigger_template_error(self::Err1);
+ }
+ $this->_retvalue =
+ '->' . $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 1062 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r149()
+ {
+ if ($this->security) {
+ $this->compiler->trigger_template_error(self::Err2);
+ }
+ $this->_retvalue = '->{' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 1 ]->minor) .
+ $this->yystack[ $this->yyidx + 0 ]->minor . '}';
+ }
+
+ #line 1069 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r150()
+ {
+ if ($this->security) {
+ $this->compiler->trigger_template_error(self::Err2);
+ }
+ $this->_retvalue =
+ '->{' . $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor . '}';
+ }
+
+ #line 1076 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r151()
+ {
+ if ($this->security) {
+ $this->compiler->trigger_template_error(self::Err2);
+ }
+ $this->_retvalue = '->{\'' . $this->yystack[ $this->yyidx + - 4 ]->minor . '\'.' .
+ $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor . '}';
+ }
+
+ #line 1084 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r152()
+ {
+ $this->_retvalue = '->' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 1092 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r153()
+ {
+ if (!$this->security ||
+ $this->security->isTrustedPhpFunction($this->yystack[ $this->yyidx + - 3 ]->minor, $this->compiler)
+ ) {
+ if (strcasecmp($this->yystack[ $this->yyidx + - 3 ]->minor, 'isset') === 0 ||
+ strcasecmp($this->yystack[ $this->yyidx + - 3 ]->minor, 'empty') === 0 ||
+ strcasecmp($this->yystack[ $this->yyidx + - 3 ]->minor, 'array') === 0 ||
+ is_callable($this->yystack[ $this->yyidx + - 3 ]->minor)
+ ) {
+ $func_name = strtolower($this->yystack[ $this->yyidx + - 3 ]->minor);
+ if ($func_name == 'isset') {
+ if (count($this->yystack[ $this->yyidx + - 1 ]->minor) == 0) {
+ $this->compiler->trigger_template_error('Illegal number of paramer in "isset()"');
+ }
+ $par = implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor);
+ if (strncasecmp($par, '$_smarty_tpl->smarty->ext->_config->_getConfigVariable',
+ strlen('$_smarty_tpl->smarty->ext->_config->_getConfigVariable')) === 0
+ ) {
+ self::$prefix_number ++;
+ $this->compiler->prefix_code[] =
+ '<?php $_tmp' . self::$prefix_number . '=' . str_replace(')', ', false)', $par) . ';?>';
+ $isset_par = '$_tmp' . self::$prefix_number;
+ } else {
+ $isset_par = str_replace("')->value", "',null,true,false)->value", $par);
+ }
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 3 ]->minor . "(" . $isset_par . ")";
+ } elseif (in_array($func_name, array('empty', 'reset', 'current', 'end', 'prev', 'next'))) {
+ if (count($this->yystack[ $this->yyidx + - 1 ]->minor) != 1) {
+ $this->compiler->trigger_template_error('Illegal number of paramer in "empty()"');
+ }
+ if ($func_name == 'empty') {
+ $this->_retvalue = $func_name . '(' . str_replace("')->value", "',null,true,false)->value",
+ $this->yystack[ $this->yyidx +
+ - 1 ]->minor[ 0 ]) . ')';
+ } else {
+ $this->_retvalue = $func_name . '(' . $this->yystack[ $this->yyidx + - 1 ]->minor[ 0 ] . ')';
+ }
} else {
- $this->_retvalue = $func_name.'('.$this->yystack[$this->yyidx + -1]->minor[0].')';
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 3 ]->minor . "(" .
+ implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor) . ")";
}
} else {
- $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". implode(',',$this->yystack[$this->yyidx + -1]->minor) .")";
+ $this->compiler->trigger_template_error("unknown function \"" .
+ $this->yystack[ $this->yyidx + - 3 ]->minor . "\"");
}
- } else {
- $this->compiler->trigger_template_error ("unknown function \"" . $this->yystack[$this->yyidx + -3]->minor . "\"");
}
}
+
+ #line 1131 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r154()
+ {
+ if ($this->security && substr($this->yystack[ $this->yyidx + - 3 ]->minor, 0, 1) == '_') {
+ $this->compiler->trigger_template_error(self::Err1);
+ }
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 3 ]->minor . "(" .
+ implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor) . ")";
+ }
+
+ #line 1138 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r155()
+ {
+ if ($this->security) {
+ $this->compiler->trigger_template_error(self::Err2);
+ }
+ self::$prefix_number ++;
+ $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . '=' .
+ $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + - 3 ]->minor, 1) . '\'') .
+ ';?>';
+ $this->_retvalue =
+ '$_tmp' . self::$prefix_number . '(' . implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor) . ')';
+ }
+
+ #line 1149 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r156()
+ {
+ $this->_retvalue =
+ array_merge($this->yystack[ $this->yyidx + - 2 ]->minor, array($this->yystack[ $this->yyidx + 0 ]->minor));
+ }
+
+ #line 1166 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r159()
+ {
+ $this->_retvalue = array_merge($this->yystack[ $this->yyidx + - 2 ]->minor,
+ array(array_merge($this->yystack[ $this->yyidx + - 1 ]->minor,
+ $this->yystack[ $this->yyidx + 0 ]->minor)));
+ }
+
+ #line 1170 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r160()
+ {
+ $this->_retvalue =
+ array(array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor));
+ }
+
+ #line 1178 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r162()
+ {
+ $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ #line 1186 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r163()
+ {
+ $this->_retvalue =
+ array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ #line 1205 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r167()
+ {
+ $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, '', 'method');
+ }
+
+ #line 1210 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r168()
+ {
+ $this->_retvalue =
+ array($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'method');
+ }
+
+ #line 1215 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r169()
+ {
+ $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, '');
+ }
+
+ #line 1220 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r170()
+ {
+ $this->_retvalue =
+ array($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'property');
+ }
+
+ #line 1225 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r171()
+ {
+ $this->_retvalue = array($this->yystack[ $this->yyidx + - 2 ]->minor,
+ $this->yystack[ $this->yyidx + - 1 ]->minor .
+ $this->yystack[ $this->yyidx + 0 ]->minor, 'property');
+ }
+
+ #line 1231 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r172()
+ {
+ $this->_retvalue[ 'op' ] = ' ' . trim($this->yystack[ $this->yyidx + 0 ]->minor) . ' ';
+ }
+
+ #line 1235 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r173()
+ {
+ static $lops = array('eq' => array('op' => ' == ', 'pre' => null),
+ 'ne' => array('op' => ' != ', 'pre' => null),
+ 'neq' => array('op' => ' != ', 'pre' => null),
+ 'gt' => array('op' => ' > ', 'pre' => null),
+ 'ge' => array('op' => ' >= ', 'pre' => null),
+ 'gte' => array('op' => ' >= ', 'pre' => null),
+ 'lt' => array('op' => ' < ', 'pre' => null),
+ 'le' => array('op' => ' <= ', 'pre' => null),
+ 'lte' => array('op' => ' <= ', 'pre' => null),
+ 'mod' => array('op' => ' % ', 'pre' => null),
+ 'and' => array('op' => ' && ', 'pre' => null),
+ 'or' => array('op' => ' || ', 'pre' => null),
+ 'xor' => array('op' => ' xor ', 'pre' => null),
+ 'isdivby' => array('op' => ' % ', 'pre' => '!('),
+ 'isnotdivby' => array('op' => ' % ', 'pre' => '('),
+ 'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '),
+ 'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '),
+ 'isoddby' => array('op' => ' / ', 'pre' => '(1 & '),
+ 'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '),);
+ $op = strtolower(preg_replace('/\s*/', '', $this->yystack[ $this->yyidx + 0 ]->minor));
+ $this->_retvalue = $lops[ $op ];
+ }
+
+ #line 1261 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r174()
+ {
+ static $scond =
+ array('iseven' => '!(1 & ', 'isnoteven' => '(1 & ', 'isodd' => '(1 & ', 'isnotodd' => '!(1 & ',);
+ $op = strtolower(str_replace(' ', '', $this->yystack[ $this->yyidx + 0 ]->minor));
+ $this->_retvalue = $scond[ $op ];
+ }
+
+ #line 1275 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r175()
+ {
+ $this->_retvalue = 'array(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')';
+ }
+
+ #line 1283 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r177()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + - 2 ]->minor . ',' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 1291 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r179()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + - 2 ]->minor . '=>' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 1295 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r180()
+ {
+ $this->_retvalue =
+ '\'' . $this->yystack[ $this->yyidx + - 2 ]->minor . '\'=>' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ #line 1311 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r183()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor->to_smarty_php($this);
+ }
+
+ #line 1316 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r184()
+ {
+ $this->yystack[ $this->yyidx + - 1 ]->minor->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor);
+ $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor;
+ }
+
+ #line 1321 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r185()
+ {
+ $this->_retvalue = new Smarty_Internal_ParseTree_Dq($this, $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ #line 1325 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r186()
+ {
+ $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)' . $this->yystack[ $this->yyidx + - 1 ]->minor);
+ }
+
+ #line 1333 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r188()
+ {
+ $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\'' .
+ substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) .
+ '\']->value');
+ }
+
+ #line 1341 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r190()
+ {
+ $this->_retvalue =
+ new Smarty_Internal_ParseTree_Code('(string)(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')');
+ }
+
+ #line 1345 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r191()
+ {
+ $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ #line 1349 "../smarty/lexer/smarty_internal_templateparser.y"
+ function yy_r192()
+ {
+ $this->_retvalue = new Smarty_Internal_ParseTree_DqContent($this->yystack[ $this->yyidx + 0 ]->minor);
}
-#line 2900 "smarty_internal_templateparser.php"
-#line 1007 "smarty_internal_templateparser.y"
- function yy_r154(){
- if ($this->security && substr($this->yystack[$this->yyidx + -3]->minor,0,1) == '_') {
- $this->compiler->trigger_template_error (self::Err1);
- }
- $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". implode(',',$this->yystack[$this->yyidx + -1]->minor) .")";
- }
-#line 2908 "smarty_internal_templateparser.php"
-#line 1014 "smarty_internal_templateparser.y"
- function yy_r155(){
- if ($this->security) {
- $this->compiler->trigger_template_error (self::Err2);
- }
- $this->prefix_number++;
- $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'='.$this->compileVariable("'".$this->yystack[$this->yyidx + -3]->minor."'").';?>';
- $this->_retvalue = '$_tmp'.$this->prefix_number.'('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')';
- }
-#line 2918 "smarty_internal_templateparser.php"
-#line 1025 "smarty_internal_templateparser.y"
- function yy_r156(){
- $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array($this->yystack[$this->yyidx + 0]->minor));
- }
-#line 2923 "smarty_internal_templateparser.php"
-#line 1042 "smarty_internal_templateparser.y"
- function yy_r159(){
- $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor)));
- }
-#line 2928 "smarty_internal_templateparser.php"
-#line 1046 "smarty_internal_templateparser.y"
- function yy_r160(){
- $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor));
- }
-#line 2933 "smarty_internal_templateparser.php"
-#line 1054 "smarty_internal_templateparser.y"
- function yy_r162(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2938 "smarty_internal_templateparser.php"
-#line 1062 "smarty_internal_templateparser.y"
- function yy_r163(){
- $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
- }
-#line 2943 "smarty_internal_templateparser.php"
-#line 1096 "smarty_internal_templateparser.y"
- function yy_r170(){
- $this->_retvalue = '$'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2948 "smarty_internal_templateparser.php"
-#line 1101 "smarty_internal_templateparser.y"
- function yy_r171(){
- $this->_retvalue = '$'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 2953 "smarty_internal_templateparser.php"
-#line 1107 "smarty_internal_templateparser.y"
- function yy_r172(){
- $this->_retvalue = '==';
- }
-#line 2958 "smarty_internal_templateparser.php"
-#line 1111 "smarty_internal_templateparser.y"
- function yy_r173(){
- $this->_retvalue = '!=';
- }
-#line 2963 "smarty_internal_templateparser.php"
-#line 1115 "smarty_internal_templateparser.y"
- function yy_r174(){
- $this->_retvalue = '>';
- }
-#line 2968 "smarty_internal_templateparser.php"
-#line 1119 "smarty_internal_templateparser.y"
- function yy_r175(){
- $this->_retvalue = '<';
- }
-#line 2973 "smarty_internal_templateparser.php"
-#line 1123 "smarty_internal_templateparser.y"
- function yy_r176(){
- $this->_retvalue = '>=';
- }
-#line 2978 "smarty_internal_templateparser.php"
-#line 1127 "smarty_internal_templateparser.y"
- function yy_r177(){
- $this->_retvalue = '<=';
- }
-#line 2983 "smarty_internal_templateparser.php"
-#line 1131 "smarty_internal_templateparser.y"
- function yy_r178(){
- $this->_retvalue = '===';
- }
-#line 2988 "smarty_internal_templateparser.php"
-#line 1135 "smarty_internal_templateparser.y"
- function yy_r179(){
- $this->_retvalue = '!==';
- }
-#line 2993 "smarty_internal_templateparser.php"
-#line 1139 "smarty_internal_templateparser.y"
- function yy_r180(){
- $this->_retvalue = '%';
- }
-#line 2998 "smarty_internal_templateparser.php"
-#line 1143 "smarty_internal_templateparser.y"
- function yy_r181(){
- $this->_retvalue = '&&';
- }
-#line 3003 "smarty_internal_templateparser.php"
-#line 1147 "smarty_internal_templateparser.y"
- function yy_r182(){
- $this->_retvalue = '||';
- }
-#line 3008 "smarty_internal_templateparser.php"
-#line 1151 "smarty_internal_templateparser.y"
- function yy_r183(){
- $this->_retvalue = ' XOR ';
- }
-#line 3013 "smarty_internal_templateparser.php"
-#line 1158 "smarty_internal_templateparser.y"
- function yy_r184(){
- $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';
- }
-#line 3018 "smarty_internal_templateparser.php"
-#line 1166 "smarty_internal_templateparser.y"
- function yy_r186(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 3023 "smarty_internal_templateparser.php"
-#line 1174 "smarty_internal_templateparser.y"
- function yy_r188(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 3028 "smarty_internal_templateparser.php"
-#line 1178 "smarty_internal_templateparser.y"
- function yy_r189(){
- $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;
- }
-#line 3033 "smarty_internal_templateparser.php"
-#line 1190 "smarty_internal_templateparser.y"
- function yy_r191(){
- $this->_retvalue = "''";
- }
-#line 3038 "smarty_internal_templateparser.php"
-#line 1194 "smarty_internal_templateparser.y"
- function yy_r192(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php();
- }
-#line 3043 "smarty_internal_templateparser.php"
-#line 1199 "smarty_internal_templateparser.y"
- function yy_r193(){
- $this->yystack[$this->yyidx + -1]->minor->append_subtree($this->yystack[$this->yyidx + 0]->minor);
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-#line 3049 "smarty_internal_templateparser.php"
-#line 1204 "smarty_internal_templateparser.y"
- function yy_r194(){
- $this->_retvalue = new _smarty_doublequoted($this, $this->yystack[$this->yyidx + 0]->minor);
- }
-#line 3054 "smarty_internal_templateparser.php"
-#line 1208 "smarty_internal_templateparser.y"
- function yy_r195(){
- $this->_retvalue = new _smarty_code($this, '(string)'.$this->yystack[$this->yyidx + -1]->minor);
- }
-#line 3059 "smarty_internal_templateparser.php"
-#line 1216 "smarty_internal_templateparser.y"
- function yy_r197(){
- $this->_retvalue = new _smarty_code($this, '(string)$_smarty_tpl->tpl_vars[\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\']->value');
- }
-#line 3064 "smarty_internal_templateparser.php"
-#line 1224 "smarty_internal_templateparser.y"
- function yy_r199(){
- $this->_retvalue = new _smarty_code($this, '(string)('.$this->yystack[$this->yyidx + -1]->minor.')');
- }
-#line 3069 "smarty_internal_templateparser.php"
-#line 1228 "smarty_internal_templateparser.y"
- function yy_r200(){
- $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + 0]->minor);
- }
-#line 3074 "smarty_internal_templateparser.php"
-#line 1232 "smarty_internal_templateparser.y"
- function yy_r201(){
- $this->_retvalue = new _smarty_dq_content($this, $this->yystack[$this->yyidx + 0]->minor);
- }
-#line 3079 "smarty_internal_templateparser.php"
private $_retvalue;
- function yy_reduce($yyruleno)
+ public function yy_reduce($yyruleno)
{
- $yymsp = $this->yystack[$this->yyidx];
- if (self::$yyTraceFILE && $yyruleno >= 0
- && $yyruleno < count(self::$yyRuleName)) {
- fprintf(self::$yyTraceFILE, "%sReduce (%d) [%s].\n",
- self::$yyTracePrompt, $yyruleno,
- self::$yyRuleName[$yyruleno]);
+ if ($this->yyTraceFILE && $yyruleno >= 0 && $yyruleno < count(self::$yyRuleName)) {
+ fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n", $this->yyTracePrompt, $yyruleno,
+ self::$yyRuleName[ $yyruleno ]);
}
$this->_retvalue = $yy_lefthand_side = null;
- if (array_key_exists($yyruleno, self::$yyReduceMap)) {
+ if (isset(self::$yyReduceMap[ $yyruleno ])) {
// call the action
$this->_retvalue = null;
- $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}();
+ $this->{'yy_r' . self::$yyReduceMap[ $yyruleno ]}();
$yy_lefthand_side = $this->_retvalue;
}
- $yygoto = self::$yyRuleInfo[$yyruleno]['lhs'];
- $yysize = self::$yyRuleInfo[$yyruleno]['rhs'];
+ $yygoto = self::$yyRuleInfo[ $yyruleno ][ 0 ];
+ $yysize = self::$yyRuleInfo[ $yyruleno ][ 1 ];
$this->yyidx -= $yysize;
- for($i = $yysize; $i; $i--) {
+ for ($i = $yysize; $i; $i --) {
// pop all of the right-hand side parameters
array_pop($this->yystack);
}
- $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto);
+ $yyact = $this->yy_find_reduce_action($this->yystack[ $this->yyidx ]->stateno, $yygoto);
if ($yyact < self::YYNSTATE) {
- if (!self::$yyTraceFILE && $yysize) {
- $this->yyidx++;
+ if (!$this->yyTraceFILE && $yysize) {
+ $this->yyidx ++;
$x = new TP_yyStackEntry;
$x->stateno = $yyact;
$x->major = $yygoto;
$x->minor = $yy_lefthand_side;
- $this->yystack[$this->yyidx] = $x;
+ $this->yystack[ $this->yyidx ] = $x;
} else {
$this->yy_shift($yyact, $yygoto, $yy_lefthand_side);
}
@@ -3125,73 +2711,68 @@ static public $yy_action = array(
}
}
- function yy_parse_failed()
+ public function yy_parse_failed()
{
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sFail!\n", self::$yyTracePrompt);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
}
while ($this->yyidx >= 0) {
$this->yy_pop_parser_stack();
}
}
- function yy_syntax_error($yymajor, $TOKEN)
+ public function yy_syntax_error($yymajor, $TOKEN)
{
-#line 77 "smarty_internal_templateparser.y"
+ #line 207 "../smarty/lexer/smarty_internal_templateparser.y"
- $this->internalError = true;
- $this->yymajor = $yymajor;
- $this->compiler->trigger_template_error();
-#line 3142 "smarty_internal_templateparser.php"
+ $this->internalError = true;
+ $this->yymajor = $yymajor;
+ $this->compiler->trigger_template_error();
}
- function yy_accept()
+ public function yy_accept()
{
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sAccept!\n", self::$yyTracePrompt);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
}
while ($this->yyidx >= 0) {
- $stack = $this->yy_pop_parser_stack();
+ $this->yy_pop_parser_stack();
}
-#line 69 "smarty_internal_templateparser.y"
+ #line 200 "../smarty/lexer/smarty_internal_templateparser.y"
- $this->successful = !$this->internalError;
- $this->internalError = false;
- $this->retvalue = $this->_retvalue;
- //echo $this->retvalue."\n\n";
-#line 3160 "smarty_internal_templateparser.php"
+ $this->successful = !$this->internalError;
+ $this->internalError = false;
+ $this->retvalue = $this->_retvalue;
}
- function doParse($yymajor, $yytokenvalue)
+ public function doParse($yymajor, $yytokenvalue)
{
$yyerrorhit = 0; /* True if yymajor has invoked an error */
if ($this->yyidx === null || $this->yyidx < 0) {
$this->yyidx = 0;
- $this->yyerrcnt = -1;
+ $this->yyerrcnt = - 1;
$x = new TP_yyStackEntry;
$x->stateno = 0;
$x->major = 0;
$this->yystack = array();
- array_push($this->yystack, $x);
+ $this->yystack[] = $x;
}
- $yyendofinput = ($yymajor==0);
+ $yyendofinput = ($yymajor == 0);
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sInput %s\n",
- self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sInput %s\n", $this->yyTracePrompt, $this->yyTokenName[ $yymajor ]);
}
do {
$yyact = $this->yy_find_shift_action($yymajor);
- if ($yymajor < self::YYERRORSYMBOL &&
- !$this->yy_is_expected_token($yymajor)) {
+ if ($yymajor < self::YYERRORSYMBOL && !$this->yy_is_expected_token($yymajor)) {
// force a syntax error
$yyact = self::YY_ERROR_ACTION;
}
if ($yyact < self::YYNSTATE) {
$this->yy_shift($yyact, $yymajor, $yytokenvalue);
- $this->yyerrcnt--;
+ $this->yyerrcnt --;
if ($yyendofinput && $this->yyidx >= 0) {
$yymajor = 0;
} else {
@@ -3200,30 +2781,27 @@ static public $yy_action = array(
} elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
$this->yy_reduce($yyact - self::YYNSTATE);
} elseif ($yyact == self::YY_ERROR_ACTION) {
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sSyntax Error!\n",
- self::$yyTracePrompt);
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sSyntax Error!\n", $this->yyTracePrompt);
}
if (self::YYERRORSYMBOL) {
if ($this->yyerrcnt < 0) {
$this->yy_syntax_error($yymajor, $yytokenvalue);
}
- $yymx = $this->yystack[$this->yyidx]->major;
- if ($yymx == self::YYERRORSYMBOL || $yyerrorhit ){
- if (self::$yyTraceFILE) {
- fprintf(self::$yyTraceFILE, "%sDiscard input token %s\n",
- self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+ $yymx = $this->yystack[ $this->yyidx ]->major;
+ if ($yymx == self::YYERRORSYMBOL || $yyerrorhit) {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sDiscard input token %s\n", $this->yyTracePrompt,
+ $this->yyTokenName[ $yymajor ]);
}
$this->yy_destructor($yymajor, $yytokenvalue);
$yymajor = self::YYNOCODE;
} else {
- while ($this->yyidx >= 0 &&
- $yymx != self::YYERRORSYMBOL &&
- ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
- ){
+ while ($this->yyidx >= 0 && $yymx != self::YYERRORSYMBOL &&
+ ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE) {
$this->yy_pop_parser_stack();
}
- if ($this->yyidx < 0 || $yymajor==0) {
+ if ($this->yyidx < 0 || $yymajor == 0) {
$this->yy_destructor($yymajor, $yytokenvalue);
$this->yy_parse_failed();
$yymajor = self::YYNOCODE;
@@ -3252,3 +2830,4 @@ static public $yy_action = array(
} while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);
}
}
+
diff --git a/include/smarty/libs/sysplugins/smarty_internal_testinstall.php b/include/smarty/libs/sysplugins/smarty_internal_testinstall.php
new file mode 100644
index 000000000..72d9a5211
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_testinstall.php
@@ -0,0 +1,604 @@
+<?php
+/**
+ * Smarty Internal TestInstall
+ * Test Smarty installation
+ *
+ * @package Smarty
+ * @subpackage Utilities
+ * @author Uwe Tews
+ */
+
+/**
+ * TestInstall class
+ *
+ * @package Smarty
+ * @subpackage Utilities
+ */
+class Smarty_Internal_TestInstall
+{
+ /**
+ * diagnose Smarty setup
+ * If $errors is secified, the diagnostic report will be appended to the array, rather than being output.
+ *
+ * @param array $errors array to push results into rather than outputting them
+ *
+ * @return bool status, true if everything is fine, false else
+ */
+ public static function testInstall(Smarty $smarty, &$errors = null)
+ {
+ $status = true;
+
+ if ($errors === null) {
+ echo "<PRE>\n";
+ echo "Smarty Installation test...\n";
+ echo "Testing template directory...\n";
+ }
+
+ $_stream_resolve_include_path = function_exists('stream_resolve_include_path');
+
+ // test if all registered template_dir are accessible
+ foreach ($smarty->getTemplateDir() as $template_dir) {
+ $_template_dir = $template_dir;
+ $template_dir = realpath($template_dir);
+ // resolve include_path or fail existence
+ if (!$template_dir) {
+ if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_template_dir)) {
+ // try PHP include_path
+ if ($_stream_resolve_include_path) {
+ $template_dir = stream_resolve_include_path($_template_dir);
+ } else {
+ $template_dir = $smarty->ext->_getIncludePath->getIncludePath($_template_dir, null, $smarty);
+ }
+
+ if ($template_dir !== false) {
+ if ($errors === null) {
+ echo "$template_dir is OK.\n";
+ }
+
+ continue;
+ } else {
+ $status = false;
+ $message =
+ "FAILED: $_template_dir does not exist (and couldn't be found in include_path either)";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'template_dir' ] = $message;
+ }
+
+ continue;
+ }
+ } else {
+ $status = false;
+ $message = "FAILED: $_template_dir does not exist";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'template_dir' ] = $message;
+ }
+
+ continue;
+ }
+ }
+
+ if (!is_dir($template_dir)) {
+ $status = false;
+ $message = "FAILED: $template_dir is not a directory";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'template_dir' ] = $message;
+ }
+ } elseif (!is_readable($template_dir)) {
+ $status = false;
+ $message = "FAILED: $template_dir is not readable";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'template_dir' ] = $message;
+ }
+ } else {
+ if ($errors === null) {
+ echo "$template_dir is OK.\n";
+ }
+ }
+ }
+
+ if ($errors === null) {
+ echo "Testing compile directory...\n";
+ }
+
+ // test if registered compile_dir is accessible
+ $__compile_dir = $smarty->getCompileDir();
+ $_compile_dir = realpath($__compile_dir);
+ if (!$_compile_dir) {
+ $status = false;
+ $message = "FAILED: {$__compile_dir} does not exist";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'compile_dir' ] = $message;
+ }
+ } elseif (!is_dir($_compile_dir)) {
+ $status = false;
+ $message = "FAILED: {$_compile_dir} is not a directory";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'compile_dir' ] = $message;
+ }
+ } elseif (!is_readable($_compile_dir)) {
+ $status = false;
+ $message = "FAILED: {$_compile_dir} is not readable";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'compile_dir' ] = $message;
+ }
+ } elseif (!is_writable($_compile_dir)) {
+ $status = false;
+ $message = "FAILED: {$_compile_dir} is not writable";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'compile_dir' ] = $message;
+ }
+ } else {
+ if ($errors === null) {
+ echo "{$_compile_dir} is OK.\n";
+ }
+ }
+
+ if ($errors === null) {
+ echo "Testing plugins directory...\n";
+ }
+
+ // test if all registered plugins_dir are accessible
+ // and if core plugins directory is still registered
+ $_core_plugins_dir = realpath(dirname(__FILE__) . '/../plugins');
+ $_core_plugins_available = false;
+ foreach ($smarty->getPluginsDir() as $plugin_dir) {
+ $_plugin_dir = $plugin_dir;
+ $plugin_dir = realpath($plugin_dir);
+ // resolve include_path or fail existence
+ if (!$plugin_dir) {
+ if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) {
+ // try PHP include_path
+ if ($_stream_resolve_include_path) {
+ $plugin_dir = stream_resolve_include_path($_plugin_dir);
+ } else {
+ $plugin_dir = $smarty->ext->_getIncludePath->getIncludePath($_plugin_dir, null, $smarty);
+ }
+
+ if ($plugin_dir !== false) {
+ if ($errors === null) {
+ echo "$plugin_dir is OK.\n";
+ }
+
+ continue;
+ } else {
+ $status = false;
+ $message = "FAILED: $_plugin_dir does not exist (and couldn't be found in include_path either)";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'plugins_dir' ] = $message;
+ }
+
+ continue;
+ }
+ } else {
+ $status = false;
+ $message = "FAILED: $_plugin_dir does not exist";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'plugins_dir' ] = $message;
+ }
+
+ continue;
+ }
+ }
+
+ if (!is_dir($plugin_dir)) {
+ $status = false;
+ $message = "FAILED: $plugin_dir is not a directory";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'plugins_dir' ] = $message;
+ }
+ } elseif (!is_readable($plugin_dir)) {
+ $status = false;
+ $message = "FAILED: $plugin_dir is not readable";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'plugins_dir' ] = $message;
+ }
+ } elseif ($_core_plugins_dir && $_core_plugins_dir == realpath($plugin_dir)) {
+ $_core_plugins_available = true;
+ if ($errors === null) {
+ echo "$plugin_dir is OK.\n";
+ }
+ } else {
+ if ($errors === null) {
+ echo "$plugin_dir is OK.\n";
+ }
+ }
+ }
+ if (!$_core_plugins_available) {
+ $status = false;
+ $message = "WARNING: Smarty's own libs/plugins is not available";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } elseif (!isset($errors[ 'plugins_dir' ])) {
+ $errors[ 'plugins_dir' ] = $message;
+ }
+ }
+
+ if ($errors === null) {
+ echo "Testing cache directory...\n";
+ }
+
+ // test if all registered cache_dir is accessible
+ $__cache_dir = $smarty->getCacheDir();
+ $_cache_dir = realpath($__cache_dir);
+ if (!$_cache_dir) {
+ $status = false;
+ $message = "FAILED: {$__cache_dir} does not exist";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'cache_dir' ] = $message;
+ }
+ } elseif (!is_dir($_cache_dir)) {
+ $status = false;
+ $message = "FAILED: {$_cache_dir} is not a directory";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'cache_dir' ] = $message;
+ }
+ } elseif (!is_readable($_cache_dir)) {
+ $status = false;
+ $message = "FAILED: {$_cache_dir} is not readable";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'cache_dir' ] = $message;
+ }
+ } elseif (!is_writable($_cache_dir)) {
+ $status = false;
+ $message = "FAILED: {$_cache_dir} is not writable";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'cache_dir' ] = $message;
+ }
+ } else {
+ if ($errors === null) {
+ echo "{$_cache_dir} is OK.\n";
+ }
+ }
+
+ if ($errors === null) {
+ echo "Testing configs directory...\n";
+ }
+
+ // test if all registered config_dir are accessible
+ foreach ($smarty->getConfigDir() as $config_dir) {
+ $_config_dir = $config_dir;
+ // resolve include_path or fail existence
+ if (!$config_dir) {
+ if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_config_dir)) {
+ // try PHP include_path
+ if ($_stream_resolve_include_path) {
+ $config_dir = stream_resolve_include_path($_config_dir);
+ } else {
+ $config_dir = $smarty->ext->_getIncludePath->getIncludePath($_config_dir, null, $smarty);
+ }
+
+ if ($config_dir !== false) {
+ if ($errors === null) {
+ echo "$config_dir is OK.\n";
+ }
+
+ continue;
+ } else {
+ $status = false;
+ $message = "FAILED: $_config_dir does not exist (and couldn't be found in include_path either)";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'config_dir' ] = $message;
+ }
+
+ continue;
+ }
+ } else {
+ $status = false;
+ $message = "FAILED: $_config_dir does not exist";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'config_dir' ] = $message;
+ }
+
+ continue;
+ }
+ }
+
+ if (!is_dir($config_dir)) {
+ $status = false;
+ $message = "FAILED: $config_dir is not a directory";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'config_dir' ] = $message;
+ }
+ } elseif (!is_readable($config_dir)) {
+ $status = false;
+ $message = "FAILED: $config_dir is not readable";
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'config_dir' ] = $message;
+ }
+ } else {
+ if ($errors === null) {
+ echo "$config_dir is OK.\n";
+ }
+ }
+ }
+
+ if ($errors === null) {
+ echo "Testing sysplugin files...\n";
+ }
+ // test if sysplugins are available
+ $source = SMARTY_SYSPLUGINS_DIR;
+ if (is_dir($source)) {
+ $expectedSysplugins = array('smartycompilerexception.php' => true,
+ 'smartyexception.php' => true,
+ 'smarty_cacheresource.php' => true,
+ 'smarty_cacheresource_custom.php' => true,
+ 'smarty_cacheresource_keyvaluestore.php' => true,
+ 'smarty_data.php' => true,
+ 'smarty_internal_cacheresource_file.php' => true,
+ 'smarty_internal_compilebase.php' => true,
+ 'smarty_internal_compile_append.php' => true,
+ 'smarty_internal_compile_assign.php' => true,
+ 'smarty_internal_compile_block.php' => true,
+ 'smarty_internal_compile_break.php' => true,
+ 'smarty_internal_compile_call.php' => true,
+ 'smarty_internal_compile_capture.php' => true,
+ 'smarty_internal_compile_config_load.php' => true,
+ 'smarty_internal_compile_continue.php' => true,
+ 'smarty_internal_compile_debug.php' => true,
+ 'smarty_internal_compile_eval.php' => true,
+ 'smarty_internal_compile_extends.php' => true,
+ 'smarty_internal_compile_for.php' => true,
+ 'smarty_internal_compile_foreach.php' => true,
+ 'smarty_internal_compile_function.php' => true,
+ 'smarty_internal_compile_if.php' => true,
+ 'smarty_internal_compile_include.php' => true,
+ 'smarty_internal_compile_include_php.php' => true,
+ 'smarty_internal_compile_insert.php' => true,
+ 'smarty_internal_compile_ldelim.php' => true,
+ 'smarty_internal_compile_nocache.php' => true,
+ 'smarty_internal_compile_private_block_plugin.php' => true,
+ 'smarty_internal_compile_private_foreachsection.php' => true,
+ 'smarty_internal_compile_private_function_plugin.php' => true,
+ 'smarty_internal_compile_private_modifier.php' => true,
+ 'smarty_internal_compile_private_object_block_function.php' => true,
+ 'smarty_internal_compile_private_object_function.php' => true,
+ 'smarty_internal_compile_private_php.php' => true,
+ 'smarty_internal_compile_private_print_expression.php' => true,
+ 'smarty_internal_compile_private_registered_block.php' => true,
+ 'smarty_internal_compile_private_registered_function.php' => true,
+ 'smarty_internal_compile_private_special_variable.php' => true,
+ 'smarty_internal_compile_rdelim.php' => true,
+ 'smarty_internal_compile_section.php' => true,
+ 'smarty_internal_compile_setfilter.php' => true,
+ 'smarty_internal_compile_shared_inheritance.php' => true,
+ 'smarty_internal_compile_while.php' => true,
+ 'smarty_internal_configfilelexer.php' => true,
+ 'smarty_internal_configfileparser.php' => true,
+ 'smarty_internal_config_file_compiler.php' => true,
+ 'smarty_internal_data.php' => true,
+ 'smarty_internal_debug.php' => true,
+ 'smarty_internal_extension_clear.php' => true,
+ 'smarty_internal_extension_handler.php' => true,
+ 'smarty_internal_method_addautoloadfilters.php' => true,
+ 'smarty_internal_method_adddefaultmodifiers.php' => true,
+ 'smarty_internal_method_append.php' => true,
+ 'smarty_internal_method_appendbyref.php' => true,
+ 'smarty_internal_method_assignbyref.php' => true,
+ 'smarty_internal_method_assignglobal.php' => true,
+ 'smarty_internal_method_clearallassign.php' => true,
+ 'smarty_internal_method_clearallcache.php' => true,
+ 'smarty_internal_method_clearassign.php' => true,
+ 'smarty_internal_method_clearcache.php' => true,
+ 'smarty_internal_method_clearcompiledtemplate.php' => true,
+ 'smarty_internal_method_clearconfig.php' => true,
+ 'smarty_internal_method_compileallconfig.php' => true,
+ 'smarty_internal_method_compilealltemplates.php' => true,
+ 'smarty_internal_method_configload.php' => true,
+ 'smarty_internal_method_createdata.php' => true,
+ 'smarty_internal_method_getautoloadfilters.php' => true,
+ 'smarty_internal_method_getconfigvars.php' => true,
+ 'smarty_internal_method_getdebugtemplate.php' => true,
+ 'smarty_internal_method_getdefaultmodifiers.php' => true,
+ 'smarty_internal_method_getregisteredobject.php' => true,
+ 'smarty_internal_method_getstreamvariable.php' => true,
+ 'smarty_internal_method_gettags.php' => true,
+ 'smarty_internal_method_gettemplatevars.php' => true,
+ 'smarty_internal_method_loadfilter.php' => true,
+ 'smarty_internal_method_loadplugin.php' => true,
+ 'smarty_internal_method_mustcompile.php' => true,
+ 'smarty_internal_method_registercacheresource.php' => true,
+ 'smarty_internal_method_registerclass.php' => true,
+ 'smarty_internal_method_registerdefaultconfighandler.php' => true,
+ 'smarty_internal_method_registerdefaultpluginhandler.php' => true,
+ 'smarty_internal_method_registerdefaulttemplatehandler.php' => true,
+ 'smarty_internal_method_registerfilter.php' => true,
+ 'smarty_internal_method_registerobject.php' => true,
+ 'smarty_internal_method_registerplugin.php' => true,
+ 'smarty_internal_method_registerresource.php' => true,
+ 'smarty_internal_method_setautoloadfilters.php' => true,
+ 'smarty_internal_method_setdebugtemplate.php' => true,
+ 'smarty_internal_method_setdefaultmodifiers.php' => true,
+ 'smarty_internal_method_unloadfilter.php' => true,
+ 'smarty_internal_method_unregistercacheresource.php' => true,
+ 'smarty_internal_method_unregisterfilter.php' => true,
+ 'smarty_internal_method_unregisterobject.php' => true,
+ 'smarty_internal_method_unregisterplugin.php' => true,
+ 'smarty_internal_method_unregisterresource.php' => true,
+ 'smarty_internal_nocache_insert.php' => true,
+ 'smarty_internal_parsetree.php' => true,
+ 'smarty_internal_parsetree_code.php' => true,
+ 'smarty_internal_parsetree_dq.php' => true,
+ 'smarty_internal_parsetree_dqcontent.php' => true,
+ 'smarty_internal_parsetree_tag.php' => true,
+ 'smarty_internal_parsetree_template.php' => true,
+ 'smarty_internal_parsetree_text.php' => true,
+ 'smarty_internal_resource_eval.php' => true,
+ 'smarty_internal_resource_extends.php' => true,
+ 'smarty_internal_resource_file.php' => true,
+ 'smarty_internal_resource_php.php' => true,
+ 'smarty_internal_resource_registered.php' => true,
+ 'smarty_internal_resource_stream.php' => true,
+ 'smarty_internal_resource_string.php' => true,
+ 'smarty_internal_runtime_cachemodify.php' => true,
+ 'smarty_internal_runtime_codeframe.php' => true,
+ 'smarty_internal_runtime_filterhandler.php' => true,
+ 'smarty_internal_runtime_foreach.php' => true,
+ 'smarty_internal_runtime_getincludepath.php' => true,
+ 'smarty_internal_runtime_hhvm.php' => true,
+ 'smarty_internal_runtime_inheritance.php' => true,
+ 'smarty_internal_runtime_subtemplate.php' => true,
+ 'smarty_internal_runtime_tplfunction.php' => true,
+ 'smarty_internal_runtime_updatecache.php' => true,
+ 'smarty_internal_runtime_updatescope.php' => true,
+ 'smarty_internal_runtime_validatecompiled.php' => true,
+ 'smarty_internal_runtime_var.php' => true,
+ 'smarty_internal_runtime_writefile.php' => true,
+ 'smarty_internal_smartytemplatecompiler.php' => true,
+ 'smarty_internal_template.php' => true,
+ 'smarty_internal_templatebase.php' => true,
+ 'smarty_internal_templatecompilerbase.php' => true,
+ 'smarty_internal_templatelexer.php' => true,
+ 'smarty_internal_templateparser.php' => true,
+ 'smarty_internal_testinstall.php' => true,
+ 'smarty_internal_undefined.php' => true,
+ 'smarty_resource.php' => true,
+ 'smarty_resource_custom.php' => true,
+ 'smarty_resource_recompiled.php' => true,
+ 'smarty_resource_uncompiled.php' => true,
+ 'smarty_security.php' => true,
+ 'smarty_template_cached.php' => true,
+ 'smarty_template_compiled.php' => true,
+ 'smarty_template_config.php' => true,
+ 'smarty_template_resource_base.php' => true,
+ 'smarty_template_source.php' => true,
+ 'smarty_undefined_variable.php' => true,
+ 'smarty_variable.php' => true,);
+ $iterator = new DirectoryIterator($source);
+ foreach ($iterator as $file) {
+ if (!$file->isDot()) {
+ $filename = $file->getFilename();
+ if (isset($expectedSysplugins[ $filename ])) {
+ unset($expectedSysplugins[ $filename ]);
+ }
+ }
+ }
+ if ($expectedSysplugins) {
+ $status = false;
+ $message = "FAILED: files missing from libs/sysplugins: " . join(', ', array_keys($expectedSysplugins));
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'sysplugins' ] = $message;
+ }
+ } elseif ($errors === null) {
+ echo "... OK\n";
+ }
+ } else {
+ $status = false;
+ $message = "FAILED: " . SMARTY_SYSPLUGINS_DIR . ' is not a directory';
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'sysplugins_dir_constant' ] = $message;
+ }
+ }
+
+ if ($errors === null) {
+ echo "Testing plugin files...\n";
+ }
+ // test if core plugins are available
+ $source = SMARTY_PLUGINS_DIR;
+ if (is_dir($source)) {
+ $expectedPlugins =
+ array('block.textformat.php' => true, 'function.counter.php' => true,
+ 'function.cycle.php' => true, 'function.fetch.php' => true,
+ 'function.html_checkboxes.php' => true, 'function.html_image.php' => true,
+ 'function.html_options.php' => true, 'function.html_radios.php' => true,
+ 'function.html_select_date.php' => true, 'function.html_select_time.php' => true,
+ 'function.html_table.php' => true, 'function.mailto.php' => true,
+ 'function.math.php' => true, 'modifier.capitalize.php' => true,
+ 'modifier.date_format.php' => true, 'modifier.debug_print_var.php' => true,
+ 'modifier.escape.php' => true, 'modifier.regex_replace.php' => true,
+ 'modifier.replace.php' => true, 'modifier.spacify.php' => true,
+ 'modifier.truncate.php' => true, 'modifiercompiler.cat.php' => true,
+ 'modifiercompiler.count_characters.php' => true, 'modifiercompiler.count_paragraphs.php' => true,
+ 'modifiercompiler.count_sentences.php' => true, 'modifiercompiler.count_words.php' => true,
+ 'modifiercompiler.default.php' => true, 'modifiercompiler.escape.php' => true,
+ 'modifiercompiler.from_charset.php' => true, 'modifiercompiler.indent.php' => true,
+ 'modifiercompiler.lower.php' => true, 'modifiercompiler.noprint.php' => true,
+ 'modifiercompiler.string_format.php' => true, 'modifiercompiler.strip.php' => true,
+ 'modifiercompiler.strip_tags.php' => true, 'modifiercompiler.to_charset.php' => true,
+ 'modifiercompiler.unescape.php' => true, 'modifiercompiler.upper.php' => true,
+ 'modifiercompiler.wordwrap.php' => true, 'outputfilter.trimwhitespace.php' => true,
+ 'shared.escape_special_chars.php' => true, 'shared.literal_compiler_param.php' => true,
+ 'shared.make_timestamp.php' => true, 'shared.mb_str_replace.php' => true,
+ 'shared.mb_unicode.php' => true, 'shared.mb_wordwrap.php' => true,
+ 'variablefilter.htmlspecialchars.php' => true,);
+ $iterator = new DirectoryIterator($source);
+ foreach ($iterator as $file) {
+ if (!$file->isDot()) {
+ $filename = $file->getFilename();
+ if (isset($expectedPlugins[ $filename ])) {
+ unset($expectedPlugins[ $filename ]);
+ }
+ }
+ }
+ if ($expectedPlugins) {
+ $status = false;
+ $message = "FAILED: files missing from libs/plugins: " . join(', ', array_keys($expectedPlugins));
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'plugins' ] = $message;
+ }
+ } elseif ($errors === null) {
+ echo "... OK\n";
+ }
+ } else {
+ $status = false;
+ $message = "FAILED: " . SMARTY_PLUGINS_DIR . ' is not a directory';
+ if ($errors === null) {
+ echo $message . ".\n";
+ } else {
+ $errors[ 'plugins_dir_constant' ] = $message;
+ }
+ }
+
+ if ($errors === null) {
+ echo "Tests complete.\n";
+ echo "</PRE>\n";
+ }
+
+ return $status;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_internal_undefined.php b/include/smarty/libs/sysplugins/smarty_internal_undefined.php
new file mode 100644
index 000000000..93fca8ec1
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_undefined.php
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * Smarty Method AppendByRef
+ *
+ * Smarty::appendByRef() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Undefined
+{
+
+ /**
+ * This function is executed automatically when a compiled or cached template file is included
+ * - Decode saved properties from compiled template and cache files
+ * - Check if compiled or cache file is valid
+ *
+ * @param array $properties special template properties
+ * @param bool $cache flag if called from cache file
+ *
+ * @return bool flag if compiled or cache file is valid
+ */
+ public function decodeProperties($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)
+ {
+ throw new SmartyException(get_class($args[0]) . "->{$name}() undefined method");
+ }
+} \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_internal_utility.php b/include/smarty/libs/sysplugins/smarty_internal_utility.php
deleted file mode 100644
index f19ca01f8..000000000
--- a/include/smarty/libs/sysplugins/smarty_internal_utility.php
+++ /dev/null
@@ -1,830 +0,0 @@
-<?php
-/**
- * Project: Smarty: the PHP compiling template engine
- * File: smarty_internal_utility.php
- * SVN: $Id: $
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * For questions, help, comments, discussion, etc., please join the
- * Smarty mailing list. Send a blank e-mail to
- * smarty-discussion-subscribe@googlegroups.com
- *
- * @link http://www.smarty.net/
- * @copyright 2008 New Digital Group, Inc.
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Uwe Tews
- * @package Smarty
- * @subpackage PluginsInternal
- * @version 3-SVN$Rev: 3286 $
- */
-
-
-/**
- * Utility class
- *
- * @package Smarty
- * @subpackage Security
- */
-class Smarty_Internal_Utility {
-
- /**
- * private constructor to prevent calls creation of new instances
- */
- private final function __construct()
- {
- // intentionally left blank
- }
-
- /**
- * Compile all template files
- *
- * @param string $extension template file name extension
- * @param bool $force_compile force all to recompile
- * @param int $time_limit set maximum execution time
- * @param int $max_errors set maximum allowed errors
- * @param Smarty $smarty Smarty instance
- * @return integer number of template files compiled
- */
- public static function compileAllTemplates($extention, $force_compile, $time_limit, $max_errors, Smarty $smarty)
- {
- // switch off time limit
- if (function_exists('set_time_limit')) {
- @set_time_limit($time_limit);
- }
- $smarty->force_compile = $force_compile;
- $_count = 0;
- $_error_count = 0;
- // loop over array of template directories
- foreach($smarty->getTemplateDir() as $_dir) {
- $_compileDirs = new RecursiveDirectoryIterator($_dir);
- $_compile = new RecursiveIteratorIterator($_compileDirs);
- foreach ($_compile as $_fileinfo) {
- $_file = $_fileinfo->getFilename();
- if (substr(basename($_fileinfo->getPathname()),0,1) == '.' || strpos($_file, '.svn') !== false) continue;
- if (!substr_compare($_file, $extention, - strlen($extention)) == 0) continue;
- if ($_fileinfo->getPath() == substr($_dir, 0, -1)) {
- $_template_file = $_file;
- } else {
- $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file;
- }
- echo '<br>', $_dir, '---', $_template_file;
- flush();
- $_start_time = microtime(true);
- try {
- $_tpl = $smarty->createTemplate($_template_file,null,null,null,false);
- if ($_tpl->mustCompile()) {
- $_tpl->compileTemplateSource();
- $_count++;
- echo ' compiled in ', microtime(true) - $_start_time, ' seconds';
- flush();
- } else {
- echo ' is up to date';
- flush();
- }
- }
- catch (Exception $e) {
- echo 'Error: ', $e->getMessage(), "<br><br>";
- $_error_count++;
- }
- // free memory
- $smarty->template_objects = array();
- $_tpl->smarty->template_objects = array();
- $_tpl = null;
- if ($max_errors !== null && $_error_count == $max_errors) {
- echo '<br><br>too many errors';
- exit();
- }
- }
- }
- return $_count;
- }
-
- /**
- * Compile all config files
- *
- * @param string $extension config file name extension
- * @param bool $force_compile force all to recompile
- * @param int $time_limit set maximum execution time
- * @param int $max_errors set maximum allowed errors
- * @param Smarty $smarty Smarty instance
- * @return integer number of config files compiled
- */
- public static function compileAllConfig($extention, $force_compile, $time_limit, $max_errors, Smarty $smarty)
- {
- // switch off time limit
- if (function_exists('set_time_limit')) {
- @set_time_limit($time_limit);
- }
- $smarty->force_compile = $force_compile;
- $_count = 0;
- $_error_count = 0;
- // loop over array of template directories
- foreach($smarty->getConfigDir() as $_dir) {
- $_compileDirs = new RecursiveDirectoryIterator($_dir);
- $_compile = new RecursiveIteratorIterator($_compileDirs);
- foreach ($_compile as $_fileinfo) {
- $_file = $_fileinfo->getFilename();
- if (substr(basename($_fileinfo->getPathname()),0,1) == '.' || strpos($_file, '.svn') !== false) continue;
- if (!substr_compare($_file, $extention, - strlen($extention)) == 0) continue;
- if ($_fileinfo->getPath() == substr($_dir, 0, -1)) {
- $_config_file = $_file;
- } else {
- $_config_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file;
- }
- echo '<br>', $_dir, '---', $_config_file;
- flush();
- $_start_time = microtime(true);
- try {
- $_config = new Smarty_Internal_Config($_config_file, $smarty);
- if ($_config->mustCompile()) {
- $_config->compileConfigSource();
- $_count++;
- echo ' compiled in ', microtime(true) - $_start_time, ' seconds';
- flush();
- } else {
- echo ' is up to date';
- flush();
- }
- }
- catch (Exception $e) {
- echo 'Error: ', $e->getMessage(), "<br><br>";
- $_error_count++;
- }
- if ($max_errors !== null && $_error_count == $max_errors) {
- echo '<br><br>too many errors';
- exit();
- }
- }
- }
- return $_count;
- }
-
- /**
- * Delete compiled template file
- *
- * @param string $resource_name template name
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time
- * @param Smarty $smarty Smarty instance
- * @return integer number of template files deleted
- */
- public static function clearCompiledTemplate($resource_name, $compile_id, $exp_time, Smarty $smarty)
- {
- $_compile_dir = $smarty->getCompileDir();
- $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null;
- $_dir_sep = $smarty->use_sub_dirs ? DS : '^';
- if (isset($resource_name)) {
- $_save_stat = $smarty->caching;
- $smarty->caching = false;
- $tpl = new $smarty->template_class($resource_name, $smarty);
- $smarty->caching = $_save_stat;
-
- // remove from template cache
- $tpl->source; // have the template registered before unset()
- if ($smarty->allow_ambiguous_resources) {
- $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id;
- } else {
- $_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id;
- }
- if (isset($_templateId[150])) {
- $_templateId = sha1($_templateId);
- }
- unset($smarty->template_objects[$_templateId]);
-
- if ($tpl->source->exists) {
- $_resource_part_1 = basename(str_replace('^', '/', $tpl->compiled->filepath));
- $_resource_part_1_length = strlen($_resource_part_1);
- } else {
- return 0;
- }
-
- $_resource_part_2 = str_replace('.php','.cache.php',$_resource_part_1);
- $_resource_part_2_length = strlen($_resource_part_2);
- }
- $_dir = $_compile_dir;
- if ($smarty->use_sub_dirs && isset($_compile_id)) {
- $_dir .= $_compile_id . $_dir_sep;
- }
- if (isset($_compile_id)) {
- $_compile_id_part = $_compile_dir . $_compile_id . $_dir_sep;
- $_compile_id_part_length = strlen($_compile_id_part);
- }
- $_count = 0;
- try {
- $_compileDirs = new RecursiveDirectoryIterator($_dir);
- // NOTE: UnexpectedValueException thrown for PHP >= 5.3
- } catch (Exception $e) {
- return 0;
- }
- $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST);
- foreach ($_compile as $_file) {
- if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false)
- continue;
-
- $_filepath = (string) $_file;
-
- if ($_file->isDir()) {
- if (!$_compile->isDot()) {
- // delete folder if empty
- @rmdir($_file->getPathname());
- }
- } else {
- $unlink = false;
- if ((!isset($_compile_id) || (isset($_filepath[$_compile_id_part_length]) && !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length)))
- && (!isset($resource_name)
- || (isset($_filepath[$_resource_part_1_length])
- && substr_compare($_filepath, $_resource_part_1, -$_resource_part_1_length, $_resource_part_1_length) == 0)
- || (isset($_filepath[$_resource_part_2_length])
- && substr_compare($_filepath, $_resource_part_2, -$_resource_part_2_length, $_resource_part_2_length) == 0))) {
- if (isset($exp_time)) {
- if (time() - @filemtime($_filepath) >= $exp_time) {
- $unlink = true;
- }
- } else {
- $unlink = true;
- }
- }
-
- if ($unlink && @unlink($_filepath)) {
- $_count++;
- }
- }
- }
- // clear compiled cache
- Smarty_Resource::$sources = array();
- Smarty_Resource::$compileds = array();
- return $_count;
- }
-
- /**
- * Return array of tag/attributes of all tags used by an template
- *
- * @param Smarty_Internal_Template $templae template object
- * @return array of tag/attributes
- */
- public static function getTags(Smarty_Internal_Template $template)
- {
- $template->smarty->get_used_tags = true;
- $template->compileTemplateSource();
- return $template->used_tags;
- }
-
-
- /**
- * diagnose Smarty setup
- *
- * If $errors is secified, the diagnostic report will be appended to the array, rather than being output.
- *
- * @param Smarty $smarty Smarty instance to test
- * @param array $errors array to push results into rather than outputting them
- * @return bool status, true if everything is fine, false else
- */
- public static function testInstall(Smarty $smarty, &$errors=null)
- {
- $status = true;
-
- if ($errors === null) {
- echo "<PRE>\n";
- echo "Smarty Installation test...\n";
- echo "Testing template directory...\n";
- }
-
- $_stream_resolve_include_path = function_exists('stream_resolve_include_path');
-
- // test if all registered template_dir are accessible
- foreach($smarty->getTemplateDir() as $template_dir) {
- $_template_dir = $template_dir;
- $template_dir = realpath($template_dir);
- // resolve include_path or fail existance
- if (!$template_dir) {
- if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_template_dir)) {
- // try PHP include_path
- if ($_stream_resolve_include_path) {
- $template_dir = stream_resolve_include_path($_template_dir);
- } else {
- $template_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_template_dir);
- }
-
- if ($template_dir !== false) {
- if ($errors === null) {
- echo "$template_dir is OK.\n";
- }
-
- continue;
- } else {
- $status = false;
- $message = "FAILED: $_template_dir does not exist (and couldn't be found in include_path either)";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['template_dir'] = $message;
- }
-
- continue;
- }
- } else {
- $status = false;
- $message = "FAILED: $_template_dir does not exist";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['template_dir'] = $message;
- }
-
- continue;
- }
- }
-
- if (!is_dir($template_dir)) {
- $status = false;
- $message = "FAILED: $template_dir is not a directory";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['template_dir'] = $message;
- }
- } elseif (!is_readable($template_dir)) {
- $status = false;
- $message = "FAILED: $template_dir is not readable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['template_dir'] = $message;
- }
- } else {
- if ($errors === null) {
- echo "$template_dir is OK.\n";
- }
- }
- }
-
-
- if ($errors === null) {
- echo "Testing compile directory...\n";
- }
-
- // test if registered compile_dir is accessible
- $__compile_dir = $smarty->getCompileDir();
- $_compile_dir = realpath($__compile_dir);
- if (!$_compile_dir) {
- $status = false;
- $message = "FAILED: {$__compile_dir} does not exist";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['compile_dir'] = $message;
- }
- } elseif (!is_dir($_compile_dir)) {
- $status = false;
- $message = "FAILED: {$_compile_dir} is not a directory";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['compile_dir'] = $message;
- }
- } elseif (!is_readable($_compile_dir)) {
- $status = false;
- $message = "FAILED: {$_compile_dir} is not readable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['compile_dir'] = $message;
- }
- } elseif (!is_writable($_compile_dir)) {
- $status = false;
- $message = "FAILED: {$_compile_dir} is not writable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['compile_dir'] = $message;
- }
- } else {
- if ($errors === null) {
- echo "{$_compile_dir} is OK.\n";
- }
- }
-
-
- if ($errors === null) {
- echo "Testing plugins directory...\n";
- }
-
- // test if all registered plugins_dir are accessible
- // and if core plugins directory is still registered
- $_core_plugins_dir = realpath(dirname(__FILE__) .'/../plugins');
- $_core_plugins_available = false;
- foreach($smarty->getPluginsDir() as $plugin_dir) {
- $_plugin_dir = $plugin_dir;
- $plugin_dir = realpath($plugin_dir);
- // resolve include_path or fail existance
- if (!$plugin_dir) {
- if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) {
- // try PHP include_path
- if ($_stream_resolve_include_path) {
- $plugin_dir = stream_resolve_include_path($_plugin_dir);
- } else {
- $plugin_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_plugin_dir);
- }
-
- if ($plugin_dir !== false) {
- if ($errors === null) {
- echo "$plugin_dir is OK.\n";
- }
-
- continue;
- } else {
- $status = false;
- $message = "FAILED: $_plugin_dir does not exist (and couldn't be found in include_path either)";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['plugins_dir'] = $message;
- }
-
- continue;
- }
- } else {
- $status = false;
- $message = "FAILED: $_plugin_dir does not exist";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['plugins_dir'] = $message;
- }
-
- continue;
- }
- }
-
- if (!is_dir($plugin_dir)) {
- $status = false;
- $message = "FAILED: $plugin_dir is not a directory";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['plugins_dir'] = $message;
- }
- } elseif (!is_readable($plugin_dir)) {
- $status = false;
- $message = "FAILED: $plugin_dir is not readable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['plugins_dir'] = $message;
- }
- } elseif ($_core_plugins_dir && $_core_plugins_dir == realpath($plugin_dir)) {
- $_core_plugins_available = true;
- if ($errors === null) {
- echo "$plugin_dir is OK.\n";
- }
- } else {
- if ($errors === null) {
- echo "$plugin_dir is OK.\n";
- }
- }
- }
- if (!$_core_plugins_available) {
- $status = false;
- $message = "WARNING: Smarty's own libs/plugins is not available";
- if ($errors === null) {
- echo $message . ".\n";
- } elseif (!isset($errors['plugins_dir'])) {
- $errors['plugins_dir'] = $message;
- }
- }
-
- if ($errors === null) {
- echo "Testing cache directory...\n";
- }
-
-
- // test if all registered cache_dir is accessible
- $__cache_dir = $smarty->getCacheDir();
- $_cache_dir = realpath($__cache_dir);
- if (!$_cache_dir) {
- $status = false;
- $message = "FAILED: {$__cache_dir} does not exist";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['cache_dir'] = $message;
- }
- } elseif (!is_dir($_cache_dir)) {
- $status = false;
- $message = "FAILED: {$_cache_dir} is not a directory";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['cache_dir'] = $message;
- }
- } elseif (!is_readable($_cache_dir)) {
- $status = false;
- $message = "FAILED: {$_cache_dir} is not readable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['cache_dir'] = $message;
- }
- } elseif (!is_writable($_cache_dir)) {
- $status = false;
- $message = "FAILED: {$_cache_dir} is not writable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['cache_dir'] = $message;
- }
- } else {
- if ($errors === null) {
- echo "{$_cache_dir} is OK.\n";
- }
- }
-
-
- if ($errors === null) {
- echo "Testing configs directory...\n";
- }
-
- // test if all registered config_dir are accessible
- foreach($smarty->getConfigDir() as $config_dir) {
- $_config_dir = $config_dir;
- $config_dir = realpath($config_dir);
- // resolve include_path or fail existance
- if (!$config_dir) {
- if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_config_dir)) {
- // try PHP include_path
- if ($_stream_resolve_include_path) {
- $config_dir = stream_resolve_include_path($_config_dir);
- } else {
- $config_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_config_dir);
- }
-
- if ($config_dir !== false) {
- if ($errors === null) {
- echo "$config_dir is OK.\n";
- }
-
- continue;
- } else {
- $status = false;
- $message = "FAILED: $_config_dir does not exist (and couldn't be found in include_path either)";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['config_dir'] = $message;
- }
-
- continue;
- }
- } else {
- $status = false;
- $message = "FAILED: $_config_dir does not exist";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['config_dir'] = $message;
- }
-
- continue;
- }
- }
-
- if (!is_dir($config_dir)) {
- $status = false;
- $message = "FAILED: $config_dir is not a directory";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['config_dir'] = $message;
- }
- } elseif (!is_readable($config_dir)) {
- $status = false;
- $message = "FAILED: $config_dir is not readable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['config_dir'] = $message;
- }
- } else {
- if ($errors === null) {
- echo "$config_dir is OK.\n";
- }
- }
- }
-
-
- if ($errors === null) {
- echo "Testing sysplugin files...\n";
- }
- // test if sysplugins are available
- $source = SMARTY_SYSPLUGINS_DIR;
- if (is_dir($source)) {
- $expected = array(
- "smarty_cacheresource.php" => true,
- "smarty_cacheresource_custom.php" => true,
- "smarty_cacheresource_keyvaluestore.php" => true,
- "smarty_config_source.php" => true,
- "smarty_internal_cacheresource_file.php" => true,
- "smarty_internal_compile_append.php" => true,
- "smarty_internal_compile_assign.php" => true,
- "smarty_internal_compile_block.php" => true,
- "smarty_internal_compile_break.php" => true,
- "smarty_internal_compile_call.php" => true,
- "smarty_internal_compile_capture.php" => true,
- "smarty_internal_compile_config_load.php" => true,
- "smarty_internal_compile_continue.php" => true,
- "smarty_internal_compile_debug.php" => true,
- "smarty_internal_compile_eval.php" => true,
- "smarty_internal_compile_extends.php" => true,
- "smarty_internal_compile_for.php" => true,
- "smarty_internal_compile_foreach.php" => true,
- "smarty_internal_compile_function.php" => true,
- "smarty_internal_compile_if.php" => true,
- "smarty_internal_compile_include.php" => true,
- "smarty_internal_compile_include_php.php" => true,
- "smarty_internal_compile_insert.php" => true,
- "smarty_internal_compile_ldelim.php" => true,
- "smarty_internal_compile_nocache.php" => true,
- "smarty_internal_compile_private_block_plugin.php" => true,
- "smarty_internal_compile_private_function_plugin.php" => true,
- "smarty_internal_compile_private_modifier.php" => true,
- "smarty_internal_compile_private_object_block_function.php" => true,
- "smarty_internal_compile_private_object_function.php" => true,
- "smarty_internal_compile_private_print_expression.php" => true,
- "smarty_internal_compile_private_registered_block.php" => true,
- "smarty_internal_compile_private_registered_function.php" => true,
- "smarty_internal_compile_private_special_variable.php" => true,
- "smarty_internal_compile_rdelim.php" => true,
- "smarty_internal_compile_section.php" => true,
- "smarty_internal_compile_setfilter.php" => true,
- "smarty_internal_compile_while.php" => true,
- "smarty_internal_compilebase.php" => true,
- "smarty_internal_config.php" => true,
- "smarty_internal_config_file_compiler.php" => true,
- "smarty_internal_configfilelexer.php" => true,
- "smarty_internal_configfileparser.php" => true,
- "smarty_internal_data.php" => true,
- "smarty_internal_debug.php" => true,
- "smarty_internal_filter_handler.php" => true,
- "smarty_internal_function_call_handler.php" => true,
- "smarty_internal_get_include_path.php" => true,
- "smarty_internal_nocache_insert.php" => true,
- "smarty_internal_parsetree.php" => true,
- "smarty_internal_resource_eval.php" => true,
- "smarty_internal_resource_extends.php" => true,
- "smarty_internal_resource_file.php" => true,
- "smarty_internal_resource_registered.php" => true,
- "smarty_internal_resource_stream.php" => true,
- "smarty_internal_resource_string.php" => true,
- "smarty_internal_smartytemplatecompiler.php" => true,
- "smarty_internal_template.php" => true,
- "smarty_internal_templatebase.php" => true,
- "smarty_internal_templatecompilerbase.php" => true,
- "smarty_internal_templatelexer.php" => true,
- "smarty_internal_templateparser.php" => true,
- "smarty_internal_utility.php" => true,
- "smarty_internal_write_file.php" => true,
- "smarty_resource.php" => true,
- "smarty_resource_custom.php" => true,
- "smarty_resource_recompiled.php" => true,
- "smarty_resource_uncompiled.php" => true,
- "smarty_security.php" => true,
- );
- $iterator = new DirectoryIterator($source);
- foreach ($iterator as $file) {
- if (!$file->isDot()) {
- $filename = $file->getFilename();
- if (isset($expected[$filename])) {
- unset($expected[$filename]);
- }
- }
- }
- if ($expected) {
- $status = false;
- $message = "FAILED: files missing from libs/sysplugins: ". join(', ', array_keys($expected));
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['sysplugins'] = $message;
- }
- } elseif ($errors === null) {
- echo "... OK\n";
- }
- } else {
- $status = false;
- $message = "FAILED: ". SMARTY_SYSPLUGINS_DIR .' is not a directory';
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['sysplugins_dir_constant'] = $message;
- }
- }
-
- if ($errors === null) {
- echo "Testing plugin files...\n";
- }
- // test if core plugins are available
- $source = SMARTY_PLUGINS_DIR;
- if (is_dir($source)) {
- $expected = array(
- "block.textformat.php" => true,
- "function.counter.php" => true,
- "function.cycle.php" => true,
- "function.fetch.php" => true,
- "function.html_checkboxes.php" => true,
- "function.html_image.php" => true,
- "function.html_options.php" => true,
- "function.html_radios.php" => true,
- "function.html_select_date.php" => true,
- "function.html_select_time.php" => true,
- "function.html_table.php" => true,
- "function.mailto.php" => true,
- "function.math.php" => true,
- "modifier.capitalize.php" => true,
- "modifier.date_format.php" => true,
- "modifier.debug_print_var.php" => true,
- "modifier.escape.php" => true,
- "modifier.regex_replace.php" => true,
- "modifier.replace.php" => true,
- "modifier.spacify.php" => true,
- "modifier.truncate.php" => true,
- "modifiercompiler.cat.php" => true,
- "modifiercompiler.count_characters.php" => true,
- "modifiercompiler.count_paragraphs.php" => true,
- "modifiercompiler.count_sentences.php" => true,
- "modifiercompiler.count_words.php" => true,
- "modifiercompiler.default.php" => true,
- "modifiercompiler.escape.php" => true,
- "modifiercompiler.from_charset.php" => true,
- "modifiercompiler.indent.php" => true,
- "modifiercompiler.lower.php" => true,
- "modifiercompiler.noprint.php" => true,
- "modifiercompiler.string_format.php" => true,
- "modifiercompiler.strip.php" => true,
- "modifiercompiler.strip_tags.php" => true,
- "modifiercompiler.to_charset.php" => true,
- "modifiercompiler.unescape.php" => true,
- "modifiercompiler.upper.php" => true,
- "modifiercompiler.wordwrap.php" => true,
- "outputfilter.trimwhitespace.php" => true,
- "shared.escape_special_chars.php" => true,
- "shared.literal_compiler_param.php" => true,
- "shared.make_timestamp.php" => true,
- "shared.mb_str_replace.php" => true,
- "shared.mb_unicode.php" => true,
- "shared.mb_wordwrap.php" => true,
- "variablefilter.htmlspecialchars.php" => true,
- );
- $iterator = new DirectoryIterator($source);
- foreach ($iterator as $file) {
- if (!$file->isDot()) {
- $filename = $file->getFilename();
- if (isset($expected[$filename])) {
- unset($expected[$filename]);
- }
- }
- }
- if ($expected) {
- $status = false;
- $message = "FAILED: files missing from libs/plugins: ". join(', ', array_keys($expected));
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['plugins'] = $message;
- }
- } elseif ($errors === null) {
- echo "... OK\n";
- }
- } else {
- $status = false;
- $message = "FAILED: ". SMARTY_PLUGINS_DIR .' is not a directory';
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors['plugins_dir_constant'] = $message;
- }
- }
-
- if ($errors === null) {
- echo "Tests complete.\n";
- echo "</PRE>\n";
- }
-
- return $status;
- }
-
-}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_resource.php b/include/smarty/libs/sysplugins/smarty_resource.php
index 55f1497fb..93d9fa7a3 100644
--- a/include/smarty/libs/sysplugins/smarty_resource.php
+++ b/include/smarty/libs/sysplugins/smarty_resource.php
@@ -2,62 +2,70 @@
/**
* Smarty Resource Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
/**
* Smarty Resource Plugin
- *
* Base implementation for resource plugins
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-abstract class Smarty_Resource {
+abstract class Smarty_Resource
+{
/**
- * cache for Smarty_Template_Source instances
- * @var array
+ * Source is bypassing compiler
+ *
+ * @var boolean
*/
- public static $sources = array();
+ public $uncompiled = false;
+
/**
- * cache for Smarty_Template_Compiled instances
- * @var array
+ * Source must be recompiled on every occasion
+ *
+ * @var boolean
*/
- public static $compileds = array();
+ public $recompiled = false;
+
/**
- * cache for Smarty_Resource instances
+ * resource types provided by the core
+ *
* @var array
*/
- public static $resources = array();
+ public static $sysplugins = array('file' => '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');
+
/**
- * resource types provided by the core
- * @var array
+ * Flag if resource does implement populateCompiledFilepath() method
+ *
+ * @var bool
*/
- protected static $sysplugins = array(
- 'file' => true,
- 'string' => true,
- 'extends' => true,
- 'stream' => true,
- 'eval' => true,
- 'php' => true
- );
+ public $hasCompiledHandler = false;
/**
* Name of the Class to compile this resource's contents with
+ *
* @var string
*/
public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler';
/**
* Name of the Class to tokenize this resource's contents with
+ *
* @var string
*/
public $template_lexer_class = 'Smarty_Internal_Templatelexer';
/**
* Name of the Class to parse this resource's contents with
+ *
* @var string
*/
public $template_parser_class = 'Smarty_Internal_Templateparser';
@@ -65,21 +73,20 @@ abstract class Smarty_Resource {
/**
* Load template's source into current template object
*
- * {@internal The loaded source is assigned to $_template->source->content directly.}}
+ * @param Smarty_Template_Source $source source object
*
- * @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
+ * @return string template source
+ * @throws SmartyException if source cannot be loaded
*/
- public abstract function getContent(Smarty_Template_Source $source);
+ 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
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
*/
- public abstract function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null);
+ abstract public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null);
/**
* populate Source Object with timestamp and exists from Resource
@@ -91,273 +98,38 @@ abstract class Smarty_Resource {
// 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
- * @return string unique resource name
- */
- protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
- {
- return get_class($this) . '#' . $smarty->joined_template_dir . '#' . $resource_name;
- }
-
- /**
- * populate Compiled Object with compiled filepath
+ * @param Smarty $smarty Smarty instance
+ * @param string $resource_name resource_name to make unique
+ * @param boolean $isConfig flag for config resource
*
- * @param Smarty_Template_Compiled $compiled compiled object
- * @param Smarty_Internal_Template $_template template object
- */
- public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template)
- {
- $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w\|]+!', '_', $_template->compile_id) : null;
- $_filepath = $compiled->source->uid;
- // if use_sub_dirs, break file into directories
- if ($_template->smarty->use_sub_dirs) {
- $_filepath = substr($_filepath, 0, 2) . DS
- . substr($_filepath, 2, 2) . DS
- . substr($_filepath, 4, 2) . DS
- . $_filepath;
- }
- $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^';
- if (isset($_compile_id)) {
- $_filepath = $_compile_id . $_compile_dir_sep . $_filepath;
- }
- // caching token
- if ($_template->caching) {
- $_cache = '.cache';
- } else {
- $_cache = '';
- }
- $_compile_dir = $_template->smarty->getCompileDir();
- // set basename if not specified
- $_basename = $this->getBasename($compiled->source);
- if ($_basename === null) {
- $_basename = basename( preg_replace('![^\w\/]+!', '_', $compiled->source->name) );
- }
- // separate (optional) basename by dot
- if ($_basename) {
- $_basename = '.' . $_basename;
- }
-
- $compiled->filepath = $_compile_dir . $_filepath . '.' . $compiled->source->type . $_basename . $_cache . '.php';
- }
-
- /**
- * Normalize Paths "foo/../bar" to "bar"
- *
- * @param string $_path path to normalize
- * @param boolean $ds respect windows directory separator
- * @return string normalized path
+ * @return string unique resource name
*/
- protected function normalizePath($_path, $ds=true)
+ public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
{
- if ($ds) {
- // don't we all just love windows?
- $_path = str_replace('\\', '/', $_path);
- }
-
- $offset = 0;
-
- // resolve simples
- $_path = preg_replace('#(/\./(\./)*)|/{2,}#', '/', $_path);
- // resolve parents
- while (true) {
- $_parent = strpos($_path, '/../', $offset);
- if (!$_parent) {
- break;
- } else if ($_path[$_parent - 1] === '.') {
- $offset = $_parent + 3;
- continue;
- }
-
- $_pos = strrpos($_path, '/', $_parent - strlen($_path) - 1);
- if ($_pos === false) {
- // don't we all just love windows?
- $_pos = $_parent;
+ if ($isConfig) {
+ if (!isset($smarty->_joined_config_dir)) {
+ $smarty->getTemplateDir(null, true);
}
-
- $_path = substr_replace($_path, '', $_pos, $_parent + 3 - $_pos);
- }
-
- if ($ds && DS != '/') {
- // don't we all just love windows?
- $_path = str_replace('/', '\\', $_path);
- }
-
- return $_path;
- }
-
- /**
- * build template filepath by traversing the template_dir array
- *
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
- * @return string fully qualified filepath
- * @throws SmartyException if default template handler is registered but not callable
- */
- protected function buildFilepath(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
- {
- $file = $source->name;
- if ($source instanceof Smarty_Config_Source) {
- $_directories = $source->smarty->getConfigDir();
- $_default_handler = $source->smarty->default_config_handler_func;
+ return get_class($this) . '#' . $smarty->_joined_config_dir . '#' . $resource_name;
} else {
- $_directories = $source->smarty->getTemplateDir();
- $_default_handler = $source->smarty->default_template_handler_func;
- }
-
- // go relative to a given template?
- $_file_is_dotted = $file[0] == '.' && ($file[1] == '.' || $file[1] == '/' || $file[1] == "\\");
- if ($_template && $_template->parent instanceof Smarty_Internal_Template && $_file_is_dotted) {
- if ($_template->parent->source->type != 'file' && $_template->parent->source->type != 'extends' && !$_template->parent->allow_relative_path) {
- throw new SmartyException("Template '{$file}' cannot be relative to template of resource type '{$_template->parent->source->type}'");
- }
- $file = dirname($_template->parent->source->filepath) . DS . $file;
- $_file_exact_match = true;
- if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $file)) {
- // the path gained from the parent template is relative to the current working directory
- // as expansions (like include_path) have already been done
- $file = getcwd() . DS . $file;
- }
- }
-
- // resolve relative path
- if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $file)) {
- // don't we all just love windows?
- $_path = str_replace('\\', '/', $file);
- $_path = DS . trim($file, '/');
- $_was_relative = true;
- } else {
- // don't we all just love windows?
- $_path = str_replace('\\', '/', $file);
- }
- $_path = $this->normalizePath($_path, false);
- if (DS != '/') {
- // don't we all just love windows?
- $_path = str_replace('/', '\\', $_path);
- }
- // revert to relative
- if (isset($_was_relative)) {
- $_path = substr($_path, 1);
- }
-
- // this is only required for directories
- $file = rtrim($_path, '/\\');
-
- // files relative to a template only get one shot
- if (isset($_file_exact_match)) {
- return $this->fileExists($source, $file) ? $file : false;
- }
-
- // template_dir index?
- if (preg_match('#^\[(?P<key>[^\]]+)\](?P<file>.+)$#', $file, $match)) {
- $_directory = null;
- // try string indexes
- if (isset($_directories[$match['key']])) {
- $_directory = $_directories[$match['key']];
- } else if (is_numeric($match['key'])) {
- // try numeric index
- $match['key'] = (int) $match['key'];
- if (isset($_directories[$match['key']])) {
- $_directory = $_directories[$match['key']];
- } else {
- // try at location index
- $keys = array_keys($_directories);
- $_directory = $_directories[$keys[$match['key']]];
- }
- }
-
- if ($_directory) {
- $_file = substr($file, strpos($file, ']') + 1);
- $_filepath = $_directory . $_file;
- if ($this->fileExists($source, $_filepath)) {
- return $_filepath;
- }
+ if (!isset($smarty->_joined_template_dir)) {
+ $smarty->getTemplateDir();
}
+ return get_class($this) . '#' . $smarty->_joined_template_dir . '#' . $resource_name;
}
-
- $_stream_resolve_include_path = function_exists('stream_resolve_include_path');
-
- // relative file name?
- if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $file)) {
- foreach ($_directories as $_directory) {
- $_filepath = $_directory . $file;
- if ($this->fileExists($source, $_filepath)) {
- return $this->normalizePath($_filepath);
- }
- if ($source->smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_directory)) {
- // try PHP include_path
- if ($_stream_resolve_include_path) {
- $_filepath = stream_resolve_include_path($_filepath);
- } else {
- $_filepath = Smarty_Internal_Get_Include_Path::getIncludePath($_filepath);
- }
-
- if ($_filepath !== false) {
- if ($this->fileExists($source, $_filepath)) {
- return $this->normalizePath($_filepath);
- }
- }
- }
- }
- }
-
- // try absolute filepath
- if ($this->fileExists($source, $file)) {
- return $file;
- }
-
- // no tpl file found
- if ($_default_handler) {
- if (!is_callable($_default_handler)) {
- if ($source instanceof Smarty_Config_Source) {
- throw new SmartyException("Default config handler not callable");
- } else {
- throw new SmartyException("Default template handler not callable");
- }
- }
- $_return = call_user_func_array($_default_handler,
- array($source->type, $source->name, &$_content, &$_timestamp, $source->smarty));
- if (is_string($_return)) {
- $source->timestamp = @filemtime($_return);
- $source->exists = !!$source->timestamp;
- return $_return;
- } elseif ($_return === true) {
- $source->content = $_content;
- $source->timestamp = $_timestamp;
- $source->exists = true;
- return $_filepath;
- }
- }
-
- // give up
- return false;
- }
-
- /**
- * test is file exists and save timestamp
- *
- * @param Smarty_Template_Source $source source object
- * @param string $file file name
- * @return bool true if file exists
- */
- protected function fileExists(Smarty_Template_Source $source, $file)
- {
- $source->timestamp = @filemtime($file);
- return $source->exists = !!$source->timestamp;
-
}
/**
* Determine basename for compiled filename
*
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
*/
- protected function getBasename(Smarty_Template_Source $source)
+ public function getBasename(Smarty_Template_Source $source)
{
return null;
}
@@ -365,62 +137,41 @@ abstract class Smarty_Resource {
/**
* Load Resource Handler
*
- * @param Smarty $smarty smarty object
- * @param string $type name of the resource
+ * @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->_resource_handlers[$type])) {
- return $smarty->_resource_handlers[$type];
+ if (isset($smarty->_cache['resource_handlers'][$type])) {
+ return $smarty->_cache['resource_handlers'][$type];
}
// try registered resource
if (isset($smarty->registered_resources[$type])) {
- if ($smarty->registered_resources[$type] instanceof Smarty_Resource) {
- $smarty->_resource_handlers[$type] = $smarty->registered_resources[$type];
- // note registered to smarty is not kept unique!
- return $smarty->_resource_handlers[$type];
- }
-
- if (!isset(self::$resources['registered'])) {
- self::$resources['registered'] = new Smarty_Internal_Resource_Registered();
- }
- if (!isset($smarty->_resource_handlers[$type])) {
- $smarty->_resource_handlers[$type] = self::$resources['registered'];
- }
-
- return $smarty->_resource_handlers[$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])) {
- if (!isset(self::$resources[$type])) {
- $_resource_class = 'Smarty_Internal_Resource_' . ucfirst($type);
- self::$resources[$type] = new $_resource_class();
- }
- return $smarty->_resource_handlers[$type] = self::$resources[$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 (isset(self::$resources[$type])) {
- return $smarty->_resource_handlers[$type] = self::$resources[$type];
- }
-
if (class_exists($_resource_class, false)) {
- self::$resources[$type] = new $_resource_class();
- return $smarty->_resource_handlers[$type] = self::$resources[$type];
+ 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"
- ));
-
+ $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);
}
@@ -433,425 +184,87 @@ abstract class Smarty_Resource {
if (is_object($smarty->security_policy)) {
$smarty->security_policy->isTrustedStream($type);
}
- if (!isset(self::$resources['stream'])) {
- self::$resources['stream'] = new Smarty_Internal_Resource_Stream();
- }
- return $smarty->_resource_handlers[$type] = self::$resources['stream'];
+ return $smarty->_cache['resource_handlers'][$type] = new Smarty_Internal_Resource_Stream();
}
// TODO: try default_(template|config)_handler
// give up
- throw new SmartyException("Unkown resource type '{$type}'");
+ 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
- * @param string &$name the parsed resource name
- * @param string &$type the parsed resource type
- * @return void
+ *
+ * @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
*/
- protected static function parseResourceName($resource_name, $default_resource, &$name, &$type)
+ public static function parseResourceName($resource_name, $default_resource)
{
- $parts = explode(':', $resource_name, 2);
- if (!isset($parts[1]) || !isset($parts[0][1])) {
+ 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;
- } else {
- $type = $parts[0];
- $name = $parts[1];
}
+ return array($name, $type);
}
-
- /**
- * modify resource_name according to resource handlers specifications
- *
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
- * @return string unique resource name
- */
-
/**
* modify template_resource according to resource handlers specifications
*
- * @param string $smarty Smarty instance
- * @param string $template_resource template_resource to extracate resource handler and name of
+ * @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($smarty, $template_resource)
+ public static function getUniqueTemplateName($obj, $template_resource)
{
- self::parseResourceName($template_resource, $smarty->default_resource_type, $name, $type);
+ $smarty = $obj->_objType == 2 ? $obj->smarty : $obj;
+ 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);
- return $resource->buildUniqueResourceName($smarty, $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
- */
- public static function source(Smarty_Internal_Template $_template=null, Smarty $smarty=null, $template_resource=null)
- {
- if ($_template) {
- $smarty = $_template->smarty;
- $template_resource = $_template->template_resource;
- }
-
- // parse resource_name, load resource handler, identify unique resource name
- self::parseResourceName($template_resource, $smarty->default_resource_type, $name, $type);
- $resource = Smarty_Resource::load($smarty, $type);
- $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name);
-
- // check runtime cache
- $_cache_key = 'template|' . $unique_resource_name;
- if ($smarty->compile_id) {
- $_cache_key .= '|'.$smarty->compile_id;
- }
- if (isset(self::$sources[$_cache_key])) {
- return self::$sources[$_cache_key];
- }
-
- // create source
- $source = new Smarty_Template_Source($resource, $smarty, $template_resource, $type, $name, $unique_resource_name);
- $resource->populate($source, $_template);
-
- // runtime cache
- self::$sources[$_cache_key] = $source;
- return $source;
- }
-
- /**
- * initialize Config Source Object for given resource
- *
- * @param Smarty_Internal_Config $_config config object
- * @return Smarty_Config_Source Source Object
- */
- public static function config(Smarty_Internal_Config $_config)
- {
- static $_incompatible_resources = array('eval' => true, 'string' => true, 'extends' => true, 'php' => true);
- $config_resource = $_config->config_resource;
- $smarty = $_config->smarty;
-
- // parse resource_name
- self::parseResourceName($config_resource, $smarty->default_config_type, $name, $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");
- }
-
- // load resource handler, identify unique resource name
- $resource = Smarty_Resource::load($smarty, $type);
- $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name);
-
- // check runtime cache
- $_cache_key = 'config|' . $unique_resource_name;
- if (isset(self::$sources[$_cache_key])) {
- return self::$sources[$_cache_key];
- }
-
- // create source
- $source = new Smarty_Config_Source($resource, $smarty, $config_resource, $type, $name, $unique_resource_name);
- $resource->populate($source, null);
-
- // runtime cache
- self::$sources[$_cache_key] = $source;
- return $source;
- }
-
-}
-
-/**
- * Smarty Resource Data Object
- *
- * Meta Data Container for Template Files
- *
- * @package Smarty
- * @subpackage TemplateResources
- * @author Rodney Rehm
- *
- * @property integer $timestamp Source Timestamp
- * @property boolean $exists Source Existance
- * @property boolean $template Extended Template reference
- * @property string $content Source Content
- */
-class Smarty_Template_Source {
-
- /**
- * Name of the Class to compile this resource's contents with
- * @var string
- */
- public $compiler_class = null;
-
- /**
- * Name of the Class to tokenize this resource's contents with
- * @var string
- */
- public $template_lexer_class = null;
-
- /**
- * Name of the Class to parse this resource's contents with
- * @var string
- */
- public $template_parser_class = null;
-
- /**
- * Unique Template ID
- * @var string
- */
- public $uid = null;
-
- /**
- * Template Resource (Smarty_Internal_Template::$template_resource)
- * @var string
- */
- public $resource = null;
-
- /**
- * Resource Type
- * @var string
- */
- public $type = null;
-
- /**
- * Resource Name
- * @var string
- */
- public $name = null;
-
- /**
- * Unique Resource Name
- * @var string
- */
- public $unique_resource = null;
-
- /**
- * Source Filepath
- * @var string
- */
- public $filepath = null;
-
- /**
- * Source is bypassing compiler
- * @var boolean
- */
- public $uncompiled = null;
-
- /**
- * Source must be recompiled on every occasion
- * @var boolean
- */
- public $recompiled = null;
-
- /**
- * The Components an extended template is made of
- * @var array
- */
- public $components = null;
-
- /**
- * Resource Handler
- * @var Smarty_Resource
- */
- public $handler = null;
-
- /**
- * Smarty instance
- * @var Smarty
- */
- public $smarty = null;
-
- /**
- * create Source Object container
- *
- * @param Smarty_Resource $handler Resource Handler this source object communicates with
- * @param Smarty $smarty Smarty instance this source object belongs to
- * @param string $resource full template_resource
- * @param string $type type of resource
- * @param string $name resource name
- * @param string $unique_resource unqiue resource name
- */
- public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name, $unique_resource)
- {
- $this->handler = $handler; // Note: prone to circular references
-
- $this->compiler_class = $handler->compiler_class;
- $this->template_lexer_class = $handler->template_lexer_class;
- $this->template_parser_class = $handler->template_parser_class;
- $this->uncompiled = $this->handler instanceof Smarty_Resource_Uncompiled;
- $this->recompiled = $this->handler instanceof Smarty_Resource_Recompiled;
-
- $this->smarty = $smarty;
- $this->resource = $resource;
- $this->type = $type;
- $this->name = $name;
- $this->unique_resource = $unique_resource;
- }
-
- /**
- * get a Compiled Object of this source
- *
- * @param Smarty_Internal_Template $_template template objet
- * @return Smarty_Template_Compiled compiled object
- */
- public function getCompiled(Smarty_Internal_Template $_template)
- {
- // check runtime cache
- $_cache_key = $this->unique_resource . '#' . $_template->compile_id;
- if (isset(Smarty_Resource::$compileds[$_cache_key])) {
- return Smarty_Resource::$compileds[$_cache_key];
- }
-
- $compiled = new Smarty_Template_Compiled($this);
- $this->handler->populateCompiledFilepath($compiled, $_template);
- $compiled->timestamp = @filemtime($compiled->filepath);
- $compiled->exists = !!$compiled->timestamp;
-
- // runtime cache
- Smarty_Resource::$compileds[$_cache_key] = $compiled;
-
- return $compiled;
- }
-
- /**
- * render the uncompiled source
- *
- * @param Smarty_Internal_Template $_template template object
- */
- public function renderUncompiled(Smarty_Internal_Template $_template)
- {
- return $this->handler->renderUncompiled($this, $_template);
- }
-
- /**
- * <<magic>> Generic Setter.
- *
- * @param string $property_name valid: timestamp, exists, content, template
- * @param mixed $value new value (is not checked)
- * @throws SmartyException if $property_name is not valid
- */
- public function __set($property_name, $value)
- {
- switch ($property_name) {
- // regular attributes
- case 'timestamp':
- case 'exists':
- case 'content':
- // required for extends: only
- case 'template':
- $this->$property_name = $value;
- break;
-
- default:
- throw new SmartyException("invalid source property '$property_name'.");
+ // go relative to a given template?
+ $_file_is_dotted = $name[0] == '.' && ($name[1] == '.' || $name[1] == '/');
+ if ($obj->_objType == 2 && $_file_is_dotted &&
+ ($obj->source->type == 'file' || $obj->parent->source->type == 'extends')
+ ) {
+ $name = dirname($obj->source->filepath) . DS . $name;
}
+ return $resource->buildUniqueResourceName($smarty, $name);
}
- /**
- * <<magic>> Generic getter.
+ /*
+ * 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.
*
- * @param string $property_name valid: timestamp, exists, content
- * @return mixed
- * @throws SmartyException if $property_name is not valid
+ * @return bool
*/
- public function __get($property_name)
- {
- switch ($property_name) {
- case 'timestamp':
- case 'exists':
- $this->handler->populateTimestamp($this);
- return $this->$property_name;
-
- case 'content':
- return $this->content = $this->handler->getContent($this);
-
- default:
- throw new SmartyException("source property '$property_name' does not exist.");
- }
+ public function checkTimestamps() {
+ return true;
}
-}
-
-/**
- * Smarty Resource Data Object
- *
- * Meta Data Container for Template Files
- *
- * @package Smarty
- * @subpackage TemplateResources
- * @author Rodney Rehm
- *
- * @property string $content compiled content
- */
-class Smarty_Template_Compiled {
-
- /**
- * Compiled Filepath
- * @var string
- */
- public $filepath = null;
-
- /**
- * Compiled Timestamp
- * @var integer
- */
- public $timestamp = null;
-
- /**
- * Compiled Existance
- * @var boolean
- */
- public $exists = false;
-
/**
- * Compiled Content Loaded
- * @var boolean
- */
- public $loaded = false;
-
- /**
- * Template was compiled
- * @var boolean
- */
- public $isCompiled = false;
-
- /**
- * Source Object
- * @var Smarty_Template_Source
- */
- public $source = null;
-
- /**
- * Metadata properties
+ * initialize Source Object for given resource
+ * wrapper for backward compatibility to versions < 3.1.22
+ * Either [$_template] or [$smarty, $template_resource] must be specified
*
- * populated by Smarty_Internal_Template::decodeProperties()
- * @var array
- */
- public $_properties = null;
-
- /**
- * create Compiled Object container
+ * @param Smarty_Internal_Template $_template template object
+ * @param Smarty $smarty smarty object
+ * @param string $template_resource resource identifier
*
- * @param Smarty_Template_Source $source source object this compiled object belongs to
+ * @return Smarty_Template_Source Source Object
*/
- public function __construct(Smarty_Template_Source $source)
+ public static function source(Smarty_Internal_Template $_template = null, Smarty $smarty = null,
+ $template_resource = null)
{
- $this->source = $source;
+ return Smarty_Template_Source::load($_template, $smarty, $template_resource);
}
-
}
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_resource_custom.php b/include/smarty/libs/sysplugins/smarty_resource_custom.php
index 9ec1f356b..619f2d6f0 100644
--- a/include/smarty/libs/sysplugins/smarty_resource_custom.php
+++ b/include/smarty/libs/sysplugins/smarty_resource_custom.php
@@ -2,21 +2,20 @@
/**
* Smarty Resource Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
/**
* Smarty Resource Plugin
- *
* Wrapper Implementation for custom resource plugins
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-abstract class Smarty_Resource_Custom extends Smarty_Resource {
-
+abstract class Smarty_Resource_Custom extends Smarty_Resource
+{
/**
* fetch template and its modification time from data source
*
@@ -24,15 +23,15 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
* @param string &$source template source
* @param integer &$mtime template modification timestamp (epoch)
*/
- protected abstract function fetch($name, &$source, &$mtime);
+ abstract protected function fetch($name, &$source, &$mtime);
/**
* Fetch template's modification timestamp from data source
- *
* {@internal implementing this method is optional.
* Only implement it if modification times can be accessed faster than loading the complete template source.}}
*
- * @param string $name template name
+ * @param string $name template name
+ *
* @return integer|boolean timestamp (epoch) the template was modified, or false if not found
*/
protected function fetchTimestamp($name)
@@ -46,9 +45,9 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
* @param Smarty_Template_Source $source source object
* @param Smarty_Internal_Template $_template template object
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
- $source->filepath = strtolower($source->type . ':' . $source->name);
+ $source->filepath = $source->type . ':' . $source->name;
$source->uid = sha1($source->type . ':' . $source->name);
$mtime = $this->fetchTimestamp($source->name);
@@ -57,8 +56,9 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
} else {
$this->fetch($source->name, $content, $timestamp);
$source->timestamp = isset($timestamp) ? $timestamp : false;
- if( isset($content) )
+ if (isset($content)) {
$source->content = $content;
+ }
}
$source->exists = !!$source->timestamp;
}
@@ -66,9 +66,10 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
/**
* 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
+ * @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)
{
@@ -83,14 +84,12 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
/**
* Determine basename for compiled filename
*
- * @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
*/
- protected function getBasename(Smarty_Template_Source $source)
+ public function getBasename(Smarty_Template_Source $source)
{
return basename($source->name);
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_resource_recompiled.php b/include/smarty/libs/sysplugins/smarty_resource_recompiled.php
index ab55b93a6..cfd73401b 100644
--- a/include/smarty/libs/sysplugins/smarty_resource_recompiled.php
+++ b/include/smarty/libs/sysplugins/smarty_resource_recompiled.php
@@ -2,26 +2,40 @@
/**
* Smarty Resource Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
/**
* Smarty Resource Plugin
- *
* Base implementation for resource plugins that don't compile cache
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-abstract class Smarty_Resource_Recompiled extends Smarty_Resource {
+abstract class Smarty_Resource_Recompiled extends Smarty_Resource
+{
+ /**
+ * Flag that it's an recompiled resource
+ *
+ * @var bool
+ */
+ public $recompiled = true;
+
+ /**
+ * Resource does implement populateCompiledFilepath() method
+ *
+ * @var bool
+ */
+ public $hasCompiledHandler = true;
/**
* populate Compiled Object with compiled filepath
*
- * @param Smarty_Template_Compiled $compiled compiled object
- * @param Smarty_Internal_Template $_template template object
+ * @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)
@@ -30,7 +44,4 @@ abstract class Smarty_Resource_Recompiled extends Smarty_Resource {
$compiled->timestamp = false;
$compiled->exists = false;
}
-
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_resource_uncompiled.php b/include/smarty/libs/sysplugins/smarty_resource_uncompiled.php
index ea8023507..88d2bba81 100644
--- a/include/smarty/libs/sysplugins/smarty_resource_uncompiled.php
+++ b/include/smarty/libs/sysplugins/smarty_resource_uncompiled.php
@@ -2,29 +2,43 @@
/**
* Smarty Resource Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
/**
* Smarty Resource Plugin
- *
* Base implementation for resource plugins that don't use the compiler
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-abstract class Smarty_Resource_Uncompiled extends Smarty_Resource {
+abstract class Smarty_Resource_Uncompiled extends Smarty_Resource
+{
+ /**
+ * Flag that it's an uncompiled resource
+ *
+ * @var bool
+ */
+ public $uncompiled = true;
+
+ /**
+ * Resource does implement populateCompiledFilepath() method
+ *
+ * @var bool
+ */
+ public $hasCompiledHandler = true;
/**
* Render and output the template (without using the compiler)
*
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
- * @throws SmartyException on failure
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @throws SmartyException on failure
*/
- public abstract function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template);
+ abstract public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template);
/**
* populate compiled object with compiled filepath
@@ -39,6 +53,27 @@ abstract class Smarty_Resource_Uncompiled extends Smarty_Resource {
$compiled->exists = false;
}
+ /**
+ * render compiled template code
+ *
+ * @param Smarty_Internal_Template $_template
+ *
+ * @return string
+ * @throws Exception
+ */
+ public function render($_template)
+ {
+ $level = ob_get_level();
+ ob_start();
+ try {
+ $this->renderUncompiled($_template->source, $_template);
+ return ob_get_clean();
+ }
+ catch (Exception $e) {
+ while (ob_get_level() > $level) {
+ ob_end_clean();
+ }
+ throw $e;
+ }
+ }
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_security.php b/include/smarty/libs/sysplugins/smarty_security.php
index f8b31d963..9d48bcb21 100644
--- a/include/smarty/libs/sysplugins/smarty_security.php
+++ b/include/smarty/libs/sysplugins/smarty_security.php
@@ -2,25 +2,25 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage Security
- * @author Uwe Tews
+ * @author Uwe Tews
*/
-
+
/*
* FIXME: Smarty_Security API
* - getter and setter instead of public properties would allow cultivating an internal cache properly
* - current implementation of isTrustedResourceDir() assumes that Smarty::$template_dir and Smarty::$config_dir are immutable
* the cache is killed every time either of the variables change. That means that two distinct Smarty objects with differing
- * $template_dir or $config_dir should NOT share the same Smarty_Security instance,
- * as this would lead to (severe) performance penalty! how should this be handled?
+ * $template_dir or $config_dir should NOT share the same Smarty_Security instance,
+ * as this would lead to (severe) performance penalty! how should this be handled?
*/
/**
* This class does contain the security settings
*/
-class Smarty_Security {
-
+class Smarty_Security
+{
/**
* This determines how Smarty handles "<?php ... ?>" tags in templates.
* possible values:
@@ -34,6 +34,7 @@ class Smarty_Security {
* @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.
@@ -41,6 +42,7 @@ class Smarty_Security {
* @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.
@@ -48,124 +50,208 @@ class Smarty_Security {
* @var array
*/
public $trusted_dir = array();
+
/**
* List of regular expressions (PCRE) that include trusted URIs
*
* @var array
*/
public $trusted_uri = array();
+
/**
- * This is an array of trusted static classes.
+ * 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 array of trusted PHP functions.
+ * 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',
- 'nl2br',
- );
+ public $php_functions = array('isset', 'empty', 'count', 'sizeof', 'in_array', 'is_array', 'time',);
+
/**
- * This is an array of trusted PHP modifers.
- *
+ * This is an array of trusted PHP modifiers.
* If empty all modifiers are allowed.
- * To disable all modifier set $modifiers = null.
+ * To disable all modifier set $php_modifiers = null.
+ *
* @var array
*/
- public $php_modifiers = array(
- 'escape',
- 'count'
- );
+ 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 trusted streams.
+ * 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;
/**
- * Cache for $resource_dir lookups
+ * 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 = null;
+ protected $_resource_dir = array();
+
/**
- * Cache for $template_dir lookups
+ * Cache for $template_dir lookup
+ *
* @var array
*/
- protected $_template_dir = null;
+ protected $_template_dir = array();
+
/**
- * Cache for $config_dir lookups
+ * Cache for $config_dir lookup
+ *
* @var array
*/
- protected $_config_dir = null;
+ protected $_config_dir = array();
+
/**
- * Cache for $secure_dir lookups
+ * Cache for $secure_dir lookup
+ *
* @var array
*/
- protected $_secure_dir = null;
+ protected $_secure_dir = array();
+
/**
- * Cache for $php_resource_dir lookups
+ * Cache for $php_resource_dir lookup
+ *
* @var array
*/
protected $_php_resource_dir = null;
+
/**
- * Cache for $trusted_dir lookups
+ * 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
*/
@@ -173,74 +259,129 @@ class Smarty_Security {
{
$this->smarty = $smarty;
}
-
+
/**
* Check if PHP function is trusted.
*
- * @param string $function_name
- * @param object $compiler compiler object
- * @return boolean true if 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))) {
+ 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
+ * @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))) {
+ 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
+ * @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))) {
+ 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
+ * @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'))) {
+ 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
@@ -248,22 +389,44 @@ class Smarty_Security {
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", $compiler->lex->taglineno);
+ $compiler->trigger_template_error("tag '{$tag_name}' disabled by security setting", null, true);
}
- } else if (in_array($tag_name, $this->allowed_tags) && !in_array($tag_name, $this->disabled_tags)) {
+ } 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("tag '{$tag_name}' not allowed by security setting", $compiler->lex->taglineno);
+ $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
+ * @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)
@@ -277,21 +440,52 @@ class Smarty_Security {
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", $compiler->lex->taglineno);
+ $compiler->trigger_template_error("modifier '{$modifier_name}' disabled by security setting", null, true);
}
- } else if (in_array($modifier_name, $this->allowed_modifiers) && !in_array($modifier_name, $this->disabled_modifiers)) {
+ } 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", $compiler->lex->taglineno);
+ $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($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
+ * @param string $stream_name
+ *
+ * @return boolean true if stream is trusted
* @throws SmartyException if stream is not trusted
*/
public function isTrustedStream($stream_name)
@@ -306,89 +500,81 @@ class Smarty_Security {
/**
* Check if directory of file resource is trusted.
*
- * @param string $filepath
- * @return boolean true if directory is trusted
- * @throws SmartyException if directory is not 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)
+ public function isTrustedResourceDir($filepath, $isConfig = null)
{
- $_template = false;
- $_config = false;
- $_secure = false;
-
- $_template_dir = $this->smarty->getTemplateDir();
- $_config_dir = $this->smarty->getConfigDir();
-
- // check if index is outdated
- if ((!$this->_template_dir || $this->_template_dir !== $_template_dir)
- || (!$this->_config_dir || $this->_config_dir !== $_config_dir)
- || (!empty($this->secure_dir) && (!$this->_secure_dir || $this->_secure_dir !== $this->secure_dir))
- ) {
- $this->_resource_dir = array();
- $_template = true;
- $_config = true;
- $_secure = !empty($this->secure_dir);
- }
-
- // rebuild template dir index
- if ($_template) {
- $this->_template_dir = $_template_dir;
- foreach ($_template_dir as $directory) {
- $directory = realpath($directory);
- $this->_resource_dir[$directory] = true;
+ 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;
}
-
- // rebuild config dir index
- if ($_config) {
- $this->_config_dir = $_config_dir;
- foreach ($_config_dir as $directory) {
- $directory = realpath($directory);
- $this->_resource_dir[$directory] = true;
+ 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;
}
-
- // rebuild secure dir index
- if ($_secure) {
- $this->_secure_dir = $this->secure_dir;
- foreach ((array) $this->secure_dir as $directory) {
- $directory = realpath($directory);
- $this->_resource_dir[$directory] = true;
+ 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;
}
-
- $_filepath = realpath($filepath);
- $directory = dirname($_filepath);
- $_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($this->_resource_dir[$directory])) {
- // merge sub directories of current $directory into _resource_dir to speed up subsequent lookups
- $this->_resource_dir = array_merge($this->_resource_dir, $_directory);
- return true;
+ if ($this->_secure_dir !== (array) $this->secure_dir) {
+ foreach ($this->_secure_dir as $directory) {
+ unset($this->_resource_dir[$directory]);
}
- // abort if we've reached root
- if (($pos = strrpos($directory, DS)) === false || !isset($directory[1])) {
- break;
+ foreach ((array) $this->secure_dir as $directory) {
+ $directory = $this->smarty->_realpath($directory . DS, true);
+ $this->_resource_dir[$directory] = true;
}
- // bubble up one level
- $directory = substr($directory, 0, $pos);
+ $this->_secure_dir = (array) $this->secure_dir;
}
-
- // give up
- throw new SmartyException("directory '{$_filepath}' not allowed by security setting");
+ $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
+ *
+ * @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
*/
@@ -403,15 +589,16 @@ class Smarty_Security {
}
}
}
-
+
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
+ * @param string $filepath
+ *
+ * @return boolean true if directory is trusted
* @throws SmartyException if PHP directory is not trusted
*/
public function isTrustedPHPDir($filepath)
@@ -426,34 +613,103 @@ class Smarty_Security {
$this->_trusted_dir = $this->trusted_dir;
foreach ((array) $this->trusted_dir as $directory) {
- $directory = realpath($directory);
+ $directory = $this->smarty->_realpath($directory . DS, true);
$this->_php_resource_dir[$directory] = true;
}
}
- $_filepath = realpath($filepath);
- $directory = dirname($_filepath);
+ $this->_php_resource_dir = $this->_checkDir($this->smarty->_realpath($filepath, true), $this->_php_resource_dir);
+ return true;
+ }
+
+ /**
+ * 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
+ *
+ * @internal param $template
+ */
+ public function exitTemplate()
+ {
+ if ($this->max_template_nesting > 0) {
+ $this->_current_template_nesting --;
+ }
+ }
+
+ /**
+ * 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) . DS;
$_directory = array();
while (true) {
// remember the directory to add it to _resource_dir in case we're successful
- $_directory[] = $directory;
+ $_directory[$directory] = true;
// test if the directory is trusted
- if (isset($this->_php_resource_dir[$directory])) {
- // merge sub directories of current $directory into _resource_dir to speed up subsequent lookups
- $this->_php_resource_dir = array_merge($this->_php_resource_dir, $_directory);
- return true;
+ 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 (($pos = strrpos($directory, DS)) === false || !isset($directory[2])) {
+ if (!preg_match('#[\\\/][^\\\/]+[\\\/]$#', $directory)) {
break;
}
// bubble up one level
- $directory = substr($directory, 0, $pos);
+ $directory = preg_replace('#[\\\/][^\\\/]+[\\\/]$#', DS, $directory);
}
- throw new SmartyException("directory '{$_filepath}' not allowed by security setting");
+ // 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;
+ }
}
-
-?> \ No newline at end of file
diff --git a/include/smarty/libs/sysplugins/smarty_template_cached.php b/include/smarty/libs/sysplugins/smarty_template_cached.php
new file mode 100644
index 000000000..cecf42986
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_template_cached.php
@@ -0,0 +1,246 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Uwe Tews
+ * Date: 04.12.2014
+ * Time: 06:08
+ */
+
+/**
+ * Smarty Resource Data Object
+ * Cache Data Container for Template Files
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Rodney Rehm
+ */
+class Smarty_Template_Cached extends Smarty_Template_Resource_Base
+{
+ /**
+ * Cache Is Valid
+ *
+ * @var boolean
+ */
+ public $valid = null;
+
+ /**
+ * CacheResource Handler
+ *
+ * @var Smarty_CacheResource
+ */
+ public $handler = null;
+
+ /**
+ * Template Cache Id (Smarty_Internal_Template::$cache_id)
+ *
+ * @var string
+ */
+ public $cache_id = null;
+
+ /**
+ * saved cache lifetime in seconds
+ *
+ * @var integer
+ */
+ public $cache_lifetime = 0;
+
+ /**
+ * Id for cache locking
+ *
+ * @var string
+ */
+ public $lock_id = null;
+
+ /**
+ * flag that cache is locked by this instance
+ *
+ * @var bool
+ */
+ public $is_locked = false;
+
+ /**
+ * Source Object
+ *
+ * @var Smarty_Template_Source
+ */
+ public $source = null;
+
+ /**
+ * Nocache hash codes of processed compiled templates
+ *
+ * @var array
+ */
+ public $hashes = array();
+
+ /**
+ * create Cached Object container
+ *
+ * @param Smarty_Internal_Template $_template template object
+ */
+ public function __construct(Smarty_Internal_Template $_template)
+ {
+ $this->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) {
+ $_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 content
+ */
+ public function read(Smarty_Internal_Template $_template)
+ {
+ if (!$_template->source->handler->recompiled) {
+ return $this->handler->readCachedContent($_template);
+ }
+ return false;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_template_compiled.php b/include/smarty/libs/sysplugins/smarty_template_compiled.php
new file mode 100644
index 000000000..e7710f85e
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_template_compiled.php
@@ -0,0 +1,297 @@
+<?php
+
+/**
+ * Smarty Resource Data Object
+ * Meta Data Container for Template Files
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Rodney Rehm
+ * @property string $content compiled content
+ */
+class Smarty_Template_Compiled extends Smarty_Template_Resource_Base
+{
+
+ /**
+ * nocache hash
+ *
+ * @var string|null
+ */
+ public $nocache_hash = null;
+
+ /**
+ * get a Compiled Object of this source
+ *
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return Smarty_Template_Compiled compiled object
+ */
+ static function load($_template)
+ {
+ // check runtime cache
+ if (!$_template->source->handler->recompiled &&
+ ($_template->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON)
+ ) {
+ $_cache_key = $_template->source->unique_resource . '#';
+ if ($_template->caching) {
+ $_cache_key .= 'caching#';
+ }
+ $_cache_key .= $_template->compile_id;
+ if (isset($_template->source->compileds[$_cache_key])) {
+ return $_template->source->compileds[$_cache_key];
+ }
+ }
+ $compiled = new Smarty_Template_Compiled();
+ if ($_template->source->handler->hasCompiledHandler) {
+ $_template->source->handler->populateCompiledFilepath($compiled, $_template);
+ } else {
+ $compiled->populateCompiledFilepath($_template);
+ }
+ // runtime cache
+ if (!$_template->source->handler->recompiled &&
+ ($_template->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON)
+ ) {
+ $_template->source->compileds[$_cache_key] = $compiled;
+ }
+ return $compiled;
+ }
+
+ /**
+ * populate Compiled Object with compiled filepath
+ *
+ * @param Smarty_Internal_Template $_template template object
+ **/
+ public function populateCompiledFilepath(Smarty_Internal_Template $_template)
+ {
+ $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w]+!', '_', $_template->compile_id) : null;
+ if ($_template->source->isConfig) {
+ $_flag = '_' .
+ ((int) $_template->smarty->config_read_hidden + (int) $_template->smarty->config_booleanize * 2 +
+ (int) $_template->smarty->config_overwrite * 4);
+ } else {
+ $_flag =
+ '_' . ((int) $_template->smarty->merge_compiled_includes + (int) $_template->smarty->escape_html * 2);
+ }
+ $_filepath = $_template->source->uid . $_flag;
+ // if use_sub_dirs, break file into directories
+ if ($_template->smarty->use_sub_dirs) {
+ $_filepath = substr($_filepath, 0, 2) . DS . substr($_filepath, 2, 2) . DS . substr($_filepath, 4, 2) . DS .
+ $_filepath;
+ }
+ $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^';
+ if (isset($_compile_id)) {
+ $_filepath = $_compile_id . $_compile_dir_sep . $_filepath;
+ }
+ // caching token
+ if ($_template->caching) {
+ $_cache = '.cache';
+ } else {
+ $_cache = '';
+ }
+ $_compile_dir = $_template->smarty->getCompileDir();
+ // set basename if not specified
+ $_basename = $_template->source->handler->getBasename($_template->source);
+ if ($_basename === null) {
+ $_basename = basename(preg_replace('![^\w]+!', '_', $_template->source->name));
+ }
+ // separate (optional) basename by dot
+ if ($_basename) {
+ $_basename = '.' . $_basename;
+ }
+
+ $this->filepath = $_compile_dir . $_filepath . '.' . $_template->source->type . $_basename . $_cache . '.php';
+ $this->exists = is_file($this->filepath);
+ if (!$this->exists) {
+ $this->timestamp = false;
+ }
+ }
+
+ /**
+ * load compiled template or compile from source
+ *
+ * @param Smarty_Internal_Template $_template
+ *
+ * @throws Exception
+ */
+ public function process(Smarty_Internal_Template $_template)
+ {
+ $_smarty_tpl = $_template;
+ if ($_template->source->handler->recompiled || !$_template->compiled->exists ||
+ $_template->smarty->force_compile || ($_template->smarty->compile_check &&
+ $_template->source->getTimeStamp() > $_template->compiled->getTimeStamp())
+ ) {
+ $this->compileTemplateSource($_template);
+ $compileCheck = $_template->smarty->compile_check;
+ $_template->smarty->compile_check = false;
+ if ($_template->source->handler->recompiled) {
+ $level = ob_get_level();
+ ob_start();
+ try {
+ eval("?>" . $this->content);
+ }
+ catch (Exception $e) {
+ while (ob_get_level() > $level) {
+ ob_end_clean();
+ }
+ throw $e;
+ }
+ ob_get_clean();
+ $this->content = null;
+ } else {
+ $this->loadCompiledTemplate($_template);
+ }
+ $_template->smarty->compile_check = $compileCheck;
+ } else {
+ $_template->mustCompile = true;
+ @include($_template->compiled->filepath);
+ if ($_template->mustCompile) {
+ $this->compileTemplateSource($_template);
+ $compileCheck = $_template->smarty->compile_check;
+ $_template->smarty->compile_check = false;
+ $this->loadCompiledTemplate($_template);
+ $_template->smarty->compile_check = $compileCheck;
+ }
+ }
+ $_template->smarty->ext->_subTemplate->registerSubTemplates($_template);
+
+ $this->processed = true;
+ }
+
+ /**
+ * Load fresh compiled template by including the PHP file
+ * HHVM requires a work around because of a PHP incompatibility
+ *
+ * @param \Smarty_Internal_Template $_template
+ */
+ private function loadCompiledTemplate(Smarty_Internal_Template $_template)
+ {
+ if (function_exists('opcache_invalidate')) {
+ opcache_invalidate($_template->compiled->filepath);
+ }
+ $_smarty_tpl = $_template;
+ if (defined('HHVM_VERSION')) {
+ $_template->smarty->ext->_hhvm->includeHhvm($_template, $_template->compiled->filepath);
+ } else {
+ include($_template->compiled->filepath);
+ }
+ }
+
+ /**
+ * render compiled template code
+ *
+ * @param Smarty_Internal_Template $_template
+ *
+ * @return string
+ * @throws Exception
+ */
+ public function render(Smarty_Internal_Template $_template)
+ {
+ if ($_template->smarty->debugging) {
+ $_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);
+ }
+ $this->getRenderedTemplateCode($_template);
+ if ($_template->caching && $this->has_nocache_code) {
+ $_template->cached->hashes[$this->nocache_hash] = true;
+ }
+ if (isset($_template->parent) && $_template->parent->_objType == 2 && !empty($_template->tpl_function)) {
+ $_template->parent->tpl_function = array_merge($_template->parent->tpl_function, $_template->tpl_function);
+ }
+ if ($_template->smarty->debugging) {
+ $_template->smarty->_debug->end_render($_template);
+ }
+ }
+
+ /**
+ * compile template from source
+ *
+ * @param Smarty_Internal_Template $_template
+ *
+ * @return string
+ * @throws Exception
+ */
+ public function compileTemplateSource(Smarty_Internal_Template $_template)
+ {
+ $_template->source->compileds = array();
+ $this->file_dependency = array();
+ $this->tpl_function = array();
+ $this->includes = array();
+ $this->nocache_hash = null;
+ $this->unifunc = null;
+ // compile locking
+ if (!$_template->source->handler->recompiled) {
+ if ($saved_timestamp = $_template->compiled->getTimeStamp()) {
+ touch($_template->compiled->filepath);
+ }
+ }
+ // call compiler
+ try {
+ $_template->loadCompiler();
+ $code = $_template->compiler->compileTemplate($_template);
+ }
+ catch (Exception $e) {
+ // restore old timestamp in case of error
+ if (!$_template->source->handler->recompiled && $saved_timestamp) {
+ touch($_template->compiled->filepath, $saved_timestamp);
+ }
+ throw $e;
+ }
+ // compiling succeeded
+ if ($_template->compiler->write_compiled_code) {
+ // write compiled template
+ $this->write($_template, $code);
+ $code = '';
+ }
+ // release compiler object to free memory
+ unset($_template->compiler);
+ return $code;
+ }
+
+ /**
+ * 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;
+ } else {
+ $this->content = $code;
+ }
+ $this->timestamp = time();
+ $this->exists = true;
+ return true;
+ }
+
+ /**
+ * 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/include/smarty/libs/sysplugins/smarty_template_config.php b/include/smarty/libs/sysplugins/smarty_template_config.php
new file mode 100644
index 000000000..f0fff5080
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_template_config.php
@@ -0,0 +1,97 @@
+<?php
+/**
+ * Smarty Config Source Plugin
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Uwe Tews
+ */
+
+/**
+ * Smarty Connfig Resource Data Object
+ * Meta Data Container for Template Files
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Uwe Tews
+ *
+ */
+class Smarty_Template_Config extends Smarty_Template_Source
+{
+ /**
+ * array of section names, single section or null
+ *
+ * @var null|string|array
+ */
+ public $config_sections = null;
+
+ /**
+ * scope into which the config variables shall be loaded
+ *
+ * @var string
+ */
+ public $scope = 'local';
+
+ /**
+ * Flag that source is a config file
+ *
+ * @var bool
+ */
+ public $isConfig = true;
+
+ /**
+ * create Source Object container
+ *
+ * @param Smarty_Resource $handler Resource Handler this source object communicates with
+ * @param Smarty $smarty Smarty instance this source object belongs to
+ * @param string $resource full template_resource
+ * @param string $type type of resource
+ * @param string $name resource name
+ */
+ public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name)
+ {
+ // must clone handler as we change class names
+ $this->handler = clone $handler; // Note: prone to circular references
+ $this->handler->compiler_class = 'Smarty_Internal_Config_File_Compiler';
+ $this->handler->template_lexer_class = 'Smarty_Internal_Configfilelexer';
+ $this->handler->template_parser_class = 'Smarty_Internal_Configfileparser';
+ $this->resource = $resource;
+ $this->type = $type;
+ $this->name = $name;
+ $this->smarty = $smarty;
+ }
+
+ /**
+ * 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_Config Source Object
+ * @throws SmartyException
+ */
+ public static function load(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null)
+ {
+ static $_incompatible_resources = array('extends' => true, 'php' => true);
+ $template_resource = $_template->template_resource;
+ if (empty($template_resource)) {
+ throw new SmartyException('Missing config name');
+ }
+ // parse resource_name, load resource handler
+ list($name, $type) = Smarty_Resource::parseResourceName($template_resource, $_template->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");
+ }
+ $resource = Smarty_Resource::load($_template->smarty, $type);
+ $source = new Smarty_Template_Config($resource, $_template->smarty, $template_resource, $type, $name);
+ $resource->populate($source, $_template);
+ if (!$source->exists && isset($_template->smarty->default_config_handler_func)) {
+ Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source);
+ }
+ $source->unique_resource = $resource->buildUniqueResourceName($_template->smarty, $name, true);
+ return $source;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_template_resource_base.php b/include/smarty/libs/sysplugins/smarty_template_resource_base.php
new file mode 100644
index 000000000..0911feb8d
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_template_resource_base.php
@@ -0,0 +1,155 @@
+<?php
+
+/**
+ * Smarty Template Resource Base Object
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Rodney Rehm
+ */
+abstract class Smarty_Template_Resource_Base
+{
+ /**
+ * Compiled Filepath
+ *
+ * @var string
+ */
+ public $filepath = null;
+
+ /**
+ * Compiled Timestamp
+ *
+ * @var integer
+ */
+ public $timestamp = null;
+
+ /**
+ * Compiled Existence
+ *
+ * @var boolean
+ */
+ public $exists = false;
+
+ /**
+ * Template Compile Id (Smarty_Internal_Template::$compile_id)
+ *
+ * @var string
+ */
+ public $compile_id = null;
+
+ /**
+ * Compiled Content Loaded
+ *
+ * @var boolean
+ */
+ public $processed = false;
+
+ /**
+ * unique function name for compiled template code
+ *
+ * @var string
+ */
+ public $unifunc = '';
+
+ /**
+ * flag if template does contain nocache code sections
+ *
+ * @var bool
+ */
+ public $has_nocache_code = false;
+
+ /**
+ * resource file dependency
+ *
+ * @var array
+ */
+ public $file_dependency = array();
+
+ /**
+ * Content buffer
+ *
+ * @var string
+ */
+ public $content = null;
+
+ /**
+ * required plugins
+ *
+ * @var array
+ */
+ public $required_plugins = array();
+
+ /**
+ * Included subtemplates
+ *
+ * @var array
+ */
+ public $includes = array();
+
+ /**
+ * Process resource
+ *
+ * @param Smarty_Internal_Template $_template template object
+ */
+ abstract public function process(Smarty_Internal_Template $_template);
+
+ /**
+ * get rendered template content by calling compiled or cached template code
+ *
+ * @param string $unifunc function with template code
+ *
+ * @return string
+ * @throws \Exception
+ */
+ public function getRenderedTemplateCode(Smarty_Internal_Template $_template, $unifunc = null)
+ {
+ $unifunc = isset($unifunc) ? $unifunc : $this->unifunc;
+ $level = ob_get_level();
+ try {
+ if (empty($unifunc) || !is_callable($unifunc)) {
+ throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'");
+ }
+ if (isset($_template->smarty->security_policy)) {
+ $_template->smarty->security_policy->startTemplate($_template);
+ }
+ //
+ // render compiled or saved template code
+ //
+ if (!isset($_template->_cache['capture_stack'])) {
+ $_template->_cache['capture_stack'] = array();
+ }
+ $_saved_capture_level = count($_template->_cache['capture_stack']);
+ $unifunc($_template);
+ // any unclosed {capture} tags ?
+ if ($_saved_capture_level != count($_template->_cache['capture_stack'])) {
+ $_template->capture_error();
+ }
+ if (isset($_template->smarty->security_policy)) {
+ $_template->smarty->security_policy->exitTemplate();
+ }
+ return null;
+ }
+ catch (Exception $e) {
+ while (ob_get_level() > $level) {
+ ob_end_clean();
+ }
+ if (isset($_template->smarty->security_policy)) {
+ $_template->smarty->security_policy->exitTemplate();
+ }
+ throw $e;
+ }
+ }
+
+ /**
+ * Get compiled time stamp
+ *
+ * @return int
+ */
+ public function getTimeStamp()
+ {
+ if ($this->exists && !isset($this->timestamp)) {
+ $this->timestamp = @filemtime($this->filepath);
+ }
+ return $this->timestamp;
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_template_source.php b/include/smarty/libs/sysplugins/smarty_template_source.php
new file mode 100644
index 000000000..be5b62809
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_template_source.php
@@ -0,0 +1,267 @@
+<?php
+
+/**
+ * Smarty Resource Data Object
+ * Meta Data Container for Template Files
+ *
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Rodney Rehm
+ *
+ */
+class Smarty_Template_Source
+{
+ /**
+ * Unique Template ID
+ *
+ * @var string
+ */
+ public $uid = null;
+
+ /**
+ * Template Resource (Smarty_Internal_Template::$template_resource)
+ *
+ * @var string
+ */
+ public $resource = null;
+
+ /**
+ * Resource Type
+ *
+ * @var string
+ */
+ public $type = null;
+
+ /**
+ * Resource Name
+ *
+ * @var string
+ */
+ public $name = null;
+
+ /**
+ * Unique Resource Name
+ *
+ * @var string
+ */
+ public $unique_resource = null;
+
+ /**
+ * Source Filepath
+ *
+ * @var string
+ */
+ public $filepath = null;
+
+ /**
+ * Source Timestamp
+ *
+ * @var integer
+ */
+ public $timestamp = null;
+
+ /**
+ * Source Existence
+ *
+ * @var boolean
+ */
+ public $exists = false;
+
+ /**
+ * Source File Base name
+ *
+ * @var string
+ */
+ public $basename = null;
+
+ /**
+ * The Components an extended template is made of
+ *
+ * @var \Smarty_Template_Source[]
+ */
+ public $components = null;
+
+ /**
+ * Resource Handler
+ *
+ * @var \Smarty_Resource
+ */
+ public $handler = null;
+
+ /**
+ * Smarty instance
+ *
+ * @var Smarty
+ */
+ public $smarty = null;
+
+ /**
+ * Resource is source
+ *
+ * @var bool
+ */
+ public $isConfig = false;
+
+ /**
+ * cache for Smarty_Template_Compiled instances
+ *
+ * @var Smarty_Template_Compiled[]
+ */
+ public $compileds = array();
+
+ /**
+ * Template source content eventually set by default handler
+ *
+ * @var string
+ */
+ public $content = null;
+
+ /**
+ * create Source Object container
+ *
+ * @param Smarty_Resource $handler Resource Handler this source object communicates with
+ * @param Smarty $smarty Smarty instance this source object belongs to
+ * @param string $resource full template_resource
+ * @param string $type type of resource
+ * @param string $name resource name
+ *
+ */
+ public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name)
+ {
+ $this->handler = $handler; // Note: prone to circular references
+ $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('Missing template 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;
+ }
+
+ $handler = isset($smarty->_cache['resource_handlers'][$type]) ?
+ $smarty->_cache['resource_handlers'][$type] :
+ Smarty_Resource::load($smarty, $type);
+ // if resource is not recompiling and resource name is not dotted we can check the source cache
+ if (($smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) && !$handler->recompiled &&
+ !(isset($name[1]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/'))
+ ) {
+ $unique_resource = $handler->buildUniqueResourceName($smarty, $name);
+ if (isset($smarty->_cache['source_objects'][$unique_resource])) {
+ return $smarty->_cache['source_objects'][$unique_resource];
+ }
+ } else {
+ $unique_resource = null;
+ }
+ // create new source object
+ $source = new Smarty_Template_Source($handler, $smarty, $template_resource, $type, $name);
+ $handler->populate($source, $_template);
+ if (!$source->exists && isset($_template->smarty->default_template_handler_func)) {
+ Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source);
+ }
+ // on recompiling resources we are done
+ if (($smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) && !$handler->recompiled) {
+ // may by we have already $unique_resource
+ $is_relative = false;
+ if (!isset($unique_resource)) {
+ $is_relative = isset($name[1]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/') &&
+ ($type == 'file' ||
+ (isset($_template->parent->source) && $_template->parent->source->type == 'extends'));
+ $unique_resource =
+ $handler->buildUniqueResourceName($smarty, $is_relative ? $source->filepath . $name : $name);
+ }
+ $source->unique_resource = $unique_resource;
+ // save in runtime cache if not relative
+ if (!$is_relative) {
+ $smarty->_cache['source_objects'][$unique_resource] = $source;
+ }
+ }
+ return $source;
+ }
+
+ /**
+ * render the uncompiled source
+ *
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return string
+ * @throws \Exception
+ */
+ public function renderUncompiled(Smarty_Internal_Template $_template)
+ {
+ $this->handler->renderUncompiled($_template->source, $_template);
+ }
+
+ /**
+ * Render uncompiled source
+ *
+ * @param \Smarty_Internal_Template $_template
+ */
+ public function render(Smarty_Internal_Template $_template)
+ {
+ if ($_template->source->handler->uncompiled) {
+ if ($_template->smarty->debugging) {
+ $_template->smarty->_debug->start_render($_template);
+ }
+ $this->handler->renderUncompiled($_template->source, $_template);
+ if (isset($_template->parent) && $_template->parent->_objType == 2 && !empty($_template->tpl_function)) {
+ $_template->parent->tpl_function =
+ array_merge($_template->parent->tpl_function, $_template->tpl_function);
+ }
+ if ($_template->smarty->debugging) {
+ $_template->smarty->_debug->end_render($_template);
+ }
+ }
+ }
+
+ /**
+ * 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/include/smarty/libs/sysplugins/smarty_undefined_variable.php b/include/smarty/libs/sysplugins/smarty_undefined_variable.php
new file mode 100644
index 000000000..88bc6f68c
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_undefined_variable.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * class for undefined variable object
+ * This class defines an object for undefined variable handling
+ *
+ * @package Smarty
+ * @subpackage Template
+ */
+class Smarty_Undefined_Variable
+{
+ /**
+ * Returns FALSE for 'nocache' and NULL otherwise.
+ *
+ * @param string $name
+ *
+ * @return bool
+ */
+ public function __get($name)
+ {
+ if ($name == 'nocache') {
+ return false;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Always returns an empty string.
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return "";
+ }
+}
diff --git a/include/smarty/libs/sysplugins/smarty_variable.php b/include/smarty/libs/sysplugins/smarty_variable.php
new file mode 100644
index 000000000..a6504b18f
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_variable.php
@@ -0,0 +1,47 @@
+<?php
+
+/**
+ * class for the Smarty variable object
+ * This class defines the Smarty variable object
+ *
+ * @package Smarty
+ * @subpackage Template
+ */
+class Smarty_Variable
+{
+ /**
+ * template variable
+ *
+ * @var mixed
+ */
+ public $value = null;
+ /**
+ * if true any output of this variable will be not cached
+ *
+ * @var boolean
+ */
+ public $nocache = false;
+
+ /**
+ * create Smarty variable object
+ *
+ * @param mixed $value the value to assign
+ * @param boolean $nocache if true any output of this variable will be not cached
+ */
+ public function __construct($value = null, $nocache = false)
+ {
+ $this->value = $value;
+ $this->nocache = $nocache;
+ }
+
+ /**
+ * <<magic>> String conversion
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return (string) $this->value;
+ }
+}
+
diff --git a/include/smarty/libs/sysplugins/smartycompilerexception.php b/include/smarty/libs/sysplugins/smartycompilerexception.php
new file mode 100644
index 000000000..4d5d77875
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smartycompilerexception.php
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * Smarty compiler exception class
+ *
+ * @package Smarty
+ */
+class SmartyCompilerException extends SmartyException
+{
+ public function __toString()
+ {
+ return ' --> 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/include/smarty/libs/sysplugins/smartyexception.php b/include/smarty/libs/sysplugins/smartyexception.php
new file mode 100644
index 000000000..3da16c276
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smartyexception.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Smarty exception class
+ *
+ * @package Smarty
+ */
+class SmartyException extends Exception
+{
+ public static $escape = false;
+
+ public function __toString()
+ {
+ return ' --> Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- ';
+ }
+}
diff --git a/include/template.class.php b/include/template.class.php
index 54b177145..b8846a561 100644
--- a/include/template.class.php
+++ b/include/template.class.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -2096,4 +2096,4 @@ final class FileCombiner
}
}
-?> \ No newline at end of file
+?>
diff --git a/include/user.inc.php b/include/user.inc.php
index 4de5cc6c3..f3387d87e 100644
--- a/include/user.inc.php
+++ b/include/user.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -65,6 +65,12 @@ if ($conf['apache_authentication'])
}
}
+// automatic login by authentication key
+if (isset($_GET['auth']))
+{
+ auth_key_login($_GET['auth']);
+}
+
$user = build_user( $user['id'],
( defined('IN_ADMIN') and IN_ADMIN ) ? false : true // use cache ?
);
diff --git a/include/ws_core.inc.php b/include/ws_core.inc.php
index e46953287..d06fc67d1 100644
--- a/include/ws_core.inc.php
+++ b/include/ws_core.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -56,7 +56,7 @@ class PwgError
private $_code;
private $_codeText;
- function PwgError($code, $codeText)
+ function __construct($code, $codeText)
{
if ($code>=400 and $code<600)
{
@@ -89,7 +89,7 @@ class PwgNamedArray
* @param xmlAttributes array of sub-item attributes that will be encoded as
* xml attributes instead of xml child elements
*/
- function PwgNamedArray($arr, $itemName, $xmlAttributes=array() )
+ function __construct($arr, $itemName, $xmlAttributes=array() )
{
$this->_content = $arr;
$this->_itemName = $itemName;
@@ -115,7 +115,7 @@ class PwgNamedStruct
* encoded as xml attributes (if null - automatically prefer xml attributes
* whenever possible)
*/
- function PwgNamedStruct($content, $xmlAttributes=null, $xmlElements=null )
+ function __construct($content, $xmlAttributes=null, $xmlElements=null )
{
$this->_content = $content;
if ( isset($xmlAttributes) )
@@ -236,7 +236,7 @@ class PwgServer
var $_methods = array();
- function PwgServer()
+ function __construct()
{
}
@@ -688,4 +688,4 @@ Request format: ".@$this->_requestFormat." Response format: ".@$this->_responseF
return $res;
}
}
-?> \ No newline at end of file
+?>
diff --git a/include/ws_functions.inc.php b/include/ws_functions.inc.php
index 578589c9b..c36efec69 100644
--- a/include/ws_functions.inc.php
+++ b/include/ws_functions.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/ws_functions/index.php b/include/ws_functions/index.php
index c8de97f60..0b96c3efa 100644
--- a/include/ws_functions/index.php
+++ b/include/ws_functions/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/ws_functions/pwg.categories.php b/include/ws_functions/pwg.categories.php
index b2cfc2dd4..5bafaf5da 100644
--- a/include/ws_functions/pwg.categories.php
+++ b/include/ws_functions/pwg.categories.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -663,6 +663,98 @@ UPDATE '. USER_CACHE_CATEGORIES_TABLE .'
/**
* API method
+ *
+ * Deletes the album thumbnail. Only possible if
+ * $conf['allow_random_representative']
+ *
+ * @param mixed[] $params
+ * @option int category_id
+ */
+function ws_categories_deleteRepresentative($params, &$service)
+{
+ global $conf;
+
+ // does the category really exist?
+ $query = '
+SELECT id
+ FROM '. CATEGORIES_TABLE .'
+ WHERE id = '. $params['category_id'] .'
+;';
+ $result = pwg_query($query);
+ if (pwg_db_num_rows($result) == 0)
+ {
+ return new PwgError(404, 'category_id not found');
+ }
+
+ if (!$conf['allow_random_representative'])
+ {
+ return new PwgError(401, 'not permitted');
+ }
+
+ $query = '
+UPDATE '.CATEGORIES_TABLE.'
+ SET representative_picture_id = NULL
+ WHERE id = '.$params['category_id'].'
+;';
+ pwg_query($query);
+}
+
+/**
+ * API method
+ *
+ * Find a new album thumbnail.
+ *
+ * @param mixed[] $params
+ * @option int category_id
+ */
+function ws_categories_refreshRepresentative($params, &$service)
+{
+ global $conf;
+
+ // does the category really exist?
+ $query = '
+SELECT id
+ FROM '. CATEGORIES_TABLE .'
+ WHERE id = '. $params['category_id'] .'
+;';
+ $result = pwg_query($query);
+ if (pwg_db_num_rows($result) == 0)
+ {
+ return new PwgError(404, 'category_id not found');
+ }
+
+ $query = '
+SELECT
+ DISTINCT category_id
+ FROM '.IMAGE_CATEGORY_TABLE.'
+ WHERE category_id = '.$params['category_id'].'
+ LIMIT 1
+;';
+ $result = pwg_query($query);
+ $has_images = pwg_db_num_rows($result) > 0 ? true : false;
+
+ if (!$has_images)
+ {
+ return new PwgError(401, 'not permitted');
+ }
+
+ include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
+
+ set_random_representant(array($params['category_id']));
+
+ // return url of the new representative
+ $query = '
+SELECT *
+ FROM '.CATEGORIES_TABLE.'
+ WHERE id = '.$params['category_id'].'
+;';
+ $category = pwg_db_fetch_assoc(pwg_query($query));
+
+ return get_category_representant_properties($category['representative_picture_id']);
+}
+
+/**
+ * API method
* Deletes a category
* @param mixed[] $params
* @option string|int[] category_id
diff --git a/include/ws_functions/pwg.extensions.php b/include/ws_functions/pwg.extensions.php
index 6ed2803bc..23685b4dd 100644
--- a/include/ws_functions/pwg.extensions.php
+++ b/include/ws_functions/pwg.extensions.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/ws_functions/pwg.groups.php b/include/ws_functions/pwg.groups.php
index 67d5c843c..42a495a1a 100644
--- a/include/ws_functions/pwg.groups.php
+++ b/include/ws_functions/pwg.groups.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/ws_functions/pwg.images.php b/include/ws_functions/pwg.images.php
index 319bce1f1..1d9d0cbd4 100644
--- a/include/ws_functions/pwg.images.php
+++ b/include/ws_functions/pwg.images.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -740,7 +740,40 @@ UPDATE '. IMAGES_TABLE .'
* @option int rank
*/
function ws_images_setRank($params, $service)
-{
+{
+ if (count($params['image_id']) > 1)
+ {
+ include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
+
+ save_images_order(
+ $params['category_id'],
+ $params['image_id']
+ );
+
+ $query = '
+SELECT
+ image_id
+ FROM '.IMAGE_CATEGORY_TABLE.'
+ WHERE category_id = '.$params['category_id'].'
+ ORDER BY rank ASC
+;';
+ $image_ids = query2array($query, null, 'image_id');
+
+ // return data for client
+ return array(
+ 'image_id' => $image_ids,
+ 'category_id' => $params['category_id'],
+ );
+ }
+
+ // turns image_id into a simple int instead of array
+ $params['image_id'] = array_shift($params['image_id']);
+
+ if (empty($params['rank']))
+ {
+ return new PwgError(WS_ERR_MISSING_PARAM, 'rank is missing');
+ }
+
// does the image really exist?
$query = '
SELECT COUNT(*)
diff --git a/include/ws_functions/pwg.permissions.php b/include/ws_functions/pwg.permissions.php
index 990404da3..292ecc6af 100644
--- a/include/ws_functions/pwg.permissions.php
+++ b/include/ws_functions/pwg.permissions.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/ws_functions/pwg.php b/include/ws_functions/pwg.php
index b96338eaf..bd9df7245 100644
--- a/include/ws_functions/pwg.php
+++ b/include/ws_functions/pwg.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -339,6 +339,8 @@ function ws_session_getStatus($params, &$service)
)
)
);
+
+ $res['upload_form_chunk_size'] = $conf['upload_form_chunk_size'];
}
return $res;
diff --git a/include/ws_functions/pwg.tags.php b/include/ws_functions/pwg.tags.php
index c4ce2b7fc..abbdaa619 100644
--- a/include/ws_functions/pwg.tags.php
+++ b/include/ws_functions/pwg.tags.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/ws_functions/pwg.users.php b/include/ws_functions/pwg.users.php
index d0436acb7..d878bcb31 100644
--- a/include/ws_functions/pwg.users.php
+++ b/include/ws_functions/pwg.users.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/ws_protocols/index.php b/include/ws_protocols/index.php
index c8de97f60..0b96c3efa 100644
--- a/include/ws_protocols/index.php
+++ b/include/ws_protocols/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/ws_protocols/json_encoder.php b/include/ws_protocols/json_encoder.php
index 695498b74..0f33b425f 100644
--- a/include/ws_protocols/json_encoder.php
+++ b/include/ws_protocols/json_encoder.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/ws_protocols/php_encoder.php b/include/ws_protocols/php_encoder.php
index 485ad89ea..3a37143de 100644
--- a/include/ws_protocols/php_encoder.php
+++ b/include/ws_protocols/php_encoder.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/ws_protocols/rest_encoder.php b/include/ws_protocols/rest_encoder.php
index 2c8dbd698..ea2177c0e 100644
--- a/include/ws_protocols/rest_encoder.php
+++ b/include/ws_protocols/rest_encoder.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -33,7 +33,7 @@ class PwgXmlWriter
var $_encodedXml;
- function PwgXmlWriter()
+ function __construct()
{
$this->_elementStack = array();
$this->_lastTagOpen = false;
diff --git a/include/ws_protocols/rest_handler.php b/include/ws_protocols/rest_handler.php
index e706ef7fa..b8e332ddf 100644
--- a/include/ws_protocols/rest_handler.php
+++ b/include/ws_protocols/rest_handler.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/include/ws_protocols/xmlrpc_encoder.php b/include/ws_protocols/xmlrpc_encoder.php
index d081f6d27..a8217f59b 100644
--- a/include/ws_protocols/xmlrpc_encoder.php
+++ b/include/ws_protocols/xmlrpc_encoder.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/index.php b/index.php
index 0e4f34ea4..6335ea19e 100644
--- a/index.php
+++ b/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install.php b/install.php
index a78dbe73d..579b1a431 100644
--- a/install.php
+++ b/install.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -24,7 +24,7 @@
//----------------------------------------------------------- include
define('PHPWG_ROOT_PATH','./');
-@set_magic_quotes_runtime(0); // Disable magic_quotes_runtime
+// @set_magic_quotes_runtime(0); // Disable magic_quotes_runtime
//
// addslashes to vars if magic_quotes_gpc is off this is a security
// precaution to prevent someone trying to break out of a SQL statement.
@@ -110,6 +110,7 @@ include(PHPWG_ROOT_PATH . 'include/config_default.inc.php');
defined('PWG_LOCAL_DIR') or define('PWG_LOCAL_DIR', 'local/');
include(PHPWG_ROOT_PATH . 'include/functions.inc.php');
+include(PHPWG_ROOT_PATH . 'include/template.class.php');
// download database config file if exists
check_input_parameter('dl', $_GET, false, '/^[a-f0-9]{32}$/');
@@ -528,4 +529,4 @@ if (count($infos) != 0 )
//----------------------------------------------------------- html code display
$template->pparse('install');
-?> \ No newline at end of file
+?>
diff --git a/install/db/100-database.php b/install/db/100-database.php
index 2c1945433..93d891df7 100644
--- a/install/db/100-database.php
+++ b/install/db/100-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/101-database.php b/install/db/101-database.php
index f1fdbe3c0..e48cce15c 100644
--- a/install/db/101-database.php
+++ b/install/db/101-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/102-database.php b/install/db/102-database.php
index 99bf97f8b..499343d49 100644
--- a/install/db/102-database.php
+++ b/install/db/102-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/103-database.php b/install/db/103-database.php
index ed1c24d0b..6461f0bfb 100644
--- a/install/db/103-database.php
+++ b/install/db/103-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/104-database.php b/install/db/104-database.php
index a3c17b1e9..0a8d96053 100644
--- a/install/db/104-database.php
+++ b/install/db/104-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/105-database.php b/install/db/105-database.php
index 793eb07c2..5c1f6ede6 100644
--- a/install/db/105-database.php
+++ b/install/db/105-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/106-database.php b/install/db/106-database.php
index dcd3a9b81..cf8c43fb8 100644
--- a/install/db/106-database.php
+++ b/install/db/106-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/107-database.php b/install/db/107-database.php
index 15bdda56e..ac5e451da 100644
--- a/install/db/107-database.php
+++ b/install/db/107-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/108-database.php b/install/db/108-database.php
index e31aeb17a..fe0fb572e 100644
--- a/install/db/108-database.php
+++ b/install/db/108-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/109-database.php b/install/db/109-database.php
index b994c3213..d14f7d437 100644
--- a/install/db/109-database.php
+++ b/install/db/109-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/110-database.php b/install/db/110-database.php
index 62608a26f..a73ba7bba 100644
--- a/install/db/110-database.php
+++ b/install/db/110-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/111-database.php b/install/db/111-database.php
index abc09c757..234098304 100644
--- a/install/db/111-database.php
+++ b/install/db/111-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/112-database.php b/install/db/112-database.php
index 7ff37fb16..e27024c5f 100644
--- a/install/db/112-database.php
+++ b/install/db/112-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/113-database.php b/install/db/113-database.php
index cb6c779c9..352cf554c 100644
--- a/install/db/113-database.php
+++ b/install/db/113-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/114-database.php b/install/db/114-database.php
index 96f52e320..c35f6b0fa 100644
--- a/install/db/114-database.php
+++ b/install/db/114-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/115-database.php b/install/db/115-database.php
index 5d7b5e01f..d124448c2 100644
--- a/install/db/115-database.php
+++ b/install/db/115-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/116-database.php b/install/db/116-database.php
index 79ebeb762..816f3fe80 100644
--- a/install/db/116-database.php
+++ b/install/db/116-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/117-database.php b/install/db/117-database.php
index 68ef15d1c..b160188bc 100644
--- a/install/db/117-database.php
+++ b/install/db/117-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/118-database.php b/install/db/118-database.php
index 5925a32b6..08c7cffd5 100644
--- a/install/db/118-database.php
+++ b/install/db/118-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/119-database.php b/install/db/119-database.php
index 7da1b68bc..fd00c5a22 100644
--- a/install/db/119-database.php
+++ b/install/db/119-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/120-database.php b/install/db/120-database.php
index b156c1398..b1bb0a33f 100644
--- a/install/db/120-database.php
+++ b/install/db/120-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/121-database.php b/install/db/121-database.php
index 66a3e53f3..7b22bc563 100644
--- a/install/db/121-database.php
+++ b/install/db/121-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/122-database.php b/install/db/122-database.php
index f8dc1077c..47363320f 100644
--- a/install/db/122-database.php
+++ b/install/db/122-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/123-database.php b/install/db/123-database.php
index 8717a7ab9..fa3621b20 100644
--- a/install/db/123-database.php
+++ b/install/db/123-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/124-database.php b/install/db/124-database.php
index d7671fc47..347b8f25c 100644
--- a/install/db/124-database.php
+++ b/install/db/124-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/125-database.php b/install/db/125-database.php
index b5034cccf..31862a021 100644
--- a/install/db/125-database.php
+++ b/install/db/125-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/126-database.php b/install/db/126-database.php
index 1c21ac93a..46de04c82 100644
--- a/install/db/126-database.php
+++ b/install/db/126-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/127-database.php b/install/db/127-database.php
index e8c893978..ea55c7755 100644
--- a/install/db/127-database.php
+++ b/install/db/127-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/128-database.php b/install/db/128-database.php
index fd1bb06e0..65027bfc7 100644
--- a/install/db/128-database.php
+++ b/install/db/128-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/129-database.php b/install/db/129-database.php
index bb0bec5d5..aaae54e2a 100644
--- a/install/db/129-database.php
+++ b/install/db/129-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/130-database.php b/install/db/130-database.php
index 14250e12a..758b0412e 100644
--- a/install/db/130-database.php
+++ b/install/db/130-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/131-database.php b/install/db/131-database.php
index 6045104c2..cbc08d430 100644
--- a/install/db/131-database.php
+++ b/install/db/131-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/132-database.php b/install/db/132-database.php
index 63400dc6b..71cca6ea4 100644
--- a/install/db/132-database.php
+++ b/install/db/132-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/133-database.php b/install/db/133-database.php
index 71233810c..d28237fae 100644
--- a/install/db/133-database.php
+++ b/install/db/133-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/134-database.php b/install/db/134-database.php
index bb333700c..a624c3826 100644
--- a/install/db/134-database.php
+++ b/install/db/134-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/135-database.php b/install/db/135-database.php
index 97920813c..e4acb1d40 100644
--- a/install/db/135-database.php
+++ b/install/db/135-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/136-database.php b/install/db/136-database.php
index 27062ec85..1eb7f5a41 100644
--- a/install/db/136-database.php
+++ b/install/db/136-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/137-database.php b/install/db/137-database.php
index f96fba750..863fbd0a5 100644
--- a/install/db/137-database.php
+++ b/install/db/137-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/138-database.php b/install/db/138-database.php
index 59606d0cd..421cc702f 100644
--- a/install/db/138-database.php
+++ b/install/db/138-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/139-database.php b/install/db/139-database.php
index e1c994fc0..747b6850f 100644
--- a/install/db/139-database.php
+++ b/install/db/139-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/140-database.php b/install/db/140-database.php
index aae350a63..6d8e5e54b 100644
--- a/install/db/140-database.php
+++ b/install/db/140-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/141-database.php b/install/db/141-database.php
index f6a157123..73b30980a 100644
--- a/install/db/141-database.php
+++ b/install/db/141-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/142-database.php b/install/db/142-database.php
index 869f03faa..7c40e1ad1 100644
--- a/install/db/142-database.php
+++ b/install/db/142-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/143-database.php b/install/db/143-database.php
index 84d9a9467..4aec0bd68 100644
--- a/install/db/143-database.php
+++ b/install/db/143-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/144-database.php b/install/db/144-database.php
index 6f1e7b936..1664c9026 100644
--- a/install/db/144-database.php
+++ b/install/db/144-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/plugins/LocalFilesEditor/index.php b/install/db/145-database.php
index c8de97f60..012ca7a61 100644
--- a/plugins/LocalFilesEditor/index.php
+++ b/install/db/145-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -21,10 +21,24 @@
// | USA. |
// +-----------------------------------------------------------------------+
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
+if (!defined('PHPWG_ROOT_PATH'))
+{
+ die('Hacking attempt!');
+}
+
+$upgrade_description = 'add image formats table';
+
+// we use PREFIX_TABLE, in case Piwigo uses an external user table
+pwg_query('
+CREATE TABLE `'.PREFIX_TABLE.'image_format` (
+ `format_id` int(11) unsigned NOT NULL auto_increment,
+ `image_id` mediumint(8) unsigned NOT NULL DEFAULT \'0\',
+ `ext` varchar(255) NOT NULL,
+ `filesize` mediumint(9) unsigned DEFAULT NULL,
+ PRIMARY KEY (`format_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8
+;');
+
+echo "\n".$upgrade_description."\n";
+
?>
diff --git a/plugins/LocalFilesEditor/maintain.inc.php b/install/db/146-database.php
index d3c628932..0c136eaf8 100644
--- a/plugins/LocalFilesEditor/maintain.inc.php
+++ b/install/db/146-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -21,12 +21,19 @@
// | USA. |
// +-----------------------------------------------------------------------+
-function plugin_uninstall()
+if (!defined('PHPWG_ROOT_PATH'))
{
- global $prefixeTable;
-
- $query = 'DELETE FROM ' . CONFIG_TABLE . ' WHERE param=\'LocalFilesEditor\' LIMIT 1;';
- pwg_query($query);
+ die('Hacking attempt!');
}
-?> \ No newline at end of file
+$upgrade_description = 'add format_id in history table';
+
+// we use PREFIX_TABLE, in case Piwigo uses an external user table
+pwg_query('
+ALTER TABLE `'.PREFIX_TABLE.'history`
+ ADD COLUMN `format_id` int(11) unsigned DEFAULT NULL
+;');
+
+echo "\n".$upgrade_description."\n";
+
+?>
diff --git a/plugins/LocalFilesEditor/language/cs_CZ/index.php b/install/db/147-database.php
index c8de97f60..60541e4b6 100644
--- a/plugins/LocalFilesEditor/language/cs_CZ/index.php
+++ b/install/db/147-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -21,10 +21,26 @@
// | USA. |
// +-----------------------------------------------------------------------+
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
+if (!defined('PHPWG_ROOT_PATH'))
+{
+ die('Hacking attempt!');
+}
+
+$upgrade_description = 'add user authentication keys table';
+
+// we use PREFIX_TABLE, in case Piwigo uses an external user table
+pwg_query('
+CREATE TABLE `'.PREFIX_TABLE.'user_auth_keys` (
+ `auth_key_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `auth_key` varchar(255) NOT NULL,
+ `user_id` mediumint(8) unsigned NOT NULL,
+ `created_on` datetime NOT NULL,
+ `duration` int(11) unsigned DEFAULT NULL,
+ `expired_on` datetime NOT NULL,
+ PRIMARY KEY (`auth_key_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8
+;');
+
+echo "\n".$upgrade_description."\n";
+
?>
diff --git a/plugins/LocalFilesEditor/language/ar_SA/index.php b/install/db/148-database.php
index c8de97f60..9afb92a2a 100644
--- a/plugins/LocalFilesEditor/language/ar_SA/index.php
+++ b/install/db/148-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -21,10 +21,19 @@
// | USA. |
// +-----------------------------------------------------------------------+
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
+if (!defined('PHPWG_ROOT_PATH'))
+{
+ die('Hacking attempt!');
+}
+
+$upgrade_description = 'add auth_key_id in history table';
+
+// we use PREFIX_TABLE, in case Piwigo uses an external user table
+pwg_query('
+ALTER TABLE `'.PREFIX_TABLE.'history`
+ ADD COLUMN `auth_key_id` int(11) unsigned DEFAULT NULL
+;');
+
+echo "\n".$upgrade_description."\n";
+
?>
diff --git a/install/db/61-database.php b/install/db/61-database.php
index e6ac8b095..92b8e5c6e 100644
--- a/install/db/61-database.php
+++ b/install/db/61-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/62-database.php b/install/db/62-database.php
index f384aa96b..4370cb8bd 100644
--- a/install/db/62-database.php
+++ b/install/db/62-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/63-database.php b/install/db/63-database.php
index eb5235bcf..10c15c9ac 100644
--- a/install/db/63-database.php
+++ b/install/db/63-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/64-database.php b/install/db/64-database.php
index 2b8b1037b..283dee112 100644
--- a/install/db/64-database.php
+++ b/install/db/64-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/65-database.php b/install/db/65-database.php
index 64482d63e..e21071328 100644
--- a/install/db/65-database.php
+++ b/install/db/65-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/66-database.php b/install/db/66-database.php
index 99cc18e01..c3f652407 100644
--- a/install/db/66-database.php
+++ b/install/db/66-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/67-database.php b/install/db/67-database.php
index 77b071a27..b61b69d28 100644
--- a/install/db/67-database.php
+++ b/install/db/67-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/68-database.php b/install/db/68-database.php
index a1b69f628..071662d0f 100644
--- a/install/db/68-database.php
+++ b/install/db/68-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/69-database.php b/install/db/69-database.php
index d4d826cdb..be2c49b31 100644
--- a/install/db/69-database.php
+++ b/install/db/69-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/70-database.php b/install/db/70-database.php
index ed6b37ca1..a0d04f618 100644
--- a/install/db/70-database.php
+++ b/install/db/70-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/71-database.php b/install/db/71-database.php
index 0e3795528..0bd90d053 100644
--- a/install/db/71-database.php
+++ b/install/db/71-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/72-database.php b/install/db/72-database.php
index 85af1da93..bb5864df6 100644
--- a/install/db/72-database.php
+++ b/install/db/72-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/73-database.php b/install/db/73-database.php
index b8377acac..9ff554ab2 100644
--- a/install/db/73-database.php
+++ b/install/db/73-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/74-database.php b/install/db/74-database.php
index 76182aff1..dd91a6ce5 100644
--- a/install/db/74-database.php
+++ b/install/db/74-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/75-database.php b/install/db/75-database.php
index 34eae6e93..75aee25df 100644
--- a/install/db/75-database.php
+++ b/install/db/75-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/76-database.php b/install/db/76-database.php
index 9691363f2..660439ebd 100644
--- a/install/db/76-database.php
+++ b/install/db/76-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/77-database.php b/install/db/77-database.php
index 6d7352d41..b9f0915a5 100644
--- a/install/db/77-database.php
+++ b/install/db/77-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/78-database.php b/install/db/78-database.php
index 7073cf5e1..707c13657 100644
--- a/install/db/78-database.php
+++ b/install/db/78-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/79-database.php b/install/db/79-database.php
index f03c9323a..4e56c5b78 100644
--- a/install/db/79-database.php
+++ b/install/db/79-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/80-database.php b/install/db/80-database.php
index 7a30de753..48ecce838 100644
--- a/install/db/80-database.php
+++ b/install/db/80-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/81-database.php b/install/db/81-database.php
index afaa372e5..d8ffa62fe 100644
--- a/install/db/81-database.php
+++ b/install/db/81-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/82-database.php b/install/db/82-database.php
index 3be20212b..49eda8087 100644
--- a/install/db/82-database.php
+++ b/install/db/82-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/83-database.php b/install/db/83-database.php
index 88b2a7710..7e30bfafa 100644
--- a/install/db/83-database.php
+++ b/install/db/83-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/84-database.php b/install/db/84-database.php
index 79901731d..2efea870b 100644
--- a/install/db/84-database.php
+++ b/install/db/84-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/85-database.php b/install/db/85-database.php
index 583d10405..6a1d480af 100644
--- a/install/db/85-database.php
+++ b/install/db/85-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/86-database.php b/install/db/86-database.php
index 66b6ee575..01c0061ae 100644
--- a/install/db/86-database.php
+++ b/install/db/86-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/87-database.php b/install/db/87-database.php
index 232468b18..270dacfcc 100644
--- a/install/db/87-database.php
+++ b/install/db/87-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/88-database.php b/install/db/88-database.php
index 9bcc5a3ef..eaa5540fc 100644
--- a/install/db/88-database.php
+++ b/install/db/88-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/89-database.php b/install/db/89-database.php
index aba1b70c0..0cf50b42f 100644
--- a/install/db/89-database.php
+++ b/install/db/89-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/90-database.php b/install/db/90-database.php
index 2e315140f..d4bc7429c 100644
--- a/install/db/90-database.php
+++ b/install/db/90-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/91-database.php b/install/db/91-database.php
index a3a466cc3..fa5e751a9 100644
--- a/install/db/91-database.php
+++ b/install/db/91-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/92-database.php b/install/db/92-database.php
index 972d84d51..3a9cfe918 100644
--- a/install/db/92-database.php
+++ b/install/db/92-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/93-database.php b/install/db/93-database.php
index 579151a79..8bcc1af71 100644
--- a/install/db/93-database.php
+++ b/install/db/93-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/94-database.php b/install/db/94-database.php
index 27ca62d4d..35d2bacc4 100644
--- a/install/db/94-database.php
+++ b/install/db/94-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/95-database.php b/install/db/95-database.php
index f79e83855..e2a90944f 100644
--- a/install/db/95-database.php
+++ b/install/db/95-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/96-database.php b/install/db/96-database.php
index dad166e17..03d64f70b 100644
--- a/install/db/96-database.php
+++ b/install/db/96-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/97-database.php b/install/db/97-database.php
index 535005a11..182d8d4a1 100644
--- a/install/db/97-database.php
+++ b/install/db/97-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/98-database.php b/install/db/98-database.php
index 69c11d395..2d6dfd6a9 100644
--- a/install/db/98-database.php
+++ b/install/db/98-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/99-database.php b/install/db/99-database.php
index c85336289..e6649d2f3 100644
--- a/install/db/99-database.php
+++ b/install/db/99-database.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/db/index.php b/install/db/index.php
index c8de97f60..0b96c3efa 100644
--- a/install/db/index.php
+++ b/install/db/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/hosting.php b/install/hosting.php
index 9b7704481..5c6c35c31 100644
--- a/install/hosting.php
+++ b/install/hosting.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/index.php b/install/index.php
index c8de97f60..0b96c3efa 100644
--- a/install/index.php
+++ b/install/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/php5_apache_configuration.php b/install/php5_apache_configuration.php
index 4a6ca31d1..be0f02de3 100644
--- a/install/php5_apache_configuration.php
+++ b/install/php5_apache_configuration.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/piwigo_structure-mysql.sql b/install/piwigo_structure-mysql.sql
index b36844a8f..0c50701c0 100644
--- a/install/piwigo_structure-mysql.sql
+++ b/install/piwigo_structure-mysql.sql
@@ -131,6 +131,8 @@ CREATE TABLE `piwigo_history` (
`image_id` mediumint(8) default NULL,
`summarized` enum('true','false') default 'false',
`image_type` enum('picture','high','other') default NULL,
+ `format_id` int(11) unsigned default NULL,
+ `auth_key_id` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `history_i1` (`summarized`)
) ENGINE=MyISAM;
@@ -163,6 +165,18 @@ CREATE TABLE `piwigo_image_category` (
) ENGINE=MyISAM;
--
+-- Table structure for table `piwigo_image_format`
+--
+
+CREATE TABLE `piwigo_image_format` (
+ `format_id` int(11) unsigned NOT NULL auto_increment,
+ `image_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `ext` varchar(255) NOT NULL,
+ `filesize` mediumint(9) unsigned DEFAULT NULL,
+ PRIMARY KEY (`format_id`)
+) ENGINE=MyISAM;
+
+--
-- Table structure for table `piwigo_image_tag`
--
@@ -353,6 +367,20 @@ CREATE TABLE `piwigo_user_access` (
) ENGINE=MyISAM;
--
+-- Table structure for table `piwigo_user_auth_keys`
+--
+
+CREATE TABLE `piwigo_user_auth_keys` (
+ `auth_key_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `auth_key` varchar(255) NOT NULL,
+ `user_id` mediumint(8) unsigned NOT NULL,
+ `created_on` datetime NOT NULL,
+ `duration` int(11) unsigned DEFAULT NULL,
+ `expired_on` datetime NOT NULL,
+ PRIMARY KEY (`auth_key_id`)
+) ENGINE=MyISAM;
+
+--
-- Table structure for table `piwigo_user_cache`
--
diff --git a/install/upgrade_1.3.0.php b/install/upgrade_1.3.0.php
index c7f461812..3df58fe89 100644
--- a/install/upgrade_1.3.0.php
+++ b/install/upgrade_1.3.0.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/upgrade_1.3.1.php b/install/upgrade_1.3.1.php
index 2ecec0186..5106a5226 100644
--- a/install/upgrade_1.3.1.php
+++ b/install/upgrade_1.3.1.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/upgrade_1.4.0.php b/install/upgrade_1.4.0.php
index f83c34acc..737b7b948 100644
--- a/install/upgrade_1.4.0.php
+++ b/install/upgrade_1.4.0.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/upgrade_1.5.0.php b/install/upgrade_1.5.0.php
index 5b9c7f393..3920d2228 100644
--- a/install/upgrade_1.5.0.php
+++ b/install/upgrade_1.5.0.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/upgrade_1.6.0.php b/install/upgrade_1.6.0.php
index 7acb45dc9..66ec216be 100644
--- a/install/upgrade_1.6.0.php
+++ b/install/upgrade_1.6.0.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/upgrade_1.6.2.php b/install/upgrade_1.6.2.php
index 87c14e22e..79485c3c2 100644
--- a/install/upgrade_1.6.2.php
+++ b/install/upgrade_1.6.2.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/upgrade_1.7.0.php b/install/upgrade_1.7.0.php
index 9e69b4f8a..c5bd747a4 100644
--- a/install/upgrade_1.7.0.php
+++ b/install/upgrade_1.7.0.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/upgrade_2.0.0.php b/install/upgrade_2.0.0.php
index 401e5c24f..cc52d539a 100644
--- a/install/upgrade_2.0.0.php
+++ b/install/upgrade_2.0.0.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/upgrade_2.1.0.php b/install/upgrade_2.1.0.php
index ed63d9731..2a3983017 100644
--- a/install/upgrade_2.1.0.php
+++ b/install/upgrade_2.1.0.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/upgrade_2.2.0.php b/install/upgrade_2.2.0.php
index 832d09140..c9b6c5867 100644
--- a/install/upgrade_2.2.0.php
+++ b/install/upgrade_2.2.0.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/upgrade_2.3.0.php b/install/upgrade_2.3.0.php
index 0ce63304d..acb722474 100644
--- a/install/upgrade_2.3.0.php
+++ b/install/upgrade_2.3.0.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/upgrade_2.4.0.php b/install/upgrade_2.4.0.php
index 554f76185..c9a2b965b 100644
--- a/install/upgrade_2.4.0.php
+++ b/install/upgrade_2.4.0.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/upgrade_2.5.0.php b/install/upgrade_2.5.0.php
index 32c7c9157..ce0d86a1c 100644
--- a/install/upgrade_2.5.0.php
+++ b/install/upgrade_2.5.0.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/install/upgrade_2.6.0.php b/install/upgrade_2.6.0.php
index 3a43e7cb3..7c6451e66 100644
--- a/install/upgrade_2.6.0.php
+++ b/install/upgrade_2.6.0.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/af_ZA/admin.lang.php b/language/af_ZA/admin.lang.php
index 1309d9b09..fc56d1bfd 100644
--- a/language/af_ZA/admin.lang.php
+++ b/language/af_ZA/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/af_ZA/common.lang.php b/language/af_ZA/common.lang.php
index cd21db778..8977ed96f 100644
--- a/language/af_ZA/common.lang.php
+++ b/language/af_ZA/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/af_ZA/index.php b/language/af_ZA/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/af_ZA/index.php
+++ b/language/af_ZA/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/af_ZA/install.lang.php b/language/af_ZA/install.lang.php
index 201ae3e0c..77300f122 100644
--- a/language/af_ZA/install.lang.php
+++ b/language/af_ZA/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/af_ZA/upgrade.lang.php b/language/af_ZA/upgrade.lang.php
index 4b4ccdfa4..9f034fd4d 100644
--- a/language/af_ZA/upgrade.lang.php
+++ b/language/af_ZA/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ar_EG/common.lang.php b/language/ar_EG/common.lang.php
index ee126e5be..6a85f30e9 100644
--- a/language/ar_EG/common.lang.php
+++ b/language/ar_EG/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ar_EG/index.php b/language/ar_EG/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/ar_EG/index.php
+++ b/language/ar_EG/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ar_EG/install.lang.php b/language/ar_EG/install.lang.php
index c42ae1a44..d82d0ceec 100755
--- a/language/ar_EG/install.lang.php
+++ b/language/ar_EG/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ar_MA/common.lang.php b/language/ar_MA/common.lang.php
index 158463485..9cc6fb59d 100644
--- a/language/ar_MA/common.lang.php
+++ b/language/ar_MA/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ar_MA/index.php b/language/ar_MA/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/ar_MA/index.php
+++ b/language/ar_MA/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ar_SA/admin.lang.php b/language/ar_SA/admin.lang.php
index 451965f11..e8c35eca6 100644
--- a/language/ar_SA/admin.lang.php
+++ b/language/ar_SA/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ar_SA/common.lang.php b/language/ar_SA/common.lang.php
index 3019a5977..5d92c66dd 100644
--- a/language/ar_SA/common.lang.php
+++ b/language/ar_SA/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ar_SA/index.php b/language/ar_SA/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/ar_SA/index.php
+++ b/language/ar_SA/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ar_SA/install.lang.php b/language/ar_SA/install.lang.php
index e0381e811..37f8a6890 100644
--- a/language/ar_SA/install.lang.php
+++ b/language/ar_SA/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ar_SA/upgrade.lang.php b/language/ar_SA/upgrade.lang.php
index 56117b70f..68cf34e02 100644
--- a/language/ar_SA/upgrade.lang.php
+++ b/language/ar_SA/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/az_AZ/common.lang.php b/language/az_AZ/common.lang.php
index 8096e5f00..3519a5bc4 100644
--- a/language/az_AZ/common.lang.php
+++ b/language/az_AZ/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/bg_BG/admin.lang.php b/language/bg_BG/admin.lang.php
index b8625e945..f6cc322d2 100644
--- a/language/bg_BG/admin.lang.php
+++ b/language/bg_BG/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/bg_BG/common.lang.php b/language/bg_BG/common.lang.php
index d1d94fee3..7dfcb8c9d 100644
--- a/language/bg_BG/common.lang.php
+++ b/language/bg_BG/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/bg_BG/install.lang.php b/language/bg_BG/install.lang.php
index f8a4f118b..e8c393d71 100644
--- a/language/bg_BG/install.lang.php
+++ b/language/bg_BG/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/bg_BG/upgrade.lang.php b/language/bg_BG/upgrade.lang.php
index 4bbf0120b..1396814ba 100644
--- a/language/bg_BG/upgrade.lang.php
+++ b/language/bg_BG/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/bn_IN/common.lang.php b/language/bn_IN/common.lang.php
index 04f23196e..932559c39 100644
--- a/language/bn_IN/common.lang.php
+++ b/language/bn_IN/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/br_FR/admin.lang.php b/language/br_FR/admin.lang.php
index 97dc5dd4f..61ee36d93 100755
--- a/language/br_FR/admin.lang.php
+++ b/language/br_FR/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/br_FR/common.lang.php b/language/br_FR/common.lang.php
index 881f55c54..ac9ad40ed 100644
--- a/language/br_FR/common.lang.php
+++ b/language/br_FR/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/br_FR/install.lang.php b/language/br_FR/install.lang.php
index 031502a9d..385315814 100755
--- a/language/br_FR/install.lang.php
+++ b/language/br_FR/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/br_FR/upgrade.lang.php b/language/br_FR/upgrade.lang.php
index 6d32e7864..0ca6f5c0b 100755
--- a/language/br_FR/upgrade.lang.php
+++ b/language/br_FR/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ca_ES/admin.lang.php b/language/ca_ES/admin.lang.php
index 69f5e5085..30c3be8f5 100644
--- a/language/ca_ES/admin.lang.php
+++ b/language/ca_ES/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ca_ES/common.lang.php b/language/ca_ES/common.lang.php
index b6652e458..0e2209328 100644
--- a/language/ca_ES/common.lang.php
+++ b/language/ca_ES/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ca_ES/install.lang.php b/language/ca_ES/install.lang.php
index fa3991fb4..18c466624 100644
--- a/language/ca_ES/install.lang.php
+++ b/language/ca_ES/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ca_ES/upgrade.lang.php b/language/ca_ES/upgrade.lang.php
index eb9c821c0..ecd80f8f3 100644
--- a/language/ca_ES/upgrade.lang.php
+++ b/language/ca_ES/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/cs_CZ/admin.lang.php b/language/cs_CZ/admin.lang.php
index d931459b6..4a547565a 100644
--- a/language/cs_CZ/admin.lang.php
+++ b/language/cs_CZ/admin.lang.php
@@ -5,7 +5,7 @@
// +-----------------------------------------------------------------------+
// | Copyright(C) 2009 Pavel Budka & Petr Jirsa http://pbudka.co.cc |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/cs_CZ/common.lang.php b/language/cs_CZ/common.lang.php
index 4d2fbc8f9..688fe172f 100644
--- a/language/cs_CZ/common.lang.php
+++ b/language/cs_CZ/common.lang.php
@@ -5,7 +5,7 @@
// +-----------------------------------------------------------------------+
// | Copyright(C) 2009 Pavel Budka & Petr Jirsa http://pbudka.co.cc |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/cs_CZ/help/index.php b/language/cs_CZ/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/cs_CZ/help/index.php
+++ b/language/cs_CZ/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/cs_CZ/index.php b/language/cs_CZ/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/cs_CZ/index.php
+++ b/language/cs_CZ/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/cs_CZ/install.lang.php b/language/cs_CZ/install.lang.php
index 906adc302..dd900f045 100644
--- a/language/cs_CZ/install.lang.php
+++ b/language/cs_CZ/install.lang.php
@@ -5,7 +5,7 @@
// +-----------------------------------------------------------------------+
// | Copyright(C) 2009 Pavel Budka & Petr Jirsa http://pbudka.co.cc |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/cs_CZ/upgrade.lang.php b/language/cs_CZ/upgrade.lang.php
index 7d967f265..dbb8f516e 100644
--- a/language/cs_CZ/upgrade.lang.php
+++ b/language/cs_CZ/upgrade.lang.php
@@ -5,7 +5,7 @@
// +-----------------------------------------------------------------------+
// | Copyright(C) 2009 Pavel Budka & Petr Jirsa http://pbudka.co.cc |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/da_DK/admin.lang.php b/language/da_DK/admin.lang.php
index c48b5e5ea..48cfcc1c1 100644
--- a/language/da_DK/admin.lang.php
+++ b/language/da_DK/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/da_DK/common.lang.php b/language/da_DK/common.lang.php
index a5156e625..5afdea8c3 100644
--- a/language/da_DK/common.lang.php
+++ b/language/da_DK/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/da_DK/index.php b/language/da_DK/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/da_DK/index.php
+++ b/language/da_DK/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/da_DK/install.lang.php b/language/da_DK/install.lang.php
index 5b547fbd6..4e7b45139 100644
--- a/language/da_DK/install.lang.php
+++ b/language/da_DK/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/da_DK/upgrade.lang.php b/language/da_DK/upgrade.lang.php
index 1bc7d1922..98646fb2f 100644
--- a/language/da_DK/upgrade.lang.php
+++ b/language/da_DK/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/de_DE/admin.lang.php b/language/de_DE/admin.lang.php
index f9891c7d2..93b6bf916 100644
--- a/language/de_DE/admin.lang.php
+++ b/language/de_DE/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/de_DE/common.lang.php b/language/de_DE/common.lang.php
index 2381b7670..39de1e8af 100644
--- a/language/de_DE/common.lang.php
+++ b/language/de_DE/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/de_DE/help/index.php b/language/de_DE/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/de_DE/help/index.php
+++ b/language/de_DE/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/de_DE/index.php b/language/de_DE/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/de_DE/index.php
+++ b/language/de_DE/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/de_DE/install.lang.php b/language/de_DE/install.lang.php
index c13e35f67..13da58c9c 100644
--- a/language/de_DE/install.lang.php
+++ b/language/de_DE/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/de_DE/upgrade.lang.php b/language/de_DE/upgrade.lang.php
index 3684ccd54..872d0bcce 100644
--- a/language/de_DE/upgrade.lang.php
+++ b/language/de_DE/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/dv_MV/common.lang.php b/language/dv_MV/common.lang.php
index c5d6cc8da..4228c9538 100644
--- a/language/dv_MV/common.lang.php
+++ b/language/dv_MV/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/dv_MV/index.php b/language/dv_MV/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/dv_MV/index.php
+++ b/language/dv_MV/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/el_GR/admin.lang.php b/language/el_GR/admin.lang.php
index b202ae7af..51f40d884 100644
--- a/language/el_GR/admin.lang.php
+++ b/language/el_GR/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/el_GR/index.php b/language/el_GR/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/el_GR/index.php
+++ b/language/el_GR/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/el_GR/install.lang.php b/language/el_GR/install.lang.php
index f8c7f33ad..82c5a9b70 100644
--- a/language/el_GR/install.lang.php
+++ b/language/el_GR/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/el_GR/upgrade.lang.php b/language/el_GR/upgrade.lang.php
index 29b96352d..ab5d1abfe 100755
--- a/language/el_GR/upgrade.lang.php
+++ b/language/el_GR/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/en_GB/admin.lang.php b/language/en_GB/admin.lang.php
index 48182d1cc..94ddda901 100644
--- a/language/en_GB/admin.lang.php
+++ b/language/en_GB/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/en_GB/common.lang.php b/language/en_GB/common.lang.php
index f328d2505..72fcf8c1c 100644
--- a/language/en_GB/common.lang.php
+++ b/language/en_GB/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/en_GB/index.php b/language/en_GB/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/en_GB/index.php
+++ b/language/en_GB/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/en_GB/install.lang.php b/language/en_GB/install.lang.php
index 8f5d1652f..81973968d 100755
--- a/language/en_GB/install.lang.php
+++ b/language/en_GB/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/en_UK/admin.lang.php b/language/en_UK/admin.lang.php
index 61b123f8e..ba130473d 100644
--- a/language/en_UK/admin.lang.php
+++ b/language/en_UK/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -931,6 +931,7 @@ $lang['wrong filename'] = "wrong filename";
$lang['X Position'] = 'X Position';
$lang['X Repeat'] = 'X Repeat';
$lang['Y Position'] = 'Y Position';
+$lang['Y Repeat'] = 'Y Repeat';
$lang['Year'] = "Year";
$lang['You are running on development sources, no check possible.'] = "You are running on development sources, no check possible.";
$lang['You are running the latest version of Piwigo.'] = "You are running Piwigo latest version.";
@@ -980,4 +981,12 @@ $lang['based on'] = 'based on';
$lang['file name'] = 'file name';
$lang['date & time'] = 'date & time';
$lang['width & height'] = 'width & height';
-$lang['Upload in progress'] = 'Upload in progress'; \ No newline at end of file
+$lang['Upload in progress'] = 'Upload in progress';
+$lang['Orphans'] = 'Orphans';
+$lang['Delete %d orphan photos'] = 'Delete %d orphan photos';
+$lang['Edit user'] = 'Edit user';
+$lang['Recipients'] = 'Recipients';
+$lang['No recipient selected'] = 'No recipient selected';
+$lang['No user is permitted to see this private album'] = 'No user is permitted to see this private album';
+$lang['Each email sent will contain its own automatic authentication key on links, valid for %s.'] = 'Each email sent will contain its own automatic authentication key on links, valid for %s.';
+$lang['For security reason, authentication keys do not work for administrators.'] = 'For security reason, authentication keys do not work for administrators.'; \ No newline at end of file
diff --git a/language/en_UK/common.lang.php b/language/en_UK/common.lang.php
index 512cbada6..bf61456ed 100644
--- a/language/en_UK/common.lang.php
+++ b/language/en_UK/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -425,4 +425,5 @@ $lang['Photo description'] = 'Photo description';
$lang['Album name, A &rarr; Z'] = 'Album name, A &rarr; Z';
$lang['Album name, Z &rarr; A'] = 'Album name, Z &rarr; A';
$lang['Link: %s'] = 'Link: %s';
+$lang['Your authentication key is no longer valid.'] = 'Your authentication key is no longer valid.';
?> \ No newline at end of file
diff --git a/language/en_UK/help/index.php b/language/en_UK/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/en_UK/help/index.php
+++ b/language/en_UK/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/en_UK/index.php b/language/en_UK/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/en_UK/index.php
+++ b/language/en_UK/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/en_UK/install.lang.php b/language/en_UK/install.lang.php
index a6d8f670f..a8da0a8a6 100644
--- a/language/en_UK/install.lang.php
+++ b/language/en_UK/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/en_UK/upgrade.lang.php b/language/en_UK/upgrade.lang.php
index 3d40fcead..f279fe618 100644
--- a/language/en_UK/upgrade.lang.php
+++ b/language/en_UK/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/en_US/admin.lang.php b/language/en_US/admin.lang.php
index fec412589..d8c873dfb 100755
--- a/language/en_US/admin.lang.php
+++ b/language/en_US/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/en_US/common.lang.php b/language/en_US/common.lang.php
index 0c442e430..d56f47288 100644
--- a/language/en_US/common.lang.php
+++ b/language/en_US/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/en_US/index.php b/language/en_US/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/en_US/index.php
+++ b/language/en_US/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/eo_EO/admin.lang.php b/language/eo_EO/admin.lang.php
index db18ea424..b9e71fb69 100644
--- a/language/eo_EO/admin.lang.php
+++ b/language/eo_EO/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/eo_EO/common.lang.php b/language/eo_EO/common.lang.php
index 49346d137..f50dd739c 100644
--- a/language/eo_EO/common.lang.php
+++ b/language/eo_EO/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/eo_EO/install.lang.php b/language/eo_EO/install.lang.php
index ce295f745..b544c8427 100755
--- a/language/eo_EO/install.lang.php
+++ b/language/eo_EO/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/eo_EO/upgrade.lang.php b/language/eo_EO/upgrade.lang.php
index 4200e8d82..e681cf3a5 100755
--- a/language/eo_EO/upgrade.lang.php
+++ b/language/eo_EO/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/es_AR/common.lang.php b/language/es_AR/common.lang.php
index ad609eb06..c8b158017 100644
--- a/language/es_AR/common.lang.php
+++ b/language/es_AR/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/es_AR/index.php b/language/es_AR/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/es_AR/index.php
+++ b/language/es_AR/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/es_ES/admin.lang.php b/language/es_ES/admin.lang.php
index 4a19bdd94..eb8991e28 100644
--- a/language/es_ES/admin.lang.php
+++ b/language/es_ES/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/es_ES/common.lang.php b/language/es_ES/common.lang.php
index 3da25c946..e6557bba9 100644
--- a/language/es_ES/common.lang.php
+++ b/language/es_ES/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/es_ES/help/index.php b/language/es_ES/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/es_ES/help/index.php
+++ b/language/es_ES/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/es_ES/index.php b/language/es_ES/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/es_ES/index.php
+++ b/language/es_ES/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/es_ES/install.lang.php b/language/es_ES/install.lang.php
index 6f32ff4dd..147a4a9d9 100644
--- a/language/es_ES/install.lang.php
+++ b/language/es_ES/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/es_ES/upgrade.lang.php b/language/es_ES/upgrade.lang.php
index fba1f4d5c..e8d5f9736 100644
--- a/language/es_ES/upgrade.lang.php
+++ b/language/es_ES/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/es_MX/common.lang.php b/language/es_MX/common.lang.php
index 7da98db80..f89603cec 100644
--- a/language/es_MX/common.lang.php
+++ b/language/es_MX/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/es_MX/install.lang.php b/language/es_MX/install.lang.php
index 2076f3442..ebc52c1ed 100755
--- a/language/es_MX/install.lang.php
+++ b/language/es_MX/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/et_EE/admin.lang.php b/language/et_EE/admin.lang.php
index 6f1d22b03..8a229b4dc 100644
--- a/language/et_EE/admin.lang.php
+++ b/language/et_EE/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/et_EE/common.lang.php b/language/et_EE/common.lang.php
index 8f74406eb..75fd4304c 100644
--- a/language/et_EE/common.lang.php
+++ b/language/et_EE/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/et_EE/install.lang.php b/language/et_EE/install.lang.php
index 802eb6cb7..e4bd31420 100755
--- a/language/et_EE/install.lang.php
+++ b/language/et_EE/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/et_EE/upgrade.lang.php b/language/et_EE/upgrade.lang.php
index b9c12e682..d142c6052 100755
--- a/language/et_EE/upgrade.lang.php
+++ b/language/et_EE/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/eu_ES/common.lang.php b/language/eu_ES/common.lang.php
index fcca4c097..f66dd12aa 100644
--- a/language/eu_ES/common.lang.php
+++ b/language/eu_ES/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fa_IR/admin.lang.php b/language/fa_IR/admin.lang.php
index c395c53d2..89f14a0fb 100644
--- a/language/fa_IR/admin.lang.php
+++ b/language/fa_IR/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fa_IR/common.lang.php b/language/fa_IR/common.lang.php
index 035e4500e..033785dab 100644
--- a/language/fa_IR/common.lang.php
+++ b/language/fa_IR/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fa_IR/index.php b/language/fa_IR/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/fa_IR/index.php
+++ b/language/fa_IR/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fa_IR/install.lang.php b/language/fa_IR/install.lang.php
index 64ee2137e..25b0c74a4 100644
--- a/language/fa_IR/install.lang.php
+++ b/language/fa_IR/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fa_IR/upgrade.lang.php b/language/fa_IR/upgrade.lang.php
index 30f67f4ec..8a5b08b7c 100644
--- a/language/fa_IR/upgrade.lang.php
+++ b/language/fa_IR/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fi_FI/admin.lang.php b/language/fi_FI/admin.lang.php
index c54f14282..3e0c8d9ac 100755
--- a/language/fi_FI/admin.lang.php
+++ b/language/fi_FI/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fi_FI/common.lang.php b/language/fi_FI/common.lang.php
index 5b007d47a..9003c7888 100644
--- a/language/fi_FI/common.lang.php
+++ b/language/fi_FI/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fi_FI/install.lang.php b/language/fi_FI/install.lang.php
index 6bd57028c..b38ad6955 100755
--- a/language/fi_FI/install.lang.php
+++ b/language/fi_FI/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fi_FI/upgrade.lang.php b/language/fi_FI/upgrade.lang.php
index 37112f61e..7e038068b 100755
--- a/language/fi_FI/upgrade.lang.php
+++ b/language/fi_FI/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fr_CA/admin.lang.php b/language/fr_CA/admin.lang.php
index e3afd1898..c245d4088 100644
--- a/language/fr_CA/admin.lang.php
+++ b/language/fr_CA/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fr_CA/common.lang.php b/language/fr_CA/common.lang.php
index 02c943c53..e0b249629 100644
--- a/language/fr_CA/common.lang.php
+++ b/language/fr_CA/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fr_CA/help/index.php b/language/fr_CA/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/fr_CA/help/index.php
+++ b/language/fr_CA/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fr_CA/index.php b/language/fr_CA/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/fr_CA/index.php
+++ b/language/fr_CA/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fr_CA/install.lang.php b/language/fr_CA/install.lang.php
index 160f430df..5a8a4b8c7 100644
--- a/language/fr_CA/install.lang.php
+++ b/language/fr_CA/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fr_CA/upgrade.lang.php b/language/fr_CA/upgrade.lang.php
index 00b613a2f..6c7acc79f 100644
--- a/language/fr_CA/upgrade.lang.php
+++ b/language/fr_CA/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fr_FR/admin.lang.php b/language/fr_FR/admin.lang.php
index 801ea7776..4067a4e1b 100644
--- a/language/fr_FR/admin.lang.php
+++ b/language/fr_FR/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -982,4 +982,12 @@ $lang['file name'] = 'nom de fichier';
$lang['date & time'] = 'date et heure';
$lang['width & height'] = 'largeur et hauteur';
$lang['No and unlock sub-albums'] = 'Non, et déverrouiller les sous-albums';
-$lang['Upload in progress'] = 'Transfert en cours...'; \ No newline at end of file
+$lang['Upload in progress'] = 'Transfert en cours...';
+$lang['Orphans'] = 'Orphelines';
+$lang['Delete %d orphan photos'] = 'Supprimer les %d photos orphelines';
+$lang['Edit user'] = 'Éditer l\'utilisateur';
+$lang['Recipients'] = 'Destinataires';
+$lang['No recipient selected'] = 'Choisissez un destinataire';
+$lang['No user is permitted to see this private album'] = 'Aucun utilisateur n\'est autorisé à voir cet album privé';
+$lang['Each email sent will contain its own automatic authentication key on links, valid for %s.'] = 'Chaque email envoyé contiendra sa propre clef d\'identification automatique sur les liens, valide %s.';
+$lang['For security reason, authentication keys do not work for administrators.'] = 'Par mesure de sécurité les clefs d\'identification ne fonctionnent pas pour les administrateurs.'; \ No newline at end of file
diff --git a/language/fr_FR/common.lang.php b/language/fr_FR/common.lang.php
index 67823ad3b..5eac3c004 100644
--- a/language/fr_FR/common.lang.php
+++ b/language/fr_FR/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -424,4 +424,5 @@ $lang['Photo title'] = 'Titre de la photo';
$lang['Photo description'] = 'Description de la photo';
$lang['Album name, A &rarr; Z'] = 'Nom de l\'album, A &rarr; Z';
$lang['Album name, Z &rarr; A'] = 'Nom de l\'album, Z &rarr; A';
-$lang['Link: %s'] = 'Lien: %s'; \ No newline at end of file
+$lang['Link: %s'] = 'Lien: %s';
+$lang['Your authentication key is no longer valid.'] = 'Votre clef d\'identification n\'est plus valide.'; \ No newline at end of file
diff --git a/language/fr_FR/help/index.php b/language/fr_FR/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/fr_FR/help/index.php
+++ b/language/fr_FR/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fr_FR/index.php b/language/fr_FR/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/fr_FR/index.php
+++ b/language/fr_FR/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fr_FR/install.lang.php b/language/fr_FR/install.lang.php
index 514e2ba0c..b21e2751e 100644
--- a/language/fr_FR/install.lang.php
+++ b/language/fr_FR/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/fr_FR/upgrade.lang.php b/language/fr_FR/upgrade.lang.php
index a99f79795..6c2d6b556 100644
--- a/language/fr_FR/upgrade.lang.php
+++ b/language/fr_FR/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ga_IE/common.lang.php b/language/ga_IE/common.lang.php
index f0bd62eb9..07dff0a94 100644
--- a/language/ga_IE/common.lang.php
+++ b/language/ga_IE/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/gl_ES/admin.lang.php b/language/gl_ES/admin.lang.php
index f6c92a6de..ed2d6941b 100755
--- a/language/gl_ES/admin.lang.php
+++ b/language/gl_ES/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/gl_ES/common.lang.php b/language/gl_ES/common.lang.php
index 3a5ec343b..17b9a844e 100644
--- a/language/gl_ES/common.lang.php
+++ b/language/gl_ES/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/gl_ES/install.lang.php b/language/gl_ES/install.lang.php
index d03a280f4..7b7bc5789 100755
--- a/language/gl_ES/install.lang.php
+++ b/language/gl_ES/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/gl_ES/upgrade.lang.php b/language/gl_ES/upgrade.lang.php
index 5e5903131..b66588124 100755
--- a/language/gl_ES/upgrade.lang.php
+++ b/language/gl_ES/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/gu_IN/common.lang.php b/language/gu_IN/common.lang.php
index f09ac7fd4..2128092ae 100644
--- a/language/gu_IN/common.lang.php
+++ b/language/gu_IN/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/he_IL/admin.lang.php b/language/he_IL/admin.lang.php
index f1103346a..149bfabf6 100644
--- a/language/he_IL/admin.lang.php
+++ b/language/he_IL/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/he_IL/common.lang.php b/language/he_IL/common.lang.php
index 08f25b973..e08f1d0f4 100644
--- a/language/he_IL/common.lang.php
+++ b/language/he_IL/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/he_IL/install.lang.php b/language/he_IL/install.lang.php
index 79e46cf91..898a3a7da 100644
--- a/language/he_IL/install.lang.php
+++ b/language/he_IL/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/he_IL/upgrade.lang.php b/language/he_IL/upgrade.lang.php
index bf6b8a1d1..5d629e82a 100644
--- a/language/he_IL/upgrade.lang.php
+++ b/language/he_IL/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/hr_HR/admin.lang.php b/language/hr_HR/admin.lang.php
index a9df2cbfc..318cd8980 100644
--- a/language/hr_HR/admin.lang.php
+++ b/language/hr_HR/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/hr_HR/common.lang.php b/language/hr_HR/common.lang.php
index a55ea92d3..4d9b44284 100644
--- a/language/hr_HR/common.lang.php
+++ b/language/hr_HR/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/hr_HR/help/index.php b/language/hr_HR/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/hr_HR/help/index.php
+++ b/language/hr_HR/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/hr_HR/index.php b/language/hr_HR/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/hr_HR/index.php
+++ b/language/hr_HR/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/hr_HR/install.lang.php b/language/hr_HR/install.lang.php
index 79b131bfd..e73c0ea0a 100644
--- a/language/hr_HR/install.lang.php
+++ b/language/hr_HR/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/hr_HR/upgrade.lang.php b/language/hr_HR/upgrade.lang.php
index 0f25b865a..ae82e407e 100644
--- a/language/hr_HR/upgrade.lang.php
+++ b/language/hr_HR/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/hu_HU/admin.lang.php b/language/hu_HU/admin.lang.php
index 37d9292f1..c8b0efac2 100644
--- a/language/hu_HU/admin.lang.php
+++ b/language/hu_HU/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/hu_HU/common.lang.php b/language/hu_HU/common.lang.php
index 386d5d18b..c9e2c9fc8 100644
--- a/language/hu_HU/common.lang.php
+++ b/language/hu_HU/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/hu_HU/help/index.php b/language/hu_HU/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/hu_HU/help/index.php
+++ b/language/hu_HU/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/hu_HU/index.php b/language/hu_HU/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/hu_HU/index.php
+++ b/language/hu_HU/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/hu_HU/install.lang.php b/language/hu_HU/install.lang.php
index 3dd3cbf21..cb644ac52 100644
--- a/language/hu_HU/install.lang.php
+++ b/language/hu_HU/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/hu_HU/upgrade.lang.php b/language/hu_HU/upgrade.lang.php
index b2dfd4585..85928e7e5 100644
--- a/language/hu_HU/upgrade.lang.php
+++ b/language/hu_HU/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/id_ID/common.lang.php b/language/id_ID/common.lang.php
index 262d0bc30..146700818 100644
--- a/language/id_ID/common.lang.php
+++ b/language/id_ID/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/id_ID/index.php b/language/id_ID/index.php
index ece585061..0837249c3 100644
--- a/language/id_ID/index.php
+++ b/language/id_ID/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/index.php b/language/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/index.php
+++ b/language/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/is_IS/common.lang.php b/language/is_IS/common.lang.php
index 79b9c0fd7..c6ab35b35 100644
--- a/language/is_IS/common.lang.php
+++ b/language/is_IS/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/is_IS/index.php b/language/is_IS/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/is_IS/index.php
+++ b/language/is_IS/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/it_IT/admin.lang.php b/language/it_IT/admin.lang.php
index ea0bdde14..002e8ea3d 100644
--- a/language/it_IT/admin.lang.php
+++ b/language/it_IT/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/it_IT/common.lang.php b/language/it_IT/common.lang.php
index e291d6450..e00cb99a6 100644
--- a/language/it_IT/common.lang.php
+++ b/language/it_IT/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/it_IT/help/index.php b/language/it_IT/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/it_IT/help/index.php
+++ b/language/it_IT/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/it_IT/index.php b/language/it_IT/index.php
index ece585061..0837249c3 100644
--- a/language/it_IT/index.php
+++ b/language/it_IT/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/it_IT/install.lang.php b/language/it_IT/install.lang.php
index 58b48223b..ec790e786 100644
--- a/language/it_IT/install.lang.php
+++ b/language/it_IT/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/it_IT/upgrade.lang.php b/language/it_IT/upgrade.lang.php
index fc18a602d..5a220610f 100644
--- a/language/it_IT/upgrade.lang.php
+++ b/language/it_IT/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ja_JP/admin.lang.php b/language/ja_JP/admin.lang.php
index 7e89c5e26..4a0d084e3 100644
--- a/language/ja_JP/admin.lang.php
+++ b/language/ja_JP/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ja_JP/common.lang.php b/language/ja_JP/common.lang.php
index a9e87b707..ddcdcd509 100644
--- a/language/ja_JP/common.lang.php
+++ b/language/ja_JP/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ja_JP/index.php b/language/ja_JP/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/ja_JP/index.php
+++ b/language/ja_JP/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ja_JP/install.lang.php b/language/ja_JP/install.lang.php
index 8ae1d0eb7..6754f1c0b 100644
--- a/language/ja_JP/install.lang.php
+++ b/language/ja_JP/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ja_JP/upgrade.lang.php b/language/ja_JP/upgrade.lang.php
index ee6282b93..53eb82697 100644
--- a/language/ja_JP/upgrade.lang.php
+++ b/language/ja_JP/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ka_GE/admin.lang.php b/language/ka_GE/admin.lang.php
index 1a6b3138e..bb171683f 100644
--- a/language/ka_GE/admin.lang.php
+++ b/language/ka_GE/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ka_GE/common.lang.php b/language/ka_GE/common.lang.php
index fb975f15a..a985463f1 100644
--- a/language/ka_GE/common.lang.php
+++ b/language/ka_GE/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ka_GE/index.php b/language/ka_GE/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/ka_GE/index.php
+++ b/language/ka_GE/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ka_GE/install.lang.php b/language/ka_GE/install.lang.php
index ba87976db..b13939943 100644
--- a/language/ka_GE/install.lang.php
+++ b/language/ka_GE/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ka_GE/upgrade.lang.php b/language/ka_GE/upgrade.lang.php
index 41aab4c1a..da4eca2c3 100644
--- a/language/ka_GE/upgrade.lang.php
+++ b/language/ka_GE/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/km_KH/admin.lang.php b/language/km_KH/admin.lang.php
index f410624a2..3c5698107 100644
--- a/language/km_KH/admin.lang.php
+++ b/language/km_KH/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/km_KH/common.lang.php b/language/km_KH/common.lang.php
index c2f30d459..17f83fb4d 100644
--- a/language/km_KH/common.lang.php
+++ b/language/km_KH/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/km_KH/index.php b/language/km_KH/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/km_KH/index.php
+++ b/language/km_KH/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/km_KH/install.lang.php b/language/km_KH/install.lang.php
index 199bc8059..b119bfb3c 100755
--- a/language/km_KH/install.lang.php
+++ b/language/km_KH/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/km_KH/upgrade.lang.php b/language/km_KH/upgrade.lang.php
index 5163f3db8..124f302b4 100755
--- a/language/km_KH/upgrade.lang.php
+++ b/language/km_KH/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/kn_IN/admin.lang.php b/language/kn_IN/admin.lang.php
index 6431c6099..82e7c9d77 100755
--- a/language/kn_IN/admin.lang.php
+++ b/language/kn_IN/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/kn_IN/common.lang.php b/language/kn_IN/common.lang.php
index 5cd93b106..b1df5d309 100644
--- a/language/kn_IN/common.lang.php
+++ b/language/kn_IN/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/kn_IN/install.lang.php b/language/kn_IN/install.lang.php
index b9b6b9397..0954d7965 100755
--- a/language/kn_IN/install.lang.php
+++ b/language/kn_IN/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/kn_IN/upgrade.lang.php b/language/kn_IN/upgrade.lang.php
index c8e84f109..3d4bc934d 100755
--- a/language/kn_IN/upgrade.lang.php
+++ b/language/kn_IN/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ko_KR/admin.lang.php b/language/ko_KR/admin.lang.php
index bbe2716a6..898c8caa7 100755
--- a/language/ko_KR/admin.lang.php
+++ b/language/ko_KR/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ko_KR/install.lang.php b/language/ko_KR/install.lang.php
index b01e0f32a..a9af4fbcd 100755
--- a/language/ko_KR/install.lang.php
+++ b/language/ko_KR/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ko_KR/upgrade.lang.php b/language/ko_KR/upgrade.lang.php
index 9c149c32b..601f88498 100755
--- a/language/ko_KR/upgrade.lang.php
+++ b/language/ko_KR/upgrade.lang.php
@@ -36,4 +36,4 @@ $lang['Only thumbnails prefix and webmaster mail address have been saved from pr
$lang['As a precaution, following plugins have been deactivated. You must check for plugins upgrade before reactiving them:'] = '예방을 위해서 다음의 플러그인들이 비활성화되었습니다. 플러그인들을 재활성화하기 전에 업그레이드할 수 있는지 확인해야 합니다:';
$lang['As a precaution, following themes have been deactivated. You must check for themes upgrade before reactiving them:'] = '예방을 위해서 다음의 테마들이 비활성화되었습니다. 테마들을 재활성화하기 전에 업그레이드할 수 있는지 확인해야 합니다:';
$lang['All sub-albums of private albums become private'] = '비공개 앨범의 모든 하위 앨범들은 비공개가 됩니다';
-$lang['In <i>%s</i>, before <b>?></b>, insert:'] = '<i>%s</i>에서 <b>?></b>전에 입력:'; \ No newline at end of file
+$lang['In <i>%s</i>, before <b>?></b>, insert:'] = '<i>%s</i>에서 <b>?></b>전에 입력:';
diff --git a/language/kok_IN/common.lang.php b/language/kok_IN/common.lang.php
index be5de6f13..5af54c701 100644
--- a/language/kok_IN/common.lang.php
+++ b/language/kok_IN/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/lb_LU/common.lang.php b/language/lb_LU/common.lang.php
index 8475426ad..7a6706847 100644
--- a/language/lb_LU/common.lang.php
+++ b/language/lb_LU/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/lt_LT/admin.lang.php b/language/lt_LT/admin.lang.php
index 504881307..310faf4c7 100755
--- a/language/lt_LT/admin.lang.php
+++ b/language/lt_LT/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/lt_LT/common.lang.php b/language/lt_LT/common.lang.php
index 3a25c25ca..260065328 100644
--- a/language/lt_LT/common.lang.php
+++ b/language/lt_LT/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/lt_LT/install.lang.php b/language/lt_LT/install.lang.php
index 2a1a0b3b3..0c4886460 100755
--- a/language/lt_LT/install.lang.php
+++ b/language/lt_LT/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/lt_LT/upgrade.lang.php b/language/lt_LT/upgrade.lang.php
index 409323bf5..954833a57 100755
--- a/language/lt_LT/upgrade.lang.php
+++ b/language/lt_LT/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/lv_LV/admin.lang.php b/language/lv_LV/admin.lang.php
index 245c25c4a..43ad9de91 100644
--- a/language/lv_LV/admin.lang.php
+++ b/language/lv_LV/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/lv_LV/common.lang.php b/language/lv_LV/common.lang.php
index 9553d94ae..e8dd8aa9b 100644
--- a/language/lv_LV/common.lang.php
+++ b/language/lv_LV/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/lv_LV/index.php b/language/lv_LV/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/lv_LV/index.php
+++ b/language/lv_LV/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/lv_LV/install.lang.php b/language/lv_LV/install.lang.php
index c09130c6f..bf72b9cf4 100644
--- a/language/lv_LV/install.lang.php
+++ b/language/lv_LV/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/lv_LV/upgrade.lang.php b/language/lv_LV/upgrade.lang.php
index 0bbd2538f..79cfe5642 100644
--- a/language/lv_LV/upgrade.lang.php
+++ b/language/lv_LV/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/mk_MK/admin.lang.php b/language/mk_MK/admin.lang.php
index 2650bb1a6..696ad10e5 100644
--- a/language/mk_MK/admin.lang.php
+++ b/language/mk_MK/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/mk_MK/common.lang.php b/language/mk_MK/common.lang.php
index 15a9153b4..e87c6915a 100644
--- a/language/mk_MK/common.lang.php
+++ b/language/mk_MK/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/mk_MK/index.php b/language/mk_MK/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/mk_MK/index.php
+++ b/language/mk_MK/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/mk_MK/install.lang.php b/language/mk_MK/install.lang.php
index fa4a1f258..1bea63738 100755
--- a/language/mk_MK/install.lang.php
+++ b/language/mk_MK/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/mn_MN/admin.lang.php b/language/mn_MN/admin.lang.php
index 3a7cdcf90..0782ce5f4 100755
--- a/language/mn_MN/admin.lang.php
+++ b/language/mn_MN/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/mn_MN/common.lang.php b/language/mn_MN/common.lang.php
index c30e81f82..eaa346707 100644
--- a/language/mn_MN/common.lang.php
+++ b/language/mn_MN/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/mn_MN/install.lang.php b/language/mn_MN/install.lang.php
index 27530ece2..7ae8195b2 100755
--- a/language/mn_MN/install.lang.php
+++ b/language/mn_MN/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/mn_MN/upgrade.lang.php b/language/mn_MN/upgrade.lang.php
index eb3f3ca8f..e4a1a1758 100755
--- a/language/mn_MN/upgrade.lang.php
+++ b/language/mn_MN/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ms_MY/common.lang.php b/language/ms_MY/common.lang.php
index ccaaad64b..c3e58966e 100644
--- a/language/ms_MY/common.lang.php
+++ b/language/ms_MY/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nb_NO/admin.lang.php b/language/nb_NO/admin.lang.php
index 4d8b0dcb0..20539d092 100644
--- a/language/nb_NO/admin.lang.php
+++ b/language/nb_NO/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nb_NO/common.lang.php b/language/nb_NO/common.lang.php
index db1ccf27b..b5ca560ea 100644
--- a/language/nb_NO/common.lang.php
+++ b/language/nb_NO/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nb_NO/index.php b/language/nb_NO/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/nb_NO/index.php
+++ b/language/nb_NO/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nb_NO/install.lang.php b/language/nb_NO/install.lang.php
index 7ad571966..6d50f9def 100644
--- a/language/nb_NO/install.lang.php
+++ b/language/nb_NO/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nb_NO/upgrade.lang.php b/language/nb_NO/upgrade.lang.php
index 7d053af93..85da5ca98 100644
--- a/language/nb_NO/upgrade.lang.php
+++ b/language/nb_NO/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nl_NL/admin.lang.php b/language/nl_NL/admin.lang.php
index 722228ad2..8f88c8e77 100644
--- a/language/nl_NL/admin.lang.php
+++ b/language/nl_NL/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nl_NL/common.lang.php b/language/nl_NL/common.lang.php
index d650a464c..ba8ebe8a3 100644
--- a/language/nl_NL/common.lang.php
+++ b/language/nl_NL/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nl_NL/help/index.php b/language/nl_NL/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/nl_NL/help/index.php
+++ b/language/nl_NL/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nl_NL/index.php b/language/nl_NL/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/nl_NL/index.php
+++ b/language/nl_NL/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nl_NL/install.lang.php b/language/nl_NL/install.lang.php
index 4aa1f74cf..8228d617d 100644
--- a/language/nl_NL/install.lang.php
+++ b/language/nl_NL/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nl_NL/upgrade.lang.php b/language/nl_NL/upgrade.lang.php
index 4bde42f4e..2336ebf72 100644
--- a/language/nl_NL/upgrade.lang.php
+++ b/language/nl_NL/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nn_NO/admin.lang.php b/language/nn_NO/admin.lang.php
index e174de21d..b5b39f0b3 100755
--- a/language/nn_NO/admin.lang.php
+++ b/language/nn_NO/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nn_NO/common.lang.php b/language/nn_NO/common.lang.php
index 15faeac1d..0e89045fc 100644
--- a/language/nn_NO/common.lang.php
+++ b/language/nn_NO/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nn_NO/install.lang.php b/language/nn_NO/install.lang.php
index b1cb221b5..9dac0ab64 100755
--- a/language/nn_NO/install.lang.php
+++ b/language/nn_NO/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/nn_NO/upgrade.lang.php b/language/nn_NO/upgrade.lang.php
index 830b779b2..836e09e17 100755
--- a/language/nn_NO/upgrade.lang.php
+++ b/language/nn_NO/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pl_PL/admin.lang.php b/language/pl_PL/admin.lang.php
index 2f01fe98e..f3aa8b68e 100644
--- a/language/pl_PL/admin.lang.php
+++ b/language/pl_PL/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pl_PL/common.lang.php b/language/pl_PL/common.lang.php
index c12385738..dea124331 100644
--- a/language/pl_PL/common.lang.php
+++ b/language/pl_PL/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pl_PL/index.php b/language/pl_PL/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/pl_PL/index.php
+++ b/language/pl_PL/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pl_PL/install.lang.php b/language/pl_PL/install.lang.php
index 76600de7c..7a9c65a73 100644
--- a/language/pl_PL/install.lang.php
+++ b/language/pl_PL/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pl_PL/upgrade.lang.php b/language/pl_PL/upgrade.lang.php
index 68266111e..00c7fecc6 100644
--- a/language/pl_PL/upgrade.lang.php
+++ b/language/pl_PL/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pt_BR/admin.lang.php b/language/pt_BR/admin.lang.php
index 65506ab0c..ee6714422 100644
--- a/language/pt_BR/admin.lang.php
+++ b/language/pt_BR/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pt_BR/common.lang.php b/language/pt_BR/common.lang.php
index 11a849926..ea22c4362 100644
--- a/language/pt_BR/common.lang.php
+++ b/language/pt_BR/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pt_BR/index.php b/language/pt_BR/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/pt_BR/index.php
+++ b/language/pt_BR/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pt_BR/install.lang.php b/language/pt_BR/install.lang.php
index b3e226dbd..336d27ae4 100644
--- a/language/pt_BR/install.lang.php
+++ b/language/pt_BR/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pt_BR/upgrade.lang.php b/language/pt_BR/upgrade.lang.php
index 26e9fe8b7..e73b30a5e 100644
--- a/language/pt_BR/upgrade.lang.php
+++ b/language/pt_BR/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pt_PT/admin.lang.php b/language/pt_PT/admin.lang.php
index 749ec354c..0dd5e3402 100644
--- a/language/pt_PT/admin.lang.php
+++ b/language/pt_PT/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pt_PT/common.lang.php b/language/pt_PT/common.lang.php
index 3d6f3b84e..90715355a 100644
--- a/language/pt_PT/common.lang.php
+++ b/language/pt_PT/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pt_PT/index.php b/language/pt_PT/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/pt_PT/index.php
+++ b/language/pt_PT/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pt_PT/install.lang.php b/language/pt_PT/install.lang.php
index c6b90b4f6..89ab8edf5 100644
--- a/language/pt_PT/install.lang.php
+++ b/language/pt_PT/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/pt_PT/upgrade.lang.php b/language/pt_PT/upgrade.lang.php
index b37028d33..b2f804eed 100644
--- a/language/pt_PT/upgrade.lang.php
+++ b/language/pt_PT/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ro_RO/admin.lang.php b/language/ro_RO/admin.lang.php
index 6da30950f..60953e7fd 100644
--- a/language/ro_RO/admin.lang.php
+++ b/language/ro_RO/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ro_RO/common.lang.php b/language/ro_RO/common.lang.php
index 961358178..4d88f2c4c 100644
--- a/language/ro_RO/common.lang.php
+++ b/language/ro_RO/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ro_RO/index.php b/language/ro_RO/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/ro_RO/index.php
+++ b/language/ro_RO/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ro_RO/install.lang.php b/language/ro_RO/install.lang.php
index 0379d8ce5..3cca38a0e 100755
--- a/language/ro_RO/install.lang.php
+++ b/language/ro_RO/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ro_RO/upgrade.lang.php b/language/ro_RO/upgrade.lang.php
index de0c4a75b..713096f2a 100755
--- a/language/ro_RO/upgrade.lang.php
+++ b/language/ro_RO/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ru_RU/admin.lang.php b/language/ru_RU/admin.lang.php
index 05146c136..daf1c4c1c 100644
--- a/language/ru_RU/admin.lang.php
+++ b/language/ru_RU/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ru_RU/common.lang.php b/language/ru_RU/common.lang.php
index 461ff4aaf..09ba608e8 100644
--- a/language/ru_RU/common.lang.php
+++ b/language/ru_RU/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ru_RU/index.php b/language/ru_RU/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/ru_RU/index.php
+++ b/language/ru_RU/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ru_RU/install.lang.php b/language/ru_RU/install.lang.php
index 5229abba1..463578455 100644
--- a/language/ru_RU/install.lang.php
+++ b/language/ru_RU/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ru_RU/upgrade.lang.php b/language/ru_RU/upgrade.lang.php
index 2f8eeff9e..aa06e88c2 100644
--- a/language/ru_RU/upgrade.lang.php
+++ b/language/ru_RU/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sh_RS/admin.lang.php b/language/sh_RS/admin.lang.php
index ad18ecfc4..2d9e8dbfa 100644
--- a/language/sh_RS/admin.lang.php
+++ b/language/sh_RS/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sh_RS/common.lang.php b/language/sh_RS/common.lang.php
index d963f6e55..06251a901 100644
--- a/language/sh_RS/common.lang.php
+++ b/language/sh_RS/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sh_RS/help/index.php b/language/sh_RS/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/sh_RS/help/index.php
+++ b/language/sh_RS/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sh_RS/index.php b/language/sh_RS/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/sh_RS/index.php
+++ b/language/sh_RS/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sh_RS/install.lang.php b/language/sh_RS/install.lang.php
index 7b984484c..25fde72ee 100644
--- a/language/sh_RS/install.lang.php
+++ b/language/sh_RS/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sh_RS/upgrade.lang.php b/language/sh_RS/upgrade.lang.php
index 4719b8036..cda9ee2fb 100644
--- a/language/sh_RS/upgrade.lang.php
+++ b/language/sh_RS/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sk_SK/admin.lang.php b/language/sk_SK/admin.lang.php
index 112fa5996..75a11a7a0 100644
--- a/language/sk_SK/admin.lang.php
+++ b/language/sk_SK/admin.lang.php
@@ -5,7 +5,7 @@
// +-----------------------------------------------------------------------+
// | Copyright(C) 2009 Pavel Budka & Petr Jirsa http://pbudka.co.cc |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sk_SK/common.lang.php b/language/sk_SK/common.lang.php
index 2d42f9753..be0e0d07b 100644
--- a/language/sk_SK/common.lang.php
+++ b/language/sk_SK/common.lang.php
@@ -5,7 +5,7 @@
// +-----------------------------------------------------------------------+
// | Copyright(C) 2009 Pavel Budka & Petr Jirsa http://pbudka.co.cc |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sk_SK/help/index.php b/language/sk_SK/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/sk_SK/help/index.php
+++ b/language/sk_SK/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sk_SK/index.php b/language/sk_SK/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/sk_SK/index.php
+++ b/language/sk_SK/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sk_SK/install.lang.php b/language/sk_SK/install.lang.php
index a85861b0c..ae00e0ed0 100644
--- a/language/sk_SK/install.lang.php
+++ b/language/sk_SK/install.lang.php
@@ -5,7 +5,7 @@
// +-----------------------------------------------------------------------+
// | Copyright(C) 2009 Pavel Budka & Petr Jirsa http://pbudka.co.cc |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sk_SK/upgrade.lang.php b/language/sk_SK/upgrade.lang.php
index 21f2122ff..815883bab 100644
--- a/language/sk_SK/upgrade.lang.php
+++ b/language/sk_SK/upgrade.lang.php
@@ -5,7 +5,7 @@
// +-----------------------------------------------------------------------+
// | Copyright(C) 2009 Pavel Budka & Petr Jirsa http://pbudka.co.cc |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sl_SI/admin.lang.php b/language/sl_SI/admin.lang.php
index 993982961..c888b6c80 100644
--- a/language/sl_SI/admin.lang.php
+++ b/language/sl_SI/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sl_SI/common.lang.php b/language/sl_SI/common.lang.php
index ccb1931f0..31b00aca6 100644
--- a/language/sl_SI/common.lang.php
+++ b/language/sl_SI/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sl_SI/install.lang.php b/language/sl_SI/install.lang.php
index 9e87007c7..f5e9ff49a 100755
--- a/language/sl_SI/install.lang.php
+++ b/language/sl_SI/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sl_SI/upgrade.lang.php b/language/sl_SI/upgrade.lang.php
index ea763c109..e226bad39 100755
--- a/language/sl_SI/upgrade.lang.php
+++ b/language/sl_SI/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sr_RS/admin.lang.php b/language/sr_RS/admin.lang.php
index 9166a5f59..3753fd7de 100644
--- a/language/sr_RS/admin.lang.php
+++ b/language/sr_RS/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sr_RS/common.lang.php b/language/sr_RS/common.lang.php
index d57c23152..99b5fae7d 100644
--- a/language/sr_RS/common.lang.php
+++ b/language/sr_RS/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sr_RS/index.php b/language/sr_RS/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/sr_RS/index.php
+++ b/language/sr_RS/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sr_RS/install.lang.php b/language/sr_RS/install.lang.php
index c1d6d2ca2..3f4750fb2 100644
--- a/language/sr_RS/install.lang.php
+++ b/language/sr_RS/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sr_RS/upgrade.lang.php b/language/sr_RS/upgrade.lang.php
index b3336cd9b..b9ed6d7ed 100644
--- a/language/sr_RS/upgrade.lang.php
+++ b/language/sr_RS/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sv_SE/admin.lang.php b/language/sv_SE/admin.lang.php
index 0f43a4ba8..d85945a82 100644
--- a/language/sv_SE/admin.lang.php
+++ b/language/sv_SE/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sv_SE/common.lang.php b/language/sv_SE/common.lang.php
index fdb82c416..bdbbe8e97 100644
--- a/language/sv_SE/common.lang.php
+++ b/language/sv_SE/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sv_SE/help/index.php b/language/sv_SE/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/sv_SE/help/index.php
+++ b/language/sv_SE/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sv_SE/install.lang.php b/language/sv_SE/install.lang.php
index bf08040aa..9013244a4 100644
--- a/language/sv_SE/install.lang.php
+++ b/language/sv_SE/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/sv_SE/upgrade.lang.php b/language/sv_SE/upgrade.lang.php
index 0d698dd30..90e709504 100644
--- a/language/sv_SE/upgrade.lang.php
+++ b/language/sv_SE/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ta_IN/admin.lang.php b/language/ta_IN/admin.lang.php
index 40546dd2c..cb7ad317c 100755
--- a/language/ta_IN/admin.lang.php
+++ b/language/ta_IN/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ta_IN/common.lang.php b/language/ta_IN/common.lang.php
index ca3d4c094..effdb9a86 100644
--- a/language/ta_IN/common.lang.php
+++ b/language/ta_IN/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ta_IN/install.lang.php b/language/ta_IN/install.lang.php
index a11ea32b5..286cb0b2d 100755
--- a/language/ta_IN/install.lang.php
+++ b/language/ta_IN/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/ta_IN/upgrade.lang.php b/language/ta_IN/upgrade.lang.php
index 3b3f84402..15de809a0 100755
--- a/language/ta_IN/upgrade.lang.php
+++ b/language/ta_IN/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/th_TH/admin.lang.php b/language/th_TH/admin.lang.php
index 8586a3705..e3b31c977 100644
--- a/language/th_TH/admin.lang.php
+++ b/language/th_TH/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/th_TH/common.lang.php b/language/th_TH/common.lang.php
index 1cb9f12d5..1c70d6ebe 100644
--- a/language/th_TH/common.lang.php
+++ b/language/th_TH/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/th_TH/install.lang.php b/language/th_TH/install.lang.php
index 07e016cb4..f9fc8686c 100644
--- a/language/th_TH/install.lang.php
+++ b/language/th_TH/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/th_TH/upgrade.lang.php b/language/th_TH/upgrade.lang.php
index d7c538d65..31743e616 100644
--- a/language/th_TH/upgrade.lang.php
+++ b/language/th_TH/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/tr_TR/admin.lang.php b/language/tr_TR/admin.lang.php
index f13af7c93..a62575d05 100644
--- a/language/tr_TR/admin.lang.php
+++ b/language/tr_TR/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/tr_TR/common.lang.php b/language/tr_TR/common.lang.php
index aaf6d13c3..8dbcfd4ae 100644
--- a/language/tr_TR/common.lang.php
+++ b/language/tr_TR/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/tr_TR/install.lang.php b/language/tr_TR/install.lang.php
index 48e909f71..d6b78fd89 100644
--- a/language/tr_TR/install.lang.php
+++ b/language/tr_TR/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/tr_TR/upgrade.lang.php b/language/tr_TR/upgrade.lang.php
index d570610f1..5a8f4580d 100644
--- a/language/tr_TR/upgrade.lang.php
+++ b/language/tr_TR/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/uk_UA/admin.lang.php b/language/uk_UA/admin.lang.php
index 419ca845e..8a363f0c5 100644
--- a/language/uk_UA/admin.lang.php
+++ b/language/uk_UA/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/uk_UA/common.lang.php b/language/uk_UA/common.lang.php
index 0e6107364..3cc10de05 100644
--- a/language/uk_UA/common.lang.php
+++ b/language/uk_UA/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/uk_UA/install.lang.php b/language/uk_UA/install.lang.php
index 76de01ccf..3e3b58ed4 100644
--- a/language/uk_UA/install.lang.php
+++ b/language/uk_UA/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/uk_UA/upgrade.lang.php b/language/uk_UA/upgrade.lang.php
index e9583601a..21094b5d5 100644
--- a/language/uk_UA/upgrade.lang.php
+++ b/language/uk_UA/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/vi_VN/admin.lang.php b/language/vi_VN/admin.lang.php
index 6551e68cf..316f6dc9c 100644
--- a/language/vi_VN/admin.lang.php
+++ b/language/vi_VN/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/vi_VN/common.lang.php b/language/vi_VN/common.lang.php
index 0dd11e2c5..b3aa1396c 100644
--- a/language/vi_VN/common.lang.php
+++ b/language/vi_VN/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/vi_VN/help/index.php b/language/vi_VN/help/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/vi_VN/help/index.php
+++ b/language/vi_VN/help/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/vi_VN/install.lang.php b/language/vi_VN/install.lang.php
index d5459f6e8..cda76ce96 100644
--- a/language/vi_VN/install.lang.php
+++ b/language/vi_VN/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/vi_VN/upgrade.lang.php b/language/vi_VN/upgrade.lang.php
index 7cc0fcae2..9bdde8c3b 100644
--- a/language/vi_VN/upgrade.lang.php
+++ b/language/vi_VN/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/wo_SN/common.lang.php b/language/wo_SN/common.lang.php
index 766318de0..2da46e8da 100644
--- a/language/wo_SN/common.lang.php
+++ b/language/wo_SN/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/zh_CN/admin.lang.php b/language/zh_CN/admin.lang.php
index 849242824..347c48a49 100644
--- a/language/zh_CN/admin.lang.php
+++ b/language/zh_CN/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/zh_CN/common.lang.php b/language/zh_CN/common.lang.php
index b7f58cc47..a9b71e6f9 100644
--- a/language/zh_CN/common.lang.php
+++ b/language/zh_CN/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/zh_CN/install.lang.php b/language/zh_CN/install.lang.php
index 5a31716ab..6a4eec42c 100644
--- a/language/zh_CN/install.lang.php
+++ b/language/zh_CN/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/zh_CN/upgrade.lang.php b/language/zh_CN/upgrade.lang.php
index 05f08826d..d88dec98d 100644
--- a/language/zh_CN/upgrade.lang.php
+++ b/language/zh_CN/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/zh_HK/admin.lang.php b/language/zh_HK/admin.lang.php
index 0ef8ce8a8..52a2092cb 100755
--- a/language/zh_HK/admin.lang.php
+++ b/language/zh_HK/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/zh_HK/common.lang.php b/language/zh_HK/common.lang.php
index b126eaebb..e84dfd4c5 100644
--- a/language/zh_HK/common.lang.php
+++ b/language/zh_HK/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/zh_HK/index.php b/language/zh_HK/index.php
index c8de97f60..0b96c3efa 100644
--- a/language/zh_HK/index.php
+++ b/language/zh_HK/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/zh_HK/install.lang.php b/language/zh_HK/install.lang.php
index 4abf704ce..c51fbef5c 100755
--- a/language/zh_HK/install.lang.php
+++ b/language/zh_HK/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/zh_HK/upgrade.lang.php b/language/zh_HK/upgrade.lang.php
index 3306f6635..95563c9d6 100755
--- a/language/zh_HK/upgrade.lang.php
+++ b/language/zh_HK/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/zh_TW/admin.lang.php b/language/zh_TW/admin.lang.php
index 140d15b8b..c1a338ff8 100644
--- a/language/zh_TW/admin.lang.php
+++ b/language/zh_TW/admin.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/zh_TW/common.lang.php b/language/zh_TW/common.lang.php
index b7cb9badf..87e4e38ea 100644
--- a/language/zh_TW/common.lang.php
+++ b/language/zh_TW/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/zh_TW/install.lang.php b/language/zh_TW/install.lang.php
index 830905ac7..b0095ac68 100644
--- a/language/zh_TW/install.lang.php
+++ b/language/zh_TW/install.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/language/zh_TW/upgrade.lang.php b/language/zh_TW/upgrade.lang.php
index 883b7f62c..dd6c07ee0 100644
--- a/language/zh_TW/upgrade.lang.php
+++ b/language/zh_TW/upgrade.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/local/config/index.php b/local/config/index.php
index c8de97f60..0b96c3efa 100644
--- a/local/config/index.php
+++ b/local/config/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/local/css/index.php b/local/css/index.php
index c8de97f60..0b96c3efa 100644
--- a/local/css/index.php
+++ b/local/css/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/local/index.php b/local/index.php
index c8de97f60..0b96c3efa 100644
--- a/local/index.php
+++ b/local/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/local/language/index.php b/local/language/index.php
index c8de97f60..0b96c3efa 100644
--- a/local/language/index.php
+++ b/local/language/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/nbm.php b/nbm.php
index e76c3416f..e36b95508 100644
--- a/nbm.php
+++ b/nbm.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/notification.php b/notification.php
index 192348a56..ffd52b895 100644
--- a/notification.php
+++ b/notification.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/password.php b/password.php
index 5bc94c0cb..4e03079a7 100644
--- a/password.php
+++ b/password.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/picture.php b/picture.php
index 94c2b3ea3..db58c12e7 100644
--- a/picture.php
+++ b/picture.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -662,6 +662,46 @@ foreach (array('first','previous','next','last', 'current') as $which_image)
if ($conf['picture_download_icon'] and !empty($picture['current']['download_url']))
{
$template->append('current', array('U_DOWNLOAD' => $picture['current']['download_url']), true);
+
+ if ($conf['enable_formats'])
+ {
+ $query = '
+SELECT *
+ FROM '.IMAGE_FORMAT_TABLE.'
+ WHERE image_id = '.$picture['current']['id'].'
+;';
+ $formats = query2array($query);
+
+ // let's add the original as a format among others. It will just have a
+ // specific download URL
+ array_unshift(
+ $formats,
+ array(
+ 'download_url' => $picture['current']['download_url'],
+ 'ext' => get_extension($picture['current']['file']),
+ 'filesize' => $picture['current']['filesize'],
+ )
+ );
+
+ foreach ($formats as &$format)
+ {
+ if (!isset($format['download_url']))
+ {
+ $format['download_url'] = 'action.php?format='.$format['format_id'].'&amp;download';
+ }
+
+ $format['label'] = strtoupper($format['ext']);
+ $lang_key = 'format '.strtoupper($format['ext']);
+ if (isset($lang[$lang_key]))
+ {
+ $format['label'] = $lang[$lang_key];
+ }
+
+ $format['filesize'] = sprintf('%.1fMB', $format['filesize']/1024);
+ }
+
+ $template->append('current', array('formats' => $formats), true);
+ }
}
diff --git a/plugins/AdminTools/admin.php b/plugins/AdminTools/admin.php
deleted file mode 100644
index ecd52115d..000000000
--- a/plugins/AdminTools/admin.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-defined('ADMINTOOLS_PATH') or die('Hacking attempt!');
-
-if (isset($_POST['save_config']))
-{
- $conf['AdminTools'] = array(
- 'default_open' => isset($_POST['default_open']),
- 'closed_position' => $_POST['closed_position'],
- 'public_quick_edit' => isset($_POST['public_quick_edit']),
- );
-
- conf_update_param('AdminTools', $conf['AdminTools']);
- $page['infos'][] = l10n('Information data registered in database');
-}
-
-
-$template->assign(array(
- 'AdminTools' => $conf['AdminTools'],
- ));
-
-
-$template->set_filename('admintools_content', realpath(ADMINTOOLS_PATH . 'template/admin.tpl'));
-$template->assign_var_from_handle('ADMIN_CONTENT', 'admintools_content');
diff --git a/plugins/AdminTools/include/MultiView.class.php b/plugins/AdminTools/include/MultiView.class.php
deleted file mode 100644
index 56240b811..000000000
--- a/plugins/AdminTools/include/MultiView.class.php
+++ /dev/null
@@ -1,338 +0,0 @@
-<?php
-defined('ADMINTOOLS_PATH') or die('Hacking attempt!');
-
-/**
- * Class managing multi views system
- */
-class MultiView
-{
- /** @var bool $is_admin */
- private $is_admin = false;
-
- /** @var array $data */
- private $data = array();
- private $data_url_params = array();
-
- /** @var array $user */
- private $user = array();
-
- /**
- * Constructor, load $data from session
- */
- function __construct()
- {
- global $conf;
-
- $this->data = array_merge(
- array(
- 'view_as' => 0,
- 'theme' => '',
- 'lang' => '',
- 'show_queries' => $conf['show_queries'],
- 'debug_l10n' => $conf['debug_l10n'],
- 'debug_template' => $conf['debug_template'],
- 'template_combine_files' => $conf['template_combine_files'],
- 'no_history' => false,
- ),
- pwg_get_session_var('multiview', array())
- );
-
- $this->data_url_params = array_keys($this->data);
- $this->data_url_params = array_map(create_function('$d', 'return "ato_".$d;'), $this->data_url_params);
- }
-
- /**
- * @return bool
- */
- public function is_admin()
- {
- return $this->is_admin;
- }
-
- /**
- * @return array
- */
- public function get_data()
- {
- return $this->data;
- }
-
- /**
- * @return array
- */
- public function get_user()
- {
- return $this->user;
- }
-
- /**
- * Save $data in session
- */
- private function save()
- {
- pwg_set_session_var('multiview', $this->data);
- }
-
- /**
- * Returns the current url minus MultiView params
- *
- * @param bool $with_amp - adds ? or & at the end of the url
- * @return string
- */
- public function get_clean_url($with_amp=false)
- {
- if (script_basename() == 'picture')
- {
- $url = duplicate_picture_url(array(), $this->data_url_params);
- }
- else if (script_basename() == 'index')
- {
- $url = duplicate_index_url(array(), $this->data_url_params);
- }
- else
- {
- $url = get_query_string_diff($this->data_url_params);
- }
-
- if ($with_amp)
- {
- $url.= strpos($url, '?')!==false ? '&' : '?';
- }
-
- return $url;
- }
-
- /**
- * Returns the current url minus MultiView params
- *
- * @param bool $with_amp - adds ? or & at the end of the url
- * @return string
- */
- public function get_clean_admin_url($with_amp=false)
- {
- $url = PHPWG_ROOT_PATH.'admin.php';
-
- $get = $_GET;
- unset($get['page'], $get['section'], $get['tag']);
- if (count($get) == 0 and !empty($_SERVER['QUERY_STRING']))
- {
- $url.= '?' . str_replace('&', '&amp;', $_SERVER['QUERY_STRING']);
- }
-
- if ($with_amp)
- {
- $url.= strpos($url, '?')!==false ? '&' : '?';
- }
-
- return $url;
- }
-
- /**
- * Triggered on "user_init", change current view depending of URL params.
- */
- public function user_init()
- {
- global $user, $conf;
-
- $this->is_admin = is_admin();
-
- $this->user = array(
- 'id' => $user['id'],
- 'username' => $user['username'],
- 'language' => $user['language'],
- 'theme' => $user['theme'],
- );
-
- // inactive on ws.php to allow AJAX admin tasks
- if ($this->is_admin && script_basename() != 'ws')
- {
- // show_queries
- if (isset($_GET['ato_show_queries']))
- {
- $this->data['show_queries'] = (bool)$_GET['ato_show_queries'];
- }
- $conf['show_queries'] = $this->data['show_queries'];
-
- if ($this->data['view_as'] == 0)
- {
- $this->data['view_as'] = $user['id'];
- }
- if (empty($this->data['lang']))
- {
- $this->data['lang'] = $user['language'];
- }
- if (empty($this->data['theme']))
- {
- $this->data['theme'] = $user['theme'];
- }
-
- // view_as
- if (!defined('IN_ADMIN'))
- {
- if (isset($_GET['ato_view_as']))
- {
- $this->data['view_as'] = (int)$_GET['ato_view_as'];
- }
- if ($this->data['view_as'] != $user['id'])
- {
- $user = build_user($this->data['view_as'], true);
- if (isset($_GET['ato_view_as']))
- {
- $this->data['theme'] = $user['theme'];
- $this->data['lang'] = $user['language'];
- }
- }
- }
-
- // theme
- if (isset($_GET['ato_theme']))
- {
- $this->data['theme'] = $_GET['ato_theme'];
- }
- $user['theme'] = $this->data['theme'];
-
- // lang
- if (isset($_GET['ato_lang']))
- {
- $this->data['lang'] = $_GET['ato_lang'];
- }
- $user['language'] = $this->data['lang'];
-
- // debug_l10n
- if (isset($_GET['ato_debug_l10n']))
- {
- $this->data['debug_l10n'] = (bool)$_GET['ato_debug_l10n'];
- }
- $conf['debug_l10n'] = $this->data['debug_l10n'];
-
- // debug_template
- if (isset($_GET['ato_debug_template']))
- {
- $this->data['debug_template'] = (bool)$_GET['ato_debug_template'];
- }
- $conf['debug_template'] = $this->data['debug_template'];
-
- // template_combine_files
- if (isset($_GET['ato_template_combine_files']))
- {
- $this->data['template_combine_files'] = (bool)$_GET['ato_template_combine_files'];
- }
- $conf['template_combine_files'] = $this->data['template_combine_files'];
-
- // no_history
- if (isset($_GET['ato_no_history']))
- {
- $this->data['no_history'] = (bool)$_GET['ato_no_history'];
- }
- if ($this->data['no_history'])
- {
- add_event_handler('pwg_log_allowed', create_function('', 'return false;'));
- }
-
- $this->save();
- }
- }
-
- /**
- * Returns the language of the current user if different from the current language
- * false otherwise
- */
- function get_user_language()
- {
- if (isset($this->user['language']) && isset($this->data['lang'])
- && $this->user['language'] != $this->data['lang']
- )
- {
- return $this->user['language'];
- }
- return false;
- }
-
- /**
- * Triggered on "init", in order to clean template files (not initialized on "user_init")
- */
- public function init()
- {
- if ($this->is_admin)
- {
- if (isset($_GET['ato_purge_template']))
- {
- global $template;
- $template->delete_compiled_templates();
- FileCombiner::clear_combined_files();
- }
- }
- }
-
- /**
- * Mark browser session cache for deletion
- */
- public static function invalidate_cache()
- {
- global $conf;
- conf_update_param('multiview_invalidate_cache', true, true);
- }
-
- /**
- * Register custom API methods
- */
- public static function register_ws($arr)
- {
- $service = &$arr[0];
-
- $service->addMethod(
- 'multiView.getData',
- array('MultiView', 'ws_get_data'),
- array(),
- 'AdminTools private method.',
- null,
- array('admin_only' => true, 'hidden' => true)
- );
- }
-
- /**
- * API method
- * Return full list of users, themes and languages
- */
- public static function ws_get_data($params)
- {
- global $conf;
-
- // get users
- $query = '
-SELECT
- '.$conf['user_fields']['id'].' AS id,
- '.$conf['user_fields']['username'].' AS username,
- status
-FROM '.USERS_TABLE.' AS u
- INNER JOIN '.USER_INFOS_TABLE.' AS i
- ON '.$conf['user_fields']['id'].' = user_id
- ORDER BY CONVERT('.$conf['user_fields']['username'].', CHAR)
-;';
- $out['users'] = array_from_query($query);
-
- // get themes
- include_once(PHPWG_ROOT_PATH.'admin/include/themes.class.php');
- $themes = new themes();
- foreach (array_keys($themes->db_themes_by_id) as $theme)
- {
- if (!empty($theme))
- {
- $out['themes'][] = $theme;
- }
- }
-
- // get languages
- foreach (get_languages() as $code => $name)
- {
- $out['languages'][] = array(
- 'id' => $code,
- 'name' => $name,
- );
- }
-
- conf_delete_param('multiview_invalidate_cache');
-
- return $out;
- }
-} \ No newline at end of file
diff --git a/plugins/AdminTools/include/events.inc.php b/plugins/AdminTools/include/events.inc.php
deleted file mode 100644
index d11d59ba7..000000000
--- a/plugins/AdminTools/include/events.inc.php
+++ /dev/null
@@ -1,360 +0,0 @@
-<?php
-defined('ADMINTOOLS_PATH') or die('Hacking attempt!');
-
-/**
- * Add main toolbar to current page
- * @trigger loc_after_page_header
- */
-function admintools_add_public_controller()
-{
- global $MultiView, $conf, $template, $page, $user, $picture;
-
- if (script_basename() == 'picture' and empty($picture['current']))
- {
- return;
- }
-
- $url_root = get_root_url();
- $tpl_vars = array();
-
- if ($MultiView->is_admin())
- { // full options for admin
- $tpl_vars['U_SITE_ADMIN'] = $url_root . 'admin.php?page=';
- $tpl_vars['MULTIVIEW'] = $MultiView->get_data();
- $tpl_vars['USER'] = $MultiView->get_user();
- $tpl_vars['CURRENT_USERNAME'] = $user['id']==$conf['guest_id'] ? l10n('guest') : $user['username'];
- $tpl_vars['DELETE_CACHE'] = isset($conf['multiview_invalidate_cache']);
-
- if (($admin_lang = $MultiView->get_user_language()) !== false)
- {
- include_once(PHPWG_ROOT_PATH . 'include/functions_mail.inc.php');
- switch_lang_to($admin_lang);
- }
- }
- else if ($conf['AdminTools']['public_quick_edit'] and
- script_basename() == 'picture' and $picture['current']['added_by'] == $user['id']
- )
- { // only "edit" button for photo owner
- }
- else
- {
- return;
- }
-
- $tpl_vars['POSITION'] = $conf['AdminTools']['closed_position'];
- $tpl_vars['DEFAULT_OPEN'] = $conf['AdminTools']['default_open'];
- $tpl_vars['U_SELF'] = $MultiView->get_clean_url(true);
-
- // photo page
- if (script_basename() == 'picture')
- {
- $url_self = duplicate_picture_url();
- $tpl_vars['IS_PICTURE'] = true;
-
- // admin can add to caddie and set representattive
- if ($MultiView->is_admin())
- {
- $template->clear_assign(array(
- 'U_SET_AS_REPRESENTATIVE',
- 'U_PHOTO_ADMIN',
- 'U_CADDIE',
- ));
-
- $template->set_prefilter('picture', 'admintools_remove_privacy');
-
- $tpl_vars['U_CADDIE'] = add_url_params(
- $url_self,
- array('action'=>'add_to_caddie')
- );
-
- $query = '
-SELECT element_id FROM ' . CADDIE_TABLE . '
- WHERE element_id = ' . $page['image_id'] .'
-;';
- $tpl_vars['IS_IN_CADDIE'] = pwg_db_num_rows(pwg_query($query)) > 0;
-
- if (isset($page['category']))
- {
- $tpl_vars['CATEGORY_ID'] = $page['category']['id'];
-
- $tpl_vars['U_SET_REPRESENTATIVE'] = add_url_params(
- $url_self,
- array('action'=>'set_as_representative')
- );
-
- $tpl_vars['IS_REPRESENTATIVE'] = $page['category']['representative_picture_id'] == $page['image_id'];
- }
-
- $tpl_vars['U_ADMIN_EDIT'] = $url_root . 'admin.php?page=photo-' . $page['image_id']
- .(isset($page['category']) ? '&amp;cat_id=' . $page['category']['id'] : '');
- }
-
- $tpl_vars['U_DELETE'] = add_url_params(
- $url_self, array(
- 'delete'=>'',
- 'pwg_token'=>get_pwg_token()
- )
- );
-
- // gets tags (full available list is loaded in ajax)
- include_once(PHPWG_ROOT_PATH . 'admin/include/functions.php');
-
- $query = '
-SELECT id, name
- FROM '.IMAGE_TAG_TABLE.' AS it
- JOIN '.TAGS_TABLE.' AS t ON t.id = it.tag_id
- WHERE image_id = '.$page['image_id'].'
-;';
- $tag_selection = get_taglist($query);
-
- $tpl_vars['QUICK_EDIT'] = array(
- 'img' => $picture['current']['derivatives']['square']->get_url(),
- 'name' => $picture['current']['name'],
- 'comment' => $picture['current']['comment'],
- 'author' => $picture['current']['author'],
- 'level' => $picture['current']['level'],
- 'date_creation' => substr($picture['current']['date_creation'], 0, 10),
- 'date_creation_time' => substr($picture['current']['date_creation'], 11, 5),
- 'tag_selection' => $tag_selection,
- );
- }
- // album page (admin only)
- else if ($MultiView->is_admin() and @$page['section'] == 'categories' and isset($page['category']))
- {
- $url_self = duplicate_index_url();
-
- $tpl_vars['IS_CATEGORY'] = true;
- $tpl_vars['CATEGORY_ID'] = $page['category']['id'];
-
- $template->clear_assign(array(
- 'U_EDIT',
- 'U_CADDIE',
- ));
-
- $tpl_vars['U_ADMIN_EDIT'] = $url_root . 'admin.php?page=album-' . $page['category']['id'];
-
- if (!empty($page['items']))
- {
- $tpl_vars['U_CADDIE'] = add_url_params(
- $url_self,
- array('caddie'=>1)
- );
- }
-
- $tpl_vars['QUICK_EDIT'] = array(
- 'img' => null,
- 'name' => $page['category']['name'],
- 'comment' => $page['category']['comment'],
- );
-
- if (!empty($page['category']['representative_picture_id']))
- {
- $query = '
-SELECT * FROM '.IMAGES_TABLE.'
- WHERE id = '. $page['category']['representative_picture_id'] .'
-;';
- $image_infos = pwg_db_fetch_assoc(pwg_query($query));
-
- $tpl_vars['QUICK_EDIT']['img'] = DerivativeImage::get_one(IMG_SQUARE, $image_infos)->get_url();
- }
- }
-
-
- $template->assign(array(
- 'ADMINTOOLS_PATH' => './plugins/' . ADMINTOOLS_ID .'/',
- 'ato' => $tpl_vars,
- ));
-
- $template->set_filename('ato_public_controller', realpath(ADMINTOOLS_PATH . 'template/public_controller.tpl'));
- $template->parse('ato_public_controller');
-
- if ($MultiView->is_admin() && @$admin_lang !== false)
- {
- switch_lang_back();
- }
-}
-
-/**
- * Add main toolbar to current page
- * @trigger loc_after_page_header
- */
-function admintools_add_admin_controller()
-{
- global $MultiView, $conf, $template, $page, $user;
-
- $url_root = get_root_url();
- $tpl_vars = array();
-
- $tpl_vars['MULTIVIEW'] = $MultiView->get_data();
- $tpl_vars['DELETE_CACHE'] = isset($conf['multiview_invalidate_cache']);
- $tpl_vars['U_SELF'] = $MultiView->get_clean_admin_url(true);
-
- if (($admin_lang = $MultiView->get_user_language()) !== false)
- {
- include_once(PHPWG_ROOT_PATH . 'include/functions_mail.inc.php');
- switch_lang_to($admin_lang);
- }
-
- $template->assign(array(
- 'ADMINTOOLS_PATH' => './plugins/' . ADMINTOOLS_ID .'/',
- 'ato' => $tpl_vars,
- ));
-
- $template->set_filename('ato_admin_controller', realpath(ADMINTOOLS_PATH . 'template/admin_controller.tpl'));
- $template->parse('ato_admin_controller');
-
- if ($MultiView->is_admin() && @$admin_lang !== false)
- {
- switch_lang_back();
- }
-}
-
-function admintools_add_admin_controller_setprefilter()
-{
- global $template;
- $template->set_prefilter('header', 'admintools_admin_prefilter');
-}
-
-function admintools_admin_prefilter($content)
-{
- $search = '<a class="icon-brush tiptip" href="{$U_CHANGE_THEME}" title="{\'Switch to clear or dark colors for administration\'|translate}">{\'Change Admin Colors\'|translate}</a>';
- $replace = '<span id="ato_container"><a class="icon-cog-alt" href="#">{\'Tools\'|translate}</a></span>';
- return str_replace($search, $replace, $content);
-}
-
-/**
- * Disable privacy level switchbox
- */
-function admintools_remove_privacy($content)
-{
- $search = '{if $display_info.privacy_level and isset($available_permission_levels)}';
- $replace = '{if false}';
- return str_replace($search, $replace, $content);
-}
-
-/**
- * Save picture form
- * @trigger loc_begin_picture
- */
-function admintools_save_picture()
-{
- global $page, $conf, $MultiView, $user, $picture;
-
- if (!isset($_GET['delete']) and !isset($_POST['action']) and @$_POST['action'] != 'quick_edit')
- {
- return;
- }
-
- $query = 'SELECT added_by FROM '. IMAGES_TABLE .' WHERE id = '. $page['image_id'] .';';
- list($added_by) = pwg_db_fetch_row(pwg_query($query));
-
- if (!$MultiView->is_admin() and $user['id'] != $added_by)
- {
- return;
- }
-
- if (isset($_GET['delete']) and get_pwg_token()==@$_GET['pwg_token'])
- {
- include_once(PHPWG_ROOT_PATH . 'admin/include/functions.php');
-
- delete_elements(array($page['image_id']), true);
- invalidate_user_cache();
-
- if (isset($page['rank_of'][ $page['image_id'] ]))
- {
- redirect(
- duplicate_index_url(
- array(
- 'start' =>
- floor($page['rank_of'][ $page['image_id'] ] / $page['nb_image_page'])
- * $page['nb_image_page']
- )
- )
- );
- }
- else
- {
- redirect(make_index_url());
- }
- }
-
- if ($_POST['action'] == 'quick_edit')
- {
- include_once(PHPWG_ROOT_PATH . 'admin/include/functions.php');
-
- $data = array(
- 'name' => $_POST['name'],
- 'author' => $_POST['author'],
- );
-
- if ($MultiView->is_admin())
- {
- $data['level'] = $_POST['level'];
- }
-
- if ($conf['allow_html_descriptions'])
- {
- $data['comment'] = @$_POST['comment'];
- }
- else
- {
- $data['comment'] = strip_tags(@$_POST['comment']);
- }
-
- if (!empty($_POST['date_creation']) and strtotime($_POST['date_creation']) !== false)
- {
- $data['date_creation'] = $_POST['date_creation'] .' '. $_POST['date_creation_time'];
- }
-
- single_update(
- IMAGES_TABLE,
- $data,
- array('id' => $page['image_id'])
- );
-
- $tag_ids = array();
- if (!empty($_POST['tags']))
- {
- $tag_ids = get_tag_ids($_POST['tags']);
- }
- set_tags($tag_ids, $page['image_id']);
- }
-}
-
-/**
- * Save category form
- * @trigger loc_begin_index
- */
-function admintools_save_category()
-{
- global $page, $conf, $MultiView;
-
- if (!$MultiView->is_admin())
- {
- return;
- }
-
- if (@$_POST['action'] == 'quick_edit')
- {
- $data = array(
- 'name' => $_POST['name'],
- );
-
- if ($conf['allow_html_descriptions'])
- {
- $data['comment'] = @$_POST['comment'];
- }
- else
- {
- $data['comment'] = strip_tags(@$_POST['comment']);
- }
-
- single_update(
- CATEGORIES_TABLE,
- $data,
- array('id' => $page['category']['id'])
- );
-
- redirect(duplicate_index_url());
- }
-} \ No newline at end of file
diff --git a/plugins/AdminTools/include/index.php b/plugins/AdminTools/include/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/include/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/index.php b/plugins/AdminTools/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/ar_SA/description.txt b/plugins/AdminTools/language/ar_SA/description.txt
deleted file mode 100755
index 9d282a941..000000000
--- a/plugins/AdminTools/language/ar_SA/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-القيام ببعض المهام الادارية على الصفحات العامة \ No newline at end of file
diff --git a/plugins/AdminTools/language/ar_SA/index.php b/plugins/AdminTools/language/ar_SA/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/ar_SA/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/ar_SA/plugin.lang.php b/plugins/AdminTools/language/ar_SA/plugin.lang.php
deleted file mode 100755
index 760b9a5e5..000000000
--- a/plugins/AdminTools/language/ar_SA/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Viewing as <b>%s</b>.'] = 'عرض بشكل <b>%s</b>.';
-$lang['View as'] = 'عرض بشكل';
-$lang['Show SQL queries'] = 'إظهار استعلامات SQL';
-$lang['Saved'] = 'حفظ';
-$lang['Save visit in history'] = 'حفظ تاريخ الزيارة';
-$lang['Save'] = 'حفظ';
-$lang['Revert'] = 'الى الخلف';
-$lang['Quick edit'] = 'التحرير السريع';
-$lang['Properties page'] = 'خصائص الصفحة';
-$lang['Debug template'] = 'قالب تصحيح الأخطاء';
-$lang['Combine JS&CSS'] = 'الجمع بين JS و CSS';
-$lang['Debug languages'] = 'تصحيح أخطاء اللغات';
-$lang['Closed icon position'] = 'إغلاق وضع الآيقونه';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'منح حق تحرير الصور لاصحاب الصور حتى المدير العام';
-$lang['Open toolbar by default'] = 'فتح شريط الأدوات بشكل افتراضي';
-$lang['left'] = 'يسار';
-$lang['right'] = 'يمين';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/bg_BG/description.txt b/plugins/AdminTools/language/bg_BG/description.txt
deleted file mode 100755
index 1dc889abe..000000000
--- a/plugins/AdminTools/language/bg_BG/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Няколко административни настройки на публичните страници \ No newline at end of file
diff --git a/plugins/AdminTools/language/bg_BG/index.php b/plugins/AdminTools/language/bg_BG/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/bg_BG/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/bg_BG/plugin.lang.php b/plugins/AdminTools/language/bg_BG/plugin.lang.php
deleted file mode 100755
index 787f474e9..000000000
--- a/plugins/AdminTools/language/bg_BG/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Show SQL queries'] = 'Покажи SQL заявки';
-$lang['Combine JS&CSS'] = 'Комбиниране JS&amp;CSS';
-$lang['Debug languages'] = 'Език за отстраняване на грешки';
-$lang['Debug template'] = 'Шаблон отстраняване на грешки';
-$lang['Properties page'] = 'Страница с настройки';
-$lang['Quick edit'] = 'Бърза редакция';
-$lang['Revert'] = 'Обратно';
-$lang['Viewing as <b>%s</b>.'] = 'Разглежда като <b>%s</b>.';
-$lang['View as'] = 'Виж като';
-$lang['Save'] = 'Запис';
-$lang['Save visit in history'] = 'Пази история на посещенията';
-$lang['Saved'] = 'Записано';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Дава права за редакция върху снимка на собственика й дори и да не е администратор';
-$lang['Closed icon position'] = 'Затворена позиция на икона';
-$lang['Open toolbar by default'] = 'Отваряне на лента с инструменти по подразбиране';
-$lang['right'] = 'дясно';
-$lang['left'] = 'ляво';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/br_FR/description.txt b/plugins/AdminTools/language/br_FR/description.txt
deleted file mode 100755
index 54d213a31..000000000
--- a/plugins/AdminTools/language/br_FR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Evit ober trevelloù mererezh dre ar pajennoù diavaez. \ No newline at end of file
diff --git a/plugins/AdminTools/language/br_FR/index.php b/plugins/AdminTools/language/br_FR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/br_FR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/br_FR/plugin.lang.php b/plugins/AdminTools/language/br_FR/plugin.lang.php
deleted file mode 100755
index 3f7a70c52..000000000
--- a/plugins/AdminTools/language/br_FR/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Revert'] = 'Nullañ';
-$lang['Closed icon position'] = 'Lec\'h an arlun serret';
-$lang['Combine JS&CSS'] = 'Kenstrollañ JS ha CSS';
-$lang['Debug languages'] = 'Dizreinañ ar yezhoù';
-$lang['Debug template'] = 'Dizreinañ ar patrom';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Reiñ da perc\'henn al luc\'hskeudennoù tu du aozañ buan ha pa vefent ket merourien.';
-$lang['Open toolbar by default'] = 'Digeriñ ar varrenn vinvioù dre ziouer';
-$lang['Properties page'] = 'Pajenn ar perzhioù';
-$lang['Quick edit'] = 'Aozañ buan';
-$lang['Save'] = 'Enrollañ';
-$lang['Save visit in history'] = 'Enrollañ ar weladenn er roll-istor';
-$lang['Saved'] = 'Enrollet';
-$lang['Show SQL queries'] = 'Diskouez rekedoù SQL';
-$lang['View as'] = 'Gwelet evel';
-$lang['Viewing as <b>%s</b>.'] = 'Gwelet evel <b>%s</b>.';
-$lang['left'] = 'tu kleiz';
-$lang['right'] = 'tu dehoù'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/ca_ES/description.txt b/plugins/AdminTools/language/ca_ES/description.txt
deleted file mode 100755
index aa466d85d..000000000
--- a/plugins/AdminTools/language/ca_ES/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Permet tasques d'administració des de les pàgines públiques \ No newline at end of file
diff --git a/plugins/AdminTools/language/ca_ES/index.php b/plugins/AdminTools/language/ca_ES/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/ca_ES/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/ca_ES/plugin.lang.php b/plugins/AdminTools/language/ca_ES/plugin.lang.php
deleted file mode 100755
index ebc0ffed7..000000000
--- a/plugins/AdminTools/language/ca_ES/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Closed icon position'] = 'Posició de la icona';
-$lang['Combine JS&CSS'] = 'Combina JS&amp;SS';
-$lang['Debug languages'] = 'Depura els idiomes';
-$lang['Debug template'] = 'Depura la plantilla';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Dóna accés als propietaris de les fotos (encara que no siguin administradors) per poder editar de forma ràpida ';
-$lang['Open toolbar by default'] = 'Obre la barra d\'eines per defecte';
-$lang['Properties page'] = 'Pàgina de propietats';
-$lang['Quick edit'] = 'Editor ràpid';
-$lang['Revert'] = 'Reverteix';
-$lang['Save'] = 'Guarda';
-$lang['Save visit in history'] = 'Guarda la visita a l\'historial';
-$lang['Saved'] = 'S\'ha guardat';
-$lang['Show SQL queries'] = 'Mostra les consultes SQL';
-$lang['View as'] = 'Veure com';
-$lang['Viewing as <b>%s</b>.'] = 'Veure com <b>%s</b>.';
-$lang['left'] = 'esquerra';
-$lang['right'] = 'dreta'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/cs_CZ/description.txt b/plugins/AdminTools/language/cs_CZ/description.txt
deleted file mode 100644
index 5a22f4ed3..000000000
--- a/plugins/AdminTools/language/cs_CZ/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Umožní provádět některé administrační úkony i na stránkách fotogalerie \ No newline at end of file
diff --git a/plugins/AdminTools/language/cs_CZ/index.php b/plugins/AdminTools/language/cs_CZ/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/cs_CZ/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/cs_CZ/plugin.lang.php b/plugins/AdminTools/language/cs_CZ/plugin.lang.php
deleted file mode 100644
index 7b9e5bb58..000000000
--- a/plugins/AdminTools/language/cs_CZ/plugin.lang.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-$lang['Combine JS&CSS'] = 'Kombinace JS&amp;CSS';
-$lang['Debug languages'] = 'Debug překladů';
-$lang['Debug template'] = 'Debug šablony vzhledu';
-$lang['Viewing as <b>%s</b>.'] = 'Zobrazení jako <b>%s</b>.';
-$lang['Properties page'] = 'Stránka vlastností';
-$lang['Quick edit'] = 'Rychlá editace';
-$lang['Revert'] = 'Nazpět';
-$lang['Save'] = 'Uložit';
-$lang['Saved'] = 'Uloženo';
-$lang['Save visit in history'] = 'Ukládat návštevy do historie';
-$lang['Show SQL queries'] = 'Zobrazit SQL queries';
-$lang['View as'] = 'Zobrazit jako';
-
-$lang['Closed icon position'] = 'Poloha ikony pro zavření';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Udělit přístup do rychlé editace vlastníkům fotek i když nejsou admin';
-$lang['Open toolbar by default'] = 'Výchozí otevření panelu nástrojů';
-$lang['left'] = 'levý';
-$lang['right'] = 'pravý'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/da_DK/description.txt b/plugins/AdminTools/language/da_DK/description.txt
deleted file mode 100755
index 7fca9ec1c..000000000
--- a/plugins/AdminTools/language/da_DK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Foretag nogle administrative handlinger fra de offentlige sider.
diff --git a/plugins/AdminTools/language/da_DK/index.php b/plugins/AdminTools/language/da_DK/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/da_DK/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/da_DK/plugin.lang.php b/plugins/AdminTools/language/da_DK/plugin.lang.php
deleted file mode 100755
index cdb496436..000000000
--- a/plugins/AdminTools/language/da_DK/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Kombiner JS&amp;CSS';
-$lang['Debug languages'] = 'Debug sprog';
-$lang['Debug template'] = 'Debug skabelon';
-$lang['Properties page'] = 'Egenskabsside';
-$lang['Quick edit'] = 'Hurtigredigering';
-$lang['Revert'] = 'Tilbagefør';
-$lang['Save'] = 'Gem';
-$lang['Save visit in history'] = 'Gem besøg i historikken';
-$lang['Show SQL queries'] = 'Vis SQL-forespørgsler';
-$lang['View as'] = 'Vis som';
-$lang['Viewing as <b>%s</b>.'] = 'Viser som <b>%s</b>.';
-$lang['Saved'] = 'Gemt';
-$lang['Closed icon position'] = 'Lukket-ikons placering';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Giv adgang til hurtigredigering for fotoejere, selv hvis de ikke er admin';
-$lang['Open toolbar by default'] = 'Åbn værktøjslinje som standard';
-$lang['left'] = 'venstre';
-$lang['right'] = 'højre';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/de_DE/description.txt b/plugins/AdminTools/language/de_DE/description.txt
deleted file mode 100755
index ae38d8107..000000000
--- a/plugins/AdminTools/language/de_DE/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Ausgewählte Admin-Tätigkeiten mittels Toolbar von allen Seiten aus durchführen \ No newline at end of file
diff --git a/plugins/AdminTools/language/de_DE/index.php b/plugins/AdminTools/language/de_DE/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/de_DE/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/de_DE/plugin.lang.php b/plugins/AdminTools/language/de_DE/plugin.lang.php
deleted file mode 100755
index fceb0982c..000000000
--- a/plugins/AdminTools/language/de_DE/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'JS&amp;CSS kombinieren';
-$lang['Debug languages'] = 'Sprachen debuggen';
-$lang['Debug template'] = 'Vorlagen debuggen';
-$lang['Properties page'] = 'Eigenschaften';
-$lang['Quick edit'] = 'Schnellbearbeitung';
-$lang['Revert'] = 'Zurücksetzen';
-$lang['Save'] = 'Speichern';
-$lang['Save visit in history'] = 'Zugriff in Historie speichern';
-$lang['Show SQL queries'] = 'SQL-Abfrage anzeigen';
-$lang['View as'] = 'Anzeigen als';
-$lang['Viewing as <b>%s</b>.'] = 'Aktueller Benutzer: <b>%s</b>';
-$lang['Saved'] = 'Gespeichert';
-$lang['Closed icon position'] = 'Position des geschlossenen Symbolbildes';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Zugriff zum schnellen Editieren für Bildereigentümer erlauben, obwohl sie kein Administrator sind.';
-$lang['Open toolbar by default'] = 'Die Werkzeugleiste standardmässig öffnen';
-$lang['left'] = 'links';
-$lang['right'] = 'rechts'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/el_GR/description.txt b/plugins/AdminTools/language/el_GR/description.txt
deleted file mode 100755
index a778ffb73..000000000
--- a/plugins/AdminTools/language/el_GR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Κάνει κάποιες διαχειριστικές εργασίες από δημόσιες σελίδες \ No newline at end of file
diff --git a/plugins/AdminTools/language/el_GR/index.php b/plugins/AdminTools/language/el_GR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/el_GR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/el_GR/plugin.lang.php b/plugins/AdminTools/language/el_GR/plugin.lang.php
deleted file mode 100755
index 665728dc4..000000000
--- a/plugins/AdminTools/language/el_GR/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Viewing as <b>%s</b>.'] = 'Προβολή ως <b>%s</b>';
-$lang['View as'] = 'Προβολή ως';
-$lang['Show SQL queries'] = 'Εμφάνιση ερωτημάτων SQL';
-$lang['Save visit in history'] = 'Αποθήκευση επίσκεψης στην ιστορία';
-$lang['Save'] = 'Αποθήκευση';
-$lang['Revert'] = 'Επαναφορά';
-$lang['Quick edit'] = 'Γρήγορη επεξεργασία';
-$lang['Debug languages'] = 'Γλώσσες αποσφάτωσης';
-$lang['Debug template'] = 'Πρότυπο αποσφάτωσης';
-$lang['Properties page'] = 'Ιδιότητες σελίδας';
-$lang['Combine JS&CSS'] = 'Συνδυάστε JS&amp;CSS';
-$lang['Saved'] = 'Αποθηκεύτηκε';
-$lang['right'] = 'δεξιά';
-$lang['left'] = 'αριστερά';
-$lang['Open toolbar by default'] = 'Ανοικτή γραμμή εργαλείων από προεπιλογή';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Δώστε πρόσβαση σε γρήγορη επεξεργασία στους ιδιοκτήτες φωτογραφιών, ακόμη και αν δεν το διαχειριστές ';
-$lang['Closed icon position'] = 'Θέση Κλειστού εικονονίδιου';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/en_UK/description.txt b/plugins/AdminTools/language/en_UK/description.txt
deleted file mode 100644
index 92caa90b0..000000000
--- a/plugins/AdminTools/language/en_UK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Do some admin task from the public pages \ No newline at end of file
diff --git a/plugins/AdminTools/language/en_UK/index.php b/plugins/AdminTools/language/en_UK/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/en_UK/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/en_UK/plugin.lang.php b/plugins/AdminTools/language/en_UK/plugin.lang.php
deleted file mode 100644
index af09c38ce..000000000
--- a/plugins/AdminTools/language/en_UK/plugin.lang.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-$lang['Combine JS&CSS'] = 'Combine JS&amp;CSS';
-$lang['Debug languages'] = 'Debug languages';
-$lang['Debug template'] = 'Debug template';
-$lang['Viewing as <b>%s</b>.'] = 'Viewing as <b>%s</b>.';
-$lang['Properties page'] = 'Properties page';
-$lang['Quick edit'] = 'Quick edit';
-$lang['Revert'] = 'Revert';
-$lang['Save'] = 'Save';
-$lang['Saved'] = 'Saved';
-$lang['Save visit in history'] = 'Save visit in history';
-$lang['Show SQL queries'] = 'Show SQL queries';
-$lang['View as'] = 'View as';
-$lang['Closed icon position'] = 'Closed icon position';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Give access to quick edit to photo owners even if they are not admin';
-$lang['Open toolbar by default'] = 'Open toolbar by default';
-$lang['left'] = 'left';
-$lang['right'] = 'right';
-
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/en_US/index.php b/plugins/AdminTools/language/en_US/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/en_US/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/en_US/plugin.lang.php b/plugins/AdminTools/language/en_US/plugin.lang.php
deleted file mode 100755
index 9c0bff373..000000000
--- a/plugins/AdminTools/language/en_US/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['right'] = 'right';
-$lang['left'] = 'left';
-$lang['Viewing as <b>%s</b>.'] = 'Viewing as <b>%s</b>';
-$lang['View as'] = 'View as';
-$lang['Show SQL queries'] = 'Show SQL queries';
-$lang['Saved'] = 'Saved';
-$lang['Save visit in history'] = 'Save visit in history';
-$lang['Save'] = 'Save';
-$lang['Revert'] = 'Revert';
-$lang['Quick edit'] = 'Quick edit';
-$lang['Properties page'] = 'Properties page';
-$lang['Open toolbar by default'] = 'Open toolbar by default';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Give access to quick edit to photo owners even if they are not admin';
-$lang['Debug languages'] = 'Debug languages';
-$lang['Debug template'] = 'Debug template';
-$lang['Closed icon position'] = 'Closed icon position';
-$lang['Combine JS&CSS'] = 'Combine JS&amp;CSS'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/eo_EO/description.txt b/plugins/AdminTools/language/eo_EO/description.txt
deleted file mode 100755
index 2844006c0..000000000
--- a/plugins/AdminTools/language/eo_EO/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Faras kelkajn administrajn taskojn el la publikaj paĝoj \ No newline at end of file
diff --git a/plugins/AdminTools/language/eo_EO/index.php b/plugins/AdminTools/language/eo_EO/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/eo_EO/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/eo_EO/plugin.lang.php b/plugins/AdminTools/language/eo_EO/plugin.lang.php
deleted file mode 100755
index 5d045e338..000000000
--- a/plugins/AdminTools/language/eo_EO/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Kunigi JS&amp;CSS';
-$lang['Debug languages'] = 'Sencimigi la lingvojn';
-$lang['Debug template'] = 'Sencimigi la ŝablonon';
-$lang['Properties page'] = 'Paĝaj ecoj';
-$lang['Quick edit'] = 'Rapida redakto';
-$lang['Revert'] = 'Malfari';
-$lang['Save'] = 'Konservi';
-$lang['Save visit in history'] = 'Konservi la viziton al historio';
-$lang['Show SQL queries'] = 'Montri la SQL-aj informpetoj';
-$lang['View as'] = 'Vidi kiel';
-$lang['Viewing as <b>%s</b>.'] = 'Vidita kiel <b>%s</b>';
-$lang['Saved'] = 'Konservita';
-$lang['Closed icon position'] = 'Pozicio de la fermita bildsimbolo';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Permesi al fotoposedantoj atingon al rapida redaktado eĉ se ili ne estas administrantoj';
-$lang['Open toolbar by default'] = 'Malfermi la aprioran ilobreton';
-$lang['left'] = 'maldekstra';
-$lang['right'] = 'dekstra';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/es_ES/description.txt b/plugins/AdminTools/language/es_ES/description.txt
deleted file mode 100755
index c92e5b724..000000000
--- a/plugins/AdminTools/language/es_ES/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Hacer algunas tarea de administración de las páginas públicas \ No newline at end of file
diff --git a/plugins/AdminTools/language/es_ES/index.php b/plugins/AdminTools/language/es_ES/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/es_ES/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/es_ES/plugin.lang.php b/plugins/AdminTools/language/es_ES/plugin.lang.php
deleted file mode 100755
index 4974253b5..000000000
--- a/plugins/AdminTools/language/es_ES/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Revert'] = 'Volver';
-$lang['Save'] = 'Guardar';
-$lang['Save visit in history'] = 'Guardar el histórico de visita ';
-$lang['Show SQL queries'] = 'Mostrar consultas SQL ';
-$lang['View as'] = 'Ver como';
-$lang['Viewing as <b>%s</b>.'] = 'Visualización como <b>%s</b>.';
-$lang['Quick edit'] = 'Edición rápida';
-$lang['Properties page'] = 'Propriedades de la pagina';
-$lang['Debug template'] = 'Depurar plantilla';
-$lang['Debug languages'] = 'Depurar idiomas';
-$lang['Combine JS&CSS'] = 'Combine JS y CSS';
-$lang['Saved'] = 'Guardado';
-$lang['Closed icon position'] = 'Posición de icono Cerrado';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Dar acceso a la edición rápida a los propietarios de las fotos, incluso si no son admin';
-$lang['Open toolbar by default'] = 'Abrir por defecto la barra de herramientas ';
-$lang['left'] = 'izquierda';
-$lang['right'] = 'derecha';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/et_EE/description.txt b/plugins/AdminTools/language/et_EE/description.txt
deleted file mode 100755
index db3329942..000000000
--- a/plugins/AdminTools/language/et_EE/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Lubab mõningast toimetamist otse üldlehtedelt \ No newline at end of file
diff --git a/plugins/AdminTools/language/et_EE/index.php b/plugins/AdminTools/language/et_EE/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/et_EE/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/et_EE/plugin.lang.php b/plugins/AdminTools/language/et_EE/plugin.lang.php
deleted file mode 100755
index 1b2025bab..000000000
--- a/plugins/AdminTools/language/et_EE/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['left'] = 'vasak';
-$lang['right'] = 'parem';
-$lang['Viewing as <b>%s</b>.'] = 'Kuvatakse kui <b>%s</b>.';
-$lang['View as'] = 'Näita kui';
-$lang['Show SQL queries'] = 'Näita andmebaasi SQL-päringuid';
-$lang['Saved'] = 'Salvestatud';
-$lang['Save visit in history'] = 'Salvesta külastus ajalukku';
-$lang['Save'] = 'Salvesta';
-$lang['Revert'] = 'Taasta';
-$lang['Quick edit'] = 'Kiirtoimeta';
-$lang['Properties page'] = 'Atribuudileht';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Luba fotode kiirtoimetamist nende omanikele, kuigi nad pole haldurid';
-$lang['Open toolbar by default'] = 'Näita tööriistariba vaikimisi';
-$lang['Debug template'] = 'Silumise mall';
-$lang['Debug languages'] = 'Silumise keeled';
-$lang['Combine JS&CSS'] = 'Kasuta nii JavaScripti kui CSS-i';
-$lang['Closed icon position'] = 'Suletud ikooni asukoht'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/fa_IR/description.txt b/plugins/AdminTools/language/fa_IR/description.txt
deleted file mode 100755
index 43deda3af..000000000
--- a/plugins/AdminTools/language/fa_IR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-از صفحات عمومي مقداري كار مديريتي انجام دهيد. \ No newline at end of file
diff --git a/plugins/AdminTools/language/fa_IR/index.php b/plugins/AdminTools/language/fa_IR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/fa_IR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/fa_IR/plugin.lang.php b/plugins/AdminTools/language/fa_IR/plugin.lang.php
deleted file mode 100755
index b6ffd2dce..000000000
--- a/plugins/AdminTools/language/fa_IR/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Closed icon position'] = 'موقعيت آيكون بسته شده';
-$lang['Combine JS&CSS'] = 'تركيب جاوا اسكريپ و قالب';
-$lang['Debug languages'] = 'زبانهاي خطايابي';
-$lang['Debug template'] = 'قالب خطايابي';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'دسترسي صاحب عكس براي ويرايش عكس در حالت غير مديركل';
-$lang['Open toolbar by default'] = 'باز كردن پيش فرض ابزار';
-$lang['Properties page'] = 'صفحه مشخصات';
-$lang['Quick edit'] = 'ويرايش سريع';
-$lang['Revert'] = 'بازگرداندن';
-$lang['Save'] = 'ذخيره';
-$lang['Save visit in history'] = 'ذخيره بازديدها در تاريخچه';
-$lang['Saved'] = 'ذخيره شده';
-$lang['Show SQL queries'] = 'نمايش دستورات جستجوي بانك اطلاعات';
-$lang['View as'] = 'نمايش در حالت';
-$lang['Viewing as <b>%s</b>.'] = 'نمايش در حالت <b>%s</b>.';
-$lang['left'] = 'چپ';
-$lang['right'] = 'راست';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/fi_FI/description.txt b/plugins/AdminTools/language/fi_FI/description.txt
deleted file mode 100755
index a7cc2feec..000000000
--- a/plugins/AdminTools/language/fi_FI/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Suorita osa ylläpitäjän toiminnoista suoraan julkisilta sivuilta \ No newline at end of file
diff --git a/plugins/AdminTools/language/fi_FI/index.php b/plugins/AdminTools/language/fi_FI/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/fi_FI/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/fi_FI/plugin.lang.php b/plugins/AdminTools/language/fi_FI/plugin.lang.php
deleted file mode 100755
index 28b94fadd..000000000
--- a/plugins/AdminTools/language/fi_FI/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Yhdistä JS&amp;CSS';
-$lang['Debug languages'] = 'Debuggaa kielet';
-$lang['Quick edit'] = 'Pikamuokkaus';
-$lang['Revert'] = 'Palauta';
-$lang['Save'] = 'Tallenna';
-$lang['Show SQL queries'] = 'Näytä SQL-kyselyt';
-$lang['View as'] = 'Katso';
-$lang['Properties page'] = 'Ominaisuussivu';
-$lang['Save visit in history'] = 'Tallenna käynti historiatietoihin';
-$lang['Saved'] = 'Tallennettu';
-$lang['Closed icon position'] = 'Suljettu kuvakkeen sijainti';
-$lang['Viewing as <b>%s</b>.'] = 'Näkyy <b>%s</b>';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Anna oikeus pikamuokkaukseen vaikkei käyttäjä ole ylläpitäjä';
-$lang['Debug template'] = 'Debuggaa malline';
-$lang['Open toolbar by default'] = 'Avaa työkalupalkki oletuksena';
-$lang['left'] = 'vasen';
-$lang['right'] = 'oikea';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/fr_CA/description.txt b/plugins/AdminTools/language/fr_CA/description.txt
deleted file mode 100644
index 34aa486e5..000000000
--- a/plugins/AdminTools/language/fr_CA/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Rend possibles certaines tâches d’administration depuis la partie publique \ No newline at end of file
diff --git a/plugins/AdminTools/language/fr_CA/index.php b/plugins/AdminTools/language/fr_CA/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/fr_CA/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/fr_CA/plugin.lang.php b/plugins/AdminTools/language/fr_CA/plugin.lang.php
deleted file mode 100644
index c8a558d74..000000000
--- a/plugins/AdminTools/language/fr_CA/plugin.lang.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-$lang['Combine JS&CSS'] = 'Combiner JS&amp;CSS';
-$lang['Debug languages'] = 'Déboguer les langues';
-$lang['Debug template'] = 'Déboguer le patron';
-$lang['Viewing as <b>%s</b>.'] = 'Vue simulée de <b>%s</b>.';
-$lang['Properties page'] = 'Page d\'administration';
-$lang['Quick edit'] = 'Édition rapide';
-$lang['Revert'] = 'Annuler';
-$lang['Save'] = 'Sauvegarder';
-$lang['Saved'] = 'Sauvegardé';
-$lang['Save visit in history'] = 'Sauvegarder la viste dans l\'historique';
-$lang['Show SQL queries'] = 'Afficher les requêtes SQL';
-$lang['View as'] = 'Voir en tant que';
-$lang['Closed icon position'] = 'Position de l\'icône fermée';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Autoriser l\'accès à l\'édition rapide aux propriétaires des photos même s\'ils ne sont pas administrateurs';
-$lang['Open toolbar by default'] = 'Ouvrir la barre par défaut';
-$lang['left'] = 'gauche';
-$lang['right'] = 'droite';
-
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/fr_FR/description.txt b/plugins/AdminTools/language/fr_FR/description.txt
deleted file mode 100644
index 34aa486e5..000000000
--- a/plugins/AdminTools/language/fr_FR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Rend possibles certaines tâches d’administration depuis la partie publique \ No newline at end of file
diff --git a/plugins/AdminTools/language/fr_FR/index.php b/plugins/AdminTools/language/fr_FR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/fr_FR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/fr_FR/plugin.lang.php b/plugins/AdminTools/language/fr_FR/plugin.lang.php
deleted file mode 100644
index bf718cef4..000000000
--- a/plugins/AdminTools/language/fr_FR/plugin.lang.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-$lang['Combine JS&CSS'] = 'Combiner JS&amp;CSS';
-$lang['Debug languages'] = 'Debuguer les langues';
-$lang['Debug template'] = 'Debuguer le template';
-$lang['Viewing as <b>%s</b>.'] = 'Vue simulée de <b>%s</b>.';
-$lang['Properties page'] = 'Page d\'administration';
-$lang['Quick edit'] = 'Édition rapide';
-$lang['Revert'] = 'Annuler';
-$lang['Save'] = 'Sauvegarder';
-$lang['Saved'] = 'Sauvegardé';
-$lang['Save visit in history'] = 'Sauvegarder la viste dans l\'historique';
-$lang['Show SQL queries'] = 'Afficher les requêtes SQL';
-$lang['View as'] = 'Voir en tant que';
-$lang['Closed icon position'] = 'Position the l\'icône fermé';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Autoriser l\'accès à l\'édition rapide aux propriétaires des photos même s\'ils ne sont pas admin';
-$lang['Open toolbar by default'] = 'Ouvrir la barre par défaut';
-$lang['left'] = 'gauche';
-$lang['right'] = 'droite';
-
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/gl_ES/description.txt b/plugins/AdminTools/language/gl_ES/description.txt
deleted file mode 100755
index 96b307a5a..000000000
--- a/plugins/AdminTools/language/gl_ES/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Faga algunha tarefa de administración das páxinas públicas. \ No newline at end of file
diff --git a/plugins/AdminTools/language/gl_ES/index.php b/plugins/AdminTools/language/gl_ES/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/gl_ES/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/gl_ES/plugin.lang.php b/plugins/AdminTools/language/gl_ES/plugin.lang.php
deleted file mode 100755
index 3d4b718e6..000000000
--- a/plugins/AdminTools/language/gl_ES/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Dar acceso a modificación rápida para propietarios de fotografías, mesmo se eles non son administradores';
-$lang['Quick edit'] = 'Modificación rápida';
-$lang['Revert'] = 'Reverter';
-$lang['Save'] = 'Gardar';
-$lang['Save visit in history'] = 'Gardar visita no histórico';
-$lang['Saved'] = 'Gardado';
-$lang['Show SQL queries'] = 'Amosar consultas SQL';
-$lang['View as'] = 'Ver como';
-$lang['Viewing as <b>%s</b>.'] = 'Vendo como <b>%s</b>.';
-$lang['left'] = 'esquerda';
-$lang['right'] = 'dereita';
-$lang['Closed icon position'] = 'Posición icona pechada';
-$lang['Combine JS&CSS'] = 'Combinar JS&amp;CSS';
-$lang['Debug languages'] = 'Depurar idiomas';
-$lang['Debug template'] = 'Depurar modelo';
-$lang['Open toolbar by default'] = 'Abrir a barra de ferramentas predeterminada';
-$lang['Properties page'] = 'Páxina de propiedades'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/he_IL/description.txt b/plugins/AdminTools/language/he_IL/description.txt
deleted file mode 100755
index c4e66f93a..000000000
--- a/plugins/AdminTools/language/he_IL/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-ביצוע משימות מנהל מדפים ציבוריים \ No newline at end of file
diff --git a/plugins/AdminTools/language/he_IL/index.php b/plugins/AdminTools/language/he_IL/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/he_IL/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/he_IL/plugin.lang.php b/plugins/AdminTools/language/he_IL/plugin.lang.php
deleted file mode 100755
index 70708d9df..000000000
--- a/plugins/AdminTools/language/he_IL/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'תן גישה לעריכה מהירה לבעלי תמונה, גם אם הם לא מנהלים';
-$lang['Viewing as <b>%s</b>.'] = 'צופה כ <b>%s</b>.';
-$lang['Open toolbar by default'] = 'סרגל כלים פתוחים כברירת מחדל';
-$lang['Properties page'] = 'מאפיינים';
-$lang['Combine JS&CSS'] = 'שלב JS&CSS';
-$lang['Debug languages'] = 'מיפוי שגיאות בשפות';
-$lang['Debug template'] = 'מיפוי שגיאות בתבנית';
-$lang['Closed icon position'] = 'סגור מיקום סמל';
-$lang['Quick edit'] = 'עריכה מהירה';
-$lang['Revert'] = 'חזור';
-$lang['Save'] = 'שמור';
-$lang['Save visit in history'] = 'שמור ביקורים בהיסטוריה';
-$lang['Saved'] = 'נשמר';
-$lang['Show SQL queries'] = 'הצג שאילתות SQL';
-$lang['View as'] = 'צפה כ';
-$lang['left'] = 'שמאל';
-$lang['right'] = 'ימין'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/hu_HU/description.txt b/plugins/AdminTools/language/hu_HU/description.txt
deleted file mode 100755
index ef1ab553d..000000000
--- a/plugins/AdminTools/language/hu_HU/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Néhány admin tevékenységet elláthatsz a publikus oldalról \ No newline at end of file
diff --git a/plugins/AdminTools/language/hu_HU/index.php b/plugins/AdminTools/language/hu_HU/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/hu_HU/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/hu_HU/plugin.lang.php b/plugins/AdminTools/language/hu_HU/plugin.lang.php
deleted file mode 100755
index b8134fd24..000000000
--- a/plugins/AdminTools/language/hu_HU/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Debug languages'] = 'Hibakeresés nyelvek';
-$lang['Debug template'] = 'Hibakeresés sablon';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'A kép tulasdonosok hozzáférnek a gyors szerkesztéshez akkor is, ha nem adminisztrátorok';
-$lang['Open toolbar by default'] = 'Eszköztár megnyitása alapértelmezés szerint';
-$lang['Properties page'] = 'Oldal tulajdonságok';
-$lang['Quick edit'] = 'Gyors szerkesztés';
-$lang['Revert'] = 'Visszaállít';
-$lang['Save'] = 'Ment';
-$lang['Saved'] = 'Mentve';
-$lang['Show SQL queries'] = 'SQL lekérdezések mutatása';
-$lang['left'] = 'bal';
-$lang['right'] = 'jobb';
-$lang['Combine JS&CSS'] = 'Kombinált JS és CSS';
-$lang['Save visit in history'] = 'Látogatások archívumba mentése';
-$lang['View as'] = 'Megjelenítés mint:';
-$lang['Closed icon position'] = 'Zárt ikon hely';
-$lang['Viewing as <b>%s</b>.'] = 'Látható, mint <b>%s</b>.'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/index.php b/plugins/AdminTools/language/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/it_IT/description.txt b/plugins/AdminTools/language/it_IT/description.txt
deleted file mode 100755
index c73826599..000000000
--- a/plugins/AdminTools/language/it_IT/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Fare qualche admin task dalle pagine pubbliche \ No newline at end of file
diff --git a/plugins/AdminTools/language/it_IT/index.php b/plugins/AdminTools/language/it_IT/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/it_IT/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/it_IT/plugin.lang.php b/plugins/AdminTools/language/it_IT/plugin.lang.php
deleted file mode 100755
index 9f1eec8d5..000000000
--- a/plugins/AdminTools/language/it_IT/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Viewing as <b>%s</b>.'] = 'Visualizza come <b>%s</b>.';
-$lang['View as'] = 'Mostra come';
-$lang['Show SQL queries'] = 'Mostra queries SQL';
-$lang['Save visit in history'] = 'Salvare visita nella storia';
-$lang['Revert'] = 'Ripristina';
-$lang['Properties page'] = 'Proprietà pagina';
-$lang['Quick edit'] = 'Modifica veloce';
-$lang['Debug template'] = 'Debug dei modelli';
-$lang['Debug languages'] = 'Debug delle lingue';
-$lang['Combine JS&CSS'] = 'Combinare JS &amp; CSS';
-$lang['Save'] = 'Salva';
-$lang['Saved'] = 'Salvato';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Dare accesso modifica veloce ai proprietari di foto anche se non sono amministratori';
-$lang['Closed icon position'] = 'Posiziona l\'icona di chiusura';
-$lang['Open toolbar by default'] = 'Apri la barra predefinita';
-$lang['left'] = 'sinistra';
-$lang['right'] = 'destra';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/ja_JP/index.php b/plugins/AdminTools/language/ja_JP/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/ja_JP/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/ja_JP/plugin.lang.php b/plugins/AdminTools/language/ja_JP/plugin.lang.php
deleted file mode 100755
index b72fee146..000000000
--- a/plugins/AdminTools/language/ja_JP/plugin.lang.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Debug template'] = 'デバッグ テンプレート';
-$lang['Properties page'] = 'プロパティ ページ';
-$lang['Quick edit'] = 'クイックエディット';
-$lang['Revert'] = '元に戻す';
-$lang['Save'] = '保存';
-$lang['Saved'] = '保存しました';
-$lang['Show SQL queries'] = 'SQL クエリーを参照する';
-$lang['left'] = '左';
-$lang['right'] = '右'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/km_KH/description.txt b/plugins/AdminTools/language/km_KH/description.txt
deleted file mode 100755
index 65fa1e483..000000000
--- a/plugins/AdminTools/language/km_KH/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-ដើរតួជា​ប្រធាន​គ្រប់គ្រង​វេបសា​ពីទំព័រ​សាធារណៈ \ No newline at end of file
diff --git a/plugins/AdminTools/language/km_KH/index.php b/plugins/AdminTools/language/km_KH/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/km_KH/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/km_KH/plugin.lang.php b/plugins/AdminTools/language/km_KH/plugin.lang.php
deleted file mode 100755
index f7455f39d..000000000
--- a/plugins/AdminTools/language/km_KH/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Revert'] = 'ត្រឡប់​ទៅ​ដូច​ដើម';
-$lang['View as'] = 'បង្ហាញជា';
-$lang['right'] = 'ស្តាំ';
-$lang['left'] = 'ឆ្វេង';
-$lang['Viewing as <b>%s</b>.'] = 'បង្ហាញជា <b>%s</b>។';
-$lang['Show SQL queries'] = 'បង្ហាញសំនេរ SQL';
-$lang['Saved'] = 'បាន​រក្សាទុក';
-$lang['Save visit in history'] = 'រក្សាការ​ចូលមើល​ទុក';
-$lang['Save'] = 'រក្សាទុក';
-$lang['Quick edit'] = 'ការកែ​ប្រែលឿន';
-$lang['Properties page'] = 'ទំព័រ​ឯកសារលក្ខណៈ';
-$lang['Open toolbar by default'] = 'បើ​របារឧបករណ៍​ដោយលំនាំ​ដើម';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'ផ្តល់​សិទ្ធិចូល​ទៅ​ការកែ​ប្រែលឿនដល់​ម្ចាស់​រូបភាព បើទោះបី​ពួកគាត់​ពុំមែន​ជា​អ្នក​គ្រប់គ្រង​ក៏ដោយ';
-$lang['Debug template'] = 'ស្វែងរក​កំបុស​ពុម្ព';
-$lang['Debug languages'] = 'ស្វែង​រកកំហុស​ភាសា';
-$lang['Combine JS&CSS'] = 'បញ្ចូល JS&amp;CSS';
-$lang['Closed icon position'] = 'ទីតាំ​ង​រូប​បិទ'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/lt_LT/description.txt b/plugins/AdminTools/language/lt_LT/description.txt
deleted file mode 100755
index d2af0ceb1..000000000
--- a/plugins/AdminTools/language/lt_LT/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Atlikti kai kurias administravimo užduotis iš viešųjų puslapių \ No newline at end of file
diff --git a/plugins/AdminTools/language/lt_LT/index.php b/plugins/AdminTools/language/lt_LT/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/lt_LT/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/lt_LT/plugin.lang.php b/plugins/AdminTools/language/lt_LT/plugin.lang.php
deleted file mode 100755
index 30fcf29c6..000000000
--- a/plugins/AdminTools/language/lt_LT/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Apjungti JS&amp;CSS';
-$lang['Debug languages'] = 'Debuginti kalbas';
-$lang['Debug template'] = 'Debuginti šablonus';
-$lang['Properties page'] = 'Nustatymų puslapis';
-$lang['Quick edit'] = 'Greitas redagavimas';
-$lang['Revert'] = 'Atstatyti';
-$lang['Save'] = 'Išsaugoti';
-$lang['Save visit in history'] = 'Vesti vizitų žurnalą';
-$lang['Show SQL queries'] = 'Rodyty SQL užklausas';
-$lang['View as'] = 'Žiūrėti kaip';
-$lang['Viewing as <b>%s</b>.'] = 'Rodoma kaip <b>%s</b>.';
-$lang['Saved'] = 'Išsaugota';
-$lang['Closed icon position'] = 'Užvertos ikonos pozicija';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Leisti greitą nuotraukos redagavimą jų savininkams, net jeigu jie ne administratoriai';
-$lang['Open toolbar by default'] = 'Atverti įrankių juostą pagal nutylėjimą';
-$lang['left'] = 'kairė';
-$lang['right'] = 'dešinė';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/lv_LV/description.txt b/plugins/AdminTools/language/lv_LV/description.txt
deleted file mode 100755
index 4cea33bc9..000000000
--- a/plugins/AdminTools/language/lv_LV/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Veikt kādu administratora uzdevumu no vispārējām lapām. \ No newline at end of file
diff --git a/plugins/AdminTools/language/lv_LV/index.php b/plugins/AdminTools/language/lv_LV/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/lv_LV/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/lv_LV/plugin.lang.php b/plugins/AdminTools/language/lv_LV/plugin.lang.php
deleted file mode 100755
index 002766ab1..000000000
--- a/plugins/AdminTools/language/lv_LV/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Apvienot JS &amp; CSS';
-$lang['Revert'] = 'Atgriezt';
-$lang['View as'] = 'Apskatīt kā';
-$lang['Viewing as <b>%s</b>.'] = 'Apskatīt kā <b>%s </ b>.';
-$lang['Show SQL queries'] = 'Parādīt SQL vaicājumu';
-$lang['Save visit in history'] = 'Saglabāt apmeklējumu vēsturē';
-$lang['Save'] = 'Saglabāt';
-$lang['Debug languages'] = 'Atkļūdot valodas';
-$lang['Debug template'] = 'Atkļūdošanas veidne';
-$lang['Properties page'] = 'Rekvizītu lapa';
-$lang['Quick edit'] = 'Ātrā rediģēšana';
-$lang['Saved'] = 'Saglabāts';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Ļauj piekļūt foto īpašniekiem ātrai rediģēšanai arī tad, ja tie nav admini';
-$lang['Closed icon position'] = 'Ikonas slēgt pozīcija';
-$lang['Open toolbar by default'] = 'Atvērt rīkjoslu pēc noklusējuma';
-$lang['right'] = 'pa labi';
-$lang['left'] = 'pa kreisi';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/mn_MN/description.txt b/plugins/AdminTools/language/mn_MN/description.txt
deleted file mode 100755
index 92caa90b0..000000000
--- a/plugins/AdminTools/language/mn_MN/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Do some admin task from the public pages \ No newline at end of file
diff --git a/plugins/AdminTools/language/mn_MN/index.php b/plugins/AdminTools/language/mn_MN/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/mn_MN/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/mn_MN/plugin.lang.php b/plugins/AdminTools/language/mn_MN/plugin.lang.php
deleted file mode 100755
index 505c16f83..000000000
--- a/plugins/AdminTools/language/mn_MN/plugin.lang.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Revert'] = 'Буцаах';
-$lang['Combine JS&CSS'] = 'JS ба CSS-г нэгтгэх';
-$lang['Quick edit'] = 'Засах';
-$lang['View as'] = 'Харах';
-$lang['Save'] = 'Хадгалах';
-$lang['Saved'] = 'Амжилттай хадгаллаа';
-$lang['left'] = 'зүүн';
-$lang['right'] = 'баруун';
-$lang['Closed icon position'] = 'Хаагдсан дүрслэлийн байршил';
-$lang['Show SQL queries'] = 'SQL query хүсэлтийг харуулах';
-$lang['Save visit in history'] = 'Хандалтыг бүртгэж хадгалах'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/nb_NO/description.txt b/plugins/AdminTools/language/nb_NO/description.txt
deleted file mode 100755
index cd4f3c1db..000000000
--- a/plugins/AdminTools/language/nb_NO/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Gjør noen admin-oppgaver fra offentlige sider
diff --git a/plugins/AdminTools/language/nb_NO/index.php b/plugins/AdminTools/language/nb_NO/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/nb_NO/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/nb_NO/plugin.lang.php b/plugins/AdminTools/language/nb_NO/plugin.lang.php
deleted file mode 100755
index f3ef67d4d..000000000
--- a/plugins/AdminTools/language/nb_NO/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Kombiner JS&amp;CSS';
-$lang['Debug languages'] = 'Feilsøkingspråk';
-$lang['Debug template'] = 'Feilsøking tema';
-$lang['Properties page'] = 'Egenskapersiden';
-$lang['Quick edit'] = 'Rask endring';
-$lang['Revert'] = 'Omgjøre';
-$lang['Save'] = 'Lagre';
-$lang['Save visit in history'] = 'Lagre besøkshistorie';
-$lang['Saved'] = 'Lagret';
-$lang['Show SQL queries'] = 'Vis SQL spørringer';
-$lang['View as'] = 'Se alle';
-$lang['Viewing as <b>%s</b>.'] = 'Se som <b>%s</b>.';
-$lang['Closed icon position'] = 'Låst ikonposisjon';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Gi tilgang til hurtigredigering av bildeeier, selv om de ikke er admin';
-$lang['Open toolbar by default'] = 'Åpne verktøy automatisk';
-$lang['left'] = 'venstre';
-$lang['right'] = 'høyre';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/nl_NL/description.txt b/plugins/AdminTools/language/nl_NL/description.txt
deleted file mode 100755
index 8522e1f02..000000000
--- a/plugins/AdminTools/language/nl_NL/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Doe enkele admin-taken vanaf de openbare pagina's \ No newline at end of file
diff --git a/plugins/AdminTools/language/nl_NL/index.php b/plugins/AdminTools/language/nl_NL/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/nl_NL/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/nl_NL/plugin.lang.php b/plugins/AdminTools/language/nl_NL/plugin.lang.php
deleted file mode 100755
index 8f5ad2a2e..000000000
--- a/plugins/AdminTools/language/nl_NL/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Debug languages'] = 'Identificeren en verwijderen van (Debug) taalfouten';
-$lang['Debug template'] = 'Identificeren en verwijderen van (Debug) themafouten';
-$lang['Properties page'] = 'Eigenschappen-pagina';
-$lang['Revert'] = 'Terugdraaien';
-$lang['Save'] = 'Bewaren';
-$lang['Save visit in history'] = 'Bewaar bezoek in geschiedenis';
-$lang['Viewing as <b>%s</b>.'] = 'Bekijken als <b>%s</b>.';
-$lang['Show SQL queries'] = 'Toon SQL queries';
-$lang['View as'] = 'Bekijk als';
-$lang['Quick edit'] = 'Snel bewerken';
-$lang['Combine JS&CSS'] = 'Combineer JS&amp;CSS';
-$lang['Saved'] = 'Opgeslagen';
-$lang['Closed icon position'] = 'Positie van pictogram gesloten';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Geef foto-eigenaren toegang tot Snel bewerken, zelfs als ze geen administrator zijn.';
-$lang['Open toolbar by default'] = 'Open standaard de werkbalk';
-$lang['left'] = 'links';
-$lang['right'] = 'rechts';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/pl_PL/description.txt b/plugins/AdminTools/language/pl_PL/description.txt
deleted file mode 100755
index 32e0b7b31..000000000
--- a/plugins/AdminTools/language/pl_PL/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Wykonuj niektóre zadania admina wprost z ogólnodostępnych stron \ No newline at end of file
diff --git a/plugins/AdminTools/language/pl_PL/index.php b/plugins/AdminTools/language/pl_PL/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/pl_PL/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/pl_PL/plugin.lang.php b/plugins/AdminTools/language/pl_PL/plugin.lang.php
deleted file mode 100755
index afc84b06d..000000000
--- a/plugins/AdminTools/language/pl_PL/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Połącz JS&amp;CSS';
-$lang['Debug languages'] = 'Języki debugowania';
-$lang['Debug template'] = 'Wzory debugowania';
-$lang['Properties page'] = 'Ustawienia';
-$lang['Quick edit'] = 'Szybka edycja';
-$lang['Revert'] = 'Odwróć';
-$lang['Save'] = 'Zapisz';
-$lang['Save visit in history'] = 'Zapisz odwiedziny w historii';
-$lang['Saved'] = 'Zapisano';
-$lang['Show SQL queries'] = 'Pokaż zapytania SQL';
-$lang['View as'] = 'Zobacz jako';
-$lang['Viewing as <b>%s</b>.'] = 'Oglądasz jako <b>%s</b>';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Przyznaj dostęp do szybkiej edycji właścicielom zdjęć nawet, gdy nie są administratorami';
-$lang['Open toolbar by default'] = 'Domyślnie otwieraj pasek narzędzi';
-$lang['left'] = 'lewo';
-$lang['right'] = 'prawo';
-$lang['Closed icon position'] = 'Stała pozycja ikony.'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/pt_BR/description.txt b/plugins/AdminTools/language/pt_BR/description.txt
deleted file mode 100755
index cda8f883f..000000000
--- a/plugins/AdminTools/language/pt_BR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Faça algumas tarefas de administração a partir das páginas públicas \ No newline at end of file
diff --git a/plugins/AdminTools/language/pt_BR/index.php b/plugins/AdminTools/language/pt_BR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/pt_BR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/pt_BR/plugin.lang.php b/plugins/AdminTools/language/pt_BR/plugin.lang.php
deleted file mode 100755
index 6809b2352..000000000
--- a/plugins/AdminTools/language/pt_BR/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Combinar JS&amp;CSS';
-$lang['Debug languages'] = 'Depurar idiomas';
-$lang['Debug template'] = 'Depurar modelo';
-$lang['Properties page'] = 'Página de propriedades';
-$lang['Quick edit'] = 'Edição rápida';
-$lang['Revert'] = 'Reverter';
-$lang['Save'] = 'Salvar';
-$lang['Save visit in history'] = 'Salvar visita na história';
-$lang['Show SQL queries'] = 'Mostrar consultas SQL';
-$lang['View as'] = 'Visualizar como';
-$lang['Viewing as <b>%s</b>.'] = 'Visulaizar como <b>%s</b>';
-$lang['Saved'] = 'Salvo';
-$lang['Closed icon position'] = 'Posição ícone Fechado';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Dar acesso a edição rápida para proprietários de fotografias, mesmo se eles não forem admin';
-$lang['Open toolbar by default'] = 'Abrir barra de ferramentas por padrão';
-$lang['left'] = 'esquerda';
-$lang['right'] = 'direita';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/pt_PT/description.txt b/plugins/AdminTools/language/pt_PT/description.txt
deleted file mode 100755
index 7b5eab56e..000000000
--- a/plugins/AdminTools/language/pt_PT/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Faça alguma tarefa administrativa das páginas públicas \ No newline at end of file
diff --git a/plugins/AdminTools/language/pt_PT/index.php b/plugins/AdminTools/language/pt_PT/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/pt_PT/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/pt_PT/plugin.lang.php b/plugins/AdminTools/language/pt_PT/plugin.lang.php
deleted file mode 100755
index 0c4b86e1c..000000000
--- a/plugins/AdminTools/language/pt_PT/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Combinar JS e CSS';
-$lang['Debug languages'] = 'Corrigir bugs em idiomas';
-$lang['Debug template'] = 'Corrigir bugs em templates';
-$lang['Properties page'] = 'Página de propriedades';
-$lang['Quick edit'] = 'Editar rápido';
-$lang['Revert'] = 'Reverter';
-$lang['Save'] = 'Salvar';
-$lang['Save visit in history'] = 'Salvar visita no historial';
-$lang['Show SQL queries'] = 'Mostrar consultas SQL';
-$lang['View as'] = 'Ver como';
-$lang['Viewing as <b>%s</b>.'] = 'Vendo como <b>%s</b>.';
-$lang['Saved'] = 'Salvo';
-$lang['Closed icon position'] = 'Posição do icon encerrada';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Permite acesso aos proprietários da foto para edição rápida mesmo não sendo administradores';
-$lang['Open toolbar by default'] = 'Abrir, por defeito, a barra de ferramentas ';
-$lang['left'] = 'Esquerda';
-$lang['right'] = 'Direita';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/ro_RO/description.txt b/plugins/AdminTools/language/ro_RO/description.txt
deleted file mode 100755
index 240f7316d..000000000
--- a/plugins/AdminTools/language/ro_RO/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Execută anumite sarcini administrative din paginile publice \ No newline at end of file
diff --git a/plugins/AdminTools/language/ro_RO/index.php b/plugins/AdminTools/language/ro_RO/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/ro_RO/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/ro_RO/plugin.lang.php b/plugins/AdminTools/language/ro_RO/plugin.lang.php
deleted file mode 100755
index 6ead74570..000000000
--- a/plugins/AdminTools/language/ro_RO/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Combină JS&amp;CSS';
-$lang['Debug languages'] = 'Depanare limbă';
-$lang['Debug template'] = 'Depanare șablon';
-$lang['Properties page'] = 'Pagină de proprietăți';
-$lang['Quick edit'] = 'Editare rapidă';
-$lang['Revert'] = 'Revenire';
-$lang['Save'] = 'Salvează';
-$lang['Save visit in history'] = 'Salvează vizita în istoric';
-$lang['Saved'] = 'Salvat';
-$lang['Show SQL queries'] = 'Arată interogările SQL';
-$lang['View as'] = 'Vizualizează ca';
-$lang['Viewing as <b>%s</b>.'] = 'Vizualizare ca <b>%s</b>.';
-$lang['Closed icon position'] = 'Pozitia pictogramelor inchisa';
-$lang['right'] = 'Dreapta';
-$lang['left'] = 'Stanga';
-$lang['Open toolbar by default'] = 'Deschide implicit bara de instrumente';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Ofera detinatorilor de fotografii dreptul de a edita, chiar daca nu sunt administratori';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/ru_RU/description.txt b/plugins/AdminTools/language/ru_RU/description.txt
deleted file mode 100755
index ddd15a835..000000000
--- a/plugins/AdminTools/language/ru_RU/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Позволяет выполнять некоторые администраторские функции с публичных страниц \ No newline at end of file
diff --git a/plugins/AdminTools/language/ru_RU/index.php b/plugins/AdminTools/language/ru_RU/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/ru_RU/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/ru_RU/plugin.lang.php b/plugins/AdminTools/language/ru_RU/plugin.lang.php
deleted file mode 100755
index 4a29a7b19..000000000
--- a/plugins/AdminTools/language/ru_RU/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Объединение JS&amp;CSS';
-$lang['Debug languages'] = 'Отладка языков';
-$lang['Debug template'] = 'Отладка шаблона';
-$lang['Properties page'] = 'Свойства страницы';
-$lang['Quick edit'] = 'Быстрое редактирование';
-$lang['Revert'] = 'Вернуться';
-$lang['Save'] = 'Сохранить';
-$lang['Save visit in history'] = 'Сохранить визит в истории';
-$lang['Show SQL queries'] = 'Показать SQL запросы';
-$lang['View as'] = 'Посмотреть как';
-$lang['Viewing as <b>%s</b>.'] = 'Просмотр как <b>%s</b>.';
-$lang['Saved'] = 'Сохранено';
-$lang['Closed icon position'] = 'Закрытое положение иконки';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Предоставить доступ для быстрого редактирования изображений их владельцам, даже если они не админы';
-$lang['Open toolbar by default'] = 'Открыть панель инструментов по умолчанию';
-$lang['left'] = 'слева';
-$lang['right'] = 'справа';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/sh_RS/description.txt b/plugins/AdminTools/language/sh_RS/description.txt
deleted file mode 100755
index 550ccd93d..000000000
--- a/plugins/AdminTools/language/sh_RS/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Omogućuje obavljanje nekih administrativnih zadataka sa javnih stranica. \ No newline at end of file
diff --git a/plugins/AdminTools/language/sh_RS/index.php b/plugins/AdminTools/language/sh_RS/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/sh_RS/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/sh_RS/plugin.lang.php b/plugins/AdminTools/language/sh_RS/plugin.lang.php
deleted file mode 100755
index ce77c8893..000000000
--- a/plugins/AdminTools/language/sh_RS/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Closed icon position'] = 'Pozicija zatvorenih ikona';
-$lang['Open toolbar by default'] = 'Otvorena traka sa alatkama po pravilu';
-$lang['Combine JS&CSS'] = 'Kombinuj JS i CSS';
-$lang['Debug languages'] = 'Pronađi bagove u jeziku';
-$lang['Debug template'] = 'Pronađi bagove u šablonu';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Omogući "Brze izmene" vlasnicima fotografija koji nisu administratori da urede fotografije';
-$lang['Properties page'] = 'Stranica podešavanja';
-$lang['Quick edit'] = 'Brze izmene';
-$lang['Revert'] = 'Vrati';
-$lang['Save'] = 'Sačuvaj';
-$lang['Save visit in history'] = 'Sačuvaj posete u istoriji';
-$lang['Saved'] = 'Sačuvano';
-$lang['Show SQL queries'] = 'Prikaži SQL upite';
-$lang['View as'] = 'Prikaži kao';
-$lang['Viewing as <b>%s</b>.'] = 'Prikazujem kao <b>%s</b>.';
-$lang['left'] = 'levo';
-$lang['right'] = 'desno'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/sk_SK/description.txt b/plugins/AdminTools/language/sk_SK/description.txt
deleted file mode 100755
index d59177d81..000000000
--- a/plugins/AdminTools/language/sk_SK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Niektoré administrátorské úlohy z verejných stránok \ No newline at end of file
diff --git a/plugins/AdminTools/language/sk_SK/index.php b/plugins/AdminTools/language/sk_SK/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/sk_SK/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/sk_SK/plugin.lang.php b/plugins/AdminTools/language/sk_SK/plugin.lang.php
deleted file mode 100755
index a8d5c51b9..000000000
--- a/plugins/AdminTools/language/sk_SK/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Viewing as <b>%s</b>.'] = 'Predviesť ako <b>%s</b>.';
-$lang['View as'] = 'Ukázať ako';
-$lang['Show SQL queries'] = 'Zobraziť SQL otázky';
-$lang['Save visit in history'] = 'Uložiť návštevy v histórii';
-$lang['Save'] = 'Uložiť';
-$lang['Revert'] = 'Späť';
-$lang['Quick edit'] = 'Rýchla editácia';
-$lang['Properties page'] = 'Vlastnosti stránky';
-$lang['Debug template'] = 'Odstrániť chyby šablón';
-$lang['Debug languages'] = 'Odstrániť chyby jazykov';
-$lang['Combine JS&CSS'] = 'Kombinovať JS&amp;CSS';
-$lang['Saved'] = 'Uložené';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Poskytnúť prístup na rýchlu úpravu fotiek majiteľom, ak nie sú adminom';
-$lang['Open toolbar by default'] = 'Otvoriť prednastavený panel nástrojov';
-$lang['Closed icon position'] = 'Uzavrieť umiestnenie ikony';
-$lang['right'] = 'vpravo';
-$lang['left'] = 'vľavo';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/sl_SI/description.txt b/plugins/AdminTools/language/sl_SI/description.txt
deleted file mode 100755
index 40be2470b..000000000
--- a/plugins/AdminTools/language/sl_SI/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Administracija javnih strani \ No newline at end of file
diff --git a/plugins/AdminTools/language/sl_SI/index.php b/plugins/AdminTools/language/sl_SI/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/sl_SI/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/sl_SI/plugin.lang.php b/plugins/AdminTools/language/sl_SI/plugin.lang.php
deleted file mode 100755
index 7d1c08fef..000000000
--- a/plugins/AdminTools/language/sl_SI/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Kombiniraj JS&amp;CSS';
-$lang['Open toolbar by default'] = 'Privzeto odpri vrstico z orodji';
-$lang['Revert'] = 'Obratno';
-$lang['Properties page'] = 'Lastnosti strani';
-$lang['Save visit in history'] = 'Shrani ogled zgodovine';
-$lang['Viewing as <b>%s</b>.'] = 'Ogled kot <b>%s</b>.';
-$lang['right'] = 'desno';
-$lang['left'] = 'levo';
-$lang['View as'] = 'Poglej kot';
-$lang['Show SQL queries'] = 'Prikaži SQL poizvedbe';
-$lang['Saved'] = 'Shranjeno';
-$lang['Save'] = 'Shrani';
-$lang['Closed icon position'] = 'Zaprta pozicija ikone';
-$lang['Debug languages'] = 'Razhroščevalni jeziki';
-$lang['Debug template'] = 'Razhroščevalna predloga';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Dovoli dostop do hitrega urejanja fotografij lastnikom tudi če nimajo administratorskih pravic';
-$lang['Quick edit'] = 'Hitro urejanje';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/sr_RS/description.txt b/plugins/AdminTools/language/sr_RS/description.txt
deleted file mode 100755
index 45d42b114..000000000
--- a/plugins/AdminTools/language/sr_RS/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Омогућује обављање неких административних задатака са јавних страница. \ No newline at end of file
diff --git a/plugins/AdminTools/language/sr_RS/index.php b/plugins/AdminTools/language/sr_RS/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/sr_RS/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/sr_RS/plugin.lang.php b/plugins/AdminTools/language/sr_RS/plugin.lang.php
deleted file mode 100755
index daea1e9d7..000000000
--- a/plugins/AdminTools/language/sr_RS/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Closed icon position'] = 'Позиција затворених икона';
-$lang['Open toolbar by default'] = 'Отворена трака са алаткама по правилу';
-$lang['Combine JS&CSS'] = 'Комбинуј ЈS и CSS';
-$lang['Debug languages'] = 'Пронађи багове у језику';
-$lang['Debug template'] = 'Пронађи багове у шаблону';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Омогући "Брзе измене" власницима фотографија који нису администратори да уреде фотографије';
-$lang['Properties page'] = 'Страница подешавања';
-$lang['Quick edit'] = 'Брзе измене';
-$lang['Revert'] = 'Врати';
-$lang['Save'] = 'Сачувај';
-$lang['Save visit in history'] = 'Сачувај посете у историји';
-$lang['Saved'] = 'Сачувано';
-$lang['Show SQL queries'] = 'Прикажи SQL упите';
-$lang['View as'] = 'Прикажи као';
-$lang['Viewing as <b>%s</b>.'] = 'Приказујем као <b>%s</b>.';
-$lang['left'] = 'лево';
-$lang['right'] = 'десно'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/sv_SE/description.txt b/plugins/AdminTools/language/sv_SE/description.txt
deleted file mode 100755
index 52525bf68..000000000
--- a/plugins/AdminTools/language/sv_SE/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Admin tools ger möjlighet att utföra vissa adminuppgifter från den publika sidan. \ No newline at end of file
diff --git a/plugins/AdminTools/language/sv_SE/index.php b/plugins/AdminTools/language/sv_SE/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/sv_SE/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/sv_SE/plugin.lang.php b/plugins/AdminTools/language/sv_SE/plugin.lang.php
deleted file mode 100755
index cd398684a..000000000
--- a/plugins/AdminTools/language/sv_SE/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Ge access för snabbändring till foto ägare även om dom inte är administratörer';
-$lang['Closed icon position'] = 'Stängd ikon position';
-$lang['Combine JS&CSS'] = 'Kombinera JS&amp;CSS';
-$lang['Debug languages'] = 'Felsökningsspråk';
-$lang['Debug template'] = 'Felsökningsmall';
-$lang['Open toolbar by default'] = 'Öppna verktygslisten som standard';
-$lang['Properties page'] = 'Sidan för egenskaper';
-$lang['Quick edit'] = 'Snabbändra';
-$lang['Revert'] = 'Återställ';
-$lang['Save'] = 'Spara';
-$lang['Save visit in history'] = 'Spara besök i historien';
-$lang['Saved'] = 'Sparad';
-$lang['Show SQL queries'] = 'Visa SQL frågor';
-$lang['View as'] = 'Visa som';
-$lang['Viewing as <b>%s</b>.'] = 'Visas som <b>%s</b>.';
-$lang['left'] = 'Vänster';
-$lang['right'] = 'Höger';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/ta_IN/description.txt b/plugins/AdminTools/language/ta_IN/description.txt
deleted file mode 100755
index 820d66fbd..000000000
--- a/plugins/AdminTools/language/ta_IN/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-பொது பக்கங்களில் இருந்து சில நிர்வாக பணி செய்ய \ No newline at end of file
diff --git a/plugins/AdminTools/language/ta_IN/index.php b/plugins/AdminTools/language/ta_IN/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/ta_IN/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/ta_IN/plugin.lang.php b/plugins/AdminTools/language/ta_IN/plugin.lang.php
deleted file mode 100755
index 6cec3af3a..000000000
--- a/plugins/AdminTools/language/ta_IN/plugin.lang.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'ஒன்றிணைத்தல் ஜாவா எழுத்தமைவுக்கு & தொடர் உடை தாள்';
-$lang['Closed icon position'] = 'மூடப்பட்ட ஐகான் நிலையில்'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/tr_TR/description.txt b/plugins/AdminTools/language/tr_TR/description.txt
deleted file mode 100755
index aa4d3698c..000000000
--- a/plugins/AdminTools/language/tr_TR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Herkese açık sayfalardan bazı yönetici görevlerini gerçekleştir \ No newline at end of file
diff --git a/plugins/AdminTools/language/tr_TR/index.php b/plugins/AdminTools/language/tr_TR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/tr_TR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/tr_TR/plugin.lang.php b/plugins/AdminTools/language/tr_TR/plugin.lang.php
deleted file mode 100755
index 60f54ac94..000000000
--- a/plugins/AdminTools/language/tr_TR/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['View as'] = 'Bu olarak gör:';
-$lang['Viewing as <b>%s</b>.'] = '<b>%s</b> olarak görülüyor.';
-$lang['Revert'] = 'Geri al';
-$lang['Debug template'] = 'Hata ayıklama şablonu';
-$lang['Debug languages'] = 'Hata ayıklama dili';
-$lang['Properties page'] = 'Özellikler sayfası';
-$lang['Combine JS&CSS'] = 'JS&amp;CSS Birleştir';
-$lang['Show SQL queries'] = 'SQL sorgularını göster';
-$lang['Save visit in history'] = 'Ziyareti geçmiş günlüğüne kaydet';
-$lang['Save'] = 'Kaydet';
-$lang['Quick edit'] = 'Hızlı düzenle';
-$lang['Saved'] = 'Kaydedildi';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Yönetici olmasalar dahi fotoğraf sahiplerine hızlı düzenleme izni ver';
-$lang['right'] = 'sağ';
-$lang['left'] = 'sol';
-$lang['Open toolbar by default'] = 'Araç çubuğunu varsayılan olarak aç';
-$lang['Closed icon position'] = 'Seçilen küçük resim yeri';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/uk_UA/description.txt b/plugins/AdminTools/language/uk_UA/description.txt
deleted file mode 100755
index b8f869e93..000000000
--- a/plugins/AdminTools/language/uk_UA/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Зробити деякі завдання адміністратора від загальнодоступних сторінок. \ No newline at end of file
diff --git a/plugins/AdminTools/language/uk_UA/index.php b/plugins/AdminTools/language/uk_UA/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/uk_UA/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/uk_UA/plugin.lang.php b/plugins/AdminTools/language/uk_UA/plugin.lang.php
deleted file mode 100755
index cfbc3e352..000000000
--- a/plugins/AdminTools/language/uk_UA/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Об’єднати JS&amp;CSS';
-$lang['Debug languages'] = 'Налагодження мов';
-$lang['Debug template'] = 'Налагодження шаблон';
-$lang['Properties page'] = 'Властивості сторінки';
-$lang['Quick edit'] = 'Швидке редагування';
-$lang['Revert'] = 'Повернутися';
-$lang['Save'] = 'Зберегти';
-$lang['Save visit in history'] = 'Збережіть візит в історії';
-$lang['Saved'] = 'Збережено';
-$lang['Show SQL queries'] = 'Показати SQL запити';
-$lang['View as'] = 'Переглянути, як';
-$lang['Viewing as <b>%s</b>.'] = 'Перегляд у вигляді <b>%s</b>.';
-$lang['Closed icon position'] = 'Закрита позиція значка';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Надати доступ до швидкого редагування фото власникам, навіть якщо вони не адміністратори';
-$lang['Open toolbar by default'] = 'За замовчуванням відкрита панель інструментів ';
-$lang['left'] = 'ліво';
-$lang['right'] = 'право';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/vi_VN/description.txt b/plugins/AdminTools/language/vi_VN/description.txt
deleted file mode 100755
index e821841da..000000000
--- a/plugins/AdminTools/language/vi_VN/description.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Do some admin task from the public pages
-Thực thi một vài nhiệm vụ quản trị từ các trang công khai \ No newline at end of file
diff --git a/plugins/AdminTools/language/vi_VN/index.php b/plugins/AdminTools/language/vi_VN/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/vi_VN/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/vi_VN/plugin.lang.php b/plugins/AdminTools/language/vi_VN/plugin.lang.php
deleted file mode 100755
index 80b501059..000000000
--- a/plugins/AdminTools/language/vi_VN/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = 'Kết hợp JS&amp;CSS';
-$lang['Debug languages'] = 'Ngôn ngữ gỡ rối';
-$lang['Debug template'] = 'Mẫu gỡ rối';
-$lang['Properties page'] = 'Trang thuộc tính';
-$lang['Quick edit'] = 'Sửa nhanh';
-$lang['Revert'] = 'Quay lại';
-$lang['Save'] = 'Lưu';
-$lang['Save visit in history'] = 'Lưu lượt xem trong lịch sử';
-$lang['Show SQL queries'] = 'Hiển thị các truy vấn SQL';
-$lang['View as'] = 'Xem dưới dạng';
-$lang['Viewing as <b>%s</b>.'] = 'Đang xem dưới dạng <b>%s</b>.';
-$lang['Saved'] = 'Đã lưu';
-$lang['Closed icon position'] = 'Vị trí biểu tượng đã đóng';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = 'Cho truy xuất để chỉnh sửa nhanh hình ảnh với cả người dùng không phải là quản trị viên';
-$lang['Open toolbar by default'] = 'Mở thanh công cụ một cách mặc định';
-$lang['left'] = 'trái';
-$lang['right'] = 'phải'; \ No newline at end of file
diff --git a/plugins/AdminTools/language/zh_CN/description.txt b/plugins/AdminTools/language/zh_CN/description.txt
deleted file mode 100755
index cea835cde..000000000
--- a/plugins/AdminTools/language/zh_CN/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-于前台页面执行一些管理任务。 \ No newline at end of file
diff --git a/plugins/AdminTools/language/zh_CN/index.php b/plugins/AdminTools/language/zh_CN/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/zh_CN/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/zh_CN/plugin.lang.php b/plugins/AdminTools/language/zh_CN/plugin.lang.php
deleted file mode 100755
index 37702a175..000000000
--- a/plugins/AdminTools/language/zh_CN/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = '合并JS与CSS';
-$lang['Debug languages'] = '调试语言';
-$lang['Debug template'] = '调试模板';
-$lang['Properties page'] = '属性页';
-$lang['Quick edit'] = '快捷编辑';
-$lang['Revert'] = '恢复';
-$lang['Save'] = '保存';
-$lang['Save visit in history'] = '在历史中保存访问';
-$lang['Show SQL queries'] = '显示SQL查询';
-$lang['View as'] = '以…查看:';
-$lang['Viewing as <b>%s</b>.'] = '正以…查看: <b>%s</b>.';
-$lang['Saved'] = '保存';
-$lang['Closed icon position'] = '关闭图标位置';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = '给予图片所有者快速修改权限,即使他们不是管理员';
-$lang['Open toolbar by default'] = '默认打开工具栏';
-$lang['left'] = '左';
-$lang['right'] = '右';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/zh_HK/description.txt b/plugins/AdminTools/language/zh_HK/description.txt
deleted file mode 100755
index 095ac352f..000000000
--- a/plugins/AdminTools/language/zh_HK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-在公開頁面做一些管理任務 \ No newline at end of file
diff --git a/plugins/AdminTools/language/zh_HK/index.php b/plugins/AdminTools/language/zh_HK/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/zh_HK/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/zh_HK/plugin.lang.php b/plugins/AdminTools/language/zh_HK/plugin.lang.php
deleted file mode 100755
index 8c764cce1..000000000
--- a/plugins/AdminTools/language/zh_HK/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Combine JS&CSS'] = '結合JS和CSS';
-$lang['Debug languages'] = '除錯語言';
-$lang['Debug template'] = '除錯模板';
-$lang['Properties page'] = '屬性頁';
-$lang['Quick edit'] = '快速編輯';
-$lang['Revert'] = '還原';
-$lang['Save'] = '儲存';
-$lang['Save visit in history'] = '保存訪問歷史';
-$lang['Show SQL queries'] = '顯示SQL查詢';
-$lang['View as'] = '查看為';
-$lang['Viewing as <b>%s</b>.'] = '查看為<b>%s的</b>。';
-$lang['Saved'] = '已儲存';
-$lang['Closed icon position'] = '關閉圖標位置';
-$lang['Give access to quick edit to photo owners even if they are not admin'] = '給訪客快速編輯為照片擁有人,即使他們不是管理員';
-$lang['Open toolbar by default'] = '默認打開工具欄';
-$lang['left'] = '左';
-$lang['right'] = '右';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/language/zh_TW/description.txt b/plugins/AdminTools/language/zh_TW/description.txt
deleted file mode 100755
index f00b68e96..000000000
--- a/plugins/AdminTools/language/zh_TW/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-在公共頁面做一些管理任務 \ No newline at end of file
diff --git a/plugins/AdminTools/language/zh_TW/index.php b/plugins/AdminTools/language/zh_TW/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/language/zh_TW/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/language/zh_TW/plugin.lang.php b/plugins/AdminTools/language/zh_TW/plugin.lang.php
deleted file mode 100755
index e94bcf9c2..000000000
--- a/plugins/AdminTools/language/zh_TW/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Give access to quick edit to photo owners even if they are not admin'] = '即使他們不是管理員,給與照片擁有者的快速編輯權限';
-$lang['Closed icon position'] = '圖標位置已關閉';
-$lang['Combine JS&CSS'] = '結合JS和CSS';
-$lang['Debug languages'] = '調試語言';
-$lang['Debug template'] = '調試模板';
-$lang['Open toolbar by default'] = '在默認情況下打開工具欄';
-$lang['Properties page'] = '屬性頁';
-$lang['Quick edit'] = '快速編輯';
-$lang['Revert'] = '還原';
-$lang['Save'] = '儲存';
-$lang['Save visit in history'] = '保存訪問歷史';
-$lang['Saved'] = '已保存';
-$lang['Show SQL queries'] = '顯示SQL查詢';
-$lang['View as'] = '查看';
-$lang['Viewing as <b>%s</b>.'] = '查看為 <b>%s</b>.';
-$lang['left'] = '左';
-$lang['right'] = '右';
-?> \ No newline at end of file
diff --git a/plugins/AdminTools/main.inc.php b/plugins/AdminTools/main.inc.php
deleted file mode 100644
index 5928dd596..000000000
--- a/plugins/AdminTools/main.inc.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-/*
-Plugin Name: Admin Tools
-Version: 2.7.3
-Description: Do some admin task from the public pages
-Plugin URI: http://piwigo.org/ext/extension_view.php?eid=720
-Author: Piwigo team
-Author URI: http://piwigo.org
-*/
-
-defined('PHPWG_ROOT_PATH') or die('Hacking attempt!');
-
-define('ADMINTOOLS_ID', basename(dirname(__FILE__)));
-define('ADMINTOOLS_PATH' , PHPWG_PLUGINS_PATH . ADMINTOOLS_ID . '/');
-define('ADMINTOOLS_ADMIN', get_root_url() . 'admin.php?page=plugin-' . ADMINTOOLS_ID);
-
-include_once(ADMINTOOLS_PATH . 'include/events.inc.php');
-include_once(ADMINTOOLS_PATH . 'include/MultiView.class.php');
-
-
-global $MultiView;
-$MultiView = new MultiView();
-
-add_event_handler('init', 'admintools_init');
-
-add_event_handler('user_init', array(&$MultiView, 'user_init'));
-add_event_handler('init', array(&$MultiView, 'init'));
-
-add_event_handler('ws_add_methods', array('MultiView', 'register_ws'));
-add_event_handler('delete_user', array('MultiView', 'invalidate_cache'));
-add_event_handler('register_user', array('MultiView', 'invalidate_cache'));
-
-if (!defined('IN_ADMIN'))
-{
- add_event_handler('loc_after_page_header', 'admintools_add_public_controller');
- add_event_handler('loc_begin_picture', 'admintools_save_picture');
- add_event_handler('loc_begin_index', 'admintools_save_category');
-}
-else
-{
- add_event_handler('loc_begin_page_header', 'admintools_add_admin_controller_setprefilter');
- add_event_handler('loc_after_page_header', 'admintools_add_admin_controller');
- add_event_handler('get_admin_plugin_menu_links', 'admintools_admin_link');
-}
-
-
-function admintools_init()
-{
- global $conf;
- $conf['AdminTools'] = safe_unserialize($conf['AdminTools']);
-
- load_language('plugin.lang', ADMINTOOLS_PATH);
-}
-
-function admintools_admin_link($menu)
-{
- $menu[] = array(
- 'NAME' => 'Admin Tools',
- 'URL' => ADMINTOOLS_ADMIN,
- );
-
- return $menu;
-}
diff --git a/plugins/AdminTools/maintain.class.php b/plugins/AdminTools/maintain.class.php
deleted file mode 100644
index 2e89968fd..000000000
--- a/plugins/AdminTools/maintain.class.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-defined('PHPWG_ROOT_PATH') or die('Hacking attempt!');
-
-class AdminTools_maintain extends PluginMaintain
-{
- private $default_conf = array(
- 'default_open' => true,
- 'closed_position' => 'left',
- 'public_quick_edit' => true,
- );
-
- function install($plugin_version, &$errors=array())
- {
- global $conf;
-
- if (empty($conf['AdminTools']))
- {
- conf_update_param('AdminTools', $this->default_conf, true);
- }
- }
-
- function update($old_version, $new_version, &$errors=array())
- {
- $this->install($new_version, $errors);
- }
-
- function uninstall()
- {
- conf_delete_param('AdminTools');
- }
-}
diff --git a/plugins/AdminTools/template/admin.tpl b/plugins/AdminTools/template/admin.tpl
deleted file mode 100644
index b82b3fd24..000000000
--- a/plugins/AdminTools/template/admin.tpl
+++ /dev/null
@@ -1,60 +0,0 @@
-{html_style}
-.graphicalCheckbox {
- font-size:16px;
- line-height:16px;
-}
-
-.graphicalCheckbox + input {
- display:none;
-}
-{/html_style}
-
-{footer_script}
-jQuery('#ato-config input[type=checkbox]').change(function() {
- jQuery(this).prev().toggleClass('icon-check icon-check-empty');
-});
-jQuery('#ato-config input[type=radio]').change(function() {
- jQuery('#ato-config input[type=radio][name='+ $(this).attr('name') +']').prev().toggleClass('icon-check icon-check-empty');
-});
-{/footer_script}
-
-<div class="titrePage">
- <h2>Admin Tools</h2>
-</div>
-
-<form method="post" action="" class="properties" id="ato-config">
-<fieldset>
- <legend>{'Configuration'|translate}</legend>
- <ul>
- <li>
- <label>
- <span class="graphicalCheckbox icon-check{if not $AdminTools.default_open}-empty{/if}"></span>
- <input type="checkbox" name="default_open"{if $AdminTools.default_open} checked="checked"{/if}>
- <b>{'Open toolbar by default'|translate}</b>
- </label>
- </li>
- <li>
- <label>
- <span class="graphicalCheckbox icon-check{if not $AdminTools.public_quick_edit}-empty{/if}"></span>
- <input type="checkbox" name="public_quick_edit"{if $AdminTools.public_quick_edit} checked="checked"{/if}>
- <b>{'Give access to quick edit to photo owners even if they are not admin'|translate}</b>
- </label>
- </li>
- <li>
- <b>{'Closed icon position'|translate} :</b>
- <label>
- <span class="graphicalCheckbox icon-check{if $AdminTools.closed_position!='left'}-empty{/if}"></span>
- <input type="radio" name="closed_position" value="left"{if $AdminTools.closed_position=='left'} checked="checked"{/if}>
- {'left'|translate}
- </label>
- <label>
- <span class="graphicalCheckbox icon-check{if $AdminTools.closed_position!='right'}-empty{/if}"></span>
- <input type="radio" name="closed_position" value="right"{if $AdminTools.closed_position=='right'} checked="checked"{/if}>
- {'right'|translate}
- </label>
- </li>
- </ul>
-</fieldset>
-
-<p class="formButtons"><input type="submit" name="save_config" value="{'Save Settings'|translate}"></p>
-</form> \ No newline at end of file
diff --git a/plugins/AdminTools/template/admin_controller.js b/plugins/AdminTools/template/admin_controller.js
deleted file mode 100644
index 73f7b1096..000000000
--- a/plugins/AdminTools/template/admin_controller.js
+++ /dev/null
@@ -1,118 +0,0 @@
-var AdminTools = function($) {
- var __this = this;
-
- this.urlWS;
- this.urlSelf;
- this.multiView;
-
- var $ato = $('#ato_container');
-
- // fill multiview selects
- // data came from AJAX request or sessionStorage
- function populateMultiView() {
- var $multiview = $ato.find('.multiview');
-
- if ($multiview.data('init')) return;
-
- var render = function(data) {
- var html = '';
- $.each(data.users, function(i, user) {
- if (user.status == 'webmaster' || user.status == 'admin') {
- html+= '<option value="'+ user.id +'">'+ user.username +'</option>';
- }
- });
- $multiview.find('select[data-type="view_as"]').html(html)
- .val(__this.multiView.view_as);
-
- html = '';
- $.each(['clear','roma'], function(i, theme) {
- html+= '<option value="'+ theme +'">'+ theme +'</option>';
- });
- $multiview.find('select[data-type="theme"]').html(html)
- .val(__this.multiView.theme);
-
- html = '';
- $.each(data.languages, function(i, language) {
- html+= '<option value="'+ language.id +'">'+ language.name +'</option>';
- });
- $multiview.find('select[data-type="lang"]').html(html)
- .val(__this.multiView.lang);
-
- $multiview.data('init', true);
-
- $multiview.find('.switcher').show();
- };
-
- if ('sessionStorage' in window && window.sessionStorage.multiView != undefined) {
- render(JSON.parse(window.sessionStorage.multiView));
- }
- else {
- $.ajax({
- method: 'POST',
- url: __this.urlWS + 'multiView.getData',
- dataType: 'json',
- success: function(data) {
- render(data.result);
- if ('sessionStorage' in window) {
- window.sessionStorage.multiView = JSON.stringify(data.result);
- }
- },
- error: function(xhr, text, error) {
- alert(text + ' ' + error);
- }
- });
- }
- }
-
- // delete session cache
- this.deleteCache = function() {
- if ('sessionStorage' in window) {
- window.sessionStorage.removeItem('multiView');
- }
- };
-
- // attach jquery handlers
- this.init = function(open) {
- $('.multiview').appendTo($ato);
-
- /* <!-- sub menus --> */
- $ato.on({
- 'click': function(e) {
- populateMultiView();
- $(this).find('ul').toggle();
- },
- 'mouseleave': function(e) {
- if (e.target.tagName.toLowerCase() != "select") {
- $(this).find('ul').hide();
- }
- }
- });
- $ato.find('>a').on('click', function(e) {
- e.preventDefault();
- });
- $ato.find('ul').on('mouseleave', function(e) {
- if (e.target.tagName.toLowerCase() != "select") {
- $(this).hide();
- }
- });
-
- /* <!-- select boxes --> */
- $ato.find('.switcher').on({
- 'change': function() {
- if ($(this).data('type') == 'theme') {
- if ($(this).val() != __this.multiView.theme) {
- window.location.href = __this.urlSelf + 'change_theme=1';
- }
- }
- else {
- window.location.href = __this.urlSelf + 'ato_'+ $(this).data('type') +'='+ $(this).val();
- }
- },
- 'click': function(e) {
- e.stopPropagation();
- }
- });
- };
-
- return this;
-}(jQuery); \ No newline at end of file
diff --git a/plugins/AdminTools/template/admin_controller.tpl b/plugins/AdminTools/template/admin_controller.tpl
deleted file mode 100644
index ddc0bc2c9..000000000
--- a/plugins/AdminTools/template/admin_controller.tpl
+++ /dev/null
@@ -1,39 +0,0 @@
-{strip}
-{combine_css path=$ADMINTOOLS_PATH|cat:'template/admin_style.css'}
-{combine_css path=$ADMINTOOLS_PATH|cat:'template/fontello/css/fontello-ato.css'}
-{combine_script id='admintools.controller' load='footer' require='jquery' path=$ADMINTOOLS_PATH|cat:'template/admin_controller.js'}
-{/strip}
-
-{footer_script require='admintools.controller'}
-AdminTools.urlWS = '{$ROOT_URL}ws.php?format=json&method=';
-AdminTools.urlSelf = '{$ato.U_SELF}';
-
-AdminTools.multiView = {
- view_as: {$ato.MULTIVIEW.view_as},
- theme: '{$themeconf.name}',
- lang: '{$ato.MULTIVIEW.lang}'
-};
-
-{if $ato.DELETE_CACHE}
- AdminTools.deleteCache();
-{/if}
- AdminTools.init();
-{/footer_script}
-
-<ul class="multiview">
- <li><label>{'View as'|translate}</label>
- <select class="switcher" data-type="view_as"></select>
- </li>
- <li><label>{'Theme'|translate}</label>
- <select class="switcher" data-type="theme"></select>
- </li>
- <li><label>{'Language'|translate}</label>
- <select class="switcher" data-type="lang"></select>
- </li>
- <li><a class="icon-check{if !$ato.MULTIVIEW.show_queries}-empty{/if}" href="{$ato.U_SELF}ato_show_queries={(int)!$ato.MULTIVIEW.show_queries}">{'Show SQL queries'|translate}</a></li>
- <li><a class="icon-check{if !$ato.MULTIVIEW.debug_l10n}-empty{/if}" href="{$ato.U_SELF}ato_debug_l10n={(int)!$ato.MULTIVIEW.debug_l10n}">{'Debug languages'|translate}</a></li>
- <li><a class="icon-check{if !$ato.MULTIVIEW.debug_template}-empty{/if}" href="{$ato.U_SELF}ato_debug_template={(int)!$ato.MULTIVIEW.debug_template}">{'Debug template'|translate}</a></li>
- <li><a class="icon-check{if !$ato.MULTIVIEW.template_combine_files}-empty{/if}" href="{$ato.U_SELF}ato_template_combine_files={(int)!$ato.MULTIVIEW.template_combine_files}">{'Combine JS&CSS'|translate}</a></li>
- <li><a class="icon-check{if $ato.MULTIVIEW.no_history}-empty{/if}" href="{$ato.U_SELF}ato_no_history={(int)!$ato.MULTIVIEW.no_history}">{'Save visit in history'|translate}</a></li>
- <li><a class="icon-ato-null" href="{$ato.U_SELF}ato_purge_template=1">{'Purge compiled templates'|translate}</a></li>
-</ul> \ No newline at end of file
diff --git a/plugins/AdminTools/template/admin_style.css b/plugins/AdminTools/template/admin_style.css
deleted file mode 100644
index 76f0cae2c..000000000
--- a/plugins/AdminTools/template/admin_style.css
+++ /dev/null
@@ -1,68 +0,0 @@
-.icon-ato-null:before { content:' '; }
-
-#ato_container {
- display:inline-block;
- position:relative;
-}
-
-.multiview {
- display:none;
- z-index:1000;
-}
-
-#ato_container>ul {
- position:absolute;
- top:27px;
- left:auto;
- right:0;
- background:#fefefe;
- padding:0;
- margin:0;
- box-shadow:3px 3px 5px rgba(0,0,0,0.5);
-}
- #ato_container>ul li {
- list-style:none;
- line-height:16px;
- font-size:13px;
- white-space:nowrap;
- }
- #ato_container>ul li>* {
- display:inline-block;
- padding:5px 10px;
- border:none;
- text-decoration:none;
- color:#444;
- text-shadow:1px 1px 0px #eee;
- }
- #ato_container>ul li>*:before {
- font-size:16px;
- margin-right:0.5em;
- }
- #ato_container>ul li:hover {
- background:#dedede;
- }
- #ato_container>ul label {
- font-weight:bold;
- color:#777;
- display:inline-block;
- width:80px;
- padding:5px;
- text-align:right;
- font-size:11px;
- }
- #ato_container>ul select, #ato_container>ul option {
- font-size:13px;
- line-height:15px;
- color:#444;
- background:#fefefe;
- border-radius:2px;
- text-shadow:none;
- }
- #ato_container>ul select {
- border:1px solid #777;
- height:22px;
- padding:2px 3px;
- }
- #ato_container .switcher {
- display:none;
- } \ No newline at end of file
diff --git a/plugins/AdminTools/template/fontello/LICENSE.txt b/plugins/AdminTools/template/fontello/LICENSE.txt
deleted file mode 100644
index 4b7ab412b..000000000
--- a/plugins/AdminTools/template/fontello/LICENSE.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-Font license info
-
-
-## Font Awesome
-
- Copyright (C) 2012 by Dave Gandy
-
- Author: Dave Gandy
- License: SIL ()
- Homepage: http://fortawesome.github.com/Font-Awesome/
-
-
-## Entypo
-
- Copyright (C) 2012 by Daniel Bruce
-
- Author: Daniel Bruce
- License: CC BY-SA (http://creativecommons.org/licenses/by-sa/2.0/)
- Homepage: http://www.entypo.com
-
-
-## Iconic
-
- Copyright (C) 2012 by P.J. Onori
-
- Author: P.J. Onori
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://somerandomdude.com/work/iconic/
-
-
-## MFG Labs
-
- Copyright (C) 2012 by Daniel Bruce
-
- Author: MFG Labs
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://www.mfglabs.com/
-
-
diff --git a/plugins/AdminTools/template/fontello/README.txt b/plugins/AdminTools/template/fontello/README.txt
deleted file mode 100644
index 43e23f283..000000000
--- a/plugins/AdminTools/template/fontello/README.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-This webfont is generated by http://fontello.com open source project.
-
-
-================================================================================
-Please, note, that you should obey original font licences, used to make this
-webfont pack. Details available in LICENSE.txt file.
-
-- Usually, it's enough to publish content of LICENSE.txt file somewhere on your
- site in "About" section.
-
-- If your project is open-source, usually, it will be ok to make LICENSE.txt
- file publically available in your repository.
-
-- Fonts, used in Fontello, don't require to make clickable links on your site.
- But any kind of additional authors crediting is welcome.
-================================================================================
-
-
-Comments on archive content
----------------------------
-
-- /font/* - fonts in different formats
-
-- /css/* - different kinds of css, for all situations. Should be ok with
- twitter bootstrap. Also, you can skip <i> style and assign icon classes
- directly to text elements, if you don't mind about IE7.
-
-- demo.html - demo file, to show your webfont content
-
-- LICENSE.txt - license info about source fonts, used to build your one.
-
-- config.json - keeps your settings. You can import it back to fontello anytime,
- to continue your work
-
-
-Why so many CSS files ?
------------------------
-
-Because we like to fit all your needs :)
-
-- basic file, <your_font_name>.css - is usually enougth, in contains @font-face
- and character codes definition
-
-- *-ie7.css - if you need IE7 support, but still don't wish to put char codes
- directly into html
-
-- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face
- rules, but still wish to benefit of css generation. That can be very
- convenient for automated assets build systems. When you need to update font -
- no needs to manually edit files, just override old version with archive
- content. See fontello source codes for example.
-
-- *-embedded.css - basic css file, but with embedded WOFF font, to avoid
- CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain.
- We strongly recommend to resolve this issue by `Access-Control-Allow-Origin`
- server headers. But if you ok with dirty hack - this file is for you. Note,
- that data url moved to separate @font-face to avoid problems with <IE9, when
- string is too long.
-
-- animate.css - use it to get ideas about spinner rotation animation.
-
-
-Attention for server setup
---------------------------
-
-You MUST setup server to reply with proper `mime-types` for font files. In other
-case, some browsers will fail to show fonts.
-
-Usually, `apache` already has necessary settings, but `nginx` and other
-webservers should be tuned. Here is list of mime types for our file extentions:
-
-- `application/vnd.ms-fontobject` - eot
-- `application/x-font-woff` - woff
-- `application/x-font-ttf` - ttf
-- `image/svg+xml` - svg
diff --git a/plugins/AdminTools/template/fontello/config.json b/plugins/AdminTools/template/fontello/config.json
deleted file mode 100644
index 5beaa1e68..000000000
--- a/plugins/AdminTools/template/fontello/config.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "name": "fontello-ato",
- "css_prefix_text": "icon-ato-",
- "css_use_suffix": false,
- "hinting": true,
- "units_per_em": 1000,
- "ascent": 850,
- "glyphs": [
- {
- "uid": "c08a1cde48d96cba21d8c05fa7d7feb1",
- "css": "doc-text-inv",
- "code": 59392,
- "src": "fontawesome"
- },
- {
- "uid": "3212f42c65d41ed91cb435d0490e29ed",
- "css": "flash",
- "code": 59393,
- "src": "fontawesome"
- },
- {
- "uid": "978aa8facd816df874039e139cb0cdde",
- "css": "trophy",
- "code": 59395,
- "src": "entypo"
- },
- {
- "uid": "11e664deed5b2587456a4f9c01d720b6",
- "css": "cancel",
- "code": 59397,
- "src": "iconic"
- },
- {
- "uid": "ce50292e85eb5d6ee3be61b32bf2bdf3",
- "css": "ok",
- "code": 59394,
- "src": "mfglabs"
- }
- ]
-} \ No newline at end of file
diff --git a/plugins/AdminTools/template/fontello/css/animation.css b/plugins/AdminTools/template/fontello/css/animation.css
deleted file mode 100644
index ac5a9562f..000000000
--- a/plugins/AdminTools/template/fontello/css/animation.css
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- Animation example, for spinners
-*/
-.animate-spin {
- -moz-animation: spin 2s infinite linear;
- -o-animation: spin 2s infinite linear;
- -webkit-animation: spin 2s infinite linear;
- animation: spin 2s infinite linear;
- display: inline-block;
-}
-@-moz-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-webkit-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-o-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-ms-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
diff --git a/plugins/AdminTools/template/fontello/css/fontello-ato-codes.css b/plugins/AdminTools/template/fontello/css/fontello-ato-codes.css
deleted file mode 100644
index 1260f0d4d..000000000
--- a/plugins/AdminTools/template/fontello/css/fontello-ato-codes.css
+++ /dev/null
@@ -1,6 +0,0 @@
-
-.icon-ato-doc-text-inv:before { content: '\e800'; } /* '' */
-.icon-ato-flash:before { content: '\e801'; } /* '' */
-.icon-ato-trophy:before { content: '\e803'; } /* '' */
-.icon-ato-cancel:before { content: '\e805'; } /* '' */
-.icon-ato-ok:before { content: '\e802'; } /* '' */ \ No newline at end of file
diff --git a/plugins/AdminTools/template/fontello/css/fontello-ato-embedded.css b/plugins/AdminTools/template/fontello/css/fontello-ato-embedded.css
deleted file mode 100644
index ca5ee63e6..000000000
--- a/plugins/AdminTools/template/fontello/css/fontello-ato-embedded.css
+++ /dev/null
@@ -1,59 +0,0 @@
-@font-face {
- font-family: 'fontello-ato';
- src: url('../font/fontello-ato.eot?11995162');
- src: url('../font/fontello-ato.eot?11995162#iefix') format('embedded-opentype'),
- url('../font/fontello-ato.svg?11995162#fontello-ato') format('svg');
- font-weight: normal;
- font-style: normal;
-}
-@font-face {
- font-family: 'fontello-ato';
- src: url('data:application/octet-stream;base64,d09GRgABAAAAAAxMAA4AAAAAE8gAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWPihIlWNtYXAAAAGIAAAAOwAAAVLoGenRY3Z0IAAAAcQAAAAUAAAAHAaH/wZmcGdtAAAB2AAABPkAAAmRigp4O2dhc3AAAAbUAAAACAAAAAgAAAAQZ2x5ZgAABtwAAAK0AAADJhBA1rZoZWFkAAAJkAAAADUAAAA2AEgnW2hoZWEAAAnIAAAAIAAAACQHRwNTaG10eAAACegAAAAYAAAAGBLzAABsb2NhAAAKAAAAAA4AAAAOAvsCOG1heHAAAAoQAAAAIAAAACAA4gn1bmFtZQAACjAAAAF/AAAC/WmIJq5wb3N0AAALsAAAAEMAAABUT4FQyHByZXAAAAv0AAAAVgAAAFaSoZr/eJxjYGTWZJzAwMrAwVTFtIeBgaEHQjM+YDBkZGJgYGJgZWbACgLSXFMYHF4wvGBlDvqfxRDFrMUwDSjMCJIDAM2ACzt4nGNgYGBmgGAZBkYGEPAB8hjBfBYGAyDNAYRMIIkXzC9Y//8HsxggLAlGCQaoLjBgZGMY8QAA1OUIuAB4nGNgQANGDEbMWv+zQBgAEEADkXicnVXZdtNWFJU8ZHASOmSgoA7X3DhQ68qEKRgwaSrFdiEdHAitBB2kDHTkncc+62uOQrtWH/m07n09JLR0rbYsls++R1tn2DrnRhwjKn0aiGvUoZKXA6msPZZK90lc13Uvj5UMBnFdthJPSZuonSRKat3sUC7xWOsqWSdYJ+PlIFZPVZ5noAziFB5lSUQbRBuplyZJ4onjJ4kWZxAfJUkgJaMQp9LIUEI1GsRS1aFM6dCr1xNx00DKRqMedVhU90PFJ8c1p9SsA0YqVznCFevVRr4bpwMve5DEOsGzrYcxHnisfpQqkIqR6cg/dkpOlIaBVHHUoVbi6DCTX/eRTCrNQKaMYkWl7oG43f102xYxPXQ6vi5KlUaqurnOKJrt0fGogygP2cbppNzQ2fbw5RlTVKtdcbPtQGYNXErJbHSfRAAdJlLj6QFONZwCqRn1R8XZ588BEslclKo8VTKHegOZMzt7cTHtbiersnCknwcyb3Z2452HQ6dXh3/R+hdM4cxHj+Jifj5C+lBqfiJOJKVGWMzyp4YfcVcgQrkxiAsXyuBThDl0RdrZZl3jtTH2hs/5SqlhPQna6KP4fgr9TiQrHGdRo/VInM1j13Wt3GdQS7W7Fzsyr0OVIu7vCwuuM+eEYZ4WC1VfnvneBTT/Bohn/EDeNIVL+5YpSrRvm6JMu2iKCu0SVKVdNsUU7YoppmnPmmKG9h1TzNKeMzLj/8vc55H7HN7xkJv2XeSmfQ+5ad9HbtoPkJtWITdtHblpLyA3rUZu2lWjOnYEGgZpF1IVQdA0svph3Fab9UDWjDR8aWDyLmLI+upER521tcofxX914gsHcmmip7siF5viLq/bFj483e6rj5pG3bDV+MaR8jAeRnocmtBZ+c3hv+1N3S6a7jKqMugBFUwKwABl7UAC0zrbCaT1mqf48gdgXIZ4zkpDtVSfO4am7+V5X/exOfG+x+3GLrdcd3kJWdYNcmP28N9SZKrrH+UtrVQnR6wrJ49VaxhDKrwour6SlHu0tRu/KKmy8l6U1srnk5CbPYMbQlu27mGwI0xpyiUeXlOlKD3UUo6yQyxvKco84JSLC1qGxLgOdQ9qa8TpoXoYGwshhqG0vRBwSCldFd+0ynfxHqtr2Oj4xRXh6XpyEhGf4ir7UfBU10b96A7avGbdMoMpVaqn+4xPsa/b9lFZaaSOsxe3VAfXNOsaORXTT+Rr4HRvOGjdAz1UfDRBI1U1x+jGKGM0ljXl3wR0MVZ+w2jVYvs93E+dpFWsuUuY7JsT9+C0u/0q+7WcW0bW/dcGvW3kip8jMb8tCvw7B2K3ZA3UO5OBGAvIWdAYxhYmdxiug23EbfY/Jqf/34aFRXJXOxq7eerD1ZNRJXfZ8rjLTXZZ16M2R9VOGvsIjS0PN+bY4XIstsRgQbb+wf8x7gF3aVEC4NDIZZiI2nShnurh6h6rsW04VxIBds2x43QAegAuQd8cu9bzCYD13CPnLsB9cgh2yCH4lByCz8i5BfA5OQRfkEMwIIdgl5w7AA/IIXhIDsEeOQSPyNkE+JIcgq/IIYjJIUjIuQ3wmByCJ+QQfE0OwTdGrk5k/pYH2QD6zqKbQKmdGhzaOGRGrk3Y+zxY9oFFZB9aROqRkesT6lMeLPV7i0j9wSJSfzRyY0L9iQdL/dkiUn+xiNRnxpeZIymvDp7zjg7+BJfqrV4AAAAAAQAB//8AD3icVVFNaBNREJ55b/e97caujd1ssm1Mt/nb0Ng03aS7ocEQ0xB7qFrswVqXopdSchAPBaGIBykFvQhe9NAWPHgRUURUPHsTBfHiyYvoJYX2VvTQjS89iA5vPr6ZObyZ7wMJoPuSfKAhOA4jMAkVaNbPlJHL2ACZy23gjLcVZEAoIz5QAKRwBVCS8AIgSgsgoXTWskqONWkVM1MiSn2RfGaqnE2NJtlJ1I3SqOOexv9rL6wzUWftcNktjYZFMzMaNkbQIFWVBzcVVVXwLlf/5fcT0cPH0QRaBk6ILAQ/xuPP4xfTvXkPHv5lH4OGYVkG2TOs4LNhzWJcib8YFpt3g24bf4lbLRir23GVIBVnUoKE4iogEIQVIAQWACAETdu1dWkwjwZHlrIL6A1ylkraWW+whlV0jIjOqeeWHNxTWfCFDyh9Krn+ncgqV+kNoilvQxq5+k0mIWKE+g/XNaQDCr6vIFf68ZOiaqrEgsAl4mMR9BF5AmGI183+3iINQIJtIEDaYnhNj+j0RD6sC4UcD91yNsnRziZZ7CA2G8PfptMyg5l3ZsvBhZS5b5q4H2sVzeDc61gRoOfxA7pBx8CGcZiGOszU67XcMZSAYYMi9nEiMZQuAwPxLikoy2RBCKHKzWp1olCtV+tT5cL0xPSpfCI+PGRGDXUgn4kkMKKzZHaq7HrCbrtABauia0VLPW00wjX0auilGE1qqCfQqWG5gHICo1kbg5Z/582GP9uYr9QWc4b2rIibxaeakVusVc437s37ym12UPPTaf9WD4JZxZ8vss2GUrTSrpu2ikrDabppZ3l9TtN9X9fm1peddLn1obK2tINSIjmUTBzBytJaZXWnJ7HQufuVjpCfwlz2iiPm8hluc9uzvagX5XRkq7O71els7Xa2Omvbu7vbnc4Rwh9T/JdqeJxjYGRgYADihTPXzIrnt/nKwM38AijCcO5knyCEDr34/9//LOYZzFpALgcDE0gUAI3zDkMAAAB4nGNgZGBgDvqfxRDF/IKB4f8v5hkMQBEUwAYAivQFoAPoAAACygAAAfQAAAOYAAADhAAAAzEAAAAAAAAAdgDCAPIBdgGTAAAAAQAAAAYAQQAEAAAAAAACABQAIQBuAAAAVQmRAAAAAHicdZDLTsJAFIb/4WYE40IT485ZGYih3GJMWGGI4JoYdiYWKG2xdMh0wPAMvoU+g6/je7jzp4yGaGjTzne+c87cAJzgEwLb55rflgWOGG05gwPcWs7S31vOkR8s51HCk+UC/bPlIq7wYrmEU7xxBpE7ZDTDh2WBc3FhOYNjcWM5S39nOUd+tJzHmVhaLtC/Wi5iKN4tl3ApvrpqsdahHxhZ7lZks95oydFaKqowdiPpLk2gdCI7cqpi40WRcsZq/sNV16iB5y8jV++qXR56OglVLBtOfVf3vdjTrvEmm9WSld80ZiqnWs1lz1bJhVYzb2ycwJhFu1bbXR9dKCywhkYIHwEMJMq0FY5N1NFAizRihWTltipEDBcRjYslO4I0kzDu8Jsyimk9VkRkB2P+5/98ld2G44DG5zwRY723ap8f0mzWDtO85H4d7npfdZ8mTjvcNDv5PVuCFXfRpDXs3pxCp7uW6P2ZS/K+NrkZzZjeSW/N0LZR47vn/N8IaJFpAHicY2BigAAuBuyAjYGBkYmRmZGFkZWRjSclP1m3JLWiRDczr4w1LSexOIMpP5utpCi/IKOSLTkxLzk1h4EBAAgJDOEAS7gAyFJYsQEBjlm5CAAIAGMgsAEjRLADI3CyBCgJRVJEsgoCByqxBgFEsSQBiFFYsECIWLEGA0SxJgGIUVi4BACIWLEGAURZWVlZuAH/hbAEjbEFAEQAAA==') format('woff'),
- url('data:application/octet-stream;base64,AAEAAAAOAIAAAwBgT1MvMj4oSJUAAADsAAAAVmNtYXDoGenRAAABRAAAAVJjdnQgBof/BgAACcAAAAAcZnBnbYoKeDsAAAncAAAJkWdhc3AAAAAQAAAJuAAAAAhnbHlmEEDWtgAAApgAAAMmaGVhZABIJ1sAAAXAAAAANmhoZWEHRwNTAAAF+AAAACRobXR4EvMAAAAABhwAAAAYbG9jYQL7AjgAAAY0AAAADm1heHAA4gn1AAAGRAAAACBuYW1laYgmrgAABmQAAAL9cG9zdE+BUMgAAAlkAAAAVHByZXCSoZr/AAATcAAAAFYAAQMpAZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6ADoBQNS/2oAWgMqAJYAAAABAAAAAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEwAAwABAAAAHAAEADAAAAAIAAgAAgAAAADoA+gF//8AAAAA6ADoBf//AAAYARgAAAEAAAAAAAAAAAAAAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAD/sQLKAwsADwAfADEAOABEQEE0AQcFAUIABQcFagAHBgdqCAEGAAIDBgJcAAMAAAEDAFsAAQQEAU8AAQEEUwAEAQRHICAzMiAxIDAlNTU1NTMJFSslNTQmIyEiBh0BFBYzITI2PQE0JiMhIgYdARQWMyEyNjcRFAYjISImJxE0NjMhERQWMyUhERYfARYCOwoH/ncICgoIAYkHCgoH/ncICgoIAYkHCo8eF/2hFx4BIBYBLyAWAS7+5C0crhxSJAgKCggkCAoKlyQICgoIJAgKCsz+QhYgIBYC7hYg/tAWIEgBHAgcrxsAAAH//v9qAfgDCwAgACpAJxwKAgEDAUIAAwIBAgMBaAABAAIBAGYAAgIAUwAAAAsARCc2JxQEEysBFgcBBiMnLgE3EwcGIyInJjcTPgE7ATIWFRQHAzc2MzIB7goG/tIHEAgJCgJu4gIFCgcKA3ACDgi3Cw4CYN0FAgsCFgsN/XoOAQMQCAHDOAEHCA0BzQgKDgoEBv7+NgIAAQAAAAADmAKlABEAHEAZDQEAAgFCAAECAWoAAgACagAAAGEUFRQDEisRFB8BFjI3ATY0JiIHAScmIgYY9hhIGAH5GTJGGf5DuRlGMgFTIxnvGRkB7xhGMBn+TbUYMAAABAAA/5IDhAMqACcALQA6AEAAQ0BAPigMAQQABgFCAwEBCQcCBAYBBFkABgAABgBXCAEFBQJTAAICCgVEOzsvLjtAO0A1NC46LzosKx4cGxoZFxYKECslFR4BFRQGIiY1NDY3NTQmJy4DNTQ2OwE2IBczMhYVFA4CBw4BNz4BNyMGAyIOARQeATI+ATQuAQUeARcmJwH+RlyCtoRcSEJQOD5YKBYOrDABhjCqDhYoWD44TkKKUFwIfgb2PlwkJFx8XCQkXP5ICFxQMAaGQggwICQ2NiQgMAhCMkQ2JDJeekwOFFxcFA5Mel4yJDRGyjh0Wp4BBB4iGiIeHiIaIh5mWnQ4aJ4AAAAAAQAA/9cDHwLlAAsABrMHAQEoKyUHJwcnNyc3FzcXBwMfnOrrnOrqnOvqnOp0nevrnerqnevrneoAAAAAAQAAAAEAAKGZrJpfDzz1AAsD6AAAAADOyY4RAAAAAM7JVdH//v9qA5gDKgAAAAgAAgAAAAAAAAABAAADUv9qAFoD6AAA//oDmAABAAAAAAAAAAAAAAAAAAAABgPoAAACygAAAfQAAAOYAAADhAAAAzEAAAAAAAAAdgDCAPIBdgGTAAAAAQAAAAYAQQAEAAAAAAACABQAIQBuAAAAVQmRAAAAAAAAABIA3gABAAAAAAAAADUAAAABAAAAAAABAAwANQABAAAAAAACAAcAQQABAAAAAAADAAwASAABAAAAAAAEAAwAVAABAAAAAAAFAAsAYAABAAAAAAAGAAwAawABAAAAAAAKACsAdwABAAAAAAALABMAogADAAEECQAAAGoAtQADAAEECQABABgBHwADAAEECQACAA4BNwADAAEECQADABgBRQADAAEECQAEABgBXQADAAEECQAFABYBdQADAAEECQAGABgBiwADAAEECQAKAFYBowADAAEECQALACYB+UNvcHlyaWdodCAoQykgMjAxMyBieSBvcmlnaW5hbCBhdXRob3JzIEAgZm9udGVsbG8uY29tZm9udGVsbG8tYXRvUmVndWxhcmZvbnRlbGxvLWF0b2ZvbnRlbGxvLWF0b1ZlcnNpb24gMS4wZm9udGVsbG8tYXRvR2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20AQwBvAHAAeQByAGkAZwBoAHQAIAAoAEMAKQAgADIAMAAxADMAIABiAHkAIABvAHIAaQBnAGkAbgBhAGwAIABhAHUAdABoAG8AcgBzACAAQAAgAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAGYAbwBuAHQAZQBsAGwAbwAtAGEAdABvAFIAZQBnAHUAbABhAHIAZgBvAG4AdABlAGwAbABvAC0AYQB0AG8AZgBvAG4AdABlAGwAbABvAC0AYQB0AG8AVgBlAHIAcwBpAG8AbgAgADEALgAwAGYAbwBuAHQAZQBsAGwAbwAtAGEAdABvAEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAAcwB2AGcAMgB0AHQAZgAgAGYAcgBvAG0AIABGAG8AbgB0AGUAbABsAG8AIABwAHIAbwBqAGUAYwB0AC4AaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAECAQMBBAEFAQYMZG9jLXRleHQtaW52BWZsYXNoAm9rBnRyb3BoeQZjYW5jZWwAAAABAAH//wAPAAAAAAAAAAAAAAAAAAAAAAAyADIDKv9qAyr/arAALLAgYGYtsAEsIGQgsMBQsAQmWrAERVtYISMhG4pYILBQUFghsEBZGyCwOFBYIbA4WVkgsApFYWSwKFBYIbAKRSCwMFBYIbAwWRsgsMBQWCBmIIqKYSCwClBYYBsgsCBQWCGwCmAbILA2UFghsDZgG2BZWVkbsAArWVkjsABQWGVZWS2wAiwgRSCwBCVhZCCwBUNQWLAFI0KwBiNCGyEhWbABYC2wAywjISMhIGSxBWJCILAGI0KyCgACKiEgsAZDIIogirAAK7EwBSWKUVhgUBthUllYI1khILBAU1iwACsbIbBAWSOwAFBYZVktsAQssAdDK7IAAgBDYEItsAUssAcjQiMgsAAjQmGwgGKwAWCwBCotsAYsICBFILACRWOwAUViYESwAWAtsAcsICBFILAAKyOxAgQlYCBFiiNhIGQgsCBQWCGwABuwMFBYsCAbsEBZWSOwAFBYZVmwAyUjYUREsAFgLbAILLEFBUWwAWFELbAJLLABYCAgsAlDSrAAUFggsAkjQlmwCkNKsABSWCCwCiNCWS2wCiwguAQAYiC4BABjiiNhsAtDYCCKYCCwCyNCIy2wCyxLVFixBwFEWSSwDWUjeC2wDCxLUVhLU1ixBwFEWRshWSSwE2UjeC2wDSyxAAxDVVixDAxDsAFhQrAKK1mwAEOwAiVCsQkCJUKxCgIlQrABFiMgsAMlUFixAQBDYLAEJUKKiiCKI2GwCSohI7ABYSCKI2GwCSohG7EBAENgsAIlQrACJWGwCSohWbAJQ0ewCkNHYLCAYiCwAkVjsAFFYmCxAAATI0SwAUOwAD6yAQEBQ2BCLbAOLLEABUVUWACwDCNCIGCwAWG1DQ0BAAsAQkKKYLENBSuwbSsbIlktsA8ssQAOKy2wECyxAQ4rLbARLLECDistsBIssQMOKy2wEyyxBA4rLbAULLEFDistsBUssQYOKy2wFiyxBw4rLbAXLLEIDistsBgssQkOKy2wGSywCCuxAAVFVFgAsAwjQiBgsAFhtQ0NAQALAEJCimCxDQUrsG0rGyJZLbAaLLEAGSstsBsssQEZKy2wHCyxAhkrLbAdLLEDGSstsB4ssQQZKy2wHyyxBRkrLbAgLLEGGSstsCEssQcZKy2wIiyxCBkrLbAjLLEJGSstsCQsIDywAWAtsCUsIGCwDWAgQyOwAWBDsAIlYbABYLAkKiEtsCYssCUrsCUqLbAnLCAgRyAgsAJFY7ABRWJgI2E4IyCKVVggRyAgsAJFY7ABRWJgI2E4GyFZLbAoLLEABUVUWACwARawJyqwARUwGyJZLbApLLAIK7EABUVUWACwARawJyqwARUwGyJZLbAqLCA1sAFgLbArLACwA0VjsAFFYrAAK7ACRWOwAUVisAArsAAWtAAAAAAARD4jOLEqARUqLbAsLCA8IEcgsAJFY7ABRWJgsABDYTgtsC0sLhc8LbAuLCA8IEcgsAJFY7ABRWJgsABDYbABQ2M4LbAvLLECABYlIC4gR7AAI0KwAiVJiopHI0cjYSBYYhshWbABI0KyLgEBFRQqLbAwLLAAFrAEJbAEJUcjRyNhsAZFK2WKLiMgIDyKOC2wMSywABawBCWwBCUgLkcjRyNhILAEI0KwBkUrILBgUFggsEBRWLMCIAMgG7MCJgMaWUJCIyCwCEMgiiNHI0cjYSNGYLAEQ7CAYmAgsAArIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbCAYmEjICCwBCYjRmE4GyOwCENGsAIlsAhDRyNHI2FgILAEQ7CAYmAjILAAKyOwBENgsAArsAUlYbAFJbCAYrAEJmEgsAQlYGQjsAMlYGRQWCEbIyFZIyAgsAQmI0ZhOFktsDIssAAWICAgsAUmIC5HI0cjYSM8OC2wMyywABYgsAgjQiAgIEYjR7AAKyNhOC2wNCywABawAyWwAiVHI0cjYbAAVFguIDwjIRuwAiWwAiVHI0cjYSCwBSWwBCVHI0cjYbAGJbAFJUmwAiVhsAFFYyMgWGIbIVljsAFFYmAjLiMgIDyKOCMhWS2wNSywABYgsAhDIC5HI0cjYSBgsCBgZrCAYiMgIDyKOC2wNiwjIC5GsAIlRlJYIDxZLrEmARQrLbA3LCMgLkawAiVGUFggPFkusSYBFCstsDgsIyAuRrACJUZSWCA8WSMgLkawAiVGUFggPFkusSYBFCstsDkssDArIyAuRrACJUZSWCA8WS6xJgEUKy2wOiywMSuKICA8sAQjQoo4IyAuRrACJUZSWCA8WS6xJgEUK7AEQy6wJistsDsssAAWsAQlsAQmIC5HI0cjYbAGRSsjIDwgLiM4sSYBFCstsDwssQgEJUKwABawBCWwBCUgLkcjRyNhILAEI0KwBkUrILBgUFggsEBRWLMCIAMgG7MCJgMaWUJCIyBHsARDsIBiYCCwACsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsIBiYbACJUZhOCMgPCM4GyEgIEYjR7AAKyNhOCFZsSYBFCstsD0ssDArLrEmARQrLbA+LLAxKyEjICA8sAQjQiM4sSYBFCuwBEMusCYrLbA/LLAAFSBHsAAjQrIAAQEVFBMusCwqLbBALLAAFSBHsAAjQrIAAQEVFBMusCwqLbBBLLEAARQTsC0qLbBCLLAvKi2wQyywABZFIyAuIEaKI2E4sSYBFCstsEQssAgjQrBDKy2wRSyyAAA8Ky2wRiyyAAE8Ky2wRyyyAQA8Ky2wSCyyAQE8Ky2wSSyyAAA9Ky2wSiyyAAE9Ky2wSyyyAQA9Ky2wTCyyAQE9Ky2wTSyyAAA5Ky2wTiyyAAE5Ky2wTyyyAQA5Ky2wUCyyAQE5Ky2wUSyyAAA7Ky2wUiyyAAE7Ky2wUyyyAQA7Ky2wVCyyAQE7Ky2wVSyyAAA+Ky2wViyyAAE+Ky2wVyyyAQA+Ky2wWCyyAQE+Ky2wWSyyAAA6Ky2wWiyyAAE6Ky2wWyyyAQA6Ky2wXCyyAQE6Ky2wXSywMisusSYBFCstsF4ssDIrsDYrLbBfLLAyK7A3Ky2wYCywABawMiuwOCstsGEssDMrLrEmARQrLbBiLLAzK7A2Ky2wYyywMyuwNystsGQssDMrsDgrLbBlLLA0Ky6xJgEUKy2wZiywNCuwNistsGcssDQrsDcrLbBoLLA0K7A4Ky2waSywNSsusSYBFCstsGossDUrsDYrLbBrLLA1K7A3Ky2wbCywNSuwOCstsG0sK7AIZbADJFB4sAEVMC0AAABLuADIUlixAQGOWbkIAAgAYyCwASNEsAMjcLIEKAlFUkSyCgIHKrEGAUSxJAGIUViwQIhYsQYDRLEmAYhRWLgEAIhYsQYBRFlZWVm4Af+FsASNsQUARAAA') format('truetype');
-}
-/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
-/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
-/*
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- @font-face {
- font-family: 'fontello-ato';
- src: url('../font/fontello-ato.svg?11995162#fontello-ato') format('svg');
- }
-}
-*/
-
- [class^="icon-ato-"]:before, [class*=" icon-ato-"]:before {
- font-family: "fontello-ato";
- font-style: normal;
- font-weight: normal;
- speak: none;
-
- display: inline-block;
- text-decoration: inherit;
- width: 1em;
- margin-right: .2em;
- text-align: center;
- /* opacity: .8; */
-
- /* For safety - reset parent styles, that can break glyph codes*/
- font-variant: normal;
- text-transform: none;
-
- /* fix buttons height, for twitter bootstrap */
- line-height: 1em;
-
- /* Animation center compensation - margins should be symmetric */
- /* remove if not needed */
- margin-left: .2em;
-
- /* you can be more comfortable with increased icons size */
- /* font-size: 120%; */
-
- /* Uncomment for 3D effect */
- /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
-}
-.icon-ato-doc-text-inv:before { content: '\e800'; } /* '' */
-.icon-ato-flash:before { content: '\e801'; } /* '' */
-.icon-ato-trophy:before { content: '\e803'; } /* '' */
-.icon-ato-cancel:before { content: '\e805'; } /* '' */
-.icon-ato-ok:before { content: '\e802'; } /* '' */ \ No newline at end of file
diff --git a/plugins/AdminTools/template/fontello/css/fontello-ato-ie7-codes.css b/plugins/AdminTools/template/fontello/css/fontello-ato-ie7-codes.css
deleted file mode 100644
index 56bcbda11..000000000
--- a/plugins/AdminTools/template/fontello/css/fontello-ato-ie7-codes.css
+++ /dev/null
@@ -1,6 +0,0 @@
-
-.icon-ato-doc-text-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe800;&nbsp;'); }
-.icon-ato-flash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe801;&nbsp;'); }
-.icon-ato-trophy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe803;&nbsp;'); }
-.icon-ato-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe805;&nbsp;'); }
-.icon-ato-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe802;&nbsp;'); } \ No newline at end of file
diff --git a/plugins/AdminTools/template/fontello/css/fontello-ato-ie7.css b/plugins/AdminTools/template/fontello/css/fontello-ato-ie7.css
deleted file mode 100644
index b77967ca6..000000000
--- a/plugins/AdminTools/template/fontello/css/fontello-ato-ie7.css
+++ /dev/null
@@ -1,17 +0,0 @@
-[class^="icon-ato-"], [class*=" icon-ato-"] {
- font-family: 'fontello-ato';
- font-style: normal;
- font-weight: normal;
-
- /* fix buttons height */
- line-height: 1em;
-
- /* you can be more comfortable with increased icons size */
- /* font-size: 120%; */
-}
-
-.icon-ato-doc-text-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe800;&nbsp;'); }
-.icon-ato-flash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe801;&nbsp;'); }
-.icon-ato-trophy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe803;&nbsp;'); }
-.icon-ato-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe805;&nbsp;'); }
-.icon-ato-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe802;&nbsp;'); } \ No newline at end of file
diff --git a/plugins/AdminTools/template/fontello/css/fontello-ato.css b/plugins/AdminTools/template/fontello/css/fontello-ato.css
deleted file mode 100644
index 31cb55605..000000000
--- a/plugins/AdminTools/template/fontello/css/fontello-ato.css
+++ /dev/null
@@ -1,57 +0,0 @@
-@font-face {
- font-family: 'fontello-ato';
- src: url('../font/fontello-ato.eot?10884929');
- src: url('../font/fontello-ato.eot?10884929#iefix') format('embedded-opentype'),
- url('../font/fontello-ato.woff?10884929') format('woff'),
- url('../font/fontello-ato.ttf?10884929') format('truetype'),
- url('../font/fontello-ato.svg?10884929#fontello-ato') format('svg');
- font-weight: normal;
- font-style: normal;
-}
-/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
-/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
-/*
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- @font-face {
- font-family: 'fontello-ato';
- src: url('../font/fontello-ato.svg?10884929#fontello-ato') format('svg');
- }
-}
-*/
-
- [class^="icon-ato-"]:before, [class*=" icon-ato-"]:before {
- font-family: "fontello-ato";
- font-style: normal;
- font-weight: normal;
- speak: none;
-
- display: inline-block;
- text-decoration: inherit;
- width: 1em;
- margin-right: .2em;
- text-align: center;
- /* opacity: .8; */
-
- /* For safety - reset parent styles, that can break glyph codes*/
- font-variant: normal;
- text-transform: none;
-
- /* fix buttons height, for twitter bootstrap */
- line-height: 1em;
-
- /* Animation center compensation - margins should be symmetric */
- /* remove if not needed */
- margin-left: .2em;
-
- /* you can be more comfortable with increased icons size */
- /* font-size: 120%; */
-
- /* Uncomment for 3D effect */
- /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
-}
-
-.icon-ato-doc-text-inv:before { content: '\e800'; } /* '' */
-.icon-ato-flash:before { content: '\e801'; } /* '' */
-.icon-ato-trophy:before { content: '\e803'; } /* '' */
-.icon-ato-cancel:before { content: '\e805'; } /* '' */
-.icon-ato-ok:before { content: '\e802'; } /* '' */ \ No newline at end of file
diff --git a/plugins/AdminTools/template/fontello/demo.html b/plugins/AdminTools/template/fontello/demo.html
deleted file mode 100644
index 73ceeeb67..000000000
--- a/plugins/AdminTools/template/fontello/demo.html
+++ /dev/null
@@ -1,275 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
- <meta charset="UTF-8"><style type="text/css">/*
- * Bootstrap v2.2.1
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-.clearfix {
- *zoom: 1;
-}
-.clearfix:before,
-.clearfix:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.clearfix:after {
- clear: both;
-}
-html {
- font-size: 100%;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
-}
-a:focus {
- outline: thin dotted #333;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-a:hover,
-a:active {
- outline: 0;
-}
-button,
-input,
-select,
-textarea {
- margin: 0;
- font-size: 100%;
- vertical-align: middle;
-}
-button,
-input {
- *overflow: visible;
- line-height: normal;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- padding: 0;
- border: 0;
-}
-body {
- margin: 0;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 14px;
- line-height: 20px;
- color: #333;
- background-color: #fff;
-}
-a {
- color: #08c;
- text-decoration: none;
-}
-a:hover {
- color: #005580;
- text-decoration: underline;
-}
-.row {
- margin-left: -20px;
- *zoom: 1;
-}
-.row:before,
-.row:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.row:after {
- clear: both;
-}
-[class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 20px;
-}
-.container,
-.navbar-static-top .container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
- width: 940px;
-}
-.span12 {
- width: 940px;
-}
-.span11 {
- width: 860px;
-}
-.span10 {
- width: 780px;
-}
-.span9 {
- width: 700px;
-}
-.span8 {
- width: 620px;
-}
-.span7 {
- width: 540px;
-}
-.span6 {
- width: 460px;
-}
-.span5 {
- width: 380px;
-}
-.span4 {
- width: 300px;
-}
-.span3 {
- width: 220px;
-}
-.span2 {
- width: 140px;
-}
-.span1 {
- width: 60px;
-}
-[class*="span"].pull-right,
-.row-fluid [class*="span"].pull-right {
- float: right;
-}
-.container {
- margin-right: auto;
- margin-left: auto;
- *zoom: 1;
-}
-.container:before,
-.container:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.container:after {
- clear: both;
-}
-p {
- margin: 0 0 10px;
-}
-.lead {
- margin-bottom: 20px;
- font-size: 21px;
- font-weight: 200;
- line-height: 30px;
-}
-small {
- font-size: 85%;
-}
-h1 {
- margin: 10px 0;
- font-family: inherit;
- font-weight: bold;
- line-height: 20px;
- color: inherit;
- text-rendering: optimizelegibility;
-}
-h1 small {
- font-weight: normal;
- line-height: 1;
- color: #999;
-}
-h1 {
- line-height: 40px;
-}
-h1 {
- font-size: 38.5px;
-}
-h1 small {
- font-size: 24.5px;
-}
-body {
- margin-top: 90px;
-}
-.header {
- position: fixed;
- top: 0;
- left: 50%;
- margin-left: -480px;
- background-color: #fff;
- border-bottom: 1px solid #ddd;
- padding-top: 10px;
- z-index: 10;
-}
-.footer {
- color: #ddd;
- font-size: 12px;
- text-align: center;
- margin-top: 20px;
-}
-.footer a {
- color: #ccc;
- text-decoration: underline;
-}
-.the-icons {
- font-size: 14px;
- line-height: 24px;
-}
-.switch {
- position: absolute;
- right: 0;
- bottom: 10px;
- color: #666;
-}
-.switch input {
- margin-right: 0.3em;
-}
-.codesOn .i-name {
- display: none;
-}
-.codesOn .i-code {
- display: inline;
-}
-.i-code {
- display: none;
-}
-</style>
- <link rel="stylesheet" href="css/fontello-ato.css">
- <link rel="stylesheet" href="css/animation.css">
- <!--[if IE 7]>
- <link rel="stylesheet" href="css/fontello-ato-ie7.css">
- <![endif]-->
- <script>
- function toggleCodes(on) {
- var obj = document.getElementById('icons');
-
- if (on) {
- obj.className += ' codesOn';
- } else {
- obj.className = obj.className.replace(' codesOn', '');
- }
- }
-
- </script>
- </head>
- <body>
- <div class="container header">
- <h1>
- fontello-ato
- <small>font demo</small>
- </h1>
- <label class="switch">
- <input type="checkbox" onclick="toggleCodes(this.checked)">show codes
- </label>
- </div>
- <div id="icons" class="container">
- <div class="row">
- <div title="Code: 0xe800" class="the-icons span3"><i class="icon-ato-doc-text-inv"></i> <span class="i-name">icon-ato-doc-text-inv</span><span class="i-code">0xe800</span></div>
- <div title="Code: 0xe801" class="the-icons span3"><i class="icon-ato-flash"></i> <span class="i-name">icon-ato-flash</span><span class="i-code">0xe801</span></div>
- <div title="Code: 0xe803" class="the-icons span3"><i class="icon-ato-trophy"></i> <span class="i-name">icon-ato-trophy</span><span class="i-code">0xe803</span></div>
- <div title="Code: 0xe805" class="the-icons span3"><i class="icon-ato-cancel"></i> <span class="i-name">icon-ato-cancel</span><span class="i-code">0xe805</span></div>
- </div>
- <div class="row">
- <div title="Code: 0xe802" class="the-icons span3"><i class="icon-ato-ok"></i> <span class="i-name">icon-ato-ok</span><span class="i-code">0xe802</span></div>
- </div>
- </div>
- <div class="container footer">Generated by <a href="http://fontello.com">fontello.com</a></div>
- </body>
-</html> \ No newline at end of file
diff --git a/plugins/AdminTools/template/fontello/font/fontello-ato.eot b/plugins/AdminTools/template/fontello/font/fontello-ato.eot
deleted file mode 100644
index 0f80c691b..000000000
--- a/plugins/AdminTools/template/fontello/font/fontello-ato.eot
+++ /dev/null
Binary files differ
diff --git a/plugins/AdminTools/template/fontello/font/fontello-ato.svg b/plugins/AdminTools/template/fontello/font/fontello-ato.svg
deleted file mode 100644
index 3f7ee4a6e..000000000
--- a/plugins/AdminTools/template/fontello/font/fontello-ato.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Copyright (C) 2013 by original authors @ fontello.com</metadata>
-<defs>
-<font id="fontello-ato" horiz-adv-x="1000" >
-<font-face font-family="fontello-ato" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
-<missing-glyph horiz-adv-x="1000" />
-<glyph glyph-name="doc-text-inv" unicode="&#xe800;" d="m571 82v36q0 8-5 13t-12 5h-393q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h393q7 0 12 5t5 13z m0 143v36q0 8-5 13t-12 5h-393q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h393q7 0 12 5t5 13z m143 196v-446q0-22-15-38t-38-16h-607q-23 0-38 16t-16 38v750q0 22 16 38t38 16h303v-304q0-22 16-38t38-16h303z m-1 72h-284v284q45-8 73-36l174-175q28-27 37-73z" horiz-adv-x="714.3" />
-<glyph glyph-name="flash" unicode="&#xe801;" d="m494 534q10-11 4-24l-302-646q-7-14-23-14q-2 0-8 1q-9 3-14 11t-3 16l110 451l-226-56q-2-1-7-1q-10 0-17 7q-10 8-7 21l112 461q2 8 9 13t15 5h183q11 0 18-7t7-17q0-4-2-10l-96-258l221 54q5 2 7 2q11 0 19-9z" horiz-adv-x="500" />
-<glyph glyph-name="trophy" unicode="&#xe803;" d="m510 134l0-66q70-8 116-32t46-56q0-36-65-63t-157-27q-90 0-156 27t-66 63q0 32 46 56t118 32l0 66q0 50-33 84t-113 88q-56 36-87 61t-75 72t-64 108t-20 137q0 14 11 24t25 10l172 0q48 92 242 92q196 0 244-92l170 0q14 0 25-10t11-24q0-76-20-137t-64-108t-75-72t-87-61q-78-52-111-87t-33-85z m138 252q80 56 126 114t54 148l-126 0q-6-158-54-262z m-198 364q-62 0-108-15t-64-32t-18-29q0-14 18-31t64-32t108-15t108 15t64 32t18 31q0 12-18 29t-64 32t-108 15z m-378-102q8-90 54-148t126-114q-48 104-54 262l-126 0z" horiz-adv-x="900" />
-<glyph glyph-name="cancel" unicode="&#xe805;" d="m799 116l-156-157l-234 235l-235-235l-156 157l234 234l-234 234l156 157l235-235l234 235l156-157l-234-234z" horiz-adv-x="817" />
-<glyph glyph-name="ok" unicode="&#xe802;" d="m0 339q0-35 24-60l246-239q24-25 60-25q36 0 60 25l505 495q25 24 25 59t-25 58q-25 25-60 25t-60-25l-445-435l-185 181q-25 24-60 24t-61-24q-24-24-24-59z" horiz-adv-x="920.4" />
-</font>
-</defs>
-</svg> \ No newline at end of file
diff --git a/plugins/AdminTools/template/fontello/font/fontello-ato.ttf b/plugins/AdminTools/template/fontello/font/fontello-ato.ttf
deleted file mode 100644
index b71374923..000000000
--- a/plugins/AdminTools/template/fontello/font/fontello-ato.ttf
+++ /dev/null
Binary files differ
diff --git a/plugins/AdminTools/template/fontello/font/fontello-ato.woff b/plugins/AdminTools/template/fontello/font/fontello-ato.woff
deleted file mode 100644
index 1aebe0542..000000000
--- a/plugins/AdminTools/template/fontello/font/fontello-ato.woff
+++ /dev/null
Binary files differ
diff --git a/plugins/AdminTools/template/index.php b/plugins/AdminTools/template/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/AdminTools/template/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/AdminTools/template/mousetrap.min.js b/plugins/AdminTools/template/mousetrap.min.js
deleted file mode 100644
index 114a22235..000000000
--- a/plugins/AdminTools/template/mousetrap.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/* mousetrap v1.4.6 craig.is/killing/mice */
-(function(J,r,f){function s(a,b,d){a.addEventListener?a.addEventListener(b,d,!1):a.attachEvent("on"+b,d)}function A(a){if("keypress"==a.type){var b=String.fromCharCode(a.which);a.shiftKey||(b=b.toLowerCase());return b}return h[a.which]?h[a.which]:B[a.which]?B[a.which]:String.fromCharCode(a.which).toLowerCase()}function t(a){a=a||{};var b=!1,d;for(d in n)a[d]?b=!0:n[d]=0;b||(u=!1)}function C(a,b,d,c,e,v){var g,k,f=[],h=d.type;if(!l[a])return[];"keyup"==h&&w(a)&&(b=[a]);for(g=0;g<l[a].length;++g)if(k=
-l[a][g],!(!c&&k.seq&&n[k.seq]!=k.level||h!=k.action||("keypress"!=h||d.metaKey||d.ctrlKey)&&b.sort().join(",")!==k.modifiers.sort().join(","))){var m=c&&k.seq==c&&k.level==v;(!c&&k.combo==e||m)&&l[a].splice(g,1);f.push(k)}return f}function K(a){var b=[];a.shiftKey&&b.push("shift");a.altKey&&b.push("alt");a.ctrlKey&&b.push("ctrl");a.metaKey&&b.push("meta");return b}function x(a,b,d,c){m.stopCallback(b,b.target||b.srcElement,d,c)||!1!==a(b,d)||(b.preventDefault?b.preventDefault():b.returnValue=!1,b.stopPropagation?
-b.stopPropagation():b.cancelBubble=!0)}function y(a){"number"!==typeof a.which&&(a.which=a.keyCode);var b=A(a);b&&("keyup"==a.type&&z===b?z=!1:m.handleKey(b,K(a),a))}function w(a){return"shift"==a||"ctrl"==a||"alt"==a||"meta"==a}function L(a,b,d,c){function e(b){return function(){u=b;++n[a];clearTimeout(D);D=setTimeout(t,1E3)}}function v(b){x(d,b,a);"keyup"!==c&&(z=A(b));setTimeout(t,10)}for(var g=n[a]=0;g<b.length;++g){var f=g+1===b.length?v:e(c||E(b[g+1]).action);F(b[g],f,c,a,g)}}function E(a,b){var d,
-c,e,f=[];d="+"===a?["+"]:a.split("+");for(e=0;e<d.length;++e)c=d[e],G[c]&&(c=G[c]),b&&"keypress"!=b&&H[c]&&(c=H[c],f.push("shift")),w(c)&&f.push(c);d=c;e=b;if(!e){if(!p){p={};for(var g in h)95<g&&112>g||h.hasOwnProperty(g)&&(p[h[g]]=g)}e=p[d]?"keydown":"keypress"}"keypress"==e&&f.length&&(e="keydown");return{key:c,modifiers:f,action:e}}function F(a,b,d,c,e){q[a+":"+d]=b;a=a.replace(/\s+/g," ");var f=a.split(" ");1<f.length?L(a,f,b,d):(d=E(a,d),l[d.key]=l[d.key]||[],C(d.key,d.modifiers,{type:d.action},
-c,a,e),l[d.key][c?"unshift":"push"]({callback:b,modifiers:d.modifiers,action:d.action,seq:c,level:e,combo:a}))}var h={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"},B={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},H={"~":"`","!":"1",
-"@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"},G={option:"alt",command:"meta","return":"enter",escape:"esc",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},p,l={},q={},n={},D,z=!1,I=!1,u=!1;for(f=1;20>f;++f)h[111+f]="f"+f;for(f=0;9>=f;++f)h[f+96]=f;s(r,"keypress",y);s(r,"keydown",y);s(r,"keyup",y);var m={bind:function(a,b,d){a=a instanceof Array?a:[a];for(var c=0;c<a.length;++c)F(a[c],b,d);return this},
-unbind:function(a,b){return m.bind(a,function(){},b)},trigger:function(a,b){if(q[a+":"+b])q[a+":"+b]({},a);return this},reset:function(){l={};q={};return this},stopCallback:function(a,b){return-1<(" "+b.className+" ").indexOf(" mousetrap ")?!1:"INPUT"==b.tagName||"SELECT"==b.tagName||"TEXTAREA"==b.tagName||b.isContentEditable},handleKey:function(a,b,d){var c=C(a,b,d),e;b={};var f=0,g=!1;for(e=0;e<c.length;++e)c[e].seq&&(f=Math.max(f,c[e].level));for(e=0;e<c.length;++e)c[e].seq?c[e].level==f&&(g=!0,
-b[c[e].seq]=1,x(c[e].callback,d,c[e].combo,c[e].seq)):g||x(c[e].callback,d,c[e].combo);c="keypress"==d.type&&I;d.type!=u||w(a)||c||t(b);I=g&&"keydown"==d.type}};J.Mousetrap=m;"function"===typeof define&&define.amd&&define(m)})(window,document);
diff --git a/plugins/AdminTools/template/public_controller.js b/plugins/AdminTools/template/public_controller.js
deleted file mode 100644
index 7a61b5c9c..000000000
--- a/plugins/AdminTools/template/public_controller.js
+++ /dev/null
@@ -1,331 +0,0 @@
-var AdminTools = function($) {
- var __this = this;
-
- this.urlWS;
- this.urlSelf;
- this.multiView;
-
- var $ato = $('#ato_header'),
- $ato_closed = $('#ato_header_closed'),
- ato_height = 28; // normal height, real height conputed on init()
-
- // move to whole page down or up
- function moveBody(dir, anim) {
- var operator = dir=='show' ? '+=' : '-=';
-
- if (anim) {
- $('body').animate({'margin-top': operator+ato_height});
-
- if ($('#the_page, [data-role="page"]').css('position')=='absolute') {
- $('#the_page, [data-role="page"]').animate({'top': operator+ato_height});
- }
- }
- else {
- $('body').css({'margin-top': operator+ato_height});
-
- if ($('#the_page, [data-role="page"]').css('position')=='absolute') {
- $('#the_page, [data-role="page"]').css({'top': operator+ato_height});
- }
- }
- }
-
- // fill multiview selects
- // data came from AJAX request or sessionStorage
- function populateMultiView() {
- var $multiview = $ato.find('.multiview');
-
- if ($multiview.data('init')) return;
-
- var render = function(data) {
- var html = '';
- $.each(data.users, function(i, user) {
- html+= '<option value="'+ user.id +'">'+ user.username +'</option>';
- });
- $multiview.find('select[data-type="view_as"]').html(html)
- .val(__this.multiView.view_as);
-
- html = '';
- $.each(data.themes, function(i, theme) {
- html+= '<option value="'+ theme +'">'+ theme +'</option>';
- });
- $multiview.find('select[data-type="theme"]').html(html)
- .val(__this.multiView.theme);
-
- html = '';
- $.each(data.languages, function(i, language) {
- html+= '<option value="'+ language.id +'">'+ language.name +'</option>';
- });
- $multiview.find('select[data-type="lang"]').html(html)
- .val(__this.multiView.lang);
-
- $multiview.data('init', true);
-
- $multiview.find('.switcher').show();
- };
-
- if ('sessionStorage' in window && window.sessionStorage.multiView != undefined) {
- render(JSON.parse(window.sessionStorage.multiView));
- }
- else {
- $.ajax({
- method: 'POST',
- url: __this.urlWS + 'multiView.getData',
- dataType: 'json',
- success: function(data) {
- render(data.result);
- if ('sessionStorage' in window) {
- window.sessionStorage.multiView = JSON.stringify(data.result);
- }
- },
- error: function(xhr, text, error) {
- alert(text + ' ' + error);
- }
- });
- }
- }
-
- // delete session cache
- this.deleteCache = function() {
- if ('sessionStorage' in window) {
- window.sessionStorage.removeItem('multiView');
- }
- };
-
- // move close button to smartpocket toolbar
- this.initMobile = function() {
- var $headerbar = $('div[data-role="header"] .title');
- if ($headerbar.length == 1) {
- $ato_closed.addClass('smartpocket');
- $ato_closed.find('a').attr({
- 'data-iconpos':'notext',
- 'data-role':'button'
- });
- $headerbar.prepend($ato_closed);
- }
- };
-
- // attach jquery handlers
- this.init = function(open) {
- $('body').prepend($ato); // ensure the bar is at the begining
-
- $ato.show();
- ato_height = $ato.height();
-
- if ('localStorage' in window) {
- if (window.localStorage.ato_panel_open == null) {
- window.localStorage.ato_panel_open = open;
- }
-
- if (window.localStorage.ato_panel_open == 1) {
- moveBody('show', false);
- }
- else {
- $ato.hide();
- $ato_closed.show();
- }
- }
- else {
- $ato.show();
- moveBody('show', false);
- }
-
- /* <!-- sub menus --> */
- $ato.find('.parent').on({
- 'click': function() {
- if ($(this).hasClass('multiview')) {
- populateMultiView();
- }
- $(this).find('ul').toggle();
- },
- 'mouseleave': function(e) {
- if (e.target.tagName.toLowerCase() != "select") {
- $(this).find('ul').hide();
- }
- }
- });
- $ato.find('.parent>a').on('click', function(e) {
- e.preventDefault();
- });
- $ato.find('.parent ul').on('mouseleave', function(e) {
- if (e.target.tagName.toLowerCase() != "select") {
- $(this).hide();
- }
- });
-
- /* <!-- select boxes --> */
- $ato.find('.switcher').on({
- 'change': function() {
- window.location.href = __this.urlSelf + 'ato_'+ $(this).data('type') +'='+ $(this).val();
- },
- 'click': function(e) {
- e.stopPropagation();
- }
- });
-
- /* <!-- toggle toolbar --> */
- $ato.find('.close-panel').on('click', function(e) {
- $ato.slideUp();
- $ato_closed.slideDown();
- moveBody('hide', true);
-
- if ('localStorage' in window) window.localStorage.ato_panel_open = 0;
- e.preventDefault();
- });
-
- $ato_closed.on('click', function(e) {
- $ato.slideDown();
- $ato_closed.slideUp();
- moveBody('show', true);
-
- if ('localStorage' in window) window.localStorage.ato_panel_open = 1;
- e.preventDefault();
- });
- };
-
- // init "set as representative" button
- this.initRepresentative = function(image_id, category_id) {
- $ato.find('.set-representative').on('click', function(e) {
- if (!$(this).parent().hasClass('disabled')) {
- $(this).parent().addClass('disabled')
-
- $.ajax({
- method: 'POST',
- url: __this.urlWS + 'pwg.categories.setRepresentative',
- dataType: 'json',
- data: {
- image_id: image_id,
- category_id: category_id
- },
- success: function() {
- $ato.find('.saved').fadeIn(200).delay(1600).fadeOut(200);
- },
- error: function(xhr, text, error) {
- alert(text + ' ' + error);
- }
- });
- }
-
- e.preventDefault();
- });
- };
-
- // init "add to caddie" button
- this.initCaddie = function(image_id) {
- $ato.find('.add-caddie').on('click', function(e) {
- if (!$(this).parent().hasClass('disabled')) {
- $(this).parent().addClass('disabled')
-
- $.ajax({
- method: 'POST',
- url: __this.urlWS + 'pwg.caddie.add',
- dataType: 'json',
- data: {
- image_id: image_id
- },
- success: function() {
- $ato.find('.saved').fadeIn(200).delay(1600).fadeOut(200);
- },
- error: function(xhr, text, error) {
- alert(text + ' ' + error);
- }
- });
- }
-
- e.preventDefault();
- });
- };
-
- // init "quick edit" popup
- this.initQuickEdit = function(is_picture, tokeninput_lang) {
- var $ato_edit = $('#ato_quick_edit');
-
- // try to find background color matching text color
- // there is a 1s delay to wait for jQuery Mobile initialization
- function bgColor() {
- var bg_color = 'white';
- var selectors = ['#the_page #content', '[data-role="page"]', 'body'];
-
- for (var i=0; i<selectors.length; i++) {
- var color = $(selectors[i]).css('background-color');
- if (color && color!='transparent') {
- bg_color = color;
- break;
- }
- }
-
- $ato_edit.css('background-color', bg_color);
- }
-
- $ato_edit.find('.close-edit').on('click', function(e) {
- $.colorbox.close()
- e.preventDefault();
- });
-
- $(".edit-quick").colorbox({
- inline: true,
- transition: 'none',
- width: 500,
- maxWidth: '100%',
- top: 50,
- title: $ato_edit.attr('title'),
-
- onComplete: function() {
- setTimeout(function() {
- $('#quick_edit_name').focus();
- }, 0);
- },
-
- onOpen: function() {
- bgColor();
-
- if (is_picture) {
- $ato_edit.find('.datepicker').datepicker({
- dateFormat: 'yy-mm-dd'
- });
-
- // fetch tags list on first open
- if ($(this).data('tags-init')) return;
-
- $.ajax({
- method: 'POST',
- url: __this.urlWS + 'pwg.tags.getList',
- dataType: 'json',
- success: function(data) {
- var tags = [];
- // convert to custom format
- for (var i=0, l=data.result.tags.length; i<l; i++) {
- tags.push({
- id: '~~'+ data.result.tags[i].id +'~~',
- name: data.result.tags[i].name
- });
- }
-
- $ato_edit.find('.tags').tokenInput(
- tags,
- $.extend({
- animateDropdown: false,
- preventDuplicates: true,
- allowFreeTagging: true
- }, tokeninput_lang)
- );
-
- $.colorbox.resize();
- $(this).data('tags-init', true);
- },
- error: function(xhr, text, error) {
- alert(text + ' ' + error);
- }
- });
- }
- }
- });
-
- // Ctrl+E opens the quick edit
- Mousetrap.bind('mod+e', function(e) {
- e.preventDefault();
- $(".edit-quick").click();
- });
- };
-
- return this;
-}(jQuery); \ No newline at end of file
diff --git a/plugins/AdminTools/template/public_controller.tpl b/plugins/AdminTools/template/public_controller.tpl
deleted file mode 100644
index 2b74476ce..000000000
--- a/plugins/AdminTools/template/public_controller.tpl
+++ /dev/null
@@ -1,191 +0,0 @@
-{strip}
-{combine_css path=$ADMINTOOLS_PATH|cat:'template/public_style.css'}
-{combine_css path='admin/themes/default/fontello/css/fontello.css'}
-{combine_css path=$ADMINTOOLS_PATH|cat:'template/fontello/css/fontello-ato.css'}
-
-{if isset($ato.QUICK_EDIT)}
- {*<!-- mousetrap -->*}
- {combine_script id='mousetrap' load='footer' path=$ADMINTOOLS_PATH|cat:'template/mousetrap.min.js'}
-
- {*<!-- colorbox -->*}
- {combine_script id='jquery.colorbox' load='footer' require='jquery' path='themes/default/js/plugins/jquery.colorbox.min.js'}
- {combine_css id='colorbox' path='themes/default/js/plugins/colorbox/style2/colorbox.css'}
-
- {if isset($ato.IS_PICTURE)}
- {*<!-- tokeninput -->*}
- {combine_script id='jquery.tokeninput' load='footer' require='jquery' path='themes/default/js/plugins/jquery.tokeninput.js'}
- {combine_css path='themes/default/js/plugins/jquery.tokeninput.css'}
-
- {*<!-- datepicker -->*}
- {combine_script id='jquery.ui.datepicker' load='footer' path='themes/default/js/ui/jquery.ui.datepicker.js'}
-
- {assign var=datepicker_language value='themes/default/js/ui/i18n/jquery.ui.datepicker-'|cat:$lang_info.code|cat:'.js'}
- {if 'PHPWG_ROOT_PATH'|constant|cat:$datepicker_language|file_exists}
- {combine_script id='jquery.ui.datepicker-'|cat:$lang_info.code load='footer' path=$datepicker_language}
- {/if}
-
- {combine_css path='themes/default/js/ui/theme/jquery.ui.core.css'}
- {combine_css path='themes/default/js/ui/theme/jquery.ui.theme.css'}
- {combine_css path='themes/default/js/ui/theme/jquery.ui.datepicker.css'}
- {/if}
-{/if}
-
-{combine_script id='admintools.controller' load='footer' require='jquery' path=$ADMINTOOLS_PATH|cat:'template/public_controller.js'}
-{/strip}
-
-{footer_script require='admintools.controller'}
-AdminTools.urlWS = '{$ROOT_URL}ws.php?format=json&method=';
-AdminTools.urlSelf = '{$ato.U_SELF}';
-
-{if isset($ato.MULTIVIEW)}
-AdminTools.multiView = {
- view_as: {$ato.MULTIVIEW.view_as},
- theme: '{$ato.MULTIVIEW.theme}',
- lang: '{$ato.MULTIVIEW.lang}'
-};
-{/if}
-
-{if $ato.DELETE_CACHE}
- AdminTools.deleteCache();
-{/if}
- AdminTools.init({intval($ato.DEFAULT_OPEN)});
-{if isset($themeconf.mobile) and $themeconf.mobile}
- AdminTools.initMobile();
-{/if}
-{if isset($ato.U_SET_REPRESENTATIVE)}
- AdminTools.initRepresentative({$current.id}, {$ato.CATEGORY_ID});
-{/if}
-{if isset($ato.U_CADDIE) and isset($ato.IS_PICTURE)}
- AdminTools.initCaddie({$current.id});
-{/if}
-{if isset($ato.QUICK_EDIT)}
- AdminTools.initQuickEdit({intval(isset($ato.IS_PICTURE))}, {
- hintText: '{'Type in a search term'|translate|escape:javascript}',
- noResultsText: '{'No results'|translate|escape:javascript}',
- searchingText: '{'Searching...'|translate|escape:javascript}',
- newText: ' ({'new'|translate|escape:javascript})'
- });
-{/if}
-{/footer_script}
-
-<div id="ato_header_closed"{if $ato.POSITION=='right'} class="right"{/if}><a href="#" class="icon-tools"></a></div>
-
-<div id="ato_header">
- <ul>
- <li{if $ato.POSITION=='right'} class="right"{/if}><a href="#" class="icon-ato-cancel close-panel"></a></li>
- {if isset($ato.U_SITE_ADMIN)}
- <li class="parent"><a href="#" class="icon-menu ato-min-1">{'Administration'|translate}</a>
- <ul>
- <li><a class="icon-home" href="{$ato.U_SITE_ADMIN}intro">{'Home'|translate}</a></li>
- <li><a class="icon-picture" href="{$ato.U_SITE_ADMIN}batch_manager">{'Photos'|translate}</a></li>
- <li><a class="icon-sitemap" href="{$ato.U_SITE_ADMIN}cat_list">{'Albums'|translate}</a></li>
- <li><a class="icon-users" href="{$ato.U_SITE_ADMIN}user_list">{'Users'|translate}</a></li>
- <li><a class="icon-puzzle" href="{$ato.U_SITE_ADMIN}plugins">{'Plugins'|translate}</a></li>
- <li><a class="icon-wrench" href="{$ato.U_SITE_ADMIN}maintenance">{'Tools'|translate}</a></li>
- <li><a class="icon-cog" href="{$ato.U_SITE_ADMIN}configuration">{'Configuration'|translate}</a></li>
- </ul>
- </li>
- {/if}
- {if isset($ato.U_ADMIN_EDIT)}
- <li class="parent"><a href="#" class="icon-pencil ato-min-2">{'Edit'|translate}</a>
- <ul>
- <li><a href="#ato_quick_edit" class="icon-ato-flash edit-quick">{'Quick edit'|translate}</a></li>
- <li><a class="icon-ato-doc-text-inv" href="{$ato.U_ADMIN_EDIT}">{'Properties page'|translate}</a></li>
- {if isset($ato.U_DELETE)}
- <li style="margin-top:1em;"><a class="icon-ato-cancel" href="{$ato.U_DELETE}" onclick="return confirm('{'Are you sure?'|translate|escape:javascript}')">{'delete photo'|translate|ucfirst}</a></li>
- {/if}
- </ul>
- </li>
- {elseif isset($ato.QUICK_EDIT)}
- <li><a href="#ato_quick_edit" class="icon-pencil edit-quick ato-min-2">{'Edit'|translate}</a></li>
- {if isset($ato.U_DELETE)}
- <li><a class="icon-ato-cancel ato-min-2" href="{$ato.U_DELETE}" onclick="return confirm('{'Are you sure?'|translate|escape:javascript}')">{'delete photo'|translate|ucfirst}</a></li>
- {/if}
- {/if}
- {if isset($ato.U_SET_REPRESENTATIVE)}
- <li {if $ato.IS_REPRESENTATIVE}class="disabled"{/if}><a class="icon-ato-trophy set-representative ato-min-2" href="{$ato.U_SET_REPRESENTATIVE}">{'representative'|translate|ucfirst}</a></li>
- {/if}
- {if isset($ato.U_CADDIE)}
- <li {if $ato.IS_IN_CADDIE}class="disabled"{/if}><a class="icon-flag add-caddie ato-min-2" href="{$ato.U_CADDIE}">{'Add to caddie'|translate}</a></li>
- {/if}
- {if isset($ato.IS_CATEGORY)}
- <li><a class="icon-plus-circled ato-min-2" href="{$ato.U_SITE_ADMIN}photos_add&amp;album={$ato.CATEGORY_ID}">{'Add Photos'|translate}</a></li>
- {/if}
- <li class="saved"><span class="icon-ato-ok ato-min-1">{'Saved'|translate}</span></li>
-
- {if isset($ato.MULTIVIEW)}
- <li class="parent right multiview"><a class="icon-cog-alt ato-min-1" href="#">{'Tools'|translate}</a>
- <ul>
- <li><label>{'View as'|translate}</label>
- <select class="switcher" data-type="view_as"></select>
- </li>
- <li><label>{'Theme'|translate}</label>
- <select class="switcher" data-type="theme"></select>
- </li>
- <li><label>{'Language'|translate}</label>
- <select class="switcher" data-type="lang"></select>
- </li>
- <li><a class="icon-check{if !$ato.MULTIVIEW.show_queries}-empty{/if}" href="{$ato.U_SELF}ato_show_queries={(int)!$ato.MULTIVIEW.show_queries}">{'Show SQL queries'|translate}</a></li>
- <li><a class="icon-check{if !$ato.MULTIVIEW.debug_l10n}-empty{/if}" href="{$ato.U_SELF}ato_debug_l10n={(int)!$ato.MULTIVIEW.debug_l10n}">{'Debug languages'|translate}</a></li>
- <li><a class="icon-check{if !$ato.MULTIVIEW.debug_template}-empty{/if}" href="{$ato.U_SELF}ato_debug_template={(int)!$ato.MULTIVIEW.debug_template}">{'Debug template'|translate}</a></li>
- <li><a class="icon-check{if !$ato.MULTIVIEW.template_combine_files}-empty{/if}" href="{$ato.U_SELF}ato_template_combine_files={(int)!$ato.MULTIVIEW.template_combine_files}">{'Combine JS&CSS'|translate}</a></li>
- <li><a class="icon-check{if $ato.MULTIVIEW.no_history}-empty{/if}" href="{$ato.U_SELF}ato_no_history={(int)!$ato.MULTIVIEW.no_history}">{'Save visit in history'|translate}</a></li>
- <li><a class="icon-ato-null" href="{$ato.U_SELF}ato_purge_template=1">{'Purge compiled templates'|translate}</a></li>
- </ul>
- </li>
- {if $ato.USER.id != $ato.MULTIVIEW.view_as}
- <li class="right ato-hide-2"><span>
- {'Viewing as <b>%s</b>.'|translate:$ato.CURRENT_USERNAME}
- <a href="{$ato.U_SELF}ato_view_as={$ato.USER.id}">{'Revert'|translate}</a>
- </span></li>
- {/if}
- {/if}
- </ul>
-</div>
-
-{if isset($ato.QUICK_EDIT)}
-<div style="display:none;">
- <div id="ato_quick_edit" title="{'Quick edit'|translate}">
- <form method="post" action="{$ato.U_SELF}">
- <fieldset class="left">
- {if isset($ato.QUICK_EDIT.img)}<img src="{$ato.QUICK_EDIT.img}" width="100" height="100">{/if}
- <input type="submit" value="{'Save'|translate}">
- <a href="#" class="icon-ato-cancel close-edit">{'Cancel'|translate}</a>
- </fieldset>
-
- <fieldset class="main">
- <label for="quick_edit_name">{'Name'|translate}</label>
- <input type="text" name="name" id="quick_edit_name" value="{$ato.QUICK_EDIT.name|escape:html}">
-
- {if isset($ato.IS_PICTURE)}
- <label for="quick_edit_author">{'Author'|translate}</label>
- <input type="text" name="author" id="quick_edit_author" value="{$ato.QUICK_EDIT.author|escape:html}">
-
- <label for="quick_edit_date_creation">{'Creation date'|translate}</label>
- <input type="text" name="date_creation" id="quick_edit_date_creation" class="datepicker" value="{$ato.QUICK_EDIT.date_creation}">
- <input type="hidden" name="date_creation_time" value="{$ato.QUICK_EDIT.date_creation_time}">
-
- <label for="quick_edit_tags">{'Tags'|translate}</label>
- <select name="tags" id="quick_edit_tags" class="tags">
- {foreach from=$ato.QUICK_EDIT.tag_selection item=tag}
- <option value="{$tag.id}" class="selected">{$tag.name}</option>
- {/foreach}
- </select>
-
- {if isset($available_permission_levels)}
- <label for="quick_edit_level">{'Who can see this photo?'|@translate}</label>
- <select name="level" size="1">
- {html_options options=$available_permission_levels selected=$ato.QUICK_EDIT.level}
- </select>
- {/if}
- {/if}
-
- <label for="quick_edit_comment">{'Description'|translate}</label>
- <textarea name="comment" id="quick_edit_comment">{$ato.QUICK_EDIT.comment}</textarea>
- </fieldset>
-
- <input type="hidden" name="action" value="quick_edit">
- </form>
- </div>
-</div>
-{/if} \ No newline at end of file
diff --git a/plugins/AdminTools/template/public_style.css b/plugins/AdminTools/template/public_style.css
deleted file mode 100644
index 9b10158c2..000000000
--- a/plugins/AdminTools/template/public_style.css
+++ /dev/null
@@ -1,251 +0,0 @@
-.icon-ato-null:before { content:' '; }
-
-.token-input-dropdown {
- z-index:10000 !important;
-}
-
-#ato_header, #ato_header_closed {
- display:none;
-}
-#ato_header {
- width:100%;
-}
-#ato_header, #ato_header_closed:not(.smartpocket) {
- position:fixed;
- top:0;
- left:0;
- background:#464646;
- background-image:linear-gradient(to bottom, #383838 0%, #464646 20%, #464646 80%, #383838 100%);
- z-index:1000;
-}
-
-#ato_header>ul {
- padding:0;
- margin:0;
-}
-
-#ato_header>ul li {
- list-style:none;
- line-height:16px;
- font-size:13px;
- white-space:nowrap;
-}
- #ato_header>ul li>*, #ato_header_closed:not(.smartpocket)>* {
- display:inline-block;
- padding:5px 10px;
- border:none;
- text-decoration:none;
- }
- #ato_header>ul li>*:before {
- font-size:16px;
- margin-right:0.5em;
- }
-
-#ato_header>ul>li {
- float:left;
- display:inline-block;
- position:relative;
- overflow:visible;
-}
- #ato_header>ul>li a {
- color:white;
- }
- #ato_header>ul>li.right {
- float:right;
- }
- #ato_header>ul>li {
- border-left:1px solid #666;
- }
- #ato_header>ul>li {
- border-right:1px solid #222;
- }
- #ato_header>ul>li>*, #ato_header_closed:not(.smartpocket)>* {
- color:#ddd;
- text-shadow:1px 1px 0px #222;
- }
- #ato_header>ul>li.disabled [class*="icon-"] {
- color:#888;
- text-shadow:none;
- }
- #ato_header>ul>li:not(.disabled):hover, #ato_header_closed:not(.smartpocket):hover {
- background:#222;
- background-image:linear-gradient(to bottom, #222, #353535);
- }
-
-#ato_header>ul ul {
- display:none;
- position:absolute;
- top:27px;
- left:0;
- min-width:100%;
- background:#fefefe;
- padding:0;
- margin:0;
- box-shadow:3px 3px 5px rgba(0,0,0,0.5);
-}
- #ato_header>ul>li.right ul {
- left:auto;
- right:0;
- }
- #ato_header>ul ul li {
- }
- #ato_header>ul ul li:hover {
- background:#dedede;
- }
- #ato_header>ul ul li>* {
- color:#444;
- text-shadow:1px 1px 0px #eee;
- }
- #ato_header>ul ul label {
- font-weight:bold;
- color:#777;
- display:inline-block;
- width:80px;
- padding:5px;
- text-align:right;
- font-size:11px;
- }
- #ato_header>ul ul select, #ato_header>ul ul option {
- font-size:13px;
- line-height:15px;
- color:#444;
- background:#fefefe;
- border-radius:2px;
- text-shadow:none;
- }
- #ato_header>ul ul select {
- border:1px solid #777;
- height:22px;
- padding:2px 3px;
- }
- #ato_header .switcher {
- display:none;
- }
-
-#ato_header_closed:not(.smartpocket) {
- left:10px;
- font-size:20px;
- border-radius:0 0 20% 20%;
- box-shadow:1px 1px 1px rgba(0,0,0,0.5);
- width:35px;
- height:35px;
-}
- #ato_header_closed:not(.smartpocket).right {
- left:auto;
- right:10px;
- }
- #ato_header_closed:not(.smartpocket)>* {
- padding:4px;
- }
-#ato_header_closed.smartpocket {
- float:left;
- margin-right:10px;
-}
- #ato_header_closed.smartpocket .ui-btn-inner {
- display:none;
- }
-
-#ato_header>ul .close-panel {
- padding:6px 1px 4px 5px;
-}
-#ato_header>ul .close-panel:hover {
- color:#d00;
-}
-#ato_header>ul .saved {
- display:none;
- border:none !important;
- -webkit-animation:blink 0.8s infinite;
- animation:blink 0.8s infinite;
-}
- #ato_header>ul .saved>* {
- color:#5f5;
- }
-
-#ato_quick_edit {
- padding:10px;
-}
- #ato_quick_edit fieldset {
- margin:0;
- padding:0;
- border:none;
- }
- #ato_quick_edit fieldset.left {
- float:left;
- width:100px;
- text-align:center;
- }
- #ato_quick_edit fieldset.left img {
- border-radius:2px;
- border:1px solid #111;
- }
- #ato_quick_edit fieldset.main {
- margin:0 0 0 110px;
- }
- #ato_quick_edit label {
- display:block;
- font-weight:bold;
- }
- #ato_quick_edit input, #ato_quick_edit textarea, #ato_quick_edit select {
- width:100%;
- margin:0 0 1em 0;
- border-radius:2px;
- padding:2px;
- -moz-box-sizing:border-box;
- box-sizing:border-box;
- }
- #ato_quick_edit textarea {
- height:110px;
- }
- #ato_quick_edit input[type="submit"] {
- margin:1.5em 0;
- cursor:pointer;
- background:#e60;
- border:none;
- color:#fff;
- }
- #ato_quick_edit input[type="submit"]:hover {
- background:#EF962F;
- }
- #ato_quick_edit ul.token-input-list {
- width:100%;
- margin:0 0 1em 0;
- }
-
-@-webkit-keyframes blink {
- 0% { opacity:0; }
- 50% { opacity:1; }
- 100% { opacity:0; }
-}
-@keyframes blink {
- 0% { opacity:0; }
- 50% { opacity:1; }
- 100% { opacity:0; }
-}
-
-@media (max-width:900px) {
- #ato_header .ato-min-1 {
- font-size:0px;
- line-height:0px;
- }
- #ato_header .ato-min-1:before {
- margin-right:0;
- }
-
- #ato_header .ato-hide-1 {
- display:none;
- }
-}
-
-@media (max-width:750px) {
- #ato_header .ato-min-2 {
- font-size:0px;
- line-height:0px;
- }
- #ato_header .ato-min-2:before {
- margin-right:0;
- }
-
- #ato_header .ato-hide-2 {
- display:none;
- }
-} \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/admin.php b/plugins/LocalFilesEditor/admin.php
deleted file mode 100644
index f9f297bd5..000000000
--- a/plugins/LocalFilesEditor/admin.php
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
-include_once(PHPWG_ROOT_PATH.'admin/include/tabsheet.class.php');
-include_once(LOCALEDIT_PATH.'include/functions.inc.php');
-load_language('plugin.lang', LOCALEDIT_PATH);
-$my_base_url = get_root_url().'admin.php?page=plugin-'.basename(dirname(__FILE__));
-
-// +-----------------------------------------------------------------------+
-// | Tabssheet
-// +-----------------------------------------------------------------------+
-
-if (empty($conf['LocalFilesEditor_tabs']))
-{
- $conf['LocalFilesEditor_tabs'] = array('localconf', 'css', 'tpl', 'lang', 'plug');
-}
-
-$page['tab'] = isset($_GET['tab']) ? $_GET['tab'] : $conf['LocalFilesEditor_tabs'][0];
-
-if (!in_array($page['tab'], $conf['LocalFilesEditor_tabs'])) die('Hacking attempt!');
-
-$tabsheet = new tabsheet();
-foreach ($conf['LocalFilesEditor_tabs'] as $tab)
-{
- $tabsheet->add($tab, l10n('locfiledit_onglet_'.$tab), $my_base_url.'-'.$tab);
-}
-$tabsheet->select($page['tab']);
-$tabsheet->assign();
-
-include_once(LOCALEDIT_PATH.'include/'.$page['tab'].'.inc.php');
-
-// +-----------------------------------------------------------------------+
-// | Load backup file
-// +-----------------------------------------------------------------------+
-if (isset($_POST['restore']))
-{
- $content_file = file_get_contents(get_bak_file($edited_file));
- $page['infos'][] = l10n('locfiledit_bak_loaded1');
- $page['infos'][] = l10n('locfiledit_bak_loaded2');
-}
-
-// +-----------------------------------------------------------------------+
-// | Save file
-// +-----------------------------------------------------------------------+
-if (isset($_POST['submit']))
-{
- check_pwg_token();
-
- if (!is_webmaster())
- {
- $page['errors'][] = l10n('locfiledit_webmaster_only');
- }
- else
- {
- $content_file = stripslashes($_POST['text']);
- if (get_extension($edited_file) == 'php')
- {
- $content_file = eval_syntax($content_file);
- }
- if ($content_file === false)
- {
- $page['errors'][] = l10n('locfiledit_syntax_error');
- }
- else
- {
- if ($page['tab'] == 'plug' and !is_dir(PHPWG_PLUGINS_PATH . 'PersonalPlugin'))
- {
- @mkdir(PHPWG_PLUGINS_PATH . "PersonalPlugin");
- }
- if (file_exists($edited_file))
- {
- @copy($edited_file, get_bak_file($edited_file));
- $page['infos'][] = l10n('locfiledit_saved_bak', substr(get_bak_file($edited_file), 2));
- }
-
- if ($file = @fopen($edited_file , "w"))
- {
- @fwrite($file , $content_file);
- @fclose($file);
- array_unshift($page['infos'], l10n('locfiledit_save_config'));
- $template->delete_compiled_templates();
- }
- else
- {
- $page['errors'][] = l10n('locfiledit_cant_save');
- }
- }
- }
-}
-
-// +-----------------------------------------------------------------------+
-// | template initialization
-// +-----------------------------------------------------------------------+
-$template->set_filenames(array(
- 'plugin_admin_content' => dirname(__FILE__) . '/template/admin.tpl'));
-
-if (!empty($edited_file))
-{
- if (!empty($page['errors']))
- {
- $content_file = stripslashes($_POST['text']);
- }
- $template->assign('zone_edit',
- array(
- 'EDITED_FILE' => $edited_file,
- 'CONTENT_FILE' => htmlspecialchars($content_file),
- 'FILE_NAME' => trim($edited_file, './\\')
- )
- );
- if (file_exists(get_bak_file($edited_file)))
- {
- $template->assign('restore', true);
- }
- if (file_exists($edited_file))
- {
- $template->assign('restore_infos', true);
- }
-}
-
-$template->assign(array(
- 'F_ACTION' => PHPWG_ROOT_PATH.'admin.php?page=plugin-LocalFilesEditor-'.$page['tab'],
- 'LOCALEDIT_PATH' => LOCALEDIT_PATH,
- 'PWG_TOKEN' => get_pwg_token(),
- 'CODEMIRROR_MODE' => @$codemirror_mode
- )
-);
-
-$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
-
-?>
diff --git a/plugins/LocalFilesEditor/codemirror/lib/codemirror.css b/plugins/LocalFilesEditor/codemirror/lib/codemirror.css
deleted file mode 100644
index 578af41ae..000000000
--- a/plugins/LocalFilesEditor/codemirror/lib/codemirror.css
+++ /dev/null
@@ -1,53 +0,0 @@
-.CodeMirror {
- overflow: auto;
- height: 300px;
- line-height: 1em;
- font-family: monospace;
- _position: relative; /* IE6 hack */
-}
-
-.CodeMirror-gutter {
- position: absolute; left: 0; top: 0;
- background-color: #f7f7f7;
- border-right: 1px solid #eee;
- min-width: 2em;
- height: 100%;
-}
-.CodeMirror-gutter-text {
- color: #aaa;
- text-align: right;
- padding: .4em .2em .4em .4em;
-}
-.CodeMirror-lines {
- padding: .4em;
-}
-
-.CodeMirror pre {
- -moz-border-radius: 0;
- -webkit-border-radius: 0;
- -o-border-radius: 0;
- border-radius: 0;
- border-width: 0; margin: 0; padding: 0; background: transparent;
- font-family: inherit;
-}
-
-.CodeMirror-cursor {
- z-index: 10;
- position: absolute;
- visibility: hidden;
- border-left: 1px solid black !important;
-}
-.CodeMirror-focused .CodeMirror-cursor {
- visibility: visible;
-}
-
-span.CodeMirror-selected {
- background: #ccc !important;
- color: HighlightText !important;
-}
-.CodeMirror-focused span.CodeMirror-selected {
- background: Highlight !important;
-}
-
-.CodeMirror-matchingbracket {color: #0f0 !important;}
-.CodeMirror-nonmatchingbracket {color: #f22 !important;}
diff --git a/plugins/LocalFilesEditor/codemirror/lib/codemirror.js b/plugins/LocalFilesEditor/codemirror/lib/codemirror.js
deleted file mode 100644
index 390e68c1f..000000000
--- a/plugins/LocalFilesEditor/codemirror/lib/codemirror.js
+++ /dev/null
@@ -1,1915 +0,0 @@
-// All functions that need access to the editor's state live inside
-// the CodeMirror function. Below that, at the bottom of the file,
-// some utilities are defined.
-
-// CodeMirror is the only global var we claim
-var CodeMirror = (function() {
- // This is the function that produces an editor instance. It's
- // closure is used to store the editor state.
- function CodeMirror(place, givenOptions) {
- // Determine effective options based on given values and defaults.
- var options = {}, defaults = CodeMirror.defaults;
- for (var opt in defaults)
- if (defaults.hasOwnProperty(opt))
- options[opt] = (givenOptions && givenOptions.hasOwnProperty(opt) ? givenOptions : defaults)[opt];
-
- // The element in which the editor lives. Takes care of scrolling
- // (if enabled).
- var wrapper = document.createElement("div");
- wrapper.className = "CodeMirror";
- // This mess creates the base DOM structure for the editor.
- wrapper.innerHTML =
- '<div style="position: relative">' + // Set to the height of the text, causes scrolling
- '<pre style="position: relative; height: 0; visibility: hidden; overflow: hidden;">' + // To measure line/char size
- '<span>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</span></pre>' +
- '<div style="position: relative">' + // Moved around its parent to cover visible view
- '<div class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div>' +
- '<div style="overflow: hidden; position: absolute; width: 0; left: 0">' + // Wraps and hides input textarea
- '<textarea style="height: 1px; position: absolute; width: 1px;" wrap="off"></textarea></div>' +
- // Provides positioning relative to (visible) text origin
- '<div class="CodeMirror-lines"><div style="position: relative">' +
- '<pre class="CodeMirror-cursor">&#160;</pre>' + // Absolutely positioned blinky cursor
- '<div></div></div></div></div></div>'; // This DIV contains the actual code
- if (place.appendChild) place.appendChild(wrapper); else place(wrapper);
- // I've never seen more elegant code in my life.
- var code = wrapper.firstChild, measure = code.firstChild, mover = measure.nextSibling,
- gutter = mover.firstChild, gutterText = gutter.firstChild,
- inputDiv = gutter.nextSibling, input = inputDiv.firstChild,
- lineSpace = inputDiv.nextSibling.firstChild, cursor = lineSpace.firstChild, lineDiv = cursor.nextSibling;
- if (options.tabindex != null) input.tabindex = options.tabindex;
- if (!options.gutter && !options.lineNumbers) gutter.style.display = "none";
-
- // Delayed object wrap timeouts, making sure only one is active. blinker holds an interval.
- var poll = new Delayed(), highlight = new Delayed(), blinker;
-
- // mode holds a mode API object. lines an array of Line objects
- // (see Line constructor), work an array of lines that should be
- // parsed, and history the undo history (instance of History
- // constructor).
- var mode, lines = [new Line("")], work, history = new History(), focused;
- loadMode();
- // The selection. These are always maintained to point at valid
- // positions. Inverted is used to remember that the user is
- // selecting bottom-to-top.
- var sel = {from: {line: 0, ch: 0}, to: {line: 0, ch: 0}, inverted: false};
- // Selection-related flags. shiftSelecting obviously tracks
- // whether the user is holding shift. reducedSelection is a hack
- // to get around the fact that we can't create inverted
- // selections. See below.
- var shiftSelecting, reducedSelection;
- // Variables used by startOperation/endOperation to track what
- // happened during the operation.
- var updateInput, changes, textChanged, selectionChanged, leaveInputAlone;
- // Current visible range (may be bigger than the view window).
- var showingFrom = 0, showingTo = 0, lastHeight = 0, curKeyId = null;
- // editing will hold an object describing the things we put in the
- // textarea, to help figure out whether something changed.
- // bracketHighlighted is used to remember that a backet has been
- // marked.
- var editing, bracketHighlighted;
-
- // Initialize the content. Somewhat hacky (delayed prepareInput)
- // to work around browser issues.
- operation(function(){setValue(options.value || ""); updateInput = false;})();
- setTimeout(prepareInput, 20);
-
- // Register our event handlers.
- connect(wrapper, "mousedown", operation(onMouseDown));
- // Gecko browsers fire contextmenu *after* opening the menu, at
- // which point we can't mess with it anymore. Context menu is
- // handled in onMouseDown for Gecko.
- if (!gecko) connect(wrapper, "contextmenu", operation(onContextMenu));
- connect(code, "dblclick", operation(onDblClick));
- connect(wrapper, "scroll", function() {updateDisplay([]); if (options.onScroll) options.onScroll(instance);});
- connect(window, "resize", function() {updateDisplay(true);});
- connect(input, "keyup", operation(onKeyUp));
- connect(input, "keydown", operation(onKeyDown));
- connect(input, "keypress", operation(onKeyPress));
- connect(input, "focus", onFocus);
- connect(input, "blur", onBlur);
-
- connect(wrapper, "dragenter", function(e){e.stop();});
- connect(wrapper, "dragover", function(e){e.stop();});
- connect(wrapper, "drop", operation(onDrop));
- connect(wrapper, "paste", function(){input.focus(); fastPoll();});
- connect(input, "paste", function(){fastPoll();});
- connect(input, "cut", function(){fastPoll();});
-
- if (document.activeElement == input) onFocus();
- else onBlur();
-
- function isLine(l) {return l >= 0 && l < lines.length;}
- // The instance object that we'll return. Mostly calls out to
- // local functions in the CodeMirror function. Some do some extra
- // range checking and/or clipping. operation is used to wrap the
- // call so that changes it makes are tracked, and the display is
- // updated afterwards.
- var instance = {
- getValue: getValue,
- setValue: operation(setValue),
- getSelection: getSelection,
- replaceSelection: operation(replaceSelection),
- focus: function(){input.focus(); onFocus(); fastPoll();},
- setOption: function(option, value) {
- options[option] = value;
- if (option == "lineNumbers" || option == "gutter") gutterChanged();
- else if (option == "mode" || option == "indentUnit") loadMode();
- },
- getOption: function(option) {return options[option];},
- undo: operation(undo),
- redo: operation(redo),
- indentLine: operation(function(n) {if (isLine(n)) indentLine(n, "smart");}),
- historySize: function() {return {undo: history.done.length, redo: history.undone.length};},
- matchBrackets: operation(function(){matchBrackets(true);}),
- getTokenAt: function(pos) {
- pos = clipPos(pos);
- return lines[pos.line].getTokenAt(mode, getStateBefore(pos.line), pos.ch);
- },
- cursorCoords: function(start){
- if (start == null) start = sel.inverted;
- return pageCoords(start ? sel.from : sel.to);
- },
- charCoords: function(pos){return pageCoords(clipPos(pos));},
- coordsChar: function(coords) {
- var off = eltOffset(lineSpace);
- var line = Math.min(showingTo - 1, showingFrom + Math.floor(coords.y / lineHeight()));
- return clipPos({line: line, ch: charFromX(clipLine(line), coords.x)});
- },
- getSearchCursor: function(query, pos, caseFold) {return new SearchCursor(query, pos, caseFold);},
- markText: operation(function(a, b, c){return operation(markText(a, b, c));}),
- setMarker: addGutterMarker,
- clearMarker: removeGutterMarker,
- setLineClass: operation(setLineClass),
- lineInfo: lineInfo,
- addWidget: function(pos, node, scroll) {
- var pos = localCoords(clipPos(pos), true);
- node.style.top = (showingFrom * lineHeight() + pos.yBot + paddingTop()) + "px";
- node.style.left = (pos.x + paddingLeft()) + "px";
- code.appendChild(node);
- if (scroll)
- scrollIntoView(pos.x, pos.yBot, pos.x + node.offsetWidth, pos.yBot + node.offsetHeight);
- },
-
- lineCount: function() {return lines.length;},
- getCursor: function(start) {
- if (start == null) start = sel.inverted;
- return copyPos(start ? sel.from : sel.to);
- },
- somethingSelected: function() {return !posEq(sel.from, sel.to);},
- setCursor: operation(function(line, ch) {
- if (ch == null && typeof line.line == "number") setCursor(line.line, line.ch);
- else setCursor(line, ch);
- }),
- setSelection: operation(function(from, to) {setSelection(clipPos(from), clipPos(to || from));}),
- getLine: function(line) {if (isLine(line)) return lines[line].text;},
- setLine: operation(function(line, text) {
- if (isLine(line)) replaceRange(text, {line: line, ch: 0}, {line: line, ch: lines[line].text.length});
- }),
- removeLine: operation(function(line) {
- if (isLine(line)) replaceRange("", {line: line, ch: 0}, clipPos({line: line+1, ch: 0}));
- }),
- replaceRange: operation(replaceRange),
- getRange: function(from, to) {return getRange(clipPos(from), clipPos(to));},
-
- operation: function(f){return operation(f)();},
- refresh: function(){updateDisplay(true);},
- getInputField: function(){return input;},
- getWrapperElement: function(){return wrapper;}
- };
-
- function setValue(code) {
- history = null;
- var top = {line: 0, ch: 0};
- updateLines(top, {line: lines.length - 1, ch: lines[lines.length-1].text.length},
- splitLines(code), top, top);
- history = new History();
- }
- function getValue(code) {
- var text = [];
- for (var i = 0, l = lines.length; i < l; ++i)
- text.push(lines[i].text);
- return text.join("\n");
- }
-
- function onMouseDown(e) {
- // First, see if this is a click in the gutter
- for (var n = e.target(); n != wrapper; n = n.parentNode)
- if (n.parentNode == gutterText) {
- if (options.onGutterClick)
- options.onGutterClick(instance, indexOf(gutterText.childNodes, n) + showingFrom);
- return e.stop();
- }
-
- if (gecko && e.button() == 3) onContextMenu(e);
- if (e.button() != 1) return;
- // For button 1, if it was clicked inside the editor
- // (posFromMouse returning non-null), we have to adjust the
- // selection.
- var start = posFromMouse(e), last = start, going;
- if (!start) {if (e.target() == wrapper) e.stop(); return;}
- setCursor(start.line, start.ch, false);
-
- if (!focused) onFocus();
- e.stop();
- // And then we have to see if it's a drag event, in which case
- // the dragged-over text must be selected.
- function end() {
- input.focus();
- updateInput = true;
- move(); up();
- }
- function extend(e) {
- var cur = posFromMouse(e, true);
- if (cur && !posEq(cur, last)) {
- if (!focused) onFocus();
- last = cur;
- setSelection(start, cur);
- updateInput = false;
- var visible = visibleLines();
- if (cur.line >= visible.to || cur.line < visible.from)
- going = setTimeout(operation(function(){extend(e);}), 150);
- }
- }
-
- var move = connect(document, "mousemove", operation(function(e) {
- clearTimeout(going);
- e.stop();
- extend(e);
- }), true);
- var up = connect(document, "mouseup", operation(function(e) {
- clearTimeout(going);
- var cur = posFromMouse(e);
- if (cur) setSelection(start, cur);
- e.stop();
- end();
- }), true);
- }
- function onDblClick(e) {
- var pos = posFromMouse(e);
- if (!pos) return;
- selectWordAt(pos);
- e.stop();
- }
- function onDrop(e) {
- var pos = posFromMouse(e, true), files = e.e.dataTransfer.files;
- if (!pos || options.readOnly) return;
- if (files && files.length && window.FileReader && window.File) {
- var n = files.length, text = Array(n), read = 0;
- for (var i = 0; i < n; ++i) loadFile(files[i], i);
- function loadFile(file, i) {
- var reader = new FileReader;
- reader.onload = function() {
- text[i] = reader.result;
- if (++read == n) replaceRange(text.join(""), clipPos(pos), clipPos(pos));
- };
- reader.readAsText(file);
- }
- }
- else {
- try {
- var text = e.e.dataTransfer.getData("Text");
- if (text) replaceRange(text, pos, pos);
- }
- catch(e){}
- }
- }
- function onKeyDown(e) {
- if (!focused) onFocus();
-
- var code = e.e.keyCode;
- // Tries to detect ctrl on non-mac, cmd on mac.
- var mod = (mac ? e.e.metaKey : e.e.ctrlKey) && !e.e.altKey, anyMod = e.e.ctrlKey || e.e.altKey || e.e.metaKey;
- if (code == 16 || e.e.shiftKey) shiftSelecting = shiftSelecting || (sel.inverted ? sel.to : sel.from);
- else shiftSelecting = null;
- // First give onKeyEvent option a chance to handle this.
- if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e.e))) return;
-
- if (code == 33 || code == 34) {scrollPage(code == 34); return e.stop();} // page up/down
- if (mod && (code == 36 || code == 35)) {scrollEnd(code == 36); return e.stop();} // ctrl-home/end
- if (mod && code == 65) {selectAll(); return e.stop();} // ctrl-a
- if (!options.readOnly) {
- if (!anyMod && code == 13) {return;} // enter
- if (!anyMod && code == 9 && handleTab(e.e.shiftKey)) return e.stop(); // tab
- if (mod && code == 90) {undo(); return e.stop();} // ctrl-z
- if (mod && ((e.e.shiftKey && code == 90) || code == 89)) {redo(); return e.stop();} // ctrl-shift-z, ctrl-y
- }
-
- // Key id to use in the movementKeys map. We also pass it to
- // fastPoll in order to 'self learn'. We need this because
- // reducedSelection, the hack where we collapse the selection to
- // its start when it is inverted and a movement key is pressed
- // (and later restore it again), shouldn't be used for
- // non-movement keys.
- curKeyId = (mod ? "c" : "") + code;
- if (sel.inverted && movementKeys.hasOwnProperty(curKeyId)) {
- var range = selRange(input);
- if (range) {
- reducedSelection = {anchor: range.start};
- setSelRange(input, range.start, range.start);
- }
- }
- fastPoll(curKeyId);
- }
- function onKeyUp(e) {
- if (reducedSelection) {
- reducedSelection = null;
- updateInput = true;
- }
- if (e.e.keyCode == 16) shiftSelecting = null;
- }
- function onKeyPress(e) {
- if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e.e))) return;
- if (options.electricChars && mode.electricChars) {
- var ch = String.fromCharCode(e.e.charCode == null ? e.e.keyCode : e.e.charCode);
- if (mode.electricChars.indexOf(ch) > -1)
- setTimeout(operation(function() {indentLine(sel.to.line, "smart");}), 50);
- }
- var code = e.e.keyCode;
- // Re-stop tab and enter. Necessary on some browsers.
- if (code == 13) {handleEnter(); e.stop();}
- else if (code == 9 && options.tabMode != "default") e.stop();
- else fastPoll(curKeyId);
- }
-
- function onFocus() {
- if (!focused && options.onFocus) options.onFocus(instance);
- focused = true;
- slowPoll();
- if (wrapper.className.search(/\bCodeMirror-focused\b/) == -1)
- wrapper.className += " CodeMirror-focused";
- restartBlink();
- }
- function onBlur() {
- if (focused && options.onBlur) options.onBlur(instance);
- clearInterval(blinker);
- shiftSelecting = null;
- focused = false;
- wrapper.className = wrapper.className.replace(" CodeMirror-focused", "");
- }
-
- // Replace the range from from to to by the strings in newText.
- // Afterwards, set the selection to selFrom, selTo.
- function updateLines(from, to, newText, selFrom, selTo) {
- if (history) {
- var old = [];
- for (var i = from.line, e = to.line + 1; i < e; ++i) old.push(lines[i].text);
- history.addChange(from.line, newText.length, old);
- while (history.done.length > options.undoDepth) history.done.shift();
- }
- updateLinesNoUndo(from, to, newText, selFrom, selTo);
- }
- function unredoHelper(from, to) {
- var change = from.pop();
- if (change) {
- var replaced = [], end = change.start + change.added;
- for (var i = change.start; i < end; ++i) replaced.push(lines[i].text);
- to.push({start: change.start, added: change.old.length, old: replaced});
- var pos = clipPos({line: change.start + change.old.length - 1,
- ch: editEnd(replaced[replaced.length-1], change.old[change.old.length-1])});
- updateLinesNoUndo({line: change.start, ch: 0}, {line: end - 1, ch: lines[end-1].text.length}, change.old, pos, pos);
- }
- }
- function undo() {unredoHelper(history.done, history.undone);}
- function redo() {unredoHelper(history.undone, history.done);}
-
- function updateLinesNoUndo(from, to, newText, selFrom, selTo) {
- var nlines = to.line - from.line, firstLine = lines[from.line], lastLine = lines[to.line];
- // First adjust the line structure, taking some care to leave highlighting intact.
- if (firstLine == lastLine) {
- if (newText.length == 1)
- firstLine.replace(from.ch, to.ch, newText[0]);
- else {
- lastLine = firstLine.split(to.ch, newText[newText.length-1]);
- var spliceargs = [from.line + 1, nlines];
- firstLine.replace(from.ch, firstLine.text.length, newText[0]);
- for (var i = 1, e = newText.length - 1; i < e; ++i) spliceargs.push(new Line(newText[i]));
- spliceargs.push(lastLine);
- lines.splice.apply(lines, spliceargs);
- }
- }
- else if (newText.length == 1) {
- firstLine.replace(from.ch, firstLine.text.length, newText[0] + lastLine.text.slice(to.ch));
- lines.splice(from.line + 1, nlines);
- }
- else {
- var spliceargs = [from.line + 1, nlines - 1];
- firstLine.replace(from.ch, firstLine.text.length, newText[0]);
- lastLine.replace(0, to.ch, newText[newText.length-1]);
- for (var i = 1, e = newText.length - 1; i < e; ++i) spliceargs.push(new Line(newText[i]));
- lines.splice.apply(lines, spliceargs);
- }
-
- // Add these lines to the work array, so that they will be
- // highlighted. Adjust work lines if lines were added/removed.
- var newWork = [], lendiff = newText.length - nlines - 1;
- for (var i = 0, l = work.length; i < l; ++i) {
- var task = work[i];
- if (task < from.line) newWork.push(task);
- else if (task > to.line) newWork.push(task + lendiff);
- }
- if (newText.length) newWork.push(from.line);
- work = newWork;
- startWorker(100);
- // Remember that these lines changed, for updating the display
- changes.push({from: from.line, to: to.line + 1, diff: lendiff});
- textChanged = true;
-
- // Update the selection
- function updateLine(n) {return n <= Math.min(to.line, to.line + lendiff) ? n : n + lendiff;}
- setSelection(selFrom, selTo, updateLine(sel.from.line), updateLine(sel.to.line));
-
- // Make sure the scroll-size div has the correct height.
- code.style.height = (lines.length * lineHeight() + 2 * paddingTop()) + "px";
- }
-
- function replaceRange(code, from, to) {
- from = clipPos(from);
- if (!to) to = from; else to = clipPos(to);
- code = splitLines(code);
- function adjustPos(pos) {
- if (posLess(pos, from)) return pos;
- if (!posLess(to, pos)) return end;
- var line = pos.line + code.length - (to.line - from.line) - 1;
- var ch = pos.ch;
- if (pos.line == to.line)
- ch += code[code.length-1].length - (to.ch - (to.line == from.line ? from.ch : 0));
- return {line: line, ch: ch};
- }
- var end;
- replaceRange1(code, from, to, function(end1) {
- end = end1;
- return {from: adjustPos(sel.from), to: adjustPos(sel.to)};
- });
- return end;
- }
- function replaceSelection(code, collapse) {
- replaceRange1(splitLines(code), sel.from, sel.to, function(end) {
- if (collapse == "end") return {from: end, to: end};
- else if (collapse == "start") return {from: sel.from, to: sel.from};
- else return {from: sel.from, to: end};
- });
- }
- function replaceRange1(code, from, to, computeSel) {
- var endch = code.length == 1 ? code[0].length + from.ch : code[code.length-1].length;
- var newSel = computeSel({line: from.line + code.length - 1, ch: endch});
- updateLines(from, to, code, newSel.from, newSel.to);
- }
-
- function getRange(from, to) {
- var l1 = from.line, l2 = to.line;
- if (l1 == l2) return lines[l1].text.slice(from.ch, to.ch);
- var code = [lines[l1].text.slice(from.ch)];
- for (var i = l1 + 1; i < l2; ++i) code.push(lines[i].text);
- code.push(lines[l2].text.slice(0, to.ch));
- return code.join("\n");
- }
- function getSelection() {
- return getRange(sel.from, sel.to);
- }
-
- var pollingFast = false; // Ensures slowPoll doesn't cancel fastPoll
- function slowPoll() {
- if (pollingFast) return;
- poll.set(2000, function() {
- startOperation();
- readInput();
- if (focused) slowPoll();
- endOperation();
- });
- }
- function fastPoll(keyId) {
- var missed = false;
- pollingFast = true;
- function p() {
- startOperation();
- var changed = readInput();
- if (changed == "moved" && keyId) movementKeys[keyId] = true;
- if (!changed && !missed) {missed = true; poll.set(80, p);}
- else {pollingFast = false; slowPoll();}
- endOperation();
- }
- poll.set(20, p);
- }
-
- // Inspects the textarea, compares its state (content, selection)
- // to the data in the editing variable, and updates the editor
- // content or cursor if something changed.
- function readInput() {
- var changed = false, text = input.value, sr = selRange(input);
- if (!sr) return false;
- var changed = editing.text != text, rs = reducedSelection;
- var moved = changed || sr.start != editing.start || sr.end != (rs ? editing.start : editing.end);
- if (reducedSelection && !moved && sel.from.line == 0 && sel.from.ch == 0)
- reducedSelection = null;
- else if (!moved) return false;
- if (changed) {
- shiftSelecting = reducedSelection = null;
- if (options.readOnly) {updateInput = true; return "changed";}
- }
-
- // Compute selection start and end based on start/end offsets in textarea
- function computeOffset(n, startLine) {
- var pos = 0;
- for (;;) {
- var found = text.indexOf("\n", pos);
- if (found == -1 || (text.charAt(found-1) == "\r" ? found - 1 : found) >= n)
- return {line: startLine, ch: n - pos};
- ++startLine;
- pos = found + 1;
- }
- }
- var from = computeOffset(sr.start, editing.from),
- to = computeOffset(sr.end, editing.from);
- // Here we have to take the reducedSelection hack into account,
- // so that you can, for example, press shift-up at the start of
- // your selection and have the right thing happen.
- if (rs) {
- from = sr.start == rs.anchor ? to : from;
- to = shiftSelecting ? sel.to : sr.start == rs.anchor ? from : to;
- if (!posLess(from, to)) {
- reducedSelection = null;
- sel.inverted = false;
- var tmp = from; from = to; to = tmp;
- }
- }
-
- // In some cases (cursor on same line as before), we don't have
- // to update the textarea content at all.
- if (from.line == to.line && from.line == sel.from.line && from.line == sel.to.line && !shiftSelecting)
- updateInput = false;
-
- // Magic mess to extract precise edited range from the changed
- // string.
- if (changed) {
- var start = 0, end = text.length, len = Math.min(end, editing.text.length);
- var c, line = editing.from, nl = -1;
- while (start < len && (c = text.charAt(start)) == editing.text.charAt(start)) {
- ++start;
- if (c == "\n") {line++; nl = start;}
- }
- var ch = nl > -1 ? start - nl : start, endline = editing.to - 1, edend = editing.text.length;
- for (;;) {
- c = editing.text.charAt(edend);
- if (c == "\n") endline--;
- if (text.charAt(end) != c) {++end; ++edend; break;}
- if (edend <= start || end <= start) break;
- --end; --edend;
- }
- var nl = editing.text.lastIndexOf("\n", edend - 1), endch = nl == -1 ? edend : edend - nl - 1;
- updateLines({line: line, ch: ch}, {line: endline, ch: endch}, splitLines(text.slice(start, end)), from, to);
- if (line != endline || from.line != line) updateInput = true;
- }
- else setSelection(from, to);
-
- editing.text = text; editing.start = sr.start; editing.end = sr.end;
- return changed ? "changed" : moved ? "moved" : false;
- }
-
- // Set the textarea content and selection range to match the
- // editor state.
- function prepareInput() {
- var text = [];
- var from = Math.max(0, sel.from.line - 1), to = Math.min(lines.length, sel.to.line + 2);
- for (var i = from; i < to; ++i) text.push(lines[i].text);
- text = input.value = text.join(lineSep);
- var startch = sel.from.ch, endch = sel.to.ch;
- for (var i = from; i < sel.from.line; ++i)
- startch += lineSep.length + lines[i].text.length;
- for (var i = from; i < sel.to.line; ++i)
- endch += lineSep.length + lines[i].text.length;
- editing = {text: text, from: from, to: to, start: startch, end: endch};
- setSelRange(input, startch, reducedSelection ? startch : endch);
- }
-
- function scrollCursorIntoView() {
- var cursor = localCoords(sel.inverted ? sel.from : sel.to);
- return scrollIntoView(cursor.x, cursor.y, cursor.x, cursor.yBot);
- }
- function scrollIntoView(x1, y1, x2, y2) {
- var pl = paddingLeft(), pt = paddingTop();
- y1 += pt; y2 += pt; x1 += pl; x2 += pl;
- var screen = wrapper.clientHeight, screentop = wrapper.scrollTop, scrolled = false, result = true;
- if (y1 < screentop) {wrapper.scrollTop = Math.max(0, y1 - 10); scrolled = true;}
- else if (y2 > screentop + screen) {wrapper.scrollTop = y2 + 10 - screen; scrolled = true;}
-
- var screenw = wrapper.clientWidth, screenleft = wrapper.scrollLeft;
- if (x1 < screenleft) {wrapper.scrollLeft = Math.max(0, x1 - 10); scrolled = true;}
- else if (x2 > screenw + screenleft) {
- wrapper.scrollLeft = x2 + 10 - screenw;
- scrolled = true;
- if (x2 > code.clientWidth) result = false;
- }
- if (scrolled && options.onScroll) options.onScroll(instance);
- return result;
- }
-
- function visibleLines() {
- var lh = lineHeight(), top = wrapper.scrollTop - paddingTop();
- return {from: Math.min(lines.length, Math.max(0, Math.floor(top / lh))),
- to: Math.min(lines.length, Math.ceil((top + wrapper.clientHeight) / lh))};
- }
- // Uses a set of changes plus the current scroll position to
- // determine which DOM updates have to be made, and makes the
- // updates.
- function updateDisplay(changes) {
- if (!wrapper.clientWidth) {
- showingFrom = showingTo = 0;
- return;
- }
- // First create a range of theoretically intact lines, and punch
- // holes in that using the change info.
- var intact = changes === true ? [] : [{from: showingFrom, to: showingTo, domStart: 0}];
- for (var i = 0, l = changes.length || 0; i < l; ++i) {
- var change = changes[i], intact2 = [], diff = change.diff || 0;
- for (var j = 0, l2 = intact.length; j < l2; ++j) {
- var range = intact[j];
- if (change.to <= range.from)
- intact2.push({from: range.from + diff, to: range.to + diff, domStart: range.domStart});
- else if (range.to <= change.from)
- intact2.push(range);
- else {
- if (change.from > range.from)
- intact2.push({from: range.from, to: change.from, domStart: range.domStart})
- if (change.to < range.to)
- intact2.push({from: change.to + diff, to: range.to + diff,
- domStart: range.domStart + (change.to - range.from)});
- }
- }
- intact = intact2;
- }
-
- // Then, determine which lines we'd want to see, and which
- // updates have to be made to get there.
- var visible = visibleLines();
- var from = Math.min(showingFrom, Math.max(visible.from - 3, 0)),
- to = Math.min(lines.length, Math.max(showingTo, visible.to + 3)),
- updates = [], domPos = 0, domEnd = showingTo - showingFrom, pos = from, changedLines = 0;
-
- for (var i = 0, l = intact.length; i < l; ++i) {
- var range = intact[i];
- if (range.to <= from) continue;
- if (range.from >= to) break;
- if (range.domStart > domPos || range.from > pos) {
- updates.push({from: pos, to: range.from, domSize: range.domStart - domPos, domStart: domPos});
- changedLines += range.from - pos;
- }
- pos = range.to;
- domPos = range.domStart + (range.to - range.from);
- }
- if (domPos != domEnd || pos != to) {
- changedLines += Math.abs(to - pos);
- updates.push({from: pos, to: to, domSize: domEnd - domPos, domStart: domPos});
- }
-
- if (!updates.length) return;
- lineDiv.style.display = "none";
- // If more than 30% of the screen needs update, just do a full
- // redraw (which is quicker than patching)
- if (changedLines > (visible.to - visible.from) * .3)
- refreshDisplay(from = Math.max(visible.from - 10, 0), to = Math.min(visible.to + 7, lines.length));
- // Otherwise, only update the stuff that needs updating.
- else
- patchDisplay(updates);
- lineDiv.style.display = "";
-
- // Position the mover div to align with the lines it's supposed
- // to be showing (which will cover the visible display)
- var different = from != showingFrom || to != showingTo || lastHeight != wrapper.clientHeight;
- showingFrom = from; showingTo = to;
- mover.style.top = (from * lineHeight()) + "px";
- if (different) {
- lastHeight = wrapper.clientHeight;
- code.style.height = (lines.length * lineHeight() + 2 * paddingTop()) + "px";
- updateGutter();
- }
-
- // Since this is all rather error prone, it is honoured with the
- // only assertion in the whole file.
- if (lineDiv.childNodes.length != showingTo - showingFrom)
- throw new Error("BAD PATCH! " + JSON.stringify(updates) + " size=" + (showingTo - showingFrom) +
- " nodes=" + lineDiv.childNodes.length);
- updateCursor();
- }
-
- function refreshDisplay(from, to) {
- var html = [], start = {line: from, ch: 0}, inSel = posLess(sel.from, start) && !posLess(sel.to, start);
- for (var i = from; i < to; ++i) {
- var ch1 = null, ch2 = null;
- if (inSel) {
- ch1 = 0;
- if (sel.to.line == i) {inSel = false; ch2 = sel.to.ch;}
- }
- else if (sel.from.line == i) {
- if (sel.to.line == i) {ch1 = sel.from.ch; ch2 = sel.to.ch;}
- else {inSel = true; ch1 = sel.from.ch;}
- }
- html.push(lines[i].getHTML(ch1, ch2, true));
- }
- lineDiv.innerHTML = html.join("");
- }
- function patchDisplay(updates) {
- // Slightly different algorithm for IE (badInnerHTML), since
- // there .innerHTML on PRE nodes is dumb, and discards
- // whitespace.
- var sfrom = sel.from.line, sto = sel.to.line, off = 0,
- scratch = badInnerHTML && document.createElement("div");
- for (var i = 0, e = updates.length; i < e; ++i) {
- var rec = updates[i];
- var extra = (rec.to - rec.from) - rec.domSize;
- var nodeAfter = lineDiv.childNodes[rec.domStart + rec.domSize + off] || null;
- if (badInnerHTML)
- for (var j = Math.max(-extra, rec.domSize); j > 0; --j)
- lineDiv.removeChild(nodeAfter ? nodeAfter.previousSibling : lineDiv.lastChild);
- else if (extra) {
- for (var j = Math.max(0, extra); j > 0; --j)
- lineDiv.insertBefore(document.createElement("pre"), nodeAfter);
- for (var j = Math.max(0, -extra); j > 0; --j)
- lineDiv.removeChild(nodeAfter ? nodeAfter.previousSibling : lineDiv.lastChild);
- }
- var node = lineDiv.childNodes[rec.domStart + off], inSel = sfrom < rec.from && sto >= rec.from;
- for (var j = rec.from; j < rec.to; ++j) {
- var ch1 = null, ch2 = null;
- if (inSel) {
- ch1 = 0;
- if (sto == j) {inSel = false; ch2 = sel.to.ch;}
- }
- else if (sfrom == j) {
- if (sto == j) {ch1 = sel.from.ch; ch2 = sel.to.ch;}
- else {inSel = true; ch1 = sel.from.ch;}
- }
- if (badInnerHTML) {
- scratch.innerHTML = lines[j].getHTML(ch1, ch2, true);
- lineDiv.insertBefore(scratch.firstChild, nodeAfter);
- }
- else {
- node.innerHTML = lines[j].getHTML(ch1, ch2, false);
- node.className = lines[j].className || "";
- node = node.nextSibling;
- }
- }
- off += extra;
- }
- }
-
- function updateGutter() {
- if (!options.gutter && !options.lineNumbers) return;
- var hText = mover.offsetHeight, hEditor = wrapper.clientHeight;
- gutter.style.height = (hText - hEditor < 2 ? hEditor : hText) + "px";
- var html = [];
- for (var i = showingFrom; i < showingTo; ++i) {
- var marker = lines[i].gutterMarker;
- var text = options.lineNumbers ? i + options.firstLineNumber : null;
- if (marker && marker.text)
- text = marker.text.replace("%N%", text != null ? text : "");
- else if (text == null)
- text = "\u00a0";
- html.push((marker && marker.style ? '<pre class="' + marker.style + '">' : "<pre>"), text, "</pre>");
- }
- gutter.style.display = "none";
- gutterText.innerHTML = html.join("");
- var minwidth = String(lines.length).length, firstNode = gutterText.firstChild, val = eltText(firstNode), pad = "";
- while (val.length + pad.length < minwidth) pad += "\u00a0";
- if (pad) firstNode.insertBefore(document.createTextNode(pad), firstNode.firstChild);
- gutter.style.display = "";
- lineSpace.style.marginLeft = gutter.offsetWidth + "px";
- }
- function updateCursor() {
- var head = sel.inverted ? sel.from : sel.to;
- var x = charX(head.line, head.ch) + "px", y = (head.line - showingFrom) * lineHeight() + "px";
- inputDiv.style.top = y; inputDiv.style.left = x;
- if (posEq(sel.from, sel.to)) {
- cursor.style.top = y; cursor.style.left = x;
- cursor.style.display = "";
- }
- else cursor.style.display = "none";
- }
-
- // Update the selection. Last two args are only used by
- // updateLines, since they have to be expressed in the line
- // numbers before the update.
- function setSelection(from, to, oldFrom, oldTo) {
- if (posEq(sel.from, from) && posEq(sel.to, to)) return;
- var sh = shiftSelecting && clipPos(shiftSelecting);
- if (posLess(to, from)) {var tmp = to; to = from; from = tmp;}
- if (sh) {
- if (posLess(sh, from)) from = sh;
- else if (posLess(to, sh)) to = sh;
- }
-
- var startEq = posEq(sel.to, to), endEq = posEq(sel.from, from);
- if (posEq(from, to)) sel.inverted = false;
- else if (startEq && !endEq) sel.inverted = true;
- else if (endEq && !startEq) sel.inverted = false;
-
- // Some ugly logic used to only mark the lines that actually did
- // see a change in selection as changed, rather than the whole
- // selected range.
- if (oldFrom == null) {oldFrom = sel.from.line; oldTo = sel.to.line;}
- if (posEq(from, to)) {
- if (!posEq(sel.from, sel.to))
- changes.push({from: oldFrom, to: oldTo + 1});
- }
- else if (posEq(sel.from, sel.to)) {
- changes.push({from: from.line, to: to.line + 1});
- }
- else {
- if (!posEq(from, sel.from)) {
- if (from.line < oldFrom)
- changes.push({from: from.line, to: Math.min(to.line, oldFrom) + 1});
- else
- changes.push({from: oldFrom, to: Math.min(oldTo, from.line) + 1});
- }
- if (!posEq(to, sel.to)) {
- if (to.line < oldTo)
- changes.push({from: Math.max(oldFrom, from.line), to: oldTo + 1});
- else
- changes.push({from: Math.max(from.line, oldTo), to: to.line + 1});
- }
- }
- sel.from = from; sel.to = to;
- selectionChanged = true;
- }
- function setCursor(line, ch) {
- var pos = clipPos({line: line, ch: ch || 0});
- setSelection(pos, pos);
- }
-
- function clipLine(n) {return Math.max(0, Math.min(n, lines.length-1));}
- function clipPos(pos) {
- if (pos.line < 0) return {line: 0, ch: 0};
- if (pos.line >= lines.length) return {line: lines.length-1, ch: lines[lines.length-1].text.length};
- var ch = pos.ch, linelen = lines[pos.line].text.length;
- if (ch == null || ch > linelen) return {line: pos.line, ch: linelen};
- else if (ch < 0) return {line: pos.line, ch: 0};
- else return pos;
- }
-
- function scrollPage(down) {
- var linesPerPage = Math.floor(wrapper.clientHeight / lineHeight()), head = sel.inverted ? sel.from : sel.to;
- setCursor(head.line + (Math.max(linesPerPage - 1, 1) * (down ? 1 : -1)), head.ch);
- }
- function scrollEnd(top) {
- setCursor(top ? 0 : lines.length - 1);
- }
- function selectAll() {
- var endLine = lines.length - 1;
- setSelection({line: 0, ch: 0}, {line: endLine, ch: lines[endLine].text.length});
- }
- function selectWordAt(pos) {
- var line = lines[pos.line].text;
- var start = pos.ch, end = pos.ch;
- while (start > 0 && /\w/.test(line.charAt(start - 1))) --start;
- while (end < line.length - 1 && /\w/.test(line.charAt(end))) ++end;
- setSelection({line: pos.line, ch: start}, {line: pos.line, ch: end});
- }
- function handleEnter() {
- replaceSelection("\n", "end");
- if (options.enterMode != "flat")
- indentLine(sel.from.line, options.enterMode == "keep" ? "prev" : "smart");
- }
- function handleTab(shift) {
- shiftSelecting = null;
- switch (options.tabMode) {
- case "default":
- return false;
- case "indent":
- for (var i = sel.from.line, e = sel.to.line; i <= e; ++i) indentLine(i, "smart");
- break;
- case "classic":
- if (posEq(sel.from, sel.to)) {
- if (shift) indentLine(sel.from.line, "smart");
- else replaceSelection("\t", "end");
- break;
- }
- case "shift":
- for (var i = sel.from.line, e = sel.to.line; i <= e; ++i) indentLine(i, shift ? "subtract" : "add");
- break;
- }
- return true;
- }
-
- function indentLine(n, how) {
- if (how == "smart") {
- if (!mode.indent) how = "prev";
- else var state = getStateBefore(n);
- }
-
- var line = lines[n], curSpace = line.indentation(), curSpaceString = line.text.match(/^\s*/)[0], indentation;
- if (how == "prev") {
- if (n) indentation = lines[n-1].indentation();
- else indentation = 0;
- }
- else if (how == "smart") indentation = mode.indent(state, line.text.slice(curSpaceString.length));
- else if (how == "add") indentation = curSpace + options.indentUnit;
- else if (how == "subtract") indentation = curSpace - options.indentUnit;
- indentation = Math.max(0, indentation);
- var diff = indentation - curSpace;
-
- if (!diff) {
- if (sel.from.line != n && sel.to.line != n) return;
- var indentString = curSpaceString;
- }
- else {
- var indentString = "", pos = 0;
- if (options.indentWithTabs)
- for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";}
- while (pos < indentation) {++pos; indentString += " ";}
- }
-
- replaceRange(indentString, {line: n, ch: 0}, {line: n, ch: curSpaceString.length});
- }
-
- function loadMode() {
- mode = CodeMirror.getMode(options, options.mode);
- for (var i = 0, l = lines.length; i < l; ++i)
- lines[i].stateAfter = null;
- work = [0];
- }
- function gutterChanged() {
- var visible = options.gutter || options.lineNumbers;
- gutter.style.display = visible ? "" : "none";
- if (visible) updateGutter();
- else lineDiv.parentNode.style.marginLeft = 0;
- }
-
- function markText(from, to, className) {
- from = clipPos(from); to = clipPos(to);
- var accum = [];
- function add(line, from, to, className) {
- var line = lines[line], mark = line.addMark(from, to, className);
- mark.line = line;
- accum.push(mark);
- }
- if (from.line == to.line) add(from.line, from.ch, to.ch, className);
- else {
- add(from.line, from.ch, null, className);
- for (var i = from.line + 1, e = to.line; i < e; ++i)
- add(i, 0, null, className);
- add(to.line, 0, to.ch, className);
- }
- changes.push({from: from.line, to: to.line + 1});
- return function() {
- var start, end;
- for (var i = 0; i < accum.length; ++i) {
- var mark = accum[i], found = indexOf(lines, mark.line);
- mark.line.removeMark(mark);
- if (found > -1) {
- if (start == null) start = found;
- end = found;
- }
- }
- if (start != null) changes.push({from: start, to: end + 1});
- };
- }
-
- function addGutterMarker(line, text, className) {
- if (typeof line == "number") line = lines[clipLine(line)];
- line.gutterMarker = {text: text, style: className};
- updateGutter();
- return line;
- }
- function removeGutterMarker(line) {
- if (typeof line == "number") line = lines[clipLine(line)];
- line.gutterMarker = null;
- updateGutter();
- }
- function setLineClass(line, className) {
- if (typeof line == "number") {
- var no = line;
- line = lines[clipLine(line)];
- }
- else {
- var no = indexOf(lines, line);
- if (no == -1) return null;
- }
- line.className = className;
- changes.push({from: no, to: no + 1});
- return line;
- }
-
- function lineInfo(line) {
- if (typeof line == "number") {
- var n = line;
- line = lines[line];
- if (!line) return null;
- }
- else {
- var n = indexOf(lines, line);
- if (n == -1) return null;
- }
- var marker = line.gutterMarker;
- return {line: n, text: line.text, markerText: marker && marker.text, markerClass: marker && marker.style};
- }
-
- // These are used to go from pixel positions to character
- // positions, taking tabs into account.
- function charX(line, pos) {
- var text = lines[line].text, span = measure.firstChild;
- if (text.lastIndexOf("\t", pos) == -1) return pos * charWidth();
- var old = span.firstChild.nodeValue;
- try {
- span.firstChild.nodeValue = text.slice(0, pos);
- return span.offsetWidth;
- } finally {span.firstChild.nodeValue = old;}
- }
- function charFromX(line, x) {
- var text = lines[line].text, cw = charWidth();
- if (x <= 0) return 0;
- if (text.indexOf("\t") == -1) return Math.min(text.length, Math.round(x / cw));
- var mspan = measure.firstChild, mtext = mspan.firstChild, old = mtext.nodeValue;
- try {
- mtext.nodeValue = text;
- var from = 0, fromX = 0, to = text.length, toX = mspan.offsetWidth;
- if (x > toX) return to;
- for (;;) {
- if (to - from <= 1) return (toX - x > x - fromX) ? from : to;
- var middle = Math.ceil((from + to) / 2);
- mtext.nodeValue = text.slice(0, middle);
- var curX = mspan.offsetWidth;
- if (curX > x) {to = middle; toX = curX;}
- else {from = middle; fromX = curX;}
- }
- } finally {mtext.nodeValue = old;}
- }
-
- function localCoords(pos, inLineWrap) {
- var lh = lineHeight(), line = pos.line - (inLineWrap ? showingFrom : 0);
- return {x: charX(pos.line, pos.ch), y: line * lh, yBot: (line + 1) * lh};
- }
- function pageCoords(pos) {
- var local = localCoords(pos, true), off = eltOffset(lineSpace);
- return {x: off.left + local.x, y: off.top + local.y, yBot: off.top + local.yBot};
- }
-
- function lineHeight() {
- var nlines = lineDiv.childNodes.length;
- if (nlines) return lineDiv.offsetHeight / nlines;
- else return measure.firstChild.offsetHeight || 1;
- }
- function charWidth() {return (measure.firstChild.offsetWidth || 320) / 40;}
- function paddingTop() {return lineSpace.offsetTop;}
- function paddingLeft() {return lineSpace.offsetLeft;}
-
- function posFromMouse(e, liberal) {
- var off = eltOffset(lineSpace),
- x = e.pageX() - off.left,
- y = e.pageY() - off.top;
- if (!liberal && e.target() != lineSpace.parentNode && !(e.target() == wrapper && y > (lines.length * lineHeight())))
- for (var n = e.target(); n != lineDiv && n != cursor; n = n.parentNode)
- if (!n || n == wrapper) return null;
- var line = showingFrom + Math.floor(y / lineHeight());
- return clipPos({line: line, ch: charFromX(clipLine(line), x)});
- }
- function onContextMenu(e) {
- var pos = posFromMouse(e);
- if (!pos || window.opera) return; // Opera is difficult.
- if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to))
- setCursor(pos.line, pos.ch);
-
- var oldCSS = input.style.cssText;
- input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.pageY() - 1) +
- "px; left: " + (e.pageX() - 1) + "px; z-index: 1000; background: white; " +
- "border-width: 0; outline: none; overflow: hidden;";
- var val = input.value = getSelection();
- input.focus();
- setSelRange(input, 0, val.length);
- if (gecko) e.stop();
- leaveInputAlone = true;
- setTimeout(function() {
- if (input.value != val) operation(replaceSelection)(input.value, "end");
- input.style.cssText = oldCSS;
- leaveInputAlone = false;
- prepareInput();
- slowPoll();
- }, 50);
- }
-
- // Cursor-blinking
- function restartBlink() {
- clearInterval(blinker);
- var on = true;
- cursor.style.visibility = "";
- blinker = setInterval(function() {
- cursor.style.visibility = (on = !on) ? "" : "hidden";
- }, 650);
- }
-
- var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"};
- function matchBrackets(autoclear) {
- var head = sel.inverted ? sel.from : sel.to, line = lines[head.line], pos = head.ch - 1;
- var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];
- if (!match) return;
- var ch = match.charAt(0), forward = match.charAt(1) == ">", d = forward ? 1 : -1, st = line.styles;
- for (var off = pos + 1, i = 0, e = st.length; i < e; i+=2)
- if ((off -= st[i].length) <= 0) {var style = st[i+1]; break;}
-
- var stack = [line.text.charAt(pos)], re = /[(){}[\]]/;
- function scan(line, from, to) {
- if (!line.text) return;
- var st = line.styles, pos = forward ? 0 : line.text.length - 1, cur;
- for (var i = forward ? 0 : st.length - 2, e = forward ? st.length : -2; i != e; i += 2*d) {
- var text = st[i];
- if (st[i+1] != null && st[i+1] != style) {pos += d * text.length; continue;}
- for (var j = forward ? 0 : text.length - 1, te = forward ? text.length : -1; j != te; j += d, pos+=d) {
- if (pos >= from && pos < to && re.test(cur = text.charAt(j))) {
- var match = matching[cur];
- if (match.charAt(1) == ">" == forward) stack.push(cur);
- else if (stack.pop() != match.charAt(0)) return {pos: pos, match: false};
- else if (!stack.length) return {pos: pos, match: true};
- }
- }
- }
- }
- for (var i = head.line, e = forward ? Math.min(i + 50, lines.length) : Math.max(0, i - 50); i != e; i+=d) {
- var line = lines[i], first = i == head.line;
- var found = scan(line, first && forward ? pos + 1 : 0, first && !forward ? pos : line.text.length);
- if (found) {
- var style = found.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket";
- var one = markText({line: head.line, ch: pos}, {line: head.line, ch: pos+1}, style),
- two = markText({line: i, ch: found.pos}, {line: i, ch: found.pos + 1}, style);
- var clear = operation(function(){one(); two();});
- if (autoclear) setTimeout(clear, 800);
- else bracketHighlighted = clear;
- break;
- }
- }
- }
-
- // Finds the line to start with when starting a parse. Tries to
- // find a line with a stateAfter, so that it can start with a
- // valid state. If that fails, it returns the line with the
- // smallest indentation, which tends to need the least context to
- // parse correctly.
- function findStartLine(n) {
- var minindent, minline;
- for (var search = n, lim = n - 40; search > lim; --search) {
- if (search == 0) return 0;
- var line = lines[search-1];
- if (line.stateAfter) return search;
- var indented = line.indentation();
- if (minline == null || minindent > indented) {
- minline = search;
- minindent = indented;
- }
- }
- return minline;
- }
- function getStateBefore(n) {
- var start = findStartLine(n), state = start && lines[start-1].stateAfter;
- if (!state) state = startState(mode);
- else state = copyState(mode, state);
- for (var i = start; i < n; ++i) {
- var line = lines[i];
- line.highlight(mode, state);
- line.stateAfter = copyState(mode, state);
- }
- if (!lines[n].stateAfter) work.push(n);
- return state;
- }
- function highlightWorker() {
- var end = +new Date + options.workTime;
- while (work.length) {
- if (!lines[showingFrom].stateAfter) var task = showingFrom;
- else var task = work.pop();
- if (task >= lines.length) continue;
- var start = findStartLine(task), state = start && lines[start-1].stateAfter;
- if (state) state = copyState(mode, state);
- else state = startState(mode);
-
- for (var i = start, l = lines.length; i < l; ++i) {
- var line = lines[i], hadState = line.stateAfter;
- if (+new Date > end) {
- work.push(i);
- startWorker(options.workDelay);
- changes.push({from: task, to: i});
- return;
- }
- var changed = line.highlight(mode, state);
- line.stateAfter = copyState(mode, state);
- if (hadState && !changed && line.text) break;
- }
- changes.push({from: task, to: i});
- }
- }
- function startWorker(time) {
- if (!work.length) return;
- highlight.set(time, operation(highlightWorker));
- }
-
- // Operations are used to wrap changes in such a way that each
- // change won't have to update the cursor and display (which would
- // be awkward, slow, and error-prone), but instead updates are
- // batched and then all combined and executed at once.
- function startOperation() {
- updateInput = null; changes = []; textChanged = selectionChanged = false;
- }
- function endOperation() {
- var reScroll = false;
- if (selectionChanged) reScroll = !scrollCursorIntoView();
- if (changes.length) updateDisplay(changes);
- else if (selectionChanged) updateCursor();
- if (reScroll) scrollCursorIntoView();
- if (selectionChanged) restartBlink();
-
- // updateInput can be set to a boolean value to force/prevent an
- // update.
- if (!leaveInputAlone && (updateInput === true || (updateInput !== false && selectionChanged)))
- prepareInput();
-
- if (selectionChanged && options.onCursorActivity)
- options.onCursorActivity(instance);
- if (textChanged && options.onChange)
- options.onChange(instance);
- if (selectionChanged && options.matchBrackets)
- setTimeout(operation(function() {
- if (bracketHighlighted) {bracketHighlighted(); bracketHighlighted = null;}
- matchBrackets(false);
- }), 20);
- }
- var nestedOperation = 0;
- function operation(f) {
- return function() {
- if (!nestedOperation++) startOperation();
- try {var result = f.apply(this, arguments);}
- finally {if (!--nestedOperation) endOperation();}
- return result;
- };
- }
-
- function SearchCursor(query, pos, caseFold) {
- this.atOccurrence = false;
- if (caseFold == null) caseFold = typeof query == "string" && query == query.toLowerCase();
-
- if (pos && typeof pos == "object") pos = clipPos(pos);
- else pos = {line: 0, ch: 0};
- this.pos = {from: pos, to: pos};
-
- // The matches method is filled in based on the type of query.
- // It takes a position and a direction, and returns an object
- // describing the next occurrence of the query, or null if no
- // more matches were found.
- if (typeof query != "string") // Regexp match
- this.matches = function(reverse, pos) {
- if (reverse) {
- var line = lines[pos.line].text.slice(0, pos.ch), match = line.match(query), start = 0;
- while (match) {
- var ind = line.indexOf(match[0]);
- start += ind;
- line = line.slice(ind + 1);
- var newmatch = line.match(query);
- if (newmatch) match = newmatch;
- else break;
- }
- }
- else {
- var line = lines[pos.line].text.slice(pos.ch), match = line.match(query),
- start = match && pos.ch + line.indexOf(match[0]);
- }
- if (match)
- return {from: {line: pos.line, ch: start},
- to: {line: pos.line, ch: start + match[0].length},
- match: match};
- };
- else { // String query
- if (caseFold) query = query.toLowerCase();
- var fold = caseFold ? function(str){return str.toLowerCase();} : function(str){return str;};
- var target = query.split("\n");
- // Different methods for single-line and multi-line queries
- if (target.length == 1)
- this.matches = function(reverse, pos) {
- var line = fold(lines[pos.line].text), len = query.length, match;
- if (reverse ? (pos.ch >= len && (match = line.lastIndexOf(query, pos.ch - len)) != -1)
- : (match = line.indexOf(query, pos.ch)) != -1)
- return {from: {line: pos.line, ch: match},
- to: {line: pos.line, ch: match + len}};
- };
- else
- this.matches = function(reverse, pos) {
- var ln = pos.line, idx = (reverse ? target.length - 1 : 0), match = target[idx], line = fold(lines[ln].text);
- var offsetA = (reverse ? line.indexOf(match) + match.length : line.lastIndexOf(match));
- if (reverse ? offsetA >= pos.ch || offsetA != match.length
- : offsetA <= pos.ch || offsetA != line.length - match.length)
- return;
- for (;;) {
- if (reverse ? !ln : ln == lines.length - 1) return;
- line = fold(lines[ln += reverse ? -1 : 1].text);
- match = target[reverse ? --idx : ++idx];
- if (idx > 0 && idx < target.length - 1) {
- if (line != match) return;
- else continue;
- }
- var offsetB = (reverse ? line.lastIndexOf(match) : line.indexOf(match) + match.length);
- if (reverse ? offsetB != line.length - match.length : offsetB != match.length)
- return;
- var start = {line: pos.line, ch: offsetA}, end = {line: ln, ch: offsetB};
- return {from: reverse ? end : start, to: reverse ? start : end};
- }
- };
- }
- }
-
- SearchCursor.prototype = {
- findNext: function() {return this.find(false);},
- findPrevious: function() {return this.find(true);},
-
- find: function(reverse) {
- var self = this, pos = clipPos(reverse ? this.pos.from : this.pos.to);
- function savePosAndFail(line) {
- var pos = {line: line, ch: 0};
- self.pos = {from: pos, to: pos};
- self.atOccurrence = false;
- return false;
- }
-
- for (;;) {
- if (this.pos = this.matches(reverse, pos)) {
- this.atOccurrence = true;
- return this.pos.match || true;
- }
- if (reverse) {
- if (!pos.line) return savePosAndFail(0);
- pos = {line: pos.line-1, ch: lines[pos.line-1].text.length};
- }
- else {
- if (pos.line == lines.length - 1) return savePosAndFail(lines.length);
- pos = {line: pos.line+1, ch: 0};
- }
- }
- },
-
- from: function() {if (this.atOccurrence) return copyPos(this.pos.from);},
- to: function() {if (this.atOccurrence) return copyPos(this.pos.to);}
- };
-
- return instance;
- } // (end of function CodeMirror)
-
- // The default configuration options.
- CodeMirror.defaults = {
- value: "",
- mode: null,
- indentUnit: 2,
- indentWithTabs: false,
- tabMode: "classic",
- enterMode: "indent",
- electricChars: true,
- onKeyEvent: null,
- lineNumbers: false,
- gutter: false,
- firstLineNumber: 1,
- readOnly: false,
- onChange: null,
- onCursorActivity: null,
- onGutterClick: null,
- onFocus: null, onBlur: null, onScroll: null,
- matchBrackets: false,
- workTime: 100,
- workDelay: 200,
- undoDepth: 40,
- tabindex: null
- };
-
- // Known modes, by name and by MIME
- var modes = {}, mimeModes = {};
- CodeMirror.defineMode = function(name, mode) {
- if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name;
- modes[name] = mode;
- };
- CodeMirror.defineMIME = function(mime, spec) {
- mimeModes[mime] = spec;
- };
- CodeMirror.getMode = function(options, spec) {
- if (typeof spec == "string" && mimeModes.hasOwnProperty(spec))
- spec = mimeModes[spec];
- if (typeof spec == "string")
- var mname = spec, config = {};
- else
- var mname = spec.name, config = spec;
- var mfactory = modes[mname];
- if (!mfactory) {
- if (window.console) console.warn("No mode " + mname + " found, falling back to plain text.");
- return CodeMirror.getMode(options, "text/plain");
- }
- return mfactory(options, config);
- }
- CodeMirror.listModes = function() {
- var list = [];
- for (var m in modes)
- if (modes.propertyIsEnumerable(m)) list.push(m);
- return list;
- };
- CodeMirror.listMIMEs = function() {
- var list = [];
- for (var m in mimeModes)
- if (mimeModes.propertyIsEnumerable(m)) list.push(m);
- return list;
- };
-
- CodeMirror.fromTextArea = function(textarea, options) {
- if (!options) options = {};
- options.value = textarea.value;
- if (!options.tabindex && textarea.tabindex)
- options.tabindex = textarea.tabindex;
-
- function save() {textarea.value = instance.getValue();}
- if (textarea.form) {
- // Deplorable hack to make the submit method do the right thing.
- var rmSubmit = connect(textarea.form, "submit", save, true);
- if (typeof textarea.form.submit == "function") {
- var realSubmit = textarea.form.submit;
- function wrappedSubmit() {
- save();
- textarea.form.submit = realSubmit;
- textarea.form.submit();
- textarea.form.submit = wrappedSubmit;
- }
- textarea.form.submit = wrappedSubmit;
- }
- }
-
- textarea.style.display = "none";
- var instance = CodeMirror(function(node) {
- textarea.parentNode.insertBefore(node, textarea.nextSibling);
- }, options);
- instance.save = save;
- instance.toTextArea = function() {
- save();
- textarea.parentNode.removeChild(instance.getWrapperElement());
- textarea.style.display = "";
- if (textarea.form) {
- rmSubmit();
- if (typeof textarea.form.submit == "function")
- textarea.form.submit = realSubmit;
- }
- };
- return instance;
- };
-
- // Utility functions for working with state. Exported because modes
- // sometimes need to do this.
- function copyState(mode, state) {
- if (state === true) return state;
- if (mode.copyState) return mode.copyState(state);
- var nstate = {};
- for (var n in state) {
- var val = state[n];
- if (val instanceof Array) val = val.concat([]);
- nstate[n] = val;
- }
- return nstate;
- }
- CodeMirror.startState = startState;
- function startState(mode, a1, a2) {
- return mode.startState ? mode.startState(a1, a2) : true;
- }
- CodeMirror.copyState = copyState;
-
- // The character stream used by a mode's parser.
- function StringStream(string) {
- this.pos = this.start = 0;
- this.string = string;
- }
- StringStream.prototype = {
- eol: function() {return this.pos >= this.string.length;},
- sol: function() {return this.pos == 0;},
- peek: function() {return this.string.charAt(this.pos);},
- next: function() {
- if (this.pos < this.string.length)
- return this.string.charAt(this.pos++);
- },
- eat: function(match) {
- var ch = this.string.charAt(this.pos);
- if (typeof match == "string") var ok = ch == match;
- else var ok = ch && (match.test ? match.test(ch) : match(ch));
- if (ok) {++this.pos; return ch;}
- },
- eatWhile: function(match) {
- var start = this.start;
- while (this.eat(match)){}
- return this.pos > start;
- },
- eatSpace: function() {
- var start = this.pos;
- while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;
- return this.pos > start;
- },
- skipToEnd: function() {this.pos = this.string.length;},
- skipTo: function(ch) {
- var found = this.string.indexOf(ch, this.pos);
- if (found > -1) {this.pos = found; return true;}
- },
- backUp: function(n) {this.pos -= n;},
- column: function() {return countColumn(this.string, this.start);},
- indentation: function() {return countColumn(this.string);},
- match: function(pattern, consume, caseInsensitive) {
- if (typeof pattern == "string") {
- function cased(str) {return caseInsensitive ? str.toLowerCase() : str;}
- if (cased(this.string).indexOf(cased(pattern), this.pos) == this.pos) {
- if (consume !== false) this.pos += pattern.length;
- return true;
- }
- }
- else {
- var match = this.string.slice(this.pos).match(pattern);
- if (match && consume !== false) this.pos += match[0].length;
- return match;
- }
- },
- current: function(){return this.string.slice(this.start, this.pos);}
- };
-
- // Line objects. These hold state related to a line, including
- // highlighting info (the styles array).
- function Line(text, styles) {
- this.styles = styles || [text, null];
- this.stateAfter = null;
- this.text = text;
- this.marked = this.gutterMarker = this.className = null;
- }
- Line.prototype = {
- // Replace a piece of a line, keeping the styles around it intact.
- replace: function(from, to, text) {
- var st = [], mk = this.marked;
- copyStyles(0, from, this.styles, st);
- if (text) st.push(text, null);
- copyStyles(to, this.text.length, this.styles, st);
- this.styles = st;
- this.text = this.text.slice(0, from) + text + this.text.slice(to);
- this.stateAfter = null;
- if (mk) {
- var diff = text.length - (to - from), end = this.text.length;
- function fix(n) {return n <= Math.min(to, to + diff) ? n : n + diff;}
- for (var i = 0; i < mk.length; ++i) {
- var mark = mk[i], del = false;
- if (mark.from >= end) del = true;
- else {mark.from = fix(mark.from); if (mark.to != null) mark.to = fix(mark.to);}
- if (del || mark.from >= mark.to) {mk.splice(i, 1); i--;}
- }
- }
- },
- // Split a line in two, again keeping styles intact.
- split: function(pos, textBefore) {
- var st = [textBefore, null];
- copyStyles(pos, this.text.length, this.styles, st);
- return new Line(textBefore + this.text.slice(pos), st);
- },
- addMark: function(from, to, style) {
- var mk = this.marked, mark = {from: from, to: to, style: style};
- if (this.marked == null) this.marked = [];
- this.marked.push(mark);
- this.marked.sort(function(a, b){return a.from - b.from;});
- return mark;
- },
- removeMark: function(mark) {
- var mk = this.marked;
- if (!mk) return;
- for (var i = 0; i < mk.length; ++i)
- if (mk[i] == mark) {mk.splice(i, 1); break;}
- },
- // Run the given mode's parser over a line, update the styles
- // array, which contains alternating fragments of text and CSS
- // classes.
- highlight: function(mode, state) {
- var stream = new StringStream(this.text), st = this.styles, pos = 0, changed = false;
- while (!stream.eol()) {
- var style = mode.token(stream, state);
- var substr = this.text.slice(stream.start, stream.pos);
- stream.start = stream.pos;
- if (pos && st[pos-1] == style)
- st[pos-2] += substr;
- else if (substr) {
- if (!changed && st[pos] != substr || st[pos+1] != style) changed = true;
- st[pos++] = substr; st[pos++] = style;
- }
- // Give up when line is ridiculously long
- if (stream.pos > 5000) {
- st[pos++] = this.text.slice(stream.pos); st[pos++] = null;
- break;
- }
- }
- if (st.length != pos) {st.length = pos; changed = true;}
- return changed;
- },
- // Fetch the parser token for a given character. Useful for hacks
- // that want to inspect the mode state (say, for completion).
- getTokenAt: function(mode, state, ch) {
- var txt = this.text, stream = new StringStream(txt);
- while (stream.pos < ch && !stream.eol()) {
- stream.start = stream.pos;
- var style = mode.token(stream, state);
- }
- return {start: stream.start,
- end: stream.pos,
- string: stream.current(),
- className: style || null,
- state: state};
- },
- indentation: function() {return countColumn(this.text);},
- // Produces an HTML fragment for the line, taking selection,
- // marking, and highlighting into account.
- getHTML: function(sfrom, sto, includePre) {
- var html = [];
- if (includePre)
- html.push(this.className ? '<pre class="' + this.className + '">': "<pre>");
- function span(text, style) {
- if (!text) return;
- if (style) html.push('<span class="', style, '">', htmlEscape(text), "</span>");
- else html.push(htmlEscape(text));
- }
- var st = this.styles, allText = this.text, marked = this.marked;
- if (sfrom == sto) sfrom = null;
-
- if (!allText)
- span(" ", sfrom != null && sto == null ? "CodeMirror-selected" : null);
- else if (!marked && sfrom == null)
- for (var i = 0, e = st.length; i < e; i+=2) span(st[i], st[i+1]);
- else {
- var pos = 0, i = 0, text = "", style, sg = 0;
- var markpos = -1, mark = null;
- function nextMark() {
- if (marked) {
- markpos += 1;
- mark = (markpos < marked.length) ? marked[markpos] : null;
- }
- }
- nextMark();
- while (pos < allText.length) {
- var upto = allText.length;
- var extraStyle = "";
- if (sfrom != null) {
- if (sfrom > pos) upto = sfrom;
- else if (sto == null || sto > pos) {
- extraStyle = " CodeMirror-selected";
- if (sto != null) upto = Math.min(upto, sto);
- }
- }
- while (mark && mark.to != null && mark.to <= pos) nextMark();
- if (mark) {
- if (mark.from > pos) upto = Math.min(upto, mark.from);
- else {
- extraStyle += " " + mark.style;
- if (mark.to != null) upto = Math.min(upto, mark.to);
- }
- }
- for (;;) {
- var end = pos + text.length;
- var apliedStyle = style;
- if (extraStyle) apliedStyle = style ? style + extraStyle : extraStyle;
- span(end > upto ? text.slice(0, upto - pos) : text, apliedStyle);
- if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}
- pos = end;
- text = st[i++]; style = st[i++];
- }
- }
- if (sfrom != null && sto == null) span(" ", "CodeMirror-selected");
- }
- if (includePre) html.push("</pre>");
- return html.join("");
- }
- };
- // Utility used by replace and split above
- function copyStyles(from, to, source, dest) {
- for (var i = 0, pos = 0, state = 0; pos < to; i+=2) {
- var part = source[i], end = pos + part.length;
- if (state == 0) {
- if (end > from) dest.push(part.slice(from - pos, Math.min(part.length, to - pos)), source[i+1]);
- if (end >= from) state = 1;
- }
- else if (state == 1) {
- if (end > to) dest.push(part.slice(0, to - pos), source[i+1]);
- else dest.push(part, source[i+1]);
- }
- pos = end;
- }
- }
-
- // The history object 'chunks' changes that are made close together
- // and at almost the same time into bigger undoable units.
- function History() {
- this.time = 0;
- this.done = []; this.undone = [];
- }
- History.prototype = {
- addChange: function(start, added, old) {
- this.undone.length = 0;
- var time = +new Date, last = this.done[this.done.length - 1];
- if (time - this.time > 400 || !last ||
- last.start > start + added || last.start + last.added < start - last.added + last.old.length)
- this.done.push({start: start, added: added, old: old});
- else {
- var oldoff = 0;
- if (start < last.start) {
- for (var i = last.start - start - 1; i >= 0; --i)
- last.old.unshift(old[i]);
- last.added += last.start - start;
- last.start = start;
- }
- else if (last.start < start) {
- oldoff = start - last.start;
- added += oldoff;
- }
- for (var i = last.added - oldoff, e = old.length; i < e; ++i)
- last.old.push(old[i]);
- if (last.added < added) last.added = added;
- }
- this.time = time;
- }
- };
-
- // Event stopping compatibility wrapper.
- function stopEvent() {
- if (this.preventDefault) {this.preventDefault(); this.stopPropagation();}
- else {this.returnValue = false; this.cancelBubble = true;}
- }
- // Ensure an event has a stop method.
- function addStop(event) {
- if (!event.stop) event.stop = stopEvent;
- return event;
- }
-
- // Event wrapper, exposing the few operations we need.
- function Event(orig) {this.e = orig;}
- Event.prototype = {
- stop: function() {stopEvent.call(this.e);},
- target: function() {return this.e.target || this.e.srcElement;},
- button: function() {
- if (this.e.which) return this.e.which;
- else if (this.e.button & 1) return 1;
- else if (this.e.button & 2) return 3;
- else if (this.e.button & 4) return 2;
- },
- pageX: function() {
- if (this.e.pageX != null) return this.e.pageX;
- else return this.e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
- },
- pageY: function() {
- if (this.e.pageY != null) return this.e.pageY;
- else return this.e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
- }
- };
-
- // Event handler registration. If disconnect is true, it'll return a
- // function that unregisters the handler.
- function connect(node, type, handler, disconnect) {
- function wrapHandler(event) {handler(new Event(event || window.event));}
- if (typeof node.addEventListener == "function") {
- node.addEventListener(type, wrapHandler, false);
- if (disconnect) return function() {node.removeEventListener(type, wrapHandler, false);};
- }
- else {
- node.attachEvent("on" + type, wrapHandler);
- if (disconnect) return function() {node.detachEvent("on" + type, wrapHandler);};
- }
- }
-
- function Delayed() {this.id = null;}
- Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}};
-
- // Some IE versions don't preserve whitespace when setting the
- // innerHTML of a PRE tag.
- var badInnerHTML = (function() {
- var pre = document.createElement("pre");
- pre.innerHTML = " "; return !pre.innerHTML;
- })();
-
- var gecko = /gecko\/\d{7}/i.test(navigator.userAgent);
-
- var lineSep = "\n";
- // Feature-detect whether newlines in textareas are converted to \r\n
- (function () {
- var te = document.createElement("textarea");
- te.value = "foo\nbar";
- if (te.value.indexOf("\r") > -1) lineSep = "\r\n";
- }());
-
- var tabSize = 8;
- var mac = /Mac/.test(navigator.platform);
- var movementKeys = {};
- for (var i = 35; i <= 40; ++i)
- movementKeys[i] = movementKeys["c" + i] = true;
-
- // Counts the column offset in a string, taking tabs into account.
- // Used mostly to find indentation.
- function countColumn(string, end) {
- if (end == null) {
- end = string.search(/[^\s\u00a0]/);
- if (end == -1) end = string.length;
- }
- for (var i = 0, n = 0; i < end; ++i) {
- if (string.charAt(i) == "\t") n += tabSize - (n % tabSize);
- else ++n;
- }
- return n;
- }
-
- // Find the position of an element by following the offsetParent chain.
- function eltOffset(node) {
- var x = 0, y = 0, n2 = node;
- for (var n = node; n; n = n.offsetParent) {x += n.offsetLeft; y += n.offsetTop;}
- for (var n = node; n != document.body; n = n.parentNode) {x -= n.scrollLeft; y -= n.scrollTop;}
- return {left: x, top: y};
- }
- // Get a node's text content.
- function eltText(node) {
- return node.textContent || node.innerText || node.nodeValue || "";
- }
-
- // Operations on {line, ch} objects.
- function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}
- function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);}
- function copyPos(x) {return {line: x.line, ch: x.ch};}
-
- function htmlEscape(str) {
- return str.replace(/[<&]/g, function(str) {return str == "&" ? "&amp;" : "&lt;";});
- }
-
- // Used to position the cursor after an undo/redo by finding the
- // last edited character.
- function editEnd(from, to) {
- if (!to) return from ? from.length : 0;
- if (!from) return to.length;
- for (var i = from.length, j = to.length; i >= 0 && j >= 0; --i, --j)
- if (from.charAt(i) != to.charAt(j)) break;
- return j + 1;
- }
-
- function indexOf(collection, elt) {
- if (collection.indexOf) return collection.indexOf(elt);
- for (var i = 0, e = collection.length; i < e; ++i)
- if (collection[i] == elt) return i;
- return -1;
- }
-
- // See if "".split is the broken IE version, if so, provide an
- // alternative way to split lines.
- if ("\n\nb".split(/\n/).length != 3)
- var splitLines = function(string) {
- var pos = 0, nl, result = [];
- while ((nl = string.indexOf("\n", pos)) > -1) {
- result.push(string.slice(pos, string.charAt(nl-1) == "\r" ? nl - 1 : nl));
- pos = nl + 1;
- }
- result.push(string.slice(pos));
- return result;
- };
- else
- var splitLines = function(string){return string.split(/\r?\n/);};
-
- // Sane model of finding and setting the selection in a textarea
- if (window.getSelection) {
- var selRange = function(te) {
- try {return {start: te.selectionStart, end: te.selectionEnd};}
- catch(e) {return null;}
- };
- var setSelRange = function(te, start, end) {
- try {te.setSelectionRange(start, end);}
- catch(e) {} // Fails on Firefox when textarea isn't part of the document
- };
- }
- // IE model. Don't ask.
- else {
- var selRange = function(te) {
- try {var range = document.selection.createRange();}
- catch(e) {return null;}
- if (!range || range.parentElement() != te) return null;
- var val = te.value, len = val.length, localRange = te.createTextRange();
- localRange.moveToBookmark(range.getBookmark());
- var endRange = te.createTextRange();
- endRange.collapse(false);
-
- if (localRange.compareEndPoints("StartToEnd", endRange) > -1)
- return {start: len, end: len};
-
- var start = -localRange.moveStart("character", -len);
- for (var i = val.indexOf("\r"); i > -1 && i < start; i = val.indexOf("\r", i+1), start++) {}
-
- if (localRange.compareEndPoints("EndToEnd", endRange) > -1)
- return {start: start, end: len};
-
- var end = -localRange.moveEnd("character", -len);
- for (var i = val.indexOf("\r"); i > -1 && i < end; i = val.indexOf("\r", i+1), end++) {}
- return {start: start, end: end};
- };
- var setSelRange = function(te, start, end) {
- var range = te.createTextRange();
- range.collapse(true);
- var endrange = range.duplicate();
- var newlines = 0, txt = te.value;
- for (var pos = txt.indexOf("\n"); pos > -1 && pos < start; pos = txt.indexOf("\n", pos + 1))
- ++newlines;
- range.move("character", start - newlines);
- for (; pos > -1 && pos < end; pos = txt.indexOf("\n", pos + 1))
- ++newlines;
- endrange.move("character", end - newlines);
- range.setEndPoint("EndToEnd", endrange);
- range.select();
- };
- }
-
- CodeMirror.defineMode("null", function() {
- return {token: function(stream) {stream.skipToEnd();}};
- });
- CodeMirror.defineMIME("text/plain", "null");
-
- return CodeMirror;
-})();
diff --git a/plugins/LocalFilesEditor/codemirror/lib/overlay.js b/plugins/LocalFilesEditor/codemirror/lib/overlay.js
deleted file mode 100644
index c4cdf9fc8..000000000
--- a/plugins/LocalFilesEditor/codemirror/lib/overlay.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// Utility function that allows modes to be combined. The mode given
-// as the base argument takes care of most of the normal mode
-// functionality, but a second (typically simple) mode is used, which
-// can override the style of text. Both modes get to parse all of the
-// text, but when both assign a non-null style to a piece of code, the
-// overlay wins, unless the combine argument was true, in which case
-// the styles are combined.
-
-CodeMirror.overlayParser = function(base, overlay, combine) {
- return {
- startState: function() {
- return {
- base: CodeMirror.startState(base),
- overlay: CodeMirror.startState(overlay),
- basePos: 0, baseCur: null,
- overlayPos: 0, overlayCur: null
- };
- },
- copyState: function(state) {
- return {
- base: CodeMirror.copyState(base, state.base),
- overlay: CodeMirror.copyState(overlay, state.overlay),
- basePos: state.basePos, baseCur: null,
- overlayPos: state.overlayPos, overlayCur: null
- };
- },
-
- token: function(stream, state) {
- if (stream.start == state.basePos) {
- state.baseCur = base.token(stream, state.base);
- state.basePos = stream.pos;
- }
- if (stream.start == state.overlayPos) {
- stream.pos = stream.start;
- state.overlayCur = overlay.token(stream, state.overlay);
- state.overlayPos = stream.pos;
- }
- stream.pos = Math.min(state.basePos, state.overlayPos);
- if (stream.eol()) state.basePos = state.overlayPos = 0;
-
- if (state.overlayCur == null) return state.baseCur;
- if (state.baseCur != null && combine) return state.baseCur + " " + state.overlayCur;
- else return state.overlayCur;
- },
-
- indent: function(state, textAfter) {
- return base.indent(state.base, textAfter);
- },
- electricChars: base.electricChars
- };
-};
diff --git a/plugins/LocalFilesEditor/codemirror/mode/clike/clike.css b/plugins/LocalFilesEditor/codemirror/mode/clike/clike.css
deleted file mode 100644
index 21016d7b1..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/clike/clike.css
+++ /dev/null
@@ -1,6 +0,0 @@
-span.c-like-keyword {color: #90b;}
-span.c-like-number {color: #291;}
-span.c-like-comment {color: #a70;}
-span.c-like-string {color: #a22;}
-span.c-like-preprocessor {color: #049;}
-span.c-like-var {color: #22b;}
diff --git a/plugins/LocalFilesEditor/codemirror/mode/clike/clike.js b/plugins/LocalFilesEditor/codemirror/mode/clike/clike.js
deleted file mode 100644
index 25bd79144..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/clike/clike.js
+++ /dev/null
@@ -1,181 +0,0 @@
-CodeMirror.defineMode("clike", function(config, parserConfig) {
- var indentUnit = config.indentUnit, keywords = parserConfig.keywords,
- cpp = parserConfig.useCPP, multiLineStrings = parserConfig.multiLineStrings, $vars = parserConfig.$vars;
- var isOperatorChar = /[+\-*&%=<>!?|]/;
-
- function chain(stream, state, f) {
- state.tokenize = f;
- return f(stream, state);
- }
-
- var type;
- function ret(tp, style) {
- type = tp;
- return style;
- }
-
- function tokenBase(stream, state) {
- var ch = stream.next();
- if (ch == '"' || ch == "'")
- return chain(stream, state, tokenString(ch));
- else if (/[\[\]{}\(\),;\:\.]/.test(ch))
- return ret(ch);
- else if (ch == "#" && cpp && state.startOfLine) {
- stream.skipToEnd();
- return ret("directive", "c-like-preprocessor");
- }
- else if (/\d/.test(ch)) {
- stream.eatWhile(/[\w\.]/)
- return ret("number", "c-like-number");
- }
- else if (ch == "/") {
- if (stream.eat("*")) {
- return chain(stream, state, tokenComment);
- }
- else if (stream.eat("/")) {
- stream.skipToEnd();
- return ret("comment", "c-like-comment");
- }
- else {
- stream.eatWhile(isOperatorChar);
- return ret("operator");
- }
- }
- else if (isOperatorChar.test(ch)) {
- stream.eatWhile(isOperatorChar);
- return ret("operator");
- }
- else if ($vars && ch == "$") {
- stream.eatWhile(/[\w\$_]/);
- return ret("word", "c-like-var");
- }
- else {
- stream.eatWhile(/[\w\$_]/);
- if (keywords && keywords.propertyIsEnumerable(stream.current())) return ret("keyword", "c-like-keyword");
- return ret("word", "c-like-word");
- }
- }
-
- function tokenString(quote) {
- return function(stream, state) {
- var escaped = false, next, end = false;
- while ((next = stream.next()) != null) {
- if (next == quote && !escaped) {end = true; break;}
- escaped = !escaped && next == "\\";
- }
- if (end || !(escaped || multiLineStrings))
- state.tokenize = tokenBase;
- return ret("string", "c-like-string");
- };
- }
-
- function tokenComment(stream, state) {
- var maybeEnd = false, ch;
- while (ch = stream.next()) {
- if (ch == "/" && maybeEnd) {
- state.tokenize = tokenBase;
- break;
- }
- maybeEnd = (ch == "*");
- }
- return ret("comment", "c-like-comment");
- }
-
- function Context(indented, column, type, align, prev) {
- this.indented = indented;
- this.column = column;
- this.type = type;
- this.align = align;
- this.prev = prev;
- }
-
- function pushContext(state, col, type) {
- return state.context = new Context(state.indented, col, type, null, state.context);
- }
- function popContext(state) {
- return state.context = state.context.prev;
- }
-
- // Interface
-
- return {
- startState: function(basecolumn) {
- return {
- tokenize: tokenBase,
- context: new Context((basecolumn || 0) - indentUnit, 0, "top", false),
- indented: 0,
- startOfLine: true
- };
- },
-
- token: function(stream, state) {
- var ctx = state.context;
- if (stream.sol()) {
- if (ctx.align == null) ctx.align = false;
- state.indented = stream.indentation();
- state.startOfLine = true;
- }
- if (stream.eatSpace()) return null;
- var style = state.tokenize(stream, state);
- if (type == "comment") return style;
- if (ctx.align == null) ctx.align = true;
-
- if ((type == ";" || type == ":") && ctx.type == "statement") popContext(state);
- else if (type == "{") pushContext(state, stream.column(), "}");
- else if (type == "[") pushContext(state, stream.column(), "]");
- else if (type == "(") pushContext(state, stream.column(), ")");
- else if (type == "}") {
- if (ctx.type == "statement") ctx = popContext(state);
- if (ctx.type == "}") ctx = popContext(state);
- if (ctx.type == "statement") ctx = popContext(state);
- }
- else if (type == ctx.type) popContext(state);
- else if (ctx.type == "}") pushContext(state, stream.column(), "statement");
- state.startOfLine = false;
- return style;
- },
-
- indent: function(state, textAfter) {
- if (state.tokenize != tokenBase) return 0;
- var firstChar = textAfter && textAfter.charAt(0), ctx = state.context, closing = firstChar == ctx.type;
- if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : indentUnit);
- else if (ctx.align) return ctx.column + (closing ? 0 : 1);
- else return ctx.indented + (closing ? 0 : indentUnit);
- },
-
- electricChars: "{}"
- };
-});
-
-(function() {
- function keywords(str) {
- var obj = {}, words = str.split(" ");
- for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
- return obj;
- }
- var cKeywords = "auto if break int case long char register continue return default short do sizeof " +
- "double static else struct entry switch extern typedef float union for unsigned " +
- "goto while enum void const signed volatile";
-
- CodeMirror.defineMIME("text/x-csrc", {
- name: "clike",
- useCPP: true,
- keywords: keywords(cKeywords)
- });
- CodeMirror.defineMIME("text/x-c++src", {
- name: "clike",
- useCPP: true,
- keywords: keywords(cKeywords + " asm dynamic_cast namespace reinterpret_cast try bool explicit new " +
- "static_cast typeid catch false operator template typename class friend private " +
- "this using const_cast inline public throw virtual delete mutable protected true " +
- "wchar_t")
- });
- CodeMirror.defineMIME("text/x-java", {
- name: "clike",
- keywords: keywords("abstract assert boolean break byte case catch char class const continue default " +
- "do double else enum extends false final finally float for goto if implements import " +
- "instanceof int interface long native new null package private protected public " +
- "return short static strictfp super switch synchronized this throw throws transient " +
- "true try void volatile while")
- });
-}());
diff --git a/plugins/LocalFilesEditor/codemirror/mode/clike/index.html b/plugins/LocalFilesEditor/codemirror/mode/clike/index.html
deleted file mode 100644
index 0836535d2..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/clike/index.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <title>CodeMirror 2: C-like mode</title>
- <link rel="stylesheet" href="../../lib/codemirror.css">
- <script src="../../lib/codemirror.js"></script>
- <script src="clike.js"></script>
- <link rel="stylesheet" href="clike.css">
- <link rel="stylesheet" href="../../css/docs.css">
- <style>.CodeMirror {border: 2px inset #dee;}</style>
- </head>
- <body>
- <h1>CodeMirror 2: C-like mode</h1>
-
-<form><textarea id="code" name="code">
-/* C demo code */
-
-#include <zmq.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <time.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <malloc.h>
-
-typedef struct {
- void* arg_socket;
- zmq_msg_t* arg_msg;
- char* arg_string;
- unsigned long arg_len;
- int arg_int, arg_command;
-
- int signal_fd;
- int pad;
- void* context;
- sem_t sem;
-} acl_zmq_context;
-
-#define p(X) (context->arg_##X)
-
-void* zmq_thread(void* context_pointer) {
- acl_zmq_context* context = (acl_zmq_context*)context_pointer;
- char ok = 'K', err = 'X';
- int res;
-
- while (1) {
- while ((res = sem_wait(&amp;context->sem)) == EINTR);
- if (res) {write(context->signal_fd, &amp;err, 1); goto cleanup;}
- switch(p(command)) {
- case 0: goto cleanup;
- case 1: p(socket) = zmq_socket(context->context, p(int)); break;
- case 2: p(int) = zmq_close(p(socket)); break;
- case 3: p(int) = zmq_bind(p(socket), p(string)); break;
- case 4: p(int) = zmq_connect(p(socket), p(string)); break;
- case 5: p(int) = zmq_getsockopt(p(socket), p(int), (void*)p(string), &amp;p(len)); break;
- case 6: p(int) = zmq_setsockopt(p(socket), p(int), (void*)p(string), p(len)); break;
- case 7: p(int) = zmq_send(p(socket), p(msg), p(int)); break;
- case 8: p(int) = zmq_recv(p(socket), p(msg), p(int)); break;
- case 9: p(int) = zmq_poll(p(socket), p(int), p(len)); break;
- }
- p(command) = errno;
- write(context->signal_fd, &amp;ok, 1);
- }
- cleanup:
- close(context->signal_fd);
- free(context_pointer);
- return 0;
-}
-
-void* zmq_thread_init(void* zmq_context, int signal_fd) {
- acl_zmq_context* context = malloc(sizeof(acl_zmq_context));
- pthread_t thread;
-
- context->context = zmq_context;
- context->signal_fd = signal_fd;
- sem_init(&amp;context->sem, 1, 0);
- pthread_create(&amp;thread, 0, &amp;zmq_thread, context);
- pthread_detach(thread);
- return context;
-}
-</textarea></form>
-
- <script>
- var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
- lineNumbers: true,
- matchBrackets: true,
- mode: "text/x-csrc"
- });
- </script>
-
- <p>Simple mode that tries to handle C-like languages as well as it
- can. Takes two configuration parameters: <code>keywords</code>, an
- object whose property names are the keywords in the language,
- and <code>useCPP</code>, which determines whether C preprocessor
- directives are recognized.</p>
-
- <p><strong>MIME types defined:</strong> <code>text/x-csrc</code>
- (C code), <code>text/x-c++src</code> (C++
- code), <code>text/x-java</code> (Java code).</p>
- </body>
-</html>
diff --git a/plugins/LocalFilesEditor/codemirror/mode/css/css.css b/plugins/LocalFilesEditor/codemirror/mode/css/css.css
deleted file mode 100644
index 02d40ecb2..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/css/css.css
+++ /dev/null
@@ -1,9 +0,0 @@
-span.css-at {color: #708;}
-span.css-unit {color: #281;}
-span.css-value {color: #708;}
-span.css-identifier {color: black;}
-span.css-selector {color: #11B;}
-span.css-important {color: #00F;}
-span.css-colorcode {color: #299;}
-span.css-comment {color: #A70;}
-span.css-string {color: #A22;}
diff --git a/plugins/LocalFilesEditor/codemirror/mode/css/css.js b/plugins/LocalFilesEditor/codemirror/mode/css/css.js
deleted file mode 100644
index 5faad7b2f..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/css/css.js
+++ /dev/null
@@ -1,124 +0,0 @@
-CodeMirror.defineMode("css", function(config) {
- var indentUnit = config.indentUnit, type;
- function ret(style, tp) {type = tp; return style;}
-
- function tokenBase(stream, state) {
- var ch = stream.next();
- if (ch == "@") {stream.eatWhile(/\w/); return ret("css-at", stream.current());}
- else if (ch == "/" && stream.eat("*")) {
- state.tokenize = tokenCComment;
- return tokenCComment(stream, state);
- }
- else if (ch == "<" && stream.eat("!")) {
- state.tokenize = tokenSGMLComment;
- return tokenSGMLComment(stream, state);
- }
- else if (ch == "=") ret(null, "compare");
- else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare");
- else if (ch == "\"" || ch == "'") {
- state.tokenize = tokenString(ch);
- return state.tokenize(stream, state);
- }
- else if (ch == "#") {
- stream.eatWhile(/\w/);
- return ret("css-selector", "hash");
- }
- else if (ch == "!") {
- stream.match(/^\s*\w*/);
- return ret("css-important", "important");
- }
- else if (/\d/.test(ch)) {
- stream.eatWhile(/[\w.%]/);
- return ret("css-unit", "unit");
- }
- else if (/[,.+>*\/]/.test(ch)) {
- return ret(null, "select-op");
- }
- else if (/[;{}:\[\]]/.test(ch)) {
- return ret(null, ch);
- }
- else {
- stream.eatWhile(/[\w\\\-_]/);
- return ret("css-identifier", "identifier");
- }
- }
-
- function tokenCComment(stream, state) {
- var maybeEnd = false, ch;
- while ((ch = stream.next()) != null) {
- if (maybeEnd && ch == "/") {
- state.tokenize = tokenBase;
- break;
- }
- maybeEnd = (ch == "*");
- }
- return ret("css-comment", "comment");
- }
-
- function tokenSGMLComment(stream, state) {
- var dashes = 0, ch;
- while ((ch = stream.next()) != null) {
- if (dashes >= 2 && ch == ">") {
- state.tokenize = tokenBase;
- break;
- }
- dashes = (ch == "-") ? dashes + 1 : 0;
- }
- return ret("css-comment", "comment");
- }
-
- function tokenString(quote) {
- return function(stream, state) {
- var escaped = false, ch;
- while ((ch = stream.next()) != null) {
- if (ch == quote && !escaped)
- break;
- escaped = !escaped && ch == "\\";
- }
- if (!escaped) state.tokenize = tokenBase;
- return ret("css-string", "string");
- };
- }
-
- return {
- startState: function(base) {
- return {tokenize: tokenBase,
- baseIndent: base || 0,
- stack: []};
- },
-
- token: function(stream, state) {
- if (stream.eatSpace()) return null;
- var style = state.tokenize(stream, state);
-
- var context = state.stack[state.stack.length-1];
- if (type == "hash" && context == "rule") style = "css-colorcode";
- else if (style == "css-identifier") {
- if (context == "rule") style = "css-value";
- else if (!context || context == "@media{") style = "css-selector";
- }
-
- if (context == "rule" && /^[\{\};]$/.test(type))
- state.stack.pop();
- if (type == "{") {
- if (context == "@media") state.stack[state.stack.length-1] = "@media{";
- else state.stack.push("{");
- }
- else if (type == "}") state.stack.pop();
- else if (type == "@media") state.stack.push("@media");
- else if (context != "rule" && context != "@media" && type != "comment") state.stack.push("rule");
- return style;
- },
-
- indent: function(state, textAfter) {
- var n = state.stack.length;
- if (/^\}/.test(textAfter))
- n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1;
- return state.baseIndent + n * indentUnit;
- },
-
- electricChars: "}"
- };
-});
-
-CodeMirror.defineMIME("text/css", "css");
diff --git a/plugins/LocalFilesEditor/codemirror/mode/css/index.html b/plugins/LocalFilesEditor/codemirror/mode/css/index.html
deleted file mode 100644
index ad895610f..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/css/index.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <title>CodeMirror 2: CSS mode</title>
- <link rel="stylesheet" href="../../lib/codemirror.css">
- <script src="../../lib/codemirror.js"></script>
- <script src="css.js"></script>
- <link rel="stylesheet" href="css.css">
- <style>.CodeMirror {background: #f8f8f8;}</style>
- <link rel="stylesheet" href="../../css/docs.css">
- </head>
- <body>
- <h1>CodeMirror 2: CSS mode</h1>
- <form><textarea id="code" name="code">
-/* Some example CSS */
-
-@import url("something.css");
-
-body {
- margin: 0;
- padding: 3em 6em;
- font-family: tahoma, arial, sans-serif;
- color: #000;
-}
-
-#navigation a {
- font-weight: bold;
- text-decoration: none !important;
-}
-
-h1 {
- font-size: 2.5em;
-}
-
-h2 {
- font-size: 1.7em;
-}
-
-h1:before, h2:before {
- content: "::";
-}
-
-code {
- font-family: courier, monospace;
- font-size: 80%;
- color: #418A8A;
-}
-</textarea></form>
- <script>
- var editor = CodeMirror.fromTextArea(document.getElementById("code"), {});
- </script>
-
- <p><strong>MIME types defined:</strong> <code>text/css</code>.</p>
-
- </body>
-</html>
diff --git a/plugins/LocalFilesEditor/codemirror/mode/diff/diff.css b/plugins/LocalFilesEditor/codemirror/mode/diff/diff.css
deleted file mode 100644
index 60c1379ed..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/diff/diff.css
+++ /dev/null
@@ -1,3 +0,0 @@
-span.diff-rangeinfo {color: #a0b;}
-span.diff-minus {color: #a22;}
-span.diff-plus {color: #2b2;}
diff --git a/plugins/LocalFilesEditor/codemirror/mode/diff/diff.js b/plugins/LocalFilesEditor/codemirror/mode/diff/diff.js
deleted file mode 100644
index 619d74e2a..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/diff/diff.js
+++ /dev/null
@@ -1,13 +0,0 @@
-CodeMirror.defineMode("diff", function() {
- return {
- token: function(stream) {
- var ch = stream.next();
- stream.skipToEnd();
- if (ch == "+") return "diff-plus";
- if (ch == "-") return "diff-minus";
- if (ch == "@") return "diff-rangeinfo";
- }
- };
-});
-
-CodeMirror.defineMIME("text/x-diff", "diff");
diff --git a/plugins/LocalFilesEditor/codemirror/mode/diff/index.html b/plugins/LocalFilesEditor/codemirror/mode/diff/index.html
deleted file mode 100644
index 2748f2fa8..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/diff/index.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <title>CodeMirror 2: Diff mode</title>
- <link rel="stylesheet" href="../../lib/codemirror.css">
- <script src="../../lib/codemirror.js"></script>
- <script src="diff.js"></script>
- <link rel="stylesheet" href="diff.css">
- <style>.CodeMirror {border-top: 1px solid #ddd; border-bottom: 1px solid #ddd;}</style>
- <link rel="stylesheet" href="../../css/docs.css">
- </head>
- <body>
- <h1>CodeMirror 2: Diff mode</h1>
- <form><textarea id="code" name="code">
-diff --git a/index.html b/index.html
-index c1d9156..7764744 100644
---- a/index.html
-+++ b/index.html
-@@ -95,7 +95,8 @@ StringStream.prototype = {
- <script>
- var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
- lineNumbers: true,
-- autoMatchBrackets: true
-+ autoMatchBrackets: true,
-+ onGutterClick: function(x){console.log(x);}
- });
- </script>
- </body>
-diff --git a/lib/codemirror.js b/lib/codemirror.js
-index 04646a9..9a39cc7 100644
---- a/lib/codemirror.js
-+++ b/lib/codemirror.js
-@@ -399,10 +399,16 @@ var CodeMirror = (function() {
- }
-
- function onMouseDown(e) {
-- var start = posFromMouse(e), last = start;
-+ var start = posFromMouse(e), last = start, target = e.target();
- if (!start) return;
- setCursor(start.line, start.ch, false);
- if (e.button() != 1) return;
-+ if (target.parentNode == gutter) {
-+ if (options.onGutterClick)
-+ options.onGutterClick(indexOf(gutter.childNodes, target) + showingFrom);
-+ return;
-+ }
-+
- if (!focused) onFocus();
-
- e.stop();
-@@ -808,7 +814,7 @@ var CodeMirror = (function() {
- for (var i = showingFrom; i < showingTo; ++i) {
- var marker = lines[i].gutterMarker;
- if (marker) html.push('<div class="' + marker.style + '">' + htmlEscape(marker.text) + '</div>');
-- else html.push("<div>" + (options.lineNumbers ? i + 1 : "\u00a0") + "</div>");
-+ else html.push("<div>" + (options.lineNumbers ? i + options.firstLineNumber : "\u00a0") + "</div>");
- }
- gutter.style.display = "none"; // TODO test whether this actually helps
- gutter.innerHTML = html.join("");
-@@ -1371,10 +1377,8 @@ var CodeMirror = (function() {
- if (option == "parser") setParser(value);
- else if (option === "lineNumbers") setLineNumbers(value);
- else if (option === "gutter") setGutter(value);
-- else if (option === "readOnly") options.readOnly = value;
-- else if (option === "indentUnit") {options.indentUnit = indentUnit = value; setParser(options.parser);}
-- else if (/^(?:enterMode|tabMode|indentWithTabs|readOnly|autoMatchBrackets|undoDepth)$/.test(option)) options[option] = value;
-- else throw new Error("Can't set option " + option);
-+ else if (option === "indentUnit") {options.indentUnit = value; setParser(options.parser);}
-+ else options[option] = value;
- },
- cursorCoords: cursorCoords,
- undo: operation(undo),
-@@ -1402,7 +1406,8 @@ var CodeMirror = (function() {
- replaceRange: operation(replaceRange),
-
- operation: function(f){return operation(f)();},
-- refresh: function(){updateDisplay([{from: 0, to: lines.length}]);}
-+ refresh: function(){updateDisplay([{from: 0, to: lines.length}]);},
-+ getInputField: function(){return input;}
- };
- return instance;
- }
-@@ -1420,6 +1425,7 @@ var CodeMirror = (function() {
- readOnly: false,
- onChange: null,
- onCursorActivity: null,
-+ onGutterClick: null,
- autoMatchBrackets: false,
- workTime: 200,
- workDelay: 300,
-</textarea></form>
- <script>
- var editor = CodeMirror.fromTextArea(document.getElementById("code"), {});
- </script>
-
- <p><strong>MIME types defined:</strong> <code>text/x-diff</code>.</p>
-
- </body>
-</html>
diff --git a/plugins/LocalFilesEditor/codemirror/mode/haskell/haskell.css b/plugins/LocalFilesEditor/codemirror/mode/haskell/haskell.css
deleted file mode 100644
index 41f915556..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/haskell/haskell.css
+++ /dev/null
@@ -1,25 +0,0 @@
-span.hs-char,
-span.hs-float,
-span.hs-integer,
-span.hs-string {color: #762;}
-
-span.hs-comment {color: #262;font-style: italic;}
-span.hs-pragma {color: #555;font-style: italic;}
-
-span.hs-special,
-span.hs-varid,
-span.hs-varsym {color: #000;}
-
-span.hs-conid,
-span.hs-consym {color: #b11;}
-
-span.hs-qualifier {color: #555;}
-
-span.hs-reservedid,
-span.hs-reservedop {color: #730;}
-
-span.hs-prelude-varid,
-span.hs-prelude-varsym {color: #30a;}
-span.hs-prelude-conid {color: #b11;}
-
-span.hs-error {background-color: #fdd;}
diff --git a/plugins/LocalFilesEditor/codemirror/mode/haskell/haskell.js b/plugins/LocalFilesEditor/codemirror/mode/haskell/haskell.js
deleted file mode 100644
index 107885c20..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/haskell/haskell.js
+++ /dev/null
@@ -1,242 +0,0 @@
-CodeMirror.defineMode("haskell", function(cmCfg, modeCfg) {
-
- function switchState(source, setState, f) {
- setState(f);
- return f(source, setState);
- }
-
- // These should all be Unicode extended, as per the Haskell 2010 report
- var smallRE = /[a-z_]/;
- var largeRE = /[A-Z]/;
- var digitRE = /[0-9]/;
- var hexitRE = /[0-9A-Fa-f]/;
- var octitRE = /[0-7]/;
- var idRE = /[a-z_A-Z0-9']/;
- var symbolRE = /[-!#$%&*+.\/<=>?@\\^|~:]/;
- var specialRE = /[(),;[\]`{}]/;
- var whiteCharRE = /[ \t\v\f]/; // newlines are handled in tokenizer
-
- function normal(source, setState) {
- if (source.eatWhile(whiteCharRE)) {
- return null;
- }
-
- var ch = source.next();
- if (specialRE.test(ch)) {
- if (ch == '{' && source.eat('-')) {
- var t = "hs-comment";
- if (source.eat('#')) {
- t = "hs-pragma";
- }
- return switchState(source, setState, ncomment(t, 1));
- }
- return "hs-special";
- }
-
- if (ch == '\'') {
- if (source.eat('\\')) {
- source.next(); // should handle other escapes here
- }
- else {
- source.next();
- }
- if (source.eat('\'')) {
- return "hs-char";
- }
- return "hs-error";
- }
-
- if (ch == '"') {
- return switchState(source, setState, stringLiteral);
- }
-
- if (largeRE.test(ch)) {
- source.eatWhile(idRE);
- if (source.eat('.')) {
- return "hs-qualifier";
- }
- return "hs-conid";
- }
-
- if (smallRE.test(ch)) {
- source.eatWhile(idRE);
- return "hs-varid";
- }
-
- if (digitRE.test(ch)) {
- if (ch == '0') {
- if (source.eat(/[xX]/)) {
- source.eatWhile(hexitRE); // should require at least 1
- return "hs-integer";
- }
- if (source.eat(/[oO]/)) {
- source.eatWhile(octitRE); // should require at least 1
- return "hs-integer";
- }
- }
- source.eatWhile(digitRE);
- var t = "hs-integer";
- if (source.eat('.')) {
- t = "hs-float";
- source.eatWhile(digitRE); // should require at least 1
- }
- if (source.eat(/[eE]/)) {
- t = "hs-float";
- source.eat(/[-+]/);
- source.eatWhile(digitRE); // should require at least 1
- }
- return t;
- }
-
- if (symbolRE.test(ch)) {
- if (ch == '-' && source.eat(/-/)) {
- source.eatWhile(/-/);
- if (!source.eat(symbolRE)) {
- source.skipToEnd();
- return "hs-comment";
- }
- }
- var t = "hs-varsym";
- if (ch == ':') {
- t = "hs-consym";
- }
- source.eatWhile(symbolRE);
- return t;
- }
-
- return "hs-error";
- }
-
- function ncomment(type, nest) {
- if (nest == 0) {
- return normal;
- }
- return function(source, setState) {
- var currNest = nest;
- while (!source.eol()) {
- ch = source.next();
- if (ch == '{' && source.eat('-')) {
- ++currNest;
- }
- else if (ch == '-' && source.eat('}')) {
- --currNest;
- if (currNest == 0) {
- setState(normal);
- return type;
- }
- }
- }
- setState(ncomment(type, currNest));
- return type;
- }
- }
-
- function stringLiteral(source, setState) {
- while (!source.eol()) {
- var ch = source.next();
- if (ch == '"') {
- setState(normal);
- return "hs-string";
- }
- if (ch == '\\') {
- if (source.eol() || source.eat(whiteCharRE)) {
- setState(stringGap);
- return "hs-string";
- }
- if (source.eat('&')) {
- }
- else {
- source.next(); // should handle other escapes here
- }
- }
- }
- setState(normal);
- return "hs-error";
- }
-
- function stringGap(source, setState) {
- if (source.eat('\\')) {
- return switchState(source, setState, stringLiteral);
- }
- source.next();
- setState(normal);
- return "hs-error";
- }
-
-
- var wellKnownWords = (function() {
- var wkw = {};
- function setType(t) {
- return function () {
- for (var i = 0; i < arguments.length; i++)
- wkw[arguments[i]] = t;
- }
- }
-
- setType("hs-reservedid")(
- "case", "class", "data", "default", "deriving", "do", "else", "foreign",
- "if", "import", "in", "infix", "infixl", "infixr", "instance", "let",
- "module", "newtype", "of", "then", "type", "where", "_");
-
- setType("hs-reservedop")(
- "\.\.", ":", "::", "=", "\\", "\"", "<-", "->", "@", "~", "=>");
-
- setType("hs-prelude-varsym")(
- "!!", "$!", "$", "&&", "+", "++", "-", ".", "/", "/=", "<", "<=", "=<<",
- "==", ">", ">=", ">>", ">>=", "^", "^^", "||", "*", "**");
-
- setType("hs-prelude-conid")(
- "Bool", "Bounded", "Char", "Double", "EQ", "Either", "Enum", "Eq",
- "False", "FilePath", "Float", "Floating", "Fractional", "Functor", "GT",
- "IO", "IOError", "Int", "Integer", "Integral", "Just", "LT", "Left",
- "Maybe", "Monad", "Nothing", "Num", "Ord", "Ordering", "Rational", "Read",
- "ReadS", "Real", "RealFloat", "RealFrac", "Right", "Show", "ShowS",
- "String", "True");
-
- setType("hs-prelude-varid")(
- "abs", "acos", "acosh", "all", "and", "any", "appendFile", "asTypeOf",
- "asin", "asinh", "atan", "atan2", "atanh", "break", "catch", "ceiling",
- "compare", "concat", "concatMap", "const", "cos", "cosh", "curry",
- "cycle", "decodeFloat", "div", "divMod", "drop", "dropWhile", "either",
- "elem", "encodeFloat", "enumFrom", "enumFromThen", "enumFromThenTo",
- "enumFromTo", "error", "even", "exp", "exponent", "fail", "filter",
- "flip", "floatDigits", "floatRadix", "floatRange", "floor", "fmap",
- "foldl", "foldl1", "foldr", "foldr1", "fromEnum", "fromInteger",
- "fromIntegral", "fromRational", "fst", "gcd", "getChar", "getContents",
- "getLine", "head", "id", "init", "interact", "ioError", "isDenormalized",
- "isIEEE", "isInfinite", "isNaN", "isNegativeZero", "iterate", "last",
- "lcm", "length", "lex", "lines", "log", "logBase", "lookup", "map",
- "mapM", "mapM_", "max", "maxBound", "maximum", "maybe", "min", "minBound",
- "minimum", "mod", "negate", "not", "notElem", "null", "odd", "or",
- "otherwise", "pi", "pred", "print", "product", "properFraction",
- "putChar", "putStr", "putStrLn", "quot", "quotRem", "read", "readFile",
- "readIO", "readList", "readLn", "readParen", "reads", "readsPrec",
- "realToFrac", "recip", "rem", "repeat", "replicate", "return", "reverse",
- "round", "scaleFloat", "scanl", "scanl1", "scanr", "scanr1", "seq",
- "sequence", "sequence_", "show", "showChar", "showList", "showParen",
- "showString", "shows", "showsPrec", "significand", "signum", "sin",
- "sinh", "snd", "span", "splitAt", "sqrt", "subtract", "succ", "sum",
- "tail", "take", "takeWhile", "tan", "tanh", "toEnum", "toInteger",
- "toRational", "truncate", "uncurry", "undefined", "unlines", "until",
- "unwords", "unzip", "unzip3", "userError", "words", "writeFile", "zip",
- "zip3", "zipWith", "zipWith3");
-
- return wkw;
- })();
-
-
-
- return {
- startState: function () { return { f: normal }; },
- copyState: function (s) { return { f: s.f }; },
-
- token: function(stream, state) {
- var t = state.f(stream, function(s) { state.f = s; });
- var w = stream.current();
- return (w in wellKnownWords) ? wellKnownWords[w] : t;
- }
- };
-
-});
-
-CodeMirror.defineMIME("text/x-haskell", "haskell");
diff --git a/plugins/LocalFilesEditor/codemirror/mode/haskell/index.html b/plugins/LocalFilesEditor/codemirror/mode/haskell/index.html
deleted file mode 100644
index 0bf34d570..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/haskell/index.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <title>CodeMirror 2: Haskell mode</title>
- <link rel="stylesheet" href="../../lib/codemirror.css">
- <script src="../../lib/codemirror.js"></script>
- <script src="haskell.js"></script>
- <link rel="stylesheet" href="haskell.css">
- <style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
- <link rel="stylesheet" href="../../css/docs.css">
- </head>
- <body>
- <h1>CodeMirror 2: Haskell mode</h1>
-
-<form><textarea id="code" name="code">
-module UniquePerms (
- uniquePerms
- )
-where
-
--- | Find all unique permutations of a list where there might be duplicates.
-uniquePerms :: (Eq a) => [a] -> [[a]]
-uniquePerms = permBag . makeBag
-
--- | An unordered collection where duplicate values are allowed,
--- but represented with a single value and a count.
-type Bag a = [(a, Int)]
-
-makeBag :: (Eq a) => [a] -> Bag a
-makeBag [] = []
-makeBag (a:as) = mix a $ makeBag as
- where
- mix a [] = [(a,1)]
- mix a (bn@(b,n):bs) | a == b = (b,n+1):bs
- | otherwise = bn : mix a bs
-
-permBag :: Bag a -> [[a]]
-permBag [] = [[]]
-permBag bs = concatMap (\(f,cs) -> map (f:) $ permBag cs) . oneOfEach $ bs
- where
- oneOfEach [] = []
- oneOfEach (an@(a,n):bs) =
- let bs' = if n == 1 then bs else (a,n-1):bs
- in (a,bs') : mapSnd (an:) (oneOfEach bs)
-
- apSnd f (a,b) = (a, f b)
- mapSnd = map . apSnd
-</textarea></form>
-
- <script>
- var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
- lineNumbers: true,
- matchBrackets: true
- });
- </script>
-
- <p><strong>MIME types defined:</strong> <code>text/x-haskell</code>.</p>
- </body>
-</html>
diff --git a/plugins/LocalFilesEditor/codemirror/mode/htmlmixed/htmlmixed.js b/plugins/LocalFilesEditor/codemirror/mode/htmlmixed/htmlmixed.js
deleted file mode 100644
index 8d7165201..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/htmlmixed/htmlmixed.js
+++ /dev/null
@@ -1,66 +0,0 @@
-CodeMirror.defineMode("htmlmixed", function(config, parserConfig) {
- var htmlMode = CodeMirror.getMode(config, {name: "xml", htmlMode: true});
- var jsMode = CodeMirror.getMode(config, "javascript");
- var cssMode = CodeMirror.getMode(config, "css");
-
- function html(stream, state) {
- var style = htmlMode.token(stream, state.htmlState);
- if (style == "xml-tag" && stream.current() == ">" && state.htmlState.context) {
- if (/^script$/i.test(state.htmlState.context.tagName)) {
- state.token = javascript;
- state.localState = jsMode.startState(htmlMode.indent(state.htmlState, ""));
- }
- else if (/^style$/i.test(state.htmlState.context.tagName)) {
- state.token = css;
- state.localState = cssMode.startState(htmlMode.indent(state.htmlState, ""));
- }
- }
- return style;
- }
- function javascript(stream, state) {
- if (stream.match(/^<\/\s*script\s*>/i, false)) {
- state.token = html;
- state.curState = null;
- return html(stream, state);
- }
- return jsMode.token(stream, state.localState);
- }
- function css(stream, state) {
- if (stream.match(/^<\/\s*style\s*>/i, false)) {
- state.token = html;
- state.localState = null;
- return html(stream, state);
- }
- return cssMode.token(stream, state.localState);
- }
-
- return {
- startState: function() {
- var state = htmlMode.startState();
- return {token: html, localState: null, htmlState: state};
- },
-
- copyState: function(state) {
- if (state.localState)
- var local = CodeMirror.copyState(state.token == css ? cssMode : jsMode, state.localState);
- return {token: state.token, localState: local, htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};
- },
-
- token: function(stream, state) {
- return state.token(stream, state);
- },
-
- indent: function(state, textAfter) {
- if (state.token == html || /^\s*<\//.test(textAfter))
- return htmlMode.indent(state.htmlState, textAfter);
- else if (state.token == javascript)
- return jsMode.indent(state.localState, textAfter);
- else
- return cssMode.indent(state.localState, textAfter);
- },
-
- electricChars: "/{}:"
- }
-});
-
-CodeMirror.defineMIME("text/html", "htmlmixed");
diff --git a/plugins/LocalFilesEditor/codemirror/mode/htmlmixed/index.html b/plugins/LocalFilesEditor/codemirror/mode/htmlmixed/index.html
deleted file mode 100644
index c661c98d5..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/htmlmixed/index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <title>CodeMirror 2: HTML mixed mode</title>
- <link rel="stylesheet" href="../../lib/codemirror.css">
- <script src="../../lib/codemirror.js"></script>
- <script src="../xml/xml.js"></script>
- <link rel="stylesheet" href="../xml/xml.css">
- <script src="../javascript/javascript.js"></script>
- <link rel="stylesheet" href="../javascript/javascript.css">
- <script src="../css/css.js"></script>
- <link rel="stylesheet" href="../css/css.css">
- <script src="htmlmixed.js"></script>
- <link rel="stylesheet" href="../../css/docs.css">
- <style>.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
- </head>
- <body>
- <h1>CodeMirror 2: HTML mixed mode</h1>
- <form><textarea id="code" name="code">
-<html style="color: green">
- <!-- this is a comment -->
- <head>
- <title>Mixed HTML Example</title>
- <style type="text/css">
- h1 {font-family: comic sans; color: #f0f;}
- div {background: yellow !important;}
- body {
- max-width: 50em;
- margin: 1em 2em 1em 5em;
- }
- </style>
- </head>
- <body>
- <h1>Mixed HTML Example</h1>
- <script>
- function jsFunc(arg1, arg2) {
- if (arg1 && arg2) document.body.innerHTML = "achoo";
- }
- </script>
- </body>
-</html>
-</textarea></form>
- <script>
- var editor = CodeMirror.fromTextArea(document.getElementById("code"), {mode: "text/html", tabMode: "indent"});
- </script>
-
- <p>The HTML mixed mode depends on the XML, JavaScript, and CSS modes.</p>
-
- <p><strong>MIME types defined:</strong> <code>text/html</code>
- (redefined, only takes effect if you load this parser after the
- XML parser).</p>
-
- </body>
-</html>
diff --git a/plugins/LocalFilesEditor/codemirror/mode/javascript/index.html b/plugins/LocalFilesEditor/codemirror/mode/javascript/index.html
deleted file mode 100644
index 7b528e041..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/javascript/index.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <title>CodeMirror 2: JavaScript mode</title>
- <link rel="stylesheet" href="../../lib/codemirror.css">
- <script src="../../lib/codemirror.js"></script>
- <script src="javascript.js"></script>
- <link rel="stylesheet" href="javascript.css">
- <link rel="stylesheet" href="../../css/docs.css">
- <style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
- </head>
- <body>
- <h1>CodeMirror 2: JavaScript mode</h1>
-
-<div><textarea id="code" name="code">
-// Demo code (the actual new parser character stream implementation)
-
-function StringStream(string) {
- this.pos = 0;
- this.string = string;
-}
-
-StringStream.prototype = {
- done: function() {return this.pos >= this.string.length;},
- peek: function() {return this.string.charAt(this.pos);},
- next: function() {
- if (this.pos &lt; this.string.length)
- return this.string.charAt(this.pos++);
- },
- eat: function(match) {
- var ch = this.string.charAt(this.pos);
- if (typeof match == "string") var ok = ch == match;
- else var ok = ch &amp;&amp; match.test ? match.test(ch) : match(ch);
- if (ok) {this.pos++; return ch;}
- },
- eatWhile: function(match) {
- var start = this.pos;
- while (this.eat(match));
- if (this.pos > start) return this.string.slice(start, this.pos);
- },
- backUp: function(n) {this.pos -= n;},
- column: function() {return this.pos;},
- eatSpace: function() {
- var start = this.pos;
- while (/\s/.test(this.string.charAt(this.pos))) this.pos++;
- return this.pos - start;
- },
- match: function(pattern, consume, caseInsensitive) {
- if (typeof pattern == "string") {
- function cased(str) {return caseInsensitive ? str.toLowerCase() : str;}
- if (cased(this.string).indexOf(cased(pattern), this.pos) == this.pos) {
- if (consume !== false) this.pos += str.length;
- return true;
- }
- }
- else {
- var match = this.string.slice(this.pos).match(pattern);
- if (match &amp;&amp; consume !== false) this.pos += match[0].length;
- return match;
- }
- }
-};
-</textarea></div>
-
- <script>
- var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
- lineNumbers: true,
- matchBrackets: true
- });
- </script>
-
- <p>JavaScript mode supports a single configuration
- option, <code>json</code>, which will set the mode to expect JSON
- data rather than a JavaScript program.</p>
-
- <p><strong>MIME types defined:</strong> <code>text/javascript</code>, <code>application/json</code>.</p>
- </body>
-</html>
diff --git a/plugins/LocalFilesEditor/codemirror/mode/javascript/javascript.css b/plugins/LocalFilesEditor/codemirror/mode/javascript/javascript.css
deleted file mode 100644
index 84fb1dfd4..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/javascript/javascript.css
+++ /dev/null
@@ -1,6 +0,0 @@
-span.js-keyword {color: #90b;}
-span.js-atom {color: #291;}
-span.js-variabledef {color: #00f;}
-span.js-localvariable {color: #049;}
-span.js-comment {color: #a70;}
-span.js-string {color: #a22;}
diff --git a/plugins/LocalFilesEditor/codemirror/mode/javascript/javascript.js b/plugins/LocalFilesEditor/codemirror/mode/javascript/javascript.js
deleted file mode 100644
index 065216591..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/javascript/javascript.js
+++ /dev/null
@@ -1,348 +0,0 @@
-CodeMirror.defineMode("javascript", function(config, parserConfig) {
- var indentUnit = config.indentUnit;
- var jsonMode = parserConfig.json;
-
- // Tokenizer
-
- var keywords = function(){
- function kw(type) {return {type: type, style: "js-keyword"};}
- var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c");
- var operator = kw("operator"), atom = {type: "atom", style: "js-atom"};
- return {
- "if": A, "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B,
- "return": C, "break": C, "continue": C, "new": C, "delete": C, "throw": C,
- "var": kw("var"), "function": kw("function"), "catch": kw("catch"),
- "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"),
- "in": operator, "typeof": operator, "instanceof": operator,
- "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom
- };
- }();
-
- var isOperatorChar = /[+\-*&%=<>!?|]/;
-
- function chain(stream, state, f) {
- state.tokenize = f;
- return f(stream, state);
- }
-
- function nextUntilUnescaped(stream, end) {
- var escaped = false, next;
- while ((next = stream.next()) != null) {
- if (next == end && !escaped)
- return false;
- escaped = !escaped && next == "\\";
- }
- return escaped;
- }
-
- // Used as scratch variables to communicate multiple values without
- // consing up tons of objects.
- var type, content;
- function ret(tp, style, cont) {
- type = tp; content = cont;
- return style;
- }
-
- function jsTokenBase(stream, state) {
- var ch = stream.next();
- if (ch == '"' || ch == "'")
- return chain(stream, state, jsTokenString(ch));
- else if (/[\[\]{}\(\),;\:\.]/.test(ch))
- return ret(ch);
- else if (ch == "0" && stream.eat(/x/i)) {
- stream.eatWhile(/[\da-f]/i);
- return ret("number", "js-atom");
- }
- else if (/\d/.test(ch)) {
- stream.match(/^\d*(?:\.\d*)?(?:e[+\-]?\d+)?/);
- return ret("number", "js-atom");
- }
- else if (ch == "/") {
- if (stream.eat("*")) {
- return chain(stream, state, jsTokenComment);
- }
- else if (stream.eat("/")) {
- stream.skipToEnd();
- return ret("comment", "js-comment");
- }
- else if (state.reAllowed) {
- nextUntilUnescaped(stream, "/");
- stream.eatWhile(/[gimy]/); // 'y' is "sticky" option in Mozilla
- return ret("regexp", "js-string");
- }
- else {
- stream.eatWhile(isOperatorChar);
- return ret("operator", null, stream.current());
- }
- }
- else if (isOperatorChar.test(ch)) {
- stream.eatWhile(isOperatorChar);
- return ret("operator", null, stream.current());
- }
- else {
- stream.eatWhile(/[\w\$_]/);
- var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];
- return known ? ret(known.type, known.style, word) :
- ret("variable", "js-variable", word);
- }
- }
-
- function jsTokenString(quote) {
- return function(stream, state) {
- if (!nextUntilUnescaped(stream, quote))
- state.tokenize = jsTokenBase;
- return ret("string", "js-string");
- };
- }
-
- function jsTokenComment(stream, state) {
- var maybeEnd = false, ch;
- while (ch = stream.next()) {
- if (ch == "/" && maybeEnd) {
- state.tokenize = jsTokenBase;
- break;
- }
- maybeEnd = (ch == "*");
- }
- return ret("comment", "js-comment");
- }
-
- // Parser
-
- var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true};
-
- function JSLexical(indented, column, type, align, prev, info) {
- this.indented = indented;
- this.column = column;
- this.type = type;
- this.prev = prev;
- this.info = info;
- if (align != null) this.align = align;
- }
-
- function inScope(state, varname) {
- for (var v = state.localVars; v; v = v.next)
- if (v.name == varname) return true;
- }
-
- function parseJS(state, style, type, content, stream) {
- var cc = state.cc;
- // Communicate our context to the combinators.
- // (Less wasteful than consing up a hundred closures on every call.)
- cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc;
-
- if (!state.lexical.hasOwnProperty("align"))
- state.lexical.align = true;
-
- while(true) {
- var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;
- if (combinator(type, content)) {
- while(cc.length && cc[cc.length - 1].lex)
- cc.pop()();
- if (cx.marked) return cx.marked;
- if (type == "variable" && inScope(state, content)) return "js-localvariable";
- return style;
- }
- }
- }
-
- // Combinator utils
-
- var cx = {state: null, column: null, marked: null, cc: null};
- function pass() {
- for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);
- }
- function cont() {
- pass.apply(null, arguments);
- return true;
- }
- function register(varname) {
- var state = cx.state;
- if (state.context) {
- cx.marked = "js-variabledef";
- for (var v = state.localVars; v; v = v.next)
- if (v.name == varname) return;
- state.localVars = {name: varname, next: state.localVars};
- }
- }
-
- // Combinators
-
- var defaultVars = {name: "this", next: {name: "arguments"}};
- function pushcontext() {
- if (!cx.state.context) cx.state.localVars = defaultVars;
- cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};
- }
- function popcontext() {
- cx.state.localVars = cx.state.context.vars;
- cx.state.context = cx.state.context.prev;
- }
- function pushlex(type, info) {
- var result = function() {
- var state = cx.state;
- state.lexical = new JSLexical(state.indented, cx.stream.column(), type, null, state.lexical, info)
- };
- result.lex = true;
- return result;
- }
- function poplex() {
- var state = cx.state;
- if (state.lexical.prev) {
- if (state.lexical.type == ")")
- state.indented = state.lexical.indented;
- state.lexical = state.lexical.prev;
- }
- }
- poplex.lex = true;
-
- function expect(wanted) {
- return function expecting(type) {
- if (type == wanted) return cont();
- else if (wanted == ";") return pass();
- else return cont(arguments.callee);
- };
- }
-
- function statement(type) {
- if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex);
- if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex);
- if (type == "keyword b") return cont(pushlex("form"), statement, poplex);
- if (type == "{") return cont(pushlex("}"), block, poplex);
- if (type == ";") return cont();
- if (type == "function") return cont(functiondef);
- if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"),
- poplex, statement, poplex);
- if (type == "variable") return cont(pushlex("stat"), maybelabel);
- if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"),
- block, poplex, poplex);
- if (type == "case") return cont(expression, expect(":"));
- if (type == "default") return cont(expect(":"));
- if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"),
- statement, poplex, popcontext);
- return pass(pushlex("stat"), expression, expect(";"), poplex);
- }
- function expression(type) {
- if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator);
- if (type == "function") return cont(functiondef);
- if (type == "keyword c") return cont(expression);
- if (type == "(") return cont(pushlex(")"), expression, expect(")"), poplex, maybeoperator);
- if (type == "operator") return cont(expression);
- if (type == "[") return cont(pushlex("]"), commasep(expression, "]"), poplex, maybeoperator);
- if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeoperator);
- return cont();
- }
- function maybeoperator(type, value) {
- if (type == "operator" && /\+\+|--/.test(value)) return cont(maybeoperator);
- if (type == "operator") return cont(expression);
- if (type == ";") return;
- if (type == "(") return cont(pushlex(")"), commasep(expression, ")"), poplex, maybeoperator);
- if (type == ".") return cont(property, maybeoperator);
- if (type == "[") return cont(pushlex("]"), expression, expect("]"), poplex, maybeoperator);
- }
- function maybelabel(type) {
- if (type == ":") return cont(poplex, statement);
- return pass(maybeoperator, expect(";"), poplex);
- }
- function property(type) {
- if (type == "variable") {cx.marked = "js-property"; return cont();}
- }
- function objprop(type) {
- if (type == "variable") cx.marked = "js-property";
- if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expression);
- }
- function commasep(what, end) {
- function proceed(type) {
- if (type == ",") return cont(what, proceed);
- if (type == end) return cont();
- return cont(expect(end));
- }
- return function commaSeparated(type) {
- if (type == end) return cont();
- else return pass(what, proceed);
- };
- }
- function block(type) {
- if (type == "}") return cont();
- return pass(statement, block);
- }
- function vardef1(type, value) {
- if (type == "variable"){register(value); return cont(vardef2);}
- return cont();
- }
- function vardef2(type, value) {
- if (value == "=") return cont(expression, vardef2);
- if (type == ",") return cont(vardef1);
- }
- function forspec1(type) {
- if (type == "var") return cont(vardef1, forspec2);
- if (type == ";") return pass(forspec2);
- if (type == "variable") return cont(formaybein);
- return pass(forspec2);
- }
- function formaybein(type, value) {
- if (value == "in") return cont(expression);
- return cont(maybeoperator, forspec2);
- }
- function forspec2(type, value) {
- if (type == ";") return cont(forspec3);
- if (value == "in") return cont(expression);
- return cont(expression, expect(";"), forspec3);
- }
- function forspec3(type) {
- if (type != ")") cont(expression);
- }
- function functiondef(type, value) {
- if (type == "variable") {register(value); return cont(functiondef);}
- if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, statement, popcontext);
- }
- function funarg(type, value) {
- if (type == "variable") {register(value); return cont();}
- }
-
- // Interface
-
- return {
- startState: function(basecolumn) {
- return {
- tokenize: jsTokenBase,
- reAllowed: true,
- cc: [],
- lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
- localVars: null,
- context: null,
- indented: 0
- };
- },
-
- token: function(stream, state) {
- if (stream.sol()) {
- if (!state.lexical.hasOwnProperty("align"))
- state.lexical.align = false;
- state.indented = stream.indentation();
- }
- if (stream.eatSpace()) return null;
- var style = state.tokenize(stream, state);
- if (type == "comment") return style;
- state.reAllowed = type == "operator" || type == "keyword c" || type.match(/^[\[{}\(,;:]$/);
- return parseJS(state, style, type, content, stream);
- },
-
- indent: function(state, textAfter) {
- if (state.tokenize != jsTokenBase) return 0;
- var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical,
- type = lexical.type, closing = firstChar == type;
- if (type == "vardef") return lexical.indented + 4;
- else if (type == "form" && firstChar == "{") return lexical.indented;
- else if (type == "stat" || type == "form") return lexical.indented + indentUnit;
- else if (lexical.info == "switch" && !closing)
- return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);
- else if (lexical.align) return lexical.column + (closing ? 0 : 1);
- else return lexical.indented + (closing ? 0 : indentUnit);
- },
-
- electricChars: ":{}"
- };
-});
-
-CodeMirror.defineMIME("text/javascript", "javascript");
-CodeMirror.defineMIME("application/json", {name: "javascript", json: true});
diff --git a/plugins/LocalFilesEditor/codemirror/mode/php/index.html b/plugins/LocalFilesEditor/codemirror/mode/php/index.html
deleted file mode 100644
index 020e24898..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/php/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <title>CodeMirror 2: PHP mode</title>
- <link rel="stylesheet" href="../../lib/codemirror.css">
- <script src="../../lib/codemirror.js"></script>
- <script src="../xml/xml.js"></script>
- <link rel="stylesheet" href="../xml/xml.css">
- <script src="../javascript/javascript.js"></script>
- <link rel="stylesheet" href="../javascript/javascript.css">
- <script src="../css/css.js"></script>
- <link rel="stylesheet" href="../css/css.css">
- <script src="../clike/clike.js"></script>
- <link rel="stylesheet" href="../clike/clike.css">
- <script src="php.js"></script>
- <style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
- <link rel="stylesheet" href="../../css/docs.css">
- </head>
- <body>
- <h1>CodeMirror 2: PHP mode</h1>
-
-<form><textarea id="code" name="code">
-<?php
-function hello($who) {
- return "Hello " . $who;
-}
-?>
-<p>The program says <?= hello("World") ?>.</p>
-<script>
- alert("And here is some JS code"); // also colored
-</script>
-</textarea></form>
-
- <script>
- var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
- lineNumbers: true,
- matchBrackets: true,
- mode: "application/x-httpd-php",
- indentUnit: 8,
- indentWithTabs: true,
- enterMode: "keep",
- tabMode: "shift"
- });
- </script>
-
- <p>Simple HTML/PHP mode based on
- the <a href="../clike/">C-like</a> mode. Depends on XML,
- JavaScript, CSS, and C-like modes.</p>
-
- <p><strong>MIME types defined:</strong> <code>application/x-httpd-php</code>.</p>
- </body>
-</html>
diff --git a/plugins/LocalFilesEditor/codemirror/mode/php/php.js b/plugins/LocalFilesEditor/codemirror/mode/php/php.js
deleted file mode 100644
index a23538f6b..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/php/php.js
+++ /dev/null
@@ -1,83 +0,0 @@
-(function() {
- function keywords(str) {
- var obj = {}, words = str.split(" ");
- for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
- return obj;
- }
- var phpKeywords =
- keywords("abstract and array as break case catch cfunction class clone const continue declare " +
- "default do else elseif enddeclare endfor endforeach endif endswitch endwhile extends " +
- "final for foreach function global goto if implements interface instanceof namespace " +
- "new or private protected public static switch throw try use var while xor");
-
- CodeMirror.defineMode("php", function(config, parserConfig) {
- var htmlMode = CodeMirror.getMode(config, "text/html");
- var jsMode = CodeMirror.getMode(config, "text/javascript");
- var cssMode = CodeMirror.getMode(config, "text/css");
- var phpMode = CodeMirror.getMode(config, {name: "clike", keywords: phpKeywords, multiLineStrings: true, $vars: true});
-
- function dispatch(stream, state) { // TODO open PHP inside text/css
- if (state.curMode == htmlMode) {
- var style = htmlMode.token(stream, state.curState);
- if (style == "xml-processing" && /^<\?/.test(stream.current())) {
- state.curMode = phpMode;
- state.curState = state.php;
- state.curClose = /^\?>/;
- }
- else if (style == "xml-tag" && stream.current() == ">" && state.curState.context) {
- if (/^script$/i.test(state.curState.context.tagName)) {
- state.curMode = jsMode;
- state.curState = jsMode.startState(htmlMode.indent(state.curState, ""));
- state.curClose = /^<\/\s*script\s*>/i;
- }
- else if (/^style$/i.test(state.curState.context.tagName)) {
- state.curMode = cssMode;
- state.curState = cssMode.startState(htmlMode.indent(state.curState, ""));
- state.curClose = /^<\/\s*style\s*>/i;
- }
- }
- return style;
- }
- else if (stream.match(state.curClose, false)) {
- state.curMode = htmlMode;
- state.curState = state.html;
- state.curClose = null;
- return dispatch(stream, state);
- }
- else return state.curMode.token(stream, state.curState);
- }
-
- return {
- startState: function() {
- var html = htmlMode.startState();
- return {html: html,
- php: phpMode.startState(),
- curMode: htmlMode,
- curState: html,
- curClose: null}
- },
-
- copyState: function(state) {
- var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html),
- php = state.php, phpNew = CodeMirror.copyState(phpMode, php), cur;
- if (state.curState == html) cur = htmlNew;
- else if (state.curState == php) cur = phpNew;
- else cur = CodeMirror.copyState(state.curMode, state.curState);
- return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur, curClose: state.curClose};
- },
-
- token: dispatch,
-
- indent: function(state, textAfter) {
- if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) ||
- (state.curMode == phpMode && /^\?>/.test(textAfter)))
- return htmlMode.indent(state.html, textAfter);
- return state.curMode.indent(state.curState, textAfter);
- },
-
- electricChars: "/{}:"
- }
- });
-})();
-
-CodeMirror.defineMIME("application/x-httpd-php", "php");
diff --git a/plugins/LocalFilesEditor/codemirror/mode/stex/index.html b/plugins/LocalFilesEditor/codemirror/mode/stex/index.html
deleted file mode 100644
index 73b07ac13..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/stex/index.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <title>CodeMirror 2: sTeX mode</title>
- <link rel="stylesheet" href="../../lib/codemirror.css">
- <script src="../../lib/codemirror.js"></script>
- <script src="stex.js"></script>
- <link rel="stylesheet" href="stex.css">
- <style>.CodeMirror {background: #f8f8f8;}</style>
- <link rel="stylesheet" href="../../css/docs.css">
- </head>
- <body>
- <h1>CodeMirror 2: sTeX mode</h1>
- <form><textarea id="code" name="code">
-\begin{module}[id=bbt-size]
-\importmodule[balanced-binary-trees]{balanced-binary-trees}
-\importmodule[\KWARCslides{dmath/en/cardinality}]{cardinality}
-
-\begin{frame}
- \frametitle{Size Lemma for Balanced Trees}
- \begin{itemize}
- \item
- \begin{assertion}[id=size-lemma,type=lemma]
- Let $G=\tup{V,E}$ be a \termref[cd=binary-trees]{balanced binary tree}
- of \termref[cd=graph-depth,name=vertex-depth]{depth}$n>i$, then the set
- $\defeq{\livar{V}i}{\setst{\inset{v}{V}}{\gdepth{v} = i}}$ of
- \termref[cd=graphs-intro,name=node]{nodes} at
- \termref[cd=graph-depth,name=vertex-depth]{depth} $i$ has
- \termref[cd=cardinality,name=cardinality]{cardinality} $\power2i$.
- \end{assertion}
- \item
- \begin{sproof}[id=size-lemma-pf,proofend=,for=size-lemma]{via induction over the depth $i$.}
- \begin{spfcases}{We have to consider two cases}
- \begin{spfcase}{$i=0$}
- \begin{spfstep}[display=flow]
- then $\livar{V}i=\set{\livar{v}r}$, where $\livar{v}r$ is the root, so
- $\eq{\card{\livar{V}0},\card{\set{\livar{v}r}},1,\power20}$.
- \end{spfstep}
- \end{spfcase}
- \begin{spfcase}{$i>0$}
- \begin{spfstep}[display=flow]
- then $\livar{V}{i-1}$ contains $\power2{i-1}$ vertexes
- \begin{justification}[method=byIH](IH)\end{justification}
- \end{spfstep}
- \begin{spfstep}
- By the \begin{justification}[method=byDef]definition of a binary
- tree\end{justification}, each $\inset{v}{\livar{V}{i-1}}$ is a leaf or has
- two children that are at depth $i$.
- \end{spfstep}
- \begin{spfstep}
- As $G$ is \termref[cd=balanced-binary-trees,name=balanced-binary-tree]{balanced} and $\gdepth{G}=n>i$, $\livar{V}{i-1}$ cannot contain
- leaves.
- \end{spfstep}
- \begin{spfstep}[type=conclusion]
- Thus $\eq{\card{\livar{V}i},{\atimes[cdot]{2,\card{\livar{V}{i-1}}}},{\atimes[cdot]{2,\power2{i-1}}},\power2i}$.
- \end{spfstep}
- \end{spfcase}
- \end{spfcases}
- \end{sproof}
- \item
- \begin{assertion}[id=fbbt,type=corollary]
- A fully balanced tree of depth $d$ has $\power2{d+1}-1$ nodes.
- \end{assertion}
- \item
- \begin{sproof}[for=fbbt,id=fbbt-pf]{}
- \begin{spfstep}
- Let $\defeq{G}{\tup{V,E}}$ be a fully balanced tree
- \end{spfstep}
- \begin{spfstep}
- Then $\card{V}=\Sumfromto{i}1d{\power2i}= \power2{d+1}-1$.
- \end{spfstep}
- \end{sproof}
- \end{itemize}
- \end{frame}
-\begin{note}
- \begin{omtext}[type=conclusion,for=binary-tree]
- This shows that balanced binary trees grow in breadth very quickly, a consequence of
- this is that they are very shallow (and this compute very fast), which is the essence of
- the next result.
- \end{omtext}
-\end{note}
-\end{module}
-
-%%% Local Variables:
-%%% mode: LaTeX
-%%% TeX-master: "all"
-%%% End: \end{document}
-</textarea></form>
- <script>
- var editor = CodeMirror.fromTextArea(document.getElementById("code"), {});
- </script>
-
- <p><strong>MIME types defined:</strong> <code>text/stex</code>.</p>
-
- </body>
-</html>
diff --git a/plugins/LocalFilesEditor/codemirror/mode/stex/stex.css b/plugins/LocalFilesEditor/codemirror/mode/stex/stex.css
deleted file mode 100644
index 64b975e98..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/stex/stex.css
+++ /dev/null
@@ -1,20 +0,0 @@
-span.css-at {color: #708;}
-span.css-unit {color: #281;}
-span.css-value {color: #708;}
-span.css-identifier {color: black;}
-span.css-selector {color: #11B;}
-span.css-important {color: #00F;}
-span.css-colorcode {color: #299;}
-span.css-comment {color: #A70;}
-span.css-string {color: #A22;}
-
-span.stex-unit { color: #281; }
-span.stex-identifier { color: black; }
-span.stex-slash { color: #FAA; }
-span.stex-command { color: #00F; }
-span.stex-comment { color: #A70; }
-span.stex-import { color: #00F; }
-span.stex-filepath { color: #852626; }
-span.stex-module { color: #852626; }
-span.stex-error { text-decoration: underline; color: red; }
-span.stex-string { color: #A22; }
diff --git a/plugins/LocalFilesEditor/codemirror/mode/stex/stex.js b/plugins/LocalFilesEditor/codemirror/mode/stex/stex.js
deleted file mode 100644
index 10e0d6cad..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/stex/stex.js
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Author: Constantin Jucovschi (c.jucovschi@jacobs-university.de)
- * Licence: MIT
- */
-
-CodeMirror.defineMode("stex", function(cmCfg, modeCfg)
-{
- function pushCommand(state, command) {
- state.cmdState.push(command);
- }
-
- function peekCommand(state) {
- if (state.cmdState.length>0)
- return state.cmdState[state.cmdState.length-1];
- else
- return null;
- }
-
- function popCommand(state) {
- if (state.cmdState.length>0) {
- var plug = state.cmdState.pop();
- plug.closeBracket();
- }
- }
-
- function applyMostPowerful(state) {
- context = state.cmdState;
- for (var i = context.length - 1; i >= 0; i--) {
- var plug = context[i];
- if (plug.name=="DEFAULT")
- continue;
- return plug.styleIdentifier();
- }
- return "stex-identifier";
- }
-
- function addPluginPattern(pluginName, cmdStyle, brackets, styles) {
- return function () {
- this.name=pluginName;
- this.bracketNo = 0;
- this.style=cmdStyle;
- this.styles = styles;
- this.brackets = brackets;
-
- this.styleIdentifier = function(content) {
- if (this.bracketNo<=this.styles.length)
- return this.styles[this.bracketNo-1];
- else
- return null;
- };
- this.openBracket = function(content) {
- this.bracketNo++;
- return "stex-bracket";
- };
- this.closeBracket = function(content) {
- };
- }
- }
-
- var plugins = new Array();
-
- plugins["importmodule"] = addPluginPattern("importmodule", "stex-command", "{[", ["stex-filepath", "stex-module"]);
- plugins["documentclass"] = addPluginPattern("documentclass", "stex-command", "{[", ["", "stex-unit"]);
- plugins["usepackage"] = addPluginPattern("documentclass", "stex-command", "[", ["stex-unit"]);
- plugins["begin"] = addPluginPattern("documentclass", "stex-command", "[", ["stex-unit"]);
- plugins["end"] = addPluginPattern("documentclass", "stex-command", "[", ["stex-unit"]);
-
- plugins["DEFAULT"] = function () {
- this.name="DEFAULT";
- this.style="stex-command";
-
- this.styleIdentifier = function(content) {
- };
- this.openBracket = function(content) {
- };
- this.closeBracket = function(content) {
- };
- };
-
- function setState(state, f) {
- state.f = f;
- }
-
- function normal(source, state) {
- if (source.match(/^\\[a-z]+/)) {
- cmdName = source.current();
- cmdName = cmdName.substr(1, cmdName.length-1);
- var plug = plugins[cmdName];
- if (typeof(plug) == 'undefined') {
- plug = plugins["DEFAULT"];
- }
- plug = new plug();
- pushCommand(state, plug);
- setState(state, beginParams);
- return plug.style;
- }
-
- var ch = source.next();
- if (ch == "%") {
- setState(state, inCComment);
- return "stex-comment";
- }
- else if (ch=='}' || ch==']') {
- plug = peekCommand(state);
- if (plug) {
- plug.closeBracket(ch);
- setState(state, beginParams);
- } else
- return "stex-error";
- return "stex-bracket";
- } else if (ch=='{' || ch=='[') {
- plug = plugins["DEFAULT"];
- plug = new plug();
- pushCommand(state, plug);
- return "stex-bracket";
- }
- else if (/\d/.test(ch)) {
- source.eatWhile(/[\w.%]/);
- return "stex-unit";
- }
- else {
- source.eatWhile(/[\w-_]/);
- return applyMostPowerful(state);
- }
- }
-
- function inCComment(source, state) {
- source.skipToEnd();
- setState(state, normal);
- return "css-comment";
- }
-
- function beginParams(source, state) {
- var ch = source.peek();
- if (ch == '{' || ch == '[') {
- lastPlug = peekCommand(state);
- style = lastPlug.openBracket(ch);
- source.eat(ch);
- setState(state, normal);
- return "stex-bracket";
- }
- if (/[ \t\r]/.test(ch)) {
- source.eat(ch);
- return null;
- }
- setState(state, normal);
- lastPlug = peekCommand(state);
- if (lastPlug) {
- popCommand(state);
- }
- return normal(source, state);
- }
-
- return {
- startState: function() { return { f:normal, cmdState:[] }; },
- copyState: function(s) { return { f: s.f, cmdState: s.cmdState.slice(0, s.cmdState.length) }; },
-
- token: function(stream, state) {
- var t = state.f(stream, state);
- var w = stream.current();
- return t;
- }
- };
-});
-
-
-CodeMirror.defineMIME("text/x-stex", "stex");
diff --git a/plugins/LocalFilesEditor/codemirror/mode/xml/index.html b/plugins/LocalFilesEditor/codemirror/mode/xml/index.html
deleted file mode 100644
index 5ad7c63fe..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/xml/index.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <title>CodeMirror 2: XML mode</title>
- <link rel="stylesheet" href="../../lib/codemirror.css">
- <script src="../../lib/codemirror.js"></script>
- <script src="xml.js"></script>
- <link rel="stylesheet" href="xml.css">
- <style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
- <link rel="stylesheet" href="../../css/docs.css">
- </head>
- <body>
- <h1>CodeMirror 2: XML mode</h1>
- <form><textarea id="code" name="code">
-&lt;html style="color: green"&gt;
- &lt;!-- this is a comment --&gt;
- &lt;head&gt;
- &lt;title&gt;HTML Example&lt;/title&gt;
- &lt;/head&gt;
- &lt;body&gt;
- The indentation tries to be &lt;em&gt;somewhat &amp;quot;do what
- I mean&amp;quot;&lt;/em&gt;... but might not match your style.
- &lt;/body&gt;
-&lt;/html&gt;
-</textarea></form>
- <script>
- var editor = CodeMirror.fromTextArea(document.getElementById("code"), {mode: {name: "xml", htmlMode: true}});
- </script>
- <p>The XML mode supports two configuration parameters:</p>
- <dl>
- <dt><code>htmlMode (boolean)</code></dt>
- <dd>This switches the mode to parse HTML instead of XML. This
- means attributes do not have to be quoted, and some elements
- (such as <code>br</code>) do not require a closing tag.</dd>
- <dt><code>alignCDATA (boolean)</code></dt>
- <dd>Setting this to true will force the opening tag of CDATA
- blocks to not be indented.</dd>
- </dl>
-
- <p><strong>MIME types defined:</strong> <code>application/xml</code>, <code>text/html</code>.</p>
- </body>
-</html>
diff --git a/plugins/LocalFilesEditor/codemirror/mode/xml/xml.css b/plugins/LocalFilesEditor/codemirror/mode/xml/xml.css
deleted file mode 100644
index 86845faa6..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/xml/xml.css
+++ /dev/null
@@ -1,7 +0,0 @@
-span.xml-tag {color: #a0b;}
-span.xml-attribute {color: #281;}
-span.xml-attname {color: #00f;}
-span.xml-comment {color: #a70;}
-span.xml-cdata {color: #48a;}
-span.xml-processing {color: #999;}
-span.xml-entity {color: #a22;}
diff --git a/plugins/LocalFilesEditor/codemirror/mode/xml/xml.js b/plugins/LocalFilesEditor/codemirror/mode/xml/xml.js
deleted file mode 100644
index 21da47b22..000000000
--- a/plugins/LocalFilesEditor/codemirror/mode/xml/xml.js
+++ /dev/null
@@ -1,206 +0,0 @@
-CodeMirror.defineMode("xml", function(config, parserConfig) {
- var indentUnit = config.indentUnit;
- var Kludges = parserConfig.htmlMode ? {
- autoSelfClosers: {"br": true, "img": true, "hr": true, "link": true, "input": true,
- "meta": true, "col": true, "frame": true, "base": true, "area": true},
- doNotIndent: {"pre": true, "!cdata": true},
- allowUnquoted: true
- } : {autoSelfClosers: {}, doNotIndent: {"!cdata": true}, allowUnquoted: false};
- var alignCDATA = parserConfig.alignCDATA;
-
- // Return variables for tokenizers
- var tagName, type;
-
- function inText(stream, state) {
- function chain(parser) {
- state.tokenize = parser;
- return parser(stream, state);
- }
-
- var ch = stream.next();
- if (ch == "<") {
- if (stream.eat("!")) {
- if (stream.eat("[")) {
- if (stream.match("[CDATA[")) return chain(inBlock("xml-cdata", "]]>"));
- else return null;
- }
- else if (stream.match("--")) return chain(inBlock("xml-comment", "-->"));
- else if (stream.match("DOCTYPE")) {
- stream.eatWhile(/[\w\._\-]/);
- return chain(inBlock("xml-doctype", ">"));
- }
- else return null;
- }
- else if (stream.eat("?")) {
- stream.eatWhile(/[\w\._\-]/);
- state.tokenize = inBlock("xml-processing", "?>");
- return "xml-processing";
- }
- else {
- type = stream.eat("/") ? "closeTag" : "openTag";
- stream.eatSpace();
- tagName = "";
- var c;
- while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c;
- state.tokenize = inTag;
- return "xml-tag";
- }
- }
- else if (ch == "&") {
- stream.eatWhile(/[^;]/);
- stream.eat(";");
- return "xml-entity";
- }
- else {
- stream.eatWhile(/[^&<]/);
- return null;
- }
- }
-
- function inTag(stream, state) {
- var ch = stream.next();
- if (ch == ">" || (ch == "/" && stream.eat(">"))) {
- state.tokenize = inText;
- type = ch == ">" ? "endTag" : "selfcloseTag";
- return "xml-tag";
- }
- else if (ch == "=") {
- type = "equals";
- return null;
- }
- else if (/[\'\"]/.test(ch)) {
- state.tokenize = inAttribute(ch);
- return state.tokenize(stream, state);
- }
- else {
- stream.eatWhile(/[^\s\u00a0=<>\"\'\/?]/);
- return "xml-word";
- }
- }
-
- function inAttribute(quote) {
- return function(stream, state) {
- while (!stream.eol()) {
- if (stream.next() == quote) {
- state.tokenize = inTag;
- break;
- }
- }
- return "xml-attribute";
- };
- }
-
- function inBlock(style, terminator) {
- return function(stream, state) {
- while (!stream.eol()) {
- if (stream.match(terminator)) {
- state.tokenize = inText;
- break;
- }
- stream.next();
- }
- return style;
- };
- }
-
- var curState, setStyle;
- function pass() {
- for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]);
- }
- function cont() {
- pass.apply(null, arguments);
- return true;
- }
-
- function pushContext(tagName, startOfLine) {
- var noIndent = Kludges.doNotIndent.hasOwnProperty(tagName) || (curState.context && curState.context.noIndent);
- curState.context = {
- prev: curState.context,
- tagName: tagName,
- indent: curState.indented,
- startOfLine: startOfLine,
- noIndent: noIndent
- };
- }
- function popContext() {
- if (curState.context) curState.context = curState.context.prev;
- }
-
- function element(type) {
- if (type == "openTag") {curState.tagName = tagName; return cont(attributes, endtag(curState.startOfLine));}
- else if (type == "closeTag") {popContext(); return cont(endclosetag);}
- else if (type == "xml-cdata") {
- if (!curState.context || curState.context.name != "!cdata") pushContext("!cdata");
- if (curState.tokenize == inText) popContext();
- return cont();
- }
- else return cont();
- }
- function endtag(startOfLine) {
- return function(type) {
- if (type == "selfcloseTag" ||
- (type == "endTag" && Kludges.autoSelfClosers.hasOwnProperty(curState.tagName.toLowerCase())))
- return cont();
- if (type == "endTag") {pushContext(curState.tagName, startOfLine); return cont();}
- return cont();
- };
- }
- function endclosetag(type) {
- if (type == "endTag") return cont();
- return pass();
- }
-
- function attributes(type) {
- if (type == "xml-word") {setStyle = "xml-attname"; return cont(attributes);}
- if (type == "equals") return cont(attvalue, attributes);
- return pass();
- }
- function attvalue(type) {
- if (type == "xml-word" && Kludges.allowUnquoted) {setStyle = "xml-attribute"; return cont();}
- if (type == "xml-attribute") return cont();
- return pass();
- }
-
- return {
- startState: function() {
- return {tokenize: inText, cc: [], indented: 0, startOfLine: true, tagName: null, context: null};
- },
-
- token: function(stream, state) {
- if (stream.sol()) {
- state.startOfLine = true;
- state.indented = stream.indentation();
- }
- if (stream.eatSpace()) return null;
-
- setStyle = type = tagName = null;
- var style = state.tokenize(stream, state);
- if ((style || type) && style != "xml-comment") {
- curState = state;
- while (true) {
- var comb = state.cc.pop() || element;
- if (comb(type || style)) break;
- }
- }
- state.startOfLine = false;
- return setStyle || style;
- },
-
- indent: function(state, textAfter) {
- var context = state.context;
- if (context && context.noIndent) return 0;
- if (alignCDATA && /<!\[CDATA\[/.test(textAfter)) return 0;
- if (context && /^<\//.test(textAfter))
- context = context.prev;
- while (context && !context.startOfLine)
- context = context.prev;
- if (context) return context.indent + indentUnit;
- else return 0;
- },
-
- electricChars: "/"
- };
-});
-
-CodeMirror.defineMIME("application/xml", "xml");
-CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true});
diff --git a/plugins/LocalFilesEditor/include/css.inc.php b/plugins/LocalFilesEditor/include/css.inc.php
deleted file mode 100644
index 17ea92766..000000000
--- a/plugins/LocalFilesEditor/include/css.inc.php
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
-
-include_once(PHPWG_ROOT_PATH.'admin/include/themes.class.php');
-$themes = new themes();
-
-if (isset($_POST['edit']))
-{
- $_POST['theme'] = $_POST['theme_select'];
-}
-
-if (isset($_POST['theme']) and '~common~' == $_POST['theme'])
-{
- $page['theme'] = $_POST['theme'];
- $edited_file = PHPWG_ROOT_PATH.PWG_LOCAL_DIR.'css/rules.css';
-}
-else
-{
- if (isset($_GET['theme']))
- {
- $page['theme'] = $_GET['theme'];
- }
- elseif (isset($_POST['theme']))
- {
- $page['theme'] = $_POST['theme'];
- }
-
- if (!isset($page['theme']) or !in_array($page['theme'], array_keys($themes->fs_themes)))
- {
- $page['theme'] = get_default_theme();
- }
-
- $edited_file = PHPWG_ROOT_PATH.PWG_LOCAL_DIR . 'css/'.$page['theme'].'-rules.css';
-}
-
-$template->assign('theme', $page['theme']);
-
-if (file_exists($edited_file))
-{
- $content_file = file_get_contents($edited_file);
-}
-else
-{
- $content_file = "/* " . l10n('locfiledit_newfile') . " */\n\n";
-}
-
-$selected = 0;
-$value = '~common~';
-$file = PHPWG_ROOT_PATH.PWG_LOCAL_DIR . 'css/rules.css';
-
-$options[$value] = (file_exists($file) ? '&#x2714;' : '&#x2718;').' local / css / rules.css';
-if ($page['theme'] == $value)
-{
- $selected = $value;
-}
-
-// themes are displayed in the same order as on screen
-// [Administration > Configuration > Themes]
-
-$themes->sort_fs_themes();
-$default_theme = get_default_theme();
-$db_themes = $themes->get_db_themes();
-
-$db_theme_ids = array();
-foreach ($db_themes as $db_theme)
-{
- $db_theme_ids[] = $db_theme['id'];
-}
-
-$active_themes = array();
-$inactive_themes = array();
-
-foreach ($themes->fs_themes as $theme_id => $fs_theme)
-{
- if ($theme_id == 'default')
- {
- continue;
- }
-
- if (in_array($theme_id, $db_theme_ids))
- {
- if ($theme_id == $default_theme)
- {
- array_unshift($active_themes, $fs_theme);
- }
- else
- {
- $active_themes[] = $fs_theme;
- }
- }
- else
- {
- $inactive_themes[] = $fs_theme;
- }
-}
-
-$active_theme_options = array();
-foreach ($active_themes as $theme)
-{
- $file = PHPWG_ROOT_PATH.PWG_LOCAL_DIR . 'css/'.$theme['id'].'-rules.css';
-
- $label = (file_exists($file) ? '&#x2714;' : '&#x2718;').' '.$theme['name'];
-
- if ($default_theme == $theme['id'])
- {
- $label.= ' ('.l10n('default').')';
- }
-
- $active_theme_options[$theme['id']] = $label;
-
- if ($theme['id'] == $page['theme'])
- {
- $selected = $theme['id'];
- }
-}
-
-if (count($active_theme_options) > 0)
-{
- $options[l10n('Active Themes')] = $active_theme_options;
-}
-
-$inactive_theme_options = array();
-foreach ($inactive_themes as $theme)
-{
- $file = PHPWG_ROOT_PATH.PWG_LOCAL_DIR . 'css/'.$theme['id'].'-rules.css';
-
- $inactive_theme_options[$theme['id']] = (file_exists($file) ? '&#x2714;' : '&#x2718;').' '.$theme['name'];
-
- if ($theme['id'] == $page['theme'])
- {
- $selected = $theme['id'];
- }
-}
-
-if (count($inactive_theme_options) > 0)
-{
- $options[l10n('Inactive Themes')] = $inactive_theme_options;
-}
-
-$template->assign(
- 'css_lang_tpl',
- array(
- 'SELECT_NAME' => 'theme_select',
- 'OPTIONS' => $options,
- 'SELECTED' => $selected
- )
-);
-
-$codemirror_mode = 'text/css';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/include/functions.inc.php b/plugins/LocalFilesEditor/include/functions.inc.php
deleted file mode 100644
index 46906225d..000000000
--- a/plugins/LocalFilesEditor/include/functions.inc.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-/**
- * returns $code if php syntax is correct
- * else return false
- *
- * @param string php code
- */
-function eval_syntax($code)
-{
- $code = str_replace(array('<?php', '?>'), '', $code);
- if (function_exists('token_get_all'))
- {
- $b = 0;
- foreach (token_get_all($code) as $token)
- {
- if ('{' == $token) ++$b;
- else if ('}' == $token) --$b;
- }
- if ($b) return false;
- else
- {
- ob_start();
- $eval = eval('if(0){' . $code . '}');
- ob_end_clean();
- if ($eval === false) return false;
- }
- }
- return '<?php' . $code . '?>';
-}
-
-/**
- * returns true or false if $str is bool
- * returns $str if $str is integer
- * else "$str"
- *
- * @param string
- */
-function editarea_quote($value)
-{
- switch (gettype($value))
- {
- case "boolean":
- return $value ? 'true' : 'false';
- case "integer":
- return $value;
- default:
- return '"'.$value.'"';
- }
-}
-
-/**
- * returns bak file for restore
- * @param string
- */
-function get_bak_file($file)
-{
- if (get_extension($file) == 'php')
- {
- return substr_replace($file, '.bak', strrpos($file , '.'), 0);
- }
- else
- {
- return $file . '.bak';
- }
-}
-
-/**
- * returns dirs and subdirs
- * retun array
- * @param string
- */
-function get_rec_dirs($path='')
-{
- $options = array();
- if (is_dir($path))
- {
- $fh = opendir($path);
- while ($file = readdir($fh))
- {
- $pathfile = $path . '/' . $file;
- if ($file != '.' and $file != '..' and $file != '.svn' and is_dir($pathfile))
- {
- $options[$pathfile] = str_replace(array('./', '/'), array('', ' / '), $pathfile);
- $options = array_merge($options, get_rec_dirs($pathfile));
- }
- }
- closedir($fh);
- }
- return $options;
-}
-
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/include/lang.inc.php b/plugins/LocalFilesEditor/include/lang.inc.php
deleted file mode 100644
index e32a26c49..000000000
--- a/plugins/LocalFilesEditor/include/lang.inc.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
-
-$languages = get_languages();
-
-if (isset($_POST['edit']))
-{
- $_POST['language'] = $_POST['language_select'];
-}
-
-if (isset($_POST['language']))
-{
- $page['language'] = $_POST['language'];
-}
-
-if (!isset($page['language']) or !in_array($page['language'], array_keys($languages)))
-{
- $page['language'] = get_default_language();
-}
-
-$template->assign('language', $page['language']);
-
-$edited_file = PHPWG_ROOT_PATH.PWG_LOCAL_DIR.'language/'.$page['language'].'.lang.php';;
-
-if (file_exists($edited_file))
-{
- $content_file = file_get_contents($edited_file);
-}
-else
-{
- $content_file = "<?php\n\n/* ".l10n('locfiledit_newfile')." */\n\n\n\n\n?>";
-}
-
-$selected = 0;
-foreach (get_languages() as $language_code => $language_name)
-{
- $file = PHPWG_ROOT_PATH.PWG_LOCAL_DIR.'language/'.$language_code.'.lang.php';
-
- $options[$language_code] = (file_exists($file) ? '&#x2714;' : '&#x2718;').' '.$language_name;
-
- if ($page['language'] == $language_code)
- {
- $selected = $language_code;
- $template->assign('show_default', array(
- array(
- 'URL' => LOCALEDIT_PATH.'show_default.php?file=language/'.$language_code.'/common.lang.php',
- 'FILE' => 'common.lang.php'
- ),
- array(
- 'URL' => LOCALEDIT_PATH.'show_default.php?file=language/'.$language_code.'/admin.lang.php',
- 'FILE' => 'admin.lang.php'
- )
- )
- );
- }
-}
-
-$template->assign(
- 'css_lang_tpl',
- array(
- 'SELECT_NAME' => 'language_select',
- 'OPTIONS' => $options,
- 'SELECTED' => $selected
- )
- );
-
-$codemirror_mode = 'application/x-httpd-php';
-
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/include/localconf.inc.php b/plugins/LocalFilesEditor/include/localconf.inc.php
deleted file mode 100644
index b801db236..000000000
--- a/plugins/LocalFilesEditor/include/localconf.inc.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
-
-$edited_file = PHPWG_ROOT_PATH.PWG_LOCAL_DIR . "config/config.inc.php";
-
-if (file_exists($edited_file))
-{
- $content_file = file_get_contents($edited_file);
-}
-else
-{
- $content_file = "<?php\n\n/* ".l10n('locfiledit_newfile')." */\n\n\n\n\n?>";
-}
-
-$template->assign('show_default', array(
- array(
- 'URL' => LOCALEDIT_PATH.'show_default.php?file=include/config_default.inc.php',
- 'FILE' => 'config_default.inc.php'
- )
- )
-);
-
-$codemirror_mode = 'application/x-httpd-php';
-
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/include/plug.inc.php b/plugins/LocalFilesEditor/include/plug.inc.php
deleted file mode 100644
index 55c4b2dde..000000000
--- a/plugins/LocalFilesEditor/include/plug.inc.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
-
-$edited_file = PHPWG_PLUGINS_PATH . "PersonalPlugin/main.inc.php";
-
-if (file_exists($edited_file))
-{
- $content_file = file_get_contents($edited_file);
-}
-else
-{
- $content_file = "<?php\n/*
-Plugin Name: " . l10n('locfiledit_onglet_plug') . "
-Version: 1.0
-Description: " . l10n('locfiledit_onglet_plug') . "
-Plugin URI: http://piwigo.org
-Author:
-Author URI:
-*/\n\n\n\n\n?>";
-}
-
-$codemirror_mode = 'application/x-httpd-php';
-
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/include/tpl.inc.php b/plugins/LocalFilesEditor/include/tpl.inc.php
deleted file mode 100644
index c1079a8e7..000000000
--- a/plugins/LocalFilesEditor/include/tpl.inc.php
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php
-if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
-
-$edited_file = '';
-
-if (isset($_POST['edit']))
-{
- $_POST['template'] = $_POST['file_to_edit'];
-}
-
-if (!empty($_POST['template']))
-{
- if (preg_match('#\.\./#', $_POST['template']))
- {
- die('Hacking attempt! template extension must be in template-extension directory');
- }
-
- if (!preg_match('#\.tpl$#', $_POST['template']))
- {
- die('Hacking attempt! template extension must be a *.tpl file');
- }
-
- $template->assign('template', $_POST['template']);
-
- $edited_file = './template-extension/'.$_POST['template'];
-}
-
-$content_file = '';
-if (file_exists($edited_file))
-{
- $content_file = file_get_contents($edited_file);
-}
-
-$newfile_page = isset($_GET['newfile']);
-
-// Edit new tpl file
-if (isset($_POST['create_tpl']))
-{
- $filename = $_POST['tpl_name'];
- if (empty($filename))
- {
- $page['errors'][] = l10n('locfiledit_empty_filename');
- }
- if (get_extension($filename) != 'tpl')
- {
- $filename .= '.tpl';
- }
- if (!preg_match('/^[a-zA-Z0-9-_.]+$/', $filename))
- {
- $page['errors'][] = l10n('locfiledit_filename_error');
- }
- if (is_numeric($_POST['tpl_model']) and $_POST['tpl_model'] != '0')
- {
- $page['errors'][] = l10n('locfiledit_model_error');
- }
- if (file_exists($_POST['tpl_parent'] . '/' . $filename))
- {
- $page['errors'][] = l10n('locfiledit_file_already_exists');
- }
- if (!empty($page['errors']))
- {
- $newfile_page = true;
- }
- else
- {
- $template->assign('template', $filename);
- $edited_file = $_POST['tpl_parent'] . '/' . $filename;
- $content_file = ($_POST['tpl_model'] == '0') ? '' : file_get_contents($_POST['tpl_model']);
- }
-}
-
-if ($newfile_page)
-{
- $filename = isset($_POST['tpl_name']) ? $_POST['tpl_name'] : '';
- $selected['model'] = isset($_POST['tpl_model']) ? $_POST['tpl_model'] : '0';
- $selected['parent'] = isset($_POST['tpl_parent']) ? $_POST['tpl_parent'] : PHPWG_ROOT_PATH . 'template-extension';
-
- // Parent directories list
- $options['parent'] = array(PHPWG_ROOT_PATH . 'template-extension' => 'template-extension');
- $options['parent'] = array_merge($options['parent'], get_rec_dirs(PHPWG_ROOT_PATH . 'template-extension'));
-
- $options['model'][] = l10n('locfiledit_empty_page');
- $options['model'][] = '----------------------';
- $i = 0;
- foreach (get_extents() as $pwg_template)
- {
- $value = PHPWG_ROOT_PATH . 'template-extension/' . $pwg_template;
- $options['model'][$value] = 'template-extension / ' . str_replace('/', ' / ', $pwg_template);
- $i++;
- }
- foreach (get_dirs($conf['themes_dir']) as $theme_id)
- {
- if ($i)
- {
- $options['model'][] = '----------------------';
- $i = 0;
- }
- $dir = $conf['themes_dir'] . '/' . $theme_id . '/template/';
- if (is_dir($dir) and $content = opendir($dir))
- {
- while ($node = readdir($content))
- {
- if (is_file($dir.$node) and get_extension($node) == 'tpl')
- {
- $value = $dir . $node;
- $options['model'][$value] = $theme_id . ' / ' . $node;
- $i++;
- }
- }
- }
- }
- if (end($options['model']) == '----------------------')
- {
- array_pop($options['model']);
- }
- // Assign variables to template
- $template->assign('create_tpl', array(
- 'NEW_FILE_NAME' => $filename,
- 'MODEL_OPTIONS' => $options['model'],
- 'MODEL_SELECTED' => $selected['model'],
- 'PARENT_OPTIONS' => $options['parent'],
- 'PARENT_SELECTED' => $selected['parent']
- )
- );
-}
-else
-{
- // List existing template extensions
- $selected = 0;
- $options[] = l10n('locfiledit_choose_file');
- $options[] = '----------------------';
- foreach (get_extents() as $pwg_template)
- {
- $value = $pwg_template;
- $options[$value] = str_replace('/', ' / ', $pwg_template);
- if ($edited_file == $value) $selected = $value;
- }
- if ($selected == 0 and !empty($edited_file))
- {
- $options[$edited_file] = str_replace(array('./template-extension/', '/'), array('', ' / '), $edited_file);
- $selected = $edited_file;
- }
- $template->assign(
- 'css_lang_tpl',
- array(
- 'SELECT_NAME' => 'file_to_edit',
- 'OPTIONS' => $options,
- 'SELECTED' => $selected,
- 'NEW_FILE_URL' => $my_base_url.'-tpl&amp;newfile',
- 'NEW_FILE_CLASS' => empty($edited_file) ? '' : 'top_right'
- )
- );
-}
-
-$codemirror_mode = 'text/html';
-
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/af_ZA/description.txt b/plugins/LocalFilesEditor/language/af_ZA/description.txt
deleted file mode 100755
index 7dc143aef..000000000
--- a/plugins/LocalFilesEditor/language/af_ZA/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Verander plaaslike lêers vanaf die beheerpaneel. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/af_ZA/index.php b/plugins/LocalFilesEditor/language/af_ZA/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/LocalFilesEditor/language/af_ZA/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/af_ZA/plugin.lang.php b/plugins/LocalFilesEditor/language/af_ZA/plugin.lang.php
deleted file mode 100755
index d423b0fb7..000000000
--- a/plugins/LocalFilesEditor/language/af_ZA/plugin.lang.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_bak_loaded1'] = 'Rugsteun lêer gelaai.';
-$lang['locfiledit_bak_loaded2'] = 'Jy moet \'n lêer stoor om dit te herstel.';
-$lang['locfiledit_cant_save'] = 'Huidige lêer kan nie geskryf word nie. Gaan na of die subgids "local/" skryfbaar is (chmod).';
-$lang['locfiledit_choose_file'] = 'Kies die lêer wat geredigeer moet word';
-$lang['locfiledit_edit'] = 'Redigeer';
-$lang['locfiledit_empty_filename'] = 'Jy moet \'n lêernaam intik.';
-$lang['locfiledit_empty_page'] = 'Leë blad';
-$lang['locfiledit_file_already_exists'] = 'Lêer bestaan alreeds';
-$lang['locfiledit_filename_error'] = 'Verbode karakters in die lêernaam.';
-$lang['locfiledit_model_error'] = 'Jy moet \'n model kies.';
-$lang['locfiledit_model'] = 'Model';
-$lang['locfiledit_new_filename'] = 'Lêernaam';
-$lang['locfiledit_new_tpl'] = 'Skep \'n nuwe lêer';
-$lang['locfiledit_newfile'] = 'Lêer bestaan nie en sal geskep word met die LocalFiles Editor ';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Tale';
-$lang['locfiledit_onglet_localconf'] = 'Local config';
-$lang['locfiledit_onglet_plug'] = 'Persoonlike Invoegsel';
-$lang['locfiledit_onglet_tpl'] = 'Sjablone';
-$lang['locfiledit_parent_directory'] = 'Bron gids';
-$lang['locfiledit_restore_confirm'] = 'Bevestig asseblief? Herstel sal nie effektief wees voor volgende stoor nie.';
-$lang['locfiledit_restore'] = 'Herstel die rugsteun lêer';
-$lang['locfiledit_save_bak'] = 'Rugsteun kopie sal geskep word met stoor.';
-$lang['locfiledit_save_config'] = 'Lêer suksesvol geskryf.';
-$lang['locfiledit_save_file'] = 'Stoor lêer';
-$lang['locfiledit_saved_bak'] = 'Rugsteun lêer geskep (%s)';
-$lang['locfiledit_show_default'] = 'Vertoon verwysings lêer:';
-$lang['locfiledit_syntax_error'] = 'Sintaks fout! Lêer kan nie gestoor word nie.';
-$lang['locfiledit_webmaster_only'] = 'Slegs webmeesters kan lokale lêers skep of verander.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/ar_SA/description.txt b/plugins/LocalFilesEditor/language/ar_SA/description.txt
deleted file mode 100644
index 6867b16b9..000000000
--- a/plugins/LocalFilesEditor/language/ar_SA/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-تحرير الملفات داخل لوحة التحكم \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/ar_SA/plugin.lang.php b/plugins/LocalFilesEditor/language/ar_SA/plugin.lang.php
deleted file mode 100644
index 39228585c..000000000
--- a/plugins/LocalFilesEditor/language/ar_SA/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'تهيئة محلية';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'القوالب';
-$lang['locfiledit_onglet_lang'] = 'اللغة';
-$lang['locfiledit_onglet_plug'] = 'مساعد شخصي';
-$lang['locfiledit_cant_save'] = 'الملف المحلي قابل او غير غابر للكتابه ، تأكد من الوصول و الكتابة الى المجلد"include/"';
-$lang['locfiledit_newfile'] = 'الملف غير موجود ، سوف يتم إنشاءه عن طريق تحرير الملفات المحلي';
-$lang['locfiledit_save_config'] = 'تمت كتابة الملف بنجاح .';
-$lang['locfiledit_show_default'] = 'عرض مرجع الملف : ';
-$lang['locfiledit_save_bak'] = 'نسخة احتياطية أنشأت عن طريق الحفظ ';
-$lang['locfiledit_saved_bak'] = ' (%s) تم إنشاء نسخة احتياطية من الملف';
-$lang['locfiledit_save_file'] = 'حفظ الملف ';
-$lang['locfiledit_choose_file'] = 'حدد ملف لتحريره ';
-$lang['locfiledit_edit'] = 'تحرير';
-$lang['locfiledit_restore'] = 'استعادة من النسخة الاحتياطية';
-$lang['locfiledit_restore_confirm'] = 'نجرو التأكيد؟استعادة الملف كي يتم الحفظ في ملفات تالية';
-$lang['locfiledit_bak_loaded1'] = 'تم تحميل التخسة الاحتياطية';
-$lang['locfiledit_bak_loaded2'] = 'يجب حفظه ليتم استعادته ';
-$lang['locfiledit_syntax_error'] = 'خطأ في تركيب الجمل ، لا / يمكن حفظ المف';
-$lang['locfiledit_new_tpl'] = 'أنشأ ملف جديد';
-$lang['locfiledit_new_filename'] = 'أسم الملف';
-$lang['locfiledit_model'] = 'نموذج';
-$lang['locfiledit_empty_page'] = 'صفحة فارغه';
-$lang['locfiledit_parent_directory'] = 'أصل الدليل';
-$lang['locfiledit_filename_error'] = 'الحروف الغير مسموح بها في أسم الملف ';
-$lang['locfiledit_file_already_exists'] = 'الملف الموجود';
-$lang['locfiledit_model_error'] = 'يجب أختيار نموذج';
-$lang['locfiledit_empty_filename'] = 'يجب كتابة أسم الملف';
-$lang['locfiledit_webmaster_only'] = 'فقط مدير الموقع يمكن استخدام محرر الملفات المحلي';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/bg_BG/description.txt b/plugins/LocalFilesEditor/language/bg_BG/description.txt
deleted file mode 100755
index 09678d7d6..000000000
--- a/plugins/LocalFilesEditor/language/bg_BG/description.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-LocalFilesEditor - Редактор на локални файлове
-Български [BG] \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/bg_BG/index.php b/plugins/LocalFilesEditor/language/bg_BG/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/LocalFilesEditor/language/bg_BG/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/bg_BG/plugin.lang.php b/plugins/LocalFilesEditor/language/bg_BG/plugin.lang.php
deleted file mode 100755
index e6f32a3ac..000000000
--- a/plugins/LocalFilesEditor/language/bg_BG/plugin.lang.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_bak_loaded1'] = 'Архивният файл е зареден.';
-$lang['locfiledit_bak_loaded2'] = 'Трябва да запишете файла за да го възстановите.';
-$lang['locfiledit_cant_save'] = 'Този файл е забранен за запис. Проверете папка "local/" дали е разришен записа(chmod).';
-$lang['locfiledit_choose_file'] = 'Избери файл за редактиране';
-$lang['locfiledit_edit'] = 'Редакция';
-$lang['locfiledit_empty_filename'] = 'Трябва да попълните име на файл.';
-$lang['locfiledit_empty_page'] = 'Празна страница';
-$lang['locfiledit_file_already_exists'] = 'Файлът вече съществува.';
-$lang['locfiledit_filename_error'] = 'Забранен символ в името на файла.';
-$lang['locfiledit_model_error'] = 'Трябва да изберете модел.';
-$lang['locfiledit_model'] = 'Модел';
-$lang['locfiledit_new_filename'] = 'Име на файл';
-$lang['locfiledit_new_tpl'] = 'Създайте нов файл';
-$lang['locfiledit_newfile'] = 'Файлът не съществува докато не въведете някаква информация отдолу. След като е въведена информация и е записана, файлът ще бъде създаден.';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Езици';
-$lang['locfiledit_onglet_localconf'] = 'Локална конфигурация';
-$lang['locfiledit_onglet_plug'] = 'Персонални допълниния';
-$lang['locfiledit_onglet_tpl'] = 'Шаблони';
-$lang['locfiledit_parent_directory'] = 'Родителска директория';
-$lang['locfiledit_restore_confirm'] = 'Моля потвърдете?
-Възстановяването няма да е възможно до следващ запис.';
-$lang['locfiledit_restore'] = 'Възтанови архивния файл';
-$lang['locfiledit_save_bak'] = 'Архивно копие ще бъде създадено след записа.';
-$lang['locfiledit_save_config'] = 'Файла е записан успешно.';
-$lang['locfiledit_save_file'] = 'Запис на файла';
-$lang['locfiledit_saved_bak'] = 'Архивно копие е създадено (%s)';
-$lang['locfiledit_show_default'] = 'Покажи референтния файл:';
-$lang['locfiledit_syntax_error'] = 'Синтактична грешка! Файлът не може да бъде записан.';
-$lang['locfiledit_webmaster_only'] = 'Само уебмастъри могат да създават и променят локални файлове.'; \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/br_FR/description.txt b/plugins/LocalFilesEditor/language/br_FR/description.txt
deleted file mode 100755
index 69462e8f1..000000000
--- a/plugins/LocalFilesEditor/language/br_FR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Evit aozañ restroù lec'hel eus skramm ar mererezh. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/br_FR/index.php b/plugins/LocalFilesEditor/language/br_FR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/LocalFilesEditor/language/br_FR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/br_FR/plugin.lang.php b/plugins/LocalFilesEditor/language/br_FR/plugin.lang.php
deleted file mode 100755
index 6aaece24c..000000000
--- a/plugins/LocalFilesEditor/language/br_FR/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_newfile'] = 'Ne vo ket a restr betek ma vo lakaet titouroù dindan. Pa vo lakaet titouroù ha saveteet, krouet e vo ar restr.';
-$lang['locfiledit_model'] = 'Patrom';
-$lang['locfiledit_model_error'] = 'Ret eo deoc\'h dibab ur patrom.';
-$lang['locfiledit_new_filename'] = 'Anv ar restr';
-$lang['locfiledit_new_tpl'] = 'Krouiñ ur restr nevez';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Yezhoù';
-$lang['locfiledit_onglet_localconf'] = 'Kefluniadur lec\'hel';
-$lang['locfiledit_onglet_plug'] = 'Lugant personel';
-$lang['locfiledit_onglet_tpl'] = 'Patromoù';
-$lang['locfiledit_parent_directory'] = 'Kavlec\'h tad';
-$lang['locfiledit_restore'] = 'Adsevel ar restr saveteiñ';
-$lang['locfiledit_restore_confirm'] = 'Kadarnaat ?
-Ne vo ket adsavet betek ar saveteiñ gentañ.';
-$lang['locfiledit_save_bak'] = 'An eilad a vo krouet gant ar saveteerezh.';
-$lang['locfiledit_save_config'] = 'Skrivet mat ar restr';
-$lang['locfiledit_save_file'] = 'Saveteiñ ar restr';
-$lang['locfiledit_saved_bak'] = 'Restr saveteiñ krouet (%s)';
-$lang['locfiledit_show_default'] = 'Diskouez ar restr dave:';
-$lang['locfiledit_syntax_error'] = 'Fazi ereadurezh! Ne c\'hell ket ar restr bezañ saveteet.';
-$lang['locfiledit_webmaster_only'] = 'Ar mistri-gwiad hepken a c\'hell krouiñ pe cheñch restroù lec\'hel.';
-$lang['locfiledit_bak_loaded1'] = 'Restr saveteiñ karget.';
-$lang['locfiledit_bak_loaded2'] = 'Ret eo deoc\'h saveteiñ ar restr a-raok adsevel anezhi.';
-$lang['locfiledit_cant_save'] = 'N\'eo ket posubl skrivañ e restr red. Sellit m\'eo posubl skrivañ e kavlec\'h "local/" (chmod).';
-$lang['locfiledit_choose_file'] = 'Dibabit ar restr da aozañ';
-$lang['locfiledit_edit'] = 'Aozañ';
-$lang['locfiledit_empty_filename'] = 'Ret eo deoc\'h lakaat anv ar restr.';
-$lang['locfiledit_empty_page'] = 'Pajennad goullo';
-$lang['locfiledit_file_already_exists'] = 'Bez zo ar restr-mañ dija.';
-$lang['locfiledit_filename_error'] = 'Arouezennoù berzet a zo e anv ar restr.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/ca_ES/description.txt b/plugins/LocalFilesEditor/language/ca_ES/description.txt
deleted file mode 100755
index cf0db504f..000000000
--- a/plugins/LocalFilesEditor/language/ca_ES/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Edita els teus arxius locals des del panell d'administració. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/ca_ES/plugin.lang.php b/plugins/LocalFilesEditor/language/ca_ES/plugin.lang.php
deleted file mode 100755
index 59009ecb8..000000000
--- a/plugins/LocalFilesEditor/language/ca_ES/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_bak_loaded2'] = 'Cal que deseu l\'arxiu per tal de poder-lo restaurar.';
-$lang['locfiledit_edit'] = 'Edita';
-$lang['locfiledit_file_already_exists'] = 'Aquest arxiu ja existeix.';
-$lang['locfiledit_model'] = 'Model';
-$lang['locfiledit_new_filename'] = 'Nom de l\'arxiu';
-$lang['locfiledit_new_tpl'] = 'Crea un nou arxiu';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Idiomes';
-$lang['locfiledit_onglet_localconf'] = 'Configuració local';
-$lang['locfiledit_onglet_plug'] = 'Connector personal';
-$lang['locfiledit_onglet_tpl'] = 'Plantilles';
-$lang['locfiledit_bak_loaded1'] = 'Arxiu de còpia de seguretat carregat.';
-$lang['locfiledit_cant_save'] = 'L\'arxiu actual no té permís d\'escriptura. Comproveu si el directori "local/" disposa d\'aquest permís (chmod).';
-$lang['locfiledit_choose_file'] = 'Esculliu l\'arxiu a editar';
-$lang['locfiledit_empty_filename'] = 'Heu d\'escriure el nom del fitxer.';
-$lang['locfiledit_empty_page'] = 'Pàgina en blanc';
-$lang['locfiledit_filename_error'] = 'Caràcters prohibits en el nom del fitxer.';
-$lang['locfiledit_model_error'] = 'Heu de triar un model.';
-$lang['locfiledit_newfile'] = 'El fitxer no existeix i serà creat per LocalFiles Editor';
-$lang['locfiledit_parent_directory'] = 'Directori pare';
-$lang['locfiledit_restore_confirm'] = 'Esteu segurs?
-La restauració no serà efectiva fins a finalitzar.';
-$lang['locfiledit_restore'] = 'Restaura l\'arxiu de còpia de seguretat';
-$lang['locfiledit_save_bak'] = 'La còpia de seguretat es crearà en desar.';
-$lang['locfiledit_save_config'] = 'L\'arxiu s\'ha escrit correctament';
-$lang['locfiledit_save_file'] = 'Desa el fitxer';
-$lang['locfiledit_saved_bak'] = 'Arxiu de còpia de seguretat creat el (%s)';
-$lang['locfiledit_show_default'] = 'Visualitza el fitxer de referència:';
-$lang['locfiledit_syntax_error'] = 'Error de sintaxi! L\'arxiu s\'ha pogut desar.';
-$lang['locfiledit_webmaster_only'] = 'Només els administradors web poden crear o modificar arxius locals.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/cs_CZ/description.txt b/plugins/LocalFilesEditor/language/cs_CZ/description.txt
deleted file mode 100644
index 59178d02a..000000000
--- a/plugins/LocalFilesEditor/language/cs_CZ/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Editujte lokální soubory z administračního panelu. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/cs_CZ/plugin.lang.php b/plugins/LocalFilesEditor/language/cs_CZ/plugin.lang.php
deleted file mode 100644
index 9ca473f05..000000000
--- a/plugins/LocalFilesEditor/language/cs_CZ/plugin.lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// | plugin LocalFilesEditor ,czech lang by webprostor.eu |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Lokální konfigurace';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Šablony';
-$lang['locfiledit_onglet_lang'] = 'Jazyky';
-$lang['locfiledit_onglet_plug'] = 'Vlastní pluginy';
-$lang['locfiledit_cant_save'] = 'Vybraný soubor nelze přepsat.Zkontrolujte jestli je složka "local/" zapisovatelná (chmod).';
-$lang['locfiledit_newfile'] = 'Soubor neexistuje a bude vytvořen LocalFiles Editorem';
-$lang['locfiledit_save_config'] = 'Soubor byl změněn.';
-$lang['locfiledit_show_default'] = 'Zobraz referenční soubor: ';
-$lang['locfiledit_save_bak'] = 'Záloha bude vytvořena při uložení.';
-$lang['locfiledit_saved_bak'] = 'Záloha vytvořena (%s)';
-$lang['locfiledit_save_file'] = 'Uložit soubor';
-$lang['locfiledit_choose_file'] = 'Vyber soubor k editaci';
-$lang['locfiledit_edit'] = 'Editace';
-$lang['locfiledit_restore'] = 'Obnovit ze zálohy';
-$lang['locfiledit_restore_confirm'] = 'Prosím potvrďte?Obnova nebude mít efekt do dalšího uložení.';
-$lang['locfiledit_bak_loaded1'] = 'Záložní soubor nahrán.';
-$lang['locfiledit_bak_loaded2'] = 'Musíte nejprve soubor uložit aby mohl být obnoven.';
-$lang['locfiledit_syntax_error'] = 'Syntax error! Soubor nemůže být uložen.';
-$lang['locfiledit_new_tpl'] = 'Vytvořit nový soubor';
-$lang['locfiledit_new_filename'] = 'Název souboru';
-$lang['locfiledit_model'] = 'Model';
-$lang['locfiledit_empty_page'] = 'Prázdná stránka';
-$lang['locfiledit_parent_directory'] = 'Nadřazená složka';
-$lang['locfiledit_filename_error'] = 'Nepovolené znaky v názvu souboru.';
-$lang['locfiledit_file_already_exists'] = 'Soubor už existuje.';
-$lang['locfiledit_model_error'] = 'Musíte zvolit model.';
-$lang['locfiledit_empty_filename'] = 'Musíte vyplnit název souboru.';
-$lang['locfiledit_webmaster_only'] = 'Pouze webmaster může vytvářet nebo měnit lokální soubory.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/da_DK/description.txt b/plugins/LocalFilesEditor/language/da_DK/description.txt
deleted file mode 100755
index f5ae70638..000000000
--- a/plugins/LocalFilesEditor/language/da_DK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Rediger lokale filer fra administrationspanel. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/da_DK/plugin.lang.php b/plugins/LocalFilesEditor/language/da_DK/plugin.lang.php
deleted file mode 100755
index 198fd1ce5..000000000
--- a/plugins/LocalFilesEditor/language/da_DK/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_bak_loaded1'] = 'Fil med sikkerhedskopi indlæst.';
-$lang['locfiledit_bak_loaded2'] = 'Du skal gemme filen for at gendanne den.';
-$lang['locfiledit_cant_save'] = 'Den aktuelle fil er ikke skrivbar. Undersøg om mappen "local/" er skrivbar (chmod).';
-$lang['locfiledit_choose_file'] = 'Vælg den fil, der skal redigeres';
-$lang['locfiledit_edit'] = 'Rediger';
-$lang['locfiledit_new_tpl'] = 'Opret ny fil';
-$lang['locfiledit_newfile'] = 'Filen findes ikke og vil blive oprettet af LocalFiles Editor';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Sprog';
-$lang['locfiledit_onglet_localconf'] = 'Lokal opsætning';
-$lang['locfiledit_onglet_plug'] = 'Personlig Plugin';
-$lang['locfiledit_onglet_tpl'] = 'Skabeloner';
-$lang['locfiledit_restore_confirm'] = 'Bekræft venligst?
-Gendan vil ikke træde i kraft før næste gem.';
-$lang['locfiledit_restore'] = 'Genopret fil med sikkerhedskopi';
-$lang['locfiledit_save_bak'] = 'Sikkerhedskopi vil blive oprettet når der gemmes.';
-$lang['locfiledit_save_config'] = 'Fil skrevet med succes.';
-$lang['locfiledit_save_file'] = 'Gem fil';
-$lang['locfiledit_saved_bak'] = 'Fil med sikkerhedskopi oprettet (%s)';
-$lang['locfiledit_show_default'] = 'Vis referencefil:';
-$lang['locfiledit_syntax_error'] = 'Syntaksfejl! Filen kan ikke gemmes.';
-$lang['locfiledit_empty_filename'] = 'Du skal skrive et filnavn.';
-$lang['locfiledit_empty_page'] = 'Tom side';
-$lang['locfiledit_file_already_exists'] = 'Filen findes allerede.';
-$lang['locfiledit_filename_error'] = 'Forbudt tegn i filnavn.';
-$lang['locfiledit_model_error'] = 'Du skal vælge en model.';
-$lang['locfiledit_model'] = 'Model';
-$lang['locfiledit_new_filename'] = 'Filnavn';
-$lang['locfiledit_parent_directory'] = 'Overordnet mappe';
-$lang['locfiledit_webmaster_only'] = 'Kun webmastere kan oprette eller ændre lokale filer.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/de_DE/description.txt b/plugins/LocalFilesEditor/language/de_DE/description.txt
deleted file mode 100644
index 9872f8cf8..000000000
--- a/plugins/LocalFilesEditor/language/de_DE/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Administratoren können lokale Dateien direkt in Piwigo bearbeiten. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/de_DE/index.php b/plugins/LocalFilesEditor/language/de_DE/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/de_DE/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/de_DE/plugin.lang.php b/plugins/LocalFilesEditor/language/de_DE/plugin.lang.php
deleted file mode 100644
index 97f938368..000000000
--- a/plugins/LocalFilesEditor/language/de_DE/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Lokale Konfiguration';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Vorlagen';
-$lang['locfiledit_onglet_lang'] = 'Sprachen';
-$lang['locfiledit_onglet_plug'] = 'Persönliches Plugin';
-$lang['locfiledit_cant_save'] = 'Die Datei ist nicht überschreibbar. Überprüfen Sie, ob das Verzeichnis "local/" beschreibbar ist (chmod).';
-$lang['locfiledit_newfile'] = 'Die Datei ist nicht vorhanden und wird vom LocalFilesEditor erstellt.';
-$lang['locfiledit_save_config'] = 'Datei erfolgreich geschrieben.';
-$lang['locfiledit_show_default'] = 'Zeige Referenz-Datei: ';
-$lang['locfiledit_save_bak'] = 'Backup-Kopie wird beim Speichern erstellt.';
-$lang['locfiledit_saved_bak'] = 'Backup-Datei erstellt (%s)';
-$lang['locfiledit_save_file'] = 'Datei speichern';
-$lang['locfiledit_choose_file'] = 'Wählen Sie eine Datei zum Bearbeiten aus';
-$lang['locfiledit_edit'] = 'Bearbeiten';
-$lang['locfiledit_restore'] = 'Wiederherstellung der Backup-Datei';
-$lang['locfiledit_restore_confirm'] = 'Bitte bestätigen! Wiederherstellung wird nicht wirksam sein bis zum nächsten Speichern.';
-$lang['locfiledit_bak_loaded1'] = 'Backup-Datei geladen.';
-$lang['locfiledit_bak_loaded2'] = 'Sie müssen die Datei speichern, um sie wiederherstellen zu können.';
-$lang['locfiledit_syntax_error'] = 'Syntax-Fehler! Datei kann nicht gespeichert werden.';
-$lang['locfiledit_new_tpl'] = 'Erstelle eine neue Datei';
-$lang['locfiledit_new_filename'] = 'Dateiname';
-$lang['locfiledit_model'] = 'Modell';
-$lang['locfiledit_empty_page'] = 'Leere Seite';
-$lang['locfiledit_parent_directory'] = 'Übergeordnetes Verzeichnis';
-$lang['locfiledit_filename_error'] = 'Verbotene Zeichen im Dateinamen.';
-$lang['locfiledit_file_already_exists'] = 'Datei ist bereits vorhanden.';
-$lang['locfiledit_model_error'] = 'Sie müssen ein Modell wählen.';
-$lang['locfiledit_empty_filename'] = 'Sie müssen einen Dateinamen eingeben.';
-$lang['locfiledit_webmaster_only'] = 'Nur Webmaster können lokale Dateien erstellen oder verändern.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/el_GR/description.txt b/plugins/LocalFilesEditor/language/el_GR/description.txt
deleted file mode 100755
index 30b063d02..000000000
--- a/plugins/LocalFilesEditor/language/el_GR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Επεξεργασ?α τοπικ?ν αρχε?ων απ? τον π?νακα διαχε?ρισης. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/el_GR/plugin.lang.php b/plugins/LocalFilesEditor/language/el_GR/plugin.lang.php
deleted file mode 100755
index 82b73aa68..000000000
--- a/plugins/LocalFilesEditor/language/el_GR/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_bak_loaded1'] = 'Το αρχείο αντιγράφου ασφαλείας έχει φορτωθεί.';
-$lang['locfiledit_bak_loaded2'] = 'Πρέπει να αποθηκεύσετε το αρχείο για να το επαναφέρετε.';
-$lang['locfiledit_cant_save'] = 'Το τρέχων αρχείο δεν είναι εγγράψιμο. Ελέγξτε αν ο κατάλογος "local/" είναι εγγράψιμος (chmod).';
-$lang['locfiledit_choose_file'] = 'Επιλέξτε το αρχείο που θέλετε να επεξεργαστείτε';
-$lang['locfiledit_edit'] = 'Επεξεργασία';
-$lang['locfiledit_empty_filename'] = 'Θα πρέπει να συμπληρώσετε το όνομα του αρχείου.';
-$lang['locfiledit_empty_page'] = 'Κενή σελίδα';
-$lang['locfiledit_file_already_exists'] = 'Το αρχείο υπάρχει ήδη.';
-$lang['locfiledit_filename_error'] = 'Απαγορευμένοι χαρακτήρες στο όνομα αρχείου.';
-$lang['locfiledit_model_error'] = 'Πρέπει να επιλέξετε ένα υπόδειγμα.';
-$lang['locfiledit_model'] = 'Υπόδειγμα';
-$lang['locfiledit_new_filename'] = 'Όνομα Αρχείου';
-$lang['locfiledit_new_tpl'] = 'Δημιουργία νέου αρχείου';
-$lang['locfiledit_newfile'] = 'Το αρχείο δεν υπάρχει και θα δημιουργηθεί από τον LocalFiles Editor';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Γλώσσες';
-$lang['locfiledit_onglet_localconf'] = 'Τοπικές ρυθμίσεις';
-$lang['locfiledit_onglet_plug'] = 'Προσωπικά Πρόσθετα';
-$lang['locfiledit_onglet_tpl'] = 'Πρότυπα';
-$lang['locfiledit_parent_directory'] = 'Γονικός κατάλογος';
-$lang['locfiledit_restore_confirm'] = 'Παρακαλούμε να επιβεβαιώσετε;
-Η Επαναφορά αρχείου αντιγράφου ασφαλείας δεν θα γίνει μέχρι την επόμενη αποθήκευση.';
-$lang['locfiledit_restore'] = 'Επαναφορά αρχείου αντιγράφου ασφαλείας';
-$lang['locfiledit_save_bak'] = 'Αντίγραφο ασφαλείας θα δημιουργηθεί κατά την αποθήκευση.';
-$lang['locfiledit_save_config'] = 'Το αρχείο εγγράφθικε με επιτυχία.';
-$lang['locfiledit_save_file'] = 'Αποθήκευση Αρχείου';
-$lang['locfiledit_saved_bak'] = 'Δημιουργία αρχείου ασφαλείας(%s)';
-$lang['locfiledit_show_default'] = 'Εμφάνιση αρχείου αναφοράς:';
-$lang['locfiledit_syntax_error'] = 'Συντακτικό σφάλμα! Το αρχείο δεν μπορεί να αποθηκευτεί.';
-$lang['locfiledit_webmaster_only'] = 'Μόνο webmasters μπορεί να δημιουργεί ή να τροποποιεί τοπικά αρχεία.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/en_UK/description.txt b/plugins/LocalFilesEditor/language/en_UK/description.txt
deleted file mode 100644
index 685dd164f..000000000
--- a/plugins/LocalFilesEditor/language/en_UK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Edit local files from administration panel. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/en_UK/index.php b/plugins/LocalFilesEditor/language/en_UK/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/en_UK/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/en_UK/plugin.lang.php b/plugins/LocalFilesEditor/language/en_UK/plugin.lang.php
deleted file mode 100644
index 165b22b6d..000000000
--- a/plugins/LocalFilesEditor/language/en_UK/plugin.lang.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Local config';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Templates';
-$lang['locfiledit_onglet_lang'] = 'Languages';
-$lang['locfiledit_onglet_plug'] = 'Personal Plugin';
-$lang['locfiledit_cant_save'] = 'Current file isn\'t writeable. Check if directory "local/" is writeable (chmod).';
-$lang['locfiledit_newfile'] = 'The file does not exist until some information is entered
-below. Once information is entered and saved, the file will be created.';
-$lang['locfiledit_save_config'] = 'File written successfully.';
-$lang['locfiledit_show_default'] = 'Display reference file: ';
-$lang['locfiledit_save_bak'] = 'Backup copy will be created on save.';
-$lang['locfiledit_saved_bak'] = 'Backup file created (%s)';
-$lang['locfiledit_save_file'] = 'Save file';
-$lang['locfiledit_choose_file'] = 'Choose the file to be edited';
-$lang['locfiledit_edit'] = 'Edit';
-$lang['locfiledit_restore'] = 'Restore the backup file';
-$lang['locfiledit_restore_confirm'] = 'Please confirm?
-Restore won\'t be effective till next save.';
-$lang['locfiledit_bak_loaded1'] = 'Backup file loaded.';
-$lang['locfiledit_bak_loaded2'] = 'You must save file to restore it.';
-$lang['locfiledit_syntax_error'] = 'Syntax error! File can\'t be saved.';
-$lang['locfiledit_new_tpl'] = 'Create new file';
-$lang['locfiledit_new_filename'] = 'File name';
-$lang['locfiledit_model'] = 'Model';
-$lang['locfiledit_empty_page'] = 'Empty page';
-$lang['locfiledit_parent_directory'] = 'Parent directory';
-$lang['locfiledit_filename_error'] = 'Forbidden characters in file name.';
-$lang['locfiledit_file_already_exists'] = 'File already exists.';
-$lang['locfiledit_model_error'] = 'You must choose a model.';
-$lang['locfiledit_empty_filename'] = 'You must enter the file name.';
-$lang['locfiledit_webmaster_only'] = 'Only webmasters can create or modify local files.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/eo_EO/description.txt b/plugins/LocalFilesEditor/language/eo_EO/description.txt
deleted file mode 100755
index dbc9ff915..000000000
--- a/plugins/LocalFilesEditor/language/eo_EO/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Redaktu lokajn dosierojn el la administra panelo. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/eo_EO/plugin.lang.php b/plugins/LocalFilesEditor/language/eo_EO/plugin.lang.php
deleted file mode 100755
index 02741686d..000000000
--- a/plugins/LocalFilesEditor/language/eo_EO/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_restore'] = 'Restaŭri la savdosieron';
-$lang['locfiledit_restore_confirm'] = 'Bonvolu konfirmi.
-Restaŭrado efektiviĝos post musklako ĉe Konservi.';
-$lang['locfiledit_save_bak'] = 'Savkopio kreiĝos dum konserviĝo.';
-$lang['locfiledit_save_config'] = 'La dosiero sukcese skribiĝis.';
-$lang['locfiledit_save_file'] = 'Konservi dosieron';
-$lang['locfiledit_saved_bak'] = 'Savdosiero kreiĝis (%s)';
-$lang['locfiledit_show_default'] = 'Vidigu referencan dosieron:';
-$lang['locfiledit_syntax_error'] = 'Sintakseraro! Ne eblas konservi la dosieron.';
-$lang['locfiledit_webmaster_only'] = 'Nur retestroj povas krei aŭ modifi lokajn dosierojn.';
-$lang['locfiledit_bak_loaded1'] = 'Savdosiero ŝargita.';
-$lang['locfiledit_bak_loaded2'] = 'Vi devas konservi la dosieron por restaŭri ĝin.';
-$lang['locfiledit_cant_save'] = 'La kuranta dosiero ne skribeblas. Kontrolu ĉu la permesilo de la dosierujo "local/" taŭgas (chmod).';
-$lang['locfiledit_choose_file'] = 'Elektu la dosiero redaktota.';
-$lang['locfiledit_edit'] = 'Redakti';
-$lang['locfiledit_empty_filename'] = 'Vi devas tajpi la dosieran nomon.';
-$lang['locfiledit_empty_page'] = 'Malplena paĝo';
-$lang['locfiledit_file_already_exists'] = 'La dosiero jam ekzistas.';
-$lang['locfiledit_filename_error'] = 'Malpermesitaj signoj en la dosiera nomo.';
-$lang['locfiledit_model'] = 'Modelo';
-$lang['locfiledit_model_error'] = 'Elektu modelon.';
-$lang['locfiledit_new_filename'] = 'Dosiera nomo.';
-$lang['locfiledit_new_tpl'] = 'Krei novan dosieron';
-$lang['locfiledit_newfile'] = 'La dosiero ne ekzistas ĝis informoj tajpiĝas ĉisube. Ĝi kreiĝos ekde informoj entajpiĝas kaj registriĝas.';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Lingvoj';
-$lang['locfiledit_onglet_localconf'] = 'Loka agordo';
-$lang['locfiledit_onglet_plug'] = 'Persona kromaĵo';
-$lang['locfiledit_onglet_tpl'] = 'Ŝablonoj';
-$lang['locfiledit_parent_directory'] = 'Parenca dosierujo';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/es_ES/description.txt b/plugins/LocalFilesEditor/language/es_ES/description.txt
deleted file mode 100644
index f0c6b691f..000000000
--- a/plugins/LocalFilesEditor/language/es_ES/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Edita tus archivos locales desde el panel de administración. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/es_ES/index.php b/plugins/LocalFilesEditor/language/es_ES/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/es_ES/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/es_ES/plugin.lang.php b/plugins/LocalFilesEditor/language/es_ES/plugin.lang.php
deleted file mode 100644
index 356e0f3a4..000000000
--- a/plugins/LocalFilesEditor/language/es_ES/plugin.lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Configuración local';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Plantillas';
-$lang['locfiledit_onglet_lang'] = 'Idiomas';
-$lang['locfiledit_onglet_plug'] = 'Plugin personal';
-$lang['locfiledit_cant_save'] = 'No ha sido posible guardar el archivo. Verifique los permisos (chmod) del directorio "local/".';
-$lang['locfiledit_newfile'] = 'El archivo no existe y será creado la primera vez que lo guarde';
-$lang['locfiledit_save_config'] = 'El archivo ha sido guardado.';
-$lang['locfiledit_show_default'] = 'Editar el archivo ';
-$lang['locfiledit_save_bak'] = 'Antes de guardar, se creará una copia de seguridad';
-$lang['locfiledit_saved_bak'] = 'Se ha creado una copia de seguridad (%s)';
-$lang['locfiledit_save_file'] = 'Guardar el archivo';
-$lang['locfiledit_choose_file'] = 'Seleccione el archivo que desea editar';
-$lang['locfiledit_edit'] = 'Editar';
-$lang['locfiledit_restore'] = 'Cargar la copia de seguridad';
-$lang['locfiledit_restore_confirm'] = '¿Confirma que desea cargar la copia de seguridad?
-Posteriormente deberá hacer clic en Guardar para restaurarla.';
-$lang['locfiledit_bak_loaded1'] = 'Se ha cargado la copia de seguridad';
-$lang['locfiledit_bak_loaded2'] = 'Para conservar la la copia de seguridad debe guardar el archivo.';
-$lang['locfiledit_syntax_error'] = 'Error de sintaxis. No es posible guardar el archivo.';
-$lang['locfiledit_new_tpl'] = 'Crear un nuevo archivo ';
-$lang['locfiledit_new_filename'] = 'Nombre del archivo ';
-$lang['locfiledit_model'] = 'Modelo ';
-$lang['locfiledit_empty_page'] = 'Página en blanco';
-$lang['locfiledit_parent_directory'] = 'Directorio de nivel superior';
-$lang['locfiledit_filename_error'] = 'El nombre de archivo tiene caracteres no permitidos.';
-$lang['locfiledit_file_already_exists'] = 'El archivo ya existe.';
-$lang['locfiledit_model_error'] = 'Por favor, seleccione un modelo.';
-$lang['locfiledit_empty_filename'] = 'Por favor, indique un nombre de archivo.';
-$lang['locfiledit_webmaster_only'] = 'Sólo los administradores pueden crear o modificar fichero locales.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/et_EE/description.txt b/plugins/LocalFilesEditor/language/et_EE/description.txt
deleted file mode 100755
index e2f49d959..000000000
--- a/plugins/LocalFilesEditor/language/et_EE/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Võimalda kohalike failide redigeerimist. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/et_EE/index.php b/plugins/LocalFilesEditor/language/et_EE/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/LocalFilesEditor/language/et_EE/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/et_EE/plugin.lang.php b/plugins/LocalFilesEditor/language/et_EE/plugin.lang.php
deleted file mode 100755
index edfd7a8e1..000000000
--- a/plugins/LocalFilesEditor/language/et_EE/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_bak_loaded1'] = 'Varukoopia avatud.';
-$lang['locfiledit_bak_loaded2'] = 'Taastamise jaoks pead sa faili salvestama.';
-$lang['locfiledit_cant_save'] = 'Aktiivne faili pole kirjutatav. Vaata kas kaust "local/" on kirjutusõigustega (chmod).';
-$lang['locfiledit_choose_file'] = 'Vali fail mida redigeerida';
-$lang['locfiledit_edit'] = 'Redigeeri';
-$lang['locfiledit_empty_filename'] = 'Sa pead sisestama faili nimi.';
-$lang['locfiledit_empty_page'] = 'Tühi leht';
-$lang['locfiledit_file_already_exists'] = 'Fail on juba olemas.';
-$lang['locfiledit_filename_error'] = 'Lubamatuid tähte faili nimis.';
-$lang['locfiledit_model_error'] = 'Sa pead valima mudeli.';
-$lang['locfiledit_model'] = 'Mudel';
-$lang['locfiledit_new_filename'] = 'Faili nimi';
-$lang['locfiledit_new_tpl'] = 'Loo uus fail';
-$lang['locfiledit_newfile'] = 'Faili pole olemas, LocalFiles Editor tekitab selle';
-$lang['locfiledit_onglet_css'] = 'CSS laaditabel';
-$lang['locfiledit_onglet_lang'] = 'Keeled';
-$lang['locfiledit_onglet_localconf'] = 'Kohalik seadistamine';
-$lang['locfiledit_onglet_plug'] = 'Isiklik plugin';
-$lang['locfiledit_onglet_tpl'] = 'Mallid';
-$lang['locfiledit_parent_directory'] = 'Ülemine kaust';
-$lang['locfiledit_restore_confirm'] = 'Palun kinnita?
-Taastatakse alles salvestamise korras.';
-$lang['locfiledit_restore'] = 'Taasta varukoopia';
-$lang['locfiledit_save_bak'] = 'Varukoopia tehakse salvestamisel.';
-$lang['locfiledit_save_config'] = 'Fail edukalt loodud.';
-$lang['locfiledit_save_file'] = 'Salvesta fail';
-$lang['locfiledit_saved_bak'] = 'Varukoopia loomine (%s)';
-$lang['locfiledit_show_default'] = 'Kuva etalon-faili:';
-$lang['locfiledit_syntax_error'] = 'Süntaksiviga! Faili ei salvestatud.';
-$lang['locfiledit_webmaster_only'] = 'Ainult veebimeistrid võivad luua või muuta kohalike faile.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/fa_IR/description.txt b/plugins/LocalFilesEditor/language/fa_IR/description.txt
deleted file mode 100755
index ab8e9cf3b..000000000
--- a/plugins/LocalFilesEditor/language/fa_IR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-ویرایش فایل های داخل هاست بوسیله پنل مدیریت گالری. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/fa_IR/index.php b/plugins/LocalFilesEditor/language/fa_IR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/LocalFilesEditor/language/fa_IR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/fa_IR/plugin.lang.php b/plugins/LocalFilesEditor/language/fa_IR/plugin.lang.php
deleted file mode 100755
index e1618d771..000000000
--- a/plugins/LocalFilesEditor/language/fa_IR/plugin.lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_bak_loaded1'] = 'فایل پشتیبان بارگذاری شد.';
-$lang['locfiledit_bak_loaded2'] = 'برای بازیابی فایل باید آن را ذخیره کنید.';
-$lang['locfiledit_cant_save'] = 'این فایل قابل ویرایش نمی باشد. باید دسترسی (chmod) آن را از داخل هاست تغییر دهید.';
-$lang['locfiledit_choose_file'] = 'یک فایل را برای ویرایش انتخاب کنید';
-$lang['locfiledit_edit'] = 'ویرایش';
-$lang['locfiledit_empty_filename'] = 'باید یک نام برای فایل خود انتخاب کنید.';
-$lang['locfiledit_empty_page'] = 'برگه ی خالی';
-$lang['locfiledit_file_already_exists'] = 'فایلی با این نام موجود می باشد.';
-$lang['locfiledit_filename_error'] = 'نویسه های غیر مجاز در نام فایل استفاده شده است.';
-$lang['locfiledit_model_error'] = 'باید یک الگو را انتخاب کنید.';
-$lang['locfiledit_model'] = 'الگو';
-$lang['locfiledit_new_filename'] = 'نام فایل';
-$lang['locfiledit_new_tpl'] = 'ایجاد فایل تازه';
-$lang['locfiledit_newfile'] = 'این فایل وجود ندارد و بوسیله ی LocalFiles Editor ایجاد خواهد شد';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'زبان ها';
-$lang['locfiledit_onglet_localconf'] = 'پیکربندی محلی (Local Config)';
-$lang['locfiledit_onglet_plug'] = 'افزونه های شخصی';
-$lang['locfiledit_onglet_tpl'] = 'قالب ها';
-$lang['locfiledit_parent_directory'] = 'پوشه ی مادر';
-$lang['locfiledit_restore_confirm'] = 'آیا مطمئن می باشید؟
-<br>
-بدون ذخیره ی فایل بازیابی آن ممکن نخواهد بود.';
-$lang['locfiledit_restore'] = 'بازیابی فایل پشتیبان';
-$lang['locfiledit_save_bak'] = 'فایل پشتیبان پس از نخستین ذخیره ایجاد خواهد شد.';
-$lang['locfiledit_save_config'] = 'فایل با موفقیت ویرایش شد.';
-$lang['locfiledit_save_file'] = 'ذخیره فایل';
-$lang['locfiledit_saved_bak'] = 'فایل پشتیبان ایجاد شد (%s)';
-$lang['locfiledit_show_default'] = 'نمایش فایل مرجع';
-$lang['locfiledit_syntax_error'] = 'خطای دستوری (Syntax)! امکان ذخیره ی فایل وجود ندارد.';
-$lang['locfiledit_webmaster_only'] = 'فقط مدیرکل می تواند یک فایل محلی را ایجاد یا ویرایش کند.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/fi_FI/description.txt b/plugins/LocalFilesEditor/language/fi_FI/description.txt
deleted file mode 100755
index 7e6335edd..000000000
--- a/plugins/LocalFilesEditor/language/fi_FI/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Muokkaa paikallisia tiedostoja ylläpitopaneelista. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/fi_FI/plugin.lang.php b/plugins/LocalFilesEditor/language/fi_FI/plugin.lang.php
deleted file mode 100755
index 3aa3a28f7..000000000
--- a/plugins/LocalFilesEditor/language/fi_FI/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_bak_loaded1'] = 'Varmuuskopiotiedosto ladattu.';
-$lang['locfiledit_bak_loaded2'] = 'Sinun on tallennettava tiedosto palauttaaksesi sen.';
-$lang['locfiledit_cant_save'] = 'Nykyiseen tiedostoon ei voida kirjoittaa. Tarkista, onko hakemistoon "local/" kirjoitusoikeudet (chmod).';
-$lang['locfiledit_choose_file'] = 'Valitse muokattava tiedosto';
-$lang['locfiledit_edit'] = 'Muokkaa';
-$lang['locfiledit_empty_filename'] = 'Sinun on annettava tiedostonimi.';
-$lang['locfiledit_empty_page'] = 'Tyhjä sivu';
-$lang['locfiledit_file_already_exists'] = 'Tiedosto on jo olemassa.';
-$lang['locfiledit_filename_error'] = 'Tiedostonimi sisältää kiellettyjä merkkejä.';
-$lang['locfiledit_model'] = 'Malli';
-$lang['locfiledit_model_error'] = 'Sinun on valittava malli.';
-$lang['locfiledit_new_filename'] = 'Tiedostonimi';
-$lang['locfiledit_new_tpl'] = 'Luo uusi tiedosto';
-$lang['locfiledit_newfile'] = 'Tiedostoa ei ole, joten se luodaan LocalFiles Editorilla';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Kielet';
-$lang['locfiledit_onglet_localconf'] = 'Paikallinen konfiguraatio';
-$lang['locfiledit_onglet_plug'] = 'Henkilökohtainen lisäosa';
-$lang['locfiledit_onglet_tpl'] = 'Mallineet';
-$lang['locfiledit_parent_directory'] = 'Ylähakemisto';
-$lang['locfiledit_restore'] = 'Palauta varmuuskopio';
-$lang['locfiledit_restore_confirm'] = 'Vahvistetaanko?
-Palautus astuu voimaan vasta seuraavan tallennuksen yhteydessä.';
-$lang['locfiledit_save_bak'] = 'Varmuuskopio luodaan seuraavan tallennuksen yhteydessä.';
-$lang['locfiledit_save_config'] = 'Tiedosto kirjoitettu onnistuneesti.';
-$lang['locfiledit_save_file'] = 'Tallenna tiedosto';
-$lang['locfiledit_saved_bak'] = 'Varmuuskopio luotu (%s)';
-$lang['locfiledit_show_default'] = 'Näytä referenssitiedosto:';
-$lang['locfiledit_syntax_error'] = 'Syntaksivirhe! Tiedostoa ei voida tallentaa.';
-$lang['locfiledit_webmaster_only'] = 'Vain webmasterit voivat luoda ja muuttaa paikallisia tiedostoja.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/fr_CA/description.txt b/plugins/LocalFilesEditor/language/fr_CA/description.txt
deleted file mode 100644
index c89b333b1..000000000
--- a/plugins/LocalFilesEditor/language/fr_CA/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Éditez vos fichiers locaux à partir du panneau d'administration. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/fr_CA/index.php b/plugins/LocalFilesEditor/language/fr_CA/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/fr_CA/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/fr_CA/plugin.lang.php b/plugins/LocalFilesEditor/language/fr_CA/plugin.lang.php
deleted file mode 100644
index 8caf06c16..000000000
--- a/plugins/LocalFilesEditor/language/fr_CA/plugin.lang.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-
-$lang['locfiledit_onglet_localconf'] = 'Configuration locale';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Patrons';
-$lang['locfiledit_onglet_lang'] = 'Langues';
-$lang['locfiledit_onglet_plug'] = 'Greffon Personnel';
-$lang['locfiledit_cant_save'] = 'Impossible d\'écrire le fichier. Vérifiez les permissions (chmod) du dossier "local/".';
-$lang['locfiledit_newfile'] = 'Dans cette fenêtre, écrivez les informations pour configurer votre galerie Piwigo.';
-$lang['locfiledit_save_config'] = 'Le fichier a été enregistré.';
-$lang['locfiledit_show_default'] = 'Afficher le fichier ';
-$lang['locfiledit_save_bak'] = 'Une copie de sauvegarde du fichier sera créée lors de l\'enregistrement';
-$lang['locfiledit_saved_bak'] = 'Une copie de sauvegarde a été créée (%s)';
-$lang['locfiledit_save_file'] = 'Enregistrer le fichier';
-$lang['locfiledit_choose_file'] = 'Choisissez un fichier à éditer';
-$lang['locfiledit_edit'] = 'Éditer';
-$lang['locfiledit_restore'] = 'Charger le fichier de sauvegarde';
-$lang['locfiledit_restore_confirm'] = 'Souaitez-vous charger le fichier de sauvegarde?
-Vous devrez ensuite cliquer sur Enregistrer pour le restaurer.';
-$lang['locfiledit_bak_loaded1'] = 'Fichier de sauvegarde chargé';
-$lang['locfiledit_bak_loaded2'] = 'Vous devez l\'enregistrer pour le sauvegarder.';
-$lang['locfiledit_syntax_error'] = 'Erreur de syntaxe! Impossible d\'enregistrer le fichier.';
-$lang['locfiledit_new_tpl'] = 'Créer un nouveau fichier';
-$lang['locfiledit_new_filename'] = 'Nom du fichier';
-$lang['locfiledit_model'] = 'Modèle';
-$lang['locfiledit_empty_page'] = 'Page vierge';
-$lang['locfiledit_parent_directory'] = 'Dossier parent';
-$lang['locfiledit_filename_error'] = 'Caractères interdits dans le nom du fichier.';
-$lang['locfiledit_file_already_exists'] = 'Le fichier existe déjà.';
-$lang['locfiledit_model_error'] = 'Veuillez sélectionner un modèle.';
-$lang['locfiledit_empty_filename'] = 'Veuillez indiquer un nom de fichier.';
-$lang['locfiledit_webmaster_only'] = 'Seuls les Webmestres sont autorisés à créer ou modifier les fichiers locaux.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/fr_FR/description.txt b/plugins/LocalFilesEditor/language/fr_FR/description.txt
deleted file mode 100644
index e025da365..000000000
--- a/plugins/LocalFilesEditor/language/fr_FR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Editez vos fichiers locaux à partir du panneau d'administration. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/fr_FR/index.php b/plugins/LocalFilesEditor/language/fr_FR/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/fr_FR/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/fr_FR/plugin.lang.php b/plugins/LocalFilesEditor/language/fr_FR/plugin.lang.php
deleted file mode 100644
index 1c5931cef..000000000
--- a/plugins/LocalFilesEditor/language/fr_FR/plugin.lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Configuration locale';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Templates';
-$lang['locfiledit_onglet_lang'] = 'Langues';
-$lang['locfiledit_onglet_plug'] = 'Plugin Personnel';
-$lang['locfiledit_cant_save'] = 'Impossible d\'écrire le fichier. Vérifiez les permissions (chmod) du dossier "local/".';
-$lang['locfiledit_newfile'] = 'Dans cette fenêtre, écrivez les informations pour configurer votre galerie Piwigo.';
-$lang['locfiledit_save_config'] = 'Le fichier a été enregistré.';
-$lang['locfiledit_show_default'] = 'Afficher le fichier ';
-$lang['locfiledit_save_bak'] = 'Une copie de sauvegarde du fichier sera créée lors de l\'enregistrement';
-$lang['locfiledit_saved_bak'] = 'Une copie de sauvegarde a été créée (%s)';
-$lang['locfiledit_save_file'] = 'Enregistrer le fichier';
-$lang['locfiledit_choose_file'] = 'Choisissez un fichier à éditer';
-$lang['locfiledit_edit'] = 'Editer';
-$lang['locfiledit_restore'] = 'Charger le fichier de sauvegarde';
-$lang['locfiledit_restore_confirm'] = 'Souaitez-vous charger le fichier de sauvegarde?
-Vous devrez ensuite cliquer sur Enregistrer pour le restaurer.';
-$lang['locfiledit_bak_loaded1'] = 'Fichier de sauvegarde chargé';
-$lang['locfiledit_bak_loaded2'] = 'Vous devez l\'enregistrer pour le sauvegarder.';
-$lang['locfiledit_syntax_error'] = 'Erreur de syntaxe! Impossible d\'enregistrer le fichier.';
-$lang['locfiledit_new_tpl'] = 'Créer un nouveau fichier';
-$lang['locfiledit_new_filename'] = 'Nom du fichier';
-$lang['locfiledit_model'] = 'Modèle';
-$lang['locfiledit_empty_page'] = 'Page vierge';
-$lang['locfiledit_parent_directory'] = 'Dossier parent';
-$lang['locfiledit_filename_error'] = 'Caractères interdits dans le nom du fichier.';
-$lang['locfiledit_file_already_exists'] = 'Le fichier existe déjà.';
-$lang['locfiledit_model_error'] = 'Veuillez sélectionner un modèle.';
-$lang['locfiledit_empty_filename'] = 'Veuillez indiquer un nom de fichier.';
-$lang['locfiledit_webmaster_only'] = 'Seuls les webmasters sont autorisés à créer ou modifier les fichiers locaux.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/gl_ES/description.txt b/plugins/LocalFilesEditor/language/gl_ES/description.txt
deleted file mode 100755
index 943c3817e..000000000
--- a/plugins/LocalFilesEditor/language/gl_ES/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Modifica ficheiros locais desde o panel de administración. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/gl_ES/plugin.lang.php b/plugins/LocalFilesEditor/language/gl_ES/plugin.lang.php
deleted file mode 100755
index 0653ff5ea..000000000
--- a/plugins/LocalFilesEditor/language/gl_ES/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_bak_loaded2'] = 'Terás que gardar o ficheiro para poder restauralo.';
-$lang['locfiledit_bak_loaded1'] = 'Cargar o ficheiro da copia de seguranza';
-$lang['locfiledit_restore_confirm'] = 'Confirmas que desexas cargar a copia de seguranza?
-Posteriormente deberás premer e Gardar para restaurala.';
-$lang['locfiledit_restore'] = 'Restaurar o ficheiro de copia de seguranza';
-$lang['locfiledit_save_bak'] = 'A copia de seguranza será creada ó gardar.';
-$lang['locfiledit_save_config'] = 'O ficheiro escribiuse con éxito.';
-$lang['locfiledit_save_file'] = 'Gardar ficheiro';
-$lang['locfiledit_saved_bak'] = 'Ficheiro de copia de seguranza creada (%)';
-$lang['locfiledit_show_default'] = 'Amosar o ficheiro referencia:';
-$lang['locfiledit_syntax_error'] = 'Erro de sintaxe! o ficheiro non pode ser gravado';
-$lang['locfiledit_webmaster_only'] = 'Só os administradores web poden crear ou modificar ficheiros locais.';
-$lang['locfiledit_cant_save'] = 'Non se pode escribir o actual ficheiro. Comproba se o cartafol "local/" ten permiso para escribir (chmod).';
-$lang['locfiledit_choose_file'] = 'Escolle o ficheiro a ser modificado';
-$lang['locfiledit_edit'] = 'Modificar';
-$lang['locfiledit_empty_filename'] = 'Debes inserir o nome do ficheiro.';
-$lang['locfiledit_empty_page'] = 'Páxina baleira';
-$lang['locfiledit_file_already_exists'] = 'O ficheiro xa existe.';
-$lang['locfiledit_filename_error'] = 'Hai caracteres prohibidos no nome do ficheiro.';
-$lang['locfiledit_model'] = 'Modelo';
-$lang['locfiledit_model_error'] = 'Debes escoller un modelo.';
-$lang['locfiledit_new_filename'] = 'Nome do ficheiro';
-$lang['locfiledit_new_tpl'] = 'Crear un novo ficheiro';
-$lang['locfiledit_newfile'] = 'O ficheiro non existe mentres non se insire dentro algunha información.';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Idiomas';
-$lang['locfiledit_onglet_localconf'] = 'Configuración local';
-$lang['locfiledit_onglet_plug'] = 'Engadido persoal';
-$lang['locfiledit_onglet_tpl'] = 'Modelos';
-$lang['locfiledit_parent_directory'] = 'Cartafol pai';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/he_IL/description.txt b/plugins/LocalFilesEditor/language/he_IL/description.txt
deleted file mode 100644
index 65d420c0b..000000000
--- a/plugins/LocalFilesEditor/language/he_IL/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-ערוך קבצים מקומיים מהפאנל ניהול. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/he_IL/index.php b/plugins/LocalFilesEditor/language/he_IL/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/he_IL/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/he_IL/plugin.lang.php b/plugins/LocalFilesEditor/language/he_IL/plugin.lang.php
deleted file mode 100644
index 6ef6b5743..000000000
--- a/plugins/LocalFilesEditor/language/he_IL/plugin.lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'הגדרות מקומיות';
-$lang['locfiledit_onglet_css'] = 'גיליונות סגנון מדורגים(CSS)';
-$lang['locfiledit_onglet_tpl'] = 'תבניות';
-$lang['locfiledit_onglet_lang'] = 'ספות';
-$lang['locfiledit_onglet_plug'] = 'תוסף אישי';
-$lang['locfiledit_cant_save'] = 'לא ניתן לשנות את הקובץ. בדוק אם לתיקיה "local/" יש הרשאות לכתיבה (chmod).';
-$lang['locfiledit_newfile'] = 'הקובץ לא קיים, הקובץ ייווצר על ידי עורך הקבצים המקומיים (localfile)';
-$lang['locfiledit_save_config'] = 'הקובץ נכתב בהצלחה.';
-$lang['locfiledit_show_default'] = 'הצג את ההפניה לקובץ: ';
-$lang['locfiledit_save_bak'] = 'עותק גיבוי יווצר בעת השמירה.';
-$lang['locfiledit_saved_bak'] = 'קובץ גיבוי שנוצר (%s)';
-$lang['locfiledit_save_file'] = 'שמור קובץ';
-$lang['locfiledit_choose_file'] = 'בחר את הקובץ לעריכה';
-$lang['locfiledit_edit'] = 'ערוך';
-$lang['locfiledit_restore'] = 'שחזר את קובץ הגיבוי';
-$lang['locfiledit_restore_confirm'] = 'אשר בבקשה? שיחזור קובץ הגיבוי לא יהיה אפקטיבי עד השמירה הבאה.';
-$lang['locfiledit_bak_loaded1'] = 'קובץ גיבוי נטען.';
-$lang['locfiledit_bak_loaded2'] = 'אתה חייב לשמור את הקובץ בכדי לשחזר.';
-$lang['locfiledit_syntax_error'] = 'שגיאה תחבירית! לא ניתן לשמור את הקובץ.';
-$lang['locfiledit_new_tpl'] = 'צור קובץ חדש';
-$lang['locfiledit_new_filename'] = 'שם הקובץ';
-$lang['locfiledit_model'] = 'דגם';
-$lang['locfiledit_empty_page'] = 'דף ריק';
-$lang['locfiledit_parent_directory'] = 'מקור';
-$lang['locfiledit_filename_error'] = 'אסור תווים בשם הקובץ.';
-$lang['locfiledit_file_already_exists'] = 'הקובץ כבר קיים.';
-$lang['locfiledit_model_error'] = 'אתה חייב לחבחור דגם.';
-$lang['locfiledit_empty_filename'] = 'אתה חייב למלא את שם הקובץ.';
-$lang['locfiledit_webmaster_only'] = 'רק מנהל האתר יכול ליצור או לשנות קבצים מקומיים.';
-$lang['locfiledit_filename_error'] = 'אסור להשתמש בתווים מסויימים בשם הקובץ.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/hr_HR/description.txt b/plugins/LocalFilesEditor/language/hr_HR/description.txt
deleted file mode 100644
index d5b010d38..000000000
--- a/plugins/LocalFilesEditor/language/hr_HR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Uredivanje lokalnih datoteka iz panela za administraciju. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/hr_HR/index.php b/plugins/LocalFilesEditor/language/hr_HR/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/hr_HR/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/hr_HR/plugin.lang.php b/plugins/LocalFilesEditor/language/hr_HR/plugin.lang.php
deleted file mode 100644
index d66562afc..000000000
--- a/plugins/LocalFilesEditor/language/hr_HR/plugin.lang.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-$lang['locfiledit_onglet_localconf'] = 'Lokalne postavke';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Predlošci';
-$lang['locfiledit_onglet_lang'] = 'Jezici';
-$lang['locfiledit_onglet_plug'] = 'Osobni plugin';
-$lang['locfiledit_cant_save'] = 'Trenutna datoteka ne može se zapisati. Provjerite može li se zapisivati u mapu "local/" (chmod).';
-$lang['locfiledit_newfile'] = 'Datoteka ne postoji i bit ce kreirana pomocu LocalFiles Editor-a';
-$lang['locfiledit_save_config'] = 'Datoteka uspješno zapisana.';
-$lang['locfiledit_show_default'] = 'Prikaži referentnu datoteku: ';
-$lang['locfiledit_save_bak'] = 'Sigurnosna kopija ce biti kreirana kod spremanja.';
-$lang['locfiledit_saved_bak'] = 'Sigurnosna kopija kreirana (%s)';
-$lang['locfiledit_save_file'] = 'Spremi datoteku';
-$lang['locfiledit_choose_file'] = 'Odaberi datoteku za uredivanje';
-$lang['locfiledit_edit'] = 'Uredi';
-$lang['locfiledit_restore'] = 'Vrati sigurnosnu kopiju datoteke';
-$lang['locfiledit_restore_confirm'] = 'Molimo potvrdite.
-Vracanje kopije nece biti prihvaceno do sljedeceg spremanja.';
-$lang['locfiledit_bak_loaded1'] = 'Sigurnosna kopija datoteke ucitana.';
-$lang['locfiledit_bak_loaded2'] = 'Morate snimiti datoteku kako bi je vratili u prijašnje stanje.';
-$lang['locfiledit_syntax_error'] = 'Greška u sintaksi! Datoteka ne može biti spremljena.';
-$lang['locfiledit_new_tpl'] = 'Kreiraj novu datoteku';
-$lang['locfiledit_new_filename'] = 'Naziv datoteke';
-$lang['locfiledit_model'] = 'Model';
-$lang['locfiledit_empty_page'] = 'Prazna stranica';
-$lang['locfiledit_parent_directory'] = 'Prethodna mapa';
-$lang['locfiledit_filename_error'] = 'Zabranjeni znakovi u nazivu datoteke.';
-$lang['locfiledit_file_already_exists'] = 'Datoteka vec postoji.';
-$lang['locfiledit_model_error'] = 'Morate odabrati model.';
-$lang['locfiledit_empty_filename'] = 'Morate popuniti naziv datoteke.';
-$lang['locfiledit_webmaster_only'] = 'Samo webmasteri mogu kreirati ili mijenjati lokalne datoteke.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/hu_HU/description.txt b/plugins/LocalFilesEditor/language/hu_HU/description.txt
deleted file mode 100644
index d9a9af95d..000000000
--- a/plugins/LocalFilesEditor/language/hu_HU/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Helyi fájlok szerkesztése az adminisztrációs felületen.
diff --git a/plugins/LocalFilesEditor/language/hu_HU/index.php b/plugins/LocalFilesEditor/language/hu_HU/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/hu_HU/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/hu_HU/plugin.lang.php b/plugins/LocalFilesEditor/language/hu_HU/plugin.lang.php
deleted file mode 100644
index e41269fb8..000000000
--- a/plugins/LocalFilesEditor/language/hu_HU/plugin.lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Helyi beállítások';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Sablonok';
-$lang['locfiledit_onglet_lang'] = 'Nyelv';
-$lang['locfiledit_onglet_plug'] = 'Egyedi bővítmény';
-$lang['locfiledit_cant_save'] = 'A fájl nem írható. Ellenőrizze a könyvtár "local/" írhatóságát (chmod)';
-$lang['locfiledit_newfile'] = 'Nincs ilyen fájl a LocalFiles Editor létre tudja hozni';
-$lang['locfiledit_save_config'] = 'A fájl módosítása sikeres.';
-$lang['locfiledit_show_default'] = 'Fájl kiválasztás: ';
-$lang['locfiledit_save_bak'] = 'Biztonsági másolat mentése.';
-$lang['locfiledit_saved_bak'] = 'Biztonsági másolat létrehozva (%s)';
-$lang['locfiledit_save_file'] = 'Fájl mentése';
-$lang['locfiledit_choose_file'] = 'Válassza ki a szerkesztendő fájlt';
-$lang['locfiledit_edit'] = 'Szerkesztés';
-$lang['locfiledit_restore'] = 'Biztonsági másolat visszatöltése';
-$lang['locfiledit_restore_confirm'] = 'Biztosan ezt akarja?
-A változtatás nem vonható vissza.';
-$lang['locfiledit_bak_loaded1'] = 'Biztonsági másolat betöltve.';
-$lang['locfiledit_bak_loaded2'] = 'Mentett fájl visszaállítása.';
-$lang['locfiledit_syntax_error'] = 'Syntax error! A fájl mentése meghiúsult.';
-$lang['locfiledit_new_tpl'] = 'Új fájl létrehozása';
-$lang['locfiledit_new_filename'] = 'Fájl neve';
-$lang['locfiledit_model'] = 'Típus';
-$lang['locfiledit_empty_page'] = 'Üres oldal';
-$lang['locfiledit_parent_directory'] = 'Szülő könyvtár';
-$lang['locfiledit_filename_error'] = 'Nem használható fájlnév vagy karakter.';
-$lang['locfiledit_file_already_exists'] = 'Ilyen fájl már létezik.';
-$lang['locfiledit_model_error'] = 'A típust ki kell választani.';
-$lang['locfiledit_empty_filename'] = 'A fájlnevet ki kell tölteni.';
-/* TODO */ $lang['locfiledit_webmaster_only'] = 'Csak a webmesterek hozhatnak létre, vagy módosíthatnak helyi fájlokat.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/index.php b/plugins/LocalFilesEditor/language/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/it_IT/description.txt b/plugins/LocalFilesEditor/language/it_IT/description.txt
deleted file mode 100644
index 5921aaf5b..000000000
--- a/plugins/LocalFilesEditor/language/it_IT/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Modificare i file locali dal pannello di amministrazione. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/it_IT/index.php b/plugins/LocalFilesEditor/language/it_IT/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/it_IT/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/it_IT/plugin.lang.php b/plugins/LocalFilesEditor/language/it_IT/plugin.lang.php
deleted file mode 100644
index 5e228b941..000000000
--- a/plugins/LocalFilesEditor/language/it_IT/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Configurazione locale';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Templates';
-$lang['locfiledit_onglet_lang'] = 'Lingue';
-$lang['locfiledit_onglet_plug'] = 'Plugin Personale';
-$lang['locfiledit_cant_save'] = 'Il file corrente non è scrivibile. Verifica i permessi di scrittura (chmod) della directory "local/".';
-$lang['locfiledit_newfile'] = 'Il file non esiste fino a quando qualche informazione verrà inserita di seguito. Una volta che le informazioni sono inserite e salvate, il file verrà creato.';
-$lang['locfiledit_save_config'] = 'File salvato con successo';
-$lang['locfiledit_show_default'] = 'Visualizza file di riferimento:';
-$lang['locfiledit_save_bak'] = 'Una copia di backup del file sarà creata durante la fase di salvataggio.';
-$lang['locfiledit_saved_bak'] = 'Una copia di backup è stata creata (%s)';
-$lang['locfiledit_save_file'] = 'Salva il file';
-$lang['locfiledit_choose_file'] = 'Scegli un file da modificare';
-$lang['locfiledit_edit'] = 'Modifica';
-$lang['locfiledit_restore'] = 'Caricare il file di backup';
-$lang['locfiledit_restore_confirm'] = 'Si prega di confermare?
-Il ripristino non sarà effettivo fino al successivo salvataggio.';
-$lang['locfiledit_bak_loaded1'] = 'Copia di backup caricata.';
-$lang['locfiledit_bak_loaded2'] = 'Devi salvare il file per ripristinarlo.';
-$lang['locfiledit_syntax_error'] = 'Errore di sintassi! Impossibile salvare il file.';
-$lang['locfiledit_new_tpl'] = 'Crea un nuovo file';
-$lang['locfiledit_new_filename'] = 'Nome file';
-$lang['locfiledit_model'] = 'Modello';
-$lang['locfiledit_empty_page'] = 'Pagina vuota';
-$lang['locfiledit_parent_directory'] = 'Directory parente';
-$lang['locfiledit_filename_error'] = 'Caratteri vietati nel nome del file.';
-$lang['locfiledit_file_already_exists'] = 'Il file esiste già.';
-$lang['locfiledit_model_error'] = 'Devi scegliere un modello.';
-$lang['locfiledit_empty_filename'] = 'Devi inserire il nome del file.';
-$lang['locfiledit_webmaster_only'] = 'Solo i webmasters sono autorizzati a creare o modificare i file locali.'; \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/ja_JP/description.txt b/plugins/LocalFilesEditor/language/ja_JP/description.txt
deleted file mode 100644
index 461d06cdc..000000000
--- a/plugins/LocalFilesEditor/language/ja_JP/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-アドミニストレーション・パネルよりローカルファイルを編集する \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/ja_JP/index.php b/plugins/LocalFilesEditor/language/ja_JP/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/ja_JP/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/ja_JP/plugin.lang.php b/plugins/LocalFilesEditor/language/ja_JP/plugin.lang.php
deleted file mode 100644
index a1608776d..000000000
--- a/plugins/LocalFilesEditor/language/ja_JP/plugin.lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'ローカルconfig';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'テンプレート';
-$lang['locfiledit_onglet_lang'] = '言語';
-$lang['locfiledit_onglet_plug'] = '個人のプラグイン';
-$lang['locfiledit_cant_save'] = '現在のファイルは書き込みできません。"local/"というディレクトリーは書き込める(chmod)か確認して下さい。';
-$lang['locfiledit_newfile'] = 'ファイルがありませんので、ローカルファイルエディターで作成されます。';
-$lang['locfiledit_save_config'] = 'ファイル書き込み成功';
-$lang['locfiledit_show_default'] = '参照ファイル展示: ';
-$lang['locfiledit_save_bak'] = '保存する時に、バックアップコピーが作成される。';
-$lang['locfiledit_saved_bak'] = 'バックアップファイル作成されました(%s)';
-$lang['locfiledit_save_file'] = 'ファイル保存';
-$lang['locfiledit_choose_file'] = '編集ファイルを選択して下さい。';
-$lang['locfiledit_edit'] = '編集';
-$lang['locfiledit_restore'] = 'バックアップファイルを復元する';
-$lang['locfiledit_restore_confirm'] = '確認して下さい?
-次の保存するまでに現在の復元は有効になりません。';
-$lang['locfiledit_bak_loaded1'] = 'バックアップファイルは起動しました。';
-$lang['locfiledit_bak_loaded2'] = '復元するために、ファイルを保存する必要があります。';
-$lang['locfiledit_syntax_error'] = 'エラー! ファイルは保存できません。';
-$lang['locfiledit_new_tpl'] = '新しいファイルを作成する';
-$lang['locfiledit_new_filename'] = 'ファイル名';
-$lang['locfiledit_model'] = 'モデル';
-$lang['locfiledit_empty_page'] = '空のページ';
-$lang['locfiledit_parent_directory'] = '親ディレクトリー';
-$lang['locfiledit_filename_error'] = '入ってはいけない文字はファイル名にあります。';
-$lang['locfiledit_file_already_exists'] = 'ファイルは既に存在しています。';
-$lang['locfiledit_model_error'] = 'モデルを選択する必要があります。';
-$lang['locfiledit_empty_filename'] = 'ファイル名を記入する必要があります。';
-$lang['locfiledit_webmaster_only'] = 'ローカルファイルはウェブマスターのみ作成するか、変更できます。';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/ka_GE/description.txt b/plugins/LocalFilesEditor/language/ka_GE/description.txt
deleted file mode 100644
index 3dbf09e8c..000000000
--- a/plugins/LocalFilesEditor/language/ka_GE/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-ლოკალური ფაილების შეცვლა ადმინისტრაციული პანელიდან. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/ka_GE/index.php b/plugins/LocalFilesEditor/language/ka_GE/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/ka_GE/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/ka_GE/plugin.lang.php b/plugins/LocalFilesEditor/language/ka_GE/plugin.lang.php
deleted file mode 100644
index 8de794beb..000000000
--- a/plugins/LocalFilesEditor/language/ka_GE/plugin.lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'ლოკალური კონფიგურაცია';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'შაბლონები';
-$lang['locfiledit_onglet_lang'] = 'ენები';
-$lang['locfiledit_onglet_plug'] = 'პერსონალური პლაგინი';
-$lang['locfiledit_cant_save'] = 'ეს ფაილი არ არის ჩაწერის უფლებით. შეამოწმეთ დირექტორია "local/" არის თუ არა შესაბამისი (chmod)–ით.';
-$lang['locfiledit_newfile'] = 'ფაილი არ არსებობს და შეიქმნება LocalFiles რედაქტორის მიერ ';
-$lang['locfiledit_save_config'] = 'ფაილი წარმატებით წაიკითხა.';
-$lang['locfiledit_show_default'] = 'ვნახოთ გასასწორებელი ფაილი: ';
-$lang['locfiledit_save_bak'] = 'სარეზერვო ასლი შეიქმნა და შეინახა.';
-$lang['locfiledit_saved_bak'] = 'სარეზერვო ასლი შეიქმნა (%s) –ით';
-$lang['locfiledit_save_file'] = 'შევინახოთ ფაილი';
-$lang['locfiledit_choose_file'] = 'აირჩიეთ ფაილი რედაქტირებისათვის';
-$lang['locfiledit_edit'] = 'რედაქტირება';
-$lang['locfiledit_restore'] = 'სარეზერვო ფაილის აღდგენა';
-$lang['locfiledit_restore_confirm'] = 'გთხოვთ დაადასტუროთ?
-აღდგენა არ იქნება ეფექტური მომდევნო შენახვამდე.';
-$lang['locfiledit_bak_loaded1'] = 'სარეზერვო ფაილის ჩატვირთვა.';
-$lang['locfiledit_bak_loaded2'] = 'თქვენ უნდა შეინახოთ ფაილი, რომ აღდგინოთ.';
-$lang['locfiledit_syntax_error'] = 'სინტაქსური შეცდომა! ფაილი ვერ შეინახება.';
-$lang['locfiledit_new_tpl'] = 'შევქმნათ ახალი ფაილი';
-$lang['locfiledit_new_filename'] = 'ფაილის სახელი';
-$lang['locfiledit_model'] = 'მოდელი';
-$lang['locfiledit_empty_page'] = 'ცარიელი გვერდი';
-$lang['locfiledit_parent_directory'] = 'მშობლიური დირექტორია';
-$lang['locfiledit_filename_error'] = 'აკრძალული სიმბოლოები ფაილის სახელში.';
-$lang['locfiledit_file_already_exists'] = 'ფაილი უკვე არსებობს.';
-$lang['locfiledit_model_error'] = 'თქვენ უნდა აირჩიოთ მოდელი.';
-$lang['locfiledit_empty_filename'] = 'თქვენ უნდა შეავსოთ ფაილის სახელი.';
-$lang['locfiledit_webmaster_only'] = 'მხოლოდ ვებოსტატებს შეუძლიათ შექმნან ან გადააკეთონ ლოკალური ფაილები.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/km_KH/plugin.lang.php b/plugins/LocalFilesEditor/language/km_KH/plugin.lang.php
deleted file mode 100755
index 424852a41..000000000
--- a/plugins/LocalFilesEditor/language/km_KH/plugin.lang.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2015 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_cant_save'] = 'ឯកសារបច្ចុប្បន្នភាពមិនអាចសរសេរបាន។ ចូរពិនិត្យ​ប្រសិនបើថត "local/" អាចសរសេរបាន';
-$lang['locfiledit_choose_file'] = 'ជ្រើសឯកសារដែលត្រូវកែសម្រួល';
-$lang['locfiledit_bak_loaded2'] = 'អ្នកត្រូវតែរក្សាឯកសារដើម្បីស្តារវាឡើងវិញ'; \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/kn_IN/description.txt b/plugins/LocalFilesEditor/language/kn_IN/description.txt
deleted file mode 100755
index 3d9917657..000000000
--- a/plugins/LocalFilesEditor/language/kn_IN/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-ಸ್ಥಳೀಯ ಕಡತಗಳನ್ನು ನಿರ್ವಹಣಾ ಪ್ಯಾನೆಲ್ ನಿಂದ ಸಂಪಾದಿಸಿ. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/kn_IN/plugin.lang.php b/plugins/LocalFilesEditor/language/kn_IN/plugin.lang.php
deleted file mode 100755
index 1c26ccbee..000000000
--- a/plugins/LocalFilesEditor/language/kn_IN/plugin.lang.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_restore'] = 'ಕಡತವನ್ನು ಮರುಬಳಸಿ';
-$lang['locfiledit_restore_confirm'] = 'ದಯವಿಟ್ಟು ಖಾತ್ರಿಪಡಿಸಿ? ಮುಂದಿನ ಉಳಿಕೆಯವರೆಗೂ ಮರುಬಳಕೆ ಪರಿಣಮಕಾರಿಯಾಗಿರುವುದಿಲ್ಲ.';
-$lang['locfiledit_save_bak'] = 'ಬ್ಯಾಕ್ ಅಪ್ ಪ್ರತಿ ಉಳಿಸಿದ ನಂತರ ರಚನೆಯಾಗುತ್ತದೆ.';
-$lang['locfiledit_save_config'] = 'ಕಡತವನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಬರೆಯಲಾಗಿದೆ.';
-$lang['locfiledit_save_file'] = 'ಕಡತವನ್ನು ಉಳಿಸಿ';
-$lang['locfiledit_saved_bak'] = 'ಬ್ಯಾಕ್ ಅಪ್ ಪ್ರತಿ ರಚನೆಯಾಗಿದೆ(%s)';
-$lang['locfiledit_show_default'] = 'ಉಲ್ಲೇಖ ಕಡತವನ್ನು ಪ್ರದರ್ಶಿಸಿ.';
-$lang['locfiledit_syntax_error'] = 'ಪದ-ವಿನ್ಯಾಸ ದೋಷ! ಕಡತವನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ.';
-$lang['locfiledit_webmaster_only'] = 'ಕೇವಲ ವೆಬ್ ಮಾಸ್ಟರ್ ಗಳು ಮಾತ್ರ ಸ್ಥಳೀಯ ಕಡತಗಳನ್ನು ರಚಿಸಬಲ್ಲರು ಅಥವಾ ಬದಲಾಯಿಸಬಲ್ಲರು.';
-$lang['locfiledit_bak_loaded1'] = 'ಬ್ಯಾಕ್ ಅಪ್ ಕಡತವನ್ನು ತುಂಬಲಾಗಿದೆ.';
-$lang['locfiledit_bak_loaded2'] = 'ನೀವು ಮರುಬಳಸಲು ಕಡತವನ್ನು ಉಳಿಸಲೇಬೇಕು.';
-$lang['locfiledit_cant_save'] = 'ಪ್ರಸ್ತುತ ಕಡತ ಬರೆಯಬಲ್ಲುದಾಗಿಲ್ಲ. "local/" ಡೈರೆಕ್ಟರಿ ಬರೆಯಬಲ್ಲುದೇ ಎಂಬುದನ್ನು ಪರೀಕ್ಷಿಸಿ (chmod).';
-$lang['locfiledit_choose_file'] = 'ಸಂಪಾದನೆಗಾಗಿ ಕಡತವನ್ನು ಆರಿಸಿರಿ.';
-$lang['locfiledit_edit'] = 'ಸಂಪಾದನೆ';
-$lang['locfiledit_empty_filename'] = 'ನೀವು ಕಡತದ ಹೆಸರನ್ನು ನಮೂದಿಸಲೇಬೇಕು.';
-$lang['locfiledit_empty_page'] = 'ಖಾಲಿ ಪುಟ';
-$lang['locfiledit_file_already_exists'] = 'ಕಡತ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ.';
-$lang['locfiledit_filename_error'] = 'ನಿಷೇಧಿತ ಅಕ್ಷರಗಳು ಕಡತದ ಹೆಸರಿನಲ್ಲಿ ಇವೆ.';
-$lang['locfiledit_model'] = 'ನಮೂನೆ';
-$lang['locfiledit_model_error'] = 'ನೀವು ನಮೂನೆಯನ್ನು ಆರಿಸಲೇಬೇಕು.';
-$lang['locfiledit_new_filename'] = 'ಕಡತದ ಹೆಸರು';
-$lang['locfiledit_new_tpl'] = 'ಹೊಸ ಕಡತವನ್ನು ರಚಿಸಿ.';
-$lang['locfiledit_newfile'] = 'ಈ ಕೆಳಗೆ ಕೆಲವು ಮಾಹಿತಿಗಳನ್ನು ನಮೂದಿಸದ ಹೊರತು ಕಡತ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವುದಿಲ್ಲ. ಒಮ್ಮೆ ಮಾಹಿತಿ ನಮೂದಾಗಿ ಉಳಿಸಿದ ನಂತರ ಕಡತ ರಚನೆಯಾಗುತ್ತದೆ.';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'ಭಾಷೆಗಳು';
-$lang['locfiledit_onglet_localconf'] = 'ಲೋಕಲ್ ಕಾನ್ಫಿಗ್';
-$lang['locfiledit_onglet_plug'] = 'ವೈಯಕ್ತಿಕ ಪ್ಲಗ್ ಇನ್ ';
-$lang['locfiledit_onglet_tpl'] = 'ನಮೂನೆಗಳು';
-$lang['locfiledit_parent_directory'] = 'ಪೇರೆಂಟ್ ಡೈರೆಕ್ಟರಿ';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/lt_LT/description.txt b/plugins/LocalFilesEditor/language/lt_LT/description.txt
deleted file mode 100755
index f6e626ff0..000000000
--- a/plugins/LocalFilesEditor/language/lt_LT/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Redaguoti vietinius failus iš administracijos puslapio. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/lt_LT/plugin.lang.php b/plugins/LocalFilesEditor/language/lt_LT/plugin.lang.php
deleted file mode 100755
index 9a8402595..000000000
--- a/plugins/LocalFilesEditor/language/lt_LT/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_restore_confirm'] = 'Prašome patvirtinimo.
-Failo atstatymas nebus efektyvus kol nebus išsaugotas.';
-$lang['locfiledit_save_file'] = 'Išsaugoti failą';
-$lang['locfiledit_parent_directory'] = 'Pirminis katalogas';
-$lang['locfiledit_choose_file'] = 'Pasirinkite failą, kurį norite redaguoti';
-$lang['locfiledit_show_default'] = 'Parodyti pradinį failą: ';
-$lang['locfiledit_restore'] = 'Įkrauti atsarginę kopiją';
-$lang['locfiledit_save_bak'] = 'Atsarginė kopija bus sukurta tik išsaugant.';
-$lang['locfiledit_save_config'] = 'Failas sėkmingai įrašytas.';
-$lang['locfiledit_saved_bak'] = 'Atsarginė kopija sukurta (%s)';
-$lang['locfiledit_syntax_error'] = 'Sintaksės klaida! Neįmanoma įrašyti failo.';
-$lang['locfiledit_webmaster_only'] = 'Tik webmasteriai gali kurti ar modifikuoti vietinius failus.';
-$lang['locfiledit_bak_loaded1'] = 'Atsarginė kopija įkrauta.';
-$lang['locfiledit_bak_loaded2'] = 'Jūs turite išsaugoti failą, kad galėtumėte jį atstatyti.';
-$lang['locfiledit_cant_save'] = 'Šio failo neišeis išsaugoti. Pasitikrinkite ar į kataloga "local/" leidžiama rašyti (chmod).';
-$lang['locfiledit_edit'] = 'Redaguoti';
-$lang['locfiledit_empty_filename'] = 'Turite įvesti failo pavadinimą.';
-$lang['locfiledit_empty_page'] = 'Tuščias puslapis';
-$lang['locfiledit_file_already_exists'] = 'Toks failas jau egzistuoja.';
-$lang['locfiledit_filename_error'] = 'Draudžiami simboliai failo pavadinime.';
-$lang['locfiledit_model'] = 'Modelis';
-$lang['locfiledit_model_error'] = 'Turite pasirinkti modelį';
-$lang['locfiledit_new_filename'] = 'Failo pavadinimas';
-$lang['locfiledit_new_tpl'] = 'Sukurti naują failą';
-$lang['locfiledit_newfile'] = 'Failas neegzistuoja, kol neįvesta informacija žemiau. Kai tik ką nors įvesite ir išsaugosite, tuomet failas ir bus sukurtas.';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Kalbos';
-$lang['locfiledit_onglet_localconf'] = 'Vietinė konfigūracija';
-$lang['locfiledit_onglet_plug'] = 'Asmeninis priedas';
-$lang['locfiledit_onglet_tpl'] = 'Šablonai';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/lv_LV/description.txt b/plugins/LocalFilesEditor/language/lv_LV/description.txt
deleted file mode 100644
index 5ad412b3b..000000000
--- a/plugins/LocalFilesEditor/language/lv_LV/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Rediget lokalos failus no administratora panela. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/lv_LV/index.php b/plugins/LocalFilesEditor/language/lv_LV/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/lv_LV/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/lv_LV/plugin.lang.php b/plugins/LocalFilesEditor/language/lv_LV/plugin.lang.php
deleted file mode 100644
index 56f9affe4..000000000
--- a/plugins/LocalFilesEditor/language/lv_LV/plugin.lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Lokala konfiguracija';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Veidnes';
-$lang['locfiledit_onglet_lang'] = 'Valodas';
-$lang['locfiledit_onglet_plug'] = 'Personas spraudni';
-$lang['locfiledit_cant_save'] = ' Esošais fails nav ierakstams. Parbaudit vai mape "local/" ir ar rakstišanas tiesibam (chmod).';
-$lang['locfiledit_newfile'] = 'Fails neeksiste, tas tiks izveidots izmantojot LocalFiles Editor';
-$lang['locfiledit_save_config'] = ' Fails ierakstits sekmigi.';
-$lang['locfiledit_show_default'] = ' Paradit izvelnes failu: ';
-$lang['locfiledit_save_bak'] = ' Rezerves kopija tiks izveidota veicot saglabašanu.';
-$lang['locfiledit_saved_bak'] = 'Rezerves kopija izveidota par (%s)';
-$lang['locfiledit_save_file'] = ' Saglabat failu';
-$lang['locfiledit_choose_file'] = ' Izveleties failu ko rediget';
-$lang['locfiledit_edit'] = 'Rediget';
-$lang['locfiledit_restore'] = 'Atjaunot rezerves kopiju';
-$lang['locfiledit_restore_confirm'] = 'Ludzu apstprinat?
-Atjaunošana nebus iespejama lidz nakamai saglabašanai.';
-$lang['locfiledit_bak_loaded1'] = 'Rezerves kopija ieladeta.';
-$lang['locfiledit_bak_loaded2'] = 'Jums jasaglaba fails lai to atjaunotu.';
-$lang['locfiledit_syntax_error'] = 'Sintakses kluda! Failu nav iespejams saglabat.';
-$lang['locfiledit_new_tpl'] = 'Izveidot jaunu failu';
-$lang['locfiledit_new_filename'] = 'Faila nosaukums';
-$lang['locfiledit_model'] = 'Modelis';
-$lang['locfiledit_empty_page'] = 'Tukša lapa';
-$lang['locfiledit_parent_directory'] = 'Pamatmape';
-$lang['locfiledit_filename_error'] = 'Aizliegti simboli nosaukuma.';
-$lang['locfiledit_file_already_exists'] = 'Fails jau eksiste.';
-$lang['locfiledit_model_error'] = 'Jums jaizvelas modelis.';
-$lang['locfiledit_empty_filename'] = 'Jums jaieraksta faila nosaukums.';
-$lang['locfiledit_webmaster_only'] = 'Tikai webmasters var izveidot un modificet lokalos failus.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/mn_MN/description.txt b/plugins/LocalFilesEditor/language/mn_MN/description.txt
deleted file mode 100755
index 3e38763fa..000000000
--- a/plugins/LocalFilesEditor/language/mn_MN/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Удирдлагын талбараас тохиргооны файлуудыг засах. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/mn_MN/index.php b/plugins/LocalFilesEditor/language/mn_MN/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/LocalFilesEditor/language/mn_MN/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/mn_MN/plugin.lang.php b/plugins/LocalFilesEditor/language/mn_MN/plugin.lang.php
deleted file mode 100755
index 493e84b85..000000000
--- a/plugins/LocalFilesEditor/language/mn_MN/plugin.lang.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_cant_save'] = 'Тухайн файлд бичлэг хийх боломжгүй байна. "local/" хавтас өөрчлөлт хийх боломтой эсэхийг шалгана уу (chmod).';
-$lang['locfiledit_empty_page'] = 'Хуудсыг цэвэрлэх';
-$lang['locfiledit_show_default'] = 'Тайлбар файлыг харуулах:';
-$lang['locfiledit_onglet_plug'] = 'Нэмэлт өргөтгөл';
-$lang['locfiledit_save_bak'] = 'Хадгалах үед нөөц файл үүсэх болно.';
-$lang['locfiledit_parent_directory'] = 'Үндсэн хавтас';
-$lang['locfiledit_onglet_tpl'] = 'Эх загвар';
-$lang['locfiledit_onglet_localconf'] = 'Тохиргооны файл';
-$lang['locfiledit_filename_error'] = 'Файлын нэрэнд зөвшөөрөгдөөгүй тэмдэгт орсон байна.';
-$lang['locfiledit_webmaster_only'] = 'Файлыг зөвхөн вэбмастер үүсгэж, засах боломжтой.';
-$lang['locfiledit_restore'] = 'Нөөц файлаас сэргээх';
-$lang['locfiledit_saved_bak'] = 'Нөөц файлыг амжилттай үүсгэлээ (%s)';
-$lang['locfiledit_syntax_error'] = 'Бичлэгийн алдаа! Файлыг хадгалах боломжгүй.';
-$lang['locfiledit_file_already_exists'] = 'Ийм нэртэй файл байна.';
-$lang['locfiledit_save_config'] = 'Файлыг амжилттай хадгаллаа';
-$lang['locfiledit_save_file'] = 'Хадгалах';
-$lang['locfiledit_choose_file'] = 'Засах файлаа сонгоно уу';
-$lang['locfiledit_edit'] = 'Засах';
-$lang['locfiledit_empty_filename'] = 'Файлын нэрээ оруулна уу.';
-$lang['locfiledit_model'] = 'Загвар';
-$lang['locfiledit_model_error'] = 'Загвараа сонгоно уу';
-$lang['locfiledit_new_filename'] = 'Файлын нэр';
-$lang['locfiledit_new_tpl'] = 'Шинэ файл үүсгэх';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Хэл';
-$lang['locfiledit_newfile'] = 'Доорхи талбарт мэдээлэл оруулахаас нааш файл шинээр үүсэхгүй. Мэдээлэл оруулж хадгалсаны дараа файл шинээр үүсэх болно.';
-$lang['locfiledit_bak_loaded1'] = 'Нөөцийн файлыг сэргээлээ.';
-$lang['locfiledit_bak_loaded2'] = 'Нөөцөөс сэргээхийн тулд хадгалах хэрэгтэй.';
-$lang['locfiledit_restore_confirm'] = 'Та итгэлтэй байна уу? Хадгалах хүртэл сэргээлт идэвхжихгүй гэдгийг анхаарна уу.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/nb_NO/description.txt b/plugins/LocalFilesEditor/language/nb_NO/description.txt
deleted file mode 100644
index 80e3b9af3..000000000
--- a/plugins/LocalFilesEditor/language/nb_NO/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Rediger lokale filer fra administrasjons panelet. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/nb_NO/index.php b/plugins/LocalFilesEditor/language/nb_NO/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/nb_NO/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/nb_NO/plugin.lang.php b/plugins/LocalFilesEditor/language/nb_NO/plugin.lang.php
deleted file mode 100644
index 1d34947af..000000000
--- a/plugins/LocalFilesEditor/language/nb_NO/plugin.lang.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-$lang['locfiledit_onglet_localconf'] = 'Lokal konfigurasjon';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Maler (templates)';
-$lang['locfiledit_onglet_lang'] = 'Språk';
-$lang['locfiledit_onglet_plug'] = 'Personlig tilleggsprogram';
-$lang['locfiledit_cant_save'] = 'Gjeldende fil kan ikke skrives til. sjekk om mappen "local/" har skriverettigheter (chmod)(775).';
-$lang['locfiledit_newfile'] = 'Filen eksisterer ikke og vil bli laget av LocalFiles Editor';
-$lang['locfiledit_save_config'] = 'Fil er skrevet.';
-$lang['locfiledit_show_default'] = 'Vis referanse fil: ';
-$lang['locfiledit_save_bak'] = 'Sikkerhets kopi vil bli laget ved lagring.';
-$lang['locfiledit_saved_bak'] = 'Sikkerhetskopi er laget (%s)';
-$lang['locfiledit_save_file'] = 'Lagre fil';
-$lang['locfiledit_choose_file'] = 'Velg fil du vil redigering';
-$lang['locfiledit_edit'] = 'Rediger';
-$lang['locfiledit_restore'] = 'Gjennopprett sikkerhets kopi';
-$lang['locfiledit_restore_confirm'] = 'Vennligst bekreft? Gjennoppretting vil ikke gjøres før neste lagring.';
-$lang['locfiledit_bak_loaded1'] = 'Sikkerhetskopi lastet.';
-$lang['locfiledit_bak_loaded2'] = 'Du må lagre filen for å gjennopprette den.';
-$lang['locfiledit_syntax_error'] = 'Syntax feil! Filen kan ikke bli lagret.';
-$lang['locfiledit_new_tpl'] = 'Lag ny fil';
-$lang['locfiledit_new_filename'] = 'Fil navn';
-$lang['locfiledit_model'] = 'Modusl';
-$lang['locfiledit_empty_page'] = 'Tøm side';
-$lang['locfiledit_parent_directory'] = 'Underliggende mappe';
-$lang['locfiledit_filename_error'] = 'Forbudte tegn i filnavnet.';
-$lang['locfiledit_file_already_exists'] = 'Filen eksisterer allerede.';
-$lang['locfiledit_model_error'] = 'Du må velge en modell.';
-$lang['locfiledit_empty_filename'] = 'Du må fylle inn fil navnet.';
-$lang['locfiledit_webmaster_only'] = 'Kun webmaster kan lage eller endre lokale filer.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/nl_NL/description.txt b/plugins/LocalFilesEditor/language/nl_NL/description.txt
deleted file mode 100644
index dccc22ad9..000000000
--- a/plugins/LocalFilesEditor/language/nl_NL/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Wijzig lokale bestanden vanaf het administratie-scherm. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/nl_NL/index.php b/plugins/LocalFilesEditor/language/nl_NL/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/nl_NL/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/nl_NL/plugin.lang.php b/plugins/LocalFilesEditor/language/nl_NL/plugin.lang.php
deleted file mode 100644
index be25fedad..000000000
--- a/plugins/LocalFilesEditor/language/nl_NL/plugin.lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Lokale configuratie';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Templates';
-$lang['locfiledit_onglet_lang'] = 'Talen';
-$lang['locfiledit_onglet_plug'] = 'Persoonlijke Plugin';
-$lang['locfiledit_cant_save'] = 'Er kan niet naar het gebruikte bestand geschreven worden. Controleer of directory "local/" beschrijfbaar is (chmod).';
-$lang['locfiledit_newfile'] = 'Het bestand bestaat niet totdat er hieronder informatie wordt ingevoerd. Zodra informatie wordt ingevoerd en opgeslagen, wordt het bestand aangemaakt.';
-$lang['locfiledit_save_config'] = 'Bestand succesvol beschreven.';
-$lang['locfiledit_show_default'] = 'Geef het referentie-bestand weer: ';
-$lang['locfiledit_save_bak'] = 'Bij het opslaan wordt een backup-bestand aangemaakt.';
-$lang['locfiledit_saved_bak'] = 'Backup-bestand aangemaakt (%s)';
-$lang['locfiledit_save_file'] = 'Opslaan bestand';
-$lang['locfiledit_choose_file'] = 'Kies het te wijzigen bestand';
-$lang['locfiledit_edit'] = 'Wijzig';
-$lang['locfiledit_restore'] = 'Restore het backup-bestand';
-$lang['locfiledit_restore_confirm'] = 'Aub bevestigen?
-Restore wordt pas effectief bij de volgende keer opslaan.';
-$lang['locfiledit_bak_loaded1'] = 'Backup-bestand geladen.';
-$lang['locfiledit_bak_loaded2'] = 'U moet het bestand opslaan om te kunnen restoren.';
-$lang['locfiledit_syntax_error'] = 'Syntax-fout! Bestand kan niet opgeslagen worden.';
-$lang['locfiledit_new_tpl'] = 'Maak nieuw bestand aan';
-$lang['locfiledit_new_filename'] = 'Bestandsnaam';
-$lang['locfiledit_model'] = 'Model';
-$lang['locfiledit_empty_page'] = 'Lege pagina';
-$lang['locfiledit_parent_directory'] = 'Bovenliggende directory';
-$lang['locfiledit_filename_error'] = 'Niet toegestane tekens in bestandsnaam.';
-$lang['locfiledit_file_already_exists'] = 'Bestand bestaat reeds.';
-$lang['locfiledit_model_error'] = 'U moet een model kiezen.';
-$lang['locfiledit_empty_filename'] = 'U moet een bestandsnaam opgeven.';
-$lang['locfiledit_webmaster_only'] = 'Alleen webbeheerders kunnen lokale bestanden aanmaken of wijzigen.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/nn_NO/description.txt b/plugins/LocalFilesEditor/language/nn_NO/description.txt
deleted file mode 100755
index f09a8d791..000000000
--- a/plugins/LocalFilesEditor/language/nn_NO/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Endre lokale filer frå administrasjonspanelet. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/nn_NO/plugin.lang.php b/plugins/LocalFilesEditor/language/nn_NO/plugin.lang.php
deleted file mode 100755
index 7f0cb5cb0..000000000
--- a/plugins/LocalFilesEditor/language/nn_NO/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_restore'] = 'Gjenopprett frå sikringskopi';
-$lang['locfiledit_restore_confirm'] = 'Bekreft?
-Gjennoppretting vil ikkje trå i kraft før neste lagring.';
-$lang['locfiledit_save_bak'] = 'Sikringskopi vil bli oppretta ved lagring.';
-$lang['locfiledit_save_config'] = 'Fila vart lagra.';
-$lang['locfiledit_save_file'] = 'Lagre fil';
-$lang['locfiledit_saved_bak'] = 'Sikringskopi oppretta (%s)';
-$lang['locfiledit_show_default'] = 'Vis referansefil';
-$lang['locfiledit_syntax_error'] = 'Syntaksfeil! Fila kan ikkje lagrast.';
-$lang['locfiledit_webmaster_only'] = 'Bare webmaster kan opprette eller lagre lokale filer.';
-$lang['locfiledit_bak_loaded1'] = 'Reservekopifil er lasta opp';
-$lang['locfiledit_bak_loaded2'] = 'Du må fyrst lagre fila før du kan gjenopprette den.';
-$lang['locfiledit_cant_save'] = 'Gjeldande fil er ikkje skrivbar. Sjekk at katalogen "local/" er skrivbar (chmod)';
-$lang['locfiledit_choose_file'] = 'Velg fil som skal endrast';
-$lang['locfiledit_edit'] = 'Endre';
-$lang['locfiledit_empty_filename'] = 'Du må skrive inn filnamnet';
-$lang['locfiledit_empty_page'] = 'Tom side';
-$lang['locfiledit_file_already_exists'] = 'Fila finst allerie.';
-$lang['locfiledit_filename_error'] = 'Forbode tegn i filnamn.';
-$lang['locfiledit_model'] = 'Modell/mal';
-$lang['locfiledit_model_error'] = 'Du må velge ein model/mal';
-$lang['locfiledit_new_filename'] = 'Filnamn';
-$lang['locfiledit_new_tpl'] = 'Lag ny fil';
-$lang['locfiledit_newfile'] = 'Fila eksisterer ikkje før det er skrive inn noko innhald under. Straks informasjon er skrive inn og lagra, vil fila bli oppretta.';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Språk';
-$lang['locfiledit_onglet_localconf'] = 'Lokal konfigurasjon';
-$lang['locfiledit_onglet_plug'] = 'Personleg tilleggsprogram';
-$lang['locfiledit_onglet_tpl'] = 'Malar';
-$lang['locfiledit_parent_directory'] = 'Foreldrekatalog';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/pl_PL/description.txt b/plugins/LocalFilesEditor/language/pl_PL/description.txt
deleted file mode 100644
index 325c35115..000000000
--- a/plugins/LocalFilesEditor/language/pl_PL/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Edycja plików lokalnych z panelu administratora \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/pl_PL/index.php b/plugins/LocalFilesEditor/language/pl_PL/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/pl_PL/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/pl_PL/plugin.lang.php b/plugins/LocalFilesEditor/language/pl_PL/plugin.lang.php
deleted file mode 100644
index 52afb425c..000000000
--- a/plugins/LocalFilesEditor/language/pl_PL/plugin.lang.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Konfiguracja lokalna';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Szablony';
-$lang['locfiledit_onglet_lang'] = 'Języki';
-$lang['locfiledit_onglet_plug'] = 'Wtyczki własne';
-$lang['locfiledit_cant_save'] = 'W pliku nie można zapisywać zmian. Sprawdź czy katalog "local/" jest zapisywalny (chmod).';
-$lang['locfiledit_newfile'] = 'Plik nie powstanie dopóki niżej nie zostanie coś wpisane.Po uzupełnieniu wymaganych informacji plik zostanie utworzony.';
-$lang['locfiledit_save_config'] = 'Plik został zapisany pomyślnie.';
-$lang['locfiledit_show_default'] = 'Pokaż plik referencyjny: ';
-$lang['locfiledit_save_bak'] = 'Kopia zapasowa zostanie utworzona podczas zapisywania zmian.';
-$lang['locfiledit_saved_bak'] = 'Plik kopii zapasowej utworzony (%s)';
-$lang['locfiledit_save_file'] = 'Zapisz plik';
-$lang['locfiledit_choose_file'] = 'Wybierz plik do edycji';
-$lang['locfiledit_edit'] = 'Edytuj';
-$lang['locfiledit_restore'] = 'Przywróć plik z kopii zapasowej';
-$lang['locfiledit_restore_confirm'] = 'Potwierdź proszę?
-Przywrócenie nie przyniesie efektu do następnego zapisu.';
-$lang['locfiledit_bak_loaded1'] = 'Plik kopii zapasowej wczytany.';
-$lang['locfiledit_bak_loaded2'] = 'Musisz zapisać plik aby go przywrócić.';
-$lang['locfiledit_syntax_error'] = 'Błąd skłądni! Plik nie może zostać zapisany.';
-$lang['locfiledit_new_tpl'] = 'Stwórz nowy plik';
-$lang['locfiledit_new_filename'] = 'Nazwa pliku';
-$lang['locfiledit_model'] = 'Model';
-$lang['locfiledit_empty_page'] = 'Pusta strona';
-$lang['locfiledit_parent_directory'] = 'Katalog nadrzędny';
-$lang['locfiledit_filename_error'] = 'Nazwa pliku zawiera niedozwolone znaki.';
-$lang['locfiledit_file_already_exists'] = 'Plik już istnieje.';
-$lang['locfiledit_model_error'] = 'Musisz wybrać model.';
-$lang['locfiledit_empty_filename'] = 'Musisz wpisać nazwę pliku.';
-$lang['locfiledit_webmaster_only'] = 'Only webmasters can create or modify local files.';
-$lang['locfiledit_webmaster_only'] = 'Tylko administrator może tworzyć i modyfikować pliki lokalne.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/pt_BR/description.txt b/plugins/LocalFilesEditor/language/pt_BR/description.txt
deleted file mode 100755
index 4de225593..000000000
--- a/plugins/LocalFilesEditor/language/pt_BR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Edite arquivos locais do painel de administração. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/pt_BR/index.php b/plugins/LocalFilesEditor/language/pt_BR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/LocalFilesEditor/language/pt_BR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/pt_BR/plugin.lang.php b/plugins/LocalFilesEditor/language/pt_BR/plugin.lang.php
deleted file mode 100755
index 3e782713f..000000000
--- a/plugins/LocalFilesEditor/language/pt_BR/plugin.lang.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_bak_loaded1'] = 'Faça cópia do arquivo baixado.';
-$lang['locfiledit_bak_loaded2'] = 'Você deve salvar o arquivo para restaurá-lo.';
-$lang['locfiledit_cant_save'] = 'O arquivo atual não tem permissão de escrita. Verifique se o diretório "local/" tem permissão de escrita (chmod).';
-$lang['locfiledit_choose_file'] = 'Escolha o arquivo a ser editado';
-$lang['locfiledit_edit'] = 'Edite';
-$lang['locfiledit_empty_filename'] = 'Você deve entrar com o nome do arquivo.';
-$lang['locfiledit_empty_page'] = 'Página vazia';
-$lang['locfiledit_file_already_exists'] = 'O arquivo já existe.';
-$lang['locfiledit_filename_error'] = 'Caracteres não permitidos no nome do arquivo.';
-$lang['locfiledit_model_error'] = 'Você deve escolher um modelo.';
-$lang['locfiledit_model'] = 'Modelo';
-$lang['locfiledit_new_filename'] = 'Nome do arquivo';
-$lang['locfiledit_new_tpl'] = 'Cria novo arquivo';
-$lang['locfiledit_newfile'] = 'O arquivo não existe e será criado pelo Editor Local de Arquivos.';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Idiomas';
-$lang['locfiledit_onglet_localconf'] = 'Configuração local';
-$lang['locfiledit_onglet_plug'] = 'Plugin Pessoal';
-$lang['locfiledit_onglet_tpl'] = 'Templates';
-$lang['locfiledit_parent_directory'] = 'Pasta pai';
-$lang['locfiledit_restore_confirm'] = 'Confirme por favor? A restauração não será efetiva até o próximo salvar.';
-$lang['locfiledit_restore'] = 'Restaura a cópia de segurança';
-$lang['locfiledit_save_bak'] = 'Cópia de segurança será criada ao salvar.';
-$lang['locfiledit_save_config'] = 'Arquivo gravado com sucesso.';
-$lang['locfiledit_save_file'] = 'Salvar arquivo';
-$lang['locfiledit_saved_bak'] = 'Cópia de segurança criada (%s)';
-$lang['locfiledit_show_default'] = 'Mostre o arquivo de referência:';
-$lang['locfiledit_syntax_error'] = 'Erro de sintaxe! O arquivo não pode ser salvo.';
-$lang['locfiledit_webmaster_only'] = 'Somente webmasters podem criar ou modificar arquivos locais.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/pt_PT/description.txt b/plugins/LocalFilesEditor/language/pt_PT/description.txt
deleted file mode 100644
index cce485cdb..000000000
--- a/plugins/LocalFilesEditor/language/pt_PT/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Editar ficheiros locais a partir do Painel Administrativo de Piwigo. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/pt_PT/index.php b/plugins/LocalFilesEditor/language/pt_PT/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/pt_PT/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/pt_PT/plugin.lang.php b/plugins/LocalFilesEditor/language/pt_PT/plugin.lang.php
deleted file mode 100644
index 4de22760f..000000000
--- a/plugins/LocalFilesEditor/language/pt_PT/plugin.lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Configuração Local';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Modelos';
-$lang['locfiledit_onglet_lang'] = 'Idiomas';
-$lang['locfiledit_onglet_plug'] = 'Extensão Pessoal';
-$lang['locfiledit_cant_save'] = 'O arquivo actual não tem permissões de escrita. Confirme que a pasta "local/" tem permissões de escrita (chmod).';
-$lang['locfiledit_newfile'] = 'O arquivo não existe e irá ser criado pelo Editor LocalFiles';
-$lang['locfiledit_save_config'] = 'Arquivo escrito com sucesso.';
-$lang['locfiledit_show_default'] = 'Mostrar arquivo de referência: ';
-$lang['locfiledit_save_bak'] = 'Cópia de segurança será guardada quando clicar em Salvar arquivo.';
-$lang['locfiledit_saved_bak'] = 'Cópia de segurança criada (%s)';
-$lang['locfiledit_save_file'] = 'Salvar arquivo';
-$lang['locfiledit_choose_file'] = 'Escolha o arquivo a ser editado';
-$lang['locfiledit_edit'] = 'Editar';
-$lang['locfiledit_restore'] = 'Restaure a cópia de segurança';
-$lang['locfiledit_restore_confirm'] = 'Por favor confirme?
-O Restauro não será efectivo até o Salvar.';
-$lang['locfiledit_bak_loaded1'] = 'Arquivo de cópia de segurança carregado.';
-$lang['locfiledit_bak_loaded2'] = 'Deverá salvar o arquivo para o restaurar.';
-$lang['locfiledit_syntax_error'] = 'Erro de sintaxe! Impossível salvar arquivo.';
-$lang['locfiledit_new_tpl'] = 'Criar novo arquivo';
-$lang['locfiledit_new_filename'] = 'Nome do arquivo';
-$lang['locfiledit_model'] = 'Modelo';
-$lang['locfiledit_empty_page'] = 'Página Vazia';
-$lang['locfiledit_parent_directory'] = 'Diretório Mãe';
-$lang['locfiledit_filename_error'] = 'Caracteres proibidos no nome do arquivo.';
-$lang['locfiledit_file_already_exists'] = 'O arquivo já existe.';
-$lang['locfiledit_model_error'] = 'Tem que escolher um Modelo.';
-$lang['locfiledit_empty_filename'] = 'Tem que preencher o Nome do arquivo.';
-$lang['locfiledit_webmaster_only'] = 'Apenas webmasters podem criar ou modificar arquivos locais.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/ro_RO/description.txt b/plugins/LocalFilesEditor/language/ro_RO/description.txt
deleted file mode 100755
index a35a896d4..000000000
--- a/plugins/LocalFilesEditor/language/ro_RO/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Modifică fișierele locale din panoul de administrare. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/ro_RO/plugin.lang.php b/plugins/LocalFilesEditor/language/ro_RO/plugin.lang.php
deleted file mode 100755
index e9fb6ad13..000000000
--- a/plugins/LocalFilesEditor/language/ro_RO/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_cant_save'] = 'Fișerul curent nu poate fi scris. Cerifică dacă dosarul "local/" poate fi scris (chmod).';
-$lang['locfiledit_parent_directory'] = 'Dosarul părinte';
-$lang['locfiledit_restore_confirm'] = 'Confirmă.
-Restaurarea nu va intra în efect până la urmatoarea salvare.';
-$lang['locfiledit_bak_loaded1'] = 'Copia de siguranță a fost încărcată.';
-$lang['locfiledit_restore'] = 'Restaurează copia de siguranță';
-$lang['locfiledit_save_bak'] = 'Copia de siguranță va fi creată odată cu salvarea.';
-$lang['locfiledit_saved_bak'] = 'Copia de siguranță a fost creată (%s)';
-$lang['locfiledit_webmaster_only'] = 'Numai webmasterii pot crea sau modifica fișiere locale.';
-$lang['locfiledit_new_tpl'] = 'Crează un fișier nou';
-$lang['locfiledit_bak_loaded2'] = 'Trebuie să salvezi un fișier pentru a-l restaura.';
-$lang['locfiledit_newfile'] = 'Acest fișier nu va exista pănâ cand nu vei introduce informațiile de mai jos. Odată ce informația va fi introdusă și salvată, fișierul va fi creat.';
-$lang['locfiledit_onglet_plug'] = 'Plugin personal';
-$lang['locfiledit_choose_file'] = 'Alege fișierul de modificat';
-$lang['locfiledit_edit'] = 'Modifică';
-$lang['locfiledit_empty_filename'] = 'Trebuie să introduci numele fișierului.';
-$lang['locfiledit_empty_page'] = 'Pagină goală';
-$lang['locfiledit_file_already_exists'] = 'Fișierul există deja';
-$lang['locfiledit_filename_error'] = 'Caractere interzise în numele fișierului.';
-$lang['locfiledit_model'] = 'Model';
-$lang['locfiledit_model_error'] = 'Trebuie să alegi un model';
-$lang['locfiledit_new_filename'] = 'Numele fișierului';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Limbi';
-$lang['locfiledit_onglet_localconf'] = 'Configurație locală';
-$lang['locfiledit_onglet_tpl'] = 'Șabloane';
-$lang['locfiledit_save_config'] = 'Fișierul a fost scris cu succes.';
-$lang['locfiledit_save_file'] = 'Salvează fișier';
-$lang['locfiledit_show_default'] = 'Arată fișierul de referințăȘ';
-$lang['locfiledit_syntax_error'] = 'Eroare de sintaxă! Fișierul nu poate fi salvat.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/ru_RU/description.txt b/plugins/LocalFilesEditor/language/ru_RU/description.txt
deleted file mode 100644
index cb0317730..000000000
--- a/plugins/LocalFilesEditor/language/ru_RU/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Позволяет редактировать локальные файлы из панели администрирования. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/ru_RU/index.php b/plugins/LocalFilesEditor/language/ru_RU/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/ru_RU/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/ru_RU/plugin.lang.php b/plugins/LocalFilesEditor/language/ru_RU/plugin.lang.php
deleted file mode 100644
index 942bd6b68..000000000
--- a/plugins/LocalFilesEditor/language/ru_RU/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Локальные настройки';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Шаблоны';
-$lang['locfiledit_onglet_lang'] = 'Языки';
-$lang['locfiledit_onglet_plug'] = 'Личный плагин';
-$lang['locfiledit_cant_save'] = 'Текущий файл не может быть записан. Проверьте, имеются ли права записи в директории "local/" (chmod).';
-$lang['locfiledit_newfile'] = 'Файл не существует и будет создан LocalFilesEditor';
-$lang['locfiledit_save_config'] = 'Файл записан успешно';
-$lang['locfiledit_show_default'] = 'Показать исходный файл: ';
-$lang['locfiledit_save_bak'] = 'Резервная копия файла будет создана при сохранении.';
-$lang['locfiledit_saved_bak'] = 'Резервный файл создан (%s)';
-$lang['locfiledit_save_file'] = 'Сохранить файл';
-$lang['locfiledit_choose_file'] = 'Выберите файл для редактирования';
-$lang['locfiledit_edit'] = 'Редактировать';
-$lang['locfiledit_restore'] = 'Восстановить резервный файл';
-$lang['locfiledit_restore_confirm'] = 'Пожалуйста, подтвердите действие. Восстановленный файл не будет активен до тех пор, пока не будет сохранен.';
-$lang['locfiledit_bak_loaded1'] = 'Резервный файл загружен.';
-$lang['locfiledit_bak_loaded2'] = 'Вы должны сохранить файл, чтобы восстановить его.';
-$lang['locfiledit_syntax_error'] = 'Синтаксическая ошибка! Невозможно сохранить файл.';
-$lang['locfiledit_new_tpl'] = 'Создать новый файл';
-$lang['locfiledit_new_filename'] = 'Имя файла';
-$lang['locfiledit_model'] = 'Модель';
-$lang['locfiledit_empty_page'] = 'Очистить страницу';
-$lang['locfiledit_parent_directory'] = 'Родительская директория';
-$lang['locfiledit_filename_error'] = 'Запрещенные символы в имени файла.';
-$lang['locfiledit_file_already_exists'] = 'Файл уже существует.';
-$lang['locfiledit_model_error'] = 'Выберите модель.';
-$lang['locfiledit_empty_filename'] = 'Заполните поле "Имя файла".';
-$lang['locfiledit_webmaster_only'] = 'Только вэбмастеры могут создавать или редактировать локальные файлы.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/sh_RS/description.txt b/plugins/LocalFilesEditor/language/sh_RS/description.txt
deleted file mode 100755
index 676daaad6..000000000
--- a/plugins/LocalFilesEditor/language/sh_RS/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Uredite lokalne fajlove iz administratorskog panela. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/sh_RS/plugin.lang.php b/plugins/LocalFilesEditor/language/sh_RS/plugin.lang.php
deleted file mode 100755
index 23925ffeb..000000000
--- a/plugins/LocalFilesEditor/language/sh_RS/plugin.lang.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_bak_loaded1'] = 'Rezervni fajl učitan.';
-$lang['locfiledit_bak_loaded2'] = 'Morate sačuvati fajl da bi ste ga vratili.';
-$lang['locfiledit_cant_save'] = 'Trenutni fajl nije upisiv. Proverite da li je moguće pisanje u direktorijumu "local/" (chmod).';
-$lang['locfiledit_choose_file'] = 'Odaberite fajl koji će biti uređivan';
-$lang['locfiledit_edit'] = 'Uredi';
-$lang['locfiledit_empty_filename'] = 'Morate popuniti naziv fajla.';
-$lang['locfiledit_empty_page'] = 'Prazna strana';
-$lang['locfiledit_filename_error'] = 'Zabranjeni karakter u nazivu fajla.';
-$lang['locfiledit_file_already_exists'] = 'Fajl već postoji.';
-$lang['locfiledit_model'] = 'Model';
-$lang['locfiledit_model_error'] = 'Morate odabrati model.';
-$lang['locfiledit_newfile'] = 'Fajl ne postoji i biće kreiran od strane LocalFiles editora';
-$lang['locfiledit_new_filename'] = 'Naziv fajla';
-$lang['locfiledit_new_tpl'] = 'Kreiraj novi fajl';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Jezici';
-$lang['locfiledit_onglet_localconf'] = 'Lokalno podešavanje';
-$lang['locfiledit_onglet_plug'] = 'Lični dodatak';
-$lang['locfiledit_onglet_tpl'] = 'Šabloni';
-$lang['locfiledit_parent_directory'] = 'Nadređeni direktorijum';
-$lang['locfiledit_restore'] = 'Vrati rezervni fajl';
-$lang['locfiledit_restore_confirm'] = 'Molim potvrdite? Vraćanje neće imati efekta do sledećeg snimanja.';
-$lang['locfiledit_saved_bak'] = 'Rezervan kopija fajla kreirana (%s)';
-$lang['locfiledit_save_bak'] = 'Rezervna kopija biće kreirana prilikom snimanja.';
-$lang['locfiledit_save_config'] = 'Fajl upisan uspešno.';
-$lang['locfiledit_save_file'] = 'Snimi fajl';
-$lang['locfiledit_show_default'] = 'Prikaži referentni fajl:';
-$lang['locfiledit_syntax_error'] = 'Sintaksna greška! Fajl ne može biti sačuvan.';
-$lang['locfiledit_webmaster_only'] = 'Samo webmasteri mogu kreirati ili modifikovati lokalne fajlove.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/sk_SK/description.txt b/plugins/LocalFilesEditor/language/sk_SK/description.txt
deleted file mode 100644
index 4cad4ae5b..000000000
--- a/plugins/LocalFilesEditor/language/sk_SK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Editácia lokálnych súborov z panelu administrátora. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/sk_SK/index.php b/plugins/LocalFilesEditor/language/sk_SK/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/sk_SK/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/sk_SK/plugin.lang.php b/plugins/LocalFilesEditor/language/sk_SK/plugin.lang.php
deleted file mode 100644
index 9b9852ca8..000000000
--- a/plugins/LocalFilesEditor/language/sk_SK/plugin.lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Lokálna konfigurácia';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Šablóny';
-$lang['locfiledit_onglet_lang'] = 'Jazyky';
-$lang['locfiledit_onglet_plug'] = 'Osobný Plugin';
-$lang['locfiledit_cant_save'] = 'Súčasný súbor nie je zapisovateľný. Skontrolujte, či adresár "local/" je zapisovateľný (chmod).';
-$lang['locfiledit_newfile'] = 'Súbor neexistuje a bude vytvorený pomocou LocalFiles Editor';
-$lang['locfiledit_save_config'] = 'Súbor bol úspešne zapísaný.';
-$lang['locfiledit_show_default'] = 'Zobraziť referenčný súbor: ';
-$lang['locfiledit_save_bak'] = 'Záložná kópia bude vytvorená pri uložení.';
-$lang['locfiledit_saved_bak'] = 'Vytvorený záložný súbor (%s)';
-$lang['locfiledit_save_file'] = 'Uložiť súbor';
-$lang['locfiledit_choose_file'] = 'Vybrať súbor na editovanie';
-$lang['locfiledit_edit'] = 'Editovať';
-$lang['locfiledit_restore'] = 'Obnoviť záložný súbor';
-$lang['locfiledit_restore_confirm'] = 'Prosím potvrdíte?
-Obnova nebude účinná pokiaľ neuložíte.';
-$lang['locfiledit_bak_loaded1'] = 'Záložný súbor nahraný.';
-$lang['locfiledit_bak_loaded2'] = 'Musíte uložiť súbor na jeho obnovenie.';
-$lang['locfiledit_syntax_error'] = 'Syntaktický chyba! Súbor nemôže byť uložený.';
-$lang['locfiledit_new_tpl'] = 'Vytvorenie nového súboru';
-$lang['locfiledit_new_filename'] = 'Meno súboru';
-$lang['locfiledit_model'] = 'Model';
-$lang['locfiledit_empty_page'] = 'Prázdna strana';
-$lang['locfiledit_parent_directory'] = 'Domovský adresár';
-$lang['locfiledit_filename_error'] = 'Nepovolené znaky v názve súboru.';
-$lang['locfiledit_file_already_exists'] = 'Súbor už existuje.';
-$lang['locfiledit_model_error'] = 'Musíte vybrať model.';
-$lang['locfiledit_empty_filename'] = 'Musíte zadať meno súboru.';
-$lang['locfiledit_webmaster_only'] = 'Len webmasteri môžu vytvoriť alebo modifikovať lokálne súbory.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/sl_SI/description.txt b/plugins/LocalFilesEditor/language/sl_SI/description.txt
deleted file mode 100755
index 5202d65e1..000000000
--- a/plugins/LocalFilesEditor/language/sl_SI/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Urejanje lokalnih datotek iz administratorske plošče \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/sl_SI/plugin.lang.php b/plugins/LocalFilesEditor/language/sl_SI/plugin.lang.php
deleted file mode 100755
index e3ce11457..000000000
--- a/plugins/LocalFilesEditor/language/sl_SI/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_restore'] = 'Obnovi varnostno datoteko';
-$lang['locfiledit_restore_confirm'] = 'Prosimo potrdite?
-Obnovitev ne bo v veljavi do naslednje shranitve.';
-$lang['locfiledit_save_bak'] = 'Varnostna kopija bo ustvarjena ob shranitvi.';
-$lang['locfiledit_save_config'] = 'Datoteka je bila uspešno zapisana.';
-$lang['locfiledit_save_file'] = 'Shrani datoteko';
-$lang['locfiledit_saved_bak'] = 'Varnostna kopija ustvarjena (%s)';
-$lang['locfiledit_show_default'] = 'Prikaži referenčno datoteko:';
-$lang['locfiledit_syntax_error'] = 'Napaka v sintaksi. Datoteke se ne da shraniti.';
-$lang['locfiledit_webmaster_only'] = 'Lokalne datoteke lahko ustvari ali spreminja le skrbnik.';
-$lang['locfiledit_bak_loaded1'] = 'Varnostna datoteka naložena';
-$lang['locfiledit_bak_loaded2'] = 'Datoteko morate shraniti pred obnovitvijo';
-$lang['locfiledit_cant_save'] = 'Trenutna datoteka ni zapisljiva. Preverite, če je direktorij "local/" zapisljiv (chmod)';
-$lang['locfiledit_choose_file'] = 'Izberite datoteko za urejanje';
-$lang['locfiledit_edit'] = 'Uredi';
-$lang['locfiledit_empty_filename'] = 'Vpisati morate ime datoteke';
-$lang['locfiledit_empty_page'] = 'Prazna stran';
-$lang['locfiledit_file_already_exists'] = 'Datoteka že obstaja';
-$lang['locfiledit_filename_error'] = 'Prepovedani znaki v imenu datoteke';
-$lang['locfiledit_model'] = 'Model';
-$lang['locfiledit_model_error'] = 'Izbrati morate model';
-$lang['locfiledit_new_filename'] = 'Ime datoteke';
-$lang['locfiledit_new_tpl'] = 'Ustvari novo datoteko';
-$lang['locfiledit_newfile'] = 'Datoteka ne obstaja dokler spodaj ne vnesete nekaj informacij. Ko so informacije vnesene in shranjene bo datoteka kreirana.';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = 'Jeziki';
-$lang['locfiledit_onglet_localconf'] = 'Local config';
-$lang['locfiledit_onglet_plug'] = 'Osebni vtičnik';
-$lang['locfiledit_onglet_tpl'] = 'Predloge';
-$lang['locfiledit_parent_directory'] = 'Nadrejeni direktorij';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/sr_RS/description.txt b/plugins/LocalFilesEditor/language/sr_RS/description.txt
deleted file mode 100644
index 1d852f0e2..000000000
--- a/plugins/LocalFilesEditor/language/sr_RS/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Уреди локалне датотеке преко администрационе странице. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/sr_RS/index.php b/plugins/LocalFilesEditor/language/sr_RS/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/sr_RS/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/sr_RS/plugin.lang.php b/plugins/LocalFilesEditor/language/sr_RS/plugin.lang.php
deleted file mode 100644
index 858166d88..000000000
--- a/plugins/LocalFilesEditor/language/sr_RS/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Лична подешавања';
-$lang['locfiledit_onglet_css'] = 'css датотека';
-$lang['locfiledit_onglet_tpl'] = 'Шаблон';
-$lang['locfiledit_onglet_lang'] = 'Језици';
-$lang['locfiledit_onglet_plug'] = 'Лични додатак';
-$lang['locfiledit_cant_save'] = 'Тренутна датотека није записана. Проверите да ли је директоријум "local/" има дозволу за упис (chmod).';
-$lang['locfiledit_newfile'] = 'Датотека не постоји и биће направљена програмом LocalFiles Editor';
-$lang['locfiledit_save_config'] = 'Датотека је успешно записана.';
-$lang['locfiledit_show_default'] = 'Прикажи подразумевану датотеку: ';
-$lang['locfiledit_save_bak'] = 'Резервна копија ће бити направљена приликом снимања.';
-$lang['locfiledit_saved_bak'] = 'Резервна копија је направљена (%s)';
-$lang['locfiledit_save_file'] = 'Запамти датотеку';
-$lang['locfiledit_choose_file'] = 'Изабери датотеку за уређивање';
-$lang['locfiledit_edit'] = 'Измени';
-$lang['locfiledit_restore'] = 'Обнови резервну копију датотеке';
-$lang['locfiledit_restore_confirm'] = 'Молимо Вас да потврдите? Обнављање ће бити важеће после снимања.';
-$lang['locfiledit_bak_loaded1'] = 'Резервна копија је учитана.';
-$lang['locfiledit_bak_loaded2'] = 'Морате да запамтите датотеку пре обнављања.';
-$lang['locfiledit_syntax_error'] = 'Синтаксна грешка! Датотека не може бити снимљена.';
-$lang['locfiledit_new_tpl'] = 'Направи нову датотеку';
-$lang['locfiledit_new_filename'] = 'Име датотеке';
-$lang['locfiledit_model'] = 'Модел';
-$lang['locfiledit_empty_page'] = 'Празна страница';
-$lang['locfiledit_parent_directory'] = 'Надређени директоријум';
-$lang['locfiledit_filename_error'] = 'Забрањени знаци у називу датотеке.';
-$lang['locfiledit_file_already_exists'] = 'Датотека већ постоји.';
-$lang['locfiledit_model_error'] = 'Морате изабрати модел.';
-$lang['locfiledit_empty_filename'] = 'Морате уписати име датотеке.';
-$lang['locfiledit_webmaster_only'] = 'Само уредник интернет страница може да направи или уреди локалне датотеке.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/sv_SE/description.txt b/plugins/LocalFilesEditor/language/sv_SE/description.txt
deleted file mode 100644
index 286b6ae97..000000000
--- a/plugins/LocalFilesEditor/language/sv_SE/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Ändra lokala filer från administrationspanelen. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/sv_SE/index.php b/plugins/LocalFilesEditor/language/sv_SE/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/sv_SE/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/sv_SE/plugin.lang.php b/plugins/LocalFilesEditor/language/sv_SE/plugin.lang.php
deleted file mode 100644
index 695c1e3f5..000000000
--- a/plugins/LocalFilesEditor/language/sv_SE/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Lokal konfiguration';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Teman';
-$lang['locfiledit_onglet_lang'] = 'Språk';
-$lang['locfiledit_onglet_plug'] = 'Personligt Plugin';
-$lang['locfiledit_cant_save'] = 'Det går inte att skriva till aktuell fil. Kontrollera att mappen "local/" är skrivbar (chmod).';
-$lang['locfiledit_newfile'] = 'Filen existerar inte så den kommer att skapas av LocalFiles Editor';
-$lang['locfiledit_save_config'] = 'Filen skrevs med framgång.';
-$lang['locfiledit_show_default'] = 'Visa referens fil: ';
-$lang['locfiledit_save_bak'] = 'En säkerhetskopia kommer skapas när du sparar.';
-$lang['locfiledit_saved_bak'] = 'Säkerhetskopia skapad (%s)';
-$lang['locfiledit_save_file'] = 'Spara fil';
-$lang['locfiledit_choose_file'] = 'Välj fil add ändra';
-$lang['locfiledit_edit'] = 'Ändra';
-$lang['locfiledit_restore'] = 'Återställ säkerhetskopia';
-$lang['locfiledit_restore_confirm'] = 'Vänligen bekräfta? Återställning kommer inte fungera till nästa gång.';
-$lang['locfiledit_bak_loaded1'] = 'Säkerhetskopia laddad.';
-$lang['locfiledit_bak_loaded2'] = 'Du måste spara filen för att återställa den.';
-$lang['locfiledit_syntax_error'] = 'Syntax fel! Filen kan inte sparas.';
-$lang['locfiledit_new_tpl'] = 'Skapa ny fil';
-$lang['locfiledit_new_filename'] = 'Fil namn';
-$lang['locfiledit_model'] = 'Modell';
-$lang['locfiledit_empty_page'] = 'Töm sida';
-$lang['locfiledit_parent_directory'] = 'Nuvarande katalog';
-$lang['locfiledit_filename_error'] = 'Förbjudna symboler i filnamnet.';
-$lang['locfiledit_file_already_exists'] = 'Filen existerar redan.';
-$lang['locfiledit_model_error'] = 'Du måste välja en modell.';
-$lang['locfiledit_empty_filename'] = 'Du måste välja ett filnamn.';
-$lang['locfiledit_webmaster_only'] = 'Endast webmasters kan skapa eller ändra lokala filer.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/ta_IN/description.txt b/plugins/LocalFilesEditor/language/ta_IN/description.txt
deleted file mode 100755
index 9f127aed1..000000000
--- a/plugins/LocalFilesEditor/language/ta_IN/description.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-உள்ளமை கோப்புகளை திருத்த
-நிர்வாகத்தின் பலகத்தில்.
-
diff --git a/plugins/LocalFilesEditor/language/ta_IN/plugin.lang.php b/plugins/LocalFilesEditor/language/ta_IN/plugin.lang.php
deleted file mode 100755
index 57571e8c9..000000000
--- a/plugins/LocalFilesEditor/language/ta_IN/plugin.lang.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_file_already_exists'] = 'கோப்பு ஏற்கனவே உள்ளது.';
-$lang['locfiledit_edit'] = 'திருத்துக';
-$lang['locfiledit_empty_filename'] = 'நீங்கள் கோப்பின் பெயரை உள்ளிட வேண்டும்.';
-$lang['locfiledit_empty_page'] = 'வெற்று பக்கம்';
-$lang['locfiledit_choose_file'] = 'திருத்த வேண்டும் என்ற கோப்பினை தேர்வுசெய்க
-';
-$lang['locfiledit_bak_loaded1'] = 'மறுபிரதி கோப்பு ஏற்றப்படும்.';
-$lang['locfiledit_bak_loaded2'] = 'அதை மீட்க கோப்பு சேமிக்க வேண்டும்.';
-$lang['locfiledit_cant_save'] = 'தற்போதைய கோப்பு எழுதக்கூடிய அல்ல. கோப்பகம் "local/" எழுதக்கூடிய (chmod) என்று சரிபார்க்கவும்.';
-$lang['locfiledit_onglet_lang'] = 'மொழிகள்';
-$lang['locfiledit_onglet_localconf'] = 'உள் கட்டமைப்பு';
-$lang['locfiledit_onglet_plug'] = 'தனிப்பட்ட செருகுநிரல்';
-$lang['locfiledit_onglet_tpl'] = 'வார்ப்புருக்கள்';
-$lang['locfiledit_filename_error'] = 'கோப்பு பெயர் எழுத்துக்கள் தடை.';
-$lang['locfiledit_model'] = 'மாதிரி';
-$lang['locfiledit_model_error'] = 'நீங்கள் ஒரு மாதிரி தேர்வு செய்ய வேண்டும்.';
-$lang['locfiledit_new_filename'] = 'கோப்பு பெயர்';
-$lang['locfiledit_new_tpl'] = 'புதிய கோப்பு உருவாக்க';
-$lang['locfiledit_save_config'] = 'கோப்பு வெற்றிகரமாக எழுதப்பட்டது.';
-$lang['locfiledit_save_file'] = 'கோப்பை இவ்வாறு சேமி';
-$lang['locfiledit_restore'] = 'கோப்பினை மீட்க மறுபிரதி';
-$lang['locfiledit_newfile'] = 'சில தகவல்கள் உள்ளிட்ட வரையில் கோப்பு இல்லை கீழே.
-ஒருமுறை தகவல்களை உள்ளிட்ட மற்றும் சேமிக்க
-கோப்பு உருவாக்கப்படும்.';
-$lang['locfiledit_parent_directory'] = 'மூல அடைவு';
-$lang['locfiledit_onglet_css'] = 'css';
-$lang['locfiledit_webmaster_only'] = 'வலைத்தலைமைகள் மட்டுமே ,உருவாக்க அல்லது உள் கோப்புகளை மாற்ற முடியும்.';
-$lang['locfiledit_syntax_error'] = 'தொடரியல் பிழை! கோப்பு சேமிக்க முடியாது ';
-$lang['locfiledit_show_default'] = 'காண்பி குறிப்பு கோப்பு:';
-$lang['locfiledit_saved_bak'] = 'காப்பு கோப்பு உருவாக்கப்பட்டது (%s).';
-$lang['locfiledit_restore_confirm'] = 'தயவுசெய்து உறுதிப்படுத்தவும்?
-அடுத்து சேமிக்கும் வரை பயனுள்ளதாக இருக்க முடியாது மீட்டெடு.';
-$lang['locfiledit_save_bak'] = 'மறுபிரதி நகல் சேமிக்க செய்தபோது உருவாக்கப்பட்டது'; \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/th_TH/description.txt b/plugins/LocalFilesEditor/language/th_TH/description.txt
deleted file mode 100644
index 4dc67868f..000000000
--- a/plugins/LocalFilesEditor/language/th_TH/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-แก้ไขไฟล์ภายใน ต่างๆ บนหน้าการจัดการระบบ. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/th_TH/index.php b/plugins/LocalFilesEditor/language/th_TH/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/th_TH/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/th_TH/plugin.lang.php b/plugins/LocalFilesEditor/language/th_TH/plugin.lang.php
deleted file mode 100644
index 6659f1fee..000000000
--- a/plugins/LocalFilesEditor/language/th_TH/plugin.lang.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'ไฟล์การตั้งค่าพื้นฐาน';
-$lang['locfiledit_onglet_css'] = 'ไฟล์ CSS';
-$lang['locfiledit_onglet_tpl'] = 'ไฟล์ แม่แบบ';
-$lang['locfiledit_onglet_lang'] = 'ไฟล์ ภาษา';
-$lang['locfiledit_onglet_plug'] = 'ไฟล์ ปลั๊กอิน';
-$lang['locfiledit_cant_save'] = 'ไฟล์ปัจจุบันไม่สามารถเขียนได้. โปรดตรวจสอบสิทธิ์การเข้าถึงไดเรกทอรี่ "local/" ว่ามันสามารถเขียนได้ (โดยการปรับค่า chmod เป็นค่า 777).';
-$lang['locfiledit_newfile'] = 'ไฟล์ไม่มีอยู่ และมันจะถูกสร้างโดย LocalFiles Editor';
-$lang['locfiledit_save_config'] = 'การเขียนไฟล์เสร็จสมบูรณ์.';
-$lang['locfiledit_show_default'] = 'แสดงไฟล์อ้างอิง: ';
-$lang['locfiledit_save_bak'] = 'คัดลอก สำรองไฟล์ที่จะสร้างเมื่อบันทึก.';
-$lang['locfiledit_saved_bak'] = 'สำรองไฟล์และสร้าง (%s)';
-$lang['locfiledit_save_file'] = 'บันทึกไฟล์';
-$lang['locfiledit_choose_file'] = 'เลือกไฟล์เพื่อทำการแก้ไข';
-$lang['locfiledit_edit'] = 'แก้ไข';
-$lang['locfiledit_restore'] = 'คืนค่าการสำรองไฟล์';
-$lang['locfiledit_restore_confirm'] = 'กรุณายืนยัน?
-การคืนค่าจะยังไม่มีผล จนกว่าจะบันทึกเสร็จเรียบร้อย.';
-$lang['locfiledit_bak_loaded1'] = 'ไฟล์สำรองได้ย้ายแล้ว.';
-$lang['locfiledit_bak_loaded2'] = 'คุณจะต้องบันทึกไฟล์เพื่อทำการคืนค่า.';
-$lang['locfiledit_syntax_error'] = 'ประโยคผิดพลาด! ไฟล์ไม่สามารถบันทึกได้.';
-$lang['locfiledit_new_tpl'] = 'สร้างไฟล์ใหม่';
-$lang['locfiledit_new_filename'] = 'ชื่อไฟล์';
-$lang['locfiledit_model'] = 'แบบ';
-$lang['locfiledit_empty_page'] = 'หน้าเปล่า';
-$lang['locfiledit_parent_directory'] = 'ไดเรกทอรี่พื้นฐาน';
-$lang['locfiledit_filename_error'] = 'ตัวอักขระถูกห้ามในการตั้งเป็นชื่อไฟล์.';
-$lang['locfiledit_file_already_exists'] = 'ไฟล์นี้มีอยู่แล้ว.';
-$lang['locfiledit_model_error'] = 'คุณจะต้องเลือกแบบ.';
-$lang['locfiledit_empty_filename'] = 'คุณจะต้องกรอกชื่อไฟล์.';
-$lang['locfiledit_webmaster_only'] = 'สำหรับเว็บมาสเตอร์เท่านั้นที่สามารถสร้างหรือแก้ไขปรับแต่งไฟล์การตั้งค่าพื้นฐานได้.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/tr_TR/description.txt b/plugins/LocalFilesEditor/language/tr_TR/description.txt
deleted file mode 100755
index 60a9e570f..000000000
--- a/plugins/LocalFilesEditor/language/tr_TR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Yerel dosyaları yönetici panelinden düzenleyin. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/tr_TR/index.php b/plugins/LocalFilesEditor/language/tr_TR/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/tr_TR/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/tr_TR/plugin.lang.php b/plugins/LocalFilesEditor/language/tr_TR/plugin.lang.php
deleted file mode 100644
index af35b6211..000000000
--- a/plugins/LocalFilesEditor/language/tr_TR/plugin.lang.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Yerel yapılandırma';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Şablonlar';
-$lang['locfiledit_onglet_lang'] = 'Diller';
-$lang['locfiledit_onglet_plug'] = 'Kişisel Eklenti';
-$lang['locfiledit_cant_save'] = 'Seçili dosyanın yazılabilirlik izni yok. Lütfen "local/" klasörünü yazılabilir (chmod) olup olmadığını kontrol ediniz.';
-$lang['locfiledit_newfile'] = 'Aşağıya bazı bilgiler girilmeden dosya yaratılmaz.
-Bilgiler girilip kaydedildikten sonra dosya yaratılacaktır.';
-$lang['locfiledit_save_config'] = 'Dosya başarıyla yazıldı.';
-$lang['locfiledit_show_default'] = 'Referans dosyasını göster: ';
-$lang['locfiledit_save_bak'] = 'Yedekleme kopyası kaydedilirken yaratılacak.';
-$lang['locfiledit_saved_bak'] = 'Yedekleme dosyası yaratıldı (%s)';
-$lang['locfiledit_save_file'] = 'Dosyayı kaydet';
-$lang['locfiledit_choose_file'] = 'Düzenlenecek dosyayı seçiniz';
-$lang['locfiledit_edit'] = 'Düzenle';
-$lang['locfiledit_restore'] = 'Yedekleme dosyasını geri yükle';
-$lang['locfiledit_restore_confirm'] = 'Lütfen onaylayınız?
-Bir sonraki kaydetmeye kadar geri yükleme etkin olmayacak.';
-$lang['locfiledit_bak_loaded1'] = 'Yedekleme dosyası yüklendi.';
-$lang['locfiledit_bak_loaded2'] = 'Geri yüklemek için dosyayı kaydetmeniz gerekir.';
-$lang['locfiledit_syntax_error'] = 'Sözdizimi (syntax) hatası! Dosya kaydedilemiyor.';
-$lang['locfiledit_new_tpl'] = 'Yeni dosya yarat';
-$lang['locfiledit_new_filename'] = 'Dosya adı';
-$lang['locfiledit_model'] = 'Model';
-$lang['locfiledit_empty_page'] = 'Boş sayfa';
-$lang['locfiledit_parent_directory'] = 'Üst dizin';
-$lang['locfiledit_filename_error'] = 'Dosya adında yasaklanmış karakterler var.';
-$lang['locfiledit_file_already_exists'] = 'Bu dosya zaten var.';
-$lang['locfiledit_model_error'] = 'Bir model seçmelisiniz.';
-$lang['locfiledit_empty_filename'] = 'Dosya ismini girmelisiniz.';
-$lang['locfiledit_webmaster_only'] = 'Sadece yöneticiler yerel dosyaları yaratabilir veya değiştirebilir.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/uk_UA/description.txt b/plugins/LocalFilesEditor/language/uk_UA/description.txt
deleted file mode 100644
index e29c47387..000000000
--- a/plugins/LocalFilesEditor/language/uk_UA/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Редагування локальних файлів з ​​панелі адміністрування. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/uk_UA/plugin.lang.php b/plugins/LocalFilesEditor/language/uk_UA/plugin.lang.php
deleted file mode 100644
index 10a585992..000000000
--- a/plugins/LocalFilesEditor/language/uk_UA/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_bak_loaded1'] = 'Резервна копія файлу завантажена.';
-$lang['locfiledit_bak_loaded2'] = 'Ви повинні зберегти файл, щоб відновити його.';
-$lang['locfiledit_cant_save'] = 'Поточний файл не доступний для запису. Переконайтеся, що каталог "local/" доступний для запису (CHMOD).';
-$lang['locfiledit_choose_file'] = 'Виберіть файл для редагування';
-$lang['locfiledit_edit'] = 'Редагувати';
-$lang['locfiledit_empty_filename'] = 'Ви повинні заповнити ім\'я файлу.';
-$lang['locfiledit_empty_page'] = 'Порожня сторінка';
-$lang['locfiledit_filename_error'] = 'Заборонені символи в імені файлу.';
-$lang['locfiledit_file_already_exists'] = 'Файл вже існує.';
-$lang['locfiledit_model'] = 'Модель';
-$lang['locfiledit_model_error'] = 'Ви повинні вибрати модель.';
-$lang['locfiledit_newfile'] = 'Файл не існують і будуть створено через LocalFiles Editor';
-$lang['locfiledit_new_filename'] = 'Назва файлу';
-$lang['locfiledit_new_tpl'] = 'Створити новий файл';
-$lang['locfiledit_onglet_css'] = 'Стилі';
-$lang['locfiledit_onglet_lang'] = 'Мови';
-$lang['locfiledit_onglet_localconf'] = 'Локальна конфігурація';
-$lang['locfiledit_onglet_plug'] = 'Персональні плаґіни';
-$lang['locfiledit_onglet_tpl'] = 'Шаблони';
-$lang['locfiledit_parent_directory'] = 'Батьківська тека';
-$lang['locfiledit_restore'] = 'Відновлення файлу резервної копії';
-$lang['locfiledit_restore_confirm'] = 'Будь ласка, підтвердіть?
-Відновлення не буде ефективним до наступного збереження.';
-$lang['locfiledit_saved_bak'] = 'Резервне копіювання створеного файлу (%s)';
-$lang['locfiledit_save_bak'] = 'Резервна копія створюється при збереженні.';
-$lang['locfiledit_save_config'] = 'Файл успішно записаний.';
-$lang['locfiledit_save_file'] = 'Зберегти файл';
-$lang['locfiledit_show_default'] = 'Показати посилання на файл:';
-$lang['locfiledit_syntax_error'] = 'Синтаксична помилка! Файл не може бути збережений.';
-$lang['locfiledit_webmaster_only'] = 'Тільки веб-майстри можуть створювати або змінювати локальні файли.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/vi_VN/description.txt b/plugins/LocalFilesEditor/language/vi_VN/description.txt
deleted file mode 100644
index 1d7f7454e..000000000
--- a/plugins/LocalFilesEditor/language/vi_VN/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Chỉnh sửa những tệp tin trên máy từ bảng điều khiển Quản trị viên. \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/vi_VN/index.php b/plugins/LocalFilesEditor/language/vi_VN/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/vi_VN/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/vi_VN/plugin.lang.php b/plugins/LocalFilesEditor/language/vi_VN/plugin.lang.php
deleted file mode 100644
index 514c9ae06..000000000
--- a/plugins/LocalFilesEditor/language/vi_VN/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = 'Cấu hình cục bộ';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = 'Templates';
-$lang['locfiledit_onglet_lang'] = 'Ngôn ngữ';
-$lang['locfiledit_onglet_plug'] = 'Plugin cá nhân';
-$lang['locfiledit_cant_save'] = 'Tệp tin hiện tại không được phép ghi. Kiểm tra nếu thư mục "local/" có thể ghi được (chmod).';
-$lang['locfiledit_newfile'] = 'Tệp tin không tồn tại và sẽ được tạo ra bởi LocalFiles Editor';
-$lang['locfiledit_save_config'] = 'Tệp tin đã được ghi thành công.';
-$lang['locfiledit_show_default'] = 'Hiển thị tệp tin tham khảo: ';
-$lang['locfiledit_save_bak'] = 'Bản sao backup sẽ được tạo ra để dự phòng.';
-$lang['locfiledit_saved_bak'] = 'Tệp tin backup file được tạo ra (%s)';
-$lang['locfiledit_save_file'] = 'Lưu tệp tin';
-$lang['locfiledit_choose_file'] = 'Chọn tệp tin để hiệu chỉnh';
-$lang['locfiledit_edit'] = 'Hiệu chỉnh';
-$lang['locfiledit_restore'] = 'Phục hồi tệp tin backup';
-$lang['locfiledit_restore_confirm'] = 'Vui lòng xác nhận? Việc phục hồi sẽ không có hiệu lực cho đến lần dự phòng tiếp theo.';
-$lang['locfiledit_bak_loaded1'] = 'Tệp tin backup đã được nạp.';
-$lang['locfiledit_bak_loaded2'] = 'Bạn phải lưu lại tệp tin để phục hồi nó.';
-$lang['locfiledit_syntax_error'] = 'Lỗi cú pháp! Tệp tin không thể được lưu.';
-$lang['locfiledit_new_tpl'] = 'Tạo tệp tin mới';
-$lang['locfiledit_new_filename'] = 'Tên tệp tin';
-$lang['locfiledit_model'] = 'Mô hình';
-$lang['locfiledit_empty_page'] = 'Trang trống';
-$lang['locfiledit_parent_directory'] = 'Thư mục gốc';
-$lang['locfiledit_filename_error'] = 'Ký tự bị cấm trong tên tệp tin.';
-$lang['locfiledit_file_already_exists'] = 'Tệp tin đã có.';
-$lang['locfiledit_model_error'] = 'Bạn phải chọn một mô hình.';
-$lang['locfiledit_empty_filename'] = 'Bạn phải điền đủ tên tệp tin.';
-$lang['locfiledit_webmaster_only'] = 'Chỉ có webmasters mới có thể tạo hoặc biên tập tệp tin trên máy.';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/zh_CN/description.txt b/plugins/LocalFilesEditor/language/zh_CN/description.txt
deleted file mode 100644
index 8eb6a7dce..000000000
--- a/plugins/LocalFilesEditor/language/zh_CN/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-通过管理员面板编辑本地文件。 \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/zh_CN/index.php b/plugins/LocalFilesEditor/language/zh_CN/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/zh_CN/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/zh_CN/plugin.lang.php b/plugins/LocalFilesEditor/language/zh_CN/plugin.lang.php
deleted file mode 100644
index ae3b4568e..000000000
--- a/plugins/LocalFilesEditor/language/zh_CN/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = '本地配置';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = '模板';
-$lang['locfiledit_onglet_lang'] = '语言';
-$lang['locfiledit_onglet_plug'] = '个人插件';
-$lang['locfiledit_cant_save'] = '当前文件不可写入。请检查 "local/" 是否可写 (chmod)。';
-$lang['locfiledit_newfile'] = '下面的一些信息如不填写,文件将不能创建。信息填写并保存后,文件将被创建。';
-$lang['locfiledit_save_config'] = '文件写入成功。';
-$lang['locfiledit_show_default'] = '显示相关文件:';
-$lang['locfiledit_save_bak'] = '备份副本将在保存时被创建。';
-$lang['locfiledit_saved_bak'] = '备份文件已创建 (%s)';
-$lang['locfiledit_save_file'] = '保存文件';
-$lang['locfiledit_choose_file'] = '选择要编辑的文件';
-$lang['locfiledit_edit'] = '编辑';
-$lang['locfiledit_restore'] = '恢复备份文件';
-$lang['locfiledit_restore_confirm'] = '确认?恢复在下一次保存前将不会生效。';
-$lang['locfiledit_bak_loaded1'] = '备份文件已加载。';
-$lang['locfiledit_bak_loaded2'] = '您必须保存文件以便将其恢复。';
-$lang['locfiledit_syntax_error'] = '语法错误!文件不能被保存。';
-$lang['locfiledit_new_tpl'] = '创建新文件';
-$lang['locfiledit_new_filename'] = '文件名';
-$lang['locfiledit_model'] = '模块';
-$lang['locfiledit_empty_page'] = '空页面';
-$lang['locfiledit_parent_directory'] = '父目录';
-$lang['locfiledit_filename_error'] = '文件名不合法。';
-$lang['locfiledit_file_already_exists'] = '文件已存在。';
-$lang['locfiledit_model_error'] = '您必须选择一个模块。';
-$lang['locfiledit_empty_filename'] = '您必须填写文件名。';
-$lang['locfiledit_webmaster_only'] = '只有站长才能创建或修改本地文件。';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/zh_HK/description.txt b/plugins/LocalFilesEditor/language/zh_HK/description.txt
deleted file mode 100755
index 513365a9f..000000000
--- a/plugins/LocalFilesEditor/language/zh_HK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-在管理面板編輯本地檔案。 \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/zh_HK/plugin.lang.php b/plugins/LocalFilesEditor/language/zh_HK/plugin.lang.php
deleted file mode 100755
index c60a8b493..000000000
--- a/plugins/LocalFilesEditor/language/zh_HK/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['locfiledit_restore'] = '將備份檔案還原';
-$lang['locfiledit_restore_confirm'] = '請確定?
-還原將不會有效,直到有下一個儲存。';
-$lang['locfiledit_save_bak'] = '儲存時會建立備份副本。';
-$lang['locfiledit_save_config'] = '檔案成功地寫入。';
-$lang['locfiledit_save_file'] = '儲存檔案';
-$lang['locfiledit_saved_bak'] = '建立的備份檔案(%s)';
-$lang['locfiledit_show_default'] = '顯示參照檔案:';
-$lang['locfiledit_syntax_error'] = '語法錯誤!無法儲存檔案。';
-$lang['locfiledit_webmaster_only'] = '只有網站管理員可以建立或修改本地檔案。';
-$lang['locfiledit_bak_loaded1'] = '載入備份文件。';
-$lang['locfiledit_bak_loaded2'] = '您必須儲存檔案來還原它。';
-$lang['locfiledit_cant_save'] = '檔案是無法寫入。檢查目錄"local/"有寫入權限(chmod)。';
-$lang['locfiledit_choose_file'] = '選擇要編輯的檔案';
-$lang['locfiledit_edit'] = '編輯';
-$lang['locfiledit_empty_filename'] = '您必須輸入檔案名稱。';
-$lang['locfiledit_empty_page'] = '空頁';
-$lang['locfiledit_file_already_exists'] = '檔案已存在。';
-$lang['locfiledit_filename_error'] = '檔案名有禁止的字符。';
-$lang['locfiledit_model'] = '模式';
-$lang['locfiledit_model_error'] = '你必須選擇一種模式。';
-$lang['locfiledit_new_filename'] = '檔案名稱';
-$lang['locfiledit_new_tpl'] = '建立新的檔案';
-$lang['locfiledit_newfile'] = '該檔案不存在,直到輸入一些信息。信息一旦輸入並保存,該文件將被創建。';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_lang'] = '語言';
-$lang['locfiledit_onglet_localconf'] = '本地設定';
-$lang['locfiledit_onglet_plug'] = '個人插件';
-$lang['locfiledit_onglet_tpl'] = '範本';
-$lang['locfiledit_parent_directory'] = '父目錄';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/zh_TW/description.txt b/plugins/LocalFilesEditor/language/zh_TW/description.txt
deleted file mode 100644
index 6f11920ba..000000000
--- a/plugins/LocalFilesEditor/language/zh_TW/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-從管理者控制台編輯本地文件 \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/language/zh_TW/index.php b/plugins/LocalFilesEditor/language/zh_TW/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/LocalFilesEditor/language/zh_TW/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/LocalFilesEditor/language/zh_TW/plugin.lang.php b/plugins/LocalFilesEditor/language/zh_TW/plugin.lang.php
deleted file mode 100644
index fa5fd70a8..000000000
--- a/plugins/LocalFilesEditor/language/zh_TW/plugin.lang.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['locfiledit_onglet_localconf'] = '本地配置';
-$lang['locfiledit_onglet_css'] = 'CSS';
-$lang['locfiledit_onglet_tpl'] = '樣本';
-$lang['locfiledit_onglet_lang'] = '語言';
-$lang['locfiledit_onglet_plug'] = '個人插件';
-$lang['locfiledit_cant_save'] = '當前的文件不能寫入。請確認 "local/" 目錄是可寫入的 (chmod)。';
-$lang['locfiledit_newfile'] = '檔案不存在,將由本地文件編輯器重新創建。';
-$lang['locfiledit_save_config'] = '檔案已成功寫入';
-$lang['locfiledit_show_default'] = '顯示參考文件: ';
-$lang['locfiledit_save_bak'] = '備份副本將被建立並儲存';
-$lang['locfiledit_saved_bak'] = '備份文件已建立 (%s) ';
-$lang['locfiledit_save_file'] = '存檔';
-$lang['locfiledit_choose_file'] = '選擇需編輯的檔案';
-$lang['locfiledit_edit'] = '編輯';
-$lang['locfiledit_restore'] = '還原備份檔案';
-$lang['locfiledit_restore_confirm'] = '請確認?下次儲存時,還原才會生效。';
-$lang['locfiledit_bak_loaded1'] = '備份文件已載入';
-$lang['locfiledit_bak_loaded2'] = '你必須儲存文件才能把它還原';
-$lang['locfiledit_syntax_error'] = '語法錯誤!檔案無法儲存';
-$lang['locfiledit_new_tpl'] = '創建新的檔案';
-$lang['locfiledit_new_filename'] = '檔案名稱';
-$lang['locfiledit_model'] = '模式';
-$lang['locfiledit_empty_page'] = '空白頁';
-$lang['locfiledit_parent_directory'] = '父目錄';
-$lang['locfiledit_filename_error'] = '檔案名稱中有禁用字符';
-$lang['locfiledit_file_already_exists'] = '檔案已存在';
-$lang['locfiledit_model_error'] = '你必須選擇模式';
-$lang['locfiledit_empty_filename'] = '你必須輸入檔名';
-$lang['locfiledit_webmaster_only'] = '只有網頁管理員才能建立或修改本地文件';
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/main.inc.php b/plugins/LocalFilesEditor/main.inc.php
deleted file mode 100644
index ad7f95ead..000000000
--- a/plugins/LocalFilesEditor/main.inc.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-/*
-Plugin Name: LocalFiles Editor
-Version: 2.7.1
-Description: Edit local files from administration panel
-Plugin URI: http://piwigo.org/ext/extension_view.php?eid=144
-Author: Piwigo team
-Author URI: http://piwigo.org
-*/
-
-if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
-define('LOCALEDIT_PATH' , PHPWG_PLUGINS_PATH . basename(dirname(__FILE__)) . '/');
-
-function localfiles_admin_menu($menu)
-{
- $menu[] = array(
- 'NAME' => 'LocalFiles Editor',
- 'URL' => get_root_url().'admin.php?page=plugin-'.basename(dirname(__FILE__))
- );
-
- return $menu;
-}
-
-function localfiles_css_link()
-{
- global $template;
-
- $template->set_prefilter('themes', 'localfiles_css_link_prefilter');
-}
-
-function localfiles_css_link_prefilter($content, &$smarty)
-{
- $search = '#{if isset\(\$theme.admin_uri\)}.*?{/if}#s';
- $replacement = '
-{if isset($theme.admin_uri)}
- <br><a href="{$theme.admin_uri}" class="tiptip" title="{\'Configuration\'|@translate}">{\'Configuration\'|@translate}</a>
- | <a href="admin.php?page=plugin-LocalFilesEditor-css&amp;theme={$theme.id}">CSS</a>
-{else}
- <br><a href="admin.php?page=plugin-LocalFilesEditor-css&amp;theme={$theme.id}">CSS</a>
-{/if}
-';
-
- return preg_replace($search, $replacement, $content);
-}
-
-add_event_handler('get_admin_plugin_menu_links', 'localfiles_admin_menu');
-add_event_handler('loc_begin_admin', 'localfiles_css_link');
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/show_default.php b/plugins/LocalFilesEditor/show_default.php
deleted file mode 100644
index d688ddb76..000000000
--- a/plugins/LocalFilesEditor/show_default.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-define('PHPWG_ROOT_PATH', '../../');
-define('IN_ADMIN', true);
-include_once(PHPWG_ROOT_PATH . 'include/common.inc.php');
-include_once(LOCALEDIT_PATH.'include/functions.inc.php');
-load_language('plugin.lang', LOCALEDIT_PATH);
-check_status(ACCESS_ADMINISTRATOR);
-
-if (isset($_GET['file']))
-{
- $path = $_GET['file'];
- if (!is_admin() or (!substr_count($path, 'config_default.inc.php') and !substr_count($path, '.lang.php')))
- {
- die('Hacking attempt!');
- }
-
- $template->set_filename('show_default', dirname(__FILE__) . '/template/show_default.tpl');
-
- $file = file_get_contents(PHPWG_ROOT_PATH . $path);
- $title = str_replace('/', ' / ', $path);
-
- $template->assign(array(
- 'TITLE' => $title,
- 'DEFAULT_CONTENT' => $file,
- )
- );
-
- $page['body_id'] = 'thePopuphelpPage';
-
- include(PHPWG_ROOT_PATH.'include/page_header.php');
-
- $template->pparse('show_default');
-
- include(PHPWG_ROOT_PATH.'include/page_tail.php');
-}
-
-?> \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/template/admin.tpl b/plugins/LocalFilesEditor/template/admin.tpl
deleted file mode 100644
index d79d00028..000000000
--- a/plugins/LocalFilesEditor/template/admin.tpl
+++ /dev/null
@@ -1,113 +0,0 @@
-{combine_script id="codemirror" path="plugins/LocalFilesEditor/codemirror/lib/codemirror.js"}
-{combine_script id="codemirror.xml" require="codemirror" path="plugins/LocalFilesEditor/codemirror/mode/xml/xml.js"}
-{combine_script id="codemirror.javascript" require="codemirror" path="plugins/LocalFilesEditor/codemirror/mode/javascript/javascript.js"}
-{combine_script id="codemirror.css" require="codemirror" path="plugins/LocalFilesEditor/codemirror/mode/css/css.js"}
-{combine_script id="codemirror.clike" require="codemirror" path="plugins/LocalFilesEditor/codemirror/mode/clike/clike.js"}
-{combine_script id="codemirror.htmlmixed" require="codemirror.xml,codemirror.javascript,codemirror.css" path="plugins/LocalFilesEditor/codemirror/mode/htmlmixed/htmlmixed.js"}
-{combine_script id="codemirror.php" require="codemirror.xml,codemirror.javascript,codemirror.css,codemirror.clike" path="plugins/LocalFilesEditor/codemirror/mode/php/php.js"}
-
-{combine_css path="plugins/LocalFilesEditor/codemirror/lib/codemirror.css"}
-{combine_css path="plugins/LocalFilesEditor/codemirror/mode/xml/xml.css"}
-{combine_css path="plugins/LocalFilesEditor/codemirror/mode/javascript/javascript.css"}
-{combine_css path="plugins/LocalFilesEditor/codemirror/mode/css/css.css"}
-{combine_css path="plugins/LocalFilesEditor/codemirror/mode/clike/clike.css"}
-{combine_css path="plugins/LocalFilesEditor/template/locfiledit.css"}
-
-{footer_script}
-if (document.getElementById("text") != null)
- var editor = CodeMirror.fromTextArea(document.getElementById("text"), {ldelim}
- matchBrackets: true,
- mode: "{$CODEMIRROR_MODE}",
- tabMode: "shift"
- });
-{/footer_script}
-
-<div class="titrePage">
- <h2>LocalFiles Editor</h2>
-</div>
-
-<form method="post" class="properties" action="{$F_ACTION}" ENCTYPE="multipart/form-data" name="form">
-<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
-
-<div id="LocalFilesEditor">
-
-{if isset($theme)}
-<input type="hidden" value="{$theme}" name="theme">
-{/if}
-
-{if isset($language)}
-<input type="hidden" value="{$language}" name="language">
-{/if}
-
-{if isset($template)}
-<input type="hidden" value="{$template}" name="template">
-{/if}
-
-
-{if isset ($create_tpl)}
- <table>
- <tr>
- <td style="text-align: right;">{'locfiledit_new_filename'|@translate}</td>
- <td style="text-align: left;"><input type="text" size="55" maxlength="50" value="{$create_tpl.NEW_FILE_NAME}" name="tpl_name"/></td>
- </tr>
- <tr>
- <td style="text-align: right;">{'locfiledit_parent_directory'|@translate}</td>
- <td style="text-align: left;">{html_options name=tpl_parent options=$create_tpl.PARENT_OPTIONS selected=$create_tpl.PARENT_SELECTED}</td>
- </tr>
- <tr>
- <td style="text-align: right;">{'locfiledit_model'|@translate}</td>
- <td style="text-align: left;">{html_options name=tpl_model options=$create_tpl.MODEL_OPTIONS selected=$create_tpl.MODEL_SELECTED}</td>
- </tr>
- </table>
-<br><br>
-<input class="submit" type="submit" value="{'Submit'|@translate}" name="create_tpl" />
-{/if}
-
-{if isset ($css_lang_tpl)}
-<select name="{$css_lang_tpl.SELECT_NAME}">
-{html_options options=$css_lang_tpl.OPTIONS selected=$css_lang_tpl.SELECTED}
-</select>
-
-<input class="submit" type="submit" value="{'locfiledit_edit'|@translate}" name="edit" />
-<br><br>
-{/if}
-
-{if isset ($css_lang_tpl.NEW_FILE_URL)}
-<span class="{$css_lang_tpl.NEW_FILE_CLASS}">
-<a href="{$css_lang_tpl.NEW_FILE_URL}">{'locfiledit_new_tpl'|@translate}</a>
-</span>
-{/if}
-
-{if isset ($zone_edit)}
-<div id="title_bar">
-{/if}
-
-{if !empty($show_default)}
-{foreach from=$show_default item=file name=default_loop}
-<span class="default_file">
-<a href="{$file.URL}" onclick="window.open( this.href, 'local_file', 'location=no,toolbar=no,menubar=no,status=no,resizable=yes,scrollbars=yes,width=800,height=700' ); return false;">{'locfiledit_show_default'|@translate} "{$file.FILE}"</a>
-</span>
-{if !($smarty.foreach.default_loop.last)}<br>{/if}
-{/foreach}
-{/if}
-
-{if isset ($zone_edit)}
-<span class="file_name">{$zone_edit.FILE_NAME}</span>
-</div> {* title_bar *}
-
-<textarea rows="30" cols="90" name="text" id="text">{$zone_edit.CONTENT_FILE}</textarea>
-<br>
-<input class="submit" type="submit" value="{'locfiledit_save_file'|@translate}" name="submit"/>
-
-{if isset ($restore)}
-<input class="submit" type="submit" value="{'locfiledit_restore'|@translate}" name="restore" onclick="return confirm('{'locfiledit_restore_confirm'|@translate|escape:'javascript'}');"/>
-{/if}
-
-{if isset ($restore_infos)}
-<br><br>
-{'locfiledit_save_bak'|@translate}
-{/if}
-
-{/if} {* zone_edit *}
-</div>
-</form>
diff --git a/plugins/LocalFilesEditor/template/locfiledit.css b/plugins/LocalFilesEditor/template/locfiledit.css
deleted file mode 100644
index 10589bcec..000000000
--- a/plugins/LocalFilesEditor/template/locfiledit.css
+++ /dev/null
@@ -1,32 +0,0 @@
-#LocalFilesEditor {
- text-align: center;
- margin: 0 2em;
-}
-
-#LocalFilesEditor #title_bar {
- overflow: auto;
-}
-
-#LocalFilesEditor .file_name {
- font-weight: bold;
- float: left;
-}
-
-#LocalFilesEditor .default_file {
- float: right;
-}
-
-#LocalFilesEditor TD {
- padding: 0.5em;
-}
-
-#LocalFilesEditor TEXTAREA, .CodeMirror {
- background-color: #EEEEEE;
- font-family: monospace,Arial,sans-serif;
- font-size: 1.2em;
- border: 1px solid #999999;
- margin: 0.5em 0;
- width: 100%;
- min-height: 500px;
- height: auto;
-} \ No newline at end of file
diff --git a/plugins/LocalFilesEditor/template/show_default.tpl b/plugins/LocalFilesEditor/template/show_default.tpl
deleted file mode 100644
index cd6c3f318..000000000
--- a/plugins/LocalFilesEditor/template/show_default.tpl
+++ /dev/null
@@ -1,37 +0,0 @@
-{combine_script id="codemirror" path="plugins/LocalFilesEditor/codemirror/lib/codemirror.js"}
-{combine_script id="codemirror.xml" require="codemirror" path="plugins/LocalFilesEditor/codemirror/mode/xml/xml.js"}
-{combine_script id="codemirror.javascript" require="codemirror" path="plugins/LocalFilesEditor/codemirror/mode/javascript/javascript.js"}
-{combine_script id="codemirror.css" require="codemirror" path="plugins/LocalFilesEditor/codemirror/mode/css/css.js"}
-{combine_script id="codemirror.clike" require="codemirror" path="plugins/LocalFilesEditor/codemirror/mode/clike/clike.js"}
-{combine_script id="codemirror.htmlmixed" require="codemirror.xml,codemirror.javascript,codemirror.css" path="plugins/LocalFilesEditor/codemirror/mode/htmlmixed/htmlmixed.js"}
-{combine_script id="codemirror.php" require="codemirror.xml,codemirror.javascript,codemirror.css,codemirror.clike" path="plugins/LocalFilesEditor/codemirror/mode/php/php.js"}
-
-{combine_css path="plugins/LocalFilesEditor/codemirror/lib/codemirror.css"}
-{combine_css path="plugins/LocalFilesEditor/codemirror/mode/xml/xml.css"}
-{combine_css path="plugins/LocalFilesEditor/codemirror/mode/javascript/javascript.css"}
-{combine_css path="plugins/LocalFilesEditor/codemirror/mode/css/css.css"}
-{combine_css path="plugins/LocalFilesEditor/codemirror/mode/clike/clike.css"}
-{combine_css path="plugins/LocalFilesEditor/template/locfiledit.css"}
-
-{footer_script}
-var editor = CodeMirror.fromTextArea(document.getElementById("text"), {ldelim}
- readOnly: true,
- mode: "application/x-httpd-php"
-});
-{/footer_script}
-
-{html_head}
-<style type="text/css">
-#headbranch, #theHeader, #copyright {ldelim} display: none; }
-</style>
-{/html_head}
-
-<div id="LocalFilesEditor">
-
-<div id="title_bar">
- <span class="file_name">{$TITLE}</span>
-</div>
-
-<textarea id="text" rows="30" cols="90" class="show_default_area">{$DEFAULT_CONTENT}</textarea>
-
-</div>
diff --git a/plugins/TakeATour/admin.php b/plugins/TakeATour/admin.php
deleted file mode 100644
index 1f3d44d10..000000000
--- a/plugins/TakeATour/admin.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
-
-global $template, $conf, $user, $page;
-
-load_language('plugin.lang', PHPWG_PLUGINS_PATH .'TakeATour/');
-$template->assign(
- array(
- 'F_ACTION' => get_root_url().'admin.php',
- 'pwg_token' => get_pwg_token()
- )
- );
-
-$template->func_combine_css(array(
- 'path' => 'plugins/TakeATour/css/admin.css',
- )
-);
-
-if (isset($conf['TakeATour_tour_ignored']) and is_array($conf['TakeATour_tour_ignored']))
-{
- $template->assign('TAT_tour_ignored', $conf['TakeATour_tour_ignored']);
-}
-$template->set_filename('plugin_admin_content', dirname(__FILE__) .'/tpl/admin.tpl');
-$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
-
-?> \ No newline at end of file
diff --git a/plugins/TakeATour/css/admin.css b/plugins/TakeATour/css/admin.css
deleted file mode 100644
index 83f0e4727..000000000
--- a/plugins/TakeATour/css/admin.css
+++ /dev/null
@@ -1,13 +0,0 @@
-#helpContent .TAT_description {
- text-align: justify;
-}
-#helpContent form {
- text-align: center;
-}
-#helpContent form input {
- width: 50%;
- margin-top: 10px;
-}
-#helpContent P {
- margin: 1em;
-} \ No newline at end of file
diff --git a/plugins/TakeATour/css/bootstrap-tour-standalone.css b/plugins/TakeATour/css/bootstrap-tour-standalone.css
deleted file mode 100644
index a554af819..000000000
--- a/plugins/TakeATour/css/bootstrap-tour-standalone.css
+++ /dev/null
@@ -1,728 +0,0 @@
-/* ========================================================================
- * bootstrap-tour - v0.10.1
- * http://bootstraptour.com
- * ========================================================================
- * Copyright 2012-2013 Ulrich Sossou
- *
- * ========================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================================
- */
-
-/*!
- * Bootstrap v3.1.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-.btn {
- display: inline-block;
- margin-bottom: 0;
- font-weight: normal;
- text-align: center;
- vertical-align: middle;
- cursor: pointer;
- background-image: none;
- border: 1px solid transparent;
- white-space: nowrap;
- padding: 6px 12px;
- font-size: 14px;
- line-height: 1.42857143;
- border-radius: 4px;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-.btn:hover,
-.btn:focus {
- color: #333333;
- text-decoration: none;
-}
-.btn:active,
-.btn.active {
- outline: 0;
- background-image: none;
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
- cursor: not-allowed;
- pointer-events: none;
- opacity: 0.65;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn-default {
- color: #333333;
- background-color: #ffffff;
- border-color: #cccccc;
-}
-.btn-default:hover,
-.btn-default:focus,
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- color: #333333;
- background-color: #e6e6e6;
- border-color: #adadad;
-}
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- background-image: none;
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
- background-color: #ffffff;
- border-color: #cccccc;
-}
-.btn-default .badge {
- color: #ffffff;
- background-color: #333333;
-}
-.btn-primary {
- color: #ffffff;
- background-color: #428bca;
- border-color: #357ebd;
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- color: #ffffff;
- background-color: #3071a9;
- border-color: #285e8e;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- background-image: none;
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
- background-color: #428bca;
- border-color: #357ebd;
-}
-.btn-primary .badge {
- color: #428bca;
- background-color: #ffffff;
-}
-.btn-success {
- color: #ffffff;
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- color: #ffffff;
- background-color: #449d44;
- border-color: #398439;
-}
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- background-image: none;
-}
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success .badge {
- color: #5cb85c;
- background-color: #ffffff;
-}
-.btn-info {
- color: #ffffff;
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- color: #ffffff;
- background-color: #31b0d5;
- border-color: #269abc;
-}
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- background-image: none;
-}
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info .badge {
- color: #5bc0de;
- background-color: #ffffff;
-}
-.btn-warning {
- color: #ffffff;
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- color: #ffffff;
- background-color: #ec971f;
- border-color: #d58512;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- background-image: none;
-}
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning .badge {
- color: #f0ad4e;
- background-color: #ffffff;
-}
-.btn-danger {
- color: #ffffff;
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- color: #ffffff;
- background-color: #c9302c;
- border-color: #ac2925;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- background-image: none;
-}
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger .badge {
- color: #d9534f;
- background-color: #ffffff;
-}
-.btn-link {
- color: #428bca;
- font-weight: normal;
- cursor: pointer;
- border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
- background-color: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
- border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
- color: #2a6496;
- text-decoration: underline;
- background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
- color: #777777;
- text-decoration: none;
-}
-.btn-lg,
-.btn-group-lg > .btn {
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.33;
- border-radius: 6px;
-}
-.btn-sm,
-.btn-group-sm > .btn {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-xs,
-.btn-group-xs > .btn {
- padding: 1px 5px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-block {
- display: block;
- width: 100%;
-}
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
- width: 100%;
-}
-.btn-group,
-.btn-group-vertical {
- position: relative;
- display: inline-block;
- vertical-align: middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn {
- position: relative;
- float: left;
-}
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
- z-index: 2;
-}
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus {
- outline: 0;
-}
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
- margin-left: -1px;
-}
-.btn-toolbar {
- margin-left: -5px;
-}
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
- float: left;
-}
-.btn-toolbar > .btn,
-.btn-toolbar > .btn-group,
-.btn-toolbar > .input-group {
- margin-left: 5px;
-}
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
- border-radius: 0;
-}
-.btn-group > .btn:first-child {
- margin-left: 0;
-}
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
-}
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
-}
-.btn-group > .btn-group {
- float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group > .btn-group:first-child > .btn:last-child,
-.btn-group > .btn-group:first-child > .dropdown-toggle {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
-}
-.btn-group > .btn-group:last-child > .btn:first-child {
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
- outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
- padding-left: 8px;
- padding-right: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
- padding-left: 12px;
- padding-right: 12px;
-}
-.btn-group.open .dropdown-toggle {
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-}
-.btn-group.open .dropdown-toggle.btn-link {
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn .caret {
- margin-left: 0;
-}
-.btn-lg .caret {
- border-width: 5px 5px 0;
- border-bottom-width: 0;
-}
-.dropup .btn-lg .caret {
- border-width: 0 5px 5px;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group,
-.btn-group-vertical > .btn-group > .btn {
- display: block;
- float: none;
- width: 100%;
- max-width: 100%;
-}
-.btn-group-vertical > .btn-group > .btn {
- float: none;
-}
-.btn-group-vertical > .btn + .btn,
-.btn-group-vertical > .btn + .btn-group,
-.btn-group-vertical > .btn-group + .btn,
-.btn-group-vertical > .btn-group + .btn-group {
- margin-top: -1px;
- margin-left: 0;
-}
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
- border-radius: 0;
-}
-.btn-group-vertical > .btn:first-child:not(:last-child) {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn:last-child:not(:first-child) {
- border-bottom-left-radius: 4px;
- border-top-right-radius: 0;
- border-top-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-top-right-radius: 0;
- border-top-left-radius: 0;
-}
-.btn-group-justified {
- display: table;
- width: 100%;
- table-layout: fixed;
- border-collapse: separate;
-}
-.btn-group-justified > .btn,
-.btn-group-justified > .btn-group {
- float: none;
- display: table-cell;
- width: 1%;
-}
-.btn-group-justified > .btn-group .btn {
- width: 100%;
-}
-.btn-group-justified > .btn-group .dropdown-menu {
- left: auto;
-}
-[data-toggle="buttons"] > .btn > input[type="radio"],
-[data-toggle="buttons"] > .btn > input[type="checkbox"] {
- position: absolute;
- z-index: -1;
- opacity: 0;
- filter: alpha(opacity=0);
-}
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: none;
- max-width: 276px;
- padding: 1px;
- text-align: left;
- background-color: #ffffff;
- background-clip: padding-box;
- border: 1px solid #cccccc;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 6px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- white-space: normal;
-}
-.popover.top {
- margin-top: -10px;
-}
-.popover.right {
- margin-left: 10px;
-}
-.popover.bottom {
- margin-top: 10px;
-}
-.popover.left {
- margin-left: -10px;
-}
-.popover-title {
- margin: 0;
- padding: 8px 14px;
- font-size: 14px;
- font-weight: normal;
- line-height: 18px;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-radius: 5px 5px 0 0;
-}
-.popover-content {
- padding: 9px 14px;
-}
-.popover > .arrow,
-.popover > .arrow:after {
- position: absolute;
- display: block;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.popover > .arrow {
- border-width: 11px;
-}
-.popover > .arrow:after {
- border-width: 10px;
- content: "";
-}
-.popover.top > .arrow {
- left: 50%;
- margin-left: -11px;
- border-bottom-width: 0;
- border-top-color: #999999;
- border-top-color: rgba(0, 0, 0, 0.25);
- bottom: -11px;
-}
-.popover.top > .arrow:after {
- content: " ";
- bottom: 1px;
- margin-left: -10px;
- border-bottom-width: 0;
- border-top-color: #ffffff;
-}
-.popover.right > .arrow {
- top: 50%;
- left: -11px;
- margin-top: -11px;
- border-left-width: 0;
- border-right-color: #999999;
- border-right-color: rgba(0, 0, 0, 0.25);
-}
-.popover.right > .arrow:after {
- content: " ";
- left: 1px;
- bottom: -10px;
- border-left-width: 0;
- border-right-color: #ffffff;
-}
-.popover.bottom > .arrow {
- left: 50%;
- margin-left: -11px;
- border-top-width: 0;
- border-bottom-color: #999999;
- border-bottom-color: rgba(0, 0, 0, 0.25);
- top: -11px;
-}
-.popover.bottom > .arrow:after {
- content: " ";
- top: 1px;
- margin-left: -10px;
- border-top-width: 0;
- border-bottom-color: #ffffff;
-}
-.popover.left > .arrow {
- top: 50%;
- right: -11px;
- margin-top: -11px;
- border-right-width: 0;
- border-left-color: #999999;
- border-left-color: rgba(0, 0, 0, 0.25);
-}
-.popover.left > .arrow:after {
- content: " ";
- right: 1px;
- border-right-width: 0;
- border-left-color: #ffffff;
- bottom: -10px;
-}
-.tour-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1100;
- background-color: #000;
- opacity: 0.8;
- filter: alpha(opacity=80);
-}
-.tour-step-backdrop {
- position: relative;
- z-index: 1101;
- background: inherit;
-}
-.tour-step-backdrop > td {
- position: relative;
- z-index: 1101;
-}
-.tour-step-background {
- position: absolute !important;
- z-index: 1100;
- background: inherit;
- border-radius: 6px;
-}
-.popover[class*="tour-"] {
- z-index: 1100;
-}
-.popover[class*="tour-"] .popover-navigation {
- padding: 9px 14px;
-}
-.popover[class*="tour-"] .popover-navigation *[data-role="end"] {
- float: right;
-}
-.popover[class*="tour-"] .popover-navigation *[data-role="prev"],
-.popover[class*="tour-"] .popover-navigation *[data-role="next"],
-.popover[class*="tour-"] .popover-navigation *[data-role="end"] {
- cursor: pointer;
-}
-.popover[class*="tour-"] .popover-navigation *[data-role="prev"].disabled,
-.popover[class*="tour-"] .popover-navigation *[data-role="next"].disabled,
-.popover[class*="tour-"] .popover-navigation *[data-role="end"].disabled {
- cursor: default;
-}
-.popover[class*="tour-"].orphan {
- position: fixed;
- margin-top: 0;
-}
-.popover[class*="tour-"].orphan .arrow {
- display: none;
-}
diff --git a/plugins/TakeATour/css/clear.css b/plugins/TakeATour/css/clear.css
deleted file mode 100644
index 43b4d72e7..000000000
--- a/plugins/TakeATour/css/clear.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.popover-title, .popover-content {
- color: #666;
-} \ No newline at end of file
diff --git a/plugins/TakeATour/css/roma.css b/plugins/TakeATour/css/roma.css
deleted file mode 100644
index ff6741b82..000000000
--- a/plugins/TakeATour/css/roma.css
+++ /dev/null
@@ -1,109 +0,0 @@
-.btn:hover,
-.btn:focus {
- color: #ccc;
-}
-.btn:active,
-.btn.active {
- -webkit-box-shadow: inset 0 3px 5px rgba(255, 255, 255, 0.125);
- box-shadow: inset 0 3px 5px rgba(255, 255, 255, 0.125);
-}
-
-.btn-default {
- /*color: #ff3363;
- background-color: #111111;
- border-color: #ff3363;*/
- color: #ccc;
- background-color: #111111;
- border-color: #333;
-
-}
-.btn-default:hover,
-.btn-default:focus,
-.btn-default:active,
-.btn-default.active,
-.open .dropdown-toggle.btn-default {
- color: #ff3363;
- background-color: #141414;
- border-color: #ff3363;
-/* color: #ccc;
- background-color: #141414;
- border-color: #525252;*/
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
- color: #666;
- background-color: #000;
- border-color: #333333;
-}
-.btn-default .badge {
- color: #000;
- background-color: #ccc;
-}
-
-.popover {
- background-color: #222;
- border: 1px solid #333333;
-}
-.popover.right {
- box-shadow: -5px 5px 10px rgba(170, 170, 170, 0.2);
-}
-.popover.left {
- box-shadow: 5px 5px 10px rgba(170, 170, 170, 0.2);
-}
-.popover.top {
- box-shadow: 0px 5px 10px rgba(170, 170, 170, 0.2);
-}
-.popover.bottom {
- box-shadow: 0px -5px 10px rgba(170, 170, 170, 0.2);
-}
-.popover-title, .popover-content {
- color: #aaa;
-}
-.popover-title {
- background-color: #111111;
- border-bottom: 1px solid #141414;
-}
-.popover.top > .arrow {
- border-top-color: #666666;
- border-top-color: rgba(170, 170, 170, 0.25);
-}
-.popover.top > .arrow:after {
- border-top-color: #222;
-}
-.popover.right > .arrow {
- border-right-color: #666666;
- border-right-color: rgba(170, 170, 170, 0.25);
-}
-.popover.right > .arrow:after {
- border-right-color: #222;
-}
-.popover.bottom > .arrow {
- border-bottom-color: #666666;
- border-bottom-color: rgba(170, 170, 170, 0.25);
-}
-.popover.bottom > .arrow:after {
- border-bottom-color: #222;
-}
-.popover.left > .arrow {
- border-left-color: #666666;
- border-left-color: rgba(170, 170, 170, 0.25);
-}
-.popover.left > .arrow:after {
- border-left-color: #222;
-}
-.tour-backdrop {
- background-color: #fff;
-}
diff --git a/plugins/TakeATour/js/custom-bootstrap-tour-standalone.js b/plugins/TakeATour/js/custom-bootstrap-tour-standalone.js
deleted file mode 100644
index cab870c28..000000000
--- a/plugins/TakeATour/js/custom-bootstrap-tour-standalone.js
+++ /dev/null
@@ -1,1388 +0,0 @@
-/* ========================================================================
- * bootstrap-tour - v0.10.1
- * http://bootstraptour.com
- * ========================================================================
- * Copyright 2012-2013 Ulrich Sossou
- *
- * ========================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================================
- */
-
-/* ========================================================================
- * Bootstrap: tooltip.js v3.2.0
- * http://getbootstrap.com/javascript/#tooltip
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // TOOLTIP PUBLIC CLASS DEFINITION
- // ===============================
-
- var Tooltip = function (element, options) {
- this.type =
- this.options =
- this.enabled =
- this.timeout =
- this.hoverState =
- this.$element = null
-
- this.init('tooltip', element, options)
- }
-
- Tooltip.VERSION = '3.2.0'
-
- Tooltip.DEFAULTS = {
- animation: true,
- placement: 'top',
- selector: false,
- template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
- trigger: 'hover focus',
- title: '',
- delay: 0,
- html: false,
- container: false,
- viewport: {
- selector: 'body',
- padding: 0
- }
- }
-
- Tooltip.prototype.init = function (type, element, options) {
- this.enabled = true
- this.type = type
- this.$element = $(element)
- this.options = this.getOptions(options)
- this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
-
- var triggers = this.options.trigger.split(' ')
-
- for (var i = triggers.length; i--;) {
- var trigger = triggers[i]
-
- if (trigger == 'click') {
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
- } else if (trigger != 'manual') {
- var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
- var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
-
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
- }
- }
-
- this.options.selector ?
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
- this.fixTitle()
- }
-
- Tooltip.prototype.getDefaults = function () {
- return Tooltip.DEFAULTS
- }
-
- Tooltip.prototype.getOptions = function (options) {
- options = $.extend({}, this.getDefaults(), this.$element.data(), options)
-
- if (options.delay && typeof options.delay == 'number') {
- options.delay = {
- show: options.delay,
- hide: options.delay
- }
- }
-
- return options
- }
-
- Tooltip.prototype.getDelegateOptions = function () {
- var options = {}
- var defaults = this.getDefaults()
-
- this._options && $.each(this._options, function (key, value) {
- if (defaults[key] != value) options[key] = value
- })
-
- return options
- }
-
- Tooltip.prototype.enter = function (obj) {
- var self = obj instanceof this.constructor ?
- obj : $(obj.currentTarget).data('bs.' + this.type)
-
- if (!self) {
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
- $(obj.currentTarget).data('bs.' + this.type, self)
- }
-
- clearTimeout(self.timeout)
-
- self.hoverState = 'in'
-
- if (!self.options.delay || !self.options.delay.show) return self.show()
-
- self.timeout = setTimeout(function () {
- if (self.hoverState == 'in') self.show()
- }, self.options.delay.show)
- }
-
- Tooltip.prototype.leave = function (obj) {
- var self = obj instanceof this.constructor ?
- obj : $(obj.currentTarget).data('bs.' + this.type)
-
- if (!self) {
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
- $(obj.currentTarget).data('bs.' + this.type, self)
- }
-
- clearTimeout(self.timeout)
-
- self.hoverState = 'out'
-
- if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
- self.timeout = setTimeout(function () {
- if (self.hoverState == 'out') self.hide()
- }, self.options.delay.hide)
- }
-
- Tooltip.prototype.show = function () {
- var e = $.Event('show.bs.' + this.type)
-
- if (this.hasContent() && this.enabled) {
- this.$element.trigger(e)
-
- var inDom = $.contains(document.documentElement, this.$element[0])
- if (e.isDefaultPrevented() || !inDom) return
- var that = this
-
- var $tip = this.tip()
-
- var tipId = this.getUID(this.type)
-
- this.setContent()
- $tip.attr('id', tipId)
- this.$element.attr('aria-describedby', tipId)
-
- if (this.options.animation) $tip.addClass('fade')
-
- var placement = typeof this.options.placement == 'function' ?
- this.options.placement.call(this, $tip[0], this.$element[0]) :
- this.options.placement
-
- var autoToken = /\s?auto?\s?/i
- var autoPlace = autoToken.test(placement)
- if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
-
- $tip
- .detach()
- .css({ top: 0, left: 0, display: 'block' })
- .addClass(placement)
- .data('bs.' + this.type, this)
-
- this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
-
- var pos = this.getPosition()
- var actualWidth = $tip[0].offsetWidth
- var actualHeight = $tip[0].offsetHeight
-
- if (autoPlace) {
- var orgPlacement = placement
- var $parent = this.$element.parent()
- var parentDim = this.getPosition($parent)
-
- placement = placement == 'bottom' && pos.top + pos.height + actualHeight - parentDim.scroll > parentDim.height ? 'top' :
- placement == 'top' && pos.top - parentDim.scroll - actualHeight < 0 ? 'bottom' :
- placement == 'right' && pos.right + actualWidth > parentDim.width ? 'left' :
- placement == 'left' && pos.left - actualWidth < parentDim.left ? 'right' :
- placement
-
- $tip
- .removeClass(orgPlacement)
- .addClass(placement)
- }
-
- var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
-
- this.applyPlacement(calculatedOffset, placement)
-
- var complete = function () {
- that.$element.trigger('shown.bs.' + that.type)
- that.hoverState = null
- }
-
- $.support.transition && this.$tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(150) :
- complete()
- }
- }
-
- Tooltip.prototype.applyPlacement = function (offset, placement) {
- var $tip = this.tip()
- var width = $tip[0].offsetWidth
- var height = $tip[0].offsetHeight
-
- // manually read margins because getBoundingClientRect includes difference
- var marginTop = parseInt($tip.css('margin-top'), 10)
- var marginLeft = parseInt($tip.css('margin-left'), 10)
-
- // we must check for NaN for ie 8/9
- if (isNaN(marginTop)) marginTop = 0
- if (isNaN(marginLeft)) marginLeft = 0
-
- offset.top = offset.top + marginTop
- offset.left = offset.left + marginLeft
-
- // $.fn.offset doesn't round pixel values
- // so we use setOffset directly with our own function B-0
- $.offset.setOffset($tip[0], $.extend({
- using: function (props) {
- $tip.css({
- top: Math.round(props.top),
- left: Math.round(props.left)
- })
- }
- }, offset), 0)
-
- $tip.addClass('in')
-
- // check to see if placing tip in new offset caused the tip to resize itself
- var actualWidth = $tip[0].offsetWidth
- var actualHeight = $tip[0].offsetHeight
-
- if (placement == 'top' && actualHeight != height) {
- offset.top = offset.top + height - actualHeight
- }
-
- var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
-
- if (delta.left) offset.left += delta.left
- else offset.top += delta.top
-
- var arrowDelta = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
- var arrowPosition = delta.left ? 'left' : 'top'
- var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'
-
- $tip.offset(offset)
- this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)
- }
-
- Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
- this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
- }
-
- Tooltip.prototype.setContent = function () {
- var $tip = this.tip()
- var title = this.getTitle()
-
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
- $tip.removeClass('fade in top bottom left right')
- }
-
- Tooltip.prototype.hide = function () {
- var that = this
- var $tip = this.tip()
- var e = $.Event('hide.bs.' + this.type)
-
- this.$element.removeAttr('aria-describedby')
-
- function complete() {
- if (that.hoverState != 'in') $tip.detach()
- that.$element.trigger('hidden.bs.' + that.type)
- }
-
- this.$element.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- $tip.removeClass('in')
-
- $.support.transition && this.$tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(150) :
- complete()
-
- this.hoverState = null
-
- return this
- }
-
- Tooltip.prototype.fixTitle = function () {
- var $e = this.$element
- if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
- }
- }
-
- Tooltip.prototype.hasContent = function () {
- return this.getTitle()
- }
-
- Tooltip.prototype.getPosition = function ($element) {
- $element = $element || this.$element
- var el = $element[0]
- var isBody = el.tagName == 'BODY'
- return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {
- scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
- width: isBody ? $(window).width() : $element.outerWidth(),
- height: isBody ? $(window).height() : $element.outerHeight()
- }, isBody ? { top: 0, left: 0 } : $element.offset())
- }
-
- Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
- return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
- placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
- placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
- /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
-
- }
-
- Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
- var delta = { top: 0, left: 0 }
- if (!this.$viewport) return delta
-
- var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
- var viewportDimensions = this.getPosition(this.$viewport)
-
- if (/right|left/.test(placement)) {
- var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
- var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
- if (topEdgeOffset < viewportDimensions.top) { // top overflow
- delta.top = viewportDimensions.top - topEdgeOffset
- } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
- delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
- }
- } else {
- var leftEdgeOffset = pos.left - viewportPadding
- var rightEdgeOffset = pos.left + viewportPadding + actualWidth
- if (leftEdgeOffset < viewportDimensions.left) { // left overflow
- delta.left = viewportDimensions.left - leftEdgeOffset
- } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
- delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
- }
- }
-
- return delta
- }
-
- Tooltip.prototype.getTitle = function () {
- var title
- var $e = this.$element
- var o = this.options
-
- title = $e.attr('data-original-title')
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
-
- return title
- }
-
- Tooltip.prototype.getUID = function (prefix) {
- do prefix += ~~(Math.random() * 1000000)
- while (document.getElementById(prefix))
- return prefix
- }
-
- Tooltip.prototype.tip = function () {
- return (this.$tip = this.$tip || $(this.options.template))
- }
-
- Tooltip.prototype.arrow = function () {
- return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
- }
-
- Tooltip.prototype.validate = function () {
- if (!this.$element[0].parentNode) {
- this.hide()
- this.$element = null
- this.options = null
- }
- }
-
- Tooltip.prototype.enable = function () {
- this.enabled = true
- }
-
- Tooltip.prototype.disable = function () {
- this.enabled = false
- }
-
- Tooltip.prototype.toggleEnabled = function () {
- this.enabled = !this.enabled
- }
-
- Tooltip.prototype.toggle = function (e) {
- var self = this
- if (e) {
- self = $(e.currentTarget).data('bs.' + this.type)
- if (!self) {
- self = new this.constructor(e.currentTarget, this.getDelegateOptions())
- $(e.currentTarget).data('bs.' + this.type, self)
- }
- }
-
- self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
- }
-
- Tooltip.prototype.destroy = function () {
- clearTimeout(this.timeout)
- this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
- }
-
-
- // TOOLTIP PLUGIN DEFINITION
- // =========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.tooltip')
- var options = typeof option == 'object' && option
-
- if (!data && option == 'destroy') return
- if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.tooltip
-
- $.fn.tooltip = Plugin
- $.fn.tooltip.Constructor = Tooltip
-
-
- // TOOLTIP NO CONFLICT
- // ===================
-
- $.fn.tooltip.noConflict = function () {
- $.fn.tooltip = old
- return this
- }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: popover.js v3.2.0
- * http://getbootstrap.com/javascript/#popovers
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // POPOVER PUBLIC CLASS DEFINITION
- // ===============================
-
- var Popover = function (element, options) {
- this.init('popover', element, options)
- }
-
- if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
-
- Popover.VERSION = '3.2.0'
-
- Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
- placement: 'right',
- trigger: 'click',
- content: '',
- template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
- })
-
-
- // NOTE: POPOVER EXTENDS tooltip.js
- // ================================
-
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
-
- Popover.prototype.constructor = Popover
-
- Popover.prototype.getDefaults = function () {
- return Popover.DEFAULTS
- }
-
- Popover.prototype.setContent = function () {
- var $tip = this.tip()
- var title = this.getTitle()
- var content = this.getContent()
-
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
- $tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events
- this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
- ](content)
-
- $tip.removeClass('fade top bottom left right in')
-
- // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
- // this manually by checking the contents.
- if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
- }
-
- Popover.prototype.hasContent = function () {
- return this.getTitle() || this.getContent()
- }
-
- Popover.prototype.getContent = function () {
- var $e = this.$element
- var o = this.options
-
- return $e.attr('data-content')
- || (typeof o.content == 'function' ?
- o.content.call($e[0]) :
- o.content)
- }
-
- Popover.prototype.arrow = function () {
- return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
- }
-
- Popover.prototype.tip = function () {
- if (!this.$tip) this.$tip = $(this.options.template)
- return this.$tip
- }
-
-
- // POPOVER PLUGIN DEFINITION
- // =========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.popover')
- var options = typeof option == 'object' && option
-
- if (!data && option == 'destroy') return
- if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.popover
-
- $.fn.popover = Plugin
- $.fn.popover.Constructor = Popover
-
-
- // POPOVER NO CONFLICT
- // ===================
-
- $.fn.popover.noConflict = function () {
- $.fn.popover = old
- return this
- }
-
-}(jQuery);
-
-(function($, window) {
- var Tour, document;
- document = window.document;
- Tour = (function() {
- function Tour(options) {
- var storage;
- try {
- storage = window.localStorage;
- } catch (_error) {
- storage = false;
- }
- this._options = $.extend({
- name: 'tour',
- steps: [],
- container: 'body',
- autoscroll: true,
- keyboard: true,
- storage: storage,
- debug: false,
- backdrop: false,
- backdropPadding: 0,
- redirect: true,
- orphan: false,
- duration: false,
- delay: false,
- basePath: '',
- template: '<div class="popover" role="tooltip"> <div class="arrow"></div> <h3 class="popover-title"></h3> <div class="popover-content"></div> <div class="popover-navigation"> <div class="btn-group"> <button class="btn btn-sm btn-default" data-role="prev">&laquo; Prev</button> <button class="btn btn-sm btn-default" data-role="next">Next &raquo;</button> <button class="btn btn-sm btn-default" data-role="pause-resume" data-pause-text="Pause" data-resume-text="Resume">Pause</button> </div> <button class="btn btn-sm btn-default" data-role="end">End tour</button> </div> </div>',
- afterSetState: function(key, value) {},
- afterGetState: function(key, value) {},
- afterRemoveState: function(key) {},
- onStart: function(tour) {},
- onEnd: function(tour) {},
- onShow: function(tour) {},
- onShown: function(tour) {},
- onHide: function(tour) {},
- onHidden: function(tour) {},
- onNext: function(tour) {},
- onPrev: function(tour) {},
- onPause: function(tour, duration) {},
- onResume: function(tour, duration) {}
- }, options);
- this._force = false;
- this._inited = false;
- this.backdrop = {
- overlay: null,
- $element: null,
- $background: null,
- backgroundShown: false,
- overlayElementShown: false
- };
- this;
- }
-
- Tour.prototype.addSteps = function(steps) {
- var step, _i, _len;
- for (_i = 0, _len = steps.length; _i < _len; _i++) {
- step = steps[_i];
- this.addStep(step);
- }
- return this;
- };
-
- Tour.prototype.addStep = function(step) {
- this._options.steps.push(step);
- return this;
- };
-
- Tour.prototype.getStep = function(i) {
- if (this._options.steps[i] != null) {
- return $.extend({
- id: "step-" + i,
- path: '',
- placement: 'right',
- title: '',
- content: '<p></p>',
- next: i === this._options.steps.length - 1 ? -1 : i + 1,
- prev: i - 1,
- animation: true,
- container: this._options.container,
- autoscroll: this._options.autoscroll,
- backdrop: this._options.backdrop,
- backdropPadding: this._options.backdropPadding,
- redirect: this._options.redirect,
- orphan: this._options.orphan,
- duration: this._options.duration,
- delay: this._options.delay,
- template: this._options.template,
- onShow: this._options.onShow,
- onShown: this._options.onShown,
- onHide: this._options.onHide,
- onHidden: this._options.onHidden,
- onNext: this._options.onNext,
- onPrev: this._options.onPrev,
- onPause: this._options.onPause,
- onResume: this._options.onResume
- }, this._options.steps[i]);
- }
- };
-
- Tour.prototype.init = function(force) {
- this._force = force;
- if (this.ended()) {
- this._debug('Tour ended, init prevented.');
- return this;
- }
- this.setCurrentStep();
- this._initMouseNavigation();
- this._initKeyboardNavigation();
- this._onResize((function(_this) {
- return function() {
- return _this.showStep(_this._current);
- };
- })(this));
- if (this._current !== null) {
- this.showStep(this._current);
- }
- this._inited = true;
- return this;
- };
-
- Tour.prototype.start = function(force) {
- var promise;
- if (force == null) {
- force = false;
- }
- if (!this._inited) {
- this.init(force);
- }
- if (this._current === null) {
- promise = this._makePromise(this._options.onStart != null ? this._options.onStart(this) : void 0);
- this._callOnPromiseDone(promise, this.showStep, 0);
- }
- return this;
- };
-
- Tour.prototype.next = function() {
- var promise;
- promise = this.hideStep(this._current);
- return this._callOnPromiseDone(promise, this._showNextStep);
- };
-
- Tour.prototype.prev = function() {
- var promise;
- promise = this.hideStep(this._current);
- return this._callOnPromiseDone(promise, this._showPrevStep);
- };
-
- Tour.prototype.goTo = function(i) {
- var promise;
- promise = this.hideStep(this._current);
- return this._callOnPromiseDone(promise, this.showStep, i);
- };
-
- Tour.prototype.end = function() {
- var endHelper, promise;
- endHelper = (function(_this) {
- return function(e) {
- $(document).off("click.tour-" + _this._options.name);
- $(document).off("keyup.tour-" + _this._options.name);
- $(window).off("resize.tour-" + _this._options.name);
- _this._setState('end', 'yes');
- _this._inited = false;
- _this._force = false;
- _this._clearTimer();
- if (_this._options.onEnd != null) {
- return _this._options.onEnd(_this);
- }
- };
- })(this);
- promise = this.hideStep(this._current);
- return this._callOnPromiseDone(promise, endHelper);
- };
-
- Tour.prototype.ended = function() {
- return !this._force && !!this._getState('end');
- };
-
- Tour.prototype.restart = function() {
- this._removeState('current_step');
- this._removeState('end');
- return this.start();
- };
-
- Tour.prototype.pause = function() {
- var step;
- step = this.getStep(this._current);
- if (!(step && step.duration)) {
- return this;
- }
- this._paused = true;
- this._duration -= new Date().getTime() - this._start;
- window.clearTimeout(this._timer);
- this._debug("Paused/Stopped step " + (this._current + 1) + " timer (" + this._duration + " remaining).");
- if (step.onPause != null) {
- return step.onPause(this, this._duration);
- }
- };
-
- Tour.prototype.resume = function() {
- var step;
- step = this.getStep(this._current);
- if (!(step && step.duration)) {
- return this;
- }
- this._paused = false;
- this._start = new Date().getTime();
- this._duration = this._duration || step.duration;
- this._timer = window.setTimeout((function(_this) {
- return function() {
- if (_this._isLast()) {
- return _this.next();
- } else {
- return _this.end();
- }
- };
- })(this), this._duration);
- this._debug("Started step " + (this._current + 1) + " timer with duration " + this._duration);
- if ((step.onResume != null) && this._duration !== step.duration) {
- return step.onResume(this, this._duration);
- }
- };
-
- Tour.prototype.hideStep = function(i) {
- var hideStepHelper, promise, step;
- step = this.getStep(i);
- if (!step) {
- return;
- }
- this._clearTimer();
- promise = this._makePromise(step.onHide != null ? step.onHide(this, i) : void 0);
- hideStepHelper = (function(_this) {
- return function(e) {
- var $element;
- $element = $(step.element);
- if (!($element.data('bs.popover') || $element.data('popover'))) {
- $element = $('body');
- }
- $element.popover('destroy').removeClass("tour-" + _this._options.name + "-element tour-" + _this._options.name + "-" + i + "-element");
- if (step.reflex) {
- $element.removeClass('tour-step-element-reflex').off("" + (_this._reflexEvent(step.reflex)) + ".tour-" + _this._options.name);
- }
- if (step.backdrop) {
- _this._hideBackdrop();
- }
- if (step.onHidden != null) {
- return step.onHidden(_this);
- }
- };
- })(this);
- this._callOnPromiseDone(promise, hideStepHelper);
- return promise;
- };
-
- Tour.prototype.showStep = function(i) {
- var promise, showStepHelper, skipToPrevious, step;
- if (this.ended()) {
- this._debug('Tour ended, showStep prevented.');
- return this;
- }
- step = this.getStep(i);
- if (!step) {
- return;
- }
- skipToPrevious = i < this._current;
- promise = this._makePromise(step.onShow != null ? step.onShow(this, i) : void 0);
- showStepHelper = (function(_this) {
- return function(e) {
- var current_path, path, showPopoverAndOverlay;
- _this.setCurrentStep(i);
- path = (function() {
- switch ({}.toString.call(step.path)) {
- case '[object Function]':
- return step.path();
- case '[object String]':
- return this._options.basePath + step.path;
- default:
- return step.path;
- }
- }).call(_this);
- current_path = document.location.href;
- if (_this._isRedirect(path, current_path)) {
- if ({}.toString.call(path) === "[object RegExp]") {
- _this._redirect(step, path);
- }
- else {
- path = document.location.protocol+'//'+path;
- _this._redirect(step, path);
- }
- return;
- }
- if (_this._isOrphan(step)) {
- if (!step.orphan) {
- _this._debug("Skip the orphan step " + (_this._current + 1) + ".\nOrphan option is false and the element does not exist or is hidden.");
- if (skipToPrevious) {
- _this._showPrevStep();
- } else {
- _this._showNextStep();
- }
- return;
- }
- _this._debug("Show the orphan step " + (_this._current + 1) + ". Orphans option is true.");
- }
- if (step.title === "" & step.content === "") {
- if (skipToPrevious) {
- _this._showPrevStep();
- } else {
- _this._showNextStep();
- }
- return;
- }
- if (step.backdrop) {
- _this._showBackdrop(!_this._isOrphan(step) ? step.element : void 0);
- }
- showPopoverAndOverlay = function() {
- if (_this.getCurrentStep() !== i) {
- return;
- }
- if ((step.element != null) && step.backdrop) {
- _this._showOverlayElement(step);
- }
- _this._showPopover(step, i);
- if (step.onShown != null) {
- step.onShown(_this);
- }
- return _this._debug("Step " + (_this._current + 1) + " of " + _this._options.steps.length);
- };
- if (step.autoscroll) {
- _this._scrollIntoView(step.element, showPopoverAndOverlay);
- } else {
- showPopoverAndOverlay();
- }
- if (step.duration) {
- return _this.resume();
- }
- };
- })(this);
- if (step.delay) {
- this._debug("Wait " + step.delay + " milliseconds to show the step " + (this._current + 1));
- window.setTimeout((function(_this) {
- return function() {
- return _this._callOnPromiseDone(promise, showStepHelper);
- };
- })(this), step.delay);
- } else {
- this._callOnPromiseDone(promise, showStepHelper);
- }
- return promise;
- };
-
- Tour.prototype.getCurrentStep = function() {
- return this._current;
- };
-
- Tour.prototype.setCurrentStep = function(value) {
- if (value != null) {
- this._current = value;
- this._setState('current_step', value);
- } else {
- this._current = this._getState('current_step');
- this._current = this._current === null ? null : parseInt(this._current, 10);
- }
- return this;
- };
-
- Tour.prototype._setState = function(key, value) {
- var e, keyName;
- if (this._options.storage) {
- keyName = "" + this._options.name + "_" + key;
- try {
- this._options.storage.setItem(keyName, value);
- } catch (_error) {
- e = _error;
- if (e.code === DOMException.QUOTA_EXCEEDED_ERR) {
- this._debug('LocalStorage quota exceeded. State storage failed.');
- }
- }
- return this._options.afterSetState(keyName, value);
- } else {
- if (this._state == null) {
- this._state = {};
- }
- return this._state[key] = value;
- }
- };
-
- Tour.prototype._removeState = function(key) {
- var keyName;
- if (this._options.storage) {
- keyName = "" + this._options.name + "_" + key;
- this._options.storage.removeItem(keyName);
- return this._options.afterRemoveState(keyName);
- } else {
- if (this._state != null) {
- return delete this._state[key];
- }
- }
- };
-
- Tour.prototype._getState = function(key) {
- var keyName, value;
- if (this._options.storage) {
- keyName = "" + this._options.name + "_" + key;
- value = this._options.storage.getItem(keyName);
- } else {
- if (this._state != null) {
- value = this._state[key];
- }
- }
- if (value === void 0 || value === 'null') {
- value = null;
- }
- this._options.afterGetState(key, value);
- return value;
- };
-
- Tour.prototype._showNextStep = function() {
- var promise, showNextStepHelper, step;
- step = this.getStep(this._current);
- showNextStepHelper = (function(_this) {
- return function(e) {
- return _this.showStep(step.next);
- };
- })(this);
- promise = this._makePromise(step.onNext != null ? step.onNext(this) : void 0);
- return this._callOnPromiseDone(promise, showNextStepHelper);
- };
-
- Tour.prototype._showPrevStep = function() {
- var promise, showPrevStepHelper, step;
- step = this.getStep(this._current);
- showPrevStepHelper = (function(_this) {
- return function(e) {
- return _this.showStep(step.prev);
- };
- })(this);
- promise = this._makePromise(step.onPrev != null ? step.onPrev(this) : void 0);
- return this._callOnPromiseDone(promise, showPrevStepHelper);
- };
-
- Tour.prototype._debug = function(text) {
- if (this._options.debug) {
- return window.console.log("Bootstrap Tour '" + this._options.name + "' | " + text);
- }
- };
-
- Tour.prototype._isRedirect = function(path, currentPath) {
- return (path != null) && path !== '' && (({}.toString.call(path) === '[object RegExp]' && !path.test(currentPath)) || ({}.toString.call(path) === '[object String]' && path !== currentPath.replace("http://", "").replace("https://", "")));
- };
-
- Tour.prototype._redirect = function(step, path) {
- if ($.isFunction(step.redirect)) {
- return step.redirect.call(this, path);
- } else if (step.redirect === true) {
- this._debug("Redirect to " + path);
- return document.location.href = path;
- }
- };
-
- Tour.prototype._isOrphan = function(step) {
- return (step.element == null) || !$(step.element).length || $(step.element).is(':hidden') && ($(step.element)[0].namespaceURI !== 'http://www.w3.org/2000/svg');
- };
-
- Tour.prototype._isLast = function() {
- return this._current < this._options.steps.length - 1;
- };
-
- Tour.prototype._showPopover = function(step, i) {
- var $element, $tip, isOrphan, options;
- $(".tour-" + this._options.name).remove();
- options = $.extend({}, this._options);
- isOrphan = this._isOrphan(step);
- step.template = this._template(step, i);
- if (isOrphan) {
- step.element = 'body';
- step.placement = 'top';
- }
- $element = $(step.element);
- $element.addClass("tour-" + this._options.name + "-element tour-" + this._options.name + "-" + i + "-element");
- if (step.options) {
- $.extend(options, step.options);
- }
- if (step.reflex && !isOrphan) {
- $element.addClass('tour-step-element-reflex');
- $element.off("" + (this._reflexEvent(step.reflex)) + ".tour-" + this._options.name);
- $element.on("" + (this._reflexEvent(step.reflex)) + ".tour-" + this._options.name, (function(_this) {
- return function() {
- if (_this._isLast()) {
- return _this.next();
- } else {
- return _this.end();
- }
- };
- })(this));
- }
- $element.popover({
- placement: step.placement,
- trigger: 'manual',
- title: step.title,
- content: step.content,
- html: true,
- animation: step.animation,
- container: step.container,
- template: step.template,
- selector: step.element
- }).popover('show');
- $tip = $element.data('bs.popover') ? $element.data('bs.popover').tip() : $element.data('popover').tip();
- $tip.attr('id', step.id);
- this._reposition($tip, step);
- if (isOrphan) {
- return this._center($tip);
- }
- };
-
- Tour.prototype._template = function(step, i) {
- var $navigation, $next, $prev, $resume, $template;
- $template = $.isFunction(step.template) ? $(step.template(i, step)) : $(step.template);
- $navigation = $template.find('.popover-navigation');
- $prev = $navigation.find('[data-role="prev"]');
- $next = $navigation.find('[data-role="next"]');
- $resume = $navigation.find('[data-role="pause-resume"]');
- if (this._isOrphan(step)) {
- $template.addClass('orphan');
- }
- $template.addClass("tour-" + this._options.name + " tour-" + this._options.name + "-" + i);
- if (step.prev < 0) {
- $prev.addClass('disabled');
- }
- if (step.next < 0) {
- $next.addClass('disabled');
- }
- if (!step.duration) {
- $resume.remove();
- }
- return $template.clone().wrap('<div>').parent().html();
- };
-
- Tour.prototype._reflexEvent = function(reflex) {
- if ({}.toString.call(reflex) === '[object Boolean]') {
- return 'click';
- } else {
- return reflex;
- }
- };
-
- Tour.prototype._reposition = function($tip, step) {
- var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset;
- offsetWidth = $tip[0].offsetWidth;
- offsetHeight = $tip[0].offsetHeight;
- tipOffset = $tip.offset();
- originalLeft = tipOffset.left;
- originalTop = tipOffset.top;
- offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight();
- if (offsetBottom < 0) {
- tipOffset.top = tipOffset.top + offsetBottom;
- }
- offsetRight = $('html').outerWidth() - tipOffset.left - $tip.outerWidth();
- if (offsetRight < 0) {
- tipOffset.left = tipOffset.left + offsetRight;
- }
- if (tipOffset.top < 0) {
- tipOffset.top = 0;
- }
- if (tipOffset.left < 0) {
- tipOffset.left = 0;
- }
- $tip.offset(tipOffset);
- if (step.placement === 'bottom' || step.placement === 'top') {
- if (originalLeft !== tipOffset.left) {
- return this._replaceArrow($tip, (tipOffset.left - originalLeft) * 2, offsetWidth, 'left');
- }
- } else {
- if (originalTop !== tipOffset.top) {
- return this._replaceArrow($tip, (tipOffset.top - originalTop) * 2, offsetHeight, 'top');
- }
- }
- };
-
- Tour.prototype._center = function($tip) {
- return $tip.css('top', $(window).outerHeight() / 2 - $tip.outerHeight() / 2);
- };
-
- Tour.prototype._replaceArrow = function($tip, delta, dimension, position) {
- return $tip.find('.arrow').css(position, delta ? 50 * (1 - delta / dimension) + '%' : '');
- };
-
- Tour.prototype._scrollIntoView = function(element, callback) {
- var $element, $window, counter, offsetTop, scrollTop, windowHeight;
- $element = $(element);
- if (!$element.length) {
- return callback();
- }
- $window = $(window);
- offsetTop = $element.offset().top;
- windowHeight = $window.height();
- scrollTop = Math.max(0, offsetTop - (windowHeight / 2));
- this._debug("Scroll into view. ScrollTop: " + scrollTop + ". Element offset: " + offsetTop + ". Window height: " + windowHeight + ".");
- counter = 0;
- return $('body, html').stop(true, true).animate({
- scrollTop: Math.ceil(scrollTop)
- }, (function(_this) {
- return function() {
- if (++counter === 2) {
- callback();
- return _this._debug("Scroll into view.\nAnimation end element offset: " + ($element.offset().top) + ".\nWindow height: " + ($window.height()) + ".");
- }
- };
- })(this));
- };
-
- Tour.prototype._onResize = function(callback, timeout) {
- return $(window).on("resize.tour-" + this._options.name, function() {
- clearTimeout(timeout);
- return timeout = setTimeout(callback, 100);
- });
- };
-
- Tour.prototype._initMouseNavigation = function() {
- var _this;
- _this = this;
- return $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']", (function(_this) {
- return function(e) {
- e.preventDefault();
- return _this.next();
- };
- })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']", (function(_this) {
- return function(e) {
- e.preventDefault();
- return _this.prev();
- };
- })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']", (function(_this) {
- return function(e) {
- e.preventDefault();
- return _this.end();
- };
- })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']", function(e) {
- var $this;
- e.preventDefault();
- $this = $(this);
- $this.text(_this._paused ? $this.data('pause-text') : $this.data('resume-text'));
- if (_this._paused) {
- return _this.resume();
- } else {
- return _this.pause();
- }
- });
- };
-
- Tour.prototype._initKeyboardNavigation = function() {
- if (!this._options.keyboard) {
- return;
- }
- return $(document).on("keyup.tour-" + this._options.name, (function(_this) {
- return function(e) {
- if (!e.which) {
- return;
- }
- switch (e.which) {
- case 39:
- e.preventDefault();
- if (_this._isLast()) {
- return _this.next();
- } else {
- return _this.end();
- }
- break;
- case 37:
- e.preventDefault();
- if (_this._current > 0) {
- return _this.prev();
- }
- break;
- case 27:
- e.preventDefault();
- return _this.end();
- }
- };
- })(this));
- };
-
- Tour.prototype._makePromise = function(result) {
- if (result && $.isFunction(result.then)) {
- return result;
- } else {
- return null;
- }
- };
-
- Tour.prototype._callOnPromiseDone = function(promise, cb, arg) {
- if (promise) {
- return promise.then((function(_this) {
- return function(e) {
- return cb.call(_this, arg);
- };
- })(this));
- } else {
- return cb.call(this, arg);
- }
- };
-
- Tour.prototype._showBackdrop = function(element) {
- if (this.backdrop.backgroundShown) {
- return;
- }
- this.backdrop = $('<div>', {
- "class": 'tour-backdrop'
- });
- this.backdrop.backgroundShown = true;
- return $('body').append(this.backdrop);
- };
-
- Tour.prototype._hideBackdrop = function() {
- this._hideOverlayElement();
- return this._hideBackground();
- };
-
- Tour.prototype._hideBackground = function() {
- if (this.backdrop) {
- this.backdrop.remove();
- this.backdrop.overlay = null;
- return this.backdrop.backgroundShown = false;
- }
- };
-
- Tour.prototype._showOverlayElement = function(step) {
- var $element, elementData;
- $element = $(step.element);
- if (!$element || $element.length === 0 || this.backdrop.overlayElementShown) {
- return;
- }
- this.backdrop.overlayElementShown = true;
- this.backdrop.$element = $element.addClass('tour-step-backdrop');
- this.backdrop.$background = $('<div>', {
- "class": 'tour-step-background'
- });
- elementData = {
- width: $element.innerWidth(),
- height: $element.innerHeight(),
- offset: $element.offset()
- };
- this.backdrop.$background.appendTo('body');
- if (step.backdropPadding) {
- elementData = this._applyBackdropPadding(step.backdropPadding, elementData);
- }
- return this.backdrop.$background.width(elementData.width).height(elementData.height).offset(elementData.offset);
- };
-
- Tour.prototype._hideOverlayElement = function() {
- if (!this.backdrop.overlayElementShown) {
- return;
- }
- this.backdrop.$element.removeClass('tour-step-backdrop');
- this.backdrop.$background.remove();
- this.backdrop.$element = null;
- this.backdrop.$background = null;
- return this.backdrop.overlayElementShown = false;
- };
-
- Tour.prototype._applyBackdropPadding = function(padding, data) {
- if (typeof padding === 'object') {
- if (padding.top == null) {
- padding.top = 0;
- }
- if (padding.right == null) {
- padding.right = 0;
- }
- if (padding.bottom == null) {
- padding.bottom = 0;
- }
- if (padding.left == null) {
- padding.left = 0;
- }
- data.offset.top = data.offset.top - padding.top;
- data.offset.left = data.offset.left - padding.left;
- data.width = data.width + padding.left + padding.right;
- data.height = data.height + padding.top + padding.bottom;
- } else {
- data.offset.top = data.offset.top - padding;
- data.offset.left = data.offset.left - padding;
- data.width = data.width + (padding * 2);
- data.height = data.height + (padding * 2);
- }
- return data;
- };
-
- Tour.prototype._clearTimer = function() {
- window.clearTimeout(this._timer);
- this._timer = null;
- return this._duration = null;
- };
-
- return Tour;
-
- })();
- return window.Tour = Tour;
-})(jQuery, window);
diff --git a/plugins/TakeATour/js/custom.patch b/plugins/TakeATour/js/custom.patch
deleted file mode 100644
index c372de036..000000000
--- a/plugins/TakeATour/js/custom.patch
+++ /dev/null
@@ -1,43 +0,0 @@
---- bootstrap-tour-standalone.js.orig 2015-02-10 14:28:55.000000000 +0100
-+++ bootstrap-tour-standalone.js 2015-02-10 14:35:03.000000000 +0100
-@@ -870,9 +870,15 @@
- return step.path;
- }
- }).call(_this);
-- current_path = [document.location.pathname, document.location.hash].join('');
-+ current_path = document.location.href;
- if (_this._isRedirect(path, current_path)) {
-+ if ({}.toString.call(path) === "[object RegExp]") {
-+ _this._redirect(step, path);
-+ }
-+ else {
-+ path = document.location.protocol+'//'+path;
- _this._redirect(step, path);
-+ }
- return;
- }
- if (_this._isOrphan(step)) {
-@@ -887,6 +893,14 @@
- }
- _this._debug("Show the orphan step " + (_this._current + 1) + ". Orphans option is true.");
- }
-+ if (step.title === "" & step.content === "") {
-+ if (skipToPrevious) {
-+ _this._showPrevStep();
-+ } else {
-+ _this._showNextStep();
-+ }
-+ return;
-+ }
- if (step.backdrop) {
- _this._showBackdrop(!_this._isOrphan(step) ? step.element : void 0);
- }
-@@ -1023,7 +1037,7 @@
- };
-
- Tour.prototype._isRedirect = function(path, currentPath) {
-- return (path != null) && path !== '' && (({}.toString.call(path) === '[object RegExp]' && !path.test(currentPath)) || ({}.toString.call(path) === '[object String]' && path.replace(/\?.*$/, '').replace(/\/?$/, '') !== currentPath.replace(/\/?$/, '')));
-+ return (path != null) && path !== '' && (({}.toString.call(path) === '[object RegExp]' && !path.test(currentPath)) || ({}.toString.call(path) === '[object String]' && path !== currentPath.replace("http://", "").replace("https://", "")));
- };
-
- Tour.prototype._redirect = function(step, path) {
diff --git a/plugins/TakeATour/language/bg_BG/description.txt b/plugins/TakeATour/language/bg_BG/description.txt
deleted file mode 100755
index ca4c64ab1..000000000
--- a/plugins/TakeATour/language/bg_BG/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Вижти вашето Piwigo, откриите новите възможности. Тази добавка предоставя описания за начинаещи и напреднали потребители. \ No newline at end of file
diff --git a/plugins/TakeATour/language/bg_BG/index.php b/plugins/TakeATour/language/bg_BG/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/bg_BG/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/bg_BG/plugin.lang.php b/plugins/TakeATour/language/bg_BG/plugin.lang.php
deleted file mode 100755
index bc4cae60b..000000000
--- a/plugins/TakeATour/language/bg_BG/plugin.lang.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Next '] = 'Напред';
-$lang['Prev'] = 'Назад';
-$lang['TAT_descrp'] = 'Добре дошли! Тук е списъка с всички налични описания с помощ за да откриети новите възможности на Piwigo. <br><br> Стартирайте помощника и следвайте инструкциите. Натискайте Напред/Назад или ползвайте стрелките за навигация в обиколката. Ако ви е омръзнала и не желаете да завършите обиколката, отидете на Добавки в Админ меню - Направете обиколка!';
-$lang['privacy_descrp'] = 'Тази обиколка показва всички начини да защитите вашите снимки от публичен достъп без позволение на ниво снимка, албум и прочие. Използване на защити против копиране.';
-$lang['first_contact_descrp'] = 'Препоръчително за начинаещи, тази обиколка ще ви запознае с Piwigo и неговите основни възможности. Ще започне с това как да добавяте снимки и да ги редактирате. Също ще видите създаване и редакция на албуми и накрая конфигуриране и настройки на теми и приложиния добавки.';
-$lang['takeatour_configpage'] = 'Направете обиколка - списък';
-$lang['Visit your Piwigo!'] = 'Посетете вашата Piwigo!';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Запознайте се и разгледайте новите възможности на вашата Piwigo галерия. ';
-$lang['Start the Tour'] = 'Започни прегледа';
-$lang['Privacy'] = 'Защита на данни';
-$lang['First Contact'] = 'За първи път';
-$lang['2.7 Tour'] = '2.7 версия преглед';
-$lang['End tour'] = 'Край на прегледа';
-$lang['2_7_0_descrp'] = 'Вижти какво е ново в Piwigo 2.7'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/bg_BG/tour_2_7_0.lang.php b/plugins/TakeATour/language/bg_BG/tour_2_7_0.lang.php
deleted file mode 100755
index 6ba790b88..000000000
--- a/plugins/TakeATour/language/bg_BG/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['2_7_0_stp5'] = 'Може да настройте часа на определената дата, ползвайки слайдера за час и минути';
-$lang['2_7_0_stp10'] = 'Добъвен е също към менажера и филтър за големина на файлове.
-Може да избирате минимална и маскимална големина.';
-$lang['2_7_0_stp8'] = 'Бързо изчистване на кошницата само с един клик.';
-$lang['2_7_0_stp7'] = 'Сега може да сортирате вашите албуми по дата на публикация или по дата на създаване';
-$lang['2_7_0_title5'] = 'Време';
-$lang['2_7_0_title4'] = 'Страниза за търсене';
-$lang['2_7_0_title2b'] = 'Форма за ново качване';
-$lang['2_7_0_title2'] = 'Първи новости';
-$lang['2_7_0_title11'] = 'До скоро !!!';
-$lang['2_7_0_title10'] = 'Филтър за размер файл';
-$lang['2_7_0_title1'] = 'Добре дошли в Piwigo 2.7';
-$lang['2_7_0_title7'] = 'Сортиране албум по дата';
-$lang['2_7_0_title6'] = 'Избери скрипт';
-$lang['2_7_0_title8'] = 'Изпразване на кошницата';
-$lang['2_7_0_title9'] = 'Филтър за търсене';
-$lang['2_7_0_stp11'] = 'Тази обиколка завърши.<p style="text-align:center">Радвай се на вашето Piwigo 2.7!</p> Ако ви допада, може да участвате и вие с помощ, превод или спонсорство...<a href="http://piwigo.org/basics/contribute" target="_blank">Натиснете тук за подкрепа.</a> Благодарим!';
-$lang['2_7_0_stp9'] = 'В batch менажера е добавен филтър за търсене. Той идва с мощнен синтаксис за търсене на снимки по дати, тагове, размер и още опции за търсене като точно фраза, и/ипи, групиране или изключване.Може да прочетете подробностите в помощника след това. Същите екстри важат и за менюто "Бързо търсене".';
-$lang['2_7_0_stp4'] = 'Страницата за търсене е преработена: способности за търсене по дума, по списък от автори, автоматично завършва листа с тагове и списъка с албуми...';
-$lang['2_7_0_stp2b'] = 'Новата форма за качване в Piwigo 2.7 се базира на HTML5 и Flash, което означава по-добра съвместимост с модерните браузъри и добра работа и при по-бавна връзка. И с влачене и пускане работата с файлове ще е много по-лесна във вашия браузер.';
-$lang['2_7_0_stp2'] = 'Както виждате, нова подръзбираща се добавка е качена: "Преглед".Тази плъгин ви помага да видите новостите в тази версия на Piwigo. Тук са поместени и всички други прегледи. <br> Тази страница се намера в <em>Добавки » Преглед</em>';
-$lang['2_7_0_stp1'] = 'Здравей! Аз ще съм твоя водач в откриването на Piwigo. Моля следвай мойте инструкций и натиснете бутон "Напред" (или ползвай стрелките на клавиатурата) за продължение. Ако отидете на друга страница, ще се върнете автоматично отново в представянето.';
-$lang['2_7_0_stp6'] = 'Скрипта на избор на албуми, тагове и прочие е променен и по приятелски настроен. Тествайте го.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/ca_ES/description.txt b/plugins/TakeATour/language/ca_ES/description.txt
deleted file mode 100755
index b7d9ecda3..000000000
--- a/plugins/TakeATour/language/ca_ES/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Explora la galeria Piwigo tot descobrint les seves funcionalitats. Aquest connector té múltiples temàtiques, tant per usuaris principiants com per usuaris avançats.
diff --git a/plugins/TakeATour/language/ca_ES/index.php b/plugins/TakeATour/language/ca_ES/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/ca_ES/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/ca_ES/plugin.lang.php b/plugins/TakeATour/language/ca_ES/plugin.lang.php
deleted file mode 100755
index a18a4ec92..000000000
--- a/plugins/TakeATour/language/ca_ES/plugin.lang.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['TAT_descrp'] = 'Benvinguts! Aquí teniu llistades les possibles exploracions que podeu realitzar per descobrir totes les característiques de la galeria Piwigo.<br/><br/> Escolliu una exploració i seguiu les instruccions. Durant el temps que duri l\'exploració cliqueu Següent/Anterior (o utilitzeu les tecles de desplaçament) per navegar. Mentres estigui activa l\'exploració, si aneu a una altra pàgina de l\'administració, sereu redirigits cap a la pàgina de la d\'on havíeu deixat l\'exploració. Si voleu aturar i acabar l\'exploració, aneu a <em>Connectors » Exploreu </em> per finalitzar-la.';
-$lang['takeatour_configpage'] = 'Exploreu » Llistat d\'exploracions';
-$lang['First Contact'] = 'Primer Contacte';
-$lang['Start the Tour'] = 'Comença l\'exploració';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Exploreu i descobriu les característiques de la vostra galeria Piwigo » Aneu cap a les exploracions disponibles.';
-$lang['Visit your Piwigo!'] = 'Visita la teva galeria Piwigo!';
-$lang['first_contact_descrp'] = 'Recomanada per a principiants. Aquesta exploració introdueix les característiques bàsiques de Piwigo. Comença amb la gestió d\'imatges i la gestió dels àlbums i permisos i continua amb la personalització de la galeria utilitzant els temes i els connectors.';
-$lang['2.7 Tour'] = 'Explora 2.7';
-$lang['2_7_0_descrp'] = 'Descobreix que hi ha de nou a Piwigo 2.7';
-$lang['End tour'] = 'Acaba l\'exploració';
-$lang['Next '] = 'Següent';
-$lang['Prev'] = 'Anterior';
-$lang['Privacy'] = 'Privacitat';
-$lang['privacy_descrp'] = 'Aquesta exploració presenta tots els camins per protegir les vostres fotos de l\'accés públic afegint permisos en els àlbums i fotos, i evitant la còpia d\'imatges protegides.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/ca_ES/tour_2_7_0.lang.php b/plugins/TakeATour/language/ca_ES/tour_2_7_0.lang.php
deleted file mode 100755
index eba191323..000000000
--- a/plugins/TakeATour/language/ca_ES/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['2_7_0_stp6'] = 'La caixa de selecció d\'àlbums, etiquetes, etc ha canviat en una de nova molt més entenedora. Prova-la a sota';
-$lang['2_7_0_stp4'] = 'La pàgina de cerca s\'ha refet: habilitat de seleccionar propietats en les quals la paraula clau s\'apliqui, llista d\'autors trobats en la base de dades, llista de auto-compleció d\'etiquetes, llista d\'auto-compleció d\'àlbums...';
-$lang['2_7_0_stp2b'] = 'El nou formulari de càrrega de Piwigo 2.7 està basat en HTML5 en comptes de Flash, això significa una millor compatibilitat amb els navegadors web moderns i una millor confiança amb connexions lentes. L\'opció de clicar i arrastrar farà molt més fàcil la selecció de fotos! ';
-$lang['2_7_0_stp9'] = 'S\'ha afegit un filtre en el gestor per lots. Inclou una potent sintaxi de cerca de fotos per dates, etiquetes, mides, nom d\'arxius i també opcions de cerca com exact, match, AND/OR, grouping, exclusion. Més tard podeu llegir l\'ajuda detallada. La mateixa sintaxi s\'aplica en el camp de cerca ràpida en menú del costat públic.';
-$lang['2_7_0_stp5'] = 'Podeu indicar l\'hora i la data, utilitzant els sliders Hora i Minut';
-$lang['2_7_0_stp7'] = 'Ara podreu ordenar els àlbums en la data de creació o d\'enviament de les fotos.';
-$lang['2_7_0_stp8'] = 'Acció senzilla per buidar el carret en un únic clic';
-$lang['2_7_0_title2b'] = 'Nova pujada de';
-$lang['2_7_0_title8'] = 'Buida el carret';
-$lang['2_7_0_title9'] = 'Filtre de cerca';
-$lang['2_7_0_stp10'] = 'S\'ha afegit un filtre de mida de fitxer en el gestor per lots. Podeu seleccionar un rang amb un valor mínim i màxim.';
-$lang['2_7_0_stp2'] = 'Com podeu veure, s\'ha afegit un nou connector: Exploreu. Aquest connector us ajudarà a descobrir Piwigo. Aquí hi ha una llista de totes les possibles exploracions. <br/> Aquesta pàgina està disponible a <em>Connectors » Exploreu </em>';
-$lang['2_7_0_stp11'] = 'Aquesta exploració s\'ha acabat <p style="text-align:center"> Gaudiu de Piwigo 2.7</p> Si us agrada Piwigo i voleu donar-nos suport, podeu contribuir ajudant a traduir, donant, etc. <a href="http://piwigo.org/basics/contribute" target="_blank">Cliqueu aquí per donar suport </a> Gràcies!';
-$lang['2_7_0_title10'] = 'Filtre de mida de fitxer';
-$lang['2_7_0_title11'] = 'Ens veiem aviat!';
-$lang['2_7_0_title2'] = 'Primera nova funcionalitat';
-$lang['2_7_0_title4'] = 'Pàgina de cerca';
-$lang['2_7_0_title5'] = 'Temps';
-$lang['2_7_0_title6'] = 'Selecciona caixes';
-$lang['2_7_0_title7'] = 'Ordena els àlbums per data';
-$lang['2_7_0_title1'] = 'Benvingut a Piwigo 2.7';
-$lang['2_7_0_stp1'] = 'Hola!jo seré la vostra guia per descobrir Piwigo. Si us plau segueix les meves instruccions, i clica a Següent (o utilitza les fletxes de desplaçament del teclat) per navegar. Si aneu a una altra pàgina sereu redirigits a la pàgina on havíeu deixat l\'exploració.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/ca_ES/tour_first_contact.lang.php b/plugins/TakeATour/language/ca_ES/tour_first_contact.lang.php
deleted file mode 100644
index 803b305bb..000000000
--- a/plugins/TakeATour/language/ca_ES/tour_first_contact.lang.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-$lang['first_contact_stp2'] = 'L\'enllaç és aquí. Cliqueu a Següent per a continuar';
-$lang['first_contact_stp11'] = 'Per tant, aquí podeu seleccionar una o més d\'una fotos';
-$lang['first_contact_stp10'] = 'Aquí hi ha l\'enllaç per accedir directament al vostre carret. Aquest és una eina per als administrador que permet a un conjunt de fotos configurar-les o editar-les en el gestor per lots. Podeu afegir fotos al carret des de la pàgina d\'imatges publicades si heu entrat com a usuari administrador, o utilitzant l\'acció \"Afegeix al carret\" en el gestor per lots. ';
-$lang['first_contact_stp16'] = 'aquí hi ha l\'opció per afegir o eliminar la foto dels àlbums. l\'enllaç es virtual, físicament mai no es mou cap foto .';
-$lang['first_contact_stp15'] = 'En aquesta pàgina podeu editar totes les propietats d\'una foto, per exemple...';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_stp1'] = 'Hola! Jo seré el vostre guia per fer-vos descobrir Piwigo. Seguiu les meves instruccions, per continuar cliqueu a Següent (o utilitzeu les tecles de desplaçament del teclat) per navegar. Si aneu a una altra pàgina de l\'administració se us redirigirà a la pàgina actual de l\'exploració. Si esteu bloquejats o no podeu acabar l\'exploració, aneu a <em>Connectors » Exploreu</em> i finalitzeu la l\'exploració. <br/> Comencem afegint imatges!';
-$lang['first_contact_title1'] = 'Benvinguts a la vostra galeria Piwigo';
-$lang['first_contact_title11'] = 'Com afegir una foto';
-$lang['first_contact_title18'] = 'Gestiona àlbums';
-$lang['first_contact_title19'] = 'Gestiona àlbums';
-$lang['first_contact_title20'] = 'Gestiona àlbums';
-$lang['first_contact_title21'] = 'Altres pestanyes';
-$lang['first_contact_title22'] = 'Pàgina d\'edició d\'àlbum';
-$lang['first_contact_title28'] = 'Configuració';
-$lang['first_contact_title29'] = 'Configuració » Opcions » General';
-$lang['first_contact_title3'] = 'Afegeix una pàgina de foto';
-$lang['first_contact_title34'] = 'Temes';
-$lang['first_contact_title35'] = 'Temes';
-$lang['first_contact_title37'] = 'Temes';
-$lang['first_contact_title38'] = 'Connectors';
-$lang['first_contact_title39'] = 'Connectors';
-$lang['first_contact_title4'] = 'Som-hi, afegeix una foto!';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_title9'] = 'El gestor per lots';
-$lang['first_contact_stp30'] = 'Començarem canviant el títol';
-$lang['first_contact_stp32'] = 'Ara guardeu els canvis';
-$lang['first_contact_stp14'] = 'Ara veurem la pàgina d\'edició d\'una imatge. Aquesta pàgina es pot trobar aquí, però també des de una pàgina publica entrant com a administrador. Cliqueu a sobre d\'Edita o aneu al següent pas.';
-$lang['first_contact_stp13'] = 'Amb el mode unitari del processament per lots podeu editar les descripcions i altres camps. De moment ens quedem amb el mode global.';
-$lang['first_contact_stp38'] = 'Els connectors són una forma molt senzilla de personalitzar el vostre Piwigo. Poden fer moltes coses, des d\'afegir un petit text, fins al connector Community que permet als usuaris penjar fotos sense entrar a la part d\'administració.';
-$lang['first_contact_stp39'] = 'En aquesta primera pàgina hi ha llistats els connectors instal·lats. A la part de dalt hi ha llistats els connectors que estan actius i que s\'estan executant. A la part de baix hi ha els connectors que estan instal·lats a la carpeta /plugins, però que estan deshabilitats. La majoria dels connectors quan es deshabiliten mantenen la informació registrada pel propi connector. Quan s\'elimina un connector s\'elimina tota traça del connector (fitxers, opcions, etc). ';
-$lang['first_contact_stp4'] = 'Primer escolliu un àlbum; creeu-ne un si encara no n\'hi ha cap.';
-$lang['first_contact_stp40'] = 'Ara em toca a mi! No em deshabilitis ara ja que podreu veure com Deshabilitar o Restaurar un connector activat. ';
-$lang['first_contact_stp41'] = 'En l\'anterior pestanya heu pogut veure tots els connectors que estan habilitats per la vostra versió de Piwigo. N\'hi ha centenars!';
-$lang['first_contact_stp43'] = 'Aquesta exploració ha estat una mica llarga, però només hem vist una petita part de totes les característiques de Piwigo. Tot té un final i aquesta exploració preliminar s\'ha acabat.<br/> Podeu descobrir més característiques de Piwigo agafant una altra exploració o llegint la documentació al lloc web de piwigo.org';
-$lang['first_contact_stp20'] = 'Quan el ratolí passa per sobre d\'un àlbum apareix la informació i els enllaços. Quan cliqueu i arrastreu un àlbum -un bloc arrodonit- podeu canviar la posició i més tard guardar o cancel·lar l\'ordre manual.';
-$lang['first_contact_stp19_b'] = 'Aquí hi ha un llistat dels àlbums \'arrel\'';
-$lang['first_contact_stp12'] = 'després podeu editar-les emprant una acció';
-$lang['first_contact_title15'] = 'La pàgina d\'edició d\'una foto';
-$lang['first_contact_title33'] = 'Configuració de l\'usuari visitant';
-$lang['first_contact_stp35'] = 'Indiqueu el tema que més us agradi com a tema predeterminat'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/ca_ES/tour_privacy.lang.php b/plugins/TakeATour/language/ca_ES/tour_privacy.lang.php
deleted file mode 100644
index 840ddacb1..000000000
--- a/plugins/TakeATour/language/ca_ES/tour_privacy.lang.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-$lang['privacy_title10'] = 'Permisos de l\'àlbum';
-$lang['privacy_title11'] = 'Permisos de l\'àlbum';
-$lang['privacy_title12'] = 'Permisos de l\'àlbum';
-$lang['privacy_title15'] = 'Pista';
-$lang['privacy_title17'] = 'Grups';
-$lang['privacy_title18'] = 'Grups';
-$lang['privacy_title19'] = 'Usuaris';
-$lang['privacy_title20'] = 'Fotos públiques';
-$lang['privacy_title21'] = 'Fotos públiques';
-$lang['privacy_title3'] = 'Permisos';
-$lang['privacy_title4'] = 'Permisos';
-$lang['privacy_title5'] = 'Permisos > Grups';
-$lang['privacy_title6'] = 'Nivell de privacitat';
-$lang['privacy_title7'] = 'Nivell de privacitat';
-$lang['privacy_title8'] = 'Nivell de privacitat';
-$lang['privacy_title9'] = 'Nivell de privacitat';
diff --git a/plugins/TakeATour/language/cs_CZ/description.txt b/plugins/TakeATour/language/cs_CZ/description.txt
deleted file mode 100644
index f4cc39f6f..000000000
--- a/plugins/TakeATour/language/cs_CZ/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Prozkoumejte vlastnosti vaší Piwigo fotogalerie. Tento plugin obsahuje mnoho ukázek pro začátečníky a pokročilé uživatele.
diff --git a/plugins/TakeATour/language/cs_CZ/index.php b/plugins/TakeATour/language/cs_CZ/index.php
deleted file mode 100644
index db1eae0d9..000000000
--- a/plugins/TakeATour/language/cs_CZ/index.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | PhpWebGallery - a PHP based picture gallery |
-// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
-// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
-// +-----------------------------------------------------------------------+
-// | file : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
-// | last update : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
-// | last modifier : $Author: rub $
-// | revision : $Revision: 1912 $
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/cs_CZ/plugin.lang.php b/plugins/TakeATour/language/cs_CZ/plugin.lang.php
deleted file mode 100644
index 5ae18e604..000000000
--- a/plugins/TakeATour/language/cs_CZ/plugin.lang.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-$lang['Start the Tour'] = 'Spustit ukázku';
-$lang['Visit your Piwigo!'] = 'Prozkoumejte Piwigo!';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Vydej se na průzkum a objev nové vlastnosti tvé Piwigo fotogalerie » Přejít na dostupné ukázky';
-$lang['TAT_descrp'] = 'Vítejte! Zde vidíte seznam všech aktuálních ukázek které vám mohou pomoci lépe pochopit a využít funkce vaší Piwigo fotogalerie.<br><br>Spusťte ukázku níže, poté následujte instrukce. Klikněte na Další/Předchozí (nebo lze použít tlačítka šipek na vaší pc klávesnici) pro posun v průběhu ukázky. Když si prohlížíte ukázku, pokud přejdete na jinou stránku administrace, budete přesměrováni zpět na aktuální stránku ukázky. Pokud nechcete pokračovat a nemůžete ukončit ukázku, přejděte na <em>Pluginy » Take A Tour</em> což ukončí probíhající ukázku.';
-$lang['takeatour_configpage'] = 'Prohlédni si » Seznam ukázek';
-$lang['Prev'] = 'Předchozí';
-$lang['Next '] = 'Další';
-$lang['End tour'] = 'Konec ukázky';
-$lang['First Contact'] = 'První Kontakt';
-$lang['first_contact_descrp'] = 'Doporučené pro začátečníky, tato ukázka vás seznámí s Piwigo a jeho základními funkcemi. Na začátek vás tato ukázka seznámí zejména s tím jak přidávat fotky a spravovat je. Ukázka končí prací kolem správy album a úpravami jeho základního nastavení, šablon vzhledu a modulů.';
-$lang['2.7 Tour'] = 'Ukázka 2.7';
-$lang['2_7_0_descrp'] = 'Zjisti co je nového v Piwigo 2.7';
-$lang['Privacy'] = 'Soukromí';
-$lang['privacy_descrp'] = 'Tato ukázka prezentuje vše okolo ochrany vašich fotografií před veřejným přístupem díky možnostem nastavit oprávnění pro přístup na každé album a fotku a zamezení snadnému kopírování použitím aktivní ochrany obrázků.';
diff --git a/plugins/TakeATour/language/cs_CZ/tour_2_7_0.lang.php b/plugins/TakeATour/language/cs_CZ/tour_2_7_0.lang.php
deleted file mode 100644
index dac805663..000000000
--- a/plugins/TakeATour/language/cs_CZ/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_title1'] = 'Vítejte ve fotogalerii Piwigo 2.7';
-$lang['2_7_0_stp1'] = 'Dobrý den! Já budu váš průvodce po aplikaci Piwigo. Prosím následujte mých pokynů a klikněte na Další (nebo použijte šipky na vaší klávesnici) pro posun a navigaci. Pokud půjdete na jinou stránku administrace, budete přesměrování na poslední aktuální stránku ukázky.';
-$lang['2_7_0_title2'] = 'Nové funkce';
-$lang['2_7_0_stp2'] = 'Jak můžete vidět, přibyl nový základní plugin: Take A Tour. Tento plugin vám pomůže s průzkumem app Piwigo. Zde najdete seznam aktuálích ukázek.<br>Seznam nejdete <em>Pluginy » Take A Tour</em>';
-$lang['2_7_0_title4'] = 'Vyhledávač';
-$lang['2_7_0_stp4'] = 'Stránka s vyhledáváním byla přepracována: možnost zvolit určité dopady a klíčová slova na které je brán zvýšený důraz při vyhledávání, seznam autorů v databázi, auto-doplnění ze seznamu štítků, auto-doplnění ze seznamu alb...';
-$lang['2_7_0_title5'] = 'Čas';
-$lang['2_7_0_stp5'] = 'Nyní lze nastavit datum a čas v minutách a hodinách pomocí posuvníku';
-$lang['2_7_0_title6'] = 'Volby pro výběr';
-$lang['2_7_0_stp6'] = 'Bloky pro výběr album, štítků, atd. byli změněny na nový více pro uživatele přívětivý. Otestujte níže';
-$lang['2_7_0_title7'] = 'Řazení alb podle datum';
-$lang['2_7_0_stp7'] = 'Nyní lze seřadit alba na základě data vytvoření fotek a nebo podle data uveřejnění';
-$lang['2_7_0_title8'] = 'Vyprazdnění výběru';
-$lang['2_7_0_stp8'] = 'Snadný rychlý odkaz pro vyprázdnění výběru na jedno kliknutí.';
-$lang['2_7_0_title9'] = 'Vyhledávací filtr';
-$lang['2_7_0_stp9'] = 'Filtr byl implentován do batch manageru. Umí nyní vyhledávat pomocí datum, štítků, rozlišení, názvu souboru a také umožňuje volby logického typu zcela souhlasí, a/nebo, množiny, vyloučení. Můžete si přečíst detailní popis později. Stejné možnosti nyní nabízí také samotné pole pro veřejné vyhledávání na webu v menu.';
-$lang['2_7_0_title10'] = 'Filtr podle velikosti souboru';
-$lang['2_7_0_stp10'] = 'Filtr podle velikosti souboru byl také přidán do batch manageru. Lze zvolit rozsah od min a max a opačně.';
-$lang['2_7_0_title11'] = 'Naviděnou u další verze!';
-$lang['2_7_0_stp11'] = 'Tato ukázka skončila.<p style="text-align:center">Užijte si vaše nové Piwigo 2.7!</p>Pokud jste si oblíbili fotogalerii Piwigo a chcete nám pomoci, můžete přispět do jeho překladu do češtiny nebo také přispět finančně, apod. <a href="http://piwigo.org/basics/contribute" target="_blank">KLikněte pro možnosti jak nám pomoci</a> Děkujeme!';
-$lang['2_7_0_title2b'] = 'Nový upload formulář';
-$lang['2_7_0_stp2b'] = 'Nový formulář pro import souborů fotografií v Piwigo 2.7 je vytvořen na technologii HTML5 a předtím byl použit Flash, což má jednu podstatnou výhodu v lepší kompatibilitě s novými typy prohlížečů zejména na mobilních zařízeních. Soubory lze vkládat pouhým přetažením z vaší pracovní plochy diky fci drag & drop která umožní pohodlnější označení a vložení vícero fotografií najednou!'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/cs_CZ/tour_first_contact.lang.php b/plugins/TakeATour/language/cs_CZ/tour_first_contact.lang.php
deleted file mode 100644
index 3870df6eb..000000000
--- a/plugins/TakeATour/language/cs_CZ/tour_first_contact.lang.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-$lang['first_contact_title1'] = 'Vítejte v Piwigo galerii';
-$lang['first_contact_stp1'] = 'Dnes budu vaší příručkou k objevení Piwiga. Prosím následujte mých instrukcí a klikněte na Další (nebo použijte směrová tlačítka šipek na vaší klávesnici) pro posun dále. Pokud kliknete na jinou stránku administrace, budete přesměrování nazpátek na poslední aktivní stranu ukázky. Pokud chcete ukonřit prohlídku, přejděte na menu <em>Pluginy » Take A Tour</em> což ukončí prohlídku.<br>Nyní můžete začít vkládat fotografie!';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_stp2'] = 'Odkaz je tady. Klikněte na něj nebo klikněte na Další k ukončení prohlídky';
-$lang['first_contact_title3'] = 'Vložení fotografií';
-$lang['first_contact_stp3'] = 'Tato první záložka je tam kde se dají vkládat fotografie přímo skrze váš prohlížeč následující záložky jsou o dalších možnostech vkládání fotek';
-$lang['first_contact_title4'] = 'Jak vložit fotku!';
-$lang['first_contact_stp4'] = 'Zaprvé vyběrte album; případně si jedno vytvořte pokud zatím žádné nemáte.';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_stp5'] = 'Nyní klikněte na tlačítko pro výběr fotek k vložení nebo je jen pomocí chyť a pust přetáhnete do okna z vašeho PC.';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_stp6'] = 'Nyní vidéte že se tyto fotografie vložili do seznamu. Pokud už jste vložili všechny fotky kliknete na Upload';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_stp7'] = 'Zde je výpis všech vložených fotek. Vidíte zároveň jejich náhledy. Můžete:<ul><li>spravovat všechny fotky skrze Batch Manager</li><li>editovat vlastnosti fotek kliknutím na ně</li><li>vkládat další fotky</li></ul>';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_stp8'] = 'Upravte je! Klikněte na odkaz.';
-$lang['first_contact_title9'] = 'Batch Manager';
-$lang['first_contact_stp9'] = 'Nyní jste v Batch Manažerovi, kde můžete hromadně upravovat množství fotek.<br><br>Zde je nastaven předfitlr pro "Košík" protože jsme přišli ze stránky pro upload fotek.';
-$lang['first_contact_title10'] = '';
-$lang['first_contact_stp10'] = 'Zde je odkaz na přímý vstup do košíku: což je nástroj pro správce pro snazší práci s fotkami ve chvíli kdy je prohlížíte přímo na webuv album a zároveň je chcete editovat v Batch Manageru.<br><br>Můžete vkládat fotky do košíku z veřejné části galerie po přihloášení jako administrátor nebo použít tlačítko "Vložit do kočíku" v Batch Manažeru.';
-$lang['first_contact_title11'] = 'Jak editovat fotku';
-$lang['first_contact_stp11'] = 'Odtud můžete vybrat jednu nebo více fotek';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_stp12'] = 'pak je upravte použitím této akce';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_stp13'] = 'Lze upravit popisek a ještě více díky batch manageru v základním módu. Ale nyní, zůstaneme u rozšířeného módu';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_stp14'] = 'Zde vidíte <b>stránku pro editaci</b> jedné fotky. Tato stránka je dostupná odtud ale i z veřejné části galerie po přihlášení se jako správce.<br><br>Najeďte na náhled fotky a klikněte na editovat.';
-$lang['first_contact_title15'] = 'Stránka pro úpravu fotky';
-$lang['first_contact_stp15'] = 'na této stránce můžete editovat veškeré vlastnosti fotky, pro ukázku...';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_stp16'] = '...ve kterém album je fotka zařazena.<br><br>Takže zde přidávat nebo odebírat fotky z alb. Odkaz je virtuální, žádné fotky tedy nejsou fyzicky přesouvány jinam.';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_stp17'] = 'Zde můžete nastavit fotku jako náhled pro jedno nebo více vašich fotoalb. Fotku nelze použít pro přiřazení k album jako jeho náhled. Pokud je fotka přiřazena k album, je jednodušší nastavit fotku jako náhled pro album z veřejné části ve správě fotky (tip: použijte plugin Admin Tools pro ještě větší zjednodušení).';
-$lang['first_contact_title18'] = 'Správa alb';
-$lang['first_contact_stp18'] = 'Zde se podívejte jak spravovat alba. Nyní klikněte na <em>album » Upravit</em> nebo klikněte na Další';
-$lang['first_contact_title19'] = 'Správa alb';
-$lang['first_contact_stp19'] = 'Zde jsou vypsány všechna \'root\' alba. Pokud vidíte album s barevným pozadím, znamená to fyzické album s FTP synchronizací. Fyzické album nemůže být přesunuto nebo odstraněno. Ostatní jsou nazývána jako virtuální alba.';
-$lang['first_contact_stp19_b'] = 'Zde jsou vypsány všechna \'root\' alba.';
-$lang['first_contact_title20'] = 'Správa alb';
-$lang['first_contact_stp20'] = 'Když přejedete ukazatelem myši přez album, zobrzaí se odkazy a informace o něm. Když uchopíte myší album -zaoblený blok-, můžete upravit jeho umístění a poté uložit nebo ukončit váš ruční výběr.';
-$lang['first_contact_title21'] = 'Další záložka';
-$lang['first_contact_stp21'] = 'Další záložka je stánka můžete přesunout libovolné virtuální album.<br>Tabulka odkazů nastavuje pro každé album url odkaz.<br>Ale teď editujte album: klikněte na Editace alba';
-$lang['first_contact_title22'] = 'Stránka Editace Album';
-$lang['first_contact_stp22'] = 'Podobně jako na stránce pro editace fotek zde můžete nastavovat vlastnosti album';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_stp23'] = 'Uzamčení album znamení že je přístupné jen správci: to je dobré když teprve do alba vkládáte fotky než ho tzv. uvěřejníte';
-$lang['first_contact_title28'] = 'Konfigurace';
-$lang['first_contact_stp28'] = 'Nyní se podíváme na dostupné volby pro nastavení Piwiga. Klikněte na Konfiguraci->Možnosti nebo prostě klikněte na Další.';
-$lang['first_contact_title29'] = '<em>Konfigurace » Možnosti » Výchozí</em>';
-$lang['first_contact_stp29'] = 'Zde, na této první straně, můžete nastavit základní a výchozí konfiguraci vaší galerie.';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_stp30'] = 'Zkuste začít změnou názvu galerie';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_stp31'] = 'Pak se lišta co se zobrazuje nahoře na každé stránce. Jak můžete vidět, HTML štítky jsou tady. Také lze použít %gallery_title% štítek pro zobrazení nadpisu který jste zadávali dříve.';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_stp32'] = 'Uložte vaše úpravy';
-$lang['first_contact_title33'] = 'Nastavení návštěvníků';
-$lang['first_contact_stp33'] = 'Na závěr k možnostem nastavení, tzv. \'Nastavení návštěvníků\' stránka slouží pro nastavení parametrů pro nezaregistrované kolemjdoucí návštěvníky vaší galerie. Pokaždé když Piwigo odkazuje na \'guest\' takt o znamená nepřihlášeného návštěvníka.<br>Nyní skončíme s konfiguracemi: Klikněte na <em>Konfigurace » Šablony</em> nebo jen klikněte na Další.';
-$lang['first_contact_title34'] = 'Šablony';
-$lang['first_contact_stp34'] = 'Výběr vzhledu je první krok pro vaše přizpůsobení si Piwigo. Nainstalované vzhledy jsou na seznamu tady.<br>Jen jedna šablona může být aktivní: uživatelé mohou vybírat ze šablon které jsou zde, pokud je vloba \'Povolit uživatelské přízpůsobení\' aktivní na stránce Možností.';
-$lang['first_contact_title35'] = 'Šablony';
-$lang['first_contact_stp35'] = 'Nastavte si vaši oblíbenou šablonu vzhledu.';
-$lang['first_contact_title37'] = 'Šablony';
-$lang['first_contact_stp37'] = 'Pro instalaci nových šablon, je lze přímo stáhnout ze záložky \'Přidat šablonu\'. Jen šablony označené jako kompatibilní s vaší nynější verzí Piwigo jsou zobrazeny.<br><br>Tak a nyní objevte moduly! Klikněte na <em>Pluginy » Správa</em>';
-$lang['first_contact_title38'] = 'Pluginy';
-$lang['first_contact_stp38'] = 'Pluginy jsou snadnou cestou jak rozšířit funkce vašeho Piwiga. Umí mnoho různých věcí od malých úprav po velmi složité funkce, třeba jako Community plugin který umožní ne-administratorům možnost přidávání fotek bez nutnosti se přihlásit jako správce.';
-$lang['first_contact_title39'] = 'Pluginy';
-$lang['first_contact_stp39'] = 'Na této první stránce jsou zobrazeny nainstalované pluginy.<br><br>Nahoře jsou vypsány aktivované pluginy, a jejich funkce lze ihned používat.<br><br>Pod nimi následnují pluginy které jsou k dispozici ale nejsou nyní aktivovány.<br><br>Odstraněním pluginu dojde k odstranění nejen nastavení, ale i jeho dat a souborů. Pro většinu pluginů platí, že pouhou deaktivací tedy nikoliv vymazáním dojde k zachování jejich nastavení a dat která obsahují.';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_stp40'] = 'Tady jsem já! Nyní mě nedeaktivujte, ale vidíte že můžete Deaktivovat nebo Obnovit plugin.';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_stp41'] = 'Můžete vidět na poslední záložce všechny dostupné pluginy pro vaši věrzi Piwigo. Stovky pluginů jsou zde!';
-$lang['first_contact_title43'] = 'A to je konec';
-$lang['first_contact_stp43'] = 'Tahle ukázka byla docela dlouhá, ale přesto jste viděli jen malou část toho co vše Piwigo umí. Vše jednou skončí a tato ukázka je u konce.<br><br>Můžete se podívat hlouěji na možnosti Piwigo galerie shlédnutím další ukázky nebo čtením naší dokumentace v AJ na piwigo.org webu.<br><br>Také lze použít odkaz na nápovědu Help nahoře v pravém rohu na každé stránce administrace.<p style="text-align:center">Používejte vaše Piwigo!</p>';
diff --git a/plugins/TakeATour/language/cs_CZ/tour_privacy.lang.php b/plugins/TakeATour/language/cs_CZ/tour_privacy.lang.php
deleted file mode 100755
index 33f97d0e9..000000000
--- a/plugins/TakeATour/language/cs_CZ/tour_privacy.lang.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2015 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['privacy_stp22'] = '<em>pro pokročilé uživatele</em><br>V Piwigo, můžete chránit původní fotografie pomocí místní konfigurace. Pomocí proměnné $conf[\'original_url_protection\']: ve výchozím nastavení prázdné, nastavte hodnotu na "images" a tím nastavíte ochranu pouze fotografiím nebo hodnotu "all" a tím chráníte i všechny ostatní typů médií na serveru. <br> Tato volba funguje pro veřejný i soukromý obsah. Tato možnost v současné době vyžaduje, abyste odepřeli dostupnost do složky /upload a /galeries, pomocí .htaccess souboru (obvykle textový soubor s "Deny from all" pro obsah) nebo konfigurací serveru. <br> Prosím berte na vědomí, že názvy souborů fotek nahraných za použití jiné metody než FTP jsou <b>náhodné</b>, takže je nemožné odhadnout: že název souboru, a tak i cesta k originální fotografii může být zjištěna až v případě, že návštěvník má přístup ke změněné verzi této fotky, podobně jako u miniatur. $conf[\'original_url_protection\'], a popírat přístup ke složkám /upload a /galeries má za účel zabránit této věci.';
-$lang['privacy_stp4'] = 'Takže tu máme dva systémy pro správu přístupových oprávnění na fotografiích. Jsou nezávislé, takže si můžete vytvořit skupinu s názvem Rodina, ale skupina nemá nic společného s úrovní ochrany soukromí rodiny. <br> Hladiny soukromí jsou aplikovány na fotografie, skupiny / uživatelská oprávnění jsou použity pro každé album. Můžete používat oba nebo jen jeden systému je flexibilní. <br> <br> Další stránka je o správě skupin.';
-$lang['privacy_stp24'] = 'Tento průvodce je u konce. <p style="text-align:center"> Užijte si Piwigo! </p> Pokud se vám líbí Piwigo a chcete nás podpořit, můžete přispět tím, že pomáháte s překlady, darem, atd. <A href="http://piwigo.org/basics/contribute" target="_ blank"> Klikněte zde pro podpoření </a>. Díky!';
-$lang['privacy_stp20'] = 'Nyní víte, jak udržet své fotky v soukromí, ale můžete uvažovat o tom, jak chránit své veřejné fotografie. Možná přemýšlíte o blokování návštěvníka aby nemohl stáhnout fotografii: nemůžete, protože web byl vytvořen tímto způsobem (prohlížeč návštěvníka stáhne všechny prostředky zobrazují a mnohé další). Klepnutí pravým tlačítkem myši lze zakázat, prázdná vrstva může být zobrazena přes fotografie a tak dále, ale nelze zakázat stahování. Kompletní webové stránky mohou být uloženy libovolným webovým prohlížečem.';
-$lang['privacy_stp10'] = 'Jsme v seznamu alb který je k dispozici v nabídce pomocí <em>Alba » Správa</em><br><br> Upravte album tak že na něj najedete myší a potom klikněte na Upravit.';
-$lang['privacy_stp9'] = '... a vyberte akci "Kdo může vidět fotografie?". Nyní můžete změnit úroveň ochrany vybraných fotografií. <br>, Ale můžete to také udělat pro konkrétní fotografii na její editační stránce. K ní máte přístup z veřejné části, nebo tady. <br> <br> Teď jsme vám ukázali jiný systém práv na alba na základě uživatelů a skupin uživatelů.';
-$lang['privacy_stp7'] = '... nebo to můžete udělat později, tady v dávkovém spracování v globálním režimu. <br> Toto je stránka <em> Fotografie »Poslední fotografie </ em>, takže filtr je nastaven jako "poslední import".';
-$lang['privacy_stp5'] = 'Níže je vysvětleno, jak lze spravovat skupiny. <br> Tato oprávnění jsou pouze pro přístup fotografiím a albům, při procházení ve veřejné části, nebo pro externí aplikace. Později uvidíme další ochranu, ale pojďme teď k praktické části!';
-$lang['privacy_stp17'] = 'Skupina v Piwigo je jen sada uživatelů: tak skupiny usnadňují správu oprávnění alb, a správu vlastnosti uživatelů. Zde je stránka, kde můžete spravovat skupiny, tj přejmenovat, sloučit, duplikovat, odstranit je. Můžete také nastavit jednu nebo více skupin jako "výchozí skupina", což znamená, že nově registrovaní uživatelé budou přiřazeni těmto výchozím skupinám.';
-$lang['privacy_stp16'] = 'Stejně jako na vašem počítači, můžete si vybrat několik alb pomocí tlačítka Shift a Control, pak klikněte na šipku k jejich přepnutí. <br> A teď nám dovolte, abychom představili skupiny.';
-$lang['privacy_stp19'] = 'Zde můžete rychle upravit uživatele tím že přejedete myší nad ním a pak klikněte na odkaz Upravit. <br> <br> Můžete vybrat více uživatelů a upravovat je najednou a pak výběrem změnu použít.';
-$lang['privacy_stp14b'] = 'Důležitý fakt: na straně veřejnosti, oprávnění platí pro webmastery a správce jako pro ostatní uživatele. V administraci, mohou správci přistupovat k jakékoli fotografii nebo albu.';
-$lang['privacy_stp15'] = 'Těsně předtím, než vysvětlíme skupiny, zde je tip: odkaz na stránku kde lze nastavit soukromé / veřejné několika albům najednou. Klikněte na něj';
-$lang['privacy_stp21'] = 'Řěšení jsou: <ul><li>přidat vodoznak, aspoň pro střední a velké fotky.</li><li>dále zrušit XL a XXL velikosti.</li><li>a zrušit vysoké rozlišení (stažení a zobrazení originální fotografie) pro uživatele.';
-$lang['privacy_stp2'] = 'Zde můžete vstoupit do integrované nápovědy. Klikněte na Další pro pokračování přímo na stránku nápovědy o správě práv';
-$lang['privacy_stp18'] = 'Pro správu asociace mezi uživateli a skupinou, použijte stránku <em>Uživatelé » Správa</em>';
-$lang['privacy_stp6'] = 'Když nahrajete fotky, můžete změnit úroveň soukromý nahraných fotek právě tam...';
-$lang['privacy_stp1'] = 'Dobrý den! Budu váš průvodce a společně zjistíme, jak chránit vaše fotografie v Piwigo. Prosím, postupujte podle mých instrukcí, a klepněte na tlačítko Další (nebo pomocí šipek na vaší klávesnici). Vydáte-li se na jinou stránku administrace, budete přesměrováni na aktuální stránku průvodce. Pokud se zasekne nebo nepůjde ukončit průvodce, použijte <em> Doplňky » Take A Tour </ em> a tak se ukončí průvodce. <br> Tak začněme!';
-$lang['privacy_title9'] = 'Úroveň soukromý';
-$lang['privacy_title7'] = 'Úroveň soukromý';
-$lang['privacy_title8'] = 'Úroveň soukromý';
-$lang['privacy_title5'] = 'Práva > Skupiny';
-$lang['privacy_title6'] = 'Úroveň soukromý';
-$lang['privacy_title3'] = 'Práva';
-$lang['privacy_title4'] = 'Práva';
-$lang['privacy_title22'] = 'Lokální nastavení: Originální ochrana';
-$lang['privacy_title24'] = 'Byl to skvělý čas';
-$lang['privacy_title20'] = 'Veřejné fotky';
-$lang['privacy_title21'] = 'Veřejné fotky';
-$lang['privacy_title19'] = 'Uživatelé';
-$lang['privacy_title2'] = 'Pomoc uvnitř vašeho Piwigo';
-$lang['privacy_title17'] = 'Skupiny';
-$lang['privacy_title18'] = 'Skupiny';
-$lang['privacy_title12'] = 'Práva alba';
-$lang['privacy_title15'] = 'Tip';
-$lang['privacy_title10'] = 'Práva alba';
-$lang['privacy_title11'] = 'Práva alba';
-$lang['privacy_stp8'] = 'Vyberte jednu nebo více fotek...';
-$lang['privacy_title1'] = 'Vítejte v průvodci soukromým';
-$lang['privacy_stp11'] = 'Nyní klikněte na záložku Práv';
-$lang['privacy_stp12'] = 'Na této stránce můžete zvolit alba která budou dostupná pro všechny nebo pouze některým uživatelům';
-$lang['privacy_stp13'] = 'Nyní klikněte na soukromé';
-$lang['privacy_stp14'] = 'Pak uživatelé a skupiny uživatelů mohou dostat přístup do alba.';
-$lang['privacy_stp3'] = 'Udělejte si čas a přečtěte si následující informace.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/da_DK/description.txt b/plugins/TakeATour/language/da_DK/description.txt
deleted file mode 100755
index a214b94b2..000000000
--- a/plugins/TakeATour/language/da_DK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Besøg din Piwogo for at opdage dens muligheder. Plugin'en har flere tematiske udflugter for begyndere og avancerede brugere. \ No newline at end of file
diff --git a/plugins/TakeATour/language/da_DK/index.php b/plugins/TakeATour/language/da_DK/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/da_DK/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/da_DK/plugin.lang.php b/plugins/TakeATour/language/da_DK/plugin.lang.php
deleted file mode 100755
index bf0bf37d0..000000000
--- a/plugins/TakeATour/language/da_DK/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['TAT_descrp'] = 'Velkommen! Her finder du alle tilgængelige udflugter, som hjælper dig med at gå på opdagelse i dit Piwigo-galleris funktionalitet.<br>Start udflugten herunder, følg dernæst vejledningen. Klik Næste/Foregående (eller anvend pilene på dit tastatur) for at navigere under udflugten. Hvis du går til en anden administrationsside under udflugten, vil du blive stillet videre til dens aktuelle side. Hvis du er kørt fast og ikke kan afslutte udflugten, vil den blive afsluttet ved at gå til <em>Plugins » Take A Tour</em>.';
-$lang['Start the Tour'] = 'Start udflugten';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Tag på en udflugt og opdag hvordan dit Piwigo-galleri fungerer » Gå til tilgængelige udflugter';
-$lang['Visit your Piwigo!'] = 'Besøg din Piwigo!';
-$lang['takeatour_configpage'] = 'Take A Tour » Udflugtsliste';
-$lang['End tour'] = 'Afslut udflugt';
-$lang['Next '] = 'Næste';
-$lang['Prev'] = 'Forrige';
-
-$lang['First Contact'] = 'Indledning';
-$lang['first_contact_descrp'] = 'Udflugten, som er anbefalet til begyndere, gør dig bekendt med Piwigo og de grundlæggende funktioner. Den begynder med at tilføje billeder og fortsætter med håndteringen af dem. Udflugten går videre med håndtering af album og tilladelser, og den slutter med tilpasning ved hjælp af opsætningensiden, temaerne og plugins.';
-
-$lang['2.7 Tour'] = 'Udflugt i 2.7';
-$lang['2_7_0_descrp'] = 'Opdag nyhederne i Piwigo 2.7';
-
-$lang['privacy_descrp'] = 'Denne udflugt præsenterer dig for alle de måder, du kan beskytte et fotografi mod offentlig adgang ved hjælp af rettighedssysteer pr. album og pr. billede, og mod kopiering ved hjælp af billedbeskyttelser.';
-$lang['Privacy'] = 'Privatliv'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/da_DK/tour_2_7_0.lang.php b/plugins/TakeATour/language/da_DK/tour_2_7_0.lang.php
deleted file mode 100644
index b3f5ee826..000000000
--- a/plugins/TakeATour/language/da_DK/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_stp4'] = 'Søgesiden er lavet om: Mulighed for at vælge egenskaber, som gælder ordsøgningen, opremse forfattere fundet i databasen, automatisk fuldførelse af tagliste, automatisk fuldførelse af albumliste ...';
-$lang['2_7_0_stp5'] = 'Ud over datoen kan man opsætte tidspunktet, ved hjælp af time- og minutslidere';
-$lang['2_7_0_stp6'] = 'Scriptet til udvælgelse af albummer, tags, osv. er udskiftet til et mere brugervenligt. Afprøv det neden for';
-$lang['2_7_0_title4'] = 'Søgeside';
-$lang['2_7_0_title5'] = 'Tid';
-$lang['2_7_0_title6'] = 'Udvælgelsesscript';
-$lang['2_7_0_stp1'] = 'Hej! Jeg vil vise dig rundt i Piwigo. Følg min vejledning, og klik på Næste (eller benyt pilene på dit tastatur) for at navigere. Hvis du går til en anden side, vil du blive stillet videre til udflugtens aktuelle side.';
-$lang['2_7_0_stp11'] = 'Udflugten er slut.<p style="text-align:center">God fornøjelse med Piwigo 2.7!</p>Hvis du kan lide Piwigo og ønsker at støtte os, kan du bidrage ved at hjælpe med oversættelser, donationer, osv. <a href="http://da.piwigo.org/basics/contribute" target="_blank">Klik her for at støtte os</a>';
-$lang['2_7_0_stp2'] = 'Som du kan se, er der tilføjet en ny standardplugin: Take A Tour (Tag på en udflugt). Plugin\'en hjælper dig med at udforske din Piwigo. Her er alle tilgængelige udflugter opremset.<br>Siden er tilgængelig under <em>Plugins » Take A Tour</em>';
-$lang['2_7_0_title1'] = 'Velkommen i Piwigo 2.7';
-$lang['2_7_0_title11'] = 'Vi ses snart igen!';
-$lang['2_7_0_title2'] = 'Første nye funktion';
-$lang['2_7_0_stp10'] = 'Et filer på filstørrelser er også føjet til Batch Manager. Man kan vælge et interval med en minimum- og en maksimumværdi.';
-$lang['2_7_0_stp2b'] = 'Den nye uploadformular i Piwigo 2.7 er baseret på HTML5 i stedet for Flash, hvilket betyder bedre kompatibilitet med moderne webbrowsere foruden en forøget pålidelighed på langsomme forbindelser. Desuden vil træk og slip gøre det meget lettere at vælge fotografier fra ens filbrowser!';
-$lang['2_7_0_stp7'] = 'Man kan nu sortere sine albummer baseret på fotografiernes optagelsesdato eller offentliggørelsedato.';
-$lang['2_7_0_stp8'] = 'Med et let handlingslink an kurven nu tømmes med et enkelt klik.';
-$lang['2_7_0_stp9'] = 'Et søgefilter er tilføjet til Batch Manager. Det leveres med en stærk syntaks til at fotosøgning efter datoer, tags, størrelse, filnavn og har desuden søgevalgmulighedner så som præcist sammenfald, AND/OR, grupering, fravalgt. Senere kan du læse den detaljerede hjælp. Den samme syntaks anvendes i feltet til hurtigsøgning i den offentlige sidemenu.';
-$lang['2_7_0_title10'] = 'Filstørrelsesfilter';
-$lang['2_7_0_title2b'] = 'Ny uploadformular';
-$lang['2_7_0_title7'] = 'Sorter albummer efter dato';
-$lang['2_7_0_title8'] = 'Tøm din kurv';
-$lang['2_7_0_title9'] = 'Søgefilter'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/da_DK/tour_first_contact.lang.php b/plugins/TakeATour/language/da_DK/tour_first_contact.lang.php
deleted file mode 100644
index 2ed811284..000000000
--- a/plugins/TakeATour/language/da_DK/tour_first_contact.lang.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-$lang['first_contact_stp1'] = 'Hej! Jeg vil vise dig rundt i Piwigo. Følg min vejledning, og klik på Næste (eller benyt pilene på dit tastatur) for at navigere. Hvis du går til en anden administrationsside, vil du blive stillet videre til udflugtens aktuelle side. Hvis du er kørt fast og ikke kan afslutte udflugten, vil den blive afsluttet ved at gå til <em>Plugins » Take A Tour</em>.<br>Lad os begynde med at tilføje billeder!';
-$lang['first_contact_stp10'] = 'Her er et link, som du direkte kan tilgå din kurv med: Det er et værktøj til administratorer, som gør det let at tilføje billeder til et sæt, hvis man ønsker at redigere dem i Batch Manager. Du kan tilføje billeder til kurven fra den offentlige billedside, når du er logget på som administrator, eller benytte handlingen \"Føj til kurv\" i Batch Manager';
-$lang['first_contact_stp11'] = 'Det vil sige, at du herfra kan vælge et eller flere fotografier';
-$lang['first_contact_stp13'] = 'Du kan redigere beskrivelser og mere fra Batch Manager i enhedstilstand. Men lige nu bliver vi i den gloable tilstand';
-$lang['first_contact_stp14'] = 'Du ser et enkelt billedes redigeringsside. Siden er tilgængelig herfra, men også fra den offentlige billedside, når man er logget på som administrator. Klik på Rediger og gå til næste punkt';
-$lang['first_contact_stp15'] = 'På den side kan du redigere alle et billedes egenskaber, eksempelvis ...';
-$lang['first_contact_stp16'] = '... i hvilke(t) album(mer) fotografiet befinder sig.<br><br>Her kan du tilføje eller fjerne fotografiet fra albummer. Linket er virtuelt, ingen fotografier vil nogensinde blive fjernet fysisk.';
-$lang['first_contact_stp2'] = 'Linket er her. Klik på Næste for at fortsætte';
-$lang['first_contact_stp20'] = 'Når din mus svæver over et album, viser links og oplysninger sig. Når du trækker og slipper et album - en blok med afrundede hjørner - ændrer du dets placering og du kan dernæst gemme eller annullere din manuelle rækkefølge.';
-$lang['first_contact_stp6'] = 'Du kan se, at fotografier opremses. Tilføj mindst to fotografier, og når de er klar, så klik på knappen Start upload';
-$lang['first_contact_stp7'] = 'Her er et resume af dine uploadede billeder. Bemærk at Piwigo af sig selv har genereret miniaturebillederne. Du kan nu tilføjet flere fotografier ved hjælp af linket nederst, redigere et billedes egenskaber ved at klikke på det eller klikke for at håndtere alle uploadede billeder i Batch Manager...';
-$lang['first_contact_stp8'] = 'Lad os redigere dem! Klik på linket.';
-$lang['first_contact_stp9'] = 'Du er nu i Batch Manager, hvor man kan masseredigere flere billeder.<br><br>Her er Kurven opsat som et filter, fordi vi kommer fra siden med uploadresultatet.';
-$lang['first_contact_stp40'] = 'Hov, det er mig! Deaktiver mig ikke nu, men den kan se, at en aktiveret plugin både kan deaktiveres og genaktiveres.';
-$lang['first_contact_stp41'] = 'På den sidste fane ser man alle tilgængelige plugins til din version af Piwigo. Der er hundredvis af plugins!';
-$lang['first_contact_stp43'] = 'Udflugten var ganske lang, og alligevel har vi kun set en lille del af alt det Piwigo kan. Alt må slutte et sted, og denne gennemgang er færdig.<br><br>Du kan udforske Piwigos funktionalitet meget grundigere, ved at tage på en anden udflugt eller ved at læse vores dokumentation på hjemmesiden piwigo.org.<br><br>Glem ikke Hjælp-linket øverst til højre på alle administrationssider.<p style="text-align:center">God fornøjelse med din Piwigo!</p>';
-$lang['first_contact_stp38'] = 'Med plugins er det meget let at tilpasse din Piwigo. De kan næsten alt, hvad man kan forestille sig, fra som teksttilføjelser til komplet funktionalitet, så som Community-plugin\'en, der gør det muligt for brugere, der ikke er administratorer, at uploade uden at gå ind i administrationsdelen.';
-$lang['first_contact_stp39'] = 'På den første side er de installerede plugins opremset. Øverst vises de aktive plugins, det vil sige dem der pt. kører. I bunden vises de plugins, som er installeret i /plugin-mappen, men som er deaktiveret. Slettes en plugin, betyder det at ethvert spor af den bliver fjernet (filer, valgmuligheder, osv.). Ved de fleste plugins bevares dens data, hvis den deaktiveres.';
-$lang['first_contact_stp4'] = 'Vælg først et album, opret et hvis der endnu ikke er nogen.';
-$lang['first_contact_stp37'] = 'For at installere nye temaer, kan de downloade dem direkte fra fanen "Tilføj et tema". Kun temaer markeret som kompatible med din version af Piwigo, bliver vist.<br>Lad os nu udforske plugins! Klik på Plugins -> Håndter';
-$lang['first_contact_title43'] = 'Det har været hyggeligt';
-$lang['first_contact_title9'] = 'Batch Manager';
-$lang['first_contact_title33'] = 'Gæsteindstillinger';
-$lang['first_contact_title34'] = 'Temaer';
-$lang['first_contact_title35'] = 'Temaer';
-$lang['first_contact_title37'] = 'Temaer';
-$lang['first_contact_title38'] = 'Plugins';
-$lang['first_contact_title39'] = 'Plugins';
-$lang['first_contact_title4'] = 'Lad os tilføje et fotografi!';
-$lang['first_contact_title15'] = 'Redigering af et fotografi';
-$lang['first_contact_title18'] = 'Håndtering af albummer';
-$lang['first_contact_title19'] = 'Håndtering af albummer';
-$lang['first_contact_title20'] = 'Håndtering af albummer';
-$lang['first_contact_title21'] = 'Andre faner';
-$lang['first_contact_title22'] = 'Side til redigering af album';
-$lang['first_contact_title28'] = 'Opsætning';
-$lang['first_contact_title29'] = '<em>Opsætning » Valgmuligheder » Generelt</em>';
-$lang['first_contact_title3'] = 'Side til tilføjelse af fotografier';
-$lang['first_contact_title1'] = 'Velkommen i dit Piwigo-galleri';
-$lang['first_contact_title11'] = 'Hvordan et fotografi redigeres';
-$lang['first_contact_stp33'] = 'Lige et sidste ord om valgmulighederne, siden "Gæsteindstillinger" er beregnet til at opsættes ikke-registrerede brugeres præferencer. Hver gang Piwigo refererer til "guest", betyder det ikke-registerede brugere.<br>Lad os fortsætte med Opsætning: klik på Opsætning -> Temaer eller klik blot på Næste. ';
-$lang['first_contact_stp28'] = 'Nu tager vi et kig på de valgmuligheder, som er tilgængelige for at opsætte Piwigo til at fungere på din måde. Klik på Opsætning -> Valgmuligheder eller klik blot på Næste.';
-$lang['first_contact_stp29'] = 'Her på den første side, opsættes de afgørende og grundlæggende valgmuligheder i dit galleri.';
-$lang['first_contact_stp3'] = 'Den første fane er hvor du tilføjer fotografier direkte fra din browser. De andre faner handler om andre måder, at overføre fotografier på';
-$lang['first_contact_stp30'] = 'Lad os begynde med at ændre titlen';
-$lang['first_contact_stp31'] = 'Dernæst banneret, som vises på toppen af alle sider. Som du kan se, er HTML-tags tilladt her. Du kan også anvende tag\'et %gallery_title% for at vise titlen, du netop skrev herover.';
-$lang['first_contact_stp32'] = 'Gem nu dine ændringer';
-$lang['first_contact_stp22'] = 'Som ved billeder, kan man her redigere et albums egenskaber';
-$lang['first_contact_stp23'] = 'Låsning af et album betyder, at kun administratorer vil have mulighed for at se albummet: det benyttes normalt når en administrator ændrer på et albums egenskaber eller ikke ønsker at offentliggøre albummet med det samme';
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_stp5'] = 'Klik dernæst på knappen for at vælge hvilke fotografier, der skal sendes, eller træk og slip blot filerne.';
-$lang['first_contact_stp34'] = 'Valg af tema er første skridt i tilpasning af Piwigo. Installerede temaer opremses her.<br>Mere end ét tema kan være aktiveret: brugere kan ændre deres tema ved at vælge blandt dem, der er aktiveret her, hvis \'Tillad brugertilpasning\' er valgt på valgmulighedssiden.';
-$lang['first_contact_stp35'] = 'Opsæt dit yndlingstema som standardtema.';
-$lang['first_contact_stp17'] = 'Her opsættes fotografiet som miniaturebillede til et eller flere albummer. Fotografiet behøver ikke at være knyttet til albummet, for at blive dets miniaturebillede. Hvis fotografiet er tilknyttet albummet, er det endnu lettere at opsætte det som albummets miniaturebillede fra fotografiets offentlige side (tip: anvend plugin\'en Admin Tools for at gøre det endnu lettere).';
-$lang['first_contact_stp18'] = 'Lad os nu se på hvordan man håndterer albummer. Klik på <em>Album » Håndter</em> eller tryk på Næste';
-$lang['first_contact_stp19'] = 'Her opremses \'rod\'-albummer. Hvis du ser et album med en punkteret baggrund, betyder det at det er et fysisk album fra en ftp-synkronisering. Fysiske albummer kan ikke flyttes eller slettes herfra. De andre albummer kaldes virtuelle albummer.';
-$lang['first_contact_stp19_b'] = 'Her opremses \'rod\'-albummer.';
-$lang['first_contact_stp21'] = 'Det næste faneblad er en side, hvor man kan flytte ethvert virtuelt album.<br>Parmalink-fanebladet er opsæt til en bestemt URL til et album.<br>Men lad os redigere et album: klik på Rediger ved et album';
-$lang['first_contact_stp12'] = 'og rediger dem dernæst ved hjælp af en handling';
diff --git a/plugins/TakeATour/language/da_DK/tour_privacy.lang.php b/plugins/TakeATour/language/da_DK/tour_privacy.lang.php
deleted file mode 100644
index 970e5b8f9..000000000
--- a/plugins/TakeATour/language/da_DK/tour_privacy.lang.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-$lang['privacy_stp16'] = 'Som på din computer, kan du vælge flere albummer ved hjælp af tasterne Shift og Control, og klik dernæst på pilen for at skifte dem.<br><br>Lad mig nu introducere grupperne.';
-$lang['privacy_stp1'] = 'Hej! Jeg vil forklare dig, hvordan man beskytter sine billeder i Piwigo. Følg min vejledning, og klik på Næste (eller benyt pilene på dit tastatur) for at navigere. Hvis du skifter til en anden administrationsside, vil du blive sendt tilbage til udflugtens aktuelle side. Hvis du er kørt fast og ikke kan afslutte udflugten, vil udflugten blive afsluttet ved at skifte til <em>Plugins » Tag på en udflugt</em>.<br>Lad os komme i gang!';
-$lang['privacy_stp10'] = 'Vi er i håndteringen af albummer, som er tilgængelig fra menuen ved hjælp af <em>Albummer » Håndtering</em><br><br>Rediger et album ved at lade musemarkøren svæve over det, og klik dernæst på Rediger.';
-$lang['privacy_stp11'] = 'Klik nu på fanebladet Rettigheder';
-$lang['privacy_stp12'] = 'På den side kan du vælge hvorvidt albummet skal være tilgængeligt for alle eller begrænset til nogle brugere';
-$lang['privacy_stp13'] = 'Klik nu på privat.';
-$lang['privacy_stp14'] = 'Herefter kan brugere og brugergrupper få tildelt adgang til et album.';
-$lang['privacy_stp15'] = 'Før grupperne forklares, er her et professionelt tip: Her er linket til en side, som opsættes som privat/offentlig for flere albummer på en gang. Klik på det';
-$lang['privacy_stp24'] = 'Udflugten er færdig.<p style="text-align:center">God fornøjelse med din Piwigo!</p>Hvis du kan lide Piwigo, og ønsker at sætte os, kan du bidrage ved at hjælpe med oversættelser, økonomiske bidrag, osv. <a href="http://piwigo.org/basics/contribute" target="_blank">Klik her for at støtte os</a>. Tak!';
-$lang['privacy_stp22'] = '
-
-<em>For avancerede brugere</em><br><br>I Piwigo kan du beskytte de oprindelige fotografier ved hjælp af din lokale opsætning. Anvend variablen $conf[\'original_url_protection\']: den er som standard tom, men kan opsættes til værdierne "images" for kun at beskytte billeder, eller "all" for også at beskytte alle former for medier, hvilket kan være ressourcekrævende eller det vil måske slet ikke fungere på din server.<br><br>Valgmulighedne fungerer på offentig tog privat indhold. I øjeblikket kræver valgmuligheden, at du nægter adgang til mapperne /upload og /galleries, ved at anvende en .htaccess-fil (normalt en tekstfil med "Deny from all" som indhold) eller via serveropsætningen.<br><br>Bemærk at filnavne på fotografier uploadet ved hjælp af andre metoder end ftp, er <b>gjort tilfældige</b>, så de er umulige at gætte: filnavnet og stien til det oprindelige fotografi, er kun kendt hvis den besøgende har adgang til en udgave af billedet med en andne størrelse, så som et miniaturebillede. $conf[\'original_url_protection\'] og nægtelse af adgang til mapperne /upload og /galleries har til formål at forhindre den situation.
-';
-$lang['privacy_stp3'] = 'Brug et øjeblik på at læse oplysningerne herunder.';
-$lang['privacy_stp4'] = 'Så vi har to systemer til håndtering af adgangsrettigheder til billederne. De er uafhængige, så du kan oprette en gruppe kaldet Familie, men den gruppe har intet at gøre med privatlivsniveauet Familie.<br><br>Privatlivsniveauerne gælder pr. billede, og gruppe-/brugerrettigheder gælder pr. album. Du kan anvende begge dele eller kun det ene system; det er fleksibelt.<br><br>Det næste faneblad handler om gruppehåndtering.';
-$lang['privacy_stp5'] = 'Herunder forklares hvordan man håndterer grupper.<br>Disse rettigheder gælder kun adgang til billeder og albummer, når man kigger på den offentlige del eller ved hjælp af eksterne applikationer. Vi kigger senere på andre beskyttelsesmuligheder, men lad os nu øve os!';
-$lang['privacy_title21'] = 'Offentlige fotografier';
-$lang['privacy_title22'] = 'Lokal opsætning: Beskyttelse af original';
-$lang['privacy_title24'] = 'Det har været en hyggelig udflugt';
-$lang['privacy_title3'] = 'Rettigheder';
-$lang['privacy_title4'] = 'Rettigheder';
-$lang['privacy_title5'] = 'Rettigheder > Grupper';
-$lang['privacy_title6'] = 'Privatlivsniveau';
-$lang['privacy_title7'] = 'Privatlivsniveau';
-$lang['privacy_title8'] = 'Privatlivsniveau';
-$lang['privacy_title9'] = 'Privatlivsniveau';
-$lang['privacy_stp6'] = 'Når du uploader billeder, kan du samme sted ændre privatlivsniveauet på de uploadede billeder...';
-$lang['privacy_stp7'] = '... eller du kan gøre det senere, her i Batch Manager i Global tilstand.<br><br>Det er på siden <em>Fotografier » Nye fotografier</em>, så filteret "Seneste import" er opsat.';
-$lang['privacy_stp8'] = 'Vælg et eller flere billeder...';
-$lang['privacy_stp9'] = '... og vælg handlingen "Hvem kan se billederne?". Nu kan du ændre privatlivsniveauet på de valgte billeder.<br><br>Men du kan også gøre det for det specifikke billede, på dets redigeringsside. Du kan tilgå det fra den offentlige del, eller herfra.<br><br>Nu viser jeg dig det andet rettighedssystem, pr. album baseret på grupperne og brugerne.';
-$lang['privacy_title1'] = 'Velkommen til privatlivsudflugten';
-$lang['privacy_title10'] = 'Albumrettigheder';
-$lang['privacy_title11'] = 'Albumrettigheder';
-$lang['privacy_title12'] = 'Albumrettigheder';
-$lang['privacy_title15'] = 'Tip';
-$lang['privacy_title17'] = 'Grupper';
-$lang['privacy_title18'] = 'Grupper';
-$lang['privacy_title19'] = 'Brugere';
-$lang['privacy_title2'] = 'Hjælp inde i Piwigo';
-$lang['privacy_title20'] = 'Offentlige fotografier';
-$lang['privacy_stp17'] = 'En gruppe i Piwigo er bare en samling brugere: Så grupper gør det lettere at håndtere albummers rettigheder, og håndtering af brugeres egenskaber. Her er siden, hvor du kan håndtere grupper, omdøbe, sammenlægge, kopiere og slette. Du kan også opsætte en eller flere grupper som "standardgruppe", hvilket betyder at nyligt registrerede brugere vil blive påvirket af de grupper, som er opsat som standard.';
-$lang['privacy_stp18'] = 'For at tilføje eller fjerne brugere fra en gruppe, går man til siden <em>Brugere » Håndtering</em>';
-$lang['privacy_stp19'] = 'Her kan man hurtigt redigere en enkelt bruger, ved at lade musemarkøren svæve over vedkommende og dernæst klikke på Redigering-linket.<br><br>Du kan vælge flere brugere og redigere dem på samme tid, ved at vælge en Handling, som skal udføres.';
-$lang['privacy_stp2'] = 'Her kan du tilgå den integrerede hjælp. Klik på Næste for at fortsætte direkte til hjælpesiden om håndtering af rettigheder';
-$lang['privacy_stp20'] = 'Nu ved du hvordan dine fotografier holdes private, men måske spekulerer du på, hvordan dine offentlige fotografier beskyttes. Først kunne du overveje at forhindre besøgende i at downloade fotografierne; det er ikke muligt, fordi web\'et ikke er indrettet sådan (den besøgendes browser downloader alle viste ressourcer, og flere til). Højreklik kan slås fra, et tomt lag kan lægges oven på fotografiet osv, men det deaktiverer ikke download. Komplette websider kan gemmes af alle webbrowsere. ';
-$lang['privacy_stp21'] = 'Nogle løsninger:<ul><li>tilføj et vandmærke, som minimum på fotografier i mellem og høj opløsning.</li><li>og deaktiver størrelserne XL og XXL.</li><li>samt deaktiver High Definition (download og visning af det oprindelige fotografi) ved de pågældende brugere.';
-$lang['privacy_title14b'] = '';
-$lang['privacy_stp14b'] = 'Vigtigt faktum: Webmasterne og administratorerne er ikke alvidende når de gennemse den offentlige del, men de kan tilgå ethvert album og fotografi gennem administrationsdelen.';
diff --git a/plugins/TakeATour/language/de_DE/description.txt b/plugins/TakeATour/language/de_DE/description.txt
deleted file mode 100755
index 34754474c..000000000
--- a/plugins/TakeATour/language/de_DE/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-TakeATour - Entdecke Piwigo während einer Tour durch die Funktionen. Dieses Plugin beinhaltet eine Tour für Anfänger und Fortgeschrittene Benutzer. \ No newline at end of file
diff --git a/plugins/TakeATour/language/de_DE/index.php b/plugins/TakeATour/language/de_DE/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/de_DE/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/de_DE/plugin.lang.php b/plugins/TakeATour/language/de_DE/plugin.lang.php
deleted file mode 100755
index 15e3deaff..000000000
--- a/plugins/TakeATour/language/de_DE/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['takeatour_configpage'] = 'Mache eine Tour >> Liste der Touren';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Mache eine Tour und entdecke die Funktionen deiner Piwigo Galerie >> Gehe zu den verfügbaren Touren ';
-$lang['Start the Tour'] = 'Tour starten';
-$lang['Visit your Piwigo!'] = 'Besuche dein Piwigo!';
-$lang['TAT_descrp'] = 'Herzlich Willkommen! Hier findest du die Liste aller verfügbaren Touren zu den Funktionen der Piwigo Galerie. <br> Starte unten eine Tour und folge den Anweisungen. Klicke auf \"Vorhergehende\" / \"Nächste\" (oder benutze die Pfeile auf der Tastatur) um in einer Tour zu navigieren. Wenn du beim Rundgang zur Verwaltungs-Seite gehst, wirst du danach auf die aktuelle Seite der Tour umgeleitet. Falls du stecken bleibst und die Tour nicht beenden kannst, gehe auf das Plugin <em> » Mache eine Tour </ em> um die Tour zu beenden.';
-$lang['Prev'] = 'Vorhergehende';
-$lang['Next '] = 'Nächste';
-$lang['End tour'] = 'Tour beenden';
-
-$lang['First Contact'] = 'Erster Kontakt';
-$lang['first_contact_descrp'] = 'Empfohlen für Anfänger, diese Tour stellt dir die Grundlagen von Piwigo vor. Sie startet mit hinzufügen und verwalten von Bildern. Die Tour geht weiter mit Album-Management und Zugriffsrechte und endet mit individueller Konfiguration der Themen und Plugins.';
-
-$lang['privacy_descrp'] = 'Diese Tour beschreibt alle Möglichkeiten, deine Fotos mit dem Zugriffssystem pro Album oder Foto vor dem öffentlichen Zugriff und mit dem Bildschutz vor dem Kopieren zu schützen.';
-
-$lang['2.7 Tour'] = '2.7 Tour';
-$lang['2_7_0_descrp'] = 'Endecke die Neuigkeiten in Piwigo 2.7';
-$lang['Privacy'] = 'Privatsphäre'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/de_DE/tour_2_7_0.lang.php b/plugins/TakeATour/language/de_DE/tour_2_7_0.lang.php
deleted file mode 100644
index 4a6cfaf24..000000000
--- a/plugins/TakeATour/language/de_DE/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_title6'] = 'Wähle Skript';
-$lang['2_7_0_stp4'] = 'Die Suchseite wurde überarbeitet: Die Eigenschaften auf die die Volltextsuche angewendet wird können ausgewählt werden, die Liste der Autoren wird aus der Datenbank ausgelesen, Autvervollständigung von Schlagworten und Alben...';
-$lang['2_7_0_stp5'] = 'Zusätzlich zum Datum können Stunden und Minuten über den Schieberegler eingestellt werden.';
-$lang['2_7_0_stp6'] = 'Das Auswahl-Skript um Alben, Schlagworte usw. auszuwählen ist nun benutzerfreundlicher. Teste es weiter unten';
-$lang['2_7_0_title4'] = 'Suchseite';
-$lang['2_7_0_title5'] = 'Zeit';
-$lang['2_7_0_title1'] = 'Willkommen bei Piwigo 2.7';
-$lang['2_7_0_title11'] = 'Bis bald!';
-$lang['2_7_0_title2'] = 'Die ersten neuen Funktionen';
-$lang['2_7_0_stp2'] = 'Wie du siehst, wurde ein vorgegebenes Plugin hinzugefügt. Take a Tour. Dieses Plugin hilft dir Piwigo zu entdecken. Hier sind alle verfügbaren Touren aufgelistet. <br> Diese Seite ist in <em> Plugins » Take a Tour</em> verfügbar ';
-$lang['2_7_0_stp11'] = 'Diese Tour ist zu Ende. <p style="text-align:center"> Freue dich über Piwigo 2.7! </p> Wenn dir Piwigo gefällt und du uns unterstützen möchtest, dann kannst du beim übersetzen helfen, etwas Spenden usw. <a href="http://piwigo.org/basics/contribute" target="_blank"> Klicke hier um uns zu unterstützen </a>';
-$lang['2_7_0_stp1'] = 'Hallo! Ich begleite dich, um Piwigo zu entdecken. Bitte folge meinen Anweisungen und klicke auf Nächste (oder benutze die Pfeile der Tastatur) zum navigieren. Wenn du auf andere Seiten gehst, wirst du danach auf die aktuelle Seite der Tour umgeleitet.';
-$lang['2_7_0_stp9'] = 'Ein Suchfilter wurde der Stapelverarbeitung spendiert. Er verfügt über eine mächtige Syntax um Fotos nach Datum, Schlagworten, Größe, Dateinamen zu suchen. Optionen wie Exakt, Und/Oder, Gruppierung und Exkludieren werden unterstützt. Du kannst später die detaillierte Hilfe hierzu lesen. Die gleiche Syntax gilt für die Schnellsuche auf der öffentlichen Seite im Menü.';
-$lang['2_7_0_stp7'] = 'Fotos in den Alben können nun Anhand des Datums der Fotoerstellung oder der Veröffentlichung sortiert werden.';
-$lang['2_7_0_stp2b'] = 'Das neue Formular zum Hochladen in Piwigo 2.7 basiert auf HTML5 anstelle von Flash, das bedeutet verbesserte Kompatibilität mit modernen Webbrowsern. Die Verlässlichkeit bei langsamen Internetverbindungen wurde erhöht und die Funktion "Dateien hier hin ziehen" ermöglicht das hochladen von Fotos direkt über den Browser.';
-$lang['2_7_0_title2b'] = 'Neues Formular zum Hochladen';
-$lang['2_7_0_stp8'] = 'Einfacher Aktionslink um den Sammelkorb mit nur einem Klick zu leeren ';
-$lang['2_7_0_title8'] = 'Leere deinen Sammelkorb';
-$lang['2_7_0_title7'] = 'Sortiere Alben nach Datum';
-$lang['2_7_0_title9'] = 'Suchfilter';
-$lang['2_7_0_stp10'] = 'Ein Dateigröße-Filter wurde der Stapelverarbeitung hinzugefügt. Man kann einen Bereich mit mindest und maximal Größen angeben.';
-$lang['2_7_0_title10'] = 'Dateigröße-Filter'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/de_DE/tour_first_contact.lang.php b/plugins/TakeATour/language/de_DE/tour_first_contact.lang.php
deleted file mode 100644
index 7dadaec17..000000000
--- a/plugins/TakeATour/language/de_DE/tour_first_contact.lang.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-$lang['first_contact_stp22'] = 'Hier kannst du die Eigenschaften eines Albums bearbeiten, wie bei den Fotos';
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title43'] = 'Es war eine tolle Zeit';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_title9'] = 'Die Stapelverarbeitung';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title33'] = 'Einstellungen für Gäste';
-$lang['first_contact_title34'] = 'Themen';
-$lang['first_contact_title35'] = 'Themen';
-$lang['first_contact_title37'] = 'Themen';
-$lang['first_contact_title38'] = 'Plugins';
-$lang['first_contact_title39'] = 'Plugins';
-$lang['first_contact_title4'] = 'Lass uns ein Foto hinzufügen';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title15'] = 'Die Eigenschaften-Seite eines Fotos';
-$lang['first_contact_title18'] = 'Alben verwalten';
-$lang['first_contact_title19'] = 'Alben verwalten';
-$lang['first_contact_title20'] = 'Alben verwalten';
-$lang['first_contact_title21'] = 'Weitere Reiter';
-$lang['first_contact_title22'] = 'Album Eigenschaften-Seite';
-$lang['first_contact_title28'] = 'Konfiguration';
-$lang['first_contact_title29'] = 'Konfiguration -> Optionen -> Haupteinstellungen';
-$lang['first_contact_title3'] = 'Foto Seite hinzufügen';
-$lang['first_contact_title11'] = 'Wie bearbeite ich ein Foto';
-$lang['first_contact_stp8'] = 'Lass sie uns nun bearbeiten! Klicke auf den Link. Falls du ihn nicht siehst, klicke auf "Vorhergehende" um wenigstens 2 Fotos hinzu zu fügen';
-$lang['first_contact_title1'] = 'Willkommen in deiner Piwigo Galerie';
-$lang['first_contact_stp29'] = 'Hier auf dieser ersten Seite stellst du die erforderlichen Grundeinstellungen deiner Galerie ein';
-$lang['first_contact_stp30'] = 'Las uns mit dem ändern des Galerietitels beginnen';
-$lang['first_contact_stp32'] = 'Nun speichere deine Änderungen...';
-$lang['first_contact_stp4'] = 'Zuerst wähle ein Album; erstelle eins falls noch nicht vorhanden';
-$lang['first_contact_stp11'] = 'Von hier aus kannst du ein oder mehrere Fotos auswählen';
-$lang['first_contact_stp15'] = 'Hier zum Beispiel, kann man alle Eigenschaften eines Fotos bearbeiten';
-$lang['first_contact_stp2'] = 'Der Link ist hier. Klicke "Nächste" zum weitermachen';
-$lang['first_contact_stp14'] = 'Wir sehen hier die Bearbeitungs-Seite eines Bildes. Dise Seite ist von hier aus erreichbar, aber auch von der öffentlichen Seite, wenn du als Administrator angemeldet bist. Klicke auf Bearbeiten oder Nächste';
-$lang['first_contact_stp13'] = 'Du kannst Beschreibungen und mehr in der Stapelverarbeitung im Einzelmodus bearbeiten. Aber jetzt wollen wir im Global-Modus bleiben';
-$lang['first_contact_stp10'] = 'Hier ist der Link, um direkt auf deinen Sammelkorb zuzugreifen: Das ist ein Tool für Administratoren um auf einfache Weise Bilder zu einem Satz hinzuzufügen und in der Stapelverarbeitung zu bearbeiten. Wenn du als Admin angemeldet bist, kannst du Fotos zum Sammelkorb aus der öffentlichen Seite hinzufügen, oder die Aktion "In den Sammelkorb" der Stapelverarbeitung benutzen.';
-$lang['first_contact_stp1'] = 'Hallo! Ich werde dein Begleiter sein, um Piwigo zu entdecken. Bitte folge meinen Anweisungen und klicke auf "Nächste" (oder benutze die Pfeile auf der Tastatur) zum navigieren. Wenn du beim Rundgang zur Verwaltungs-Seite gehst, wirst du danach auf die aktuelle Seite der Tour umgeleitet. Falls du stecken bleibst und die Tour nicht beenden kannst, gehe auf das Plugins <em> » Mache eine Tour </ em> um die Tour zu beenden. <br> Lass uns beginnen, indem wir Bilder hinzufügen!';
-$lang['first_contact_stp16'] = 'Hier kannst du Bilder den Alben hinzufügen oder dies entfernen. Die Verknüpfung ist virtuell, keine Bilder werden physikalisch verschoben.';
-$lang['first_contact_stp20'] = 'Wenn deine Maus über einem Album ist, werden Links und Informationen angezeigt. Die Position eines Album kannst du per klicken & ziehen ändern, dann kannst du diese manuelle Änderung speichern oder abbrechen.';
-$lang['first_contact_stp43'] = 'Diese Tour war sehr lange, wir haben aber nur einen kleinen Teil gesehen, wie mächtig Piwigo ist. Alles hat ein Ende, diese Übersicht ist nun beendet. <br> Du kannst viel tiefer in die Eigenschaften von Piwigo einsteigen, indem du eine andere Tour nimmst oder unserer Dokumentation auf der Website piwigo.org liest.';
-$lang['first_contact_stp6'] = 'Wie du siehst, werden Fotos hier aufgelistet. Füge mindestens zwei Bilder hinzu und klicke auf die Schaltfläche "Upload starten"';
-$lang['first_contact_stp7'] = 'Hier eine Übersicht über deine hochgeladenen Bilder. Wie man sieht hat Piwigo die Miniaturansichten erzeugt. Du kannst nun mehr Fotos mit dem Link am Ende hinzufügen. Die Eigenschaften eines Bildes lassen sich mit einem Klick darauf bearbeiten, oder klicke auf die Stapelverarbeitung um alle hochgeladenen Bilder zu verwalten.';
-$lang['first_contact_stp9'] = 'Du bist hier in der Stapelverarbeitung, wo du mehrere Bilder gleichzeitig bearbeiten kannst. Der Sammelkorb ist hier als Filter gesetzt, weil wir von der Upload-Ergebnis-Seite kommen.';
-$lang['first_contact_stp23'] = 'Das Sperren eines Albums bedeutet, das nur Administratoren in der Lage sind, das Album zu sehen: Es dient in der Regel dazu das Album nicht sofort zu veröffentlichen, während ein Admin die Eigenschaften des Albums verändert.';
-$lang['first_contact_stp3'] = 'Der erste Reiter zeigt dir die Möglichkeit über den Browser Bilder hinzufügen zu können. Die anderen Reiter zeigen weitere Wege Bilder hoch zu laden.';
-$lang['first_contact_stp40'] = 'Hi ich bin´s! Schalte mich nicht ab, hier kannst du sehen wie man aktivierte Plugin´s abschaltet oder wieder herstellt.';
-$lang['first_contact_stp41'] = 'Auf dem letzten Reiter kannst du alle verfügbaren Plugins für deine Piwigo Version sehen. Hunderte Plugins gibt es hier!';
-$lang['first_contact_stp37'] = 'Um neue Themen zu installieren, kannst du diese direkt mit dem Reiter "Füge ein neues Thema hinzu" laden. Nur die Themen "Kompatibel mit deiner Piwigo Version" werden angezeigt. <br> Lass uns nun die Plugins entdecken! Klicke auf Plugins -> Verwalten';
-$lang['first_contact_stp31'] = 'Dann das Seitenbanner, es wird oben auf allen Seiten angezeigt. Wie du sehen kannst, sind HTML- Tags hier erlaubt. Du kannst auch den %gallery_title% Tag benutzen, um den Galerietitel die du gerade eingegeben hast oben auf der Seite anzeigen zu lassen.';
-$lang['first_contact_stp28'] = 'Jetzt werden wir auf die verfügbaren Einstellungen in Piwigo schauen damit es so arbeitet wie du es magst. Klicke auf Konfiguration -> Optionen oder einfach auf Nächste.';
-$lang['first_contact_stp33'] = 'Nun ein letztes Wort zu den Optionen, auf der "Einstellungen für Gäste" Seite, sie dient dazu Präferenzen für nicht registrierte Besucher zu setzen. Jedes mal wenn Piwigo sich auf "Gäste" bezieht, sind damit nicht registrierte Besucher gemeint. <br> Lass uns mit Konfiguration fortfahren: Klicke auf Konfiguration -> Themen oder einfach auf Nächste.';
-$lang['first_contact_stp39'] = 'Auf dieser ersten Seite sind die installierten Plugins aufgelistet. Oben sind die aktivierten Plugins aufgelistet, die derzeit ausgeführt werden. Auf der Seite unten sind die Plugins, die sich im Ordner Plugins befinden, aber nicht aktiviert sind. Löschen eines Plugins bedeutet, dass alles von dem Plugin (Dateien, Optionen usw.) entfernt wird. Für die meisten deaktivierten Plugins, werden die Daten vom Plugin weiterhin behalten.';
-$lang['first_contact_stp38'] = 'Plugins sind sehr einfache Möglichkeiten, dein Piwigo entsprechend anzupassen. Sie können fast alles was du dir vorstellen kannst, von kleinen zusätzlichen Texten bis zu umfangreichen Funktionen, wie z. B. das Community Plugin, das auch nicht Administratoren erlaubt Bilder hochladen zu dürfen.';
-$lang['first_contact_stp34'] = 'Ein Thema zu wählen ist der erste Schritt Piwigo anzupassen. Installierte Themen werden hier aufgelistet.<br>Es kann mehr als ein Thema aktiviert werden. Benutzer können so ihr eigenes Thema aus den freigeschalteten Themen wählen, falls die Option \'Erlaube Anpassungen durch Benutzer\' auf der Optionsseite eingeschaltet wurde.';
-$lang['first_contact_stp35'] = 'Setze dein favorisiertes Thema als Standard.';
-$lang['first_contact_stp5'] = 'Dann klicke den Schalter um gewählte Fotos zu senden oder ziehe einfach die Dateien.';
-$lang['first_contact_stp21'] = 'Der nächste Reiter ist eine Seite auf der du jedes virtuelle Album bewegen kannst.<br>Der Permalinks Reiter existiert, um für ein bestimmtes Album einen URL-Verweis zu setzen.<br>Aber lass uns erst ein Album editieren: Klicke auf Album verwalten.';
-$lang['first_contact_stp19'] = 'Hier sind nun alle Haupt-Alben gelistet. Wenn du ein Album mit gestricheltem Hintergrund siehst, ist dies ein physisches Album aus einer FTP Synchronisation. Physische Alben können an dieser Stelle nicht verschoben oder gelöscht werden. Alle anderen Alben nennt man Virtuelle Alben.';
-$lang['first_contact_stp19_b'] = 'Hier sind Haupt-Alben gelistet.';
-$lang['first_contact_stp18'] = 'Lass uns nun ansehen wie man Alben verwaltet. Klicke auf <em>Alben » Verwalten</em> oder Nächste';
-$lang['first_contact_stp12'] = 'und sie dann mittels einer Aktion bearbeiten';
-$lang['first_contact_stp17'] = 'Hier kannst du ein Foto als Vorschaubild für ein oder mehrere Alben setzen. Das Foto muss nicht zwingend dem Album angehören um als Vorschaubild zu gelten. Gehört das Foto dem Album an ist es einfacher das Vorschaubild von der öffentlichen Seite aus zu setzen. (Tipp: Benutze das Plugin Admin Tools um noch einfachere Methoden)'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/de_DE/tour_privacy.lang.php b/plugins/TakeATour/language/de_DE/tour_privacy.lang.php
deleted file mode 100644
index e85b1d2c6..000000000
--- a/plugins/TakeATour/language/de_DE/tour_privacy.lang.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-$lang['privacy_stp1'] = 'Hallo! In dieser Tour werde ich Dir zeigen, wie Du Deine Fotos in Piwigo schützen kannst. Bitte folge meinen Anweisungen und klick auf Weiter (oder benutze die Pfeiltasten auf deiner Tastatur), um zu navigieren. Wenn du im Administrationsbereich auf eine andere Seite wechselst, wirst du automatisch wieder auf die aktuelle Seite der Tour umgeleitet. Wenn Du irgendwo hängst und die Tour nicht verlassen kannst, dann beendet ein Wechsel zu <em>Plugins » Take A Tour</em> die Tour.<br>Lass uns loslegen!';
-$lang['privacy_stp15'] = 'Bevor wir die Gruppen erklären, hier ein Profitipp: Hier siehst du den Link zu einer Seite, auf der du mehrere Alben gleichzeitig auf Privat/Öffentlich setzen kannst. Klick jetzt drauf.';
-$lang['privacy_stp10'] = 'Wir befinden uns im Alben » Liste, das über den Menüpunkt <em>Alben » Verwalten</em> erreichbar ist.<br><br>Lass die Maus über ein Album fahren und klicke auf Bearbeiten, um das Album zu bearbeiten.';
-$lang['privacy_stp18'] = 'Um Benutzer Gruppen hinzu zu fügen oder zu entfernen, gehe zur Seite <em>Benutzer » Verwalten</em>';
-$lang['privacy_stp6'] = 'Wenn du die Bilder hochlädst, kannst du die Sicherheitsstufe der hochgeladenen Bilder gleich hier ändern...';
-$lang['privacy_stp12'] = 'Auf dieser Seite kannst du wählen ob das Album für jeden zur Verfügung steht oder nur eingeschränkt für einige Benutzer';
-$lang['privacy_stp14'] = 'Benutzern und Benutzer-Gruppen kann Zugriff auf Alben gewährt werden. ';
-$lang['privacy_stp11'] = 'Nun Klicke auf den Zugriffsrechte Reiter';
-$lang['privacy_title22'] = 'Lokale Konfiguration: Originale schützen';
-$lang['privacy_stp13'] = 'Nun klicke auf Privat';
-$lang['privacy_stp3'] = 'Nimm dir einen Moment und lese die Information unten';
-$lang['privacy_title2'] = 'Hilfe innerhalb deines Piwigo';
-$lang['privacy_title24'] = 'Es war eine großartige Zeit!';
-$lang['privacy_title4'] = 'Zugriffsrechte';
-$lang['privacy_title5'] = 'Zugriffsrechte > Gruppen';
-$lang['privacy_title6'] = 'Zugriff verwalten';
-$lang['privacy_title7'] = 'Zugriff verwalten';
-$lang['privacy_title8'] = 'Zugriff verwalten';
-$lang['privacy_title9'] = 'Zugriff verwalten';
-$lang['privacy_stp8'] = 'wähle ein oder mehrere Bilder...';
-$lang['privacy_title1'] = 'Willkommen zur persönlichen Tour';
-$lang['privacy_title10'] = 'Album Zugriffsrechte';
-$lang['privacy_title11'] = 'Album Zugriffsrechte';
-$lang['privacy_title12'] = 'Album Zugriffsrechte';
-$lang['privacy_title3'] = 'Berechtigungen';
-$lang['privacy_title15'] = 'Tipp';
-$lang['privacy_title17'] = 'Gruppen';
-$lang['privacy_title18'] = 'Gruppen';
-$lang['privacy_title19'] = 'Benutzer';
-$lang['privacy_title20'] = 'Öffentliche Fotos';
-$lang['privacy_title21'] = 'Öffentliche Fotos';
-$lang['privacy_stp9'] = '... und wähle die Aktion "Wer soll die Fotos sehen können?". Jetzt kannst du die Sicherheitsstufe für die ausgewählten Fotos wählen.<br><br>Aber du kannst das auch für einzelne Bilder auf dieser Seite einstellen. Diese Einstellung kannst du auch über den öffentlichen Teil erreichen.<br><br>Nun zeige ich dir die andere Methode für den Zugriff auf Albumebene basierend auf Gruppen und Benutzern.';
-$lang['privacy_stp7'] = '... oder du kannst es später tun, hier in der Stapeverarbeitung im Global-Mode.<br><br>Dies ist die Seite <em>Fotos » Letzte Fotos</em>, hier ist der Filter "Letzter Import" gesetzt.';
-$lang['privacy_stp5'] = 'Unten ist beschrieben wie man Gruppen verwalten kann.<br>Diese Berechtigungen werden nur für den Zugriff auf Fotos und den Alben angewendet wenn man den öffentlichen Teil der Galerie besucht. Wir werden später noch sehen wie man einen Schutz aufbaut. Zunächst aber ein wenig Übung!';
-$lang['privacy_stp4'] = 'Es bestehen zwei Zugriffsrechte um den Zugriff auf Bilder zu regeln. Diese sind jedoch voneinander unabhängig! Du kannst zum Beispiel eine Gruppe "Familie" einrichten, diese Gruppe hat allerdings nichts mit der Sicherheitsstufe "Familie" zu tun.<br><br>Die Sicherheitsstufe wird auf Bilder angewandt. Die Gruppen und Benutzerberechtigungen werden auf Alben angewendet. Du kannst beide Möglichkeiten einsetzen oder nur eine davon benutzen.<br><br>Der nächste Reiter befasst sich mit Gruppen.';
-$lang['privacy_stp24'] = 'Die Tour ist nun beendet.<p style="text-align:center">Habe nun viel Spaß mit deinem Piwigo!</p>Wenn du Piwigo magst und unterstützen möchtest, kannst du gerne einen Beitrag leisten indem du hilfst Piwigo zu übersetzen und eine Spende tätigst usw. <a href="http://piwigo.org/basics/contribute" target="_blank">Klicke hier um zu helfen</a>. Herzlichen Dank!';
-$lang['privacy_stp22'] = '<em>Für erfahrene Benutzer</em><br><br>In Piwigo können die original Fotos durch die lokale Konfiguration geschützt werden. Benutze die Variable $conf[\'original_url_protection\'] diese ist per Standard nicht gesetzt, verwende die Parameter "images" um nur die Bilder oder "all" um alle Mediendateien zu schützen. Letzteres könnte sehr ressourcenhungrig sein oder schlichtweg auf deinem Server nicht funktionieren.<br><br>Die folgende Variante funktioniert bei öffentlichen und persönlichen Inhalten, hierbei wird der Zugriff über die .htaccess Datei auf die Verzeichnisse /upload und /galleries unterbunden (gewöhnlich durch ein "Deny from all" Eintrag für diese Verzeichnisse), die .htaccess Datei ist eine Textdatei oder wird über die Serverkonfiguration erstellt.<br><br>Bitte beachte, das die Dateinamen, außer beim hochladen durch FTP, per <b>Zufall</b> benannt werden, so dass es unmöglich wird die Dateinamen zu erraten. Der Dateiname und der Pfad zum original Foto kann nur dann herausgefunden werden wenn der Besucher Zugriff auf die berechneten Bidergößen hat, wie zum Beispiel dem Vorschaubild. Die Methoden $conf[\'original_url_protection\'] und der "Deny" Eintrag in der .htaccess Datei für die Verzeichnisse /upload und /galleries sollen diesen Umstand verhindern.';
-$lang['privacy_stp21'] = 'Lösungen sind:<ul><li>setze ein Wasserzeichen auf deine Fotos, zumindest auf die mittleren und hochauflösenden Versionen,</li><li>schalte XL und XXL Größen aus,</li><li>schalte die High Definition Darstellung (herunterladen und anzeigen von Bildern in voller Auflösung) für betreffende Benutzer aus</li></ul>';
-$lang['privacy_stp20'] = 'Jetzt wo du weißt wie du deine Fotos privat halten kannst, möchtest du sicher wissen wie man seine öffentlichen Fotos schützen kann. Als erstes wirst du eventuell daran denken das Herunterladen der Bilder zu verhindern, aber das geht nicht, das Internet und die Browser sind so aufgebaut das alle Inhalte zumindest temporär heruntergeladen werden um diese dann anzuzeigen. Der Rechts-Klick kann ausgeschaltet werden, eine leere Ebene kann über das Foto gelegt werden usw. aber all das verhindert nicht das Bilder heruntergeladen werden. Man kann in fast allen Browsern sogar einfach eine Komplette Webseite offline speichern.';
-$lang['privacy_stp2'] = 'Hier kannst du die integrierte Hilfe erreichen. Klicke weiter um direkt auf die Hilfeseite für die Zugriffsrechte zu gelangen.';
-$lang['privacy_stp19'] = 'Hier kannst die einen Benutzer bearbeiten indem du mit der Maus darüber fährst und den bearbeiten Link anklickst.<br><br>Mehrere Benutzer kannst du bearbeiten indem du sie markierst und dann eine Aktion auswählst.';
-$lang['privacy_stp17'] = 'Eine Gruppe in Piwigo, ist eine Anzahl von Benutzern, dadurch machen sie das Leben einfacher für Alben Berechtigungen zu vergeben und Benutzereigenschaften zu verwalten. Dies ist die Seite in der die Gruppen verwaltet werden. Zum Beispiel können hier Gruppen umbenannt, zusammengeführt, dupliziert oder gelöscht werden. Du kannst auf eine oder mehrere Gruppen als Standard definieren, dann werden neue Benutzer diesen Gruppen automatisch hinzugefügt.';
-$lang['privacy_stp16'] = 'Wie auf deinem Computer, kannst du mehrere Alben mit der Hochstell- und Steuerungstaste auswählen, dann klicke auf den Pfeil-Schaltfläche "»"/"«" zum Ändern der Zugriffsrechte.<br><br>Nun lass mich die Gruppen erklären.';
-$lang['privacy_stp14b'] = 'Wichtige Information: Auf der öffentlichen Seite haben Webmaster und Administratoren beim Surfen die gleichen Rechte wie jeder andere Benutzer. In der Administration hingegen haben sie Zugriff auf jedes Album oder Fotos.';
-$lang['privacy_title14b'] = ''; \ No newline at end of file
diff --git a/plugins/TakeATour/language/el_GR/description.txt b/plugins/TakeATour/language/el_GR/description.txt
deleted file mode 100755
index 9ef1ca638..000000000
--- a/plugins/TakeATour/language/el_GR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Επισκεφθείτε το Piwigo σας για να ανακαλύψετε τις δυνατότητές του. Αυτό το plugin έχει πολλαπλές θεματικές περιηγήσεις για αρχάριους και προχωρημένους χρήστες. \ No newline at end of file
diff --git a/plugins/TakeATour/language/el_GR/index.php b/plugins/TakeATour/language/el_GR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/el_GR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/el_GR/plugin.lang.php b/plugins/TakeATour/language/el_GR/plugin.lang.php
deleted file mode 100755
index 1154e91f2..000000000
--- a/plugins/TakeATour/language/el_GR/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['TAT_descrp'] = 'Καλώς ήρθατε! Εδώ παρατίθενται όλες οι διαθέσιμες περιηγήσεις για να ανακαλύψετε τα χαρακτηριστικά της Piwigo γκαλερί σας.<br>
-Ξεκινήστε με μια περιήγηση και στη συνέχεια ακολουθήστε τις οδηγίες. Κάντε κλικ στο Επόμενο / Προηγούμενο (ή χρησιμοποιήστε τα βελάκια του πληκτρολογίου σας) για να πλοηγηθείτε κατά τη διάρκεια της περιήγησης. Κατά τη διάρκεια μιας περιήγησης, αν πάτε σε μια άλλη σελίδα διαχείρισης, θα πρέπει να μεταφερθείτε στην τρέχουσα σελίδα της περιήγησης. Αν κολλήσετε και δεν μπορείτε να ολοκληρώσετε την περιήγηση, πηγαίνοντας στο <em>Plugins » " Ξεκινήστε την περιήγηση" </em> θα ολοκληρώσει την περιοδεία.';
-$lang['Start the Tour'] = 'Ξεκινήστε την περιήγηση ';
-$lang['takeatour_configpage'] = 'Κάνετε μια Περιήγηση » Κατάλογος Περιηγήσεων';
-$lang['Visit your Piwigo!'] = 'Επισκεφθείτε το Piwigo σας!';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Κάντε μια περιήγηση και να ανακαλύψετε τα χαρακτηριστικά της Piwigo γκαλερί σας » Πηγαίνετε στις διαθέσιμες περιηγήσεις';
-$lang['Next '] = 'Επόμενο';
-$lang['Prev'] = 'Προηγούμενο';
-$lang['End tour'] = 'Τέλος Περιήγησης ';
-
-$lang['First Contact'] = 'Πρώτη Επαφή';
-$lang['first_contact_descrp'] = 'Συνιστάται για αρχάριους, αυτή η περιήγηση είναι μια εισαγωγή στο Piwigo και τα βασικά χαρακτηριστικά του. Θα ξεκινήσει με την προσθήκη εικόνων, στη συνέχεια, τη διαχείρισή τους. Η περιήγηση συνεχίζεται με τη διαχείριση λευκωμάτων και τα δικαιώματα, και καταλήγει με την προσαρμογή χρησιμοποιώντας τη διαμόρφωση, τα θέματα και τα plugins.';
-
-$lang['2_7_0_descrp'] = 'Ανακαλύψτε τι νέο υπάρχει στο Piwigo 2.7';
-$lang['2.7 Tour'] = '2.7 Tour';
-
-$lang['privacy_descrp'] = 'Η περιήγηση αυτή παρουσιάζει τρόπους να προστατέψετε τις φωτογραφίες σας από δημόσια πρόσβαση με ένα σύστημα αδειών ανά λεύκωμα και ανά εικόνα, και από την αντιγραφή χρησιμοποιώντας προστασία εικόνας. ';
-$lang['Privacy'] = 'Προστασία Προσωπικών Δεδομένων'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/el_GR/tour_2_7_0.lang.php b/plugins/TakeATour/language/el_GR/tour_2_7_0.lang.php
deleted file mode 100644
index dff80573a..000000000
--- a/plugins/TakeATour/language/el_GR/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_stp4'] = ' ';
-$lang['2_7_0_stp5'] = 'Μπορείτε να ρυθμίσετε την ώρα εκτός από την ημερομηνία, χρησιμοποιώντας τα ρυθμιστικά Ώρα και Λεπτά.';
-$lang['2_7_0_stp6'] = 'Το script επιλογής για να επιλέξετε λεύκωμα, ετικέτες κλπ. έχει αλλάξει με ένα νέο πιο φιλικό προς το χρήστη. Δοκιμάστε το παρακάτω.';
-$lang['2_7_0_title4'] = 'Σελίδα Αναζήτησης';
-$lang['2_7_0_title5'] = 'Ώρα';
-$lang['2_7_0_title6'] = 'Επιλέξτε script';
-$lang['2_7_0_title2'] = 'Πρώτο νέο χαρακτηριστικό';
-$lang['2_7_0_title11'] = 'Τα λέμε σύντομα! ';
-$lang['2_7_0_title1'] = 'Καλώς ήρθατε στο Piwigo 2.7';
-$lang['2_7_0_stp2'] = 'Όπως μπορείτε να δείτε, έχει προστεθεί ένα νέο προεπιλεγμένο πρόσθετο: Take A Tour. Αυτό το πρόσθετο σας βοηθά να ανακαλύψετε το Piwigo σας. Εδώ παρατίθενται όλες οι διαθέσιμες περιηγήσεις. <br> Αυτή η σελίδα είναι προσβάσιμη στο <em>Πρόσθετα » Κάντε μια περιήγηση</em>';
-$lang['2_7_0_stp11'] = 'Αυτή η περιήγηση έλαβε τέλος. <p style="text-align:center">Απολαύστε το Piwigo 2.7 σας!</p> Αν σας αρέσει το Piwigo και θέλετε να μας στηρίξετε, μπορείτε να συμβάλετε με βοήθεια των μεταφράσεων, δωρεά, κλπ. <a href="http://piwigo.org/basics/contribute" target="_blank"> Κάντε κλικ εδώ για να μας υποστηρίξετε </ a>.';
-$lang['2_7_0_stp1'] = 'Γεια σας! Θα είναι ο οδηγός σας για να ανακαλύψετε Piwigo. Παρακαλώ ακολουθήστε τις οδηγίες μου, και κάντε κλικ στο Επόμενο(ή χρησιμοποιήστε τα βελάκια του πληκτρολογίου σας) για να περιηγηθείτε. Αν πάτε σε μια άλλη σελίδα, θα οδηγηθήται στην τρέχουσα σελίδα του Tour.';
-$lang['2_7_0_title9'] = 'Φίλτρο αναζήτησης ';
-$lang['2_7_0_title8'] = 'Αδειάστε το καλάθι σας';
-$lang['2_7_0_title7'] = 'Ταξινόμηση λευκωμάτων ανά ημερομηνία';
-$lang['2_7_0_title2b'] = 'Νέα Φόρμα Μεταφόρτωσης ';
-$lang['2_7_0_title10'] = 'Φίλτρο Μεγέθους Αρχείου';
-$lang['2_7_0_stp9'] = 'Ένα φίλτρο αναζήτησης έχει προστεθεί στον μαζικό διαχειριστή. Έρχεται με ισχυρή σύνταξη για να αναζητάτε φωτογραφίες σχετικά με τις ημερομηνίες, τις ετικέτες, το μέγεθος, το όνομα του αρχείου και επιλογές, όπως την ακριβή αντιστοιχία αναζήτησης, ΚΑΙ / Ή, ομαδοποίηση, αποκλεισμό. Μπορείτε να διαβάσετε τη λεπτομερή βοήθεια αργότερα. Η ίδια σύνταξη ισχύει και για την γρήγορη πεδίο αναζήτησης στο δημόσιο μενού.';
-$lang['2_7_0_stp8'] = 'Διευκολύνει την ενέργεια για να αδειάσετε το καλάθι σας σε ένα μόνο κλικ.';
-$lang['2_7_0_stp7'] = 'Τώρα μπορείτε να ταξινομήσετε τα λευκώματά σας με βάση την ημερομηνία δημιουργίας των φωτογραφιών ή την ημερομηνία δημοσίευσης. ';
-$lang['2_7_0_stp2b'] = 'Η νέα μορφή μεταφόρτωσης στο Piwigo 2.7 βασίζεται στο HTML5 αντί του Flash, αυτό σημαίνει μια καλύτερη συμβατότητα με τα σύγχρονα προγράμματα περιήγησης στο web, καθώς και αυξημένη αξιοπιστία σε αργές συνδέσεις. Και το drag & drop κάνει την επιλογή φωτογραφιών πολύ πιο εύκολη από το πρόγραμμα περιήγησης των αρχείων σας!';
-$lang['2_7_0_stp10'] = 'Επίσης, έχει προστεθεί ένα φίλτρο για το μέγεθος του αρχείου για τον μαζικό διαχειριστή. Μπορείτε να επιλέξετε μια περιοχή με μια ελάχιστη και μια μέγιστη τιμή.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/el_GR/tour_first_contact.lang.php b/plugins/TakeATour/language/el_GR/tour_first_contact.lang.php
deleted file mode 100644
index 67bb14d11..000000000
--- a/plugins/TakeATour/language/el_GR/tour_first_contact.lang.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-$lang['first_contact_title29'] = 'Διαμόρφωση -> Επιλογές -> Γενικά';
-$lang['first_contact_title28'] = 'Διαμόρφωση';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title22'] = 'Σελίδα Επεξεργασίας Λευκώματος';
-$lang['first_contact_title21'] = 'Άλλες Καρτέλες';
-$lang['first_contact_title20'] = 'Διαχείριση Λευκωμάτων';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title19'] = 'Διαχείριση Λευκωμάτων';
-$lang['first_contact_title18'] = 'Διαχείριση Λευκωμάτων';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title15'] = 'Η σελίδα επεξεργασίας μιας φωτογραφίας';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title11'] = 'Πώς να επεξεργαστείτε μια φωτογραφία';
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title1'] = 'Καλώς ήρθατε στην γκαλερί σας στο Piwigo';
-$lang['first_contact_title9'] = 'Ο Διαχειριστής δέσμης';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title43'] = 'Είναι μια υπέροχη στιγμή';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title4'] = 'Ας προσθέσουμε μια φωτογραφία!';
-$lang['first_contact_title39'] = 'Πρόσθετα';
-$lang['first_contact_title38'] = 'Πρόσθετα';
-$lang['first_contact_title37'] = 'Θέματα';
-$lang['first_contact_title35'] = 'Θέματα';
-$lang['first_contact_title34'] = 'Θέματα';
-$lang['first_contact_title33'] = 'Ρυθμίσεις Επισκεπτών';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title3'] = 'Σελίδα Προσθήκης Φωτογραφίας';
-$lang['first_contact_stp14'] = 'Θα δούμε τώρα τη σελίδα επεξεργασίας μίας εικόνας. Αυτή η σελίδα είναι προσβάσιμη από εδώ, αλλά και από τη σελίδα της δημόσιας εικόνας όταν είστε συνδεδεμένοι ως διαχειριστής. Κάντε κλικ στο Επεθεργασία ή πηγαίνετε στο επόμενο';
-$lang['first_contact_stp13'] = 'Μπορείτε να επεξεργαστείτε τις περιγραφές και άλλα πολλά από το διαχειριστή δέσμης στη λειτουργία της μονάδας. Αλλά για την ώρα, ας μείνουμε στην παγκόσμια κατάσταση';
-$lang['first_contact_stp11'] = 'Έτσι, μπορείτε να επιλέξετε εδώ από μία ή περισσότερες φωτογραφίες';
-$lang['first_contact_stp10'] = 'Αυτή εδώ είναι η σύνδεση για απευθείας πρόσβαση στο καλάθι σας: αυτό είναι ένα εργαλείο για διαχειριστές να προσθέτουν εύκολα τις εικόνες σε ένα σετ για να τις επεξεργαστούν μετά στο Διαχειριστή δέσμης. Μπορείτε να προσθέσετε φωτογραφίες στο καλάθι από τη δημόσια σελίδα εικόνων όταν είστε συνδεδεμένοι ως διαχειριστής ή χρησιμοποιώντας την ενέργεια \ "Προσθήκη στο καλάθι \" στο Διαχειριστή δέσμης';
-$lang['first_contact_stp1'] = 'Γεια σας! Θα είμαι ο οδηγός σας για να ανακαλύψετε το Piwigo. Παρακαλούμε ακολουθήστε τις οδηγίες μου, και κάντε κλικ στο Επόμενο (ή χρησιμοποιήστε τα βελάκια του πληκτρολογίου σας) για να περιηγηθείτε. Αν πάτε σε άλλη σελίδα διαχείρισης, θα μεταφερθείτε στην τρέχουσα σελίδα της Περιήγησης. Αν έχετε κολλήσει και δεν μπορείτε να ολοκληρώσετε την περιήγηση, πηγαίνετε στο <em>Plugins » Κάντε μια Περιήγηση</em> και θα ολοκληρώσετε την περιήγηση.<br> Ας ξεκινήσουμε με την προσθήκη εικόνων!';
-$lang['first_contact_stp16'] = 'εδώ προσθέστε ή να αφαιρέστε τη φωτογραφία από το άλμπουμ. Ο σύνδεσμος είναι εικονικός, δεν μετακινηθούν φυσικά διαθέσιμες φωτογραφίες.';
-$lang['first_contact_stp15'] = 'Σε αυτή τη σελίδα μπορείτε να επεξεργαστείτε όλες τις ιδιότητες της φωτογραφίας, για παράδειγμα ...';
-$lang['first_contact_stp30'] = 'Ας ξεκινήσουμε με την αλλαγή του τίτλου';
-$lang['first_contact_stp28'] = 'Τώρα θα εξετάσουμε τις διαθέσιμες επιλογές για να ορίσετε τον τρόπο εργασίας σας στο Piwigo . Κάντε κλικ στο Διαμόρφωση -> Επιλογές ή απλά πατήσετε Επόμενο.';
-$lang['first_contact_stp2'] = 'Ο σύνδεσμος είναι εδώ. Κάντε κλικ στο κουμπί Επόμενο για να συνεχίσετε';
-$lang['first_contact_stp23'] = 'Κλειδώνοντας ένα λεύκωμα σημαίνει ότι μόνο οι διαχειριστές μπορούν να δουν αυτό το λεύκωμα. Αυτό συνήθως γίνετε όταν ένας διαχειριστής επεξεργάζεται τις ιδιότητες ενός άλμπουμ ή δεν θέλει να δημοσιεύει αμέσως το λεύκωμα.';
-$lang['first_contact_stp22'] = 'Όπως για μια φωτογραφία, εδώ μπορείς να επεξεργαστείς ένα λεύκωμα.';
-$lang['first_contact_stp20'] = 'Όταν τοποθετείτε το ποντίκι σας πάνω σ\' ένα λεύκωμα, εμφανίζονται συνδέσμοι και πληροφορίες για το λεύκωμα. Όταν κάνετε drag and drop σ\' ένα άλμπουμ -μπλοκ στρογγυλεμένο-, θα αλλάξει τη θέση του και μπορείτε να αποθηκεύσετε ή να ακυρώσετε την ταξινόμησή του χειροκίνητα.';
-$lang['first_contact_stp33'] = 'Απλά μια τελευταία λέξη για τις επιλογές στη σελίδα \'Ρυθμίσεις επισκέπτη\' είναι να ορίζετε τις προτιμήσεις των μη εγγεγραμμένων επισκεπτών. Κάθε φορά που το Piwigo αναφέρεται σε «επισκέπτης» σημαίνει μη εγγεγραμμένος επισκέπτες.<br> Ας συνεχίσουμε για τη Διαμόρφωση: Κάντε κλικ στο Διαμόρφωση-> Θέματα ή απλά να πατήσετε Επόμενο.';
-$lang['first_contact_stp32'] = 'Τώρα μπορείτε να αποθηκεύσετε τις αλλαγές';
-$lang['first_contact_stp31'] = 'Στη συνέχεια, το banner, το οποίο εμφανίζεται στην κορυφή της κάθε σελίδας. Όπως μπορείτε να δείτε, επιτρέπονται ετικέτες HTML εδώ. Μπορείτε επίσης να χρησιμοποιήσετε την ετικέτα %gallery_title% για να εμφανιστεί ο τίτλος που μόλις πληκτρολογήσατε παραπάνω.';
-$lang['first_contact_stp3'] = 'Αυτή η πρώτη καρτέλα είναι όπου μπορείτε να προσθέσετε φωτογραφίες κατευθείαν από τον browser σας. Οι άλλες καρτέλες είναι για τους άλλους τρόπους για να ανεβάσετε φωτογραφίες';
-$lang['first_contact_stp29'] = 'Εδώ, σε αυτή την πρώτη σελίδα, θα θέσετε την ουσιαστική και βασική διαμόρφωση της γκαλερί σας.';
-$lang['first_contact_stp37'] = 'Για να εγκαταστήσετε νέα θέματα, μπορείτε να τα κατεβάσετε απευθείας από την καρτέλα \'Προσθήκη θέματος\' Μόνο θέματα που χαρακτηρίζονται ως συμβατά με την έκδοση του Piwigo θα εμφανιστούν.<br>
-Ας ανακαλύψουμε τα πρόσθετα τώρα! Κάντε κλικ στο <em> Πρόσθετα » Διαχείριση </em>';
-$lang['first_contact_stp4'] = 'Πρώτα διαλέξτε ένα λεύκωμα? Δημιουργήσετε ένα, εάν δεν υπάρχει ακόμα λεύκωμα.';
-$lang['first_contact_stp39'] = 'Σ\' αυτή την πρώτη σελίδα, παρατίθενται τα εγκατεστημένα πρόσθετα. Στην κορυφή, παρατίθενται τα ενεργοποιημένα πρόσθετα, τα οποία τρέχουν ήδη. Στο κάτω μέρος, τα πρόσθετα τα οποία είναι εγκατεστημένα στο φάκελο / plugins, αλλά είναι απενεργοποιημένα. Διαγραφή ενός πρόσθετου σημαίνει ότι κάθε ίχνος του plugin θα πρέπει να αφαιρεθεί (αρχεία, επιλογές κλπ.). Για τα περισσότερα από τα πρόσθετα, η απενεργοποίηση θα κρατήσει τα δεδομένα που καταχωρούνται από αυτά.';
-$lang['first_contact_stp38'] = 'Τα Πρόσθετα είναι ένας εύκολος τρόπος για να προσαρμόσετε Piwigo σας. Μπορούν να κάνουν σχεδόν οτιδήποτε μπορείτε να φανταστείτε από μικρή προσθήκη κειμένου μέχρι ολοκληρωμένες λύσεις, όπως το Community plugin που επιτρέπει στους μη διαχειριστές χρήστες να ανεβάζουν, χωρίς να εισέρχονται στο τμήμα διαχείρισης.';
-$lang['first_contact_stp41'] = 'Μπορείτε να δείτε στην τελευταία καρτέλα όλα τα plugins που είναι διαθέσιμα για την έκδοση του Piwigo. Υπάρχουν εκατοντάδες plugins!';
-$lang['first_contact_stp40'] = 'Εδώ είμαστε! Μην με απενεργοποιήσετε τώρα, αλλά μπορείτε να δείτε, πως μπορείτε να απενεργοποιήσετε ή να επαναφέρετε ένα ενεργοποιημένο plugin.';
-$lang['first_contact_stp6'] = 'Θα δείτε ότι οι φωτογραφίες απαριθμούνται. Όταν είστε έτοιμοι, κάντε κλικ στο κουμπί Ξεκινήστε την Μεταφόρτωση. ';
-$lang['first_contact_stp43'] = 'Η περιήγηση αυτή ήταν αρκετά μακροσκελής, αλλά είδαμε μόνο μέρος από το πόσο ισχυρό εργαλείο είναι το Piwigo. Όλα έχουν ένα τέλος, αυτή η επισκόπηση τελείωσε.<br><br>Μπορείτε να ανακαλύψετε περισσότερα χαρακτηριστικά του Piwigo σε βάθος, κάνοντας μια άλλη περιήγηση ή διαβάζοντας την τεκμηρίωση, στην ιστοσελίδα του piwigo.org.<br><br> Μην ξεχνάτε επίσης τον σύνδεσμο της Βοήθειας στην επάνω δεξιά γωνία σε κάθε Σελίδα διαχείρισης. <p style="text-align:center">Απολαύστε το Piwigo σας!</p>';
-$lang['first_contact_stp9'] = 'Όπως σας είναι γνωστά στον Batch Manager, όπου μπορείτε να επεξεργαστείτε πολλές εικόνες μαζικά.<br><br>Εδώ το προφίλτρο έχει ήδη οριστεί στο "Καλάθι" γιατί ερχόμαστε από τη σελίδα μεταφόρτωσης.';
-$lang['first_contact_stp8'] = 'Ας τις επεξεργαστούμε! Κάντε κλικ στον σύνδεσμο.';
-$lang['first_contact_stp7'] = 'Εδώ έχουμε μια περίληψη των φωτογραφιών σας που έχετε ανεβάσει. Δείτε ότι το Piwigo έχει δημιουργήσει από μόνο του τις μικρογραφίες. Μπορείτε να:<ul><li>διαχειρίζεται όλες τις φωτογραφίες που φορτώθηκαν με τον Batch Manager</li><li>επεξεργαστείτε τις ιδιότητες μιας εικόνας, κάνοντας κλικ σε αυτήν</li><li>προσθέσετε περισσότερες φωτογραφίες </li></ul>';
-$lang['first_contact_stp5'] = 'Στη συνέχεια, κάντε κλικ στο κουμπί για να επιλέξετε τις φωτογραφίες για να στείλετε, ή απλά drag and drop τα αρχεία σας.';
-$lang['first_contact_stp35'] = 'Ρυθμίστε το αγαπημένο σας θέμα, ως το προεπιλεγμένο θέμα.';
-$lang['first_contact_stp34'] = 'Επιλέγοντας ένα θέμα είναι το πρώτο βήμα για να προσαρμόσετε Piwigo σας. Τα θέματα που έχουν εγκατασταθεί παρατίθενται εδώ.<br> Μπορούν να ενεργοποιηθούν περισσότερα από ένα θέμα: Οι χρήστες μπορούν να αλλάξουν το θέμα τους, επιλέγοντας ένα μεταξύ εκείνων που είναι ενεργοποιημένα εδώ, αν η επιλογή «Να επιτρέπεται προσαρμογή από το χρήστη» είναι τσεκαρισμένη στη σελίδα Επιλογές.';
-$lang['first_contact_stp21'] = 'Η επόμενη καρτέλα είναι μια σελίδα όπου μπορείτε να μετακινήσετε οποιοδήποτε εικονικό άλμπουμ.<br>Η καρτέλα permalink είναι για να ορίσετε μια συγκεκριμένη διεύθυνση URL για ένα λεύκωμα.<br>Αλλά ας επεξεργαστούμε ένα λεύκωμα: Κάντε κλικ στο Επεξεργασία λευκώματος ';
-$lang['first_contact_stp19_b'] = 'Εδώ παρατίθενται λευκώματα \'βάσης\'.';
-$lang['first_contact_stp19'] = 'Εδώ παρατίθενται λευκώματα \'βάσης\'. Αν δείτε ένα λεύκωμα με διακεκομμένο φόντο, αυτό σημαίνει ένα φυσικό λεύκωμα από ένα συγχρονισμό μέσω FTP. Φυσικά λευκώματα δεν μπορούν να μετακινηθούν ή διαγραφούν από εδώ. Τα άλλα λευκώματα ονομάζονται εικονικά λευκώματα.';
-$lang['first_contact_stp18'] = 'Τώρα ας δούμε πώς μπορείτε να διαχειριστείτε λευκώματα. Κάντε κλικ στο <em>Λευκώματα » Διαχειριστείτε</em> ή πατήστε Επόμενο';
-$lang['first_contact_stp17'] = 'Εδώ μπορείτε να ορίσετε τη φωτογραφία ως μια μικρογραφία ενός ή μερικών λευκωμάτων. Η φωτογραφία δεν χρειάζεται να σχετίζεται με το λεύκωμα για να είναι η μικρογραφία του. Αν η φωτογραφία σχετίζεται με το λεύκωμα, είναι ακόμα πιο εύκολο να το ορίσετε ως μικρογραφία του λευκώματος από τη δημόσια σελίδα της φωτογραφίας (Συμβουλή: Χρησιμοποιήστε το plugin Εργαλεία Διαχειριστή για ακόμη μεγαλύτερη απλότητα).';
-$lang['first_contact_stp12'] = 'στη συνέχεια επεξεργαστείτε τα χρησιμοποιώντας μια ενέργεια'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/el_GR/tour_privacy.lang.php b/plugins/TakeATour/language/el_GR/tour_privacy.lang.php
deleted file mode 100644
index 17c61645e..000000000
--- a/plugins/TakeATour/language/el_GR/tour_privacy.lang.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-$lang['privacy_title1'] = 'Καλώς ήρθατε στην Περιήγηση Προστασίας Προσωπικών Δεδομένων';
-$lang['privacy_title12'] = 'Δικαιώματα λευκώματος';
-$lang['privacy_title11'] = 'Δικαιώματα λευκώματος';
-$lang['privacy_title10'] = 'Δικαιώματα λευκώματος';
-$lang['privacy_title15'] = 'Συμβουλή';
-$lang['privacy_title17'] = 'Ομάδες';
-$lang['privacy_title18'] = 'Ομάδες';
-$lang['privacy_title19'] = 'Χρήστες';
-$lang['privacy_title2'] = 'Βοήθεια στο εσωτερικό του Piwigo σας';
-$lang['privacy_title9'] = 'Επίπεδο Προστασίας Προσωπικών Δεδομένων';
-$lang['privacy_title8'] = 'Επίπεδο Προστασίας Προσωπικών Δεδομένων';
-$lang['privacy_title6'] = 'Επίπεδο Προστασίας Προσωπικών Δεδομένων';
-$lang['privacy_title7'] = 'Επίπεδο Προστασίας Προσωπικών Δεδομένων';
-$lang['privacy_title5'] = 'Δικαιώματα > Ομάδες';
-$lang['privacy_title4'] = 'Δικαιώματα';
-$lang['privacy_title3'] = 'Δικαιώματα';
-$lang['privacy_title24'] = 'Ήταν μια ευχάριστη στιγμή.';
-$lang['privacy_title22'] = 'Τοπική Επεξεργασία: Προστασία Πρωτότυπου';
-$lang['privacy_title21'] = 'Δημόσιες Φωτογραφίες';
-$lang['privacy_title20'] = 'Δημόσιες Φωτογραφίες';
-$lang['privacy_stp11'] = 'Τώρα κάντε κλικ στην καρτέλα Δικαιώματα';
-$lang['privacy_stp10'] = 'Ευρισκόμαστε στο το μενού Διαχείριση Λίστα; Λευκωμάτων διαθέσιμο από το μενού χρησιμοποιώντας <em> Λευκώματα » Διαχείριση</em><br><br>Μπορείτε να επεξεργαστείτε το λεύκωμα κάνοντας hover και στη συνέχεια κάντε κλικ στο Επεξεργασία.';
-$lang['privacy_stp1'] = 'Γεια σας! Θα είμαι ο οδηγός σας για να ανακαλύψετε πώς να προστατεύσετε τις φωτογραφίες σας στο Piwigo. Παρακαλούμε ακολουθήστε τις οδηγίες μου, και κάντε κλικ στο Επόμενο(ή χρησιμοποιήστε τα βελάκια του πληκτρολογίου σας) για να περιηγηθείτε. Αν πάτε σε μια άλλη σελίδα της διαχείρισης, θα σας κατευθύνει προς την τρέχουσα σελίδα της Περιήγησης. Αν κολλήσετε κάπου και δεν μπορέσετε να ολοκληρώσετε την Περιήγηση, αν πάτε στο <em> Πρόσθετα »Κάντε μια Περιήγηση</em> θα ολοκληρώσει την περιοδεία. <br> Ας ξεκινήσουμε!';
-$lang['privacy_stp19'] = 'Εδώ μπορείτε να επεξεργαστείτε γρήγορα έναν μεμονωμένο χρήστη κάνοντας hovering πάνω από αυτόν και στη συνέχεια κάντε κλικ στο σύνδεσμο Επεξεργασία.<br><br>Μπορείτε να επιλέξετε πολλούς χρήστες και να τα επεξεργαστείτε με τη μία και επιλέγοντας μια Δράση για την εφαρμογή.';
-$lang['privacy_stp18'] = 'Για να προσθέσετε ή να αφαιρέσετε χρήστες σε ομάδες, πηγαίνετε στη σελίδα <em>Χρήστες » Διαχείριση</em> ';
-$lang['privacy_stp17'] = 'Μια ομάδα στο Piwigo είναι ένα σύνολο χρηστών: έτσι οι ομάδες κάνουν εύκολη τη διαχείριση δικαιωμάτων λευκωμάτων και διαχειρίζεται τις ιδιότητες χρηστών. Αυτή εδώ είναι η σελίδα όπου μπορείτε να διαχειριστείτε ομάδες, π.χ. μετονομασίες, συγχώνευση, διπλοτυπία, και να τις διαγράψετε. Μπορείτε επίσης να ορίσετε μία ή περισσότερες ομάδες ως "προεπιλεγμένη ομάδα", που σημαίνει ότι πρόσφατα εγγεγραμμένοι χρήστες θα επηρεαστούν από αυτές τις ομάδες που έχουν οριστεί ως προεπιλογή.';
-$lang['privacy_stp16'] = 'Όπως και στον υπολογιστή σας, μπορείτε να επιλέξετε διάφορα λευκώματα χρησιμοποιώντας τα πλήκτρα Shift και Ctrl, στη συνέχεια, κάντε κλικ στο βέλος για να μεταβείτε..<br><br>Τώρα, επιτρέψτε μου να σας συστήσω τις ομάδες.';
-$lang['privacy_stp15'] = 'Πριν εξηγήσουμε τις ομάδες, μια επαγγελματική συμβουλή: εδώ είναι ο σύνδεσμος για μια σελίδα για να ορίσετε ως ιδιωτικό / δημόσιο πολλά λευκώματα ταυτοχρόνως. Κάντε κλικ σε αυτό';
-$lang['privacy_stp14'] = 'Στη συνέχεια, οι χρήστες και ομάδες χρηστών μπορεί να τους παραχωρηθεί πρόσβαση στο λεύκωμα.';
-$lang['privacy_stp13'] = 'Τώρα κάντε κλικ στο ιδιωτικό.';
-$lang['privacy_stp12'] = 'Σε αυτή τη σελίδα, μπορείτε να επιλέξετε αν το άλμπουμ θα είναι διαθέσιμο για όλους ή θα πρέπει να περιορίζεται για ορισμένους χρήστες';
-$lang['privacy_stp20'] = 'Τώρα ξέρετε πώς να κρατήσει ιδιωτικές τις φωτογραφίες σας, αλλά μπορεί να αναρωτιέστε για το πώς να προστατέψετε τις δημόσιες φωτογραφίες σας. Ίσως πρώτα να σκεφτούμε σχετικά με τον αποκλεισμό του επισκέπτη από το να κατεβάσει τη φωτογραφία: δεν μπορείτε, γιατί η ιστοσελίδα έχει δημιουργηθεί με αυτόν τον τρόπο (το πρόγραμμα περιήγησης του επισκέπτη κατεβάσετε όλα τα μέσα που εμφανίζονται και περισσότερο). Μπορεί να απενεργοποιηθεί το δεξί κλικ, και να μπει ένα κενό layer από πάνω από τη φωτογραφίας κλπ, αλλά έτσι δεν θα απενεργοποιήσετε τη λήψη. Πλήρης ιστοσελίδες μπορούν να κατέβουν από οποιονδήποτε web browser.';
-$lang['privacy_stp2'] = 'Εδώ μπορείτε να έχετε πρόσβαση σε ολοκληρωμένη Βοήθεια. Κάντε κλικ στο κουμπί Επόμενο για να συνεχίσετε απευθείας στη σελίδα βοήθειας για τη διαχείριση των αδειών';
-$lang['privacy_stp22'] = '<em>Για προχωρημένους χρήστες</em><br><br>Στο Piwigo, μπορείτε να προστατεύσετε τις αρχικές φωτογραφίες χρησιμοποιώντας την τοπική διαμόρφωση σας. Χρησιμοποιήστε τη μεταβλητή $conf[\'original_url_protection\']: από προεπιλογή είναι άδεια, μπορείτε να ορίσετε την τιμή σε "images" για να προστατευτούν μόνο οι εικόνες ή "all" για να προστατεύσετε όλους τους τύπους αρχείων πολυμέσων, το οποίο μπορεί να καταναλώνει πόρους ή ίσως απλά δεν λειτουργεί στο διακομιστή σας.<br><br>Αυτή η επιλογή δουλεύει σε δημόσιο και ιδιωτικό περιεχόμενο. Αυτή η επιλογή απαιτεί σήμερα να αρνηθείτε την πρόσβαση στους φακέλους /upload / και /galleries, χρησιμοποιώντας ένα αρχείο .htaccess (συνήθως ένα αρχείο κειμένου με "Deny from all" για το περιεχόμενο)ή ρυθμίσεις του διακομιστή.<br><br>Παρακαλείστε να σημειώσετε ότι τα ονόματα των αρχείων των φωτογραφιών που ανέβηκαν χρησιμοποιώντας άλλη μέθοδο εκτος του FTP είναι <b>τυχαία</b>, έτσι ώστε να είναι αδύνατον να μαντέψει: ότι το όνομα αρχείου και έτσι η διαδρομή προς την αρχική φωτογραφία μπορεί να γίνει γνωστή μόνο αν ο επισκέπτης έχει πρόσβαση σε αλλαγή μεγέθους εικόνας της φωτογραφίας, όπως η μικρογραφία. $conf[\'original_url_protection\'] και την παρεμπόδιση πρόσβασης στους φακέλους /upload και /galleries είναι για να αποφευχθεί αυτή η περίπτωση.';
-$lang['privacy_stp21'] = 'Η λύσεις είναι:<ul><li>βάλτε ένα υδατογράφημα, τουλάχιστον στις μεσαίες και υψηλής ευκρίνειας φωτογραφίες.</li><li>απενεργοποιήστε τα μεγέθη XL και XXL.</li><li>και απενεργοποιήστε το High Definition (τη λήψη και την απεικόνιση της αρχικής φωτογραφία) για τους ενδιαφερόμενους χρήστες.';
-$lang['privacy_stp14b'] = 'Σημαντικό γεγονότος: οι webmasters και οι διαχειριστές δεν είναι παντογνώστες όταν περιηγούνται στο δημόσιο μέρος, αλλά μπορούν να έχουν πρόσβαση σε κάθε άλμπουμ και φωτογραφίες στην πλευρά του διαχειριστή.';
-$lang['privacy_stp3'] = 'Αφιερώστε λίγο χρόνο για να διαβάσετε τις παρακάτω πληροφορίες.';
-$lang['privacy_stp24'] = 'Αυτή η περιήγηση τελείωσε. <p style="text-align:center"> Απολαύστε το Piwigo σας!</p> Αν σας αρέσει το Piwigo και θέλετε να μας στηρίξετε, μπορείτε να συνεισφέρετε βοηθώντας στις μεταφράσεις, με δωρεά, κλπ c. <a href="http://piwigo.org/basics/contribute" target="_blank"> Κάντε κλικ εδώ για να μας στηρίξετε </a>. Ευχαριστώ!';
-$lang['privacy_stp9'] = '... Και επιλέξτε την ενέργεια "Ποιος μπορεί να δει τις φωτογραφίες;». Τώρα μπορείτε να αλλάξετε το επίπεδο προστασίας των επιλεγμένων φωτογραφιών.<br><br>Η Αλλά μπορείτε επίσης να κάνετε το ίδιο για μια συγκεκριμένη φωτογραφία, στη σελίδα επεξεργασία της. Μπορείτε να αποκτήσετε πρόσβαση σε αυτό από το δημόσιο μέρος, ή από εδώ.<br><br>Τώρα, εγώ θα σας δείξω το άλλο σύστημα αδειών ανά λεύκωμα με βάση τις ομάδες και τους χρήστες.';
-$lang['privacy_stp6'] = 'Όταν φορτώνετε τις φωτογραφίες, μπορείτε να αλλάξετε το επίπεδο απορρήτου των ανεβασμένων φωτογραφιών εκεί ...';
-$lang['privacy_stp8'] = 'Επιλέξτε μία ή περισσότερες φωτογραφίες ...';
-$lang['privacy_stp7'] = '... Ή μπορείτε να το κάνετε αργότερα, εδώ στη Μαζική Διαχείριση σε Παγκόσμια λειτουργία.<br><br>Αυτή είναι στη σελίδα <em> Φωτογραφίες » Πρόσφατες φωτογραφίες</em>, έτσι ώστε το φίλτρο" Τελευταία εισαγωγή" έχει ρυθμιστεί.';
-$lang['privacy_stp5'] = 'Παρακάτω εξηγείται πώς μπορείτε να διαχειριστείτε τις ομάδες.<br>Τα εν λόγω δικαιώματα είναι μόνο για την πρόσβαση στις φωτογραφίες και στα λευκώματα, κατά την περιήγηση στο δημόσιο μέρος ή για τις εξωτερικές εφαρμογές. Θα δούμε αργότερα και άλλες προστασίες, αλλά τώρα ας κάνουμε λίγη εξάσκηση!';
-$lang['privacy_stp4'] = 'Οπότε έχουμε δύο συστήματα για τη διαχείριση των δικαιωμάτων πρόσβασης στις φωτογραφίες. Είναι ανεξάρτητα, ώστε να μπορείτε να δημιουργήσετε μια ομάδα που ονομάζεται οικογένεια, αλλά αυτή η ομάδα δεν έχει τίποτα να κάνει με το επίπεδο προστασίας των δικαιωμάτων της Οικογένεια. <br><br>Τα επίπεδα προστασίας εφαρμόζονται ανά φωτογραφία, και τα δικαιώματα της ομάδας / χρήστη εφαρμόζεται ανά άλμπουμ. Μπορείτε να χρησιμοποιήσετε και τα δύο ή μόνο το ένα σύστημα, το οποίο είναι ευέλικτο.<br><br>Η επόμενη καρτέλα είναι για την ομάδα διαχείριση.
-'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/en_UK/description.txt b/plugins/TakeATour/language/en_UK/description.txt
deleted file mode 100644
index 4c1795604..000000000
--- a/plugins/TakeATour/language/en_UK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Visit your Piwigo to discover its features. This plugin has multiple thematic tours for beginners and advanced users. \ No newline at end of file
diff --git a/plugins/TakeATour/language/en_UK/index.php b/plugins/TakeATour/language/en_UK/index.php
deleted file mode 100644
index db1eae0d9..000000000
--- a/plugins/TakeATour/language/en_UK/index.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | PhpWebGallery - a PHP based picture gallery |
-// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
-// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
-// +-----------------------------------------------------------------------+
-// | file : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
-// | last update : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
-// | last modifier : $Author: rub $
-// | revision : $Revision: 1912 $
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/en_UK/plugin.lang.php b/plugins/TakeATour/language/en_UK/plugin.lang.php
deleted file mode 100644
index 893ad6319..000000000
--- a/plugins/TakeATour/language/en_UK/plugin.lang.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-$lang['Start the Tour'] = 'Start the Tour';
-$lang['Visit your Piwigo!'] = 'Visit your Piwigo!';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Take a tour and discover the features of your Piwigo gallery » Go to the available tours';
-$lang['TAT_descrp'] = 'Welcome! Here is a list of all the available tours to help you discover the features of your Piwigo gallery.<br><br>Launch a tour below, then follow the instructions. Click Next/Prev (or use the arrows of your keyboard) to navigate during a tour. While you are in a tour, if you go to another page of the administration, you will be redirected to the current page of the Tour. If you are stuck and can\'t end the tour, going to <em>Plugins » Take A Tour</em> will end the tour.';
-$lang['takeatour_configpage'] = 'Take A Tour » List of Tours';
-$lang['Prev'] = 'Prev';
-$lang['Next '] = 'Next';
-$lang['End tour'] = 'End tour';
-$lang['First Contact'] = 'First Contact';
-$lang['first_contact_descrp'] = 'Recommended for beginners, this tour introduce you to Piwigo and its basic features. It will start by showing you how to add photos, then manage them. The tour continues with album management and ends with customization using configuration, themes and plugins.';
-$lang['2.7 Tour'] = '2.7 Tour';
-$lang['2_7_0_descrp'] = 'Discover What\'s New in Piwigo 2.7';
-$lang['Privacy'] = 'Privacy';
-$lang['privacy_descrp'] = 'This tour presents all the ways to protect your photo from public access with permissions per album and per photo, and from copying using image protections.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/en_UK/tour_2_7_0.lang.php b/plugins/TakeATour/language/en_UK/tour_2_7_0.lang.php
deleted file mode 100644
index c84650b7c..000000000
--- a/plugins/TakeATour/language/en_UK/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_title1'] = 'Welcome in Piwigo 2.7';
-$lang['2_7_0_stp1'] = 'Hello! I will be your guide to discover Piwigo. Please follow my instructions, and click Next (or use the arrows of your keyboard) to navigate. If you go to an other page, you will be redirected to the current page of the Tour.';
-$lang['2_7_0_title2'] = 'First new feature';
-$lang['2_7_0_stp2'] = 'As you can see, a new default plugin has been added: Take A Tour. This plugin helps you to discover your Piwigo. Here is where are listed all the available tours.<br>This page is available in <em>Plugins » Take A Tour</em>';
-$lang['2_7_0_title4'] = 'Search Page';
-$lang['2_7_0_stp4'] = 'The Search page has been reworked: ability to select properties on which the word search applies, list of authors found in database, auto-complete list of tags, auto-complete list of albums...';
-$lang['2_7_0_title5'] = 'Time';
-$lang['2_7_0_stp5'] = 'You can set the time in addition to the date, using Hour and Minute sliders';
-$lang['2_7_0_title6'] = 'Select boxes';
-$lang['2_7_0_stp6'] = 'The select box for picking albums, tags etc has changed to a new one more user-friendly. Test it below';
-$lang['2_7_0_title7'] = 'Sort albums by date';
-$lang['2_7_0_stp7'] = 'Now you can sort your albums based on the photos creation date or posted date';
-$lang['2_7_0_title8'] = 'Empty your caddie';
-$lang['2_7_0_stp8'] = 'Easy action link to empty your caddie in just one click.';
-$lang['2_7_0_title9'] = 'Search filter';
-$lang['2_7_0_stp9'] = 'A search filter has been added to the batch manager. It comes with a powerful syntax to search for photos on dates, tags, size, file name and also search options like exact match, AND/OR, grouping, exclusion. You can read the detailed help later. The same syntax applies to the quick search field on public side menu.';
-$lang['2_7_0_title10'] = 'File size filter';
-$lang['2_7_0_stp10'] = 'A filter on file size has also been added to the batch manager. You can select a range with a minimum and maximum value.';
-$lang['2_7_0_title11'] = 'See you soon!';
-$lang['2_7_0_stp11'] = 'This tour is over.<p style="text-align:center">Enjoy your Piwigo 2.7!</p>If you like Piwigo and want to support us, you can contribute by helping for translations, donating, etc. <a href="http://piwigo.org/basics/contribute" target="_blank">Click here to support us</a> Thanks!';
-$lang['2_7_0_title2b'] = 'New upload form';
-$lang['2_7_0_stp2b'] = 'The new upload form in Piwigo 2.7 is based on HTML5 instead of Flash, it means a better compatibility with modern web browsers as well as an increased reliability on slow connections. And drag & drop will make photos selection much easier from your file browser!'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/en_UK/tour_first_contact.lang.php b/plugins/TakeATour/language/en_UK/tour_first_contact.lang.php
deleted file mode 100644
index 04b160882..000000000
--- a/plugins/TakeATour/language/en_UK/tour_first_contact.lang.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-$lang['first_contact_title1'] = 'Welcome in your Piwigo gallery';
-$lang['first_contact_stp1'] = 'Hello! I will be your guide to discovering Piwigo. Please follow my instructions, and click Next (or use the arrows of your keyboard) to navigate. If you go to another page of the administration, you will be redirected to the current page of the Tour. If you are stuck and can\'t end the tour, going to <em>Plugins » Take A Tour</em> will end the tour.<br>Let\'s start by adding photos!';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_stp2'] = 'The link is here. Click on it or click Next to continue';
-$lang['first_contact_title3'] = 'Add Photo Page';
-$lang['first_contact_stp3'] = 'This first tab is where you add photos directly from your browser. The other tabs are about the other ways to upload photos';
-$lang['first_contact_title4'] = 'Let\'s add a photo!';
-$lang['first_contact_stp4'] = 'First choose an album; create one if there is no album yet.';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_stp5'] = 'Then click the button to select photos to send, or just drag and drop your files.';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_stp6'] = 'You see that photos are being listed. When you\'re ready click the button Start Upload';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_stp7'] = 'Here a summary of your uploaded photos. See that Piwigo has itself generated the thumbnails. You can:<ul><li>manage all the uploaded photos in the Batch Manager</li><li>edit the properties of a photo by clicking on it</li><li>add more photos</li></ul>';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_stp8'] = 'Let\'s edit them! Click on the link.';
-$lang['first_contact_title9'] = 'The Batch Manager';
-$lang['first_contact_stp9'] = 'You are now in the Batch Manager, where you can batch edit multiple photos.<br><br>Here the prefilter is already set on "Caddie" because we come from the upload page.';
-$lang['first_contact_title10'] = '';
-$lang['first_contact_stp10'] = 'Here is the link to directly access your caddie: that\'s a tool for administrators to easily pick photos when browsing the public part in order to edit them in the Batch Manager.<br><br>You can add photos to the caddie from the public photo page when logged in as an admin, or using the action "Add to caddie" on the Batch Manager.';
-$lang['first_contact_title11'] = 'How to edit a photo';
-$lang['first_contact_stp11'] = 'From here you can select one or more photos';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_stp12'] = 'then edit them using an action';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_stp13'] = 'You can edit descriptions and more from the batch manager in single mode. But for now, let\'s stay in the global mode';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_stp14'] = 'Now we will see the <b>edit page</b> of one photo. That page is reachable from here but also from the public photo page when logged as an administrator.<br><br>Hover the thumbnail then click on Edit.';
-$lang['first_contact_title15'] = 'The edit page of a photo';
-$lang['first_contact_stp15'] = 'On this page you can edit all the properties of a photo, for instance...';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_stp16'] = '...in which album(s) is the photo.<br><br>So here you can add or remove the photo from albums. The link is virtual, no photos will be physically moved ever.';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_stp17'] = 'Here you can set the photo as a thumbnail of one or several albums. The photo doesn\'t have to be associated with the album to be its thumbnail. If the photo is associated with the album, it\'s even simpler to set it as album thumbnail from the public page of the photo (tip: use plugin Admin Tools for even more simplicity).';
-$lang['first_contact_title18'] = 'Manage albums';
-$lang['first_contact_stp18'] = 'Let\'s see how to manage albums now. Click <em>On album » Manage</em> or hit Next';
-$lang['first_contact_title19'] = 'Manage Albums';
-$lang['first_contact_stp19'] = 'Here are listed \'root\' albums. If you see an album with a dashed background, it means a physical album from an FTP synchronisation. Physical albums can\'t be moved or deleted from here. The other albums are called virtual albums.';
-$lang['first_contact_stp19_b'] = 'Here are listed \'root\' albums.';
-$lang['first_contact_title20'] = 'Manage Albums';
-$lang['first_contact_stp20'] = 'When your mouse hovers over an album, links and information appear. When you drag and drop an album -a rounded block-, you will change its position and then you can save or cancel your manual order.';
-$lang['first_contact_title21'] = 'Other Tabs';
-$lang['first_contact_stp21'] = 'The next tab is a page where you can move any virtual album.<br>The permalink tab is to set a particular url for an album.<br>But let\'s edit an album: click on Edit an album';
-$lang['first_contact_title22'] = 'Album Edit Page';
-$lang['first_contact_stp22'] = 'Like for a photo, here you can edit the properties of an album';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_stp23'] = 'Locking an album means only administrators will be able to see that album: very useful when preparing the album before publishing';
-$lang['first_contact_title28'] = 'Configuration';
-$lang['first_contact_stp28'] = 'Now we will look at the options available to set Piwigo working your way. Click on Configuration->Options or just hit Next.';
-$lang['first_contact_title29'] = '<em>Configuration » Options » General</em>';
-$lang['first_contact_stp29'] = 'Here, on that first page, you will set the essential and basic configuration of your gallery.';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_stp30'] = 'Let\'s start by changing the title';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_stp31'] = 'Then the banner, which will be displayed on top of every pages. As you can see, HTML tags are allowed here. You can also use the %gallery_title% tag to display the title you just typed above.';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_stp32'] = 'Now save you changes';
-$lang['first_contact_title33'] = 'Guest settings';
-$lang['first_contact_stp33'] = 'Just a final word about the options, the \'Guest settings\' page is to set the preferences of unregistered visitors. Each time Piwigo refers to \'guest\' that means unregistered visitors.<br>Let\'s continue with Configuration: click on <em>Configuration » Themes</em> or just hit Next.';
-$lang['first_contact_title34'] = 'Themes';
-$lang['first_contact_stp34'] = 'Choosing a theme is the first step to customize your Piwigo. Themes installed are listed here.<br>More than one theme can be enabled: users can change their theme by choosing one amongst the ones enabled here, if the option \'Allow user customization\' is checked on the Option page.';
-$lang['first_contact_title35'] = 'Themes';
-$lang['first_contact_stp35'] = 'Set your favorite theme as the default theme.';
-$lang['first_contact_title37'] = 'Themes';
-$lang['first_contact_stp37'] = 'To install new themes, you can directly download them from the tab \'Add a theme\'. Only the themes marked as compatible with your version of Piwigo are shown.<br><br>Let\'s discover plugins now! Click on <em>Plugin » Manage</em>';
-$lang['first_contact_title38'] = 'Plugins';
-$lang['first_contact_stp38'] = 'Plugins are very easy ways to customize your Piwigo. They can do almost anything you can imagine from small text additions to complete features, like the Community plugin which allows non administrators users to upload without entering the administration part.';
-$lang['first_contact_title39'] = 'Plugins';
-$lang['first_contact_stp39'] = 'On that first page, are listed the installed plugins.<br><br>At the top, are listed the plugins activated, which are currently running.<br><br>At the bottom, the plugins which are installed in the /plugins folder, but disabled.<br><br>Deleting a plugin means that any trace of the plugin will be removed (files, options etc). For most of the plugins, a deactivation will keep the data registered by the plugin.';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_stp40'] = 'It\'s me here! Don\'t deactivate me now, but you can see you can Deactivate or Restore an activated plugin.';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_stp41'] = 'You can see on the last tab all the plugins available for your version of Piwigo. Hundred of plugins are there!';
-$lang['first_contact_title43'] = 'It\'s been a great time';
-$lang['first_contact_stp43'] = 'This tour was quite long, but we only have seen a small part of how powerful Piwigo is. Everything has an end, this overview is finished.<br><br>You can investigate more deeply the features of Piwigo by taking another tour or reading our documentation, on the piwigo.org website.<br><br>Don\'t forget also the Help link at the upper right corner of any administration page.<p style="text-align:center">Enjoy your Piwigo!</p>'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/en_UK/tour_privacy.lang.php b/plugins/TakeATour/language/en_UK/tour_privacy.lang.php
deleted file mode 100644
index 7955e63fd..000000000
--- a/plugins/TakeATour/language/en_UK/tour_privacy.lang.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-$lang['privacy_title1'] = 'Welcome in the Privacy Tour';
-$lang['privacy_stp1'] = 'Hello! I will be your guide to discover how to protect your photos in Piwigo. Please follow my instructions, and click Next (or use the arrows of your keyboard) to navigate. If you go to an other page of the administration, you will be redirected to the current page of the Tour. If you are stuck and can\'t end the tour, going to <em>Plugins » Take A Tour</em> will end the tour.<br>Let\'s start!';
-$lang['privacy_title2'] = 'Help inside your Piwigo';
-$lang['privacy_stp2'] = 'Here you can access the integrated Help. Click Next to continue directly to the Help page about managing permissions';
-$lang['privacy_title3'] = 'Permissions';
-$lang['privacy_stp3'] = 'Take a moment to read the information below.';
-$lang['privacy_title4'] = 'Permissions';
-$lang['privacy_stp4'] = 'So we have two systems for managing acccess permissions to the photos. They are independent, so you can create a group called Family, but that group has nothing to do with the privacy level Family. <br><br>The levels of privacy are applied per photo, and the group/user permissions are applied per album. You can use both or only one system, that\'s flexible.<br><br>The next Tab is about group managment.';
-$lang['privacy_title5'] = 'Permissions > Groups';
-$lang['privacy_stp5'] = 'Below is explained how you can manage the Groups.<br>Those permissions are only for the access of the photos and the albums, when browsing on the public part or for the external applications. We will see later other protections, but let\'s now practice!';
-$lang['privacy_title6'] = 'Privacy Level';
-$lang['privacy_stp6'] = 'When you upload the photos, you can change the Privacy Level of the uploaded photos right there...';
-$lang['privacy_title7'] = 'Privacy Level';
-$lang['privacy_stp7'] = '... or you can do that later one, here in the Batch Manager in Global Mode.<br><br>This is the page <em>Photos » Recent photos</em>, so the filter "Last Import" is set.';
-$lang['privacy_title8'] = 'Privacy Level';
-$lang['privacy_stp8'] = 'Select one or more photos...';
-$lang['privacy_title9'] = 'Privacy Level';
-$lang['privacy_stp9'] = '... and select the action "Who can see the photos?". Now you can change the privacy level of the selected photos.<br><br>But you can also do that for a specific photo, on its edit page. You can access to it from the public part, or from here.<br><br>Now, I will show you the other system of permission per album based on the groups and users.';
-$lang['privacy_title10'] = 'Album permissions';
-$lang['privacy_stp10'] = 'We are in the Album list management available from the menu using <em>Albums » Manage</em><br><br>Edit on album by hovering it and then click on Edit.';
-$lang['privacy_title11'] = 'Album permissions';
-$lang['privacy_stp11'] = 'Now click on the Permissions tab';
-$lang['privacy_title12'] = 'Album permissions';
-$lang['privacy_stp12'] = 'On that page, you can choose if the album will be available for anyone or will be restricted to some users';
-$lang['privacy_title13'] = '';
-$lang['privacy_stp13'] = 'Now click on private.';
-$lang['privacy_title14'] = '';
-$lang['privacy_stp14'] = 'Then users and groups of users can be granted to access to the album.';
-$lang['privacy_title15'] = 'Tip';
-$lang['privacy_stp15'] = 'Just before explaining the groups, a pro tip: here is the link to a page to set as private/public several albums at once. Click on it';
-$lang['privacy_title16'] = '';
-$lang['privacy_stp16'] = 'Like on your computer, you can select several albums using the keys Shift and Control, then click on the arrow to switch them.<br><br>Now, let me introduce the groups.';
-$lang['privacy_title17'] = 'Groups';
-$lang['privacy_stp17'] = 'A group in Piwigo is just a set of users: so groups make it easier to manage album permissions, and to manage users\' properties. Here is the page where you can manage groups, i.e. rename, merge, duplicate, delete them. You also can set one or more groups as "default group" which means that newly registered users will be associate to those default groups.';
-$lang['privacy_title18'] = 'Groups';
-$lang['privacy_stp18'] = 'To manage associations between users to groups, go to the <em>Users » Manage</em> page';
-$lang['privacy_title19'] = 'Users';
-$lang['privacy_stp19'] = 'Here you can quickly edit a single user by hovering over it and then click on the Edit link.<br><br>You can select multiple users and edit them at once by then choosing an Action to apply.';
-$lang['privacy_title20'] = 'Public photos';
-$lang['privacy_stp20'] = 'Now you know how to keep your photos private, but you may wonder about how to protect your public photos. You might first think about blocking the visitor to download the photo: you can\'t, because the web has been created that way (the browser of the visitor download all the resources displayed and more). The right-click can be disabled, a blank layer can be put on top of the photo etc but it will not disable the download. Full webpages can be saved by any web browser.';
-$lang['privacy_title21'] = 'Public photos';
-$lang['privacy_stp21'] = 'Solutions are:<ul><li>put a watermark, at least on medium and high def photos.</li><li>and disable XL and XXL sizes.</li><li>and disable the High Definition (download and display of the original photo) for the concerned users.';
-$lang['privacy_title22'] = 'Local Config: Original protection';
-$lang['privacy_stp22'] = '<em>For Advanced Users</em><br><br>In Piwigo, you can protect the original photos using your local configuration. Use the variable $conf[\'original_url_protection\']: by default empty, you set the value to "images" to protect only the photos or "all" to protect also all type of media, which can be ressource consumming or might simply don\'t work on your server.<br><br>This option works for public and private content. This option currently requires you to deny the acces to the folders /upload and /galleries, by using an .htaccess file (usually a text file with "Deny from all" for content) or the server configurations.<br><br>Please note that filenames of photos uploaded using other method than FTP are <b>randomized</b>, so they are impossible to guess: that filename and so the path to the original photo can be known only if the visitor has access to a resized version of that photo, like the thumbnail. $conf[\'original_url_protection\'] and denying access to the folders /upload and /galleries are meant to avoid that case.';
-$lang['privacy_title24'] = 'It\'s been a great time';
-$lang['privacy_stp24'] = 'This tour is over.<p style="text-align:center">Enjoy your Piwigo!</p>If you like Piwigo and want to support us, you can contribute by helping for translations, donating, etc. <a href="http://piwigo.org/basics/contribute" target="_blank">Click here to support us</a>. Thanks!';
-$lang['privacy_title14b'] = '';
-$lang['privacy_stp14b'] = 'Important fact: on public side, permissions apply to webmasters and administrators as to any other user. In the administration, they can access any album or photo.';
diff --git a/plugins/TakeATour/language/eo_EO/description.txt b/plugins/TakeATour/language/eo_EO/description.txt
deleted file mode 100755
index c1a47a640..000000000
--- a/plugins/TakeATour/language/eo_EO/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Vizitu vian Piwigo por malkovri ĝiajn eblecojn. Tiu-ĉi kromprogramo entenas multoplajn temajn travizitojn por komencantaj kaj progesintaj uzantoj. \ No newline at end of file
diff --git a/plugins/TakeATour/language/eo_EO/index.php b/plugins/TakeATour/language/eo_EO/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/eo_EO/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/eo_EO/plugin.lang.php b/plugins/TakeATour/language/eo_EO/plugin.lang.php
deleted file mode 100755
index e124ca4a5..000000000
--- a/plugins/TakeATour/language/eo_EO/plugin.lang.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['First Contact'] = 'Unua kontakto';
-$lang['Start the Tour'] = 'Komenci la traviziton';
-$lang['Visit your Piwigo!'] = 'Vizitu vian Piwigo-n!';
-$lang['TAT_descrp'] = 'Bonvenon! Jen listiĝas ĉiuj travizitoj disponeblaj por malkovri la trajtojn de via Piwigo-galerio. <br> Lanĉu traviziton malsupre, kaj sekvu la instrukciojn. Alklaku sur Sekva/Antaŭa (aŭ uzu la sagojn de la klavaro) por navigi dum travizito. Dum travizito, se vi iras al alia paĝo de la administraĵo, vi estos alidirektita al la aktuala paĝo de la travizito. Se vi estas blokita kaj ne povas fini la traviziton, iri al <em>Kromprogramoj » Traviziti</ em> finos la viziton.';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Travizitu kaj malkovru la trajtojn de via Piwigo-galerio » Iru al la disponeblaj travizitoj';
-$lang['End tour'] = 'Finu la traviziton';
-$lang['Prev'] = 'Antaŭa';
-$lang['Next '] = 'Sekvanta';
-
-$lang['2.7 Tour'] = 'Travizito 2.7';
-$lang['2_7_0_descrp'] = 'Malkovru tion, kio novas en Piwigo 2.7';
-$lang['first_contact_descrp'] = 'Konsilita al komencantoj, tiu travizito konigas al vi na Piwigo kaj ĝia bazaj trajtoj. Ĝi komenciĝos montrante al vi kiel aldoni fotojn, kaj sekve mastrumi ilin. La travizito daŭras per fotara mastrumado kaj finas per tajlorado uzante konfiguradon, temojn kaj kromaĵojn.';
-$lang['privacy_descrp'] = 'Tiu travizito prezentas ĉiujn metodojn por protekti viajn fotojn el publika atingo kun fotaro- kaj foto-permesoj, kaj el kopiado uzante bildoprotektojn.';
-$lang['takeatour_configpage'] = 'Travizitu » Listo de Travizitoj';
-$lang['Privacy'] = 'Privateco'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/eo_EO/tour_2_7_0.lang.php b/plugins/TakeATour/language/eo_EO/tour_2_7_0.lang.php
deleted file mode 100644
index 8b620d418..000000000
--- a/plugins/TakeATour/language/eo_EO/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_title6'] = 'Selektu skripton';
-$lang['2_7_0_stp4'] = 'Novaj eblecoj aldoniĝis al la serĉopaĝo: ebleco selekti ecojn al kiuj la vortserĉo aplikiĝas, listo de aŭtoroj trovitaj en la datumbazo, aŭtomate kompleta listo de fotaroj...';
-$lang['2_7_0_stp5'] = 'Vi povas agordi la tempon kaj la daton, pere de la ŝoviloj Horo kaj Minuto.';
-$lang['2_7_0_stp6'] = 'La selektoskripto por elekti fotarojn, etikedojn, ktp. ŝanĝis al nova pli uz-afabla. Testu ĝin ĉisube. ';
-$lang['2_7_0_title4'] = 'Serĉopaĝo';
-$lang['2_7_0_title5'] = 'Tempo';
-$lang['2_7_0_stp1'] = 'Saluton! Mi estos vian ĉiĉeronon por malkovri na Piwigo. Bonvolu sekvi miajn instrukciojn, kaj alklaki sur Sekvanta (aŭ uzi la sagojn ĉe via klavaro) por navigi. Se vi iras al alia paĝo, vi estos alidirektita al la kuranta paĝo de la travizito.';
-$lang['2_7_0_stp11'] = 'Tiu travizito finiĝas.<p style="text-align:center">Ĝuu vian Piwigon 2.7!</p>Se vi ŝatas Piwigon kaj deziras apogi nin, vi povas kontribui per helpado al tradukoj, donacado, ktp. <a href="http://piwigo.org/basics/contribute" target="_blank">Aklaku ĉitie por apogi nin</a>';
-$lang['2_7_0_title1'] = 'Bonvenon al Piwigo 2.7';
-$lang['2_7_0_title11'] = 'Ĝis baldaŭ!';
-$lang['2_7_0_title2'] = 'Unua nova funkcio';
-$lang['2_7_0_stp9'] = 'Serĉofiltrilo aldoniĝis al la staplilo. Ĝi enhavas potencan sintakson por serĉi fotojn laŭ datoj, etikedoj, grandeco, dosieronomo kaj ankaŭ serĉopcioj kiel ekzaktaj kongruoj, KAJ/AŬ, arigi, ekskluzivo. Vi povas legi la detalan helpilon pli malfrue. La sama sintakso validas por la rapidserĉa kampo sur la publika flanka menuo.';
-$lang['2_7_0_stp2'] = 'Kiel videblas, nova apriora kromaprogramo aldoniĝis: Traviziti. Tiu kromaĵo helpas al vi malkovri vian Piwigo. Jen kie listiĝas ĉiuj disponeblaj travizitoj.<br>Tiu paĝo disponeblas en <em>Kromaĵoj » Traviziti</em>';
-$lang['2_7_0_stp2b'] = 'La nova elŝutada formularo en Piwigo 2.7 baziĝas sur HTML5 anstataŭ Flaŝo; tiu signifas pli bonan kongruecon kun modernaj retfoliumiloj, aldone al pligranda fidindo sur malrapidaj konektoj. Kaj ŝovi-demeti igos fotoselekton multe pli facila en via dosieresplorilo!';
-$lang['2_7_0_stp10'] = 'Filtrilo laŭ dosiera grandeco aldoniĝis al la staplilo. Eblas al vi selekti intervalon kun minimuma kaj maksimuma valoroj.';
-$lang['2_7_0_stp7'] = 'Nun eblas al vi ordigi viajn fotarojn laŭ la dato de fotokreado aŭ de enretigo.';
-$lang['2_7_0_stp8'] = 'Facila agoligilo por malplenigi vian aĉetokorbon per nur unu musklako.';
-$lang['2_7_0_title10'] = 'Filtrilo laŭ dosiera grandeco';
-$lang['2_7_0_title2b'] = 'Nova alŝutada formularo';
-$lang['2_7_0_title7'] = 'Ordigi la fotarojn laŭ dato';
-$lang['2_7_0_title8'] = 'Malplenigi vian aĉetkorbon';
-$lang['2_7_0_title9'] = 'Serĉofiltrilo'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/eo_EO/tour_first_contact.lang.php b/plugins/TakeATour/language/eo_EO/tour_first_contact.lang.php
deleted file mode 100644
index 21b7e2f4b..000000000
--- a/plugins/TakeATour/language/eo_EO/tour_first_contact.lang.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_stp22'] = 'Kiel por bildo, vi povas ĉi-tie redakti la ecojn de fotaro';
-$lang['first_contact_stp2'] = 'La ligilo estas ĉi-tie. Alklaku sur Sekva por kontinui';
-$lang['first_contact_stp15'] = 'Sur tiu paĝo vi povas redakti ĉiujn ecojn de foto, ekzemple...';
-$lang['first_contact_stp11'] = 'Do vi povas selekti ĉitie inter unu kaj pli da fotoj';
-$lang['first_contact_stp29'] = 'Ĉi-tie, sur tiu unua paĝo, vi elektos la ĉefan kaj bazan agordon sur via galerio.';
-$lang['first_contact_stp30'] = 'Komencu ni per ŝanĝo de la titolo';
-$lang['first_contact_stp1'] = 'Saluton! Mi estos via ĉiĉerono por malkovri na Piwigo. Bonvolu sekvi miajn instrukciojn, kaj alklaku Sekvanta (aŭ uzu la sagojn el via klavaro) por navigi. Se vi iras al alia paĝo de la administrado, vi estos alidirektita al la aktuala paĝo de la travizito. Se vi estas blokita kaj ne povas fini la traviziton, iri al <em>Kromaĵoj » Traviziti</em> finos la travizion. <br>Komencu ni per aldono de bildoj!';
-$lang['first_contact_stp13'] = 'Vi povas redakti priskribojn kaj pli el la stapla mastrumilo dum unuopa modo. Sed nun, pludaŭrigu la ĝenerala modo.';
-$lang['first_contact_stp16'] = 'ĉi-tie por aldoni aŭ forigi la foton el fotaroj. La ligo estas virtuala, neniu foto estos forigita iam ajn.';
-$lang['first_contact_stp32'] = 'Nun savu viajn ŝanĝojn';
-$lang['first_contact_stp28'] = 'Nun ni interesiĝos pri la opcioj disponeblaj por agordi, ke Piwigo funkciu kiel vi deziras. Alklaku sur Agordoj->Opcioj aŭ simple sur sekvanta.';
-$lang['first_contact_stp23'] = 'Ŝlosi fotaron signifas, ke nur administrantoj rajtos vidi tiun fotaron: ege utilas kiam vi preparas fotaron antaŭ publikigado';
-$lang['first_contact_stp3'] = 'La unua langeto estas, kie vi aldonas fotojn rekte el via dosieresplorilo. La aliaj langetoj traktas pri la aliaj manieroj elŝuti fotojn';
-$lang['first_contact_stp5'] = 'Kaj poste, alklaku la butonon por selekti fotojn sendendajn, aŭ simple ŝovmetu viajn dosierojn. ';
-$lang['first_contact_stp8'] = 'Redaktu ni ilin! Alklaku la ligilon.';
-$lang['first_contact_title1'] = 'Bonvenon al via Piwigo-galerio';
-$lang['first_contact_stp35'] = 'Fiksu vian preferitan temon kiel la aprioran temon.';
-$lang['first_contact_stp4'] = 'Unue elektu fotaron; kreu unu se ankoraŭ ekzistas neniun.';
-$lang['first_contact_stp40'] = 'Tie estas mi! Ne malaktivigu min nun, sed vi povas vidi, ke eblas al vi Malaktivigi aŭ Restaŭri aktivan kromprogramon.';
-$lang['first_contact_stp41'] = 'Vi povas vidi sur la antaŭa langeto ĉiujn kromprogramojn disponeblajn por via versio de Piwigo. Centoj da kromaĵoj ĉeestas!';
-$lang['first_contact_stp6'] = 'Vi vidas, ke fotoj listiĝas. Kiam vi pretas, musklaku sur la butono Starti Elŝutadon';
-$lang['first_contact_stp19_b'] = 'Jen la listo de \'radikaj\' fotaroj.';
-$lang['first_contact_stp21'] = 'La venonta langeto estas paĝo, kie eblas al vi movigi iun ajn virtualan fotaron.<br>La konstantliga langeto servas por agordi apartan retadreson al fotaro.<br>Sed redaktu ni fotaron: musklaku sur Redakti fotaron';
-$lang['first_contact_stp18'] = 'Nun, vidu ni pri la mastrumado de fotaroj. Musklaku sur <em>Fotaro » Mastrumado</em> aŭ sur Poste';
-$lang['first_contact_stp12'] = 'kaj, poste, redaktu ilin uzante agon';
-$lang['first_contact_title37'] = 'Temoj';
-$lang['first_contact_title38'] = 'Kromprogramoj';
-$lang['first_contact_title39'] = 'Kromprogramoj';
-$lang['first_contact_title4'] = 'Aldonu ni foton!';
-$lang['first_contact_title43'] = 'Kiel mojosa momento';
-$lang['first_contact_title9'] = 'Stapla Mastrumilo';
-$lang['first_contact_title22'] = 'Fotaroredakta paĝo';
-$lang['first_contact_title28'] = 'Agordoj';
-$lang['first_contact_title29'] = '<em>Agordoj » Elektebloj » Ĝeneralaj</em>';
-$lang['first_contact_title3'] = 'Aldoni fotopaĝon';
-$lang['first_contact_title33'] = 'Agordoj de invitito';
-$lang['first_contact_title34'] = 'Temoj';
-$lang['first_contact_title35'] = 'Temoj';
-$lang['first_contact_title11'] = 'Kiel redakti foton';
-$lang['first_contact_title15'] = 'La redakta paĝo de foto';
-$lang['first_contact_title18'] = 'Mastrumi fotarojn';
-$lang['first_contact_title19'] = 'Mastrumi Fotarojn';
-$lang['first_contact_title20'] = 'Mastrumi Fotarojn';
-$lang['first_contact_title21'] = 'Aliaj langetoj';
-$lang['first_contact_stp10'] = 'Jen la ligilo por rekte atingi vian korbon: estas ilo por ke la administrantoj facile kolektu fotojn dum foliumado de la publika parto, cele al redakti ilin en la Stapla Mastrumilo.
-<br><br>Vi povas aldoni fotojn al la korbon de la publikfoto-paĝo, post ensaluto kiel administranto, aŭ uzante la ago "Aldoni al korbo" de la Stapla Mastrumilo.';
-$lang['first_contact_stp14'] = 'Nun ni vidu la <b>redaktopaĝon</b> de iu foto. Tiu paĝo atingeblas de tie sed ankaŭ de la publika fotopaĝo, se vi ensalutas kiel administranto.<br><br>Musumu la miniaturon kaj poste musklaku na Redakti.';
-$lang['first_contact_stp17'] = 'Ĉitie eblas al vi estigi la foton kiel miniaturo de unu aŭ pluraj fotaroj. Ne nepras ke la foto estu asociita kun la fotaro, eĉ pli simplas estigi ĝin kiel fotara miniaturo de la publika paĝo de la foto (truko: uzu la kromprogramon Administradaj Iloj por eĉ pli da simpleco)'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/es_ES/description.txt b/plugins/TakeATour/language/es_ES/description.txt
deleted file mode 100755
index fd1cd94ac..000000000
--- a/plugins/TakeATour/language/es_ES/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Visita tu Piwigo para descubrir sus funciones. Este plugin tiene múltiples tours con diferentes temáticas para principiantes así como usuarios avanzados. \ No newline at end of file
diff --git a/plugins/TakeATour/language/es_ES/index.php b/plugins/TakeATour/language/es_ES/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/es_ES/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/es_ES/plugin.lang.php b/plugins/TakeATour/language/es_ES/plugin.lang.php
deleted file mode 100755
index 4ac754f94..000000000
--- a/plugins/TakeATour/language/es_ES/plugin.lang.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['Start the Tour'] = 'Empezar el tour';
-$lang['TAT_descrp'] = '¡Bienvenido! Aquí aparecen listados todos los tours disponibles para descubrir las funcionalidades de tu galería Piwigo. <br>Selecciona un tour aquí abajo y sigue las instrucciones. Haz click en Siguiente/Anterior (o usa las flechas de tu teclado) para navegar durante el tour. Durante el tour, si vas a otra página de la administración, se te redireccionará a la actual página del tour. Si te quedas atascado y no consigues acabar el tour, accediendo a <em>Pulgins » Empezar un tour</em> acabará el tour.';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Empieza un tour y descubre las posibilidades de tu galería Piwigo » Accede a los tours disponibles';
-$lang['Visit your Piwigo!'] = '¡Visita tu Piwigo!';
-$lang['Prev'] = 'Anterior';
-$lang['Next '] = 'Siguiente';
-$lang['End tour'] = 'Terminar';
-$lang['takeatour_configpage'] = 'Hacer un tour »Lista de tours';
-
-$lang['First Contact'] = 'Primer contacto';
-$lang['first_contact_descrp'] = 'Esta visita es una introducción a Piwigo y sus funcionalidades básicas. Esta recomendada para principiantes. Empieza añadiendo imágenes y su gestión. La visita sigue con la gestión de los álbumes, los permisos y acaba con la personalización a través de configuración, temas, y plugins.';
-
-$lang['2.7 Tour'] = '2.7 Tour';
-$lang['2_7_0_descrp'] = 'Descubre las novedades de Piwigo 2.7';
-
-$lang['privacy_descrp'] = 'Este tour le presenta todas las formas de proteger sus fotos del acceso público con sistemas de permisos por álbum y por imagen, y de las copias mediante protecciones de imagen.';
-$lang['Privacy'] = 'Privacidad'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/es_ES/tour_2_7_0.lang.php b/plugins/TakeATour/language/es_ES/tour_2_7_0.lang.php
deleted file mode 100644
index b4d36184d..000000000
--- a/plugins/TakeATour/language/es_ES/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_stp4'] = 'La página de búsqueda se ha vuelto a trabajar: la capacidad para seleccionar las propiedades en las que se aplica la palabra de búsqueda, la lista de autores que se encuentra en la base de datos, la lista de autocompletado de etiquetas, lista de autocompletado de álbumes ...';
-$lang['2_7_0_stp5'] = 'Puede ajustar la hora, además de la fecha, utilizando los deslizadores de Hora y Minuto ';
-$lang['2_7_0_stp6'] = 'La secuencia de selección para escoger los álbumes, etiquetas etc ha cambiado a una interface mas amigable. Pruébelo abajo';
-$lang['2_7_0_title4'] = 'Buscar pagina';
-$lang['2_7_0_title5'] = 'Tiempo';
-$lang['2_7_0_title6'] = 'Seleccione un script';
-$lang['2_7_0_stp2'] = 'Como puedes ver, un nuevo plugin por defecto se ha añadido: Hacer un tour. Este plugin te ayuda a descubrir tu Piwigo. Aquí aparecen listados todos los tours disponibles. <br> Esta página está disponible en <em>Plugins » Hacer un tour</em>';
-$lang['2_7_0_stp11'] = 'El tour se ha acabado. <p style="text-align:center">¡Disfruta tu Piwigo 2.7!</p> Si te gusta y quieres ayudarnos, puedes contribuir ayudando con las traducciones, donando, etc. <a href="http://piwigo.org/basics/contribute" target="_blank">Haz click aquí para contribuir</a>';
-$lang['2_7_0_stp1'] = '¡Hola! Voy a ser tu guía para descubrir Piwigo. Por favor, sigue mis instrucciones y haz click en Siguiente (o usa las flechas de tu teclado) para navegar. Si vas a otra página, se te redirigirá a la página actual del tour.';
-$lang['2_7_0_title1'] = 'Bienvenido a Piwigo 2.7';
-$lang['2_7_0_title11'] = '¡Nos vemos pronto!';
-$lang['2_7_0_title2'] = 'Primera nueva funcionalidad';
-$lang['2_7_0_title10'] = 'Filtro de tamaño de fichero';
-$lang['2_7_0_title2b'] = 'Nueva forma de subida de datos';
-$lang['2_7_0_title7'] = 'Sortear álbumes por fecha';
-$lang['2_7_0_title8'] = 'Vacié su caddie';
-$lang['2_7_0_title9'] = 'Filtro de búsqueda';
-$lang['2_7_0_stp9'] = 'Un filtro de búsqueda se ha añadido al gestor de lote. Viene con una sintaxis poderosa para buscar fotos por fechas, etiquetas, tamaño, nombre de archivo y buscar opciones como coincidencia exacta, Y / O, la agrupación, la exclusión.Usted puede leer la ayuda detallada más adelante. La misma sintaxis se aplica al campo de búsqueda rápida en el menú lateral público.';
-$lang['2_7_0_stp8'] = 'Enlace de acceso fácil para vaciar su caddie en un clic.';
-$lang['2_7_0_stp7'] = 'Ahora puedes ordenar tus álbumes basados en la fecha de creación o fecha de fotos publicadas';
-$lang['2_7_0_stp2b'] = 'La nueva forma de subida de datos de Piwigo 2.7 esta basada en HTML5 en vez de Flash, lo que se traduce por una mejor compatibilidad con los navegadores modernos así que una amplia fiabilidad en las conexiones lentas. Y el "drag & drop" hara que la selección de sus ficheros sea mas fácil!';
-$lang['2_7_0_stp10'] = 'Un filtro de tamaño de archivo ha sido añadido al gestor de lotes. Puede seleccionar un rango de valores máxima y mínima.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/es_ES/tour_first_contact.lang.php b/plugins/TakeATour/language/es_ES/tour_first_contact.lang.php
deleted file mode 100644
index 99917167e..000000000
--- a/plugins/TakeATour/language/es_ES/tour_first_contact.lang.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-$lang['first_contact_stp15'] = 'En esta pagina puede editar todas las propriedades de una foto, por ejemplo...';
-$lang['first_contact_stp16'] = 'aquí para añadir o quitar la foto de los álbumes. El enlace es virtual, ninguna foto sera eliminada físicamente.';
-$lang['first_contact_stp14'] = 'Vamos a ver la pagina de edición de una imagen. Esta pagina es accesible desde aquí pero también desde la pagina publica de una imagen cuando esta conectado como administrador. Hagan clic en Editar o Siguiente.';
-$lang['first_contact_stp13'] = 'Puede editar las descripciones o otros desde la gestión por lotes. Pero de momento, nos quedamos con el modo global.';
-$lang['first_contact_stp11'] = 'Puede seleccionar aquí una o varias fotos.';
-$lang['first_contact_stp10'] = 'Aquí esta el enlace para acceder directamente a su caddie: es una herramienta de administración para añadir fácilmente imágenes, ordenarlas, editarlas, en la gestión por lote. Puede también añadir imágenes al caddy desde la pagina "foto publica" cuando esta conectado como administrador, o usando la acción "Añadir al caddy" de la gestión por lote. ';
-$lang['first_contact_stp1'] = 'Hola! Seré su guía par descubrir su Piwigo. Gracias por seguir mis instrucciones, y hagan clic en Siguiente (o utilicen las flechas de su teclado) para navegar. Si abren otra pagina de la administración serán redirigidos hacia la pagina corriente de la visita. Si está atascado, visualizando <em>Plugins » Take A Tour</em> se terminara la visita. Empecemos por añadir imágenes!';
-$lang['first_contact_stp22'] = 'Como para una foto, aquí puedes editar las propiedades de un álbum';
-$lang['first_contact_stp2'] = 'El enlace está aquí. Haz click en siguiente para continuar.';
-$lang['first_contact_stp20'] = 'Cuando tu ratón está sobre un álbum, aparece información y enlaces. Si arrastras y sueltas un álbum -un bloque con esquinas redondeadas-, cambiarás la posición pudiendo guardar o cancelar el orden manual creado.';
-$lang['first_contact_stp31'] = 'Seguidamente la bandera que se enseñara arriba de cada pagina. Como pueden ver las etiquetas HTML esta aquí autorizadas. Pueden también utilizar la etiqueta %gallery_title% para mostrar el titulo que acaba de seleccionar arriba.
-';
-$lang['first_contact_stp30'] = 'Empezamos por cambiar el titulo';
-$lang['first_contact_stp3'] = 'Pueden añadir fotos desde la primera pestaña con su navegador. Las otras pestañas están dedicadas a otros métodos de envio de fotos.';
-$lang['first_contact_stp29'] = 'En esta primera pagina, informara de lo esencial de la configuración básica de su galería.';
-$lang['first_contact_stp28'] = 'Vamos a ver ahorra las opciones disponibles para hacer funcionar Piwigo a su manera. Clic en Configuración->Opción Siguiente.';
-$lang['first_contact_stp23'] = 'Bloquear un álbum significa que solo los administradores pueden ver este álbum. Eso se suele utilizar cuando un administrador cambia las propriedades de un álbum o que no quiere publicar enseguida el álbum. ';
-$lang['first_contact_stp33'] = 'Una ultima palabra relativo a las opciones, la pagina "Preferencias invitados" se utiliza para definir las preferencias de los usuarios no identificados. <br/> Seguimos con la configuración : clic en Configuración->Temas o en Siguiente.';
-$lang['first_contact_stp32'] = 'Ahora, guarde los cambios';
-$lang['first_contact_stp37'] = 'Para instalar nuevos temas, puede bajarlos directamente desde el enlace "Añadir temas". Solo los temas compatibles con su versión de Piwigo se mostraran.<br/>Ahora, vamos a descubrir los Plugins ! Clic en Plugins->Gestión.';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_stp7'] = 'Este es un sumario de tus fotos subidas. Puedes observar que Piwigo ha generado por si mismo las miniaturas. Puedes añadir más fotos usando el enlace que hay al final, editar las propiedades de una foto haciendo click en el, o administrar las fotos subidas en el editor por lotes.';
-$lang['first_contact_stp6'] = 'Puedes ver que las fotos se listan aquí. Añade por lo menos 2 fotos y cuando estés listo haz click en el botón Empezar la subida.';
-$lang['first_contact_stp43'] = 'Este tour ha sido bastante largo, pero solo hemos visto una pequeña parte de todo el potencial que tiene Piwigo. Todo tiene un final, esta visita ha acabado.<br>Puedes descubrir las funciones más en profundidad haciendo otro tour o leyendo la documentación en la web de piwigo.org';
-$lang['first_contact_stp41'] = 'Puedes ver en la última pestaña todos los plugins disponibles para tu versión de Piwigo. ¡Hay cientos de ellos!';
-$lang['first_contact_stp38'] = 'Los plugins son una forma muy fácil de personalizar tu Piwigo. Pueden hacer casi cualquier cosa que puedas imaginar, desde añadir pequeños textos a funcionalidades completas, como el plugin Community que permite a los usuarios que no son administradores subir fotos sin entrar al panel de administrador.';
-$lang['first_contact_stp39'] = 'En esa primera página aparecen los plugins instalados. En la parte superior aparecen los plugins activados, los que están funcionando. En la parte de abajo aparecen los plugins que se han instalado pero están desactivados. Borrar un plugin significa eliminar cualquier rastro de ese plugin (archivos, opciones, etc). Para la mayoria de plugins, desactivarlos guardará la información que han recopilado estos plugins.';
-$lang['first_contact_stp4'] = 'Primero selecciona un álbum; crea uno si aún no existe ninguno.';
-$lang['first_contact_stp40'] = '¡Aquí estoy! No me desactives ahora, pero puedes ver que se pueden desactivar o eliminar plugins activados.';
-$lang['first_contact_stp9'] = 'Ahora estas en el administrador por lotes, donde puedes editar múltiples fotos a la vez. Aquí Caddy se ha fijado como un filtro porque venimos de la página de subida de fotos.';
-$lang['first_contact_title37'] = 'Temas';
-$lang['first_contact_title38'] = 'Plugins';
-$lang['first_contact_title39'] = 'Plugins';
-$lang['first_contact_title4'] = '¡Vamos a añadir una foto!';
-$lang['first_contact_title43'] = 'Lo hemos pasado bien';
-$lang['first_contact_title9'] = 'El administrador por lotes';
-$lang['first_contact_stp8'] = '¡Vamos a editarlos pues! Haz click en el enlace. Si no lo ves, haz click en Anterior para añadir al menos 2 fotos.';
-$lang['first_contact_title28'] = 'Configuración';
-$lang['first_contact_title29'] = 'Configuración->Opciones->General';
-$lang['first_contact_title3'] = 'Añadir página de fotos';
-$lang['first_contact_title33'] = 'Ajustes para invitados';
-$lang['first_contact_title34'] = 'Temas';
-$lang['first_contact_title35'] = 'Temas';
-$lang['first_contact_title1'] = 'Bienvenido al a galería de Piwigo';
-$lang['first_contact_title11'] = 'Cómo editar fotos';
-$lang['first_contact_title15'] = 'La página de edición de fotos';
-$lang['first_contact_title18'] = 'Administrar álbums';
-$lang['first_contact_title19'] = 'Administrar Álbums';
-$lang['first_contact_title20'] = 'Administrar Álbums';
-$lang['first_contact_title21'] = 'Otras pestañas';
-$lang['first_contact_title22'] = 'Página de edición de álbums';
-$lang['first_contact_stp34'] = 'Elegir un tema es el primer paso para personalizar tu galería Piwigo. Los temas instalados están listados aquí.<br>Se puede habilitar más de un tema: los usuarios pueden cambiar su tema eligiendo uno entre los que estén habilitados, si la opción "Permitir la personalización de la galería por el usuario" está activada en la página de Opciones. ';
-$lang['first_contact_stp21'] = 'La siguiente pestaña es una página desde la cuál puede mover cualquier álbum virtual.<br>La pestaña "enlace permanente" es para asignar una URL particular a un álbum.<br>Pero editemos un álbum: haga click en Editar un álbum';
-$lang['first_contact_stp5'] = 'Luego haga click en el botón para seleccionar las fotos a enviar, o simplemente arrastre y suelte sus archivos.';
-$lang['first_contact_stp35'] = 'Asigne su tema favorito como el tema por defecto.';
-$lang['first_contact_stp12'] = 'y luego edítelas usando una acción.';
-$lang['first_contact_stp17'] = 'Aquí puede asignar la foto como miniatura de uno o varios álbumes. Dicha foto no tiene porqué estar asociada con el álbum para el que va a ser su miniatura. Si la foto está o ha sido ya asociada al álbum, es aún más simple asignarla como miniatura de la página pública de un álbum (consejo: use el plugin Admin Tools para aún mayor simplicidad).';
-$lang['first_contact_stp18'] = 'Veamos ahora cómo administrar los álbumes. Haga Click <em>Álbumes » Administrar </em> o en Siguiente';
-$lang['first_contact_stp19'] = 'Este es el listado de los álbumes "raíz". Si ve un álbum con un fondo difuminado, significa que es de una sincronización vía FTP. Los álbums físicos no pueden ser movidos o borrados desde aquí. A los demás se les llaman "álbumes virtuales".';
-$lang['first_contact_stp19_b'] = 'Este es el listado de los álbumes "raíz".'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/es_ES/tour_privacy.lang.php b/plugins/TakeATour/language/es_ES/tour_privacy.lang.php
deleted file mode 100644
index 83a87803c..000000000
--- a/plugins/TakeATour/language/es_ES/tour_privacy.lang.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-$lang['privacy_stp18'] = 'Para agregar o quitar usuarios a los grupos, vaya a los <em>Usuarios » Administrar</em> página';
-$lang['privacy_stp17'] = 'Un grupo en Piwigo es solo un conjunto de usuarios: asi grupos hacen mas fácil la administración de los permisos de albumes, y la administración de las propriedades de los usuarios. Aquí está la página donde se pueden gestionar los grupos para cambiar el nombre, fusionar, duplicar, eliminarlos. También puede configurar uno o más grupos como "grupo predeterminado", que significa que los usuarios recién registrados se verán afectados a los grupos establecidos por defecto.';
-$lang['privacy_stp16'] = 'Al igual que en su ordenador, puede seleccionar varios álbumes con las teclas Maj y Control, a continuación, haga clic en la flecha para cambiarlos. <br> Ahora, permítanme presentarles a los grupos.';
-$lang['privacy_stp15'] = 'Justo antes de explicar los grupos, un consejo profesional: aquí está el enlace a la página de configuración de álbumes privados/ públicos a la vez. Haga clic en él';
-$lang['privacy_stp14'] = 'Entonces los usuarios y grupos de usuarios pueden acceder al álbum.';
-$lang['privacy_stp13'] = 'Ahora haga clic en la ficha Privado.';
-$lang['privacy_stp12'] = 'En esa página, puede elegir si el álbum estará disponible para cualquier persona o será restringido a algunos usuarios';
-$lang['privacy_stp11'] = 'Ahora haga clic en la ficha Permisos';
-$lang['privacy_stp10'] = 'Estamos en la gestión de la lista de álbum disponible en el menú utilizando <em> álbumes »Administrar </em> <br> Editar en el álbum, con solo pasar y luego haga clic en Editar.';
-$lang['privacy_stp1'] = 'Hola! voy a ser su guía para descubrir como proteger sus fotos en Piwigo. Por favor siga mis instrucciones, y haz clic en "siguiente" (o utiliza las flechas de su teclado) para navegar. Si va a otra pagina de la administración, sera redirigido a la pagina actual del tour. Si está atascado y no puede terminar el tour, ir a <em> Plugins »Dar un paseo </em> eso terminará la gira. <br> Empezemos!';
-$lang['privacy_stp4'] = 'Así tenemos dos sistemas para gestionar los permisos de acceso a las fotos. Son independientes, así puede crear un grupo "familia", pero este grupo no tiene nada que ver con el nivel de privacidad "Familia".<br><br>Los niveles de privacidad se aplican por imagen, y los permisos de grupo / usuario se aplican por álbum.Puede usar ambos o sólo un sistema, es flexible.<br><br>La siguiente pestaña es sobre gestión grupo.';
-$lang['privacy_stp3'] = 'Tómese un tiempo para leer la información debajo.';
-$lang['privacy_stp24'] = 'Este tour a terminado.<p style="text-align:center">Disfrute de su Piwigo!</p>Si le gusta Piwigo y quiere ayudarnos, puede contribuir ayudandonos para traducciones, donaciones, etc.<a href="http://piwigo.org/basics/contribute" target="_blank">Haga clic aquí para ayudarnos</a>. Gracias';
-$lang['privacy_stp22'] = '<em>Para usuarios avanzados</em><br><br>En Piwigo, puede proteger sus fotos originales utilizando su configuración local. Utiliza la variable $conf[\'original_url_protection\']:por defecto esta vacía, puede poner como valor "images" para proteger solo las fotos, o "all" para proteger también todo tipo de media, que puede consumir recursos o podrían simplemente no funcionan en su servidor.<br><br> Esta opción funciona para contenido publico y privado. Esta opción actualmente requiere negar los acceso a las carpetas / upload y / galerías, mediante el uso de un archivo. htaccess (normalmente un archivo de texto con "Denegar de todos" para el contenido) o las configuraciones del servidor.<br><br>Por favor, tenga en cuenta que los nombres de archivo de fotos subidas utilizando otro método que FTP son <b> aleatorizados </ b>, por lo que son imposibles de adivinar: el nombre del archivo y así el camino a la foto original sólo se puede conocer si el visitante tiene acceso a una imagen con nuevo tamaño de esa foto, al igual que la miniatura. $conf[\'original_url_protection\']y negar el acceso a las carpetas / upload y / galerías tienen el propósito de evitar esto.';
-$lang['privacy_stp21'] = 'Las soluciones son :<ul><li>poner una marca de agua, al menos sobre fotos de media y alta definición.</li><li>y desactivar tamaños XL y XXL .</li><li>y desactivar la Alta Definición (descarga y visualización de la foto original) para los usuarios interesados.';
-$lang['privacy_stp20'] = 'Ahorra sabe como guardar sus fotos de forma privada, pero se sorprenderá de ver como guardar sus fotos de forma publica. Es posible que primero piense en bloquear al visitante la descarga de foto: no se puede, porque la web ha sido creada de esa manera (el navegador del visitante descargar todos los recursos que se muestran y más). El botón derecho del ratón se puede desactivar, una capa transparente se puede poner en la parte superior de la foto, etc, pero no va a deshabilitar la descarga. Páginas web completas se pueden guardar en cualquier navegador.';
-$lang['privacy_stp2'] = 'Aquí puede acceder a la ayuda integrada. Haga clic en Siguiente para ir directamente a la página de ayuda sobre la gestión de permisos';
-$lang['privacy_stp19'] = 'Aquí puede editar rápidamente un solo usuario sobrevolando lo y haga clic en el enlace Editar.<br><br>Puede seleccionar varios usuarios y editarlos a la vez para elegir una acción que aplicar.';
-$lang['privacy_title4'] = 'Permisos';
-$lang['privacy_title5'] = 'Permisos > Grupos';
-$lang['privacy_title6'] = 'Nivel de privacidad';
-$lang['privacy_title7'] = 'Nivel de privacidad';
-$lang['privacy_title8'] = 'Nivel de privacidad';
-$lang['privacy_title9'] = 'Nivel de privacidad';
-$lang['privacy_title22'] = 'Configuración local: Protección original';
-$lang['privacy_title24'] = 'Ha sido un gran momento';
-$lang['privacy_title3'] = 'Permisos';
-$lang['privacy_title21'] = 'Fotos publicas';
-$lang['privacy_title2'] = 'Ayuda dentro de su Piwigo';
-$lang['privacy_title20'] = 'Fotos publicas';
-$lang['privacy_title19'] = 'Usuarios';
-$lang['privacy_title18'] = 'Grupos';
-$lang['privacy_title17'] = 'Grupos';
-$lang['privacy_title15'] = 'Sugerencia';
-$lang['privacy_title12'] = 'Permisos de álbum';
-$lang['privacy_title11'] = 'Permisos de álbum';
-$lang['privacy_title10'] = 'Permisos de álbum';
-$lang['privacy_title1'] = 'Bienvenidos al Tour sobre privacidad';
-$lang['privacy_stp9'] = '...y selecciona la acción "Quien puede ver estas fotos ?"Ahora puede cambiar el nivel de privacidad de las fotos seleccionadas.<br><br>Pero también se puede hacer eso por una imagen específica, en su página de edición. Puede acceder a ella desde la parte pública, o desde aquí.<br><br>Ahora, les voy a mostrar el otro sistema de permiso por álbum basado en los grupos y usuarios. ';
-$lang['privacy_stp8'] = 'Selecciona una o varias fotos...';
-$lang['privacy_stp7'] = '... O usted puede hacer que más tarde, aquí en el Administrador de lotes en el modo Global. <br> Esta es la página de <em> Fotos »Fotos actuales </em>, por lo que el filtro" Última importación "es establecido.';
-$lang['privacy_stp6'] = 'Al cargar las imágenes, puede cambiar el nivel de privacidad de las fotos subidas allí mismo ...';
-$lang['privacy_stp5'] = 'A continuación se explica cómo se puede gestionar los Grupos. <br> Esos permisos son sólo para el acceso a las fotos y a los álbumes, cuando se navega en la parte pública o para las aplicaciones externas. Más adelante veremos otras protecciones, pero vamos a practicar ahora!';
-$lang['privacy_title14b'] = '';
-$lang['privacy_stp14b'] = 'Aviso importante : los web-maestres y administradores no tienen "pase libre" cuando navegan en la parte publica, pero pueden acceder a todos los álbumes y fotos en la parte administración.';
diff --git a/plugins/TakeATour/language/et_EE/description.txt b/plugins/TakeATour/language/et_EE/description.txt
deleted file mode 100755
index e9394b8a3..000000000
--- a/plugins/TakeATour/language/et_EE/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Tutvu oma Piwigoga avastamaks selle funktsioone. See plugin sisaldab erinevaid temaatilisi ülevaateid algajatele ja kogenud kasutajatele. \ No newline at end of file
diff --git a/plugins/TakeATour/language/et_EE/index.php b/plugins/TakeATour/language/et_EE/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/et_EE/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/et_EE/plugin.lang.php b/plugins/TakeATour/language/et_EE/plugin.lang.php
deleted file mode 100755
index 3d8d89897..000000000
--- a/plugins/TakeATour/language/et_EE/plugin.lang.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['TAT_descrp'] = 'Tervitus! Siin on nimekiri kõigist olemasolevatest ülevaadetest, mis aitavad Sul tundma õppida Piwigo galerii funktsioone. Vajuta Järgmine/Eelmine (või kasuta klaviatuuril noole klahve) ülevaate käigus navigeerimiseks. Ülevaatest mõnele teisele administreerimise lehele minnes suunatakse Sind tagasi samale Ülevaate leheküljele. Kui olete ummikus ja ei saa ülevaadet lõpetada, siis minnes <em>Plugins » Vaata Ülevaadet</em> lõpetab ülevaate';
-$lang['2.7 Tour'] = '2.7 Ülevaade';
-$lang['2_7_0_descrp'] = 'Avasta mis on uut Piwigo 2.7';
-$lang['End tour'] = 'Ülevaate lõpp';
-$lang['First Contact'] = 'Esimene kontakt';
-$lang['Next '] = 'Järgmine';
-$lang['Prev'] = 'Eelmine';
-$lang['Privacy'] = 'Privaatsus';
-$lang['Start the Tour'] = 'Alusta ülevaadet';
-$lang['privacy_descrp'] = 'See ülevaade tutvustab võimalusi kuidas kaitsta oma fotosid avaliku ligipääsu eest albumi kaupa ja foto haaval, ning kuidas kaitsta fotot kopeerimise eest.';
-$lang['takeatour_configpage'] = 'Vaata Ülevaadet » Ülevaadete nimekiri';
-$lang['first_contact_descrp'] = 'Soovituslikult alustajatele tutvustab see ülevaade Piwigo põhilisi funktsioone. Esmalt näidatakse, kuidas lisada fotosid ja seejärel kuidas neid hallata. Ülevaade jätkub albumite haldamisega ja lõpeb kohandamisega, kasutades kujundust, teemasid ja pluginaid';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Vaata ülevaadet ja avasta Piwigo galerii funktsioone » ava olemasolevad ülevaated';
-$lang['Visit your Piwigo!'] = 'Külasta oma Piwigot!'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/et_EE/tour_2_7_0.lang.php b/plugins/TakeATour/language/et_EE/tour_2_7_0.lang.php
deleted file mode 100755
index 58012968f..000000000
--- a/plugins/TakeATour/language/et_EE/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['2_7_0_stp2b'] = 'Piwigo 2.7 uus üleslaadimise vorm põhineb Flash\'i asemel HTML5\'l, mis tähendab paremat ühildumist tänapäevaste veebibrauseritega ja samas ka tõhusamat töökindlust aeglase ühenduse puhul. Ning lohista & aseta muudab fotode valimise failide brauserist veelgi mugavamaks!';
-$lang['2_7_0_stp2'] = 'Nagu sa näed on lisatud uus vaikimisi plugin: Ülevaade. See plugin aitab tutvuda sinu Piwigoga. Siin on nimekiri kõigist olemasolevatest ülevaadetest. <br>See leht on saadaval <em>Pluginad » Ülevaade</em>';
-$lang['2_7_0_stp1'] = 'Tere! Olen su teejuht Piwigo\'s. Palun järgi mu juhiseid ja vajuta Järgmine (või kasuta nooli oma klaviatuuril) edasi liikumiseks. Kui sa lahkud mõnele teisele lehele, suunatakse sind Ülevaatesse tagasi pöördudes samale lehele, kust lahkusid. ';
-$lang['2_7_0_title8'] = 'Korvi tühjendamine';
-$lang['2_7_0_title9'] = 'Otsingu filter';
-$lang['2_7_0_title7'] = 'Sorteeri albumeid kuupäeva järgi';
-$lang['2_7_0_title6'] = 'Valikuaknad';
-$lang['2_7_0_title5'] = 'Kellaaeg';
-$lang['2_7_0_title4'] = 'Otsingu leht';
-$lang['2_7_0_title2b'] = 'Uus üleslaadimise vorm';
-$lang['2_7_0_title2'] = 'Esimene uus funktsioon';
-$lang['2_7_0_title11'] = 'Kohtumiseni!';
-$lang['2_7_0_title10'] = 'Faili suuruse filter';
-$lang['2_7_0_title1'] = 'Tere tulemast Piwigo 2.7';
-$lang['2_7_0_stp8'] = 'Lihtne tegevus link korvi tühendamiseks vaid ühe klõpsuga';
-$lang['2_7_0_stp7'] = 'Nüüd saad sorteerida oma albumeid fotode loomise või postitamise kuupäeva põhjal';
-$lang['2_7_0_stp6'] = 'Valikuaken albumite, märksõnade jne. valimiseks on muudetud kasutajasõbralikumaks. Proovi seda allpool';
-$lang['2_7_0_stp5'] = 'Saate lisada kellaaja lisaks kuupäevale, kasutades tunni ja minuti liugureid';
-$lang['2_7_0_stp10'] = 'Faili suuruse filter on nüüd olemas ka pakktöötluse halduris. Võimalik valida vahemikus minimaalse ja maksimaalse väärtuse.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/fi_FI/description.txt b/plugins/TakeATour/language/fi_FI/description.txt
deleted file mode 100755
index 8b2dcbe97..000000000
--- a/plugins/TakeATour/language/fi_FI/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Vieraile Piwigossasi tutustuaksesi sen ominaisuuksiin. Liitännäinen sisältää temaattisia esittelykierroksia aloittelijoille ja edistyneille käyttäjille. \ No newline at end of file
diff --git a/plugins/TakeATour/language/fi_FI/index.php b/plugins/TakeATour/language/fi_FI/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/fi_FI/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/fi_FI/plugin.lang.php b/plugins/TakeATour/language/fi_FI/plugin.lang.php
deleted file mode 100755
index 3a11615b0..000000000
--- a/plugins/TakeATour/language/fi_FI/plugin.lang.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Start the Tour'] = 'Aloita esittely';
-$lang['End tour'] = 'Lopeta esittely';
-$lang['2.7 Tour'] = '2.7 Esittelykierros';
-$lang['2_7_0_descrp'] = 'Katso mitä uutta Piwigo 2.7 tarjoaa';
-$lang['Privacy'] = 'Yksityisyys';
-$lang['Prev'] = 'Edellinen';
-$lang['Next '] = 'Seuraava';
-$lang['First Contact'] = 'Pääasiallinen kontakti';
-$lang['TAT_descrp'] = 'Tervetuloa! Ohessa on lista kaikista saatavilla olevista esittelyistä, jotka auttavat sinua löytämään Piwigo galleriasi ominaisuuksia. <br><br>Käynnistä esittely alta ja seuraa ohjeita. Klikkaa Edellinen/Seuraava (tai käytä näppäimistösi nuolinäppäimiä) navigoidaksesi esittelyn aikana. Esittelyn ollessa käynnissä, jos liikut toiselle hallintapaneelin sivulle, sinut ohjataan takaisin esittelyn nykyiselle sivulle. Jos jäät jumiin ja esittelyä ei saa lopettua, siirtyminen <em>Laajennukset » Katso Esittelyjä</em> lopettaa esittelyn.';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Katso esittely ja löydä Piwigo galleriasi ominaisuuksia » Mene saatavilla oleviin esittelyihin';
-$lang['Visit your Piwigo!'] = 'Käy Piwigossasi!';
-$lang['first_contact_descrp'] = 'Suositeltu aloittelijoille, tämä esittely tutustuttaa sinut Piwigoon ja sen perus ominaisuuksiin. Se alkaa näyttämällä miten kuvia lisätään ja hallitaan. Esittely jatkuu albumien hallinnalla ja loppuu kustomointiin käyttäen asetuksia, teemoja ja laajennuksia.';
-$lang['privacy_descrp'] = 'Tämä esittely näyttää kaikki eri tavat, jolla voit suojella kuviasi julkiselta pääsyltä albumi ja kuva kohtaisesti kopioinnista kuvien suojaukseen.';
-$lang['takeatour_configpage'] = 'Katso esittely » Lista esittelyistä'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/fi_FI/tour_2_7_0.lang.php b/plugins/TakeATour/language/fi_FI/tour_2_7_0.lang.php
deleted file mode 100755
index cc1604d57..000000000
--- a/plugins/TakeATour/language/fi_FI/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['2_7_0_stp8'] = 'Helppo toimintolinkki kuvakorin tyhjentämiseen yhden linkin klikkauksella.';
-$lang['2_7_0_title8'] = 'Tyhjennä kuvakori';
-$lang['2_7_0_stp9'] = 'Hakusuodatin on lisätty massahallintatyökaluun. Siinä on tehokas tapa etsiä kuvia päivämäärien, koon, tiedoston nimen ja asettaa hakuun asetuksia, kuten tarkat osumat, JA/TAI haku, ryhmittely ja pois jättäminen. Voit lukea yksityiskohtaisen ohjeen myöhemmin. Sama syntaksi on käytössä myös julkisen puolen pikahakukentässä.';
-$lang['2_7_0_title9'] = 'Haku suodatin';
-$lang['2_7_0_stp1'] = 'Hei! Olen oppaasi Piwigoon tutustumisessa. Ole hyvä ja seuraa ohjeitani ja paina Seuraavaa (tai käytä näppäimistösi nuolinappeja) navigoidaksesi. Jos menet toiselle sivulle, sinut palautetaan kiertueen nykyiselle sivulle.';
-$lang['2_7_0_stp10'] = 'Suodatin kuvien koolle on lisätty massahallintatyökaluun. Voit valita alueen minimi ja maksimikoolle.';
-$lang['2_7_0_stp11'] = 'Tämä esittely on ohi.<p style="text-align:center">Nauti Piwigo 2.7:stäsi!</p>Jos pidät Piwigosta ja haluat tukea meitä, voit auttaa tekemällä käännöstyötä, lahjoittamalla rahaa ja niin edelleen. <a href="http://piwigo.org/basics/contribute" target="_blank">Klikkaa tästä auttaaksesi meitä.</a> Kiitos!';
-$lang['2_7_0_stp2'] = 'Kuten ehkä huomasitkin, uusi "Katso esittely"-laajennus on lisätty. Tämä auttaa sinua löytämään Piwigosi ominaisuuksia. Ohessa on kaikki saatavilla olevat esittelyt.<br> Tämä sivu löytyy <em>Laajennukset » Katso esitely</em>';
-$lang['2_7_0_stp2b'] = 'Piwigo 2.7 uusi lisäys lomake perustuu HTML5:n Flashin sijaan, tarkoittaen parempaa yhteensopivuutta nykyisten selaimien kanssa ja parempaa luotettavuutta hitaiden yhteyksien yli. Lisäksi pudota & lisää toiminto tekee kuvien valinnasta tiedostoselaimesta paljon helpompaa!';
-$lang['2_7_0_stp4'] = 'Hakutulossivu on uudistettu: Kyky asettaa ominaisuuksia, joihin hakusana kohdistetaan, lista julkaisujoita tietokannasta, automaattinen tagien täydennys, automaattinen albumien täydennys...';
-$lang['2_7_0_stp5'] = 'Voit asettaa ajan päivämäärän lisäksi, käyttäen Tunti ja Minuutti säätimiä';
-$lang['2_7_0_stp6'] = 'Monivalinta ikkuna albumeiden, tagien yms. valintaa varten on muutettu uuteen, käyttäjäystävällisempään. Testaa alempana';
-$lang['2_7_0_stp7'] = 'Nyt voit järjestää albumisi kuvien luomis- tai lisäämis päivämäärän perusteella';
-$lang['2_7_0_title1'] = 'Tervetuloa Piwigo 2.7:n';
-$lang['2_7_0_title10'] = 'Tiedoston koko suodatin';
-$lang['2_7_0_title11'] = 'Nähdään pian!';
-$lang['2_7_0_title2'] = 'Ensimmäinen uusi ominaisuus';
-$lang['2_7_0_title2b'] = 'Uusi lisäys lomake';
-$lang['2_7_0_title4'] = 'Hakusivu';
-$lang['2_7_0_title5'] = 'Aika';
-$lang['2_7_0_title6'] = 'Valinta ikkunat';
-$lang['2_7_0_title7'] = 'Järjestele albumit päivämäärän mukaan'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/fi_FI/tour_first_contact.lang.php b/plugins/TakeATour/language/fi_FI/tour_first_contact.lang.php
deleted file mode 100755
index 4f8d8b176..000000000
--- a/plugins/TakeATour/language/fi_FI/tour_first_contact.lang.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['first_contact_title1'] = 'Tervetuloa Piwigo-galleriaasi';
-$lang['first_contact_title4'] = 'Lisätäämpä kuva!';
-$lang['first_contact_stp11'] = 'Täältä voit valita yhden tai useamman kuvan';
-$lang['first_contact_stp4'] = 'Ensiksi valitse albumi. Luo sellainen, jos albumeita ei vielä ole.';
-$lang['first_contact_stp35'] = 'Aseta lempiteemasi oletusteemaksi.';
-$lang['first_contact_stp30'] = 'Aloitetaan vaihtamalla otsikko'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/fr_CA/index.php b/plugins/TakeATour/language/fr_CA/index.php
deleted file mode 100644
index db1eae0d9..000000000
--- a/plugins/TakeATour/language/fr_CA/index.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | PhpWebGallery - a PHP based picture gallery |
-// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
-// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
-// +-----------------------------------------------------------------------+
-// | file : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
-// | last update : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
-// | last modifier : $Author: rub $
-// | revision : $Revision: 1912 $
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/fr_CA/tour_2_7_0.lang.php b/plugins/TakeATour/language/fr_CA/tour_2_7_0.lang.php
deleted file mode 100644
index d3b7c9ca6..000000000
--- a/plugins/TakeATour/language/fr_CA/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_stp2'] = 'Comme vous pouvez le voir, un nouveau greffon a été ajouté par défaut : Take a Tour. Ce greffon vous aide à découvrir votre Piwigo. Ici sont listées les visites disponibles.<br/><br/>Cette page est accessible dans <em>Plugins » Take A Tour</em>';
-$lang['2_7_0_title2'] = 'Première nouvelle fonctionalité';
-$lang['2_7_0_title1'] = 'Bienvenue sur Piwigo 2.7';
-$lang['2_7_0_title11'] = 'À bientôt !';
-$lang['2_7_0_stp1'] = 'Salut ! Je serai votre guide pour découvrir Piwigo. Merci de suivre mes instructions et de cliquer sur Suivant (ou d\'utiliser les flèches du clavier) pour naviguer. Si vous allez sur une autre page, vous serez redirigé vers la page courante de la visite.';
-$lang['2_7_0_stp11'] = 'Cette visite est terminée.<p style="text-align:center">Profitez bien de Piwigo 2.7 !</p>Si vous aimez Piwigo et voulez nous soutenir, vous pouvez contribuer en nous aidant sur les traductions, dons, etc. <a href="http://fr.piwigo.org/basics/contribute" target="_blank">Cliquez ici pour nous soutenir</a>';
-$lang['2_7_0_stp5'] = 'Vous pouvez inscrire l\'heure en plus de la date en utilisant les curseurs Heures et Minutes';
-$lang['2_7_0_title6'] = 'Boîtes de sélection';
-$lang['2_7_0_title5'] = 'Heure';
-$lang['2_7_0_title4'] = 'Page de recherche';
-$lang['2_7_0_stp4'] = 'La page de recherche a été retravaillée : il est possible de sélectionner plusieurs propriétés sur lesquelles la recherche va s\'appliquer. Nouvelles listes auto-complétées des auteurs, des mots-clefs, des albums, etc.';
-$lang['2_7_0_stp6'] = 'La boîte de sélection pour choisir les albums, les mots-clefs, etc. a changé en faveur d`\'une nouvelle plus conviviale. Testez-la ci-dessous.';
-$lang['2_7_0_title7'] = 'Tri des albums par date';
-$lang['2_7_0_title8'] = 'Vider le panier';
-$lang['2_7_0_title9'] = 'Filtre de recherche';
-$lang['2_7_0_title2b'] = 'Nouveau formulaire d\'ajout';
-$lang['2_7_0_stp9'] = 'Un filtre de recherche a été ajouté au gestionnaire par lot. Il embarque une syntaxe très puissante pour trouver vos photos par dates, mots-clefs, poids, nom de fichier, etc. et aussi des options comme la correspondance exacte, le ET/OU (AND/OR), le regroupement ou l\'exclusion. Vous pourrez lire l\'aide détaillée plus tard. La même syntaxe s\'applique à la recherche rapide dans le menu côté galerie.';
-$lang['2_7_0_stp8'] = 'Nouveau lien tout simple pour vider votre panier en 1 clic.';
-$lang['2_7_0_stp7'] = 'Dorénavant vous pouvez trier vos albums selon la date de création ou la date d\'ajout des photos qu\'il contient.';
-$lang['2_7_0_stp2b'] = 'Le nouveau formulaire d\'ajout de photos de Piwigo 2.7 exploite le HTML5 en remplacement de Flash, ce qui signifie une meilleure compatibilité avec les navigateurs web modernes tout en augmentant la fiabilité des transferts sur les connexions Internet les plus lentes. De plus, le glisser/déposer à partir de votre explorateur de fichiers va rendre la sélection de photos bien plus facile !';
-$lang['2_7_0_title10'] = 'Filtre par poids';
-$lang['2_7_0_stp10'] = 'Un filtre sur le poids de la photo a également été ajouté au gestionnaire par lot. Vous pouvez sélectionner une plage avec une valeur minimum et maximum.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/fr_FR/description.txt b/plugins/TakeATour/language/fr_FR/description.txt
deleted file mode 100644
index 598d9d674..000000000
--- a/plugins/TakeATour/language/fr_FR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Apprenez à utiliser votre Piwigo grâce à des visites guidées interactives. \ No newline at end of file
diff --git a/plugins/TakeATour/language/fr_FR/index.php b/plugins/TakeATour/language/fr_FR/index.php
deleted file mode 100644
index db1eae0d9..000000000
--- a/plugins/TakeATour/language/fr_FR/index.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | PhpWebGallery - a PHP based picture gallery |
-// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
-// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
-// +-----------------------------------------------------------------------+
-// | file : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
-// | last update : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
-// | last modifier : $Author: rub $
-// | revision : $Revision: 1912 $
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/fr_FR/plugin.lang.php b/plugins/TakeATour/language/fr_FR/plugin.lang.php
deleted file mode 100644
index da5bcfa2f..000000000
--- a/plugins/TakeATour/language/fr_FR/plugin.lang.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-$lang['Start the Tour'] = 'Commencer la visite';
-$lang['Visit your Piwigo!'] = 'Visiter votre Piwigo !';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Découvrez les fonctionnalités de votre galerie Piwigo » Voir les visites interactives disponibles';
-$lang['Prev'] = 'Préc';
-$lang['Next '] = 'Suiv';
-$lang['End tour'] = 'Finir';
-$lang['takeatour_configpage'] = 'Visite guidée » Liste des visites';
-$lang['TAT_descrp'] = 'Bienvenue ! Sont listées ici toutes les visites guidées disponibles pour découvrir les fonctionnalités de votre galerie Piwigo.<br /><br/>Démarrez une visite ci-dessous puis suivez les instructions. Cliquez sur Suivant/Précédent (ou utilisez les flèches du clavier) pour suivre le visite. Pendant la visite, si vous affichez une autre page d\'administration, vous serez automatiquement redirigé vers la page courante de la visite. Si vous êtes coincés, afficher <em>Plugins » Take A Tour</em> terminera la visite.';
-
-$lang['First Contact'] = 'Premier contact';
-$lang['first_contact_descrp'] = 'Cette visite est une introduction à Piwigo et ses fonctionnalités de base. Elle est recommandée pour les débutants. Elle débute par l\'ajout de photos puis leur gestion. La visite continue avec la gestion des albums et se termine sur une touche de personnalisation avec la configuration, les thèmes et les plugins. ';
-
-$lang['2_7_0_descrp'] = 'Découvrez ce qui est nouveau avec Piwigo 2.7';
-$lang['2.7 Tour'] = 'Visite 2.7';
-
-$lang['Privacy'] = 'Vie privée';
-$lang['privacy_descrp'] = 'Cette visite vous explique comment protéger vos photos de l\'accès public avec des systèmes de permissions par album et par photo, et vous protège de la copie à l\'aide de la protection d\'image.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/fr_FR/tour_2_7_0.lang.php b/plugins/TakeATour/language/fr_FR/tour_2_7_0.lang.php
deleted file mode 100644
index f2e686820..000000000
--- a/plugins/TakeATour/language/fr_FR/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_stp2'] = 'Comme vous pouvez le voir, un nouveau plugin a été ajouté par défaut : Take a Tour. Ce plugin vous aide à découvrir votre Piwigo. Ici sont listées les visites disponibles.<br/><br/>Cette page est accessible dans <em>Plugins » Take A Tour</em>';
-$lang['2_7_0_title2'] = 'Première nouvelle fonctionalité';
-$lang['2_7_0_title1'] = 'Bienvenue sur Piwigo 2.7';
-$lang['2_7_0_title11'] = 'A bientôt !';
-$lang['2_7_0_stp1'] = 'Salut ! Je serai votre guide pour découvrir Piwigo. Merci de suivre mes instructions et de cliquer sur Suivant (ou d\'utiliser les flèches du clavier) pour naviguer. Si vous allez sur une autre page, vous serez redirigé vers la page courante de la visite.';
-$lang['2_7_0_stp11'] = 'Cette visite est terminée.<p style="text-align:center">Profitez bien de Piwigo 2.7 !</p>Si vous aimez Piwigo et voulez nous soutenir, vous pouvez contribuer en nous aidant sur les traductions, dons, etc. <a href="http://fr.piwigo.org/basics/contribute" target="_blank">Cliquez ici pour nous soutenir</a>';
-$lang['2_7_0_stp5'] = 'Vous pouvez renseigner l\'heure en plus de la date en utilisant les curseurs Heures et Minutes';
-$lang['2_7_0_title6'] = 'Boîtes de sélection';
-$lang['2_7_0_title5'] = 'Heure';
-$lang['2_7_0_title4'] = 'Page de recherche';
-$lang['2_7_0_stp4'] = 'La page de recherche a été retravaillée : il est possible de sélectionner plusieurs propriétés sur lesquelles la recherche va s\'appliquer. Nouvelles listes auto-complétées des auteurs, des tags, des albums, etc.';
-$lang['2_7_0_stp6'] = 'La boîte de sélection pour choisir les albums, les mots-clefs, etc. a changé pour une nouvelle plus conviviale. Testez-la ci-dessous.';
-$lang['2_7_0_title7'] = 'Tri des albums par date';
-$lang['2_7_0_title8'] = 'Vider le panier';
-$lang['2_7_0_title9'] = 'Filtre de recherche';
-$lang['2_7_0_title2b'] = 'Nouveau formulaire d\'ajout';
-$lang['2_7_0_stp9'] = 'Un filtre de recherche a été ajouté au gestionnaire par lot. Il embarque une syntaxe très puissante pour trouver vos photos par dates, tags, poids, nom de fichier, etc. et aussi des options comme la correspondance exacte, le ET/OU (AND/OR), le regroupement ou l\'exclusion. Vous pourrez lire l\'aide détaillée plus tard. La même syntaxe s\'applique à la recherche rapide dans le menu côté galerie.';
-$lang['2_7_0_stp8'] = 'Nouveau lien tout simple pour vider votre panier en 1 clic.';
-$lang['2_7_0_stp7'] = 'Dorénavant vous pouvez trier vos albums selon la date de création ou la date d\'ajout des photos qu\'il contient.';
-$lang['2_7_0_stp2b'] = 'Le nouveau formulaire d\'ajout de photos de Piwigo 2.7 exploite le HTML5 en remplacement de Flash, ce qui signifie une meilleure compatibilité avec les navigateurs web modernes tout en augmentant la fiabilité des transferts sur les connexions internet les plus lentes. De plus, le glisser/déposer à partir de votre explorateur de fichiers va rendre la sélection de photos bien plus facile !';
-$lang['2_7_0_title10'] = 'Filtre par poids';
-$lang['2_7_0_stp10'] = 'Un filtre sur la poids de la photo a également été ajouté au gestionnaire par lot. Vous pouvez sélectionner une plage avec une valeur minimum et maximum.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/fr_FR/tour_first_contact.lang.php b/plugins/TakeATour/language/fr_FR/tour_first_contact.lang.php
deleted file mode 100644
index 7d4eab8eb..000000000
--- a/plugins/TakeATour/language/fr_FR/tour_first_contact.lang.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title29'] = 'Configuration » Options » Général';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title4'] = 'Ajoutons des photos !';
-$lang['first_contact_title39'] = 'Plugins';
-$lang['first_contact_title43'] = 'Ce fut un grand moment';
-$lang['first_contact_stp22'] = 'Comme pour une photo, vous pouvez éditer ici les propriété d\'un album';
-$lang['first_contact_stp2'] = 'Le lien est ici. Cliquez sur Suivant pour continuer';
-$lang['first_contact_stp11'] = 'Vous pouvez sélectionner ici une ou plusieurs photos';
-$lang['first_contact_stp23'] = 'Verrouiller un album signifie que seuls les administrateurs pourront afficher cet album. C\'est pratique lorsque l\'administrateur prépare l\'album avant sa publication.';
-$lang['first_contact_stp20'] = 'Lorsque votre souris survole un album, les liens et informations apparaissent. Quand vous glissez/déposez un album (un bloc arrondi), vous changez sa position. Vous pouvez enregistrer ou annuler cet ordre d\'affichage manuel.';
-$lang['first_contact_stp29'] = 'Sur cette première page, vous renseignerez l\'essentiel de la configuration de base de votre Piwigo.';
-$lang['first_contact_stp30'] = 'Commençons par changer le titre';
-$lang['first_contact_stp32'] = 'Maintenant, enregistrez vos modifications';
-$lang['first_contact_stp16'] = 'ici pour associer ou dissocier la photo des albums. Le lien est virtuel, aucune photo ne sera physiquement supprimée.';
-$lang['first_contact_stp15'] = 'Sur cette page, vous pouvez éditer toutes les propriétés d\'une photo, par exemple...';
-$lang['first_contact_stp13'] = 'Vous pouvez éditer les descriptions, tags et autres propriétés depuis la gestion par lot en mode unitaire. Mais pour le moment, restons en mode global.';
-$lang['first_contact_stp14'] = 'Nous allons maintenant voir la page d\'édition d\'une photo. Cette page est accessible d\'ici mais aussi depuis la page publique d\'une photo quand vous êtes connecté en tant qu\'administrateur. Cliquez sur Éditer ou passez au suivant.';
-$lang['first_contact_stp10'] = 'Voici le lien pour accéder directement à votre panier : c\'est un outil d\'administration pour ajouter facilement des photos, les ordonner et les éditer dans la gestion par lot. Vous pouvez ajouter des photos au panier depuis la page photo publique quand vous êtes connecté en tant qu\'administrateur, ou en utilisant l\'action "Ajouter au panier" de la gestion par lot.';
-$lang['first_contact_stp1'] = 'Bonjour ! Je serai votre guide pour la découverte de Piwigo. Merci de suivre mes instructions, et de cliquer sur Suivant (ou d\'utiliser les flèches de votre clavier) pour naviguer.<br><br>Si vous affichez une autre page de l\'administration, vous serez redirigé vers la page courante de la visite. Si vous êtes coincés, afficher <em>Plugins » Take A Tour</em> terminera la visite.<br><br>Commençons par ajouter des photos !';
-$lang['first_contact_stp8'] = 'Allons les éditer ! Cliquez sur le lien. Si vous ne le voyez pas, cliquez sur Précédent pour ajouter au moins 2 photos.';
-$lang['first_contact_title19'] = 'Gérer les albums';
-$lang['first_contact_title20'] = 'Gérer les albums';
-$lang['first_contact_title21'] = 'Autres onglets';
-$lang['first_contact_title22'] = 'Page d\'édition d\'album';
-$lang['first_contact_title28'] = 'Configuration';
-$lang['first_contact_title3'] = 'Page d\'ajout de photo';
-$lang['first_contact_title33'] = 'Préférences utilisateur';
-$lang['first_contact_title34'] = 'Thèmes';
-$lang['first_contact_title35'] = 'Thèmes';
-$lang['first_contact_title37'] = 'Thèmes';
-$lang['first_contact_title38'] = 'Plugins';
-$lang['first_contact_title9'] = 'Gestion par lot';
-$lang['first_contact_stp37'] = 'Pour installer de nouveaux thèmes, vous pouvez les télécharger directement depuis l\'onglet \'Ajouter un thème\'. Seul les thèmes compatibles avec votre version de Piwigo sont affichés. <br/>Maintenant, allons découvrir les Plugins ! Cliquez sur Plugins->Gestion';
-$lang['first_contact_stp38'] = 'Les plugins sont un moyen simple de personnaliser votre Piwigo. Ils peuvent offrir à peu près tout ce que vous pouvez imaginer, du simple ajout de texte à des fonctionnalités plus complètes, comme le plugin Connunity qui permet aux utilisateurs non administrateurs d\'envoyer des photos sans savoir accès à l\'administration.';
-$lang['first_contact_stp39'] = 'Sur cette première page sont listés les plugins installés. En haut sont listés les plugins activés, qui sont utilisés. En bas les plugins qui sont installés dans le répertoire /plugins mais ne sont pas utilisés. Supprimer un plugin signifie que toutes les traces du plugin seront supprimées (fichiers, options, etc...). Pour la plupart des plugins, la désactivation conservera les données enregistrées par ces plugins.';
-$lang['first_contact_stp4'] = 'Commencez par choisir un album; créez en un s\'il n\'y en a pas.';
-$lang['first_contact_stp40'] = 'Me voici ! Ne me désactivez pas maintenant, mais observez que vous pouvez désactiver ou réinitialiser un plugin activé.';
-$lang['first_contact_stp41'] = 'Vous pouvez voir dans le dernier onglet les plugins disponibles pour votre version de Piwigo. Il existe des centaines de plugins ici !';
-$lang['first_contact_stp43'] = 'Cette visite fut un peu longue, mais nous n\'avons vu qu\'une petite partie des possibilités de Piwigo. Tout a une fin, cet aperçu est terminé. <br/><br/>Vous pouvez approfondir vos connaissances sur Piwigo en choisissant une autre visite ou en lisant notre documentation sur le site web piwigo.org.';
-$lang['first_contact_stp6'] = 'Vous voyez que les photos sont listées. Ajoutez au moins 2 photos et quand vous êtes prêt, cliquez sur le bouton "Démarrer le transfert"';
-$lang['first_contact_stp7'] = 'Vous voyez ici une synthèse de votre envoi de photos. Observez que Piwigo a généré de lui même les miniatures. Vous pouvez maintenant ajouter plus de photos avec le lien en bas, éditer les propriétés d\'une photo en cliquant dessus ou cliquer pour gérer toutes les photos depuis la gestion par lot...';
-$lang['first_contact_stp9'] = 'Vous êtes maintenant dans la gestion par lot d\'où vous pouvez éditer plusieurs photos à la fois. Ici le panier apparaît comme un filtre car vous venez de la page d\'ajout de photos.';
-$lang['first_contact_title1'] = 'Bienvenue dans votre Piwigo';
-$lang['first_contact_title11'] = 'Comment éditer une photo';
-$lang['first_contact_title15'] = 'La page d\'édition d\'une photo';
-$lang['first_contact_title18'] = 'Gérer les albums';
-$lang['first_contact_stp3'] = 'Vous ajoutez des photos depuis le premier onglet avec votre navigateur. Les autres onglets sont dédiés aux autres méthodes d\'envoi de photos';
-$lang['first_contact_stp31'] = 'Puis la bannière qui sera affichée en haut de chaque page. Comme vous pouvez le voir, les balises HTML sont autorisées ici. Vous pouvez aussi utiliser le mot-clef %gallery_title% pour afficher le titre que vous venez de saisir au dessus.';
-$lang['first_contact_stp33'] = 'Un dernier mot à propos des options, la page des "Préférences invité" est utilisée pour définir les préférences des utilisateurs non identifiés. <br/>Continuons avec la configuration : cliquez sur Configuration->Thèmes ou sur Suivant.';
-$lang['first_contact_stp28'] = 'Voyons voir maintenant les options disponibles pour faire fonctionner Piwigo à votre goût. Cliquez sur Configuration->Options ou juste sur Suivant.';
-$lang['first_contact_stp5'] = 'Ensuite cliquez sur ce bouton pour sélectionner des photos à envoyer, ou bien faites un simple glisser/déposer de vos fichiers.';
-$lang['first_contact_stp35'] = 'Définissez votre thème préféré comme thème par défaut.';
-$lang['first_contact_stp34'] = 'Choisir un thème est la première étape pour personnaliser votre Piwigo. Les thèmes installés sont listés sur cette page.<br>Plusieurs thèmes peuvent être activés à la fois : les utilisateurs identifiés peuvent choisir l\'un des thèmes activés (option désactivable sur la page de configuration).';
-$lang['first_contact_stp21'] = 'L\'onget suivant vous permet de déplacer les albums.<br>L\'onglet "Permaliens" permet de définir l\'url pour un album.<br>Concentrons nous pour le moment sur l\'édition d\'un album : cliquez sur le lien "Editer" d\'un album.';
-$lang['first_contact_stp19_b'] = 'Voici la liste des albums racine.';
-$lang['first_contact_stp19'] = 'Voici la liste des albums racine. Si vous voyez un fond hachuré, c\'est qu\'il s\'agit d\'un album physique créé par synchronisation FTP. Les albums physiques ne peuvent être ni déplacé ni supprimé depuis cette page. Les autres albums sont appelés "virtuels".';
-$lang['first_contact_stp18'] = 'Voyons comment gérer les albums maintenant. Cliquez sur <em>Albums » Gérer</em> ou bien cliquez sur le bouton "Suivant".';
-$lang['first_contact_stp17'] = 'Ici vous pouvez désigner la photo comme représentante d\'un ou plusieurs albums : c\'est une miniature de cette photo qui sera utilisée dans la liste des albums. La photo n\'a pas besoin d\'être associée à l\'album pour le représenter.<br><br>Si la photo est associée à l\'album, il est encore plus simple de la désigner comme représentante depuis la page de la photo dans la galerie (astuce : activez le plugin Admin Tools pour encore plus de simplicité).';
-$lang['first_contact_stp12'] = 'puis éditez les en choisissant une action... sans oublier de l\'appliquer.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/fr_FR/tour_privacy.lang.php b/plugins/TakeATour/language/fr_FR/tour_privacy.lang.php
deleted file mode 100644
index 54a504812..000000000
--- a/plugins/TakeATour/language/fr_FR/tour_privacy.lang.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-$lang['privacy_stp8'] = 'Sélectionnez une ou plusieurs photos';
-$lang['privacy_title1'] = 'Bienvenue dans la visite Vie privée';
-$lang['privacy_title10'] = 'Permissions par album';
-$lang['privacy_title11'] = 'Permissions par album';
-$lang['privacy_title12'] = 'Permissions par album';
-$lang['privacy_title2'] = 'Aide de votre Piwigo';
-$lang['privacy_title15'] = 'Conseil';
-$lang['privacy_title17'] = 'Groupes';
-$lang['privacy_title18'] = 'Groupes';
-$lang['privacy_title19'] = 'Utilisateurs';
-$lang['privacy_title20'] = 'Photos publiques';
-$lang['privacy_title21'] = 'Photos publiques';
-$lang['privacy_title22'] = 'Config locale : protection par défaut';
-$lang['privacy_title24'] = 'Ce fut un bon moment';
-$lang['privacy_title3'] = 'Permissions';
-$lang['privacy_title4'] = 'Permissions';
-$lang['privacy_title6'] = 'Niveau de confidentialité';
-$lang['privacy_title7'] = 'Niveau de confidentialité';
-$lang['privacy_title8'] = 'Niveau de confidentialité';
-$lang['privacy_title9'] = 'Niveau de confidentialité';
-$lang['privacy_title5'] = 'Permissions > Groupes';
-$lang['privacy_stp11'] = 'Cliquez maintenant sur l\'onglet "Permissions"';
-$lang['privacy_stp13'] = 'Cliquez maintenant sur "privé".';
-$lang['privacy_stp17'] = 'Un groupe Piwigo est un ensemble d\'utilisateurs. Ainsi les groupes permettent de gérer plus facilement les autorisations des albums. Voici la page où vous pouvez gérer les groupes, c\'est à dire renommer, fusionner, dupliquer, supprimer. Vous pouvez également définir un ou plusieurs groupes comme "groupe par défaut" ce qui signifie que les utilisateurs nouvellement inscrits seront affectés par ces groupes définis par défaut.';
-$lang['privacy_stp22'] = '<em>Pour les utilisateurs avancés</em> <br><br> Dans Piwigo, vous pouvez protéger les photos originales en utilisant votre configuration locale. Utilisez la variable $conf[\' original_url_protection\']: par défaut vide, vous définissez la valeur de "images" à protéger uniquement les photos ou "toutes" pour protéger également tous les types de médias, qui peuvent être consommatrice de ressources ou qui pourrait tout simplement ne pas fonctionner sur votre serveur.<br><br>Cette option fonctionne pour le contenu public et privé. Cette option vous oblige actuellement à refuser les accès aux dossiers /upload et /galleries, en utilisant un fichier .htaccess (un fichier texte avec "Deny from all" comme contenu) ou la configuration du serveur web.<br><br>S\'il vous plaît, notez que les noms de fichiers de photos téléchargées en utilisant une autre méthode de FTP sont rendus <b>aléatoires</b>, de sorte qu\'ils sont impossibles à deviner : ce nom de fichier et ainsi le chemin à la photo originale ne peut être connue que si le visiteur a accès à un redimensionnement de cette photo, comme la miniature. $conf[\'original_url_protection\'] + protection des dossiers /upload et /galeries sont destinés à éviter ce cas.';
-$lang['privacy_stp6'] = 'Quand vous téléchargez les photos, vous pouvez modifier le niveau de confidentialité juste ici...';
-$lang['privacy_stp9'] = '... et sélectionnez l\'action "Qui peut voir les photos ?". Vous pouvez ainsi définir le niveau de confidentialité des photos sélectionnées.<br><br>Mais vous pouvez aussi le faire pour une photo spécifique, sur sa page d\'édition. Vous pouvez y accéder depuis la partie publique, ou à partir d\'ici.<br><br>Maintenant, voyons l\'autre système de permissions pour les albums basé sur les groupes et les utilisateurs.';
-$lang['privacy_stp7'] = '... ou bien vous pouvez le faire plus tard, ici dans la gestion par lot en mode Global.<br><br>Ceci est la page <em>Photos » Photos récentes</em>, de sorte que le filtre "Dernier import" est automatiquement défini.';
-$lang['privacy_stp5'] = 'Ci-dessous on vous explique comment vous pouvez gérer les groupes.<br><br>L\'appartenance d\'un utilisateur à un ou plusieurs groupes permet de gérer les permissions par album de façon globale pour plusieurs utilisateurs à la fois.<br><br>Passons à la pratique !';
-$lang['privacy_stp4'] = 'Nous avons deux systèmes de permissions : les permissions par photo et les permissions par album.<ol><li>Lorsque l\'on gère les permissions par photo, on attribue un "niveau de confidentialité" à chaque photo. Ensuite, chaque utilisateur a son propre niveau de confidentialité.</li><li>Lorsque l\'on gère les permissions par album, il faut passer les albums en privé puis donner l\'accès à chaque utilisateur ou groupe d\'utilisateur.</li></ol>Les deux systèmes sont indépendants. Vous pouvez utiliser les deux ou un seul, c\'est flexible. Il est recommandé d\'éviter de nommer vos groupes comme les niveaux de confidentialités, pour éviter les confusions entre les deux systèmes.<br><br>L\'onglet suivant concerne la gestion des groupes.';
-$lang['privacy_stp24'] = 'Cette visite est terminée. <p style="text-align:center">Profitez de votre Piwigo !</p>Si vous aimez Piwigo et que vous souhaitez nous soutenir, vous pouvez contribuer de nombreuses façons. <a href="http://fr.piwigo.org/basics/contribute" target="_blank">Cliquez ici pour contribuer</a>. Merci!';
-$lang['privacy_stp21'] = 'Les solutions sont: <ul><li>mettre un filigrane, au moins sur les photos en moyenne et haute définition</li><li>désactiver les tailles XL et XXL</li><li>désactiver la Haute Définition (téléchargement et affichage de la photo originale) pour les utilisateurs concernés.</li></ul>';
-$lang['privacy_stp20'] = 'Maintenant, vous savez comment passer vos photos en mode "privé", mais vous pourriez vous demander comment protéger vos photos "publiques". Vous pourriez d\'abord penser à bloquer le visiteur pour ne pas télécharger la photo... Vous ne pouvez pas, parce que le web a été créé de cette façon (le navigateur du visiteur télécharge et met en cache toutes les images affichées sur les pages). Le clic-droit peut être désactivé, un masque blanc peut être mis sur la photo, etc, mais cela ne pourra pas empêcher la copie de façon 100% fiable.';
-$lang['privacy_stp2'] = 'Ici, vous pouvez accéder à l\'aide intégrée. Cliquez sur "Suivant" pour continuer directement à la page d\'aide sur la gestion des permissions.';
-$lang['privacy_stp19'] = 'Ici, vous pouvez rapidement modifier un seul utilisateur en le survolant, puis cliquez sur le lien "éditer".<br><br>Vous pouvez sélectionner plusieurs utilisateurs et les éditer en une seule fois en choisissant une action à appliquer.';
-$lang['privacy_stp3'] = 'Prenez un moment pour lire les informations ci-dessous.';
-$lang['privacy_stp18'] = 'Pour associer ou dissocier des utilisateurs à des groupes, allez sur la page <em>Utilisateurs » Gérer</em>.';
-$lang['privacy_stp16'] = 'Comme sur votre ordinateur, vous pouvez sélectionner plusieurs albums en utilisant les touches Maj et Ctrl, puis cliquez sur la flèche pour les passer d\'un état à l\'autre.<br><br>Maintenant, parlons un peu des groupes.';
-$lang['privacy_stp15'] = 'Juste avant d\'expliquer les groupes, une astuce : <br>Voici le lien vers une page qui vous permet en une seule fois de définir les types d\'autorisation (public/privé) pour plusieurs albums. Cliquez sur ce lien.';
-$lang['privacy_stp14'] = 'Ensuite, les utilisateurs et groupes d\'utilisateurs peuvent être autorisés pour accéder à l\'album privé.';
-$lang['privacy_stp12'] = 'Sur cette page, vous pouvez choisir si l\'album sera disponible pour tout le monde ou sera restreint à certains utilisateurs.';
-$lang['privacy_stp10'] = 'Nous sommes sur la page de gestion des albums. Cette page est disponible via le menu <em>Albums » Gérer</em><br><br>Editez un album en le survolant, puis cliquez sur Editer.';
-$lang['privacy_stp1'] = 'Bonjour ! Je serai votre guide pour découvrir comment protéger vos photos dans Piwigo. S\'il vous plaît suivez mes instructions, et cliquez sur "Suivant" (ou utilisez les flèches de votre clavier) pour naviguer.<br><br>Si vous allez à une autre page de l\'administration, vous serez redirigé vers la page en cours de la visite. Si vous êtes coincé et ne pouvez pas terminer la visite, aller à <em>Plugins » Take A Tour</em> cela terminera la visite. <br><br>Commençons!';
-$lang['privacy_title14b'] = '';
-$lang['privacy_stp14b'] = 'Remarque importante : les webmestres et administrateurs sont soumis au système de permissions lorsqu\'ils naviguent dans la galerie. Dans l\'administration en revanche, ils peuvent accéder à l\'intégralité du contenu.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/he_IL/plugin.lang.php b/plugins/TakeATour/language/he_IL/plugin.lang.php
deleted file mode 100755
index 770bba5cc..000000000
--- a/plugins/TakeATour/language/he_IL/plugin.lang.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2015 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['2.7 Tour'] = 'סיור 2.7';
-$lang['2_7_0_descrp'] = 'גלה מה חדש ב-Piwigo 2.7';
-$lang['End tour'] = 'סוף סיור';
-$lang['First Contact'] = 'איש קשר ראשון';
-$lang['Next '] = 'הבא';
-$lang['Prev'] = 'הקודם';
-$lang['Privacy'] = 'פרטיות';
-$lang['Start the Tour'] = 'התחל את הסיור';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'צא לסיור וגלה את הפית׳רים של גלריית Piwigo שלך >> צא לסיורים זמינים';
-$lang['Visit your Piwigo!'] = 'בקר ב-Piwigo שלך!';
-$lang['takeatour_configpage'] = 'צא לסיור >> רשימת סיורים';
-$lang['TAT_descrp'] = 'ברוך הבא! הנה רשימה של כל הסיורים הקיימים לעזור לך לגלות את הפיצ׳רים של גלריית Piwigo שלך.<br><br>הפעל סיור למטה, ואז עקוב אחר ההוראות. ךלץ הבא/הקודם (או השתמש בחיצי המקלדת) לנווט במהלך סיור. כאשר אתה בסיור, אם אתה הולך לדף ניהול אחר, תועבר לדף העכשווי של הסיור. אם אתה תקוע ולא מצליח לסיים את הסיור, הגעה ל<em>תוספים >> קח סיור</em> תסיים את הסיור.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/hu_HU/index.php b/plugins/TakeATour/language/hu_HU/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/hu_HU/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/hu_HU/plugin.lang.php b/plugins/TakeATour/language/hu_HU/plugin.lang.php
deleted file mode 100755
index 76ddbb909..000000000
--- a/plugins/TakeATour/language/hu_HU/plugin.lang.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['2.7 Tour'] = '2.7 túra';
-$lang['2_7_0_descrp'] = 'Fedezze fel mi az új a Piwigo 2.7-ben';
-$lang['End tour'] = 'Túra vége';
-$lang['Next '] = 'Tovább';
-$lang['Prev'] = 'Vissza';
-$lang['Start the Tour'] = 'Túra indítása';
-$lang['takeatour_configpage'] = 'Felfedező túra » Túra lista'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/index.php b/plugins/TakeATour/language/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/it_IT/description.txt b/plugins/TakeATour/language/it_IT/description.txt
deleted file mode 100755
index 35fbccf42..000000000
--- a/plugins/TakeATour/language/it_IT/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Visita il tuo Piwigo per scoprire le sue caratteristiche. Questo plugin ha molteplici percorsi tematici per i principianti e utenti avanzati. \ No newline at end of file
diff --git a/plugins/TakeATour/language/it_IT/index.php b/plugins/TakeATour/language/it_IT/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/it_IT/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/it_IT/plugin.lang.php b/plugins/TakeATour/language/it_IT/plugin.lang.php
deleted file mode 100755
index dbbce481f..000000000
--- a/plugins/TakeATour/language/it_IT/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Fai un percorso e scopri le caratteristiche della tua galleria Piwigo» Vai alle guide disponibili';
-$lang['Visit your Piwigo!'] = 'Visita il tuo Piwigo!';
-$lang['Start the Tour'] = 'Inizia il Tour';
-$lang['Next '] = 'Avanti';
-$lang['Prev'] = 'Indietro';
-$lang['End tour'] = 'Fine Tour';
-$lang['takeatour_configpage'] = 'Fai un Tour » Lista dei Tours';
-
-$lang['First Contact'] = 'Primo Contatto';
-
-$lang['2.7 Tour'] = 'Tour 2.7';
-$lang['2_7_0_descrp'] = 'Scopri le Novità di Piwigo 2.7';
-
-$lang['TAT_descrp'] = 'Benvenuti! Ecco un elenco di tutti i tour disponibili per aiutarti a scoprire le caratteristiche della tua galleria Piwigo.<br><br>Avvia un tour qui sotto, quindi segui le istruzioni. Clicca Avanti/Indietro (o utilizza le frecce della tastiera) per navigare durante un tour. Mentre si è in un tour, se vai in un\'altra pagina dell\'amministrazione, sarai reindirizzato alla pagina corrente del Tour. Se sei bloccato e non puoi terminare il giro, vai a <em>Plugins » Scegli un Tour</em> terminerai il tour.';
-$lang['first_contact_descrp'] = 'Consigliato per i principianti, questo tour ti introduce a Piwigo e alle sue caratteristiche di base. Esso si avvierà mostrando come aggiungere foto e quindi gestirle. Il tour prosegue con la gestione album e termina con la personalizzazione tramite configurazione, temi e plugin.';
-$lang['privacy_descrp'] = 'Questo tour presenta tutti i modi per proteggere le tue foto da pubblico accesso con autorizzazioni per album, foto e da copia utilizzando protezioni di immagine.';
-$lang['Privacy'] = 'Privacy'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/it_IT/tour_2_7_0.lang.php b/plugins/TakeATour/language/it_IT/tour_2_7_0.lang.php
deleted file mode 100644
index fa3f6753b..000000000
--- a/plugins/TakeATour/language/it_IT/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_stp4'] = 'La pagina di ricerca è stata rielaborata: capacità di selezionare le proprietà su cui applica la parola cercata, elenco degli autori trovati nel database, elenco di completamento automatico dei tag, elenco di completamento automatico di album...';
-$lang['2_7_0_stp5'] = 'Puoi impostare l\'orario oltre la data, usando i cursori Ora e Minuti';
-$lang['2_7_0_stp6'] = 'La casella di selezione per raccolta album, etichette, etc è cambiata in una nuova più user-friendly. Prova qui sotto';
-$lang['2_7_0_title4'] = 'Pagina ricerca';
-$lang['2_7_0_title5'] = 'Ora';
-$lang['2_7_0_title6'] = 'Seleziona le caselle';
-$lang['2_7_0_title2'] = 'Prima le novità';
-$lang['2_7_0_title11'] = 'A presto!';
-$lang['2_7_0_title1'] = 'Benvenuto in Piwigo 2.7';
-$lang['2_7_0_stp2'] = 'Come puoi vedere è stato aggiunto un nuovo plugin predefinito: Fai un Tour. Questo plugin ti aiuta a scoprire il tuo Piwigo. Qui è dove sono elencati tutti i tour disponibili.<br>Questa pagina è disponibile in <em>Plugins» Fai un Tour.</em>';
-$lang['2_7_0_stp11'] = 'Questo tour è finito.<p style="text-align:center"> goditi il tuo Piwigo 2.7!</p>Se ti piace Piwigo e vuoi supportarci, puoi contribuire aiutando per traduzioni, donazione, etc. <a href="http://piwigo.org/basics/contribute" target="_blank">Clicca qui per sostenerci</a>';
-$lang['2_7_0_stp1'] = 'Ciao! Sarò la tua guida per scoprire Piwigo. Sei pregato di seguire le mie istruzioni e fare clic su avanti (o utilizza le frecce della tastiera) per navigare. Se vai in un\'altra pagina, sarai reindirizzato alla pagina corrente del Tour.';
-$lang['2_7_0_stp9'] = 'E\' stato aggiunto un filtro di ricerca per il batch manager. Esso viene fornito con una potente sintassi per la ricerca di foto su date, tag, dimensione, nome del file e anche le opzioni di ricerca come esatta corrispondenza, e/o, raggruppamento, esclusione. Puoi leggere la guida dettagliata in seguito. La stessa sintassi si applica al campo di ricerca rapida dal menu lato pubblico.';
-$lang['2_7_0_stp8'] = 'Semplice action link per svuotare il vostro caddie con un solo click.';
-$lang['2_7_0_stp7'] = 'Ora puoi ordinare i tuoi album in base alla data di creazione della foto o data inserimento';
-$lang['2_7_0_title8'] = 'Svuota il tuo carrello';
-$lang['2_7_0_title9'] = 'Filtro di ricerca';
-$lang['2_7_0_title7'] = 'Ordina album per data';
-$lang['2_7_0_title2b'] = 'Nuovo modulo di caricamento';
-$lang['2_7_0_title10'] = 'Filtro dimensione file';
-$lang['2_7_0_stp2b'] = 'Il nuovo modulo di upload in Piwigo 2.7 è basato su HTML5 invece di Flash, il che significa una migliore compatibilità con i moderni browser web, nonché un maggiore affidabilità su connessioni lente. E clicca e trascina renderà la selezione delle foto molto più facile dal vostro file browser!';
-$lang['2_7_0_stp10'] = 'Un filtro sulla dimensione del file è stato aggiunto anche al batch manager. Puoi selezionare un intervallo con un valore minimo e massimo.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/it_IT/tour_first_contact.lang.php b/plugins/TakeATour/language/it_IT/tour_first_contact.lang.php
deleted file mode 100644
index 03cf50e69..000000000
--- a/plugins/TakeATour/language/it_IT/tour_first_contact.lang.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-$lang['first_contact_stp4'] = 'Primo scegli un album; creane uno se non c\'è nessun album.';
-$lang['first_contact_stp40'] = 'Qui ci sono io! Non disattivarmi ora, ma puoi vedere che è possibile Disattivare o Ripristinare un plugin attivato.';
-$lang['first_contact_stp41'] = 'Puoi vedere nell\'ultima scheda tutti i plugin disponibili per la tua versione di Piwigo. Ci sono centinaia di plugin qui!';
-$lang['first_contact_title1'] = 'Benvenuto nella tua galleria Piwigo';
-$lang['first_contact_title11'] = 'Come modificare le foto';
-$lang['first_contact_stp32'] = 'Adesso salva le tue modifiche';
-$lang['first_contact_stp29'] = 'Qui, in questa prima pagina, potrai impostare la configurazione essenziale e fondamentale della tua galleria.';
-$lang['first_contact_stp30'] = 'Cominciamo modificando il titolo';
-$lang['first_contact_stp22'] = 'Come per la foto, qui è possibile modificare le proprietà di un album';
-$lang['first_contact_stp2'] = 'Il link è qui. Clicca su Avanti per continuare';
-$lang['first_contact_stp16'] = 'qui per aggiungere o rimuovere le foto dagli album. Il link è solo virtuale, nessuna foto verrà veramente spostata.';
-$lang['first_contact_stp13'] = 'Puoi modificare le descrizioni ed altro dal batch manager in modalità unità. Ma per ora, restiamo in modalità globale';
-$lang['first_contact_stp15'] = 'Su questa pagina è possibile modificare tutte le proprietà di una foto, ad esempio...';
-$lang['first_contact_stp11'] = 'E\' possibile selezionare da qui una o più foto';
-$lang['first_contact_title4'] = 'Aggiungi le foto !';
-$lang['first_contact_title38'] = 'Plugin';
-$lang['first_contact_title39'] = 'Plugin';
-$lang['first_contact_title20'] = 'Gestione Album';
-$lang['first_contact_title43'] = 'E\' stato un grande momento';
-$lang['first_contact_title9'] = 'Il Batch Manager';
-$lang['first_contact_title21'] = 'Altre schede';
-$lang['first_contact_title28'] = 'Configurazione';
-$lang['first_contact_title29'] = 'Configurazione->Opzioni->Generale';
-$lang['first_contact_title3'] = 'Aggiungi Pagina Foto';
-$lang['first_contact_title33'] = 'Impostazioni Ospite';
-$lang['first_contact_title34'] = 'Temi';
-$lang['first_contact_title35'] = 'Temi';
-$lang['first_contact_title37'] = 'Temi';
-$lang['first_contact_title18'] = 'Gestione album';
-$lang['first_contact_title19'] = 'Gestione Album';
-$lang['first_contact_stp6'] = 'Puoi vedere che le foto vengono elencate. Aggiungi almeno 2 foto e quando sei pronto clicca sul pulsante Avvia Upload';
-$lang['first_contact_stp3'] = 'Questa prima scheda è dove si aggiungono le foto direttamente dal tuo browser. Le altre schede riguardano gli altri modi per caricare le foto';
-$lang['first_contact_stp28'] = 'Ora vedremo le opzioni disponibili per impostare Piwigo al tuo metodo di lavoro. Clicca su Configurazione->Opzioni oppure premi Avanti.';
-$lang['first_contact_stp14'] = 'Vediamo ora la pagina di modifica di una foto. Quella pagina è raggiungibile da qui ma anche dalla pagina foto pubbliche quando connesso come amministratore. Clicca su Modifica o vai alla prossima';
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_stp8'] = 'Cerchiamo di modificarle! Clicca sul link. Se non lo vedi clicca Prima per aggiungere almeno 2 foto.';
-$lang['first_contact_title15'] = 'La pagina di modifica di una foto';
-$lang['first_contact_title22'] = 'Pogina Modifica Album';
-$lang['first_contact_stp18'] = 'Vediamo ora come gestire gli album. Cliccas <em>Su album» Gestione</em> o premi Avanti';
-$lang['first_contact_stp12'] = 'poi modificali tramite un\'azione';
-$lang['first_contact_stp19_b'] = 'Qui sono elencati gli album \'root\'.';
-$lang['first_contact_stp19'] = 'Qui sono elencati gli album \'root\'. Se vedete un album con uno sfondo tratteggiato, significa che è un album fisico da una sincronizzazione FTP. Un album fisico non può essere spostato o eliminato da qui. Gli altri album sono chiamati album virtuali.';
-$lang['first_contact_stp5'] = 'Quindi clicca sul pulsante per selezionare le foto da inviare, o semplicemente trascina i file.';
-$lang['first_contact_stp1'] = 'Ciao! io sarò la vostra guida per scoprire Piwigo. Ti prego di seguire le mie istruzioni, e fare clic su "Avanti" (o usare le frecce della tastiera) per navigare. Se passi a un\'altra pagina dell\'amministrazione, verrai reindirizzati alla pagina corrente del tour. Se sei bloccato e non può finire il tour, vai al Plugin "Take A Tour" e si concluderà il tour.<br>Cominciamo con l\'aggiunta di foto!';
-$lang['first_contact_stp10'] = 'Ecco il link per accedere direttamente al "Cestino": questo è uno strumento per gli amministratori per scegliere facilmente le foto visibili nella parte pubblica, al fine di editarli in "Gestione dei lotti" <br><br> Tu puoi aggiungere foto al cestino sull\'area pubblica quando sei loggato come amministratore, oppure utilizzando l\'azione "Aggiungi al cestino" in "Gestione dei lotti".';
-$lang['first_contact_stp17'] = 'Qui è possibile impostare la foto come una miniatura di uno o più album. La foto non deve necessariamente essere associato all\'album o essere una sua miniatura. Se la foto è associato con l\'album, è ancora più semplice impostare come album miniatura dalla pagina pubblica. <br>(Suggerimento: se usi il plug "Admin Tools", è ancora più facile).';
-$lang['first_contact_stp20'] = 'Quando il mouse passa sopra un album, appaiono link e informazioni. Per cambiare la sua posizione trascina l\'album in alto od in basso , quindi puoi salvare o annullare l\'azione.';
-$lang['first_contact_stp21'] = 'La scheda successiva è una pagina in cui è possibile spostare qualsiasi album virtuale <br> La scheda "Permalink" serve ad impostare un particolare URL per un album <br> Ma se cerchi di modificare un album divi fare clic su "Modifica" dell\'album';
-$lang['first_contact_stp23'] = '"Blocco di un album" significa che solo gli amministratori saranno in grado di vedere che l\'album. <br> Molto utile quando si prepara l\'album prima della pubblicazione';
-$lang['first_contact_stp31'] = 'Adesso il banner, verrà visualizzato sulla parte superiore di ogni pagina. Come potete vedere, i tag HTML sono elencati qui. È inoltre possibile utilizzare "%gallery_title% tag" per visualizzare il titolo appena digitato in precedenza.';
-$lang['first_contact_stp33'] = 'Solo una parola sulla opzione "Impostazioni del cliente" serve per impostare le preferenze dei visitatori non registrati. <br> in Piwik "ospite" significa visitatore non registrato <br> Continuiamo con configurazione:. Fare clic su <em> "Configurazione »Temi </ em>" oppure premere "Avanti".';
-$lang['first_contact_stp34'] = 'La scelta di un tema è il primo passo per personalizzare il tuo Piwigo. I Temi installati sono elencate qui <br> puoi attivare più di un tema. Gli utenti possono modificare il loro tema, scegliendo uno tra quelli abilitati qui, puoi configurarlo se è attiva la voce "Configurazione".';
-$lang['first_contact_stp35'] = 'Imposta il tuo tema preferito come tema di "default".';
-$lang['first_contact_stp37'] = 'Per installare nuovi temi, è possibile scaricarli direttamente dalla scheda "Aggiungi un tema". Sono mostrati solo i temi compatibili con la versione di Piwigo . <br> Scopriamo i plugins ora! Clicca sulla <em> "Aggiungi un tema" </ em>';
-$lang['first_contact_stp38'] = 'I Plugin sono un modo molto semplice per personalizzare il vostro Piwigo. Si può fare quasi tutto ciò che si può immaginare, da piccole aggiunte di testo per completare le caratteristiche, come il plugin ( Community?????? ) che consente agli utenti non amministratori di ( caricare ??? )senza entrare nella parte di amministrazione.';
-$lang['first_contact_stp39'] = 'In questa prima pagina, sono elencati i plugin installati. <br> Nella parte superiore, sono elencati i plugin attivati​​, che sono attualmente in esecuzione. <br> nella parte inferiore, i plugin caricati ma disabilitati. <br> "Disattivare" un plugin significa che ogni traccia del plugin verrà rimossa (file, opzioni, ecc). Per la maggior parte dei plugin, la disattivazione terrà i dati registrati dal plugin.';
-$lang['first_contact_stp43'] = 'Questo tour è stato molto lungo, ma hai visto solo una piccola parte di quanto potente sia Piwigo. Tutto ha una fine, questa panoramica è finita. <br> È possibile esaminare più a fondo le caratteristiche di Piwigo con un altro tour o leggere la documentazione, sul sito piwigo.org. <br> Non dimenticare anche il collegamento Guida nell\'angolo superiore destro di qualsiasi pagina di amministrazione (?????) <p style = "text-align: center">! Goditi il tuo Piwigo </ p>';
-$lang['first_contact_stp7'] = 'Ecco un riepilogo delle foto caricate. Vedi che Piwik stesso ha generato le miniature. È possibile: <ul> <li> gestire tutte le foto caricate nel "Home Amministrazione > Foto" </ li> <li> modificare le proprietà di una foto cliccando su di esso "Gestione dei lotti"</ li> <li> aggiungere altre foto "Aggiungere foto" </ li> </ ul>';
-$lang['first_contact_stp9'] = 'Ora siete in "Gestione dei lotti", dove è possibile modificare in batch più foto. <br> Qui il filtro pre è già impostato su "Cestino", perché siamo venuti dalla pagina di upload.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/it_IT/tour_privacy.lang.php b/plugins/TakeATour/language/it_IT/tour_privacy.lang.php
deleted file mode 100644
index 279df6304..000000000
--- a/plugins/TakeATour/language/it_IT/tour_privacy.lang.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-$lang['privacy_title14b'] = '';
-$lang['privacy_stp14b'] = 'Fatto importante: il webmaster e gli amministratori non sono onnisciente durante la navigazione nella parte pubblica, ma possono accedere ad ogni album e alle foto sulla parte amministrativa.';
-$lang['privacy_stp14'] = 'Quindi utenti e gruppi di utenti può essere concesso di accedere all\'album.';
-$lang['privacy_stp13'] = 'Ora clicca su privato.';
-$lang['privacy_stp11'] = 'Ora clicca sulla scheda autorizzazioni';
-$lang['privacy_stp12'] = 'In quella pagina, puoi scegliere se l\'album sarà disponibile per chiunque o se sia limitato ad alcuni utenti';
-$lang['privacy_stp18'] = 'Per gestire le associazioni tra gli utenti e gruppi, vai alla pagina <em>Utenti » Gestione</em>';
-$lang['privacy_stp15'] = 'Prima di spiegare i gruppi, un suggerimento: questo è il link alla pagina per impostare come privato/pubblico diversi album contemporaneamente. Clicca su di esso';
-$lang['privacy_title17'] = 'Gruppi';
-$lang['privacy_title12'] = 'Permessi album';
-$lang['privacy_title10'] = 'Permessi album';
-$lang['privacy_title11'] = 'Permessi album';
-$lang['privacy_stp1'] = 'Ciao! Sarò la tua guida per scoprire come proteggere le tue foto in Piwigo. Sei pregato di seguire le mie istruzioni e cliccare su avanti (o utilizzare le frecce della tastiera) per navigare. Se vai in un\'altra pagina dell\'amministrazione, sarai reindirizzato alla pagina corrente del Tour. Se sei bloccato e non puoi terminare il tour, vai a <em>Plugin» Scegli un Tour</em> concluderai il tour.<br>Cominciamo!';
-$lang['privacy_title1'] = 'Benvenuto nel tour sulla Privacy';
-$lang['privacy_title18'] = 'Gruppi';
-$lang['privacy_stp16'] = 'Come sul computer, puoi selezionare diversi album utilizzando i tasti Shift e Ctrl, quindi clicca sulla freccia per cambiarli. <br>Ora, permettimi di introdurti i gruppi.';
-$lang['privacy_stp3'] = 'Prenditi un momento per leggere le informazioni qui di seguito.';
-$lang['privacy_stp6'] = 'Quando carichi le foto, è possibile modificare il livello di Privacy delle foto caricate proprio lì ...';
-$lang['privacy_title24'] = 'è stato un grande momento';
-$lang['privacy_title22'] = 'Config locale: protezione Original';
-$lang['privacy_title6'] = 'Livello Privacy';
-$lang['privacy_title7'] = 'Livello Privacy';
-$lang['privacy_title8'] = 'Livello Privacy';
-$lang['privacy_title9'] = 'Livello Privacy';
-$lang['privacy_title3'] = 'Permessi';
-$lang['privacy_title4'] = 'Permessi';
-$lang['privacy_title5'] = 'Permessi > Gruppi';
-$lang['privacy_title2'] = 'Aiuto dentro il tuo Piwigo';
-$lang['privacy_title21'] = 'Foto publiche';
-$lang['privacy_title20'] = 'Foto publiche';
-$lang['privacy_stp8'] = 'Seleziona una o più foto...';
-$lang['privacy_title19'] = 'Utenti';
-$lang['privacy_title15'] = 'Consiglio';
-$lang['privacy_stp10'] = 'Siamo nella gestione elenco Album disponibile dal menu usando <em>album » Gestisci</em><br><br>Modifica album in sospeso e quindi clicca su Modifica.';
-$lang['privacy_stp22'] = '<em>Per gli Utenti Avanzati</em><br><br>In Piwigo, puoi proteggere la foto originale utilizzando la tua configurazione locale. Utilizza la variabile $conf[\'original_url_protection\']: per impostazione predefinita è vuota, imposta il valore di «immagini» per proteggere solo le foto oppure "tutti" per proteggere anche tutti i tipi di media, che possono consumare risorse oppure semplicemente potrebbero non funzionare sul vostro server.<br><br>Questa opzione funziona per contenuti pubblici e privati. Questa opzione richiede attualmente di negare l\'accesso alle cartelle /upload e /galleries, utilizzando un file .htaccess (solitamente un file di testo con la stringa "Deny from all" per contenuto) o le configurazioni del server.<br><br>Per favore nota che i nomi dei file delle foto caricate utilizzando altri metodi diversi da FTP vengono <b>randomizzati</b>, quindi sono impossibili da indovinare: sia il nome del file che il percorso per la foto originale può essere conosciuto solo se il visitatore ha accesso a una versione ridimensionata di quella foto, come la miniatura. $ conf[\'original_url_protection\'] e negando l\'accesso alle cartelle /upload e /gallerie sono destinate ad evitare quel caso.';
-$lang['privacy_stp4'] = 'Quindi abbiamo due sistemi per la gestione dei permessi di accesso alle foto. Sono indipendenti, in modo da poter creare un gruppo chiamato Famiglia, ma questo gruppo non ha nulla a che vedere con il livello di privacy Famiglia. <br><br>I livelli di privacy sono applicati per ogni foto, e le autorizzazioni utente/gruppo vengono applicate per ogni album. Puoi utilizzare entrambi o un solo sistema, che è flessibile.<br><br>La scheda successiva è sulla gestione del gruppo.';
-$lang['privacy_stp24'] = 'Questo tour è terminato.<p style="text-align:center">Goditi il tuo Piwigo!</p>Se ti piace Piwigo e vuoi supportarci, puoi contribuire aiutando per le traduzioni, donazioni, etc.. <a href="http://piwigo.org/basics/contribute" target="_blank">Clicca qui per supportarci</a>. Grazie!';
-$lang['privacy_stp9'] = '... e selezionare l\'azione "Chi può vedere le foto?". Ora è possibile modificare il livello di privacy delle foto selezionate.<br><br>Ma puoi anche farlo per una foto specifica, sulla sua pagina di modifica. Puoi accedere ad essa dalla parte pubblica, oppure da qui.<br><br>Ora, ti mostrerò un altro sistema di autorizzazione per ogni album basato sui gruppi e gli utenti.';
-$lang['privacy_stp5'] = 'Qui di seguito è spiegato come è possibile gestire i gruppi. <br> Tali permessi sono solo per l\'accesso delle foto e gli album, durante la navigazione da parte del pubblico o per le applicazioni esterne. Vedremo più avanti altre protezioni, ma facciamo ora un po\' di pratica!';
-$lang['privacy_stp7'] = '... oppure puoi fare che una successiva, qui in Batch Manager in Modalità Globale.<br><br>Questa è la pagina <em>Foto» Foto recenti</em>, quindi il filtro "Ultima Importazione" è impostato.';
-$lang['privacy_stp21'] = 'Le soluzioni sono: <ul><li>mettere un watermark, almeno sulle foto di media e alta definizione.</li><li>e disabilitare il formato XL e XXL.</li><li>e disabilitare l\'alta definizione (il download e la visualizzazione della foto originale) per gli utenti interessati.';
-$lang['privacy_stp20'] = 'Ora sai come mantenere le tue foto private, ma potresti domandarti come proteggere le tue foto pubbliche. Potresti pensare di impedire al visitatore di scaricare le foto: non è possibile, perché il web è stato creato in questo modo (il browser del visitatore scarica tutte le risorse visualizzate e altro). Può essere disabilitato il tasto destro del mouse, un livello vuoto può essere messo in cima la foto ecc, ma esso non si disattiva il download. Le pagina Web completa può essere salvata da qualsiasi browser web.';
-$lang['privacy_stp2'] = 'Qui puoi accedere alla Guida integrata. Clicca su Avanti per proseguire direttamente alla pagina della Guida sulla gestione dei permessi';
-$lang['privacy_stp19'] = 'Qui puoi modificare velocemente un singolo utente passando sopra con il mouse e quindi cliccando sul link Modifica.<br><br>Puoi selezionare più utenti e modificarli in una sola volta scegliendo poi un\'Azione da applicare.';
-$lang['privacy_stp17'] = 'Un gruppo in Piwigo è solo un insieme di utenti: così i gruppi rendono più facile la gestione dei permessi degli album e la gestione della proprietà degli utenti. Qui è la pagina in cui è possibile gestire i gruppi, cioè rinominare, unire, duplicare, eliminarli. Puoi anche impostare uno o più gruppi come "gruppo predefinito", ciò significa significa che gli utenti appena registrati saranno associti a questi gruppi predefiniti.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/lv_LV/description.txt b/plugins/TakeATour/language/lv_LV/description.txt
deleted file mode 100755
index e8a04eaf3..000000000
--- a/plugins/TakeATour/language/lv_LV/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Apmeklējiet Piwigo, lai novērtētu tā iespējas. Šis spraudnis nodrošina daudzpusīgu tematisku ieskatu gan iesācējiem, gan pieredzējušiem lietotājiem. \ No newline at end of file
diff --git a/plugins/TakeATour/language/lv_LV/index.php b/plugins/TakeATour/language/lv_LV/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/lv_LV/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/lv_LV/plugin.lang.php b/plugins/TakeATour/language/lv_LV/plugin.lang.php
deleted file mode 100755
index f3f90f037..000000000
--- a/plugins/TakeATour/language/lv_LV/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Izmantojiet ekskursu un atklājiet savas Piwigo galerijas iespējas, Ejiet uz pieejamajiem ekskursiem';
-$lang['Visit your Piwigo!'] = 'Apmeklējiet savu Piwigo!';
-$lang['Start the Tour'] = 'Sākt Iepazīšanos';
-$lang['takeatour_configpage'] = 'Izvēlies Ekskursu > Ekskursu saraksts';
-$lang['TAT_descrp'] = 'Laipni lūdzam! Šeit ir apkopotas visas pieejamās ekskursijas, lai rastu ieskatu jūsu Piwigo galerijas iespējās. <br> Sākt apskatu zemāk, tad sekojiet instrukcijām. Noklikšķiniet uz Nākošais / Iepriekšējais (vai izmantojiet tastatūras bultas), lai virzītos apskates laikā. Apskates laikā, ja jūs ejat uz citu administrēšanas lapu, jūs tiksiet novirzīts uz pašreizēju apskates lapu. Ja esat iestrēdzis un nevarat pārtraukt apslati, dodoties uz <em> Spraudņi »Take Tour </ em> beigsiet apskati.';
-$lang['End tour'] = 'Apskata beigas';
-$lang['Prev'] = 'Iepriekšējais';
-$lang['Next '] = 'Nākamais';
-
-$lang['First Contact'] = 'Pirmā Iepazīšanās';
-$lang['first_contact_descrp'] = 'Ieteicams iesācējiem, šī tūre iepazīstina jūs ar Piwigo, tā pamatfunkcijām. Sākas, pievienojot bildes, tad tās pārvalda. Tūre turpinās ar albumu vadību un atļaujām, beidzas ar pielāgošanu, izmantojot konfigurāciju, tēmas un spraudņus.';
-
-$lang['2.7 Tour'] = '2.7 Apskats';
-$lang['2_7_0_descrp'] = 'Atklājiet, kas jauns Piwigo 2.7';
-
-$lang['privacy_descrp'] = 'Šis apskats iepazīstina ar visiem veidiem, kā aizsargāt savu foto no publiskas piekļuves, izmantojot atļauju sistēmu vienam albūmam un vienam attēlam, un pret kopēšanu, izmantojot attēlu aizsardzību.';
-$lang['Privacy'] = 'Privātums'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/lv_LV/tour_2_7_0.lang.php b/plugins/TakeATour/language/lv_LV/tour_2_7_0.lang.php
deleted file mode 100644
index 5648b528f..000000000
--- a/plugins/TakeATour/language/lv_LV/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_title6'] = 'Izvēlēties skriptu';
-$lang['2_7_0_stp4'] = 'Meklēšanas lapa ir pārveidota: iespēja izvēlēties īpašības vārdu meklēšanas piemērošanai, datu bāzē atrodamo autoru sarakstu, tegu sarakstu auto-pabeigšanu, albūmu sarakstu auto-pabeigšanu ...';
-$lang['2_7_0_stp5'] = 'papildus datumam, Jūs varat iestatīt laiku, izmantojot stundu un minūšu slaiderus';
-$lang['2_7_0_stp6'] = 'Ir izmnainīts albumu, tegu uc. izvēles skripts uz jaunāku vēl lietotājam draudzīgāku. Pārbaudiet to ';
-$lang['2_7_0_title4'] = 'Meklēt Lapu';
-$lang['2_7_0_title5'] = 'Laiks';
-$lang['2_7_0_stp1'] = 'Sveiki! Būšu jūsu ceļvedis ekskursijā pa Piwigo. Lūdzu sekojiet manām norādēm un noklikšķiniet uz Next (vai izmantojiet bultas uz tastatūras), lai pārvietotos. Ja ejat uz citu lapu, jūs tikiet novirzīti uz pašreizējo Ekskursijas lapu.';
-$lang['2_7_0_stp2'] = 'Kā redzat, pievienots jauns noklusējuma spraudnis: Iepazīsim to. Šis spraudnis ļauj jums atklāt Piwigo spējas. Šeit ir uzskaitītas visas pieejamās ekskursijas pa Piwigo.Šī lapa ir pieejama <em> Plugins »Take Tour </ em>';
-$lang['2_7_0_title11'] = 'Uz drīzu redzēšanos!';
-$lang['2_7_0_title2'] = 'Pirmais jaunums';
-$lang['2_7_0_title1'] = 'Sveicināti Piwigo 2.7';
-$lang['2_7_0_stp11'] = 'Šī ekskursija nu ir galā.<p style="text-align:center">Baudiet savu Piwigo 2.7!</p>Ja jums palīk Piwigo un vēlaties mūs atbalstīt, to varat darīt palīdzot ar tulkojumiem, ziedojot, utt. <a href="http://piwigo.org/basics/contribute" target="_blank">Klikšķiniet lai atbalstītu mūs</a>';
-$lang['2_7_0_stp2b'] = 'Jaunā augšupielādes forma Piwigo 2.7 balstās uz HTML5 nevis Flash, tas nozīmē labāku savietojamību ar mūsdienu tīmekļa pārlūkprogrammām, kā arī palielinātu uzticamību lēnu savienojumu gadījumā. Un veids "velciet un nometiet" padarīs fotogrāfiju atlasi daudz vieglāku jūsu failu pārlūkos!';
-$lang['2_7_0_stp9'] = 'Arī Meklēšanas filtrs ir pievienots virknes pārvaldniekam. Tas ir ar spēcīgu sintaksi, lai meklēt fotogrāfijas pēc datumiem, birkām, lieluma, faila nosaukuma, kā arī meklēt pēc opcijām, piemēram, precīzu atbilstību, un / vai, grupēšanas, izņēmumiem. Iespējams izlasīt detalizētu palīdzību vēlāk.Tā pati sintakse attiecas uz ātrās meklēšanas lauku sabiedriskā lietujuma izvēlnes pusē.';
-$lang['2_7_0_stp10'] = 'Filtrs pēc faila izmēra tagad arī ir pievienots virknes pārvaldniekam. Var izvēlēties apgabalus ar minimālo un maksimālo vērtību.';
-$lang['2_7_0_stp7'] = 'Tagad varat kārtot albūmus pēc bildes izveidošanas vai tās ievietošanas datuma';
-$lang['2_7_0_stp8'] = 'Vieglas darbības saite, lai iztukšotu krātuvi ar vienu klikšķi.';
-$lang['2_7_0_title9'] = 'Meklēšanas filtrs';
-$lang['2_7_0_title8'] = 'Iztukšot krātuvi';
-$lang['2_7_0_title7'] = 'Kārtot albūmus pēc datuma';
-$lang['2_7_0_title2b'] = 'Jauna augšupielādes forma';
-$lang['2_7_0_title10'] = 'Faila izmēra filtrs'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/lv_LV/tour_first_contact.lang.php b/plugins/TakeATour/language/lv_LV/tour_first_contact.lang.php
deleted file mode 100644
index 6d81b5cc7..000000000
--- a/plugins/TakeATour/language/lv_LV/tour_first_contact.lang.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-$lang['first_contact_stp29'] = 'Šeit, pirmajā lapā, varat iestatīt svarīgāko un veikt savas galerijas pamatkonfigurāciju.';
-$lang['first_contact_title1'] = 'Laipni lūgti savā Piwigo galerijā';
-$lang['first_contact_title22'] = 'Albūma Izdevuma Lapa';
-$lang['first_contact_title21'] = 'Citas Cilnes';
-$lang['first_contact_title15'] = 'Attēla izdevuma lapa';
-$lang['first_contact_title19'] = 'Pārvaldīt Albūmus';
-$lang['first_contact_title20'] = 'Pārvaldīt Albūmus';
-$lang['first_contact_title18'] = 'Pārvaldīt albūmus';
-$lang['first_contact_title11'] = 'Kā rediģēt attēlus';
-$lang['first_contact_title9'] = 'Virknes darbību pārvaldnieks';
-$lang['first_contact_title43'] = 'Pavadīts jauks laiks';
-$lang['first_contact_title29'] = 'Konfigurācija->Opcijas->Vispārēji';
-$lang['first_contact_title35'] = 'Tēmas';
-$lang['first_contact_title37'] = 'Tēmas';
-$lang['first_contact_title38'] = 'Spraudņi';
-$lang['first_contact_title39'] = 'Spraudņi';
-$lang['first_contact_title4'] = 'Pievienosim foto!';
-$lang['first_contact_title34'] = 'Tēmas';
-$lang['first_contact_title33'] = 'Viesa iestatījumi';
-$lang['first_contact_title3'] = 'Pievienot Foto Lapu';
-$lang['first_contact_title28'] = 'Konfigurācija';
-$lang['first_contact_stp4'] = 'Vispirms izvēlaties albūmu, ja nav izveidojiet to.';
-$lang['first_contact_stp30'] = 'Sāksim nomainot nosaukumu';
-$lang['first_contact_stp32'] = 'Tagad saglabājiet veiktās izmaiņas';
-$lang['first_contact_stp2'] = 'Saite ir šeit. Spiediet Next lai turpinātu';
-$lang['first_contact_stp11'] = 'Šeit Jūs varat izvēlēties vienu vai vairākus attēlus';
-$lang['first_contact_stp14'] = 'Mēs redzēsim viena attēla redakcijas lapu. Šī lapa ir sasniedzama no šejienes, kā arī no publiskās attēla lapas, kad ielogojaties kā administrators. Noklikšķiniet uz Rediģēt vai doties tālāk';
-$lang['first_contact_stp3'] = 'Šī pirmā cilne ir vieta, kur var pievienot fotogrāfijas tieši no jūsu pārlūka. Pārējās cilnēs ir citi veidi, kā augšupielādēt fotogrāfijas';
-$lang['first_contact_stp15'] = 'Šajā lapā jūs varat rediģēt visas foto īpašības, piemēram, ...';
-$lang['first_contact_stp38'] = 'Visērtāk pielēgot Piwigo var ar spraudiem. Ar to palīdzību var gandrīz visu, ko varat iedomāties no maziem teksta aprakstiem līdz pageigtiem elementiem, piemēram kā Kopienas spraudnis, kas ļauj neadministratorlietotājiem augšupielādēt neieejot administrācijas daļā.';
-$lang['first_contact_stp13'] = 'Jūs varat rediģēt aprakstus un vēl vairāk no virknes pārvaldītāja vienības režīmā. Bet tagad, paliksim vispārīgajā režīmā';
-$lang['first_contact_stp37'] = 'Lai uzstādītu jaunas tēmas, jūs to varat tieši lejupielādēt no cilnes "Pievienot tēmu". Tiek rādītas tikai ar jūsu Pivigo versiju saderīgas tēmas. <br> Tagad atklāsim šos spraudņus priekš sevis! Noklikšķiniet uz Plugin-> Pārvaldīt';
-$lang['first_contact_stp40'] = 'Lūk, tas es! Neatspējojiet mani tagad, bet jūs varat Atspējot vai Atjaunot un aktivizēt spraudni.';
-$lang['first_contact_stp20'] = 'Kad jūsu pele tiek vilkta pār albumu, parādās saites un informācija. Kad jūs velkat un nometat albūmu - noapaļots bloks-, jūs izmainīsiet tā atrašanās vietu un pēc tam varat saglabāt vai atcelt savu izkārtojumu.';
-$lang['first_contact_stp31'] = 'Tad baneris, kas tiks parādīts katras lapas augšpusē. Kā redzat, šeit ir atļauti HTML tagi. Jūs varat izmantot arī % gallery_title% tagu, lai parādītu jūsu tikko uzrakstīto virsrakstu.';
-$lang['first_contact_stp28'] = 'Tagad apskatīsim opcijas, lai liktu Piwigo strādāt pēc jūsu prāta. Noklikšķiniet uz Konfigurācija -> Opcijas vai vienkārši Tālāk (Next).';
-$lang['first_contact_stp41'] = 'Uz pēdējās cilnes Jūs varat redzēt visus jūsu Piwigo versijai pieejamos spraudņus. Tur atrodas simtiem spraudņu!';
-$lang['first_contact_stp6'] = 'Redzat, ka šie attēli ir sarakstā. Pievienojiet vismaz 2 attēlus un, kad esat gatavs, klikšķiniet pogu Sākt Augšupielādi (Start Upload). ';
-$lang['first_contact_stp9'] = 'Tagad esat virknes pārvaldniekā, kur varat vienlaicīki rediģēt vairākus attēlus. Šeit Grozs ir iestatīts kā filtrs, jo nākam no augšupielādes rezultātu lapas.';
-$lang['first_contact_stp8'] = 'Rediģēsim tos! Klikšķiniet uz saites. Ja to neredzat, klikšķiniet uz Prev (iepriekšējais), lai pievienotu vismaz 2 attēlus.';
-$lang['first_contact_stp7'] = 'Šeit ir kopsavilkums par jūsu augšupielādētajiem attēliem. Redzat, ka Piwigo pats ir izveidojis sīktēlus. Jūs varat pievienot vairāk fotogrāfijas ar saiti apakšā, rediģēt attēla rekvizītus, noklikšķinot uz tā, vai klikšķiniet, lai pārvaldītu visus augšupielādētos attēlus ar Batch Manager...';
-$lang['first_contact_stp16'] = 'Šeit pievieno vai dzēš foto no albūmiem. Saite ir virtuāla, fiziski netiek pārvietots neviens attēls.';
-$lang['first_contact_stp33'] = 'Tikai pēdējais vārds par iespējām, \'Viesu iestatījumi\' lapa ir lai iestatītu nereģistrētu apmeklētāju preferences. Katru reizi, kad Piwigo atsaucas uz "viesis", tas nozīmē, nereģistrētu apmeklētāju.<br> Turpināsim par Konfigurāciju: klikšķiniet uz Configuration-> Themes vai vienkārši nospiediet Next.';
-$lang['first_contact_stp43'] = 'Šis apskats bija diezgan garš, bet mēs tikai esam redzējuši nelielu daļu no tā, cik spēcīgs ir Piwigo. Visam ir beigas, šis pārskats ir pabeigts. <br>Jūs varat pamatīgāk iepazīties ar Piwigo, veicot kādu citu tūri vai lasot dokumentaciju piwigo.org mājas lapā.';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_stp23'] = 'Slēgt albumu nozīmē, ka tikai administratori varēs redzēt šo albumu: to ir parasti izmanto, ja admins pārvalda albūma rekvizītus vai ja nevēlas uzreiz publicēt albūmu.';
-$lang['first_contact_stp39'] = 'Šajā pirmajā lapā, tiek uzskaitīti uzinstalētie spraudņi. Pašā augšā ir novietoti aktivizētie spraudņi, kas pašlaik darbojas. Apakšā - spraudņi, kas instalēti spraudņu mapē, bet nav aktīvi. Izdzēšot spraudni nozīmē, ka jebkuras tā pēdas tiks likvidētas (faili, iespējas uc). Attiecībā uz spraudņu lielāko daļu, to atspējošana saglabās to reģistrētos datus.';
-$lang['first_contact_stp10'] = 'Šeit ir saite groza tiešai piekļuvei: tas ir instruments, lai administratori varētu viegli pievienot attēlus, laivarētu tos rediģēt ar partijas Menedžeri. Jūs varat pievienot fotoattēlus Grozam no attēla publiskās lapas, kad esat pieteicies kā administrators, vai izmantojot darbību "Pievienot Grozam" no partijas Menedžera';
-$lang['first_contact_stp1'] = 'Sveiki! Es būšu jūsu ceļvedis lai atklātu jums Piwigo. Lūdzu, sekojiet maniem norādījumiem un noklikšķiniet uz Tālāk (Next) (vai izmantojiet tastatūras bultas) lai navigētu. Ja iesiet uz citu administrēšanas lapu, jūs tiksiet novirzīts uz apskata tekošo lapu. Ja esat iestrēdzis un nevarat pārtraukt ceļojumu, dodieties uz <em> Spraudņi »Take Tour </ em> un apskats beigsies. <br>Sāksim, pievienojot bildes!';
-$lang['first_contact_stp5'] = 'Tad klikšķiniet, lai atlasītu nosūtāmos foto, vai velciet un nometiet jūsu failus. ';
-$lang['first_contact_stp35'] = 'Iestatiet jūsu mīļāko tēmu kā noklusēto tēmu.';
-$lang['first_contact_stp12'] = 'tad rediģējiet, pielietojot darbību';
-$lang['first_contact_stp18'] = 'Apskatīsim kā pārvaldīt albūmus. Klikšķiniet uz <em>On album » Manage</em> vai spiežiet Next';
-$lang['first_contact_stp22'] = 'Tāpat kā foto, šeit iespējams rediģēt albūma īpašības';
-$lang['first_contact_stp19_b'] = 'Šeit uzrādīti \'saknes\' albūmi';
-$lang['first_contact_stp17'] = 'Šeit iespējams iestatīt fotoattēlu kā sīktēlu priekš viena vai vairākiem albūmiem.Foto nav jāsaista ar albumu, lai tas būtu tā sīktēls. Ja foto ir sasaistīts ar albumu, tad ir pat vienkāršāk to uzstādīt kā albuma sīktēlu no sabiedrībai pieejamās foto lapas (Padoms: izmantojiet spraudni Admin Tools, lai būtu vēl vienkāršāk).';
-$lang['first_contact_stp34'] = 'Tēmas izvēle ir pirmais solis, lai pielāgotu jūsu Piwigo. Instalētās tēmas ir sakārtotas šeit.<br> Var iespējot vairāk kā vienu tēmu: lietotāji var mainīt savu tēmu, izvēloties vienu starp šeit iespējotajām, ja opcija \'Atļaut lietotāja pielāgošanu\' ir atzīmēta Option lapā.';
-$lang['first_contact_stp19'] = 'Šeit ir uzskaitīti \'saknes\' albūmi. Ja redzat albumu ar punktētu fonu, tas nozīmē, ka tas ir fizisks albums no FTP sinhronizācijas. Fiziskos albūmus no šejienes nevar pārvietot vai izdzēst. Pārējie albūmi ir tā saucamie virtuālie albūmi.';
-$lang['first_contact_stp21'] = 'Nākamā cilne ir lapa, kur var pārvietot jebkuru virtuālo albūmu.<br> Permalink cilne ir lai varētu ievadīt konkrētu url albūmam.<br> Bet rediģēsim albumu: noklikšķiniet uz Edit album'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/lv_LV/tour_privacy.lang.php b/plugins/TakeATour/language/lv_LV/tour_privacy.lang.php
deleted file mode 100644
index 85349fca9..000000000
--- a/plugins/TakeATour/language/lv_LV/tour_privacy.lang.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-$lang['privacy_stp13'] = 'Tagad klikšķiniet uz ptivate.';
-$lang['privacy_stp8'] = 'Atlasiet vienu vai vairākas bildes...';
-$lang['privacy_title6'] = 'Privātuma Līmenis';
-$lang['privacy_title7'] = 'Privātuma Līmenis';
-$lang['privacy_title8'] = 'Privātuma Līmenis';
-$lang['privacy_title9'] = 'Privātuma Līmenis';
-$lang['privacy_title12'] = 'Albumu atļaujas';
-$lang['privacy_title11'] = 'Albumu atļaujas';
-$lang['privacy_title10'] = 'Albumu atļaujas';
-$lang['privacy_title1'] = 'Laipni gaidīti Privātuma Tūrē';
-$lang['privacy_title22'] = 'Vietējā Konfigurācija: Oriģinālā aizsardzība';
-$lang['privacy_title2'] = 'Palīdzība jūsu Piwigo';
-$lang['privacy_title24'] = 'Tas bija lieliski';
-$lang['privacy_title5'] = 'Atļaujas > Grupas';
-$lang['privacy_title4'] = 'Atļaujas';
-$lang['privacy_title3'] = 'Atļaujas';
-$lang['privacy_title21'] = 'Publiskie foto';
-$lang['privacy_title20'] = 'Publiskie foto';
-$lang['privacy_title19'] = 'Lietotāji';
-$lang['privacy_title15'] = 'padoms';
-$lang['privacy_title18'] = 'Grupas';
-$lang['privacy_title17'] = 'Grupas';
-$lang['privacy_stp11'] = 'Tagad klikšķiniet uz Permissions (atļaujas) cilnes';
-$lang['privacy_stp3'] = 'Veltiet laiku, lai izlasītu informāciju zemāk.';
-$lang['privacy_stp12'] = 'Šajā lapā varat izvēlēties vai albūms būs pieejams ikvienam, vai tikai dažiem lietotājiem';
-$lang['privacy_stp14'] = 'Tad lietotājiem un lietotāju grupām var piešķirt tiesības, lai piekļūtu albūmam.';
-$lang['privacy_stp14b'] = 'Svarīgs fakts: webmāsteri un administratori nav visvaroši publiskā daļā, bet tie var piekļūt ikvienam albūmam un fotogrāfijai administratora daļā.';
-$lang['privacy_title14b'] = '';
-$lang['privacy_stp16'] = 'Līdzīgi kā datorā, varat atlasīt vairākus albūmus, izmantojot Shift un Control taustiņus, tad klikšķināt uz bultām, lai tos mainītu.<br><br>Tagad ļaujiet man iepazīstināt ar grupām.';
-$lang['privacy_stp6'] = 'Kad esat augšupielādējuši fotogrāfijas, turpat varat izmainīt arī šo foto Privātuma Pakāpi';
-$lang['privacy_stp18'] = 'Lai pārvaldītu asociācijas starp lietotāju grupām, doties uz <em> Users »Manage</em> lapu';
-$lang['privacy_stp24'] = 'Šis apskats ir beidzies. <p style="text-align:center"></p> Izbaudiet Piwigo!</p> Ja jums patīk Piwigo un vēlaties mūs atbalstīt, jūs varat palīdzēt, palīdzot ar tulkojumiem, ziedojot u.c. <a href = "http://piwigo.org/basics/contribute" target = "_blank"> Klikšķiniet šeit, lai atbalstītu mūs </a>. Paldies!';
-$lang['privacy_stp15'] = 'Tieši pirms izskaidrot grupas, profesionāls padoms: šeit ir saite uz lapu, kur uzstādīt privāts/publisks vairākiem albūmiem uzreiz. Noklikšķiniet uz tās';
-$lang['privacy_stp10'] = 'Mēs esam Albūmu pārvaldības sarakstā pieejami no izvēlnes <em>Albums » Manage</em><br><br>Redīģēt uz albūma, tam pārvelkot ar peli un klikšķinot Edit.';
-$lang['privacy_stp19'] = 'Šeit var ātri rediģēt vienu lietotāju, velkot ar peli pār to un pēc tam noklikšķinot uz saites Edit. <br><br>Varat atlasīt vairākus lietotājus un rediģēt tos uzreiz pēc tam izvēloties Darbību, ko piemērot.';
-$lang['privacy_stp9'] = '...un izvēlieties darbību "Kas var redzēt fotogrāfijas?".Tagad var mainīt izvēlēto foto privātuma līmeni. <br><br> Bet to var darīt arī atsevišķiem foto to rediģēšanas lapās.Pie tā var piekļūt no publiskās daļas vai no šejienes. <br><br> Tagad es jums parādīšu citu albūma atļauju sistēmu, bāzētu uz grupām un lietotājiem.';
-$lang['privacy_stp5'] = 'Zemāk ir izskaidrots, kā jūs varat pārvaldīt Grupas. <br> Šīs atļaujas ir tikai fotogrāfiju un albumu piekļuvei, kad pārlūkošana notiek ārējo aplikāciju publiskajā daļā. Vēlāk redzēsim citus aizsardzības veidus, bet tagad papraktizēsimies ar šo!';
-$lang['privacy_stp7'] = '... vai varat darīt to vēlāk, šeit Sērijas pārvaldniekā Global Mode režīmā. <br><br> Šī ir lapa <em> Photos »Recent photos </ em>, tāpēc filtrs ir iestatīts "Last Import" stāvoklī.';
-$lang['privacy_stp21'] = 'Risinājumi ir:<ul><li> likt ūdenszīmi vismaz uz vidējas un augstas izšķirtspējas foto.</li><li>un atslēgt XL un XXL izmērus.</li><li>un atslēgt Augstu izšķirtspēju (lejuplādēt un attēlot foto patiesajā izmērā) bažīgiem lietotājiem.';
-$lang['privacy_stp2'] = 'Šeit var piekļūt integrētajai Palīdzībai. Noklikšķiniet uz tālāk, lai turpinātu tieši Palīdzības lapā ar atļauju pārvaldību';
-$lang['privacy_stp1'] = 'Sveiki! Es būšu jūsu ceļvedis, lai atklātu kā aizsargāt savas fotogrāfijas Piwigo. Lūdzu sekojiet manām instrukcijām un noklikšķiniet uz Tālāk (vai izmantojiet bultiņas uz tastatūras), lai navigētu. Ja jūs pārvietojaties uz citu administrācijas lapu, jūs tiksiet novirzīts uz pašreizējo Ekskursa lapu. Ja Jūs est iestrēdzis un nevarat pārtraukt apskatu, dodoties uz <em> Plugins »Take a Tour </em> apskate tiks izbeigta. <br> Sāksim!';
-$lang['privacy_stp20'] = 'Tagad jūs zināt, kā privāti saglabāt savas fotogrāfijas, bet jūs var interesēt, kā aizsargāt savus publiskos foto. Vispirms Jūs varētu apsvērt bloķēt apmeklētāju lejupielādes: bet to jūs nevarat, jo tā ir izveidots internets (apmeklētāja izmantotais pārlūks lejupielādē visus attēlotos resursus un vēl vairāk). Peles labā taustiņa klikšķa darbību var bloķēt, var ielikt tukšu slāni virsū foto utt, bet tas nevar atslēgt lejupielādi. Ar jebkuru interneta pārlūku var lejupielādēt un saglabāt visu interneta lapu pilnībā.';
-$lang['privacy_stp17'] = 'Piwigo grupa ir tikai lietotāju kopa: tāpēc ar grupām vieglāk pārvaldīt albumu atļaujas un arī pārvaldīt lietotāju īpašības. Šeit ir lapa, kurā jūs varat pārvaldīt grupas, t.i, pārdēvēt, apvienot, dublēt, izdzēst tās. Jūs varat arī iestatīt vienu vai vairākas grupas, kā "noklusējuma grupa", kas nozīmē, ka no jauna reģistrētie lietotāji būs piesaistīti šīm noklusējuma grupām.';
-$lang['privacy_stp4'] = 'Tātad mums ir divas shēmas, lai pārvaldītu piekļuves atļaujas fotogrāfijām. Tās ir neatkarīgas, jūs varat izveidot grupu Family, bet šai grupai nav nekāda sakara ar privātuma līmeni Family. <br><br> Privātuma līmeņitiek piem;eroti katram foto un grupu/lietotāja atļaujas piemēro katram albūmam. Jūs varat izmantot abas vai tikai vienu shēmu, tas ir fleksibli. <br><br> Nākamā Cilne ir par grupu pārvaldību.';
-$lang['privacy_stp22'] = '<em>Pieredzējušiem lietotājiem </em><br><br>Piwigo varat aizsargāt savas oriģinālās fotogrāfijas, izmantojot savu vietējo konfigurāciju. Izmantojiet mainīgo $conf [\'original_url_protection\']: kas pēc noklusējuma ir tukšs, iestatat vērtību "images", lai aizsargātu tikai fotogrāfijas vai "all", lai aizsargātu visu mediju veidu, kas var būt resursietilpīgi vai vienkārši var nedarboties uz jūsu servera. <br><br> Šī iespēja darbojas ar publisko un privāto saturu. Šī opcija patlaban prasa lai jūs liegtu pieeju folders/upload un /galleries, izmantojot htaccess failu (parasti teksta fails ar "Deny from all" saturam) vai servera konfigurāciju. <br><br> Lūdzu ņemiet vērā, ka failu nosaukumi augšupielādētajiem foto, izmantojot no FTP atšķirīgu metodi ir <b>gadījuma rakstura</b>, tā kā tos nav neiespējams uzminēt: tas faila nosaukums un ceļš uz oriģinālo foto var būt zināms tikai tad, ja apmeklētājam ir pieeja attēla izmainītajai versijai,piemēram, sīktēlam. $conf [\'original_url_protection\'] un liedzot piekļuvi mapēm /upload un /galleries ir domāts, lai izvairītos no šī varianta.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/nb_NO/description.txt b/plugins/TakeATour/language/nb_NO/description.txt
deleted file mode 100755
index dd60ba4ed..000000000
--- a/plugins/TakeATour/language/nb_NO/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Besøk din Piwigo å oppdag dens funksjoner. Dette tillegsprogramet har flere tematiske omvisninger, for nybegynnere og avanserte brukere. \ No newline at end of file
diff --git a/plugins/TakeATour/language/nb_NO/index.php b/plugins/TakeATour/language/nb_NO/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/nb_NO/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/nb_NO/plugin.lang.php b/plugins/TakeATour/language/nb_NO/plugin.lang.php
deleted file mode 100755
index f08c63fad..000000000
--- a/plugins/TakeATour/language/nb_NO/plugin.lang.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['2.7 Tour'] = '2.7 Omvisning';
-$lang['2_7_0_descrp'] = 'Se hva som er nytt i Piwigo 2.7';
-$lang['End tour'] = 'Avslutt omvisning';
-$lang['First Contact'] = 'Første kontakt';
-$lang['Next '] = 'Neste';
-$lang['Prev'] = 'Forrige';
-$lang['Privacy'] = 'Privat';
-$lang['Start the Tour'] = 'Start omvinsning';
-$lang['Visit your Piwigo!'] = 'Besøk din Piwigo!';
-$lang['takeatour_configpage'] = 'Ta en Omvisning » Liste over Omvisninger';
-$lang['privacy_descrp'] = 'Denne omvisningen presenterer alle måter å beskytte dine bilder fra offentligheten med tillatelser per album og per bilde, og fra å kopiere ved hjelp av bilde beskyttelse.';
-$lang['first_contact_descrp'] = 'Anbefales for nybegynnere, denne omvisningen inntroduserer deg for Piwigo og dens grunnleggende funksjoner. Den vil starte med å vise deg hvordan legge til bilder og administrere de. Omvisningen forsetter med album administrasjon og slutter med tilpasning ved å bruke innstillinger, temaer og tillegsprogrammer.';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Ta en omvisning og oppdag alle funksjonene i ditt Piwigo galleri » Gå til tilgjengelige omvisninger';
-$lang['TAT_descrp'] = 'Velkommen! Her er en liste over alle tilgjengelige omvisninger som vil hjelpe deg å oppdage funksjonene i ditt Piwigo galleri.<br><br> Start en omvisning nedenfor, følg deretter instruksjonene. Klikk på Neste/Forrige (eller bruk pilene på tastaturet) for å navigere i løpet av omvisningen. Mens du holder på med en omvisning og går til en annen side i administrasjonen, vil du bli omdirigert til den gjeldende siden i omvisningen. Hvis du står fast og ikke klarer å avslutte omvisningen, gå til <em> Tillegsprogrammer »Ta en omvisning </em> dette vil avslutte omvisningen.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/nb_NO/tour_2_7_0.lang.php b/plugins/TakeATour/language/nb_NO/tour_2_7_0.lang.php
deleted file mode 100755
index 181eaffc9..000000000
--- a/plugins/TakeATour/language/nb_NO/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['2_7_0_stp2'] = 'Som du kan se, har det blitt lagt til et nytt standard tillegsprogram: Ta en Omvisning. Dette tillegsprogrammet hjelper deg å finne mer ut av din Piwigo. Her er det en listet med alle tilgjengelige omvisninger. Denne siden er tilgjengelig under Tillegsprogrammer » Ta en omvisning';
-$lang['2_7_0_stp11'] = 'Denne omvisningen er over. <p style="text-align:center"> Nyt Piwigo 2.7!</p>Hvis du liker Piwigo og ønsker å støtte oss, kan du bidra ved å hjelpe med oversettelser, donere, etc. <a href="http://piwigo.org/basics/contribute" target="_blank"> Klikk her for å støtte oss </a> Takk!';
-$lang['2_7_0_stp10'] = 'Et filter på filstørrelse har også blitt lagt til batch behandler. Du kan velge et område med et minimum og maksimum verdi.';
-$lang['2_7_0_stp1'] = 'Hei! Jeg vil være din guide på denne omvisningen når du skal oppdage Piwigo. Følg mine instruksjoner, og klikk på Neste (eller bruk pilene på tastaturet) for å navigere. Hvis du går til en annen side, vil du bli omdirigert til den gjeldende siden av omvisningen.';
-$lang['2_7_0_title9'] = 'Søke filter';
-$lang['2_7_0_title8'] = 'Tøm din kurv';
-$lang['2_7_0_title6'] = 'Velg bokser';
-$lang['2_7_0_title7'] = 'Sorter albumer etter dato';
-$lang['2_7_0_title5'] = 'Tid';
-$lang['2_7_0_title4'] = 'Søke side';
-$lang['2_7_0_title2b'] = 'Nytt opplasting skjema';
-$lang['2_7_0_title2'] = 'Først ny funksjon';
-$lang['2_7_0_title11'] = 'Ser deg senere!';
-$lang['2_7_0_title10'] = 'Fil størrelses filter';
-$lang['2_7_0_title1'] = 'Velkommen til Piwigo 2.7';
-$lang['2_7_0_stp9'] = 'Et søke filter har blitt lagt til batch behandler. Den har en kraftig syntaks for å søke etter bilder på datoer, taggs, størrelse, filnavn og også et søke alternative som eksakt match, OG/ELLER, gruppering, utelukkelse. Du kan lese detaljert hjelp senere. Den samme syntaks finner du ogå under raskt søk-feltet under menyen på den offentlig siden.';
-$lang['2_7_0_stp8'] = 'Enkel handlings link for å tømme kurven med bare ett klikk.';
-$lang['2_7_0_stp7'] = 'Nå kan du sortere dine albumer basert på bildenes opprettelsesdato eller postet dato';
-$lang['2_7_0_stp6'] = 'Boksen for å velge album,koder etc er endret til en mere brukervennlig. Test det nedenfor';
-$lang['2_7_0_stp5'] = 'Du kan stille inn tiden i tillegg til dato, ved hjelp av time og minutt glidere';
-$lang['2_7_0_stp4'] = 'Søke siden er omarbeidet: muligheten til å velge egenskaper der ordsøk gjelder, liste over forfattere som finnes i databasen, autofullfør-listen over koder, autofullfør-listen over albumer.';
-$lang['2_7_0_stp2b'] = 'Det nye opplastingsskjemaet i Piwigo 2.7 er basert på HTML5 i stedet for Flash, dette betyr en bedre kompatibilitet med moderne nettlesere samt en økt pålitelighet på trege nettforbindelser. Og en dra & slipp funksjon vil gjøre bilde utvalget mye lettere fra din filbehandler!'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/nb_NO/tour_first_contact.lang.php b/plugins/TakeATour/language/nb_NO/tour_first_contact.lang.php
deleted file mode 100755
index f9fa9aca3..000000000
--- a/plugins/TakeATour/language/nb_NO/tour_first_contact.lang.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['first_contact_stp41'] = 'På den siste fanen kan du se alle tilgjengelige tilleggsprogramer for din versjon av Piwigo. Flere hundre tillegsprogrammer finnes!';
-$lang['first_contact_stp40'] = 'Det er meg her! Ikke deaktivere meg nå, men du kan se at du kan Deaktivere eller Gjenopprett et aktivert tillegsprogram.';
-$lang['first_contact_stp4'] = 'Først velger du et album; opprette et hvis det ikke er noen album ennå.';
-$lang['first_contact_stp39'] = 'På den første siden, er alle tillegsprogrammene oppført.<br><br>Øverst, er alle tillegsprogrammene som er aktivert oppført, og som i dag kjører.<br><br>Nederst, er alle tillegsprogrammer som er installert i /tillegsprogram mappen, men deaktivert.<br><br> Å slette et tillegsprogram betyr at alle spor av programtillegget vil bli fjernet (filer, opsjoner etc). For de fleste av tillegsprogrammene, vil en deaktivering beholde dataene som er registrert av tillegsprogrammet.';
-$lang['first_contact_stp38'] = 'Bruk av tillegsprogrammer er en svært enkle måter å tilpasse din Piwigo. De kan gjøre nesten alt du kan tenke deg fra små tekst tillegg til å fullføre funksjoner, som tillegsprogrammet Fellesskapet som lar ikke-administrator brukere å laste opp uten å ta del i administrasjonen.';
-$lang['first_contact_stp37'] = 'Hvordan installere nye temaer, du kan direkte laste dem ned fra kategorien \'Legg til et tema\'. Bare temaene merket som kompatibel med din versjon av Piwigo vises.<br><br>La oss nå utforske tillegsprogrammer! Klikk på <em>Tillegsprogrammer »Behandle</em>';
-$lang['first_contact_stp35'] = 'Sett din favoritt tema som standard tema.';
-$lang['first_contact_stp34'] = 'Velge et tema er det første skrittet for å tilpasse Piwigo. Temaer som er installert, er oppført her<br>Mer enn ett tema kan aktiveres: brukere kan endre sitt tema ved å velge et blant de som er aktiverte her, hvis alternativet \'Godkjenn brukers egne innstillinger\' er krysset av på alternativ siden.';
-$lang['first_contact_stp32'] = 'Lagre endringen nå';
-$lang['first_contact_stp33'] = 'Bare et siste ord om alternativene, denne \'Gjeste innstillinger\' siden har som oppgave å sette preferansene til uregistrerte besøkende. Hver gang Piwigo refererer til "gjest" som betyr uregistrerte besøkende.<br>La oss fortsette med Konfigurasjon: Klikk på <em> Konfigurasjon »Temaer</em> eller bare trykke Neste.';
-$lang['first_contact_stp31'] = 'Så banneren, som vil bli vist på toppen av hver side. Som du kan se, er HTML-tagger tillatt her. Du kan også bruke% galleri_tittel% tag for å vise tittelen du nettopp har skrevet ovenfor.';
-$lang['first_contact_stp30'] = 'La oss starte med å endre på tittelen';
-$lang['first_contact_title15'] = 'Redigerings siden til et bilde';
-$lang['first_contact_title18'] = 'Behandle album';
-$lang['first_contact_title19'] = 'Behandle Album';
-$lang['first_contact_title20'] = 'Behandle Album';
-$lang['first_contact_title21'] = 'Andre Faner';
-$lang['first_contact_title22'] = 'Redigerings Siden til et Album';
-$lang['first_contact_title28'] = 'Innstillinger';
-$lang['first_contact_title29'] = '<em>Innstillinger » alternativer » Generelt</em>';
-$lang['first_contact_title3'] = 'Legg til en Bilde Side';
-$lang['first_contact_title33'] = 'Gjeste innstillinger';
-$lang['first_contact_title34'] = 'Tema';
-$lang['first_contact_title35'] = 'Tema';
-$lang['first_contact_title37'] = 'Tema';
-$lang['first_contact_title38'] = 'Tillegsprogrammer';
-$lang['first_contact_title39'] = 'Tillegsprogrammer';
-$lang['first_contact_title4'] = 'La oss legge til et bilde!';
-$lang['first_contact_title43'] = 'Det har vært en flott tid';
-$lang['first_contact_title9'] = 'Batch Behandler';
-$lang['first_contact_stp3'] = 'Denne første kategorien er der du legger til bilder direkte fra nettleseren. Den andre kategoriene er om de andre måtene å laste opp bilder på';
-$lang['first_contact_stp29'] = 'Her, på den første siden, kan du sette avgjørende og grunnleggende innstillinger i galleriet.';
-$lang['first_contact_stp28'] = 'Nå vil vi se på de mulighetene som er tilgjengelig for å få Piwigo til å virke slik du ønsker. Klikk på Konfigurasjon->Alternativer eller bare trykke Neste.';
-$lang['first_contact_stp23'] = 'Låse et album betyr at bare administratorer vil være i stand til å se dette albumet: svært nyttig når du forbereder albumet før publisering';
-$lang['first_contact_stp22'] = 'Som for et bilde, kan du her redigere egenskapene til et album';
-$lang['first_contact_stp21'] = 'Den neste fanen er en side hvor du kan flytte de virtuelle album.<br> I permalink fanen kan du lage en bestemt url for et album.<br> Men la oss nå redigere et album: Klikk på Behandle et album';
-$lang['first_contact_stp20'] = 'Når musen holdes over et album, vises lenker og informasjon. Når du drar og slipper et album (- en avrundet ramme -), vil du kunne endre manuell rekkefølg og deretter kan du lagre eller avbryte den manuelle rekkefølgen.';
-$lang['first_contact_stp2'] = 'Linken er her. Klikk på den eller klikk neste for å forsette';
-$lang['first_contact_stp19_b'] = 'Her er en liste over \'root\' albumer.';
-$lang['first_contact_stp19'] = 'Her er en listet over "root" albumer. Hvis du ser et album med en stiplet bakgrunn, betyr dette at det er et fysisk album fra en FTP-synkronisering. Fysiske albumer kan ikke flyttes eller slettes herfra. De andre albumene kalles virtuelle albumer.';
-$lang['first_contact_stp1'] = 'Hei! Jeg vil være din guide på denne omvisningen når du skal oppdage Piwigo. Følg mine instruksjoner, og klikk på Neste (eller bruk pilene på tastaturet) for å navigere. Hvis du går til en annen side i administrasjonen, vil du bli omdirigert til den gjeldende siden av omvisningen. Hvis du står fast og kan ikke avslutte turen, gå til <em> Tillegsprogrammer »ta en omvisning </ em> dette vil avslutte omvisningen. <br> La oss begynne med å legge til bilder!';
-$lang['first_contact_stp18'] = 'La oss nå se hvordan man behandler albumer. Klikk<em> På album »Behandle</em> eller klikk Neste';
-$lang['first_contact_stp17'] = 'Her kan du velge bildet som skal være miniatyrbilde til en eller flere albumer. Bildet trenger ikke å være assosiert med albumet for å være albumets miniatyrbilde. Dersom bildet er assosiert med albumet, er det enda enklere å angi det som albums miniatyrbilde fra den offentlig siden til bildet (tips: bruk tillegsprogrammet Admin Verktøy for å gjøre dette enklere).';
-$lang['first_contact_stp16'] = '...i hvilket album (er) er bildet.<br><br>Så her kan du legge til eller fjerne et bilde fra albumer. Koblingen er virtuell, ingen bilder vil fysisk bli flyttet noensinne.';
-$lang['first_contact_stp11'] = 'Herfra kan du velge ett eller flere bilder';
-$lang['first_contact_stp12'] = 'deretter redigere dem ved hjelp av et tiltak';
-$lang['first_contact_stp13'] = 'Du kan redigere beskrivelser og mer fra batch behandler i singel modus. Men for nå, la oss bli i global modus';
-$lang['first_contact_stp14'] = 'Nå vil vi se på <b> redigerings siden </ b> til ett bilde. Denne siden er tilgjengelig herfra, men også fra den offentlige fotoside når du er pålogget som administrator.<br><br>Merk miniatyrbildet og klikk deretter på endre.';
-$lang['first_contact_stp15'] = 'På denne siden kan du endre alle egenskapene til et bilde, for eksempel...';
-$lang['first_contact_stp10'] = 'Her er en link som gir deg direkte tilgang til din kurv: dette er et verktøy for administratorer som enkelt kan velge bilder når de surfer på den offentlige delen og ønsker å redigere bildene i Batch Behandler. <br><br> Du kan legge til bilder i kurven fra den offentlige fotoside når du er logget på som administrator, eller ved hjelp av handlingen "Legg til i kurv" i Batch Behandler.';
-$lang['first_contact_stp43'] = 'Denne turen var ganske lang, men vi har bare sett en liten del av hvor kraftig Piwigo er. Alt har en slutt, denne oversikten er ferdig.<br><br>Du kan undersøke funksjonene i Piwigo nærmere ved å ta en annen tur eller lese vår dokumentasjon, på piwigo.org nettstedet.<br><br>Ikke glem Hjelp-koblingen øverst til høyre på alle administrasjons sider.<p style="text-align:center">Nyt din Piwigo!</p>';
-$lang['first_contact_stp6'] = 'Du ser at bildene blir oppført. Når du er klar klikk på knappen Start Opplastingen';
-$lang['first_contact_stp7'] = 'Her er en oppsummering av de opplastede bildene. Se at Piwigo har selv generert miniatyrbildene. Du kan:<ul><li>administrere alle de opplastede bildene i Batch Behandler</li><li>redigere egenskapene til et bilde ved å klikke på det</li><li>legge til flere bilder</li></ul>';
-$lang['first_contact_stp5'] = 'Deretter klikker du på knappen for å velge bilder å sende, eller bare dra og slipp filene dine.';
-$lang['first_contact_stp9'] = 'Du er nå i Batch Behandler, der du kan batch redigere flere bilder.<br><br>Her er forfilteret allerede satt på "Kurven" fordi vi kommer fra opplastingssiden.';
-$lang['first_contact_stp8'] = 'La oss redigere dem! Klikk på linken.';
-$lang['first_contact_title1'] = 'Velkommen til ditt Piwigo galleri';
-$lang['first_contact_title11'] = 'Hvordan redigere et bilde'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/nb_NO/tour_privacy.lang.php b/plugins/TakeATour/language/nb_NO/tour_privacy.lang.php
deleted file mode 100755
index 5ded306a9..000000000
--- a/plugins/TakeATour/language/nb_NO/tour_privacy.lang.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['privacy_stp9'] = '...og velg et tiltak "Hvem kan se disse bildene?". Nå kan du endre personvernnivå på de valgte bildene.<br><br> Men du kan også gjøre det for et bestemt bilde, på sin redigerings side. Du kan få tilgang til det fra den offentlige delen, eller herfra.<br><br>Nå vil jeg vise deg den andre måten på tillatelse per album basert på grupper og brukere.';
-$lang['privacy_stp8'] = 'Velg ett eller flere bilder...';
-$lang['privacy_stp7'] = '... eller du kan gjøre det senere, her i Batch Behandler i Global Modus.<br><br>Dette er siden <em>Bilder »Siste bilder</em>, så filteret"Siste import" blir satt.';
-$lang['privacy_title6'] = 'Personvern Nivå ';
-$lang['privacy_title7'] = 'Personvern Nivå';
-$lang['privacy_title8'] = 'Personvern Nivå';
-$lang['privacy_title9'] = 'Personvern Nivå';
-$lang['privacy_stp6'] = 'Når du laster opp bildene, kan du endre personvernnivået på de opplastede bildene med det samme...';
-$lang['privacy_stp5'] = 'Nedenfor er det forklart hvordan du kan administrere grupper. <br>Disse tillatelser er bare for tilgangen av bildene og albumene, når du surfer på den offentlige delen eller for de eksterne applikasjoner. Vi vil senere se andre beskyttelser, men la oss nå øve!';
-$lang['privacy_stp4'] = 'Vi har altså to systemer for administrere tilgangs tillatelser til bildene. De er uavhengige, slik at du kan opprette en gruppe som heter Familie, men denne gruppen har ingenting å gjøre med personvernnivå Familie.<br><br>Personvernnivået blir anvendt på hvert bilde, og gruppe/brukertillatelser anvendes på hvert album. Du kan bruke begge eller bare ett system, det er fleksibelt.<br><br>Neste kategori er om gruppe behandling.';
-$lang['privacy_stp3'] = 'Ta deg tid til å lese informasjonen nedenfor.';
-$lang['privacy_stp24'] = 'Denne turen er over.<p style="text-align:center">Nyt Din Piwigo!</p>Hvis du liker Piwigo og ønsker å støtte oss, kan du bidra ved å hjelpe med oversettelser, donere, etc. <a href="http://piwigo.org/basics/contribute" target="_blank">Klikk her for å støtte oss</a>. Takk!';
-$lang['privacy_stp22'] = '<em> For avanserte brukere</em><br><br> I Piwigo, kan du beskytte det originale bilde ved hjelp av din lokale innstillinger. Bruk variabelen $conf[\'original_url_protection\']: denne er tom som standard, setter du verdien til "bilder" beskytter du bare bilder eller setter du til "alle" som da beskytter alle typer medier, dette kan være meget ressurs krevende eller kanskje det bare ikke vil virke på serveren din. <br> Dette alternativet fungerer for offentlig og privat innhold. Det krever at du nekter adgang til mapper/opplasting og /gallerier, ved bruk av en .htaccess-fil (vanligvis en tekstfil med "Ingen adgang" til dette innhold) eller serverinnstillinger.<br><br> Vennligst vær oppmerksom på at filnavnene til bilder lastet opp med andre metoden enn FTP blir<b><b>blandet</b>, slik at det er umulig å gjette. Filnavnet, og banen til det originale bildet kun kan bli kjent hvis den besøkende har tilgang til en skalert versjon av bildet, som f.eks miniatyrbilde. $conf[\'original_url_protection\']Altså å nekte tilgang til mapper/opplasting og /gallerier er meningen å unngå i dette tilfelle.';
-$lang['privacy_stp21'] = 'Løsningen er:.<Ul><li>sette inn et vannmerke, i hvert fall på medium og høyt definerte bilder,</li><li> deaktivere XL og XXL størrelser.</li><li>Og deaktivere Høy Definisjon (nedlasting og visning av det originale bildet) for de berørte brukere.';
-$lang['privacy_stp20'] = 'Nå vet du hvordan du skal holde bildene dine private, men du lurer kanskje på hvordan du kan beskytte dine offentlige bilder. Du kan først tenke på å blokkere den besøkende til å laste ned bilder: det kan du ikke, fordi nettet har blitt skapt på den måten (nettleseren til den besøkende laste ned alle ressursene som vises og mere til). Høyreklikk kan deaktiveres, et tomt lag kan legges på toppen av bildet osv, men det vil ikke deaktivere nedlastingen. Fullstendige nettsider kan bli lagret av hvilken som helst nettleser.';
-$lang['privacy_stp2'] = 'Her kan du få tilgang til den integrerte Hjelp. Klikk Neste for å fortsette direkte til hjelpesiden som omhandler behandling av Rettigheter';
-$lang['privacy_stp19'] = 'Her kan du raskt redigere en enkelt bruker ved å peke på navnet og så klikke på Redigere.<br><br> Du kan velge flere brukere og redigere dem på en gang ved deretter å velge et tiltak som skal gjelde.';
-$lang['privacy_stp17'] = 'En gruppe i Piwigo er bare et sett med brukere: så grupper gjør det enklere å administrere album tillatelser, og å administrere brukeregenskaper. Her er siden hvor du kan behandle grupper, dvs. endre navn, flette, kopiere, slette dem. Du kan også lagre en eller flere grupper som "standardgruppe" som betyr at nyregistrerte brukere vil bli knytte til disse standardgrupper.';
-$lang['privacy_stp18'] = 'For å administrere assosiasjoner mellom brukere til grupper, gå til<em> Brukere »Behandle</em> siden';
-$lang['privacy_stp16'] = 'Som på datamaskinen, kan du velge flere album med tastene Shift og Control, klikk deretter på pilene for å bytte mellom Privat og Offentlig.<br><br>Nå,la meg presentere gruppene.';
-$lang['privacy_stp15'] = 'Før vi går i gang med å forklare grupper, her er et pro tips: her er linken til en side der du kan sette privat/offentlig tillatelse til flere albumer på en gang. Klikk på den';
-$lang['privacy_stp14b'] = 'Viktig faktum: på offentlige sider, gjelder tillatelser for webmastere og administratorer som for andre brukere. I administrasjonen, har de tilgang til alle album eller bilder.';
-$lang['privacy_stp13'] = 'Nå klikk på Privat';
-$lang['privacy_stp14'] = 'Her kan brukere eller grupper av brukere gis tilatelse for å få tilgang til albumet.';
-$lang['privacy_stp12'] = 'På den siden kan du velge om albumet vil være tilgjengelig for alle, eller kun for noen begrenset brukere';
-$lang['privacy_stp11'] = 'Nå klikk på fanen Tillatelser';
-$lang['privacy_stp10'] = 'Vi er i Album listens administrasjon som er tilgjengelig fra menyen ved å klikke<em> Album »Behandle</em><br><br>Rediger albumet ved å holde musen over den, og klikk deretter på Endre.';
-$lang['privacy_stp1'] = 'Hei! Jeg vil være din guide som viser deg hvordan du kan beskytte dine bilder i Piwigo. Følg mine instruksjoner, og klikk på Neste (eller bruk pilene på tastaturet) for å navigere. Hvis du går til en annen side i administrasjonen, vil du bli omdirigert til den gjeldende siden av omvisningen. Hvis du står fast og ikke kan avslutte turen, gå til <em>Tillegsprogrammer »ta en omvisning</ em> dette vil avslutte omvisningen. <br> La oss begynne!';
-$lang['privacy_title1'] = 'Velkommen til personvern omvisning';
-$lang['privacy_title10'] = 'Album tillatelser';
-$lang['privacy_title11'] = 'Album tillatelser';
-$lang['privacy_title12'] = 'Album tillatelser';
-$lang['privacy_title15'] = 'Tips';
-$lang['privacy_title17'] = 'Grupper';
-$lang['privacy_title18'] = 'Grupper';
-$lang['privacy_title19'] = 'Bruker';
-$lang['privacy_title2'] = 'Hjelp inni din Piwigo';
-$lang['privacy_title20'] = 'Offentlige bilder';
-$lang['privacy_title21'] = 'Offentlige bilder';
-$lang['privacy_title22'] = 'Lokal Innstilling: Original beskyttelse';
-$lang['privacy_title24'] = 'Det har vært en flott tid';
-$lang['privacy_title3'] = 'Tillatelser';
-$lang['privacy_title4'] = 'Tillatelser';
-$lang['privacy_title5'] = 'Tillatelser> Grupper'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/nl_NL/description.txt b/plugins/TakeATour/language/nl_NL/description.txt
deleted file mode 100755
index 753a3a588..000000000
--- a/plugins/TakeATour/language/nl_NL/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Ga naar Piwigo en ontdek de mogelijkheden. Deze plugin biedt meerdere thematische rondleidingen zowel voor beginners als gevorderden. \ No newline at end of file
diff --git a/plugins/TakeATour/language/nl_NL/index.php b/plugins/TakeATour/language/nl_NL/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/nl_NL/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/nl_NL/plugin.lang.php b/plugins/TakeATour/language/nl_NL/plugin.lang.php
deleted file mode 100755
index 78f40ed3c..000000000
--- a/plugins/TakeATour/language/nl_NL/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Neem een ​​rondleiding en ontdek de mogelijkheden van uw Piwigo galerie » Ga nu naar de beschikbare rondleidingen. ';
-$lang['takeatour_configpage'] = 'Neem een rondleiding » Lijst van rondleidingen';
-$lang['Visit your Piwigo!'] = 'Bezoek uw Piwigo!';
-$lang['Start the Tour'] = 'Start de rondleiding';
-$lang['Prev'] = 'Vorige';
-$lang['Next '] = 'Volgende';
-$lang['End tour'] = 'Einde rondleiding';
-$lang['TAT_descrp'] = 'Welkom! Hier vindt u alle beschikbare rondleidingen om de mogelijkheden van uw Piwigo galerie te ontdekken.<br>Start een rondleiding hieronder en volg hierna de instructies. Klik Volgende/Vorige (of gebruik de pijltjes van uw toetsenbord) om door de rondleiding te navigeren. Als u tijdens de rondleiding naar een andere pagina van de administratie gaat, wordt u doorgestuurd naar de huidige pagina van de Rondleiding. Als u vast komt te zitten en de rondleiding niet kunt afronden gaat u naar <em>Plugins >> Neem een Rondleiding</em>. Hiermee beëindigt u de rondleiding.';
-
-$lang['First Contact'] = 'Eerste contact';
-$lang['first_contact_descrp'] = 'Aanbevolen voor beginnelingen: deze rondleiding is een introductie tot Piwigo and zijn basismogelijkheden. Het begint bij het toevoegen van foto\'s en vervolgt met het beheer ervan. De rondleiding gaat verder met het beheren van albums en toestemmingen. Het eindigt met het naar eigen wensen aanpassen met behulp van de configuratie, de thema\'s en de plugins.';
-
-$lang['2.7 Tour'] = '2.7 rondleiding';
-$lang['2_7_0_descrp'] = 'Ontdek wat er nieuw is in Piwigo 2.7';
-
-$lang['privacy_descrp'] = 'Deze rondleiding toont alle manieren om je foto te beschermen tegen openbare toegang met behulp van toestemmingssytemen per album en per afbeelding. En ook tegen kopiëren door middel van afbeeldingsbescherming.';
-$lang['Privacy'] = 'Privé'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/nl_NL/tour_2_7_0.lang.php b/plugins/TakeATour/language/nl_NL/tour_2_7_0.lang.php
deleted file mode 100644
index 46d757719..000000000
--- a/plugins/TakeATour/language/nl_NL/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_stp4'] = 'Een aantal items in de Zoek-pagina zijn bewerkt zoals: een selectie van zoekwoord-eigenschappen, een auteurslijst in de database, een zelf-aanvullende lijst van tags, van albums ...';
-$lang['2_7_0_stp5'] = 'U kunt de tijd toevoegen aan de datum met behulp van uur- en minuut-schuifjes.';
-$lang['2_7_0_stp6'] = 'Het selectiescript voor selecteren van albums, labels/tags etc is veranderd naar een nieuwe, meer gebruikersvriendelijke versie. Test het hier beneden.';
-$lang['2_7_0_title4'] = 'Zoekpagina';
-$lang['2_7_0_title5'] = 'Tijd';
-$lang['2_7_0_title6'] = 'Selecteer script';
-$lang['2_7_0_stp2'] = 'Zoals u kunt zien, is er een nieuwe standaard plugin toegevoegd: Neem een rondleiding. Deze plugin helpt u om uw Piwigo te ontdekken. Hier is een lijst met alle beschikbare rondleidingen.<br>Deze pagina is beschikbaar in<em>Plugins » Neem een rondleiding</em>';
-$lang['2_7_0_stp11'] = 'Deze rondleiding is voorbij.<p Style="text-align:center"> Geniet van uw Piwigo 2.7!</P>Als Piwigo u bevalt en ons wilt ondersteunen, kunt u een bijdrage leveren door te helpen met de vertalingen, te doneren, et cetera.<a href="http://piwigo.org/basics/contribute"target="_blank">Klik hier om ons te ondersteunen</a>';
-$lang['2_7_0_stp1'] = 'Hallo! Ik zal uw gids zijn om Piwigo te ontdekken. Volg mijn instructies en klik op "Volgende" (of gebruik de pijltjestoetsen van uw toetsenbord) om te navigeren. Als u naar een andere pagina gaat, wordt u doorgestuurd naar de huidige pagina van de rondleiding.';
-$lang['2_7_0_title2'] = 'Eerste nieuwe functie';
-$lang['2_7_0_title11'] = 'Tot ziens!';
-$lang['2_7_0_title1'] = 'Welkom bij Piwigo 2.7';
-$lang['2_7_0_stp10'] = 'Een filter voor bestands-groottes is ook toegevoegd aan de bundel manager (batch manager). Je kan een bereik van een minimum en maximum waarde selecteren.';
-$lang['2_7_0_title10'] = 'Bestands-grootte filter';
-$lang['2_7_0_stp2b'] = 'Het nieuwe uploadformulier in Piwigo 2.7 is gebaseerd op HTML5 in plaats van op Flash. Dit betekent een betere compatibiliteit met moderne webbrowsers en een verbeterde betrouwbaarheid bij langzame verbindingen. Door Drag & drop (slepen en neerzetten) kunt u in uw webbrowser veel gemakkelijker een fotoselectie maken!';
-$lang['2_7_0_stp7'] = 'U kunt nu uw albums sorteren uitgaande van de aanmaakdatum of de plaatsingsdatum van de foto\'s';
-$lang['2_7_0_stp8'] = 'Een makkelijke actie-link om uw winkelwagentje met maar één klik leeg te maken.';
-$lang['2_7_0_stp9'] = 'Aan de batch manager is een zoekfilter toegevoegd. Deze zoekfilter kent een krachtige syntax om te zoeken naar foto\'s op datums, labels/tags, grootte, bestandsnaam, maar u kunt nu ook zoeken met opties zoals exacte match, EN/OF, groepering en uitsluiting. U kunt de gedetailleerde hulp later lezen. Dezelfde syntax is van toepassing op het "snelle zoeken" veld in het gebruikersmenu.';
-$lang['2_7_0_title2b'] = 'Nieuw uploadformulier';
-$lang['2_7_0_title7'] = 'Sorteer albums op datum';
-$lang['2_7_0_title8'] = 'Maak uw winkelwagentje leeg';
-$lang['2_7_0_title9'] = 'Zoekfilter'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/nl_NL/tour_first_contact.lang.php b/plugins/TakeATour/language/nl_NL/tour_first_contact.lang.php
deleted file mode 100644
index 46be53e42..000000000
--- a/plugins/TakeATour/language/nl_NL/tour_first_contact.lang.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_stp29'] = 'Hier op die eerste pagina, vindt u de essentiële en basisconfiguratie voor de instellingen van uw galerie.';
-$lang['first_contact_stp28'] = 'Nu zullen we naar de instellingen en opties die beschikbaar zijn voor Piwigo kijken, waar jij mee wilt gaan werken. Klik op Configuratie->Opties of klik op Volgende.';
-$lang['first_contact_stp41'] = 'Je kunt zien op het laatste tabblad, welke plugins beschikbaar zijn voor uw versie van Piwigo. Er zijn meer dan 100 plugins beschikbaar!';
-$lang['first_contact_stp40'] = 'Ik ben het! Schakel mij nu niet uit, maar je kunt hier zien, dat je een geactiveerde plugin, in en uit kunt schakelen.';
-$lang['first_contact_title22'] = 'Album Editie Pagina';
-$lang['first_contact_stp15'] = 'Op die pagina kunt u alle eigenschappen van een foto te bewerken, bijvoorbeeld ...';
-$lang['first_contact_stp11'] = 'Zo kunt u hiervandaan een of meerdere foto\'s selecteren.';
-$lang['first_contact_stp2'] = 'De link is hier. Klik op "Volgende" om door te gaan';
-$lang['first_contact_title4'] = 'Laten we een foto toevoegen!';
-$lang['first_contact_stp4'] = 'Kies eerst een album en maak er een, als die nog niet bestaat.';
-$lang['first_contact_stp32'] = 'Bewaar nu uw wijzigingen';
-$lang['first_contact_stp30'] = 'Laten we beginnen met het veranderen van de tittel';
-$lang['first_contact_title38'] = 'Plugins';
-$lang['first_contact_title39'] = 'Plugins';
-$lang['first_contact_title43'] = 'Het was een geweldige tijd';
-$lang['first_contact_title9'] = 'De Batch Manager';
-$lang['first_contact_title34'] = 'Themes';
-$lang['first_contact_title35'] = 'Themes';
-$lang['first_contact_title37'] = 'Themes';
-$lang['first_contact_title33'] = 'Gastgebruikersinstellingen';
-$lang['first_contact_title3'] = 'Foto toevoegen pagina';
-$lang['first_contact_title29'] = 'Configuratie->Opties->Algemeen';
-$lang['first_contact_title28'] = 'Configuratie';
-$lang['first_contact_title15'] = '?';
-$lang['first_contact_title21'] = 'Andere tabbladen';
-$lang['first_contact_title20'] = 'Albums beheren';
-$lang['first_contact_title19'] = 'Albums beheren';
-$lang['first_contact_title18'] = 'Albums beheren';
-$lang['first_contact_title11'] = 'Hoe je een foto kunt bewerken';
-$lang['first_contact_title1'] = 'Welkom in uw Piwigo galerie';
-$lang['first_contact_stp31'] = 'Dan zal de banner bovenaan op elke pagina worden weggegeven Zoals u kunt zien, worden HTML tags hier toegestaan​​. U kunt ook de% gallery_title% tag gebruiken om de titel die je net hierboven boven getypt hebt weergegeven.';
-$lang['first_contact_stp14'] = 'We zien nu de bewerkingspagina van één beeld. Deze pagina is toegankelijk vanaf hier, maar ook vanaf de openbare beeldpagina als u ingelogd bent als beheerder. Klik op Bewerken of ga verder.';
-$lang['first_contact_stp13'] = 'Vanuit de Batch Beheerder in "unit" modus kunt u beschrijvingen bewerken en meer. Maar laten we op dit moment in de global modus blijven.';
-$lang['first_contact_stp10'] = 'Hier is de link voor de rechtstreekse toegang tot uw "caddy": een instrument voor beheerders om makkelijk beelden toe te voegen aan een set om ze te bewerken in de Batch Beheerder. U kunt foto\'s toevoegen van de openbare fotopagina aan de "caddy" als u ingelogd bent als Beheerder of gebruik maakt van de actie "Voeg toe aan de "caddy" in de Batch Beheerder.';
-$lang['first_contact_stp1'] = 'Hallo! Ik ben uw gids om Piwigo te ontdekken. Volg mijn instructies en klik op Volgende om te navigeren (of gebruik de pijltjes van uw toetsenbord). Als u tijdens de rondleiding naar een andere pagina van de administratie gaat, wordt u doorgestuurd naar de huidige pagina van de Rondleiding. Als u vast komt te zitten en de rondleiding niet kunt afronden gaat u naar <em>Plugins >> Neem een Rondleiding</em>. Hiermee beëindigt u de rondleiding.<br>Laten we beginnen met het toevoegen van foto\'s!';
-$lang['first_contact_stp3'] = 'Dit eerste tabblad is om foto\'s direct vanuit de browser toe te voegen. Met behulp van de andere tabs kan je andere manieren gebruiken om je foto\'s te uploaden.';
-$lang['first_contact_stp23'] = 'Een gesloten album is een album dat alleen beheerders kunnen bekijken. Het wordt gewoonlijk gebruikt op momenten dat de beheerder bezig is het album te bewerken of het album niet onmiddellijk wil publiceren.';
-$lang['first_contact_stp22'] = 'Hier kan je de eigenschappen van een album bewerken net als van een foto.';
-$lang['first_contact_stp20'] = 'Als je muis over een album komt, verschijnt er informatie en links. Als je het album sleept en loslaat -een blok met afgeronde randen-, verander je het van positie. Vervolgens kan je handmatige volgorde bewaren of de hele actie annuleren.';
-$lang['first_contact_stp16'] = 'hier kan je de foto toevoegen aan of verwijderen uit de albums. De link is virtueel. Er wordt geen enkele foto fysiek verplaatst.';
-$lang['first_contact_stp9'] = 'Je bent nu in de Bulk beheerder. Hier kan je vele plaatjes tegelijk bewerken. Het verzamelmandje is als filter ingesteld, omdat we vanaf de upload pagina komen.';
-$lang['first_contact_stp8'] = 'Laten we ze bewerken! Klik op de link. Als je de link niet ziet, klik dan op Vorige en voeg tenminste 2 foto\'s toe.';
-$lang['first_contact_stp7'] = 'Hier is een samenvatting van je ge-uploade plaatjes. Merk op dat Piwigo uit zichzelf miniaturen heeft gegenereerd. Nu kan je meer foto\'s toevoegen via de link onderaan. Je kan de eigenschappen van een plaatje bewerken door erop te klikken. Je kunt ook klikken op de Bulk Beheerder om je ge-uploade plaatjes te beheren.';
-$lang['first_contact_stp6'] = 'Je kunt hier de lijst met foto\'s zien. Voeg tenminste 2 foto\'s toe en als je hiermee klaar bent klik je op de knop "Start Upload".';
-$lang['first_contact_stp43'] = 'Deze rondleiding was tamelijk lang en we hebben nog maar een klein deel van kracht van Piwigo onder de loep genomen. Maar, aan alles komt een eind en dit overzicht is voltooid.<br>Je kunt meer mogelijkheden van Piwigo ontdekken door een andere rondleiding te kiezen of onze documentatie te lezen op de website: www.piwigo.org.';
-$lang['first_contact_stp39'] = 'Op de eerste pagina staan alle geïnstalleerde plugins. Bovenaan staan de ge-activeerde plugins die op dit moment draaien. Beneden op de pagina staan de plugins die wel zijn geïnstalleerd in de plugins-map, maar uitgeschakeld zijn. Met de verwijdering van een plugin verwijder je alle hiermee verbonden onderdelen (bestanden, opties, etc.). Voor de meeste plugins geldt dat bij uitschakeling ervan de gegevens behouden blijven.';
-$lang['first_contact_stp38'] = 'Plugins vormen een erg makkelijke manier om je Piwigo naar je persoonlijke smaak in te stellen. Ze kunnen bijna alles wat je je maar kunt voorstellen. Van kleine tekstuele toevoegingen tot volledige onderdelen, zoals bv. de Community-plugin die niet-beheerders toestaat om te uploaden zonder naar de beheerderspagina te gaan. ';
-$lang['first_contact_stp37'] = 'Nieuwe thema\'s kan je direct downloaden/installeren via de tab "Nog niet geïnstalleerde thema\'s". Alleen de compatibele thema\'s met jouw Piwigo-versie worden getoond.<br>Laten we nu de Plugins ontdekken! Klik op Plugin->Beheer.';
-$lang['first_contact_stp33'] = 'Nog een laatste opmerking over de mogelijkheden. Op de pagina "Bezoeker/Gast Instellingen" kan je de voorkeuren voor niet-geregistreerde bezoekers instellen. Piwigo verwijst bij niet-geregistreerde bezoekers naar "gast". Laten we de tour vervolgen met de Configuratie: klik op Configuratie->Thema\'s of klik op "Volgende".';
-$lang['first_contact_stp19'] = 'Hier is de lijst met \'root\' albums. Als je een album ziet met gearceerde achtergrond, dan betekent dit dat het gaat om een fysisch album van een FTP synchronisatie. Fysische albums kunnen niet verplaatst of verwijderd worden van hieruit. De andere albums worden virtuele albums genoemd.';
-$lang['first_contact_stp21'] = 'De volgende tab is een pagina naar waar je elk virtiueel album kan verplaatsen<br>De permanente link tab is om een precieze url voor een album te maken.<br>Maar laat ons een album wijzigen: klik op Wijzig een album';
-$lang['first_contact_stp5'] = 'Dan klik de toets om geselecteerde foto\'s te versturen, of sleep en laat je bestanden los.';
-$lang['first_contact_stp35'] = 'Zet uw favoriete thema als standaard thema.';
-$lang['first_contact_stp34'] = 'Een thema kiezen is de eerste stap on jou Piwigo aan te passen Geïnstalleerde themas staan hier weergegeven.<br>Meer dan één thema kan Actief gezet worden: gebruikers kunnen hun thema veranderen, door te kiezen uit de actief gezette themas, als de optie \'Sta gebruiker aanpassingen toe\' aangevinkt is in de Opties pagina.';
-$lang['first_contact_stp19_b'] = 'Hier is de lijst met \'root\' albums.';
-$lang['first_contact_stp18'] = 'Laat ons eens zien hoe we albums kunnen beheren. Klik <em> op Album » Manage</em> of klik Volgende';
-$lang['first_contact_stp17'] = 'Hier kan U een foto aanduiden als thumbnail voor één of meerdere albums. De foto moet niet in hetzelfde album staan om te kunnen dienen als thumbnail. Als de foto deel uitmaakt van het album is het nog eenvoudiger om hem als thumbnail van het album aan te duiden via de publieke pagina van de foto (tip: gebruik de plugin Admin Tools om het nog eenvoudiger te maken).';
-$lang['first_contact_stp12'] = 'dan wijzig hen door een handeling te doen'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/nl_NL/tour_privacy.lang.php b/plugins/TakeATour/language/nl_NL/tour_privacy.lang.php
deleted file mode 100644
index e3a4860d9..000000000
--- a/plugins/TakeATour/language/nl_NL/tour_privacy.lang.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-$lang['privacy_stp11'] = 'Klik nu op het tabblad Toestemming.';
-$lang['privacy_stp10'] = 'We zijn hier in het Beheer van de Albumlijst via het menu-item <em>Albums>>Beheer</em>.<br><br>Voor het bewerken van een album plaats je je muis op Bewerken en klik erop.';
-$lang['privacy_stp1'] = 'Hallo! Ik ben je gids om te ontdekken hoe je je foto\'s kunt beschermen in Piwigo. Gebruik mijn instructies en klik op Volgende (of gebruik de pijltjestoetsen) om te navigeren. Als je naar een andere pagina in de beheerder gaat, zal je terug geleid worden naar de huidige pagina van de rondleiding. Als je vast komt te zitten en de rondleiding niet kan beëindigen, ga dan naar <em>Plugins >> Neem een rondleiding</em>. Dit zal de rondleiding afsluiten. <br>Laten we beginnen!';
-$lang['privacy_title5'] = 'Rechten > Groepen';
-$lang['privacy_title4'] = 'Rechten';
-$lang['privacy_title3'] = 'Rechten';
-$lang['privacy_title19'] = 'Gebruikers';
-$lang['privacy_title18'] = 'Groepen';
-$lang['privacy_title17'] = 'Groepen';
-$lang['privacy_title15'] = 'Tip';
-$lang['privacy_stp3'] = 'Neem een ogenblik om onderstaande informatie te lezen.';
-$lang['privacy_stp13'] = 'Klik nu op prive.';
-$lang['privacy_stp12'] = 'Op die pagina, kunt u kiezen of het album beschikbaar is voor iedereen of slechts beschikbaar voor sommige gebruikers.';
-$lang['privacy_stp6'] = 'Het privacy level kan veranderd worden tijdens het uploaden van de afbeeldingen.';
-$lang['privacy_stp8'] = 'Selecteer een of meer afbeeldingen...';
-$lang['privacy_title14b'] = '';
-$lang['privacy_stp14b'] = 'Belangrijke feit: de webmasters en beheerders zijn niet alwetend tijdens het browsen op het openbare deel, maar ze hebben wel de toegang tot elke album en foto\'s op het admin. gedeelte. ';
-$lang['privacy_stp14'] = 'Dan gebruikers en gebruikers groepen kunnen toegang verkrijgen tot het album.';
-$lang['privacy_stp24'] = 'Dit is het einde van deze toer.<p style="text-align:center">Geniet van jou Piwigo!</p>Als je Piwigo leuk vindt en je wil ons steunen, dan kan je altijd je bijdrage leveren door ons te helpen met vertalen, door een donatie te doen, etc. <a href="http://piwigo.org/basics/contribute" target="_blank">Klki om ons te steunen</a>. Bedankt!';
-$lang['privacy_stp16'] = 'Zoals op jouw PC kan je verschillende albums in één keer selecteren, door gebruik te maken van de Shift en Control toets, en dan op het pijltje te klikken om hen te wijzigen.<br><br>Laat me je nu de groepen voorstellen.';
-$lang['privacy_title1'] = 'Welkom op de Private Toer';
-$lang['privacy_title24'] = 'Het was een leuke tijd.';
-$lang['privacy_title21'] = 'Publieke foto\'s';
-$lang['privacy_title20'] = 'Publieke foto\'s';
-$lang['privacy_title6'] = 'Privacy Niveau';
-$lang['privacy_title7'] = 'Privacy Niveau';
-$lang['privacy_title8'] = 'Privacy Niveau';
-$lang['privacy_title9'] = 'Privacy Niveau';
-$lang['privacy_title2'] = 'Help binnen jou Piwigo';
-$lang['privacy_title12'] = 'Album rechten';
-$lang['privacy_title11'] = 'Album rechten';
-$lang['privacy_title10'] = 'Album rechten';
-$lang['privacy_title22'] = 'Local Config: Bescherming van het origineel';
-$lang['privacy_stp7'] = '... of je kunt dit later doen, hier in de Batch Beheerder in Global Modus.<br><br>Dit is de pagina<em>Fotos\'>>Recente foto\'s</em>, met de filter "Laatste Import" ingesteld.';
-$lang['privacy_stp9'] = '... en selecteer de actie "Wie kunnen mijn foto\'s zien?". Nu kan je het privacy niveau van de geselecteerde foto\'s wijzigen.<br><br>Maar je kunt dit ook doen voor een specifieke foto, op de bewerkingspagina ervan. Je kunt hier terecht komen vanaf de publieke kant of vanaf hier.<br><br>Nu zal ik je het andere systeem laten zien voor toestemming per album gebaseerd op groepen en gebruikers.';
-$lang['privacy_stp5'] = 'Hieronder wordt uitgelegd hoe je de Groepen kunt beheren.<br>Deze toestemmingen betreffen uitsluitend de toegang tot de foto\'s en de albums vanaf de browsers aan de publieke kant of externe applicaties. Later kijken we naar andere beschermingsmogelijkheden. Laten we nu eerst tot de praktijk over gaan!';
-$lang['privacy_stp4'] = 'We hebben dus twee systemen om de toegang tot de foto\'s te beheren. Ze werken onafhankelijk van elkaar. Dus je kan een groep "Familie" maken terwijl deze groep niets van doen heeft met het privacy-niveau Familie. <br><br>De privacy-niveau\'s worden per foto toegepast en de groep/gebruikers toestemmingen worden per album toegepast. Je kunt een enkel systeem of beide tegelijk gebruiken.<br><br>Het volgende Tabblad gaat over groepsbeheer.';
-$lang['privacy_stp22'] = '<em>Voor Gevorderde Gebruikers</em><br><br>Je kan in Piwigo het origineel beschermen via je lokale instellingen. Maak gebruik van de variabele $conf[\'original_url_protection\']: deze staat standaard op leeg. Zet de waarde op "afbeeldingen" om alleen de foto\'s te beschermen of op "alles" om alle mediatypen te beschermen. Dit laatste kan wel veel van je server vragen en mogelijk problemen geven.<br><br>Deze optie werkt zowel voor openbare als privé inhoud. Deze optie vereist ook dat je de toegang tot de mappen/upload en /galleries moet verhinderen door een .htaccess bestand te gebruiken (meestal een tekst-bestandje met "deny from all" voor de inhoud) of via de configuratie van de server.<br><br>Houd er rekening mee dat bestandsnamen van foto\'s die je uploadt via een andere methode dan FTP in een <b>onwillekeurige volgorde</b> worden gerangschikt. Ze zijn dus onmogelijk na te gaan: de bestandsnaam en ook het pad naar de originele foto is alleen kenbaar als de bezoeker toegang heeft tot een herschaalde versie van die foto, zoals een miniatuur. $conf[\'original_url_protection\'] en geen toegang gevend tot de mappen/upload en /galleries zijn bedoeld om dit te voorkomen.';
-$lang['privacy_stp21'] = 'Dit zijn de oplossingen:<ul><li>plaats een watermerk op de foto\'s, tenminste op die met een medium en hoge definitie.</li><li>maak XL en XXL afmetingen onmogelijk.</li><li>maak High Definition onmogelijk (de download en vertoning van het origineel) voor de betreffende gebruikers.';
-$lang['privacy_stp20'] = 'Je weet nu hoe je je foto\'s privé kunt houden, maar je kunt je afvragen hoe je je openbare foto\'s kunt beschermen. Je kunt, om te beginnen, proberen de bezoeker te verhinderen om de foto te downloaden. Dat kan echter niet, vanwege de opzet van internet: de browser van de bezoeker kan van alle bronnen downloaden(en meer dan dat). De rechtsklik-optie kan je uitgeschakelen, je kan een laag over de foto aangebrengen, etc., maar het zal een download niet onmogelijk maken. Volledige internetpagina\'s kunnen opgeslagen worden door elke browser.';
-$lang['privacy_stp2'] = 'Hier heb je toegang tot de geïntegreerde Hulp. Klik op Volgende om direct naar de Hulp pagina over het beheer van toestemmingen te gaan.';
-$lang['privacy_stp19'] = 'Hier kan je snel een enkele gebruiker bewerken door er met je muis over heen te bewegen en dan te klikken op de link Bewerken.<br><br>Je kunt meerdere gebruikers selecteren en ze tegelijk bewerken door hierop een Actie toe te passen.';
-$lang['privacy_stp18'] = 'Voor het beheer van koppelingen tussen gebruikers en groepen, ga naar de <em>Gebruikers>>Beheer</em>pagina';
-$lang['privacy_stp17'] = 'Een groep in Piwigo is gewoon een reeks gebruikers. Groepen vergemakkelijken het beheer van album toestemmingen en gebruikers eigenschappen. Hier is de pagina waar je groepen kunt beheren: bv. hernoemen, samenvoegen, dupliceren en verwijderen. Je kan ook een of meerdere groepen als "standaard groep" instellen, dan zullen nieuwe gebruikers hieraan gekoppeld worden.';
-$lang['privacy_stp15'] = 'Een tip vooraf aan de uitleg van groepen: hier is de link om diverse albums ineens als privé/openbaar in te stellen. Klik erop.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/pl_PL/description.txt b/plugins/TakeATour/language/pl_PL/description.txt
deleted file mode 100755
index fb48baabb..000000000
--- a/plugins/TakeATour/language/pl_PL/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Skorzystaj z przewodników, by poznać możliwości galerii Piwigo. Ta wtyczka posiada wiele przewodników dla początkujących i zaawansowanych użytkowników. \ No newline at end of file
diff --git a/plugins/TakeATour/language/pl_PL/index.php b/plugins/TakeATour/language/pl_PL/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/pl_PL/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/pl_PL/plugin.lang.php b/plugins/TakeATour/language/pl_PL/plugin.lang.php
deleted file mode 100755
index c41e2c889..000000000
--- a/plugins/TakeATour/language/pl_PL/plugin.lang.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['takeatour_configpage'] = 'Wybierz przewodnik » Lista przewodników';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Rozpocznij zwiedzanie i odkrywaj możliwości swojej galeri Piwigo » Przejdź do dostępnych przewodników';
-$lang['End tour'] = 'Zakończ zwiedzanie';
-$lang['Next '] = 'Dalej';
-$lang['Prev'] = 'Wstecz';
-$lang['Start the Tour'] = 'Rozpocznij korzystanie z przewodnika';
-$lang['Visit your Piwigo!'] = 'Odwiedź swoją galerię Piwigo!';
-
-$lang['First Contact'] = 'Pierwszy kontakt';
-$lang['first_contact_descrp'] = 'Ten przewodnik polecamy szczególnie początkującym, wprowadzi cię do Piwigo i zaprezentuje podstawowe cechy. Rozpocznie się od dodawania zdjęć i zarządzania nimi. Następnie przybliży zarządzanie albumami i uprawieniami do nich, a na koniec dostosowywanie przy użyciu konfiguracji, skórek i wtyczek.';
-
-$lang['2.7 Tour'] = 'Przewodnik po 2.7';
-$lang['2_7_0_descrp'] = 'Zobacz co nowego w Piwigo 2.7';
-$lang['TAT_descrp'] = 'Witamy! Oto lista przewodników, które pomogą Ci odkryć możliwości galerii Piwigo.<br><br>Uruchom jeden z przewodników poniżej i zastosuj się do dalszych instrukcji. Możesz korzystać do nawigacji po przewodniku z myszki, lub strzałek na klawiaturze. Będąc w przewodniku, jeśli przejdziesz na inną stronę panelu administracji, przewodnik przeskoczy również do odpowiedniej strony. Żeby zakończyć wyświetlanie przewodnika kliknij na <em>Wtyczki > Przewodniki</em>.';
-$lang['privacy_descrp'] = 'Ten przewodnik prezentuje sposoby zabezpieczenia Twoich zdjęć przed publicznym dostępem, poprzez zezwolenia dostępu do albumów i pojedynczych zdjęć, oraz zabezpieczenia przed kopiowaniem.';
-$lang['Privacy'] = 'Prywatność'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/pl_PL/tour_2_7_0.lang.php b/plugins/TakeATour/language/pl_PL/tour_2_7_0.lang.php
deleted file mode 100644
index 6f3c7940d..000000000
--- a/plugins/TakeATour/language/pl_PL/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_stp4'] = 'Zmodernizowana zostala strona wyszukiwania. Teraz istnieje możliwość wyboru właściwości w których ma zostać zastosowane słowo kluczowe np. lista autorów znajdących się w bazie danych, autouzupełnianie listy etykietek, autouzupełnianie listy albumów...';
-$lang['2_7_0_stp5'] = 'Oprócz daty, można teraz również ustawić czas używajac suwaków godzin i minut.';
-$lang['2_7_0_stp6'] = 'Pole wyboru albumów i etykietek zyskało nowy bardziej przyjazny dla użytkownika interfejs. Przetestuj go poniżej.';
-$lang['2_7_0_title4'] = 'Strona wyszukiwania';
-$lang['2_7_0_title5'] = 'Czas';
-$lang['2_7_0_title6'] = 'Zaznacz budki';
-$lang['2_7_0_stp1'] = 'Witaj! Będę twoim przewodnikiem po Piwigo. Postępuj zgodnie z moimi poleceniami, a następnie kliknij Dalej (lub użyj strzałek na klawiaturze) w celu nawigacji. Jeżeli przejdziesz do innej strony zostaniesz przekierowany do aktualnej strony przewodnika.';
-$lang['2_7_0_title1'] = 'Witamy w Piwigo 2.7';
-$lang['2_7_0_title11'] = 'Do zobaczenia wkrótce!';
-$lang['2_7_0_title2'] = 'Pierwsza nowa funkcja';
-$lang['2_7_0_stp2'] = 'Jak widzisz dodaliśmy nową domyślną wtyczkę: Zapoznaj się. Ta wtyczka pomaga Tobie w odkryciu możliwości Piwigo. Tu jest miejsce, gdzie wymienione są wszystkie dostępne wycieczki.<br>Ta strona jest dostępna w <em>Wtyczki » Zapoznaj się</em>';
-$lang['2_7_0_stp11'] = 'Wycieczka zakończona. <p style="text-align:center">Zapraszamy do Piwigo 2.7!</p>Jeżeli spodobało ci się Piwigo i chciałbyś nas wesprzec, możesz nam pomóc tłumaczeniami, dotacją itp. <a href="http://piwigo.org/basics/contribute" target="_blank">Kliknij tu, aby nas wesprzeć</a>';
-$lang['2_7_0_title10'] = 'Filtr rozmiar plików';
-$lang['2_7_0_title7'] = 'Uporządkuj albumy według daty';
-$lang['2_7_0_stp9'] = 'Dodany został filtr do menedżera wsadowego. Wprowadza on potężną składnię, która pozwala na wyszukiwanie zdjęć według daty, etykietek, rozmiaru, nazwy pliku. Pozwala on również na wyszukiwanie pod kątem takich kryteriów jak np. dokładne dopasowanie, i / lub, grupowanie, wykluczenia. Możesz przeczytać szczegółową pomoc później. Taka sama składnia obowiązuje w pola szybkiego wyszukiwania w publicznym menu bocznym.';
-$lang['2_7_0_stp10'] = 'Filtr pod kątem rozmiaru został dodany do menedżera wsadowego. Możesz wybrać zakres z wartością minimalną i maksymalną.';
-$lang['2_7_0_stp8'] = 'Prosty link umożliwiający opróżnienie koszyka jednym kliknięciem.';
-$lang['2_7_0_title8'] = 'Opróżnij koszyk';
-$lang['2_7_0_title9'] = 'Filtr wyszukiwania';
-$lang['2_7_0_title2b'] = 'Nowy formularz wysyłania';
-$lang['2_7_0_stp7'] = 'Teraz możesz uporządkować swoje albumy na podstawie daty utworzenia zdjęcia lub daty dodania do albumu.';
-$lang['2_7_0_stp2b'] = 'Nowa forma przesyłania zdjęć w Piwigo 2.7 oparta jest na HTML5 - poprzednie wersje używały Adobe Flash. Oznacza to lepszą kompatybilność z nowoczesnymi przeglądarkami internetowymi, jak również zwiększoną niezawodność na wolniejeszych łączach. Metoda typu "przeciągnij i upuść" sprawi iż wysłanie wybranych zdjęć z poziomu menadżera plików stanie się dużo przyjemniejsze!'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/pl_PL/tour_first_contact.lang.php b/plugins/TakeATour/language/pl_PL/tour_first_contact.lang.php
deleted file mode 100644
index a7fa9903e..000000000
--- a/plugins/TakeATour/language/pl_PL/tour_first_contact.lang.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_stp2'] = 'Tutaj znajduje się odnośnik. Kliknij Dalej aby kontynuować';
-$lang['first_contact_stp3'] = 'Z poziomu pierwszej zakładki możesz dodawać zdjęcia bezpośrednio przez przeglądarkę. Inne zakładki udostępniają inne metody wgrywania zdjęć.';
-$lang['first_contact_stp30'] = 'Rozpocznijmy od zmiany tytułu';
-$lang['first_contact_stp32'] = 'Teraz zapisz swoje zmiany';
-$lang['first_contact_stp4'] = 'Najpierw wybierz album, lub stwórz nowy jeżeli jeszcze nie ma żadnego.';
-$lang['first_contact_title29'] = 'Konfiguracja->Opcje->Ogólne';
-$lang['first_contact_title1'] = 'Witaj w swojej galeri Piwigo';
-$lang['first_contact_title11'] = 'Jak edytować zdjęcia';
-$lang['first_contact_title21'] = 'Inne zakładki';
-$lang['first_contact_title22'] = 'Strona edycji albumu';
-$lang['first_contact_title3'] = 'Dodaj stronę zdjęcia';
-$lang['first_contact_title33'] = 'Ustawienia gości';
-$lang['first_contact_title18'] = 'Zarządzaj albumami';
-$lang['first_contact_title19'] = 'Zarządzaj albumami';
-$lang['first_contact_title20'] = 'Zarządzaj albumami';
-$lang['first_contact_title28'] = 'Konfiguracja';
-$lang['first_contact_title38'] = 'Wtyczki';
-$lang['first_contact_title39'] = 'Wtyczki';
-$lang['first_contact_title4'] = 'Dodajmy zdjęcie!';
-$lang['first_contact_stp15'] = 'Na tej stronie możesz edytować wszystkie właściwości zdjęcia, na przykład...';
-$lang['first_contact_stp16'] = 'tutaj aby dodać lub usunąć zdjęcie z albumów. Ten odnośnik jest wirtualny, żadne zdjęcia nie zostaną fizycznie przemieszczone.';
-$lang['first_contact_title15'] = 'Strona edycji zdjęcia.';
-$lang['first_contact_stp31'] = 'Teraz baner wyświetlany na górze każdej strony. Jak widzisz dozwolone są tu tagi HTML. Możesz także użyć tagu %gallery_title% aby wyświetlić tytuł wpisany wyżej.';
-$lang['first_contact_stp41'] = 'Na ostatniej zakładce możesz zobaczyć wszystkie wtyczki dostępne dla twojej wersji Piwigo. Znajdziesz tam setki wtyczek.';
-$lang['first_contact_stp40'] = 'To ja! Nie wyłączaj mnie teraz, ale jak widzisz możesz Wyłączyć lub Zresetować aktywną wtyczkę.';
-$lang['first_contact_stp8'] = 'Edytujmy je! Kliknij w odnośnik.';
-$lang['first_contact_title43'] = 'Świetnie się bawiliśmy';
-$lang['first_contact_title34'] = 'Skórki';
-$lang['first_contact_title35'] = 'Skórki';
-$lang['first_contact_title37'] = 'Skórki';
-$lang['first_contact_title9'] = 'Menadżer wsadowy';
-$lang['first_contact_stp28'] = 'Teraz przyjrzymy się opcjom pozwalającym na dostosowanie Piwigo do Twoich potrzeb. Kliknij Configuracja->Opcje lub po prostu Dalej.';
-$lang['first_contact_stp29'] = 'Na tej pierwszej stronie ustawisz kluczową i podstawową konfigurację swojej galerii.';
-$lang['first_contact_stp22'] = 'Analogicznie jak w przypadku zdjęcia, tu możesz edytować właściwości albumu.';
-$lang['first_contact_stp20'] = 'Kiedy najedziesz kursorem na album pojawią się linki i informacja. Kiedy przeciągniesz album (zaokrąglony obszar) zmienisz jego pozycję, a następnie możesz zapisać lub anulować ustawioną kolejność.';
-$lang['first_contact_stp13'] = 'Możesz edytować opisy i więcej w przetwarzaniu wsadowym w trybie jednostkowym, ale na razie zostańmy w trybie globalnym';
-$lang['first_contact_stp11'] = 'Tutaj możesz zaznaczyć jedno lub więcej zdjęć';
-$lang['first_contact_stp1'] = 'Witaj! Będę Twoim przewodnikiem w odkrywaniu Piwigo. Postępuj proszę zgodnie z moimi instrukcjami i naciśnij Dalej (lub użyj strzałek na klawiaturze). Jeśli przejdziesz do następnej strony administracyjnej, zostaniesz przekierowany do strony bieżącej Przewodnika. Jeśli się zagubisz i nie będziesz mógł zakończyć Przewodnika przejście do <em>Wtyczki » Przewodnik</em> zakończy bieżące wprowadzenie.<br>Zacznijmy od dodania zdjęć!'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/pl_PL/tour_privacy.lang.php b/plugins/TakeATour/language/pl_PL/tour_privacy.lang.php
deleted file mode 100644
index d4c3a7649..000000000
--- a/plugins/TakeATour/language/pl_PL/tour_privacy.lang.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-$lang['privacy_title14b'] = '';
-$lang['privacy_stp14b'] = 'Ważny fakt: webmastrzy i administratorzy nie są wszechwiedzący w trakcie przeglądania części publicznej, ale mają dostęp do każdego albumu i zdjęcia w sekcji administracyjnej.';
diff --git a/plugins/TakeATour/language/pt_BR/description.txt b/plugins/TakeATour/language/pt_BR/description.txt
deleted file mode 100755
index 11eb49491..000000000
--- a/plugins/TakeATour/language/pt_BR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Visite o seu Piwigo para descobrir suas características. Este plugin tem várias turnês temáticas para iniciantes e usuários avançados. \ No newline at end of file
diff --git a/plugins/TakeATour/language/pt_BR/index.php b/plugins/TakeATour/language/pt_BR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/pt_BR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/pt_BR/plugin.lang.php b/plugins/TakeATour/language/pt_BR/plugin.lang.php
deleted file mode 100755
index d1d7c7ce1..000000000
--- a/plugins/TakeATour/language/pt_BR/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Visit your Piwigo!'] = 'Visite a sua Piwigo!';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Faça uma turnê e descubra as características de sua galeria Piwigo »Ir para turnês disponíveis';
-$lang['TAT_descrp'] = 'Bem-vindo! Aqui estão listados todas as turnês disponíveis para descobrir as características de sua galeria Piwigo. <br> Inicie uma turnê abaixo e siga as instruções. Clique em Próximo/Anterior (ou use as setas do seu teclado) para navegar durante uma turnê. Durante uma turnê, se você vai a uma outra página da administração, você será redirecionado para a página atual da Turnê. Se você está preso e não puder terminar a turnê, vá para <em> Plugins » Faça uma Turnê </em> isso irá finalizar a turnê.';
-$lang['Start the Tour'] = 'Iniciar a Turnê';
-$lang['takeatour_configpage'] = 'Faça uma turnê » Lista de Turnês';
-$lang['Prev'] = 'Anterior';
-$lang['End tour'] = 'Fim do tour ';
-$lang['Next '] = 'Próxima';
-
-$lang['First Contact'] = 'Primeiro Contato';
-$lang['first_contact_descrp'] = 'Recomendado para iniciantes, esta turnê vai apresentá-lo ao Piwigo, e suas características básicas. Ele vai começar adicionando imagens, então gerenciá-las. Aturnê continua com a gestão de álbum e permissões, e termina na personalização usando a configuração, os temas e os plugins.';
-
-$lang['2.7 Tour'] = '2.7 Tour';
-$lang['2_7_0_descrp'] = 'Descubra o que há de novo no Piwigo 2.7';
-
-$lang['privacy_descrp'] = 'Este tour irá apresentar-lhe todas as maneiras de proteger suas foto do acesso público com os sistemas de permissão por álbum e por imagem, e de copiar usando proteções de imagem.';
-$lang['Privacy'] = 'Privacidade'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/pt_BR/tour_2_7_0.lang.php b/plugins/TakeATour/language/pt_BR/tour_2_7_0.lang.php
deleted file mode 100644
index 79f547489..000000000
--- a/plugins/TakeATour/language/pt_BR/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_title6'] = 'Selecione script';
-$lang['2_7_0_stp4'] = 'A página de pesquisa foi reformulada: capacidade de selecionar propriedades em que a busca da palavra se aplica, lista de autores encontrados em banco de dados, lista de auto-completar de marcas, lista de auto-completar de álbuns ...';
-$lang['2_7_0_stp5'] = 'Você pode definir o tempo, além da data, usando Hora e Minuto deslisantes';
-$lang['2_7_0_stp6'] = 'O script de seleção para escolher álbuns, etiquetas etc mudou para um mais novo e amigável. Teste-o abaixo';
-$lang['2_7_0_title4'] = 'Página de Pesquisa';
-$lang['2_7_0_title5'] = 'Tempo';
-$lang['2_7_0_stp11'] = 'Este tour é longo. <p Style="text-align:center"> Aproveite o seu Piwigo 2.7! </P> Se você gosta Piwigo e quer nos ajudar, você pode contribuir, ajudando em traduções, doando, etc <a href="http://piwigo.org/basics/contribute" target="_blank">Clique aqui para nos apoiar</a>';
-$lang['2_7_0_stp2'] = 'Como você pode ver, um novo plugin padrão foi adicionado: Faça um tour. Este plugin ajuda você a descobrir o seu Piwigo. Aqui é onde estão listados todos os ptours disponíveis. <br> Esta página está disponível em Plugins <em> »Faça um tour </em>';
-$lang['2_7_0_title1'] = 'Bem-vindo ao Piwigo 2.7';
-$lang['2_7_0_title11'] = 'Vejo você em breve!';
-$lang['2_7_0_title2'] = 'Primeira novidade';
-$lang['2_7_0_stp1'] = 'Olá! Eu vou ser o seu guia para descobrir o Piwigo. Por favor, siga as minhas instruções e clique em Avançar (ou use as setas do seu teclado para navegar). Se você vai para uma outra página, você será redirecionado para a página atual do Tour.';
-$lang['2_7_0_stp9'] = 'Um filtro de pesquisa foi adicionado ao lote gerente. Ele vem com uma sintaxe poderosa para procurar as fotos por datas, etiquetas, tamanho, nome do arquivo e também opções como procurar por exata correspondência, E / OU, agrupamento, exclusão. Você pode ler a ajuda detalhada mais tarde. A mesma sintaxe aplica-se ao campo de busca rápida no menu lateral público.';
-$lang['2_7_0_title2b'] = 'Novo formulário de envio';
-$lang['2_7_0_title7'] = 'Ordenar álbuns por data';
-$lang['2_7_0_title8'] = 'Esvaziar sua cesta';
-$lang['2_7_0_title9'] = 'Filtro de pesquisa';
-$lang['2_7_0_stp8'] = 'Fácil link de ação para esvaziar o seu armazenador em apenas um clique.';
-$lang['2_7_0_stp7'] = 'Agora você pode classificar seus álbuns com base na data de criação ou data das fotos postadas';
-$lang['2_7_0_stp2b'] = 'O novo formulário de envio do Piwigo 2.7 é baseado em HTML5 em vez do Flash, isso significa uma melhor compatibilidade com os navegadores modernos, bem como uma maior confiabilidade em conexões lentas. O segura & solta vai fazer a seleção de fotos muito mais fácil a partir do seu navegador de arquivos!';
-$lang['2_7_0_stp10'] = 'Um filtro do tamanho do arquivo também foi adicionado ao gerente de lote. Você pode selecionar um intervalo com um valor mínimo e máximo.';
-$lang['2_7_0_title10'] = 'Filtro de tamanho de arquivo'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/pt_BR/tour_first_contact.lang.php b/plugins/TakeATour/language/pt_BR/tour_first_contact.lang.php
deleted file mode 100644
index d05f56384..000000000
--- a/plugins/TakeATour/language/pt_BR/tour_first_contact.lang.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-$lang['first_contact_stp14'] = 'Vamos ver agora a página de edição de uma foto. Essa página é acessível a partir daqui, mas também a partir da página de imagem pública quando registrado como administrador. Clique em Editar ou ir para a próxima ao lado';
-$lang['first_contact_stp13'] = 'Você pode editar as descrições e mais a partir do gestor de lote no modo unidade. Mas, por enquanto, vamos ficar no modo global,';
-$lang['first_contact_stp11'] = 'Assim, você pode selecionar a partir daqui uma ou mais fotos';
-$lang['first_contact_stp10'] = 'Aqui está o link para acessar diretamente a seu guia: esta é uma ferramenta para administradores facilmente adicionar fotos a um conjunto, a fim de editá-las na Gerência em Bloco. Você pode adicionar fotos ao guia da página de imagem pública quando registrado como um administrador, ou usando a ação \"Adicionar ao guia " na Gerência em Bloco';
-$lang['first_contact_stp1'] = 'Olá! Eu vou ser o seu guia para descobrir o Piwigo. Por favor, siga as minhas instruções e clique em Avançar (ou use as setas do seu teclado para navegar). Se você vai para uma outra página da administração, você será redirecionado para a página atual da Turnê. Se você está preso e não pode terminar a turnê, vai em <em> Plugins »Faça uma turnê </em> para finalizar a turnê. <br> Vamos começar adicionando imagens!';
-$lang['first_contact_stp20'] = 'Quando o mouse passar sobre o álbum, links e informações aparecem. Quando você arrastar e soltar um álbum -um bloco arredondado-, você vai mudar a sua posição e, em seguida, você pode salvar ou cancelar seu pedido manual.';
-$lang['first_contact_stp2'] = 'O link está aqui. Clique em Avançar para continuar';
-$lang['first_contact_stp15'] = 'Nessa página você pode editar todas as propriedades de uma foto, por exemplo...';
-$lang['first_contact_stp16'] = 'aqui para adicionar ou remover a foto de álbuns. O link é virtual, nenhuma foto será fisicamente movida, nunca.';
-$lang['first_contact_stp32'] = 'Agora salvar mudanças';
-$lang['first_contact_title1'] = 'Bem-vindo em sua galeria Piwigo';
-$lang['first_contact_title11'] = 'Como editar fotos';
-$lang['first_contact_title15'] = 'Página de edição de uma imagem';
-$lang['first_contact_title18'] = 'Gerenviar albuns';
-$lang['first_contact_title19'] = 'Gerenviar albuns';
-$lang['first_contact_title20'] = 'Gerenviar albuns';
-$lang['first_contact_title21'] = 'Outras abas';
-$lang['first_contact_title22'] = 'Página de Edição de Album';
-$lang['first_contact_title28'] = 'Configuração';
-$lang['first_contact_title29'] = 'Configuração->Opçõens->Geral';
-$lang['first_contact_title3'] = 'Adicionar Página de Foto';
-$lang['first_contact_title33'] = 'Configurações de visitantes';
-$lang['first_contact_title34'] = 'Temas';
-$lang['first_contact_title35'] = 'Temas';
-$lang['first_contact_title37'] = 'Temas';
-$lang['first_contact_title38'] = 'Plugins';
-$lang['first_contact_title39'] = 'Plugins';
-$lang['first_contact_title4'] = 'Permite adicionar foto!';
-$lang['first_contact_title43'] = 'Tem sido um grande momento';
-$lang['first_contact_title9'] = 'Gerenciamento em Lote';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_stp22'] = 'Como pora uma imagem, aqui você pode editar as propriedades de um álbum';
-$lang['first_contact_stp23'] = 'Bloquear um álbum significa apenas os administradores serão capazes de ver o álbum: é geralmente usado quando um administrador está gerenciando as propriedades de um álbum ou não quer publicar o álbum imediatamente';
-$lang['first_contact_stp28'] = 'Agora vamos olhar para as opções disponíveis para definir o caminho de trabalho do seu Piwigo. Clique em Configuração-> Opções ou apenas clique em Próximo.';
-$lang['first_contact_stp29'] = 'Aqui, na primeira página, você irá definir a configuração essencial e básica de sua galeria.';
-$lang['first_contact_stp3'] = 'Esta primeira guia é onde você adiciona fotos diretamente do seu navegador. As outras guias são sobre as outras maneiras de fazer upload de fotos';
-$lang['first_contact_stp30'] = 'Vamos começar por mudar o título';
-$lang['first_contact_stp31'] = 'Em seguida, o banner, que será exibido no topo de cada página. Como você pode ver, as tags HTML são permitidas aqui. Você também pode usar o gallery_title% tag% para exibir o título que você acabou de digitar acima.';
-$lang['first_contact_stp33'] = 'Apenas uma palavra final sobre as opções, página dos ajustes de Clientes \'é definir as preferências dos visitantes não registrados. Cada vez Piwigo refere-se a \'convidado\' que significa que os visitantes não registrados <br> Vamos continuar sobre configuração:. Clique em Configuração-> Temas ou apenas clique em Próximo.';
-$lang['first_contact_stp37'] = 'Para instalar novos temas, você pode baixá-los diretamente a partir da guia "Adicionar um tema". Apenas os temas marcados como compatíveis com a sua versão do Piwigo são mostrados. <br> Vamos descobrir os plugins agora! Clique em Plugin-> Gerenciar';
-$lang['first_contact_stp38'] = 'Plugins são maneiras muito fáceis de personalizar seu Piwigo. Eles podem fazer quase qualquer coisa que você pode imaginar de adição de texto a completar recursos, como num plugin comunitário, permite usuários não administradores fazer upload sem entrar na parte de administração.';
-$lang['first_contact_stp39'] = 'Na primeira página, são listados os plugins instalados. No topo, estão listados os plugins ativados, que estão atualmente em execução. Na parte inferior, os plugins que estão instalados na pasta /plugins, mas desativado. A exclusão de um plug-in significa que qualquer traço do plugin será removido (arquivos, opções, etc.) Para a maioria dos plugins, desativação irá manter os dados registrados pelos plugins.';
-$lang['first_contact_stp4'] = 'Primeiro, escolha um álbum; criar um, se não houver ainda um álbum.';
-$lang['first_contact_stp40'] = 'Aqui sou eu! Não me desabilite agora, mas você pode ver que você pode desativar ou restaurar um plugin ativado.';
-$lang['first_contact_stp41'] = 'Você pode ver na última guia todos os plugins disponíveis para a sua versão do Piwigo. Centenas de plugins estão lá!';
-$lang['first_contact_stp43'] = 'Este passeio foi bastante longo, mas nós só vimos uma pequena parte de quão poderoso é o Piwigo. Tudo tem um fim, este panorama está terminado. <br> Você pode descobrir muito mais profundas características do Piwigo tfazendo uma outra turnê ou a leitura de nossa documentação, no site da piwigo.org.';
-$lang['first_contact_stp6'] = 'Você vê que as fotos estão sendo listadas. Adicione pelo menos 2 fotos e, quando estiver pronto, clique no botão Iniciar Envio';
-$lang['first_contact_stp8'] = 'Vamos editá-los! Clique no link. Se você não vê-lo click em Anterior para adicionar pelo menos 2 fotos.';
-$lang['first_contact_stp7'] = 'Aqui, um resumo de suas imagens enviadas. Veja que Piwigo gerou-se as miniaturas. Agora você pode adicionar mais fotos com o link na parte inferior, editar as propriedades de uma imagem, clicando sobre ela, ou clique para gerenciar todas as imagens enviadas no Gerenciador de Lotes ...';
-$lang['first_contact_stp9'] = 'Agora você está no Gegenciador de Lotes, onde você pode editar em lote várias fotos. Aqui, a Caddy é definido como um filtro porque vem da página de resultados de upload.';
-$lang['first_contact_stp35'] = 'Defina o seu tema favorito, como o tema padrão.';
-$lang['first_contact_stp5'] = 'Em seguida, clique no botão para selecionar fotos para enviar, ou simplesmente arrastar e soltar seus arquivos.';
-$lang['first_contact_stp21'] = 'A próxima guia é uma página onde você pode mover qualquer álbum virtual <br>A guia permalink é definir uma URL específica para um álbum <br> Mas vamos editar um álbum.:. Clique em Edição de um álbum';
-$lang['first_contact_stp34'] = 'Escolher um tema é o primeiro passo para personalizar a sua Piwigo. Temas instalados são listados aqui <br> mais de um tema pode ser habilitado.: Os usuários podem alterar o tema, escolhendo um entre os ativados aqui, se a opção "Permitir personalização do usuário" está marcada na página de opção.';
-$lang['first_contact_stp18'] = 'Vamos ver como gerenciar álbuns agora. Clique <em>no álbum » Gerenciar</em> ou clique em Próximo';
-$lang['first_contact_stp19'] = 'Aqui estão listados álbuns \'root\'. Se você ver um álbum com um fundo tracejado, isso significa um álbum físico de uma sincronização FTP. Álbuns físicos não podem ser movidos ou excluídos a partir daqui. Os outros álbuns são chamados de álbuns virtuais.';
-$lang['first_contact_stp19_b'] = 'Aqui estão listados álbuns \'raiz\'.';
-$lang['first_contact_stp12'] = 'em seguida, editá-los usando uma ação';
-$lang['first_contact_stp17'] = 'Aqui você pode definir a foto como miniatura de um ou vários álbuns. A foto não tem de ser associado com o album para ser a sua miniatura. Se a foto está associado ao álbum, é ainda mais simples para defini-lo como álbum de miniaturas da página pública da foto (dica: use o plugin Ferramentas de Administração para ter ainda mais simplicidade).'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/pt_BR/tour_privacy.lang.php b/plugins/TakeATour/language/pt_BR/tour_privacy.lang.php
deleted file mode 100644
index 94ef295e5..000000000
--- a/plugins/TakeATour/language/pt_BR/tour_privacy.lang.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-$lang['privacy_stp2'] = 'Você pode acessar aqui a ajuda integrada. Clique em Avançar para continuar diretamente para a página de ajuda sobre o gerenciamento de permissões';
-$lang['privacy_stp19'] = 'Aqui você pode editar rapidamente um único usuário ao passar-lo, e em seguida, clique no link Editar. <br> Você pode selecionar vários usuários e editá-los de uma só vez, em seguida, escolher uma ação para aplicar.';
-$lang['privacy_stp14'] = 'Em seguida, a usuários e grupos de usuários podem ser concedidos o acesso ao álbum.';
-$lang['privacy_title1'] = 'Bem-vindo ao Tour de Privacidade';
-$lang['privacy_title10'] = 'Permissões no album';
-$lang['privacy_title11'] = 'Permissões no album';
-$lang['privacy_title12'] = 'Permissões no album';
-$lang['privacy_title15'] = 'Dica';
-$lang['privacy_title17'] = 'Grupos';
-$lang['privacy_title18'] = 'Grupos';
-$lang['privacy_title19'] = 'Usuários';
-$lang['privacy_title2'] = 'Ajuda dentro do seu Piwigo';
-$lang['privacy_title20'] = 'Fotos públicas';
-$lang['privacy_title21'] = 'Fotos públicas';
-$lang['privacy_title22'] = 'Cinfuguração Local: Proteção original';
-$lang['privacy_title24'] = 'Tem sido um grande momento';
-$lang['privacy_title3'] = 'Permissões';
-$lang['privacy_title4'] = 'Permissões';
-$lang['privacy_title5'] = 'Permissões>Grupos';
-$lang['privacy_title6'] = 'Nível de Privacidade';
-$lang['privacy_title7'] = 'Nível de Privacidade';
-$lang['privacy_title8'] = 'Nível de Privacidade';
-$lang['privacy_title9'] = 'Nível de Privacidade';
-$lang['privacy_stp18'] = 'Para adicionar ou remover usuários de grupos, vá para a página <em>Gerenciar » Usuários</em>';
-$lang['privacy_stp17'] = 'Um grupo no Piwigo é apenas um conjunto de usuários: logo grupos facilitam a permissões de gerenciamento de álbum, e o gerenciamento de propriedades de usuários. Aqui é a página onde você pode gerenciar grupos para renomear, fundir, duplicar, excluír. Você também pode definir um ou mais grupos como "grupo padrão", o que significa que os usuários recém-registrados serão afetados por esses grupos definidos como padrão.';
-$lang['privacy_stp16'] = 'Como no seu computador, você pode selecionar vários álbuns com as teclas Maj e Controle, em seguida, clique na seta para mudá-los. <br> Agora, deixe-me apresentar os grupos.';
-$lang['privacy_stp15'] = 'Pouco antes de explicar os grupos, uma dica pro: aqui está o link para uma página para definir como privada/pública vários álbuns ao mesmo tempo. Clique sobre ele';
-$lang['privacy_stp13'] = 'Agora clique em privado.';
-$lang['privacy_stp12'] = 'Nessa página, você pode escolher se o álbum estará disponível para qualquer pessoa ou será restrito a alguns usuários';
-$lang['privacy_stp11'] = 'Agora clique na guia Permissões';
-$lang['privacy_stp10'] = 'Estamos no gerenciamento da lista de Album disponível no menu usando <em> Álbuns »Gerenciar </em><br>><br> Editar no álbum ao passar-lo e, em seguida, clique em Editar.';
-$lang['privacy_stp1'] = 'Olá! Eu vou ser o seu guia para descobrir como proteger suas fotos no Piwigo. Por favor, siga as minhas instruções e clique em Avançar (ou use as setas do seu teclado para navegar). Se você vai para uma outra página da administração, você será redirecionado para a página atual do Tour. Se você está preso e não pode terminar a turnê, vá para <em>Plugins »Faça um tour </em>isso irá terminar a turnê. <br> Vamos começar!';
-$lang['privacy_stp8'] = 'Selecione uma ou mais fotos...';
-$lang['privacy_stp3'] = 'Tenha um momento para ler as informações abaixo.';
-$lang['privacy_stp21'] = 'Soluções são: <ul><li> colocar uma marca d\'água, pelo menos em fotos de média e alta resolução </li><li> desativar tamanhos XL e XXL </li><li> e desativar a Alta Definição (download.. e exibição da foto original) para os usuários interessados.';
-$lang['privacy_stp20'] = 'Agora você sabe como manter as suas fotos privadas, mas você  pode imaginar como proteger suas fotos públicas. Você pode primeiro pensar sobre como bloquear o visitante a fazer o download da foto: você não pode, porque a web foi criado dessa maneira (o navegador do visitante pode baixar todos os recursos apresentados e muito mais). O clique com o botão direito pode ser desativado, uma camada em branco pode ser colocado em cima da foto etc, mas não vai desativar o download. Webpages completos podem ser salvos por qualquer navegador web.';
-$lang['privacy_stp22'] = '<em>Para Usuários Avançados</em><br><br>Em Piwigo, você pode proteger as fotos originais usando a configuração local. Use a variável $conf[\'original_url_protection\']: por padrão vazia, você defini o valor para "imagens" para proteger apenas as imagens ou "tudo" para proteger também todo o tipo de mídia, que pode consumir recursos ou pode simplesmente não funcionar em seu servidor. <br> Esta opção funciona para conteúdos público e privado. Esta opção atualmente requer que você negue os Acesso a pastas /upload e /galerias, usando um arquivo .htaccess (geralmente um arquivo de texto com "Deny from all" para conteúdo) ou as configurações do servidor.<br><br>Favor note que os nomes de arquivo de fotos enviadas usando outro método que não seja FTP são <b>randomizados </b>, por isso eles são impossíveis de adivinhar: o nome do arquivo e assim o caminho para a foto original pode ser conhecido somente se o visitante tem acesso a uma redimensionada imagem desta foto, como a miniatura. $conf[\'original_url_protection\'] e negando acesso às pastas /upload e /galerias são destinadas a evitar esse caso.';
-$lang['privacy_stp24'] = 'Este tour é longo. <p Style="text-align:center"> Aproveite o seu Piwigo! </p> Se você gosta do Piwigo e quer nos ajudar, você pode contribuir, ajudando nas traduções, doando, etc <a href ="http://piwigo.org/basics/contribute" target = "_blank"> Clique aqui para nos apoiar</a> Obrigado!';
-$lang['privacy_stp4'] = 'Portanto, temos dois sistemas para o gerenciamento das permissões de acesso às imagens. Eles são independentes, então você pode criar um grupo chamado família, mas esse grupo não tem nada a ver com o nível de privacidade da Família. <br><br>Os níveis de privacidade são aplicadas por imagem, e as permissões do grupo / usuário são aplicadas por álbum. Você pode usar ambos ou apenas um sistema, que é flexível. <br><br>A próxima aba é sobre o grupo de gestão.';
-$lang['privacy_stp5'] = 'Abaixo é explicado como você pode gerenciar os Grupos.<br>Essas permissões são apenas para o acesso das fotos e álbuns, quando navega na parte pública ou para as aplicações externas. Veremos mais adiante outras proteções, mas vamos agora praticar!';
-$lang['privacy_stp9'] = '... E selecione a ação "Quem pode ver as fotos?". Agora você pode alterar o nível de privacidade das fotos selecionadas.<br><br>Mas você também pode fazer isso para uma imagem específica, em sua página de edição. Você pode acessá-la a partir da parte do público, ou a partir daqui.<br><br>Agora, vou mostrar-lhe o outro sistema de permissão por álbum baseado em grupos e usuários.';
-$lang['privacy_stp7'] = '... Ou você pode fazer isso mais tarde, aqui no Batch Manager no Modo Global.<br><br> Esta é a página <em>Fotos »Fotos recentes</em>, de modo que o filtro "Última importação" é definido.';
-$lang['privacy_stp6'] = 'Quando você faz o envio das fotos, você pode alterar o nível de privacidade das fotos enviados ali ...';
-$lang['privacy_title14b'] = '';
-$lang['privacy_stp14b'] = 'Fato importante: os webmasters e administradores não são oniscientes ao navegar na parte pública, mas eles podem acessar a cada álbum e fotos na parte de administração.';
diff --git a/plugins/TakeATour/language/pt_PT/description.txt b/plugins/TakeATour/language/pt_PT/description.txt
deleted file mode 100755
index cae52f00d..000000000
--- a/plugins/TakeATour/language/pt_PT/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Visite o seu Piwigo para descobrir as suas funcionalidades. Esta extensão tem múltiplas visitas temáticas para utilizadores principiantes e avançados. \ No newline at end of file
diff --git a/plugins/TakeATour/language/pt_PT/index.php b/plugins/TakeATour/language/pt_PT/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/pt_PT/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/pt_PT/plugin.lang.php b/plugins/TakeATour/language/pt_PT/plugin.lang.php
deleted file mode 100755
index d55c1bed7..000000000
--- a/plugins/TakeATour/language/pt_PT/plugin.lang.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['takeatour_configpage'] = 'Faça Uma Viagem » Lista de demonstrações';
-$lang['End tour'] = 'Fim da apresentação';
-$lang['Next '] = 'Próximo';
-$lang['Prev'] = 'Anterior';
-$lang['Start the Tour'] = 'Iniciar apresentação';
-$lang['Visit your Piwigo!'] = 'Visitar o seu Piwigo';
-
-$lang['First Contact'] = 'Primeiro contacto';
-
-$lang['2.7 Tour'] = 'Apresentação do 2.7';
-$lang['2_7_0_descrp'] = 'Descobre o que há de novo no Piwigo 2.7';
-$lang['Privacy'] = 'Privacidade';
-$lang['TAT_descrp'] = 'Bem-vindo(a)! Aqui está uma lista de todas as possibilidades disponíveis para ajudar a descobrir as possibilidades da sua galeria Piwigo.<br><br> Inicie uma visita abaixo e siga as instruções. Clique em Próximo/anterior (ou use as setas do seu teclado) para navegar durante uma visita. Enquanto está numa visita, se for para outra página da administração, será redirecionado(a) para a página da visita que efetuava. Se está bloqueado(a) e não pode terminar o passeio, vá para <em>Plugins» Fazer uma visita</em> e terminará a visita.';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Dê uma vista de olhos e descubra as possibilidades da sua galeria Piwigo >> Veja as possibilidades de verificação existentes.';
-$lang['first_contact_descrp'] = 'Recomendado para iniciantes, esta visita introduze-o no Piwigo e suas possibilidades básicas. Começa por lhe mostrar como adicionar fotos, e depois administra-las. A visita continua com a gestão do album e termina com personalização usando configuração, temas e extenções.';
-$lang['privacy_descrp'] = 'Esta visita apresenta-lhe todas as hipóteses para proteger as suas fotos de acesso público com permissões por album e foto, e de copias usando proteções de imagem.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/pt_PT/tour_2_7_0.lang.php b/plugins/TakeATour/language/pt_PT/tour_2_7_0.lang.php
deleted file mode 100644
index 153bcc041..000000000
--- a/plugins/TakeATour/language/pt_PT/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_stp4'] = 'A página de busca foi revista: Criada a possibilidade de selecionar propriedades às quais a palavra de busca se aplica, lista de autores na base de dados, completa automaticamente as listas de etiquetas e álbuns.';
-$lang['2_7_0_stp5'] = 'Pode determinar o tempo em adição à data, usando marcadores de hora e minutos.';
-$lang['2_7_0_stp6'] = 'A caixa para seleção de álbuns, foi alterada para uso mais fácil e agradável. Teste abaixo';
-$lang['2_7_0_title4'] = 'Página de busca';
-$lang['2_7_0_title5'] = 'Tempo';
-$lang['2_7_0_title6'] = 'Caixas selecionáveis';
-$lang['2_7_0_stp1'] = 'Olá! Eu vou ser o seu guia para descobrir Piwigo. Por favor, siga as minhas instruções e clique em Avançar (ou use as setas do seu teclado para navegar). Se vai para uma outra página, será redirecionado(a) para a página atual da Apresentação.';
-$lang['2_7_0_stp11'] = 'Esta apresentação terminou. <p Style="text-align:center"> Aprecie o seu Piwigo 2.7!</p> Se você gosta Piwigo e nos quer ajudar, pode contribuir, colaborando nas traduções, doando, etc <a href="http://piwigo.org/basics/contribute"target="_blank"> Clique aqui para colaborar</a>';
-$lang['2_7_0_stp2'] = 'Como você pode constatar, uma nova extensão padrão foi adicionada: Faça uma viagem. Esta extenção ajudá-lo(a)-á a descobrir o seu Piwigo. Aqui é onde estão listados todas as possibilidades disponíveis. <br>Esta página está disponível nas extensões <em>Faça uma viagem</em>';
-$lang['2_7_0_title2'] = 'Primeira nova funcionalidade';
-$lang['2_7_0_title1'] = 'Bem vindo(a) ao Piwwigo 2.7';
-$lang['2_7_0_title11'] = 'Até breve!';
-$lang['2_7_0_stp10'] = 'Um filtro quanto ao tamanho de arquivo também foi adicionado. Pode selecionar um intervalo com um valor mínimo e máximo.';
-$lang['2_7_0_stp2b'] = 'O novo formulário de carregamento no novo Piwigo 2.7 é baseado em HTML5 em vez de Flash resultando numa melhor compatibilidade com os navegadores modernos, bem como aumenta a operacionalidade em ligações baixas. E o arrastar e depositar (drag & drop) proporciona uma seleção de fotos muito mais fácil a partir do arquivo pretendido!';
-$lang['2_7_0_stp7'] = 'Agora pode ordenar os álbuns pela data de criação ou carregamento.';
-$lang['2_7_0_stp8'] = 'Link para esvaziar o cesto de compras em apenas um clique.';
-$lang['2_7_0_stp9'] = 'Um filtro de pesquisa foi adicionado. Ele apresenta-se com uma sintaxe poderosa para procurar fotos por datas, etiquetas, tamanhos, nomes de arquivo e também opções de busca como correspondência exata, E/OU, agrupamento e exclusão. Pode ler a ajuda detalhada mais tarde. A mesma sintaxe aplica-se ao campo de busca rápida no menu público.';
-$lang['2_7_0_title10'] = 'Filtro de tamanho de arquivos';
-$lang['2_7_0_title2b'] = 'Nova forma de carregar';
-$lang['2_7_0_title7'] = 'Visionamento de álbuns por data';
-$lang['2_7_0_title8'] = 'Despejar o cesto';
-$lang['2_7_0_title9'] = 'Filtro de busca'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/pt_PT/tour_first_contact.lang.php b/plugins/TakeATour/language/pt_PT/tour_first_contact.lang.php
deleted file mode 100644
index d5975067f..000000000
--- a/plugins/TakeATour/language/pt_PT/tour_first_contact.lang.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_title1'] = 'Benvindo(a) à sua galeria';
-$lang['first_contact_title11'] = 'Como editar fotos';
-$lang['first_contact_title15'] = 'A página de edição de uma imagem';
-$lang['first_contact_title18'] = 'Administrar Albuns';
-$lang['first_contact_title19'] = 'Administrar Albuns';
-$lang['first_contact_title20'] = 'Administrar Albuns';
-$lang['first_contact_title21'] = 'outras abas';
-$lang['first_contact_title22'] = 'Página de edição do Album';
-$lang['first_contact_title28'] = 'Configuração';
-$lang['first_contact_title29'] = 'Configuração->Opções->Geral';
-$lang['first_contact_title3'] = 'Adicionar página da foto';
-$lang['first_contact_title33'] = 'Definições de visitantes';
-$lang['first_contact_title34'] = 'Temas';
-$lang['first_contact_title35'] = 'Temas';
-$lang['first_contact_title37'] = 'Temas';
-$lang['first_contact_title38'] = 'Extensões';
-$lang['first_contact_title39'] = 'Extensões';
-$lang['first_contact_title4'] = 'Permitir adicionar foto!';
-$lang['first_contact_title43'] = 'Tem sido um momento aprazível';
-$lang['first_contact_title9'] = 'Administrar miniaturização';
-$lang['first_contact_stp30'] = 'Comecemos por alterar o título';
-$lang['first_contact_stp32'] = 'Agora salve as suas alterações';
-$lang['first_contact_stp2'] = 'O link é aqui. Clique em avançar para continuar';
-$lang['first_contact_stp22'] = 'Como para uma foto, aqui pode editar as propriedades de um album';
-$lang['first_contact_stp11'] = 'Então pode selecionar daqui uma ou mais fotos';
-$lang['first_contact_stp15'] = 'Nesta página pode editar todas as propriedades de uma foto, por exemplo...';
-$lang['first_contact_stp16'] = 'aqui para adicionar ou remover uma foto dos albuns. O link é virtual, nunca serão movidas fotos fisicamente.';
-$lang['first_contact_stp8'] = 'Vamos editá-lo! Clique no link.';
-$lang['first_contact_stp28'] = 'Agora, olharemos para as opções disponíveis para definir Piwigo de acordo com sua forma trabalhar. Clique em Configuração-> Opções ou apenas clique em Próximo.';
-$lang['first_contact_stp29'] = 'Aqui, nesta primeira página, irá definir a configuração essencial e básica da sua galeria.';
-$lang['first_contact_stp3'] = 'Este primeira aba é onde adicionará fotos diretamente a partir do seu navegador. As outras abas são sobre as outras maneiras de carregar fotos';
-$lang['first_contact_stp38'] = 'Extensões são meios muito fáceis de personalizar o seu Piwigo. Elas podem fazer qualquer coisa que possa imaginar a partir de pequenas adições de texto para completar recursos, como a extensão comunitária que permite que os utilizadores não administradores carreguem sem entrar na parte de administração.';
-$lang['first_contact_stp4'] = 'Primeiro escolha um album; crie um, se ainda não existir nenhum album.';
-$lang['first_contact_stp1'] = 'Olá! Eu vou ser o seu guia para descobrir Piwigo. Por favor, siga as minhas instruções, clique em Avançar (ou use as setas do seu teclado) para navegar. Se for para outra página da administração, será redirecionado para a página atual da visita. Se ficar preso e não poder terminar a visita, vá para <em>Extenções » Iniciar uma visita</em>terminará a visita.<br> Vamos começar adicionando fotos!';
-$lang['first_contact_stp10'] = 'Aqui está o link para acessar diretamente o seu caddie: É uma ferramenta para administradores para facilmente escolherem fotos, ao navegar na parte pública, para editá-los no Gerenciador de Lote. <br><br> Você pode adicionar fotos ao caddy a partir da página publica quando haja entrado como administrador ou usando a ação "Adicionar ao caddie" no Gerenciador de Lote.';
-$lang['first_contact_stp12'] = 'então edite-a usando uma ação';
-$lang['first_contact_stp13'] = 'Pode editar as descrições e mais a partir do gerenciador de lote no modo simples. Mas, por enquanto, vamos ficar no modo global.';
-$lang['first_contact_stp14'] = 'Agora veremos o <b>editar página</ b> de uma foto. Esta página é acessível a partir daqui, mas também a partir da página publica da foto quando quando entrou como administrador. <br><br> Sobreponha a miniatura e então clique em Editar.';
-$lang['first_contact_stp17'] = 'Aqui pode definir a foto como uma miniatura de um ou mais albuns. A foto não tem de ser associada com o album para ser sua miniatura. Se a foto estiver associada ao album, será ainda mais simples defini-la como miniatura do album a partir da página pública da foto (dica: use a extensão Ferramentas de Administração para maior simplicidade).';
-$lang['first_contact_stp18'] = 'Agora vamos ver como gerenciar álbuns. Clique <em>No album » Gerenciar</em> ou clique em Próximo.';
-$lang['first_contact_stp19'] = 'Aqui estão listados os caminhos dos albuns. Se vir um album com um fundo traçado, isso significa um album físico de uma sincronização FTP. Albuns físicos não podem ser movidos ou excluídos a partir daqui. Os restantes albuns são chamados albuns virtuais.';
-$lang['first_contact_stp19_b'] = 'Aqui estão listados os cominhos dos albuns';
-$lang['first_contact_stp20'] = 'Quando o mouse se sobrepõe sobre um album, links e informações aparecem. Quando arrasta e solta um album -bloco arredondado-, altera a sua posição e então pode salvar ou cancelar o seu procedimento manual.';
-$lang['first_contact_stp21'] = 'A próxima guia é uma página onde pode mover qualquer album virtual. <br>A guia permalink é definir uma determinada URL para um álbum.<br> Mas vamos editar um album: Clique em Editar um album';
-$lang['first_contact_stp23'] = 'Fechando um album significa que apenas os administradores serão capazes de ver este album: muito útil quando se prepara o album antes de o publicar';
-$lang['first_contact_stp31'] = 'Então, a bandeira, que será exibida no topo de todas as páginas. Como pode ver, as etiquetas HTML são permitidas aqui. Você também pode usar a etiqueta %gallery_title% para exibir o título que acabou de escrever acima.';
-$lang['first_contact_stp33'] = 'Apenas uma palavra final sobre as opções, a página "Configurações de visitantes é para definir as definições dos visitantes não registados. Cada vez que Piwigo se refere a um "visitante" quer dizer visitantes não registados. <br>Vamos continuar com a configuração: Clique em <em>Configuração »Temas</em> ou apenas em Próximo.';
-$lang['first_contact_stp34'] = 'Escolher um tema é o primeiro passo para personalizar o Piwigo. Temas instalados estão listados aqui. <br>pode ser ativado muito mais que um tema : Utilizadores podem alterar o seu tema, escolhendo um de entre os ativados aqui, se a opção, "Permitir ao utilizador personalização", estiver marcada na página de Opção.';
-$lang['first_contact_stp35'] = 'Defina o tema favorito como tema por defeito';
-$lang['first_contact_stp37'] = 'Para instalar novos temas, pode descarrega-los diretamente a partir da opção "Adicionar um tema". Apenas os temas marcados como compatíveis com a versão do Piwigo que usa, são mostrados. <br><br> Vamos descobrir extensões agora! Clique em <em> Extensão »Gerenciar</em>';
-$lang['first_contact_stp5'] = 'Em seguida, clique no botão para selecionar as fotos a carregar, ou simplesmente arrastar e solte os arquivos.';
-$lang['first_contact_stp39'] = 'Nesta primeira página, são listadas as extensões instaladas.<br><br> No topo, estão listadas as extensões ativadas e que estão actualmente em execução. <br><br> Na parte inferior, as extensões que estão instalados no diretório / extensões, mas desativadas. <br><br> Excluindo uma extensão significa que quaisquer vestígios da extensão serão removidos (arquivos, opções etc). Para a maioria das extensões, a desativação manterá os dados registados pela extensão.';
-$lang['first_contact_stp40'] = 'Aqui estou eu! Não me desative agora, poderá ver como pode desativar ou restaurar uma extensão ativada.';
-$lang['first_contact_stp41'] = 'Pode ver na última aba todas as extensões disponíveis para a sua versão do Piwigo. Centenas de extensões estão lá!';
-$lang['first_contact_stp43'] = 'Esta visita foi bastante longa, mas nós só vimos uma pequena parte de quão poderoso é Piwigo. Tudo tem um fim, este visionamento terminou. <br><br> Pode investigar mais profundamente as características de Piwigo iniciando outra visita ou lendo a nossa documentação, no site piwigo.org. <br><br> Não esqueça também o link Ajuda no canto superior direito de qualquer página da administração, <p style="text-align:center"> Divirta-se com o seu Piwigo </ p>';
-$lang['first_contact_stp6'] = 'Você vê que as fotos foram listadas. Quando estiver pronto, clique no botão Iniciar carga.';
-$lang['first_contact_stp7'] = 'Aqui, um resumo das fotos carregadas. Veja que Piwigo gerou ele próprio as miniaturas. Você pode: <ul><li>administrar todas as fotos carregadas no gerenciamento de lote</li><li> editar as propriedades de uma foto, clicando sobre ela</li><li> adicionar mais fotos</li></ul>';
-$lang['first_contact_stp9'] = 'Agora você está no gerenciamento de grupo, onde pode editar fotos em lotes múltiplos. <br><br> Aqui o pré-filtro já está definido em "Caddie", porque viemos da página de carga.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/pt_PT/tour_privacy.lang.php b/plugins/TakeATour/language/pt_PT/tour_privacy.lang.php
deleted file mode 100755
index 47e1c9cef..000000000
--- a/plugins/TakeATour/language/pt_PT/tour_privacy.lang.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['privacy_stp1'] = 'Olá! Eu vou ser o seu guia para descobrir como pode proteger as suas fotos no Piwigo. Por favor siga as minhas instruções, e prima Próximo (Next) - ou use as setas do teclado - para navegar. Se for a outra página da administração, será redireccionado para a página em que se encontra. Se estiver com dificuldade e não puder terminar, vá a <em>Plugins » Take A Tour</em> para concluir.<br>Comecemos!';
-$lang['privacy_stp14'] = 'Assim, grupos e registados podem aceder ao album';
-$lang['privacy_stp13'] = 'Agora clique em privado';
-$lang['privacy_stp12'] = 'Nesta página pode optar por tornar o Album acessível a todos os visitantes ou disponibilizar o acesso apenas a alguns registados';
-$lang['privacy_stp11'] = 'Agora clique na aba das permissões';
-$lang['privacy_stp10'] = 'Estamos na gestão da lista de Albuns disponíveis a partir do menu <em>Albums » Gerir</em><br><br>Edite no album passando por cima e, a seguir, faça clique em Editar.';
-$lang['privacy_stp14b'] = 'Nota importante: administradores e webmasters estão sujeitos ao mesmo sistema de permissões que um registado quando navegam na galeria. No espaço da administração, têm acesso a todos os albuns ou fotos.';
-$lang['privacy_stp15'] = 'Ainda antes de explicar os grupos, uma dica pro: aqui está o link para uma página para definir como público/privado vários álbuns em simultâneo. Clique nela';
-$lang['privacy_stp16'] = 'Como no seu computador, pode seleccionar alguns álbuns usando as teclas Shift e Control, seguido dum clique na seta direccionada para a selecção pretendida.<br><br>Agora, vamos abordar o tema grupos.';
-$lang['privacy_stp17'] = 'Um grupo no Piwigo é um conjunto de utentes: assim é mais prático atribuir permissões dos álbuns a um grupo e definir as propriedades dos utentes. Aqui tem a página onde pode gerir grupos, i.e. renomear, juntar, duplicar ou apagá-los. Pode também definir um ou mais grupos como "grupo padrão" o que significa que os novos registados serão associados a estes grupos padrão.';
-$lang['privacy_stp2'] = 'Aqui tem acesso às instruções. Faça Next para ir directamente para a página de instruções das permissões.';
-$lang['privacy_stp19'] = 'Aqui você pode fazer a edição rápida de um único registado passando o rato por cima e, em seguida, clique em Editar. <br> Você pode editar vários registados de uma só vez; seleccione-os e escola a acção a aplicar.';
-$lang['privacy_stp18'] = 'para administrar as associações entre registados e grupos, vá à página <em>Users » Manage</em>'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/ro_RO/index.php b/plugins/TakeATour/language/ro_RO/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/ro_RO/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/ro_RO/plugin.lang.php b/plugins/TakeATour/language/ro_RO/plugin.lang.php
deleted file mode 100755
index 14423f51f..000000000
--- a/plugins/TakeATour/language/ro_RO/plugin.lang.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['End tour'] = 'Sfarseste turul';
-$lang['takeatour_configpage'] = 'Fa un tur » Lista a tururilor';
-$lang['Next '] = 'Urmatorul';
-$lang['Prev'] = 'Anterior';
-$lang['Start the Tour'] = 'Porneste turul';
-
-$lang['2.7 Tour'] = 'Turul 2.7';
-$lang['2_7_0_descrp'] = 'Descopera ce aduce nou Piwigo 2.7';
-$lang['TAT_descrp'] = 'Bine ati venit! Aceasta este o lista cu prezentarile disponibile, pentru a va ajuta sa descoperiti facilitatile galeriei Piwigo.<br><br> Porniti una din prezentarile de mai jos, apoi urmati instructiunile. Apasa Nex/Prev (sau foloseste sagetile de la tastatura) pentru a naviga in prezentare. Daca sunteti intr-o prezentare si doriti sa mergeti intr-o pagina de administrare, veti fi redirectionat la pagina curenta a prezentarii. Daca s-a blocat si nu puteti opri prezentarea, aceasta se va opri daca mergeti la <em>Plugins » Porniti o prezentare</em>';
-$lang['privacy_descrp'] = 'Aceasta prezentare arata toate modalitatile de a va proteja fotografiile de accesul public cu permisiunile pentru fiecare album si fotografie in parte si setarea permisiunii de copiere folosind protectia pe imagine.';
-$lang['first_contact_descrp'] = 'Recomandat pentru incepatori, aceasta prezentare va introduce caracteristicile de baza ale galeriei Piwigo. Va incepe prin a va arata cum sa adaugati fotografii si sa le gestionati. Prezentarea continua cu gestionarea albumului si se finalizeaza cu personalizarea galeriei, folosind setarile, temele si plugin-urile. ';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Porniti o prezentare si descoperiti facilitatile galeriei Piwigo » Mergeti la prezentarile disponibile';
-$lang['First Contact'] = 'Nume de contact';
-$lang['Visit your Piwigo!'] = 'Viziteaza galeria ta Piwigo!';
-$lang['Privacy'] = 'Confidentialitate'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/ro_RO/tour_2_7_0.lang.php b/plugins/TakeATour/language/ro_RO/tour_2_7_0.lang.php
deleted file mode 100644
index 91be6d90e..000000000
--- a/plugins/TakeATour/language/ro_RO/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-$lang['2_7_0_stp4'] = '';
-$lang['2_7_0_stp5'] = '';
-$lang['2_7_0_stp6'] = '';
-$lang['2_7_0_title4'] = 'Pagina de cautare';
-$lang['2_7_0_title5'] = 'Timpul';
-$lang['2_7_0_title6'] = 'Selecteaza scriptul';
-$lang['2_7_0_title1'] = 'Bine ai venit in Piwigo 2.7';
-$lang['2_7_0_title11'] = 'La revedere!';
-$lang['2_7_0_stp11'] = 'Turul s-a incheiat.<p style="text-align:center">Bucura-te de Piwigo 2.7!</p> Daca ti-a placut Piwigo si vrei sa ne ajuti poti contribui cu traduceri, donatii, etc. <a href="http://piwigo.org/basics/contribute" target="_blank">Apasa aici pentru a ne ajuta.</a>
-Multumim!';
-$lang['2_7_0_stp1'] = 'Buna! Eu voi fi ghidul tau in Piwigo. Te rog urmeaza instructiunile date si apasa Next (sau folseste sagetile de pe tastatura). Daca navighezi catre alta pagina vei fi redirectat catre pagina curenta a turului.';
diff --git a/plugins/TakeATour/language/ro_RO/tour_first_contact.lang.php b/plugins/TakeATour/language/ro_RO/tour_first_contact.lang.php
deleted file mode 100644
index de45cfa82..000000000
--- a/plugins/TakeATour/language/ro_RO/tour_first_contact.lang.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_stp29'] = 'Aici, pe prima pagina, vei seta configurarile de baza si pe cele esentiale ale galeriei tale';
-$lang['first_contact_stp2'] = 'Linkul se afla aici. Apasa pe el sau apasa Next sa continui';
-$lang['first_contact_stp15'] = 'In aceasta pagina poti edita toate proprietatile unei fotografii, de exemplu';
-$lang['first_contact_stp32'] = 'Acum salveaza schimbarile';
diff --git a/plugins/TakeATour/language/ro_RO/tour_privacy.lang.php b/plugins/TakeATour/language/ro_RO/tour_privacy.lang.php
deleted file mode 100644
index b5f2b2f49..000000000
--- a/plugins/TakeATour/language/ro_RO/tour_privacy.lang.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-$lang['privacy_title10'] = 'Pemisiunile albumului';
-$lang['privacy_title11'] = 'Pemisiunile albumului';
-$lang['privacy_title12'] = 'Pemisiunile albumului';
-$lang['privacy_title15'] = 'Varf';
-$lang['privacy_title17'] = 'Grupuri';
-$lang['privacy_title18'] = 'Grupuri';
-$lang['privacy_title19'] = 'Utilizatori';
-$lang['privacy_title20'] = 'Fotografii publice';
-$lang['privacy_title21'] = 'Fotografii publice';
-$lang['privacy_title24'] = 'Ne-am simtit minunat';
-$lang['privacy_title3'] = 'Permisiuni';
-$lang['privacy_title4'] = 'Permisiuni';
-$lang['privacy_title5'] = 'Permisiuni>Grupuri';
-$lang['privacy_title6'] = 'Nivel de intimitate';
-$lang['privacy_title7'] = 'Nivel de intimitate';
-$lang['privacy_title8'] = 'Nivel de intimitate';
-$lang['privacy_title9'] = 'Nivel de intimitate';
diff --git a/plugins/TakeATour/language/ru_RU/description.txt b/plugins/TakeATour/language/ru_RU/description.txt
deleted file mode 100755
index 50a93d7d7..000000000
--- a/plugins/TakeATour/language/ru_RU/description.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Узнайте больше особенностей Вашего Piwigo.
-Этот плагин имеет несколько тематических туров - для начинающих и продвинутых пользователей. \ No newline at end of file
diff --git a/plugins/TakeATour/language/ru_RU/index.php b/plugins/TakeATour/language/ru_RU/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/ru_RU/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/ru_RU/plugin.lang.php b/plugins/TakeATour/language/ru_RU/plugin.lang.php
deleted file mode 100755
index 597cce309..000000000
--- a/plugins/TakeATour/language/ru_RU/plugin.lang.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-$lang['Start the Tour'] = 'Начало тура';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Выберите тур и узнайте особенности Вашей Piwigo-галереи » Перейти к имеющимся турам';
-$lang['Visit your Piwigo!'] = 'Посети свой Piwigo!';
-$lang['takeatour_configpage'] = 'Take A Tour » Список туров';
-$lang['TAT_descrp'] = 'Добро пожаловать! Здесь перечислены все доступные туры, доступные для исследования особенностей Вашей Piwigo-галереи. <br> Запустите тур ниже, а затем следуйте инструкциям. Нажмите Далее/Назад (или используйте стрелки клавиатуры) для навигации во время тура. Во время экскурсии, если Вы перейдете к другой странице администрирования, Вы будете перенаправлены на текущей странице тура. Если Вы застряли и не можете закончить тур, переходите <em> Плагины » TakeATour</em> для завершения тура.';
-$lang['End tour'] = 'Конец тура';
-$lang['Next '] = 'Дальше';
-$lang['Prev'] = 'Назад';
-
-$lang['First Contact'] = 'Первая встреча :)';
-$lang['first_contact_descrp'] = 'Рекомендуется для новичков. Этот тур призван представить Вам Piwigo, его основные черты. Он начинается с добавления изображений, а затем - управление ими. Тур продолжается рассказом про управление альбомами и установки разрешений и заканчивается настройками, с использованием конфигурации, тем и плагинов.';
-
-$lang['2_7_0_descrp'] = 'Что нового в Piwigo 2.7';
-$lang['2.7 Tour'] = 'Тур по версии 2.7';
-
-$lang['privacy_descrp'] = 'Этот тур раскроет Вам все способы защиты изображений из публичного доступа через системы разрешений для альбомов и изображений, а также защиты изображения от копирования';
-$lang['Privacy'] = 'Конфиденциальность'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/ru_RU/tour_2_7_0.lang.php b/plugins/TakeATour/language/ru_RU/tour_2_7_0.lang.php
deleted file mode 100644
index 115368d2f..000000000
--- a/plugins/TakeATour/language/ru_RU/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_stp4'] = 'Доработана страница поиска. Теперь появились возможности выбора свойств, основанных на искомом слове, список авторов найденных в базе данных, автоматическое заполнение списка тэгов, автоматическое заполнение списка альбомов ...';
-$lang['2_7_0_stp5'] = 'Вы можете установить время в дополнение к дате, используя часовой и минутный переключатель';
-$lang['2_7_0_stp6'] = 'Поля выбора для отбора альбомов, тэги и т.д. изменились и стали еще один удобными. Проверьте это ниже.';
-$lang['2_7_0_title4'] = 'Страница поиска';
-$lang['2_7_0_title5'] = 'Время';
-$lang['2_7_0_title6'] = 'Выбор';
-$lang['2_7_0_title1'] = 'Добро пожаловать в Piwigo 2.7';
-$lang['2_7_0_title11'] = 'До скорой встречи!';
-$lang['2_7_0_title2'] = 'Первая новая функция';
-$lang['2_7_0_stp11'] = 'Этот тур окончен. <p style="text-align:center">Наслаждайтесь Вашим Piwigo 2.7!</p> Если Вам нравится Piwigo, и Вы хотите поддержать разработчиков, то Вы можете помочь с переводом на другие языки, или пожертвовав немного денежек и т.п. по Вашему желанию. <a href="http://piwigo.org/basics/contribute" target="_blank">Кликните здесь для поддержки</a> Спасибо!';
-$lang['2_7_0_stp1'] = 'Здравствуйте! Я буду Вашим гидом, чтобы соверщить маленькие открытия в Piwigo. Пожалуйста, следуйте моим указаниям и нажмите кнопку Далее (или используйте стрелки клавиатуры) для навигации. Если Вы перейдете к другой странице администрирования, Вы будете перенаправлены на текущую страницу тура.';
-$lang['2_7_0_stp2'] = 'Как Вы видите, установлен новый плагин по умолчанию - Take A Tour. Этот плагин поможет Вам узнать получше возможности Piwigo. Вот перечислены пока все доступные туры. <br> Эта страница доступна в разделе <em>Плагины » Take A Tour</em>';
-$lang['2_7_0_stp9'] = 'Фильтр поиска добавлен в пакетный менеджер. Теперь усилен синтаксис поиска изображений - по датам, тэгом, размеру, имеми файла, а также поиск с вариантами, такими как - точное соответствие, и/или, включение части искомого слова, исключение.';
-$lang['2_7_0_stp2b'] = 'Новая форма загрузки в Piwigo 2.7 основана на HTML5 вместо Flash, а значит достигнута лучшая совместимость с современными браузерами, а также повышена надежность при медленных соединениях. И принцип drag & drop при загрузке облегчит выбор файлов изображений!';
-$lang['2_7_0_stp8'] = 'Легко очистить Вашу корзинку, в один клик.';
-$lang['2_7_0_stp7'] = 'Теперь Вы можете сортировать Ваши альбомы на основе даты создания изображений или даты размещения в галерее';
-$lang['2_7_0_title2b'] = 'Новая форма загрузки';
-$lang['2_7_0_title9'] = 'Фильтр поиска';
-$lang['2_7_0_title7'] = 'Сортировать альбомы по дате';
-$lang['2_7_0_title8'] = 'Ваша корзинка пуста';
-$lang['2_7_0_stp10'] = 'В пакетном менеджере можно еще добавить фильтр по размеру файла. Вы можете выбрать диапазон с указанием минимального и максимального значения';
-$lang['2_7_0_title10'] = 'Фильтр по размеру файла'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/ru_RU/tour_first_contact.lang.php b/plugins/TakeATour/language/ru_RU/tour_first_contact.lang.php
deleted file mode 100644
index 7be2c0587..000000000
--- a/plugins/TakeATour/language/ru_RU/tour_first_contact.lang.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-$lang['first_contact_stp13'] = 'Вы можете редактировать описания и в пакетном менеджере (Batch Manager) в одиночном режиме. Но пока давайте останемся в глобальном режиме.';
-$lang['first_contact_stp14'] = 'Мы видим сейчас страницу редактирования единичного изображения. Редактировать можно отсюда, а можно и с публичной страницы изображения при входе с правами администратора. Нажмите на кнопку Редактировать или Дальше';
-$lang['first_contact_stp16'] = 'здесь можно добавить или удалить изображения из альбомов. Связь виртуальная, так что никакие изображения физически перемещаться куда-либо не будут.';
-$lang['first_contact_stp15'] = 'На этой странице Вы можете редактировать все свойства изображения, например ...';
-$lang['first_contact_stp22'] = 'Как для изображения, здесь Вы можете редактировать свойства и для альбома';
-$lang['first_contact_stp11'] = 'Итак, Вы можете выбрать здесь одно или несколько изображений';
-$lang['first_contact_stp28'] = 'Теперь мы будем смотреть на параметры, доступные для установки Piwigo, устанавливая всё под Вас. Кликните Конфигурация -> Функции, затем - кнопочку Далее.';
-$lang['first_contact_stp3'] = 'С этой вкладки Вы можете добавить изображения в галерею прямо из браузера. Остальные вкладки сделаны для других способов загрузки изображений.';
-$lang['first_contact_stp6'] = 'Вы видите список изображений, имеющихся в настоящее время. Добавьте по крайней мере 2 изображения, и, когда Вы будете готовы, нажмите кнопку Начать загрузку';
-$lang['first_contact_stp41'] = 'Вы можете увидеть на последней вкладке все плагины, доступные для Вашей версии Piwigo. Сотни плагинов готовы для Вас!';
-$lang['first_contact_stp29'] = 'Здесь, на этой первой странице, Вы установите необходимую и базовую конфигурацию Вашей галереи.';
-$lang['first_contact_stp30'] = 'Давайте начнем с изменения заголовка';
-$lang['first_contact_stp32'] = 'Теперь сохраните свои изменения';
-$lang['first_contact_stp8'] = 'Давайте редактировать их! Нажмите на ссылку. Если Вы ничего не видите, то нажмите кнопочку Назад, чтобы добавить минимум 2 изображения.';
-$lang['first_contact_stp9'] = 'Как Вы знаете, с плагином Batch Manager, Вы можете редактировать сразу партию из нескольких изображений (оптом).';
-$lang['first_contact_stp2'] = 'Ссылка для добавления изображений находится здесь. Нажмите кнопку Далее, чтобы продолжить.';
-$lang['first_contact_title1'] = 'Добро пожаловать в Вашу Piwigo-галерею ';
-$lang['first_contact_stp4'] = 'Для начала выберите альбом; создайте его, если еще нет ни одного альбома.';
-$lang['first_contact_stp40'] = 'Вот это я! Не отключайте меня сейчас - Вы можете увидеть кнопки "Отключить" или "Включить" в активном плагине.';
-$lang['first_contact_title11'] = 'Как редактировать изображения';
-$lang['first_contact_title15'] = 'Страница редактирования картинки';
-$lang['first_contact_title18'] = 'Управление альбомами';
-$lang['first_contact_title19'] = 'Управление альбомами';
-$lang['first_contact_title20'] = 'Управление альбомами';
-$lang['first_contact_title21'] = 'Другие вкладки';
-$lang['first_contact_title22'] = 'Редактирование страницы альбома';
-$lang['first_contact_title28'] = 'Конфигурация';
-$lang['first_contact_title29'] = 'Конфигурация -> Свойства -> Главные';
-$lang['first_contact_title3'] = 'Добавить страницу изображения';
-$lang['first_contact_title33'] = 'Установки гостя';
-$lang['first_contact_title34'] = 'Темы';
-$lang['first_contact_title35'] = 'Темы';
-$lang['first_contact_title37'] = 'Темы';
-$lang['first_contact_title38'] = 'Плагины';
-$lang['first_contact_title39'] = 'Плагины';
-$lang['first_contact_title4'] = 'Давайте добавим изображение!';
-$lang['first_contact_title43'] = 'Это было прекрасное время';
-$lang['first_contact_title9'] = 'Плагин The Batch Manager';
-$lang['first_contact_stp1'] = 'Здравствуйте! Я буду Вашим гидом, чтобы соверщить маленькие открытия в Piwigo. Пожалуйста, следуйте моим указаниям и нажмите кнопку Далее (или используйте стрелки клавиатуры) для навигации. Если Вы перейдете к другой странице администрирования, Вы будете перенаправлены на текущую страницу тура. Если Вы застряли и не можете закончить тур, переходите <em> Плагины » TakeATour</em> для завершения тура. <br> Давайте начнем с добавления изображений!';
-$lang['first_contact_stp10'] = 'Вот ссылка для прямого доступа к Вашей корзинке - это такой инструмент для администраторов, с которым легко добавлять изображения к набору для того, чтобы редактировать их все вместе в Batch Manager. Вы можете добавить изображения в корзинку с публичной страницы изображения при входе в качестве администратора или с помощью действий "Добавить в корзинку" в самОм пакетном менеджере';
-$lang['first_contact_stp31'] = 'Теперь баннер, который будет отображаться на верхней части каждой страницы. Как Вы можете видеть, допускается использовать и HTML-тэги. Вы также можете использовать тэг % gallery_title % для отображения заголовка, который Вы только что ввели выше.';
-$lang['first_contact_stp33'] = 'Наконец, в завершение - о вариантах страницы "Настройки гостя". Это установка предпочтений для незарегистрированных посетителей. Каждый раз Piwigo относится как к гостю к любому из незарегистрированных посетителей. <br> Давайте продолжим о настройках: нажмите на Конфигурация -> Темы или просто нажмите Далее.';
-$lang['first_contact_stp20'] = 'Когда мышь наведена на альбом, появляются ссылки и информация. Когда Вы перетащите альбом - округлый блок - Вы измените его позицию относительно остальных, а затем Вы можете сохранить или отменить ручную сортировку.';
-$lang['first_contact_stp23'] = 'Блокировка альбома означает, что только администраторы смогут видеть, что находится в альбом. Эту функцию обычно используют, пока администратор настраивает необходимые свойства альбома или, если не хотят немедленно опубликовать альбом';
-$lang['first_contact_stp37'] = 'Чтобы установить новые темы, Вы можете напрямую загрузить их на вкладке "Добавить тему". На вкладке отображаются только темы, совместимые с Вашей версией Piwigo.<br> А теперь давайте узнаем кое-что про плагины! Нажмите на Плагины -> Управление';
-$lang['first_contact_stp38'] = 'Плагины - очень легкий путь настроить Ваш Piwigo. Они могут делать почти всё, что Вы можете вообразить: от небольших дополняющих текстовых пометочек, до возможностей плагина Community, который позволяет пользователям загружать свои изображения, без обладания правами администратора.';
-$lang['first_contact_stp39'] = 'На этой странице перечислены установленные плагины. Сверху показаны активированные плагины, которые в настоящее время работают. Снизу - плагины, которые установлены в папке плагинов, но отключены. Удаление плагина означает, что все следы плагина будут удалены (файлы, параметры и т.д.). Для большинства плагинов: после отключения сохранятся данные, зарегистрированные плагином.';
-$lang['first_contact_stp43'] = 'Этот тур был весьма длинным, но мы увидели только незначительную часть всей мощи Piwigo. Всё имеет конец, вот и этот краткий обзор закончен. <br> Вы можете обнаружить гораздо больше классных особенностей Piwigo, выбрав другие туры или читая нашу документацию на веб-сайтах piwigo.org и ru.piwigo.org';
-$lang['first_contact_stp7'] = 'Здесь краткое описание Ваших загруженных изображений. Как видите, Piwigo создал эскизы-миниатюрки. Вы можете узнать, как еще добавлять изображения по ссылке внизу, редактировать свойства изображения, нажав на него, или нажмите кнопку для управления всеми загруженными изображениями в плагине Batch Manager...';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_stp17'] = 'Здесь вы можете установить изображение в качестве миниатюры (эскиза) одного или нескольких альбомов. Изображение не обязано быть связанным с альбомом, чтобы быть его миниатюрой. Если изображение находится в альбоме, то еще проще установить его как миниатюру альбома со страницы самогО изображения (Подсказка: Используйте для большего упрощения плагин Admin Tools)';
-$lang['first_contact_stp19'] = 'Здесь список "корневых" альбомов. Если вы видите альбом с пунктирами на фоне, это означает, что это физический альбом и он закачан и/или синхронизирован по FTP. Физические альбомы не могут быть перемещены или удалены отсюда. Остальные альбомы называются виртуальными.';
-$lang['first_contact_stp21'] = 'Следующая вкладка — это страница, где Вы можете переместить любой виртуальный альбом. <br> Вкладка "Постоянная ссылка" сделана для того, чтобы Вы могли установить там конкретный URL для альбома по Вашему желанию.<br> Но давайте отредактируем альбом: нажмите на Редактирование альбома';
-$lang['first_contact_stp34'] = 'Выбор темы является первым шагом для настройки Вашего Piwigo. Установленные темы перечислены здесь. <br> Можно включить и больше одной темы: пользователи смогут изменить тему "для себя", выбрав среди вариант их включенных здесь, если на странице параметров Вами выбран параметр «Разрешить пользовательские настройки».';
-$lang['first_contact_stp5'] = 'Нажмите кнопку, чтобы выбрать изображения для отправки, или просто перетащите Ваши файлы.';
-$lang['first_contact_stp12'] = 'затем редактировать их с помощью действия';
-$lang['first_contact_stp18'] = 'Давайте сейчас посмотрим, как управлять альбомами. Перейдите <em>Альбом » Управление</em> или нажмите Далее';
-$lang['first_contact_stp19_b'] = 'Вот список "корневых" альбомов';
-$lang['first_contact_stp35'] = 'Установить свою любимую тему в качестве темы "по умолчанию"'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/ru_RU/tour_privacy.lang.php b/plugins/TakeATour/language/ru_RU/tour_privacy.lang.php
deleted file mode 100644
index 5a957f8d1..000000000
--- a/plugins/TakeATour/language/ru_RU/tour_privacy.lang.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-$lang['privacy_stp1'] = 'Здравствуйте! Я буду Вашим гидом, чтобы объяснить, как защитить Ваши изображения в Piwigo. Пожалуйста, следуйте моим указаниям, и нажимайте кнопку Далее (или используйте стрелки клавиатуры) для навигации. Если Вы переходите с другой страницы, Вы будете перенаправлены на текущую страницу Тура. Если в ходе тура что-то "зависло" или что-то пошло не так, то перейдите <em>Плагины » Take A Tour</em> для окончания тура.<br> Давайте начнём!';
-$lang['privacy_stp11'] = 'Теперь кликните вкладку "Разрешения"';
-$lang['privacy_stp4'] = 'Итак, у нас есть две системы для управления разрешениями для доступа к изображениям. Они независимы, так что Вы можете создать группу под названием Семья, но эта группа не будет иметь ничего общего с уровнем конфиденциальности "Семья".<br><br> Уровни конфиденциальности применяются для изображений, и разрешения пользователя/группы применяются для альбомов. Вы можете использовать обе или только одну систему, как Вам будет удобнее и интереснее. <br><br> Следующая вкладка — Управление группами.';
-$lang['privacy_stp10'] = 'Мы находимся в управлении Списком альбомов, доступном для использования через меню <em>Альбомы » Управление</em> <br><br> Редактировать свойства альбома можно, наведя на него мышью и затем нажав кнопку Изменить.';
-$lang['privacy_stp7'] = '... или Вы можете сделать это чуть позже, через Batch Manager - пакетный менеджер управления в глобальном режиме.<br><br> Это на странице <em>Фотографии » Недавние фотографии</em> по фильтру "Последние добавленные".';
-$lang['privacy_stp5'] = 'Ниже объясняется, как Вы можете управлять группами. <br> Эти разрешения только для доступа к изоюбражениям и альбомам, при просмотре в публичной части или для внешних приложений. Позже мы увидим и другие средства защиты, а теперь можно попрактиковаться!';
-$lang['privacy_stp9'] = '... И выберите действие "Кто может смотреть фотографии?». Теперь Вы можете изменить уровень конфиденциальности выбранных фотографий. <br><br> Но Вы также можете сделать это и для конкретного изображения, на его странице. Вы можете получить доступ к ней из публичной части или отсюда. <br><br> Сейчас я покажу Вам другую систему разрешений для альбомов на основе групп и пользователей.';
-$lang['privacy_stp6'] = 'Когда Вы загружаете изображения, Вы можете изменить уровень конфиденциальности прямо во время загрузки...';
-$lang['privacy_stp12'] = 'На этой странице Вы можете выбрать, будет ли альбом доступен для всех или будут включены ограничения доступа для некоторых пользователей';
-$lang['privacy_stp2'] = 'Здесь Вы можете получить доступ к интегрированной справки. Нажмите кнопку Далее, чтобы перейти непосредственно на страницу справки об управлении разрешениями.';
-$lang['privacy_stp3'] = 'Найдите минутку, чтобы прочитать информацию ниже.';
-$lang['privacy_stp16'] = 'Как и на Вашем компьютере, Вы можете выбрать несколько альбомов с помощью клавиш, а затем нажмите на стрелку, чтобы переключить их.';
-$lang['privacy_stp15'] = 'Совет про группировки: вот ссылка на страницу, где можно установить признак общего/частного на несколько альбомов одновременно. Кликните здесь.';
-$lang['privacy_stp14'] = 'Затем пользователям и группам пользователей может быть предоставлен доступ к альбому.';
-$lang['privacy_stp13'] = 'Сейчас кликните на "Частный"';
-$lang['privacy_title1'] = 'Добро пожаловать в Тур "Конфиденциальность"';
-$lang['privacy_title12'] = 'Разрешения альбома';
-$lang['privacy_title9'] = 'Уровень конфиденциальности';
-$lang['privacy_title7'] = 'Уровень конфиденциальности';
-$lang['privacy_title8'] = 'Уровень конфиденциальности';
-$lang['privacy_title6'] = 'Уровень безопасности';
-$lang['privacy_title5'] = 'Разрешения > Группы';
-$lang['privacy_title4'] = 'Разрешения';
-$lang['privacy_title3'] = 'Разрешения';
-$lang['privacy_title15'] = 'Совет';
-$lang['privacy_title2'] = 'Помощь в Вашем Piwigo';
-$lang['privacy_stp8'] = 'Выберите одно или несколько изображений...';
-$lang['privacy_title10'] = 'Разрешения альбома';
-$lang['privacy_title11'] = 'Разрешения альбома';
-$lang['privacy_stp24'] = 'Этот тур окончен. <p style="text-align:center">Наслаждайтесь Вашим Piwigo</p> Если Вам нравится Piwigo, и Вы хотите поддержать разработчиков, то Вы можете помочь с переводом на другие языки, или пожертвовав немного денежек и т.п. по Вашему желанию. <a href="http://piwigo.org/basics/contribute" target="_blank">Кликните здесь для поддержки</a> Спасибо!';
-$lang['privacy_stp18'] = 'Для добавления или удаления пользователей в группах перейдите на страницу <em>Пользователи » Управление</em>';
-$lang['privacy_title17'] = 'Группы';
-$lang['privacy_title18'] = 'Группы';
-$lang['privacy_title19'] = 'Пользователи';
-$lang['privacy_title20'] = 'Публичные изображения';
-$lang['privacy_title21'] = 'Публичные изображения';
-$lang['privacy_title22'] = 'Локальная конфигурация: оригинальная защита';
-$lang['privacy_title24'] = 'Это было прекрасное время';
-$lang['privacy_stp19'] = 'Здесь Вы можете быстро отредактировать свойства одного пользователя, наведя на его имя курсором мыши, а затем нажав на кнопочку Изменить. <br> <br> Вы можете выбрать несколько пользователей и сразу редактировать их свойства, затем выбрать кнопку Применить.';
-$lang['privacy_stp21'] = 'Решение: <ul><li>установите водяной знак, по крайней мере, на изображения высокой и средней четкости </li><li>и отключите XL и XXL размеры </li><li>и отключите HD (высокое разрешение) для загрузки и отображения изображений для соотвествующих пользователей.';
-$lang['privacy_stp22'] = '<em>Для опытных пользователей</em><br><br> В Piwigo Вы можете защитить оригиналы изображений, пользуясь Вашей локальной конфигурацией. Используйте переменную $conf[\'original_url_protection\']. По умолчанию переменная - пустая. Укажите "images" для защиты только изображений, или "all" - для защиты всех мультимедийных данных.<br><br> Эта опция работает и для общего и для частного содержимого. Этот выбор в настоящий момент требует, чтобы Вы исключили доступ к папкам /upload и /galleries, используя файл .htaccess (обычно текстовый файл с общим запретом для всего содержимого) или с помощью конфигурации сервера. <br><br>
-Обратите внимание, что имена файлов изображений, загруженных на сайт любым методом, кроме FTP, задаются им <b>случайно</b>, их невозможно угадать: поэтому имя файла и путь к исходному изображению могут быть известны только если посетитель имеет доступ к картинкам с измененным размером изображения, например, к миниатюре. $conf[\'original_url_protection\'] и запрет доступа к папкам /upload и /galleries позволят избежать этого.';
-$lang['privacy_stp20'] = 'Теперь Вы знаете, как сохранить свои изображения в секрете, но Вы можете задаться вопросом, как защитить Ваши общедоступные изображения. Вы могли бы сначала подумать о блокировке возможности скачивать изображения посетителем. Но, из-за принципа веб-строительства, в полной мере такой запрет установить нельзя (браузер посетителя всё равно скачает все отображаемые ресурсы). Конечно, можно отключить контекстное меню, вызываемое правой кнопкой мыши, можно поставить пустой слой над поверхностью изображения и т.д., но это не будет абсолютной защитой от загрузки. Полные веб-страницы может сохранить любой браузер.';
-$lang['privacy_stp17'] = 'Группа в Piwigo - это просто набор пользователей: группы создаются для облегчения управления свойствами пользователей и их доступом к альбомам. На этой странице Вы можете управлять группами - переименовывать, объединять, создавать дубликаты, удалять их и т.д. Вы также можете установить одну или несколько групп в качестве "группы по умолчанию"; это означает, что вновь зарегистрированные пользователи будут присоединены к этим группам, установленным по умолчанию.';
-$lang['privacy_title14b'] = '';
-$lang['privacy_stp14b'] = 'Важный факт: веб-мастера и администраторы могут не охватить взглядом все имеющиеся картинки в открытой части, но они могут получить доступ к каждому альбому и изображению в админской части галереи.';
diff --git a/plugins/TakeATour/language/sk_SK/description.txt b/plugins/TakeATour/language/sk_SK/description.txt
deleted file mode 100755
index db294be43..000000000
--- a/plugins/TakeATour/language/sk_SK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Navštívte svoje Piwigo a objavujte jeho vlastnosti. Tento doplnok má niekoľko tematických ukážok pre začiatočníkov aj pokročilých používateľov. \ No newline at end of file
diff --git a/plugins/TakeATour/language/sk_SK/index.php b/plugins/TakeATour/language/sk_SK/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/sk_SK/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/sk_SK/plugin.lang.php b/plugins/TakeATour/language/sk_SK/plugin.lang.php
deleted file mode 100755
index d5eed6b91..000000000
--- a/plugins/TakeATour/language/sk_SK/plugin.lang.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['TAT_descrp'] = 'Vitajte! Tu sú uvedené všetky dostupné postupy, ako spoznať vlastnosti galérie Piwigo. <br><br>Spustite prehliadku nižšie a postupujte podľa pokynov. Kliknite na tlačidlo Nasledujúce/Predchádzajúce (alebo pomocou šipiek na vašej klávesnici) pre navigáciu počas prehliadky. Počas prehliadky, keď idete na inú stránku administrácie, budete presmerovaný na aktuálnu stránku prehliadky. Ak neviete ukončiť prehliadku, kliknite na <em>Doplnky » Urobte si prehliadku</em> a prehliadka skončí.';
-$lang['first_contact_descrp'] = 'Doporučené pre začiatočníkov, táto prehliadka vám predstaví Piwigo, jeho základné funkcie. Začne pridávním fotky, následne jej spravovaním. Prehliadka pokračuje so správou albumu a oprávneniami a končí prispôsobením pomocou nastavení tém a doplnkov.';
-$lang['privacy_descrp'] = 'Táto prehliadka predstavuje všetky spôsoby, ako chrániť svoje fotografie pred prístupom verejnosti na základe povolenia systémov v albume, na fotografiu a kopírovanie pomocou ochrany fotky.';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Urobte si vprehliadku a objavte funkcie Vašej Piwigo galérie » Prejsť na dostupné prehliadky';
-$lang['takeatour_configpage'] = 'Urobte si prehliadku » Zoznam prehliadok';
-$lang['Start the Tour'] = 'Začnite prehliadku';
-$lang['Visit your Piwigo!'] = 'Navštívte Vaše Piwigo!';
-$lang['Prev'] = 'Predchádzajúce';
-$lang['Next '] = 'Nasledujúce';
-$lang['First Contact'] = 'Prvý kontakt';
-$lang['End tour'] = 'Koniec prehliadky';
-$lang['2_7_0_descrp'] = 'Zistite, čo je nové v Piwigo 2.7';
-$lang['2.7 Tour'] = '2.7 Tour';
-$lang['Privacy'] = 'O ochrane osobných údajov'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/sk_SK/tour_2_7_0.lang.php b/plugins/TakeATour/language/sk_SK/tour_2_7_0.lang.php
deleted file mode 100755
index aac2c11ed..000000000
--- a/plugins/TakeATour/language/sk_SK/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['2_7_0_stp11'] = 'Táto prehliadka je na konci.<p style ="text-align: center">Užite si Piwigo 2.7!</p>Ak sa vám páči Piwigo a chcete nás podporiť, môžete prispieť tým, že urobíte preklady, finančne nás podporíte, atď.<a href="http://piwigo.org/basics/contribute"target="_blank"> Kliknite tu, aby ste nás podporili</a>Vďaka!';
-$lang['2_7_0_stp2'] = 'Ako môžete vidieť, nový predvolený doplnok bol pridaný: Pozrite sa na Tour. Tento doplnok vám pomôže objaviť svoje Piwigo. Tu je miesto, kde sú uvedené všetky dostupné možnosti.<br>Táto stránka je k dispozícii v <em>Doplnky » Možnosti Tour </em>';
-$lang['2_7_0_stp2b'] = 'Nový formulár pre nahrávanie v Piwigo 2.7 je založený na HTML5 miesto Flashu, to znamená, že má lepšiu kompatibilitu s modernými webovými prehliadačmi, rovnako ako zvýšenie spoľahlivosti na pomalé pripojenie. A drag & drop bude fotky vyberať oveľa jednoduchšie z vášho prehliadača súborov!';
-$lang['2_7_0_stp4'] = 'Stránka vyhľadávania bola prepracovaná: schopnosť vybrať vlastnosti, na ktoré sa vzťahuje hľadané slovo, zoznam autorov nájdených v databáze, auto-kompletný zoznam kľúčových slov, auto-kompletný zoznam albumov ...';
-$lang['2_7_0_stp9'] = 'Vyhľadávací filter bol pridaný do manažéra dávky. Dodáva sa s výkonným syntax vyhľadávaním fotiek na termíny, značky, veľkosti, názvu súboru a tiež možnosti, ako je presná zhoda vyhľadávania a/alebo zoskupovanie, vylúčenie. Môžete si prečítať podrobnú nápovedu neskôr. Syntax je rovnaká, platí pre rýchle vyhľadávanie poľa v ponuke verejnej stránky ďalej.';
-$lang['2_7_0_stp10'] = 'Filter na veľkosť súboru bol tiež pridaný do manažéra dávky. Môžete si vybrať rozsah s minimálnou a maximálnou hodnotou.';
-$lang['2_7_0_stp1'] = 'Dobrý deň! Budem vaším sprievodcom pri objavovaní Piwigo. Prosím, postupujte podľa mojich inštrukcií a kliknite na tlačidlo Ďalej (alebo pomocou šípok na vašej klávesnici) pre navigáciu. Ak sa vydáte na druhú stranu, budete presmerovaný na aktuálnu stránku na Tour.';
-$lang['2_7_0_stp6'] = 'Označovací box pre uchopenie albumu, kľúčové slová atď sa zmenil na nový užívateľsky príjemný. Otestujte ho tu';
-$lang['2_7_0_stp5'] = 'Môžete nastaviť dobu, okrem dátumu, hodiny a minúty pomocou posuvníkov';
-$lang['2_7_0_stp7'] = 'Teraz môžete triediť albumu podľa dátumu vytvorenia fotografií alebo dátumu vloženia';
-$lang['2_7_0_stp8'] = 'Jednoduché kroky na vyprázdnenie caddy jedným kliknutím.';
-$lang['2_7_0_title10'] = 'Filter veľkosti súboru';
-$lang['2_7_0_title11'] = 'Uvidíme sa čoskoro!';
-$lang['2_7_0_title2'] = 'Prvá nová funkcia';
-$lang['2_7_0_title2b'] = 'Nový odosielací formulár';
-$lang['2_7_0_title4'] = 'Vyhľadávacia stránka';
-$lang['2_7_0_title6'] = 'Vyberte boxy';
-$lang['2_7_0_title8'] = 'Vyprázdniť caddy';
-$lang['2_7_0_title9'] = 'Vyhľadávací filter';
-$lang['2_7_0_title7'] = 'Zotriediť albumy podľa dátumu';
-$lang['2_7_0_title5'] = 'Čas';
-$lang['2_7_0_title1'] = 'Vitajte v Piwigo 2.7'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/sk_SK/tour_first_contact.lang.php b/plugins/TakeATour/language/sk_SK/tour_first_contact.lang.php
deleted file mode 100755
index cb017fd62..000000000
--- a/plugins/TakeATour/language/sk_SK/tour_first_contact.lang.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['first_contact_title15'] = 'Upravenie stránky fotky';
-$lang['first_contact_title18'] = 'Spravuj albumy';
-$lang['first_contact_title19'] = 'Správa Albumov';
-$lang['first_contact_title20'] = 'Správa Albumov';
-$lang['first_contact_title21'] = 'Ostatné Taby';
-$lang['first_contact_title22'] = 'Stránka Úpravy Albumu';
-$lang['first_contact_title28'] = 'Konfigurácia';
-$lang['first_contact_title3'] = 'Stránka Pridania Fotky';
-$lang['first_contact_title34'] = 'Témy';
-$lang['first_contact_title35'] = 'Témy';
-$lang['first_contact_title37'] = 'Témy';
-$lang['first_contact_title4'] = 'Pridajme fotku!';
-$lang['first_contact_title9'] = 'Správca Skupín';
-$lang['first_contact_stp35'] = 'Nastav svoju obľúbenú tému ako prednastavenú.';
-$lang['first_contact_stp4'] = 'Najsôr vyber album, alebo vytvor jeden ak žiadny neexistuje.';
-$lang['first_contact_stp5'] = 'Potom klikni na tlačítko pre výber fotiek, ktoré chceš poslať, alebo zober a presuň svoje súbory.';
-$lang['first_contact_stp6'] = 'Môžeš vidieť, že fotky sa listujú. Ak si pripravený/á klikni na tlačítko Začni Nahrávať';
-$lang['first_contact_stp8'] = 'Upravme ich! Klikni sa na linku.';
-$lang['first_contact_title1'] = 'Vitaj vo svojej Piwigo galérii';
-$lang['first_contact_title11'] = 'Ako upraviť fotku';
-$lang['first_contact_stp29'] = 'Tuto, na prvej strane, nastavíš hlavnú konfiguráciu svojej galérie.';
-$lang['first_contact_stp1'] = 'Ahoj! Budem tvojim sprievodcom objavovania Piwiga. Nasleduj moje inštrukcie, a klikni Ďalej (alebo použi šípky na klávesnici) pre navigáciu. Ak prejdeš na ďalšiu stranu administrácie, budeš presmerovaný/á na túto stranu tejto prehliadky. Ak sa zasekneš a nemôžeš ukončiť prehliadku, prejdením na <em>Pluginy » Začni Prehliadku</em> ukončí prehliadku.<br>Začnime pridávaním fotiek!';
-$lang['first_contact_stp18'] = 'Pozrime sa teraz ako spravovať albumy. Klikni <em>Na album » Spravovať</em> alebo stlač Ďalej';
-$lang['first_contact_stp19_b'] = 'Tu sú vylistované \'koreňové\' albumy.';
-$lang['first_contact_stp2'] = 'Linka sa nachádza tu. Klikni na ňu alebo klikni na Ďalej pre pokračovanie';
-$lang['first_contact_stp22'] = 'Ako pre fotku, tu môžeš upraviť vlastnosti albumu';
-$lang['first_contact_stp30'] = 'Začneme zmenou titulky';
-$lang['first_contact_stp32'] = 'Teraz ulož svoje zmeny';
-$lang['first_contact_stp11'] = 'Odtialto môžeš zvoliť jednu alebo viac fotiek';
-$lang['first_contact_stp12'] = 'potom ich môžeš upravovať použitím akcie';
-$lang['first_contact_stp13'] = 'Môžeš upravovať popisy a iné pomocou manažéra skupín v samostatnom móde. Ale zatiaľ zostaneme v globálnom móde. ';
-$lang['first_contact_stp15'] = 'Na tejto stránke môžeš editovať všetky vlastnosti fotky, napríklad...';
-$lang['first_contact_stp16'] = '...v ktorom/ktorých albume/albumoch sa táto fotka nachádza.<br><br>Takže tu môžeš pridať alebo odobrať túto fotku z albumov. Táto linka je virtuálna, takže žiadne fotky sa v skutočnosti nepresúvajú.';
-$lang['first_contact_title43'] = 'Bude to nádherný čas';
-$lang['first_contact_title33'] = 'Nastavenie návštevníka';
-$lang['first_contact_title39'] = 'Doplnky';
-$lang['first_contact_title38'] = 'Doplnky'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/sl_SI/description.txt b/plugins/TakeATour/language/sl_SI/description.txt
deleted file mode 100755
index 3eb301c9a..000000000
--- a/plugins/TakeATour/language/sl_SI/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Oglejte si vašo Piwigo galerijo in spoznajte njene lastnosti in možnosti. Ta vtičnik ima več tematskih predstavitev za začetnike in napredne uporabnike. \ No newline at end of file
diff --git a/plugins/TakeATour/language/sl_SI/index.php b/plugins/TakeATour/language/sl_SI/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/sl_SI/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/sl_SI/plugin.lang.php b/plugins/TakeATour/language/sl_SI/plugin.lang.php
deleted file mode 100755
index 4e5818fa8..000000000
--- a/plugins/TakeATour/language/sl_SI/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['TAT_descrp'] = 'Pozdravljeni v predstavitvi galerije!!<br>
-Tu so prikazane vse razpoložljive predstavitve preko katerih lahko spoznate značilnosti vaše galerije Piwigo. <br> Izberite eno od spodnjih predstavitev, nato pa sledite navodilom. Kliknite Naprej / Nazaj (ali uporabite puščice na tipkovnici) za navigacijo med predstavitvijo.<br>Če greste med predstavitvijo na drugo stran administracije, boste preusmerjeni na trenuto stran predstavitve. Če ste obtičali in ne more končati predstavitve, pojdite na <em>Vtičniki >> Začni predtavitev</ em>! S tem boste končali predstavitev.';
-$lang['Start the Tour'] = 'Prični s Predstavitvijo';
-$lang['Prev'] = 'Nazaj';
-$lang['Next '] = 'Naprej';
-$lang['End tour'] = 'Konec predstavitve';
-
-$lang['First Contact'] = 'Prvi Kontakt';
-
-$lang['2.7 Tour'] = '2.7 Predstavitev';
-$lang['2_7_0_descrp'] = 'Odkrijte kaj je novega v Piwigo 2.7';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Oglejte si predstavitev in odkrijte značilnosti galerije Piwigo » Pojdite na predstavitve ki so na voljo';
-$lang['Privacy'] = 'Zasebnost';
-$lang['Visit your Piwigo!'] = 'Oglejte si vaš Piwigo!';
-$lang['takeatour_configpage'] = 'Začni predtavitev';
-$lang['privacy_descrp'] = 'Ta predstavitev vam prikaže vse možnosti zaščite fotografij pred javnim dostopom s pomočjo nastavitev pravic po Albumih in po fotografijah in zaščito pred kopiranjem z uporabo zaščite fotografij ';
-$lang['first_contact_descrp'] = 'Ta predstavitev je namenjena začetnikom, predstavi vam osnovne lastnosti Piwigo galerije in se prične s predstavitvijo kako dodati fotografije in jih nato upravljati. Predstavitev se nadaljuje z upravljanjem Albumov in se konča s predstavitvijo prilagajanja Piwigo z uporabo Konfiguracije, spreminjanje izgleda (Teme) in uporabo Vtičnikov.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/sl_SI/tour_2_7_0.lang.php b/plugins/TakeATour/language/sl_SI/tour_2_7_0.lang.php
deleted file mode 100644
index 3727ba784..000000000
--- a/plugins/TakeATour/language/sl_SI/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-$lang['2_7_0_stp4'] = 'Stran Iskanja je bila prenoveljena: možnost izbire lastnosti na katero se nanaša iskana beseda, seznam avtorjev najdenih v podatkovni bazi, samodejno dokončani seznam oznak, samodejno dokončani seznam albumov...';
-$lang['2_7_0_stp5'] = 'Poleg datuma lahko z uporabo drsnikov Ura in Minute nastavite tudi čas';
-$lang['2_7_0_stp6'] = 'Izbirnik polj za izbrane albume, oznake itd. je spremenjen in je bolj prijazen uporabniku.
-Preizkusite tu spodaj.';
-$lang['2_7_0_title4'] = 'Stran iskanja';
-$lang['2_7_0_title5'] = 'Čas';
-$lang['2_7_0_title6'] = 'Izberi sklope';
-$lang['2_7_0_title2'] = 'Prva nova funkcija';
-$lang['2_7_0_title11'] = 'Vidimo se kmalu!';
-$lang['2_7_0_title1'] = 'Dobrodošli v Piwigo 2.7';
-$lang['2_7_0_stp2'] = 'Kot lahko vidite, je bil dodan nov privzet vtičnik: Oglejte si predstavitev. Ta vtičnik vam pomaga, da spoznate Piwigo. Tu so navedene vse razpoložljive predstavitve. <br> Predstavitve so na voljo v <em> Vtičniki >> Začni predtavitev </em>';
-$lang['2_7_0_stp11'] = 'Ta predstavitev je končana. <p style="text-align:center"> Uživajte v Piwigo 2.7! </p> Če vam je všeč Piwigo in želite, podpreti naš projekt, lahko prispevate s pomočjo prevodov, donacijami, itd. <a href= "http://piwigo.org/basics/contribute" target = "_blank"> Za podporo kliknite tukaj. Hvala! </a>';
-$lang['2_7_0_stp1'] = 'Pozdravljeni! Jaz bom vaš vodič, pri spoznavanju Piwigo. Prosimo, da sledite mojim navodilom, in kliknite Naprej (ali uporabite puščice na tipkovnici) za navigacijo. Če greste na drugo stran, boste preusmerjeni na trenutno stran Predstavitve.';
-$lang['2_7_0_stp10'] = 'Dodan je bil tudi Filter velikosti datoteke v Skupinski urejevalnik. Izberete lahko razpon men min. in max vrednostjo.';
-$lang['2_7_0_stp9'] = 'Iskalni filter je bil dodan v Skupinski urejevalnik. Vsebuje mogočno sintakso za iskanje fotografij po datumu, oznakah, velikosti, imenu datoteke, pa tudi iskalne možnosti, kot natančno ujemanje, IN/ALI, grupiranje, izključitev...; Podrobno pomoč lahko preberete kasneje. Ista sintaksa velja za polje hitrega iskanja na meniju javne strani.';
-$lang['2_7_0_stp7'] = 'Sedaj lahko vaše albume razvrstite po datumu nastanka fotografij ali po datumu objave fotografij';
-$lang['2_7_0_stp8'] = 'Preprosta povezava za izpraznitev vaše košarice z enim klikom';
-$lang['2_7_0_stp2b'] = 'Nov obrazec za nalaganje slik v Piwigo 2.7 temelji na HTML5 namesto Flash obrazca, kar pomeni boljšo skladnost z modernimi brskalniki in večjo zanesljivost pri počasnih povezavah. Možnost povleci & spusti močno poenostavi izbor slik iz vašega računalnika, ki jih želite dodati v galerijo Piwigo.';
-$lang['2_7_0_title7'] = 'Razvrstitev albumov po datumu';
-$lang['2_7_0_title2b'] = 'Nov obrazec nalaganja';
-$lang['2_7_0_title10'] = 'Filter velikosti datoteke';
-$lang['2_7_0_title8'] = 'Izpraznite vašo košarico';
-$lang['2_7_0_title9'] = 'Iskalni filter'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/sl_SI/tour_first_contact.lang.php b/plugins/TakeATour/language/sl_SI/tour_first_contact.lang.php
deleted file mode 100644
index 51a87f5c2..000000000
--- a/plugins/TakeATour/language/sl_SI/tour_first_contact.lang.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
diff --git a/plugins/TakeATour/language/sr_RS/description.txt b/plugins/TakeATour/language/sr_RS/description.txt
deleted file mode 100755
index 825435b8d..000000000
--- a/plugins/TakeATour/language/sr_RS/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Посетите ваш Piwigo да откријете његове могућности. Овај додатак има више кратких обиласка кроз галерију, од оних за почетнике фо оних за напредне кориснике. \ No newline at end of file
diff --git a/plugins/TakeATour/language/sr_RS/index.php b/plugins/TakeATour/language/sr_RS/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/sr_RS/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/sr_RS/plugin.lang.php b/plugins/TakeATour/language/sr_RS/plugin.lang.php
deleted file mode 100755
index e7e57cc87..000000000
--- a/plugins/TakeATour/language/sr_RS/plugin.lang.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['takeatour_configpage'] = 'Крени у обилазак » Списак обиласка';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Крените у обилазак занимљивих могућности Piwigo галерије » Иди на доступне обиласке';
-$lang['Visit your Piwigo!'] = 'Посетитеве вашу Piwigo галерију!';
-$lang['first_contact_descrp'] = 'Ово упутство је препоручљиво за почетнике пошто вас води кроз основне могућности Piwigo галерије. Обилазак почиње додавањем нових слика и њиховим управљањем, а затим вас води кроз управљање албума и фино подешавање ваше галерије, тема и додатака.';
-$lang['privacy_descrp'] = 'Овај обилазак ће вам показати све начине за заштиту приступа вашим фотографијама, укључујући дозволу по албуму, по слици и забрану копирања преко заштите слика.';
-$lang['2.7 Tour'] = 'Обилазак верзије 2.7';
-$lang['2_7_0_descrp'] = 'Откријте шта је ново у Piwigo верзији 2.7';
-$lang['End tour'] = 'Крај обиласка';
-$lang['First Contact'] = 'Први контакт';
-$lang['Next '] = 'Наредно';
-$lang['Prev'] = 'Претходно';
-$lang['Privacy'] = 'Приватност';
-$lang['Start the Tour'] = 'Започни обилазак';
-$lang['TAT_descrp'] = 'Добродошли! Овде се налази списак доступних упутстава која ће вас провести кроз Piwigo галерију.<br><br>Покрените неки од обиласка, а затим следите упутства. За кретање кликните на Наредно/Претходно или користите стрелице на вашој тастатури. Док сте у обиласку, одлазак на другу администраторску страницу ће вас преусмерити на тренутну страницу обилсака. Уколико се изгубите и не можете да напустите обилазак, идите на <em>Додаци » Крени у обилазак</em>.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/sr_RS/tour_2_7_0.lang.php b/plugins/TakeATour/language/sr_RS/tour_2_7_0.lang.php
deleted file mode 100755
index 40ad1ff87..000000000
--- a/plugins/TakeATour/language/sr_RS/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['2_7_0_title9'] = 'Филтер за претрагу';
-$lang['2_7_0_title10'] = 'Филтер величине фајла';
-$lang['2_7_0_title11'] = 'Видимо се ускоро!';
-$lang['2_7_0_title2b'] = 'Нова форма за додавање';
-$lang['2_7_0_title4'] = 'Страница за претрагу';
-$lang['2_7_0_title5'] = 'Време';
-$lang['2_7_0_title7'] = 'Поређај албуме по датуму';
-$lang['2_7_0_title1'] = 'Добро дошли у Piwigo 2.7';
-$lang['2_7_0_stp10'] = 'Филтер величине датотеке је додат у менаџер операција. Можете изабрати опсег најмање и највеће величине датотеке.';
-$lang['2_7_0_title2'] = 'Прва нова могућност';
-$lang['2_7_0_stp1'] = 'Здраво! Ја ћу бити твој водич за откривање Piwigo галерије. Следи моје савете кликом на Следеће (или на стрелице тастатуре). Ако одеш на другу страницу бићеш преусмерен на Обилазак галерије.';
-$lang['2_7_0_stp9'] = 'Менаџер операција је сада добио филтер за претрагу. Он сада омогућава напредну претрагу коришћењем синтаксе и омогућава да нађете фотографије на основу датума, ознака, величине, имена датотека и опција као што су потпуно поклапање, и/или групе и искључивање. Касније можете погледати помоћ за више детаља. Исту синтаксу можете применити и унутар брзе претраге у јавном делу галерије.';
-$lang['2_7_0_stp8'] = 'Пражњење фијоке је сада на само једак клик од вас.';
-$lang['2_7_0_stp7'] = 'Сада можете поређати ваше албуме на основу времена постављања или настанка фотографија у њима';
-$lang['2_7_0_title6'] = 'Изаберите опцију';
-$lang['2_7_0_title8'] = 'Испразни фијоку';
-$lang['2_7_0_stp6'] = 'Поље за избор албума, ознака и сл. је промењено тако да је сада много једноставније и корисније. Испробајте га испод';
-$lang['2_7_0_stp4'] = 'Страница за претрагу је унапређена: можете изабрати особине на основу којих се примењују речи за претрагу, пронаћи ауторе из базе података, видети предлоге из списка ознака и албума и још много тога.';
-$lang['2_7_0_stp5'] = 'Сада можете одабрати време додавања поред датума помоћу клизача Сат и Минут';
-$lang['2_7_0_stp2b'] = 'Нови начин за слање слика у Piwigo 2.7 је заснован на HTML5 уместо Флеша и донеће вам бољу подршку са модерним прегледачима интернета и већу поузданост на спорим мрежама. Од сада ће превлачење изабраних фотографија бити много лакше из самог прегледача!';
-$lang['2_7_0_stp11'] = 'Обилазак је завршен.<p style="text-align:center">Уживајте у Piwigo 2.7 галерији!</p>Уколико вам се допадне Piwigo и желите да нас подржите, можете помоћи преводом програма на ваш језик, донацијом и сл. <a href="http://piwigo.org/basics/contribute" target="_blank">Кликните овде како би нас подржали</a> Хвала!';
-$lang['2_7_0_stp2'] = 'Као што видите, ос сада имамо нови подразумевани додатак: Обилазак. Овај додатак ће вам помоћи да откријете вашу Piwigo галерију. Испод се налази неколико доступних обиласка.<br>Овој страници можете приступити када одете у <em>Додати » Обилазак</em>'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/sv_SE/description.txt b/plugins/TakeATour/language/sv_SE/description.txt
deleted file mode 100755
index 4a0f68225..000000000
--- a/plugins/TakeATour/language/sv_SE/description.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Visit your Piwigo to discover its features. This plugin has multiple thematic tours for beginners and advanced users.
-Besök ditt Piwigo för att upptäcka dess funktioner. Denna insticksmodul har många rundturer för både nybörjare och avancerade användare. \ No newline at end of file
diff --git a/plugins/TakeATour/language/sv_SE/index.php b/plugins/TakeATour/language/sv_SE/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/sv_SE/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/sv_SE/plugin.lang.php b/plugins/TakeATour/language/sv_SE/plugin.lang.php
deleted file mode 100755
index c0fcee2b1..000000000
--- a/plugins/TakeATour/language/sv_SE/plugin.lang.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-$lang['2.7 Tour'] = '2.7 Översikt';
-$lang['2_7_0_descrp'] = 'Upptäck nyheterna i Piwigo 2.7';
-$lang['Start the Tour'] = 'Starta rundtur';
-$lang['Privacy'] = 'Integritet';
-$lang['Prev'] = 'Föregående';
-$lang['Next '] = 'Nästa';
-$lang['First Contact'] = 'Inledning';
-$lang['End tour'] = 'Avsluta rundtur';
-$lang['TAT_descrp'] = 'Välkommen! Här ser du alla tillgängliga rundturer som hjälper dig upptäcka funktionerna i ditt Piwigogalleri.<br><br>Starta en rundtur nedan och följ instruktionerna. Tryck Nästa/Föregående (eller använd piltangenterna) för att navigera. Om du går till en annan sida i administrationen under rundturen så kommer du blir återsänd. Om du fastnar och inte kan avsluta rundturen så gå till <em>Insticksmoduler » Ta en rundtur</em>.';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Ta en rundtur och upptäck funktionerna i ditt Piwigogalleri » Gå till rundturerna';
-$lang['Visit your Piwigo!'] = 'Besök ditt Piwigo!';
-$lang['first_contact_descrp'] = 'Rekommenderas för nybörjare. Denna rundtur presenterar Piwigo och de grundläggande funktionerna. Den börjar med att visa hur du lägger till bilder och sedan hur du hanterar dem. Rundturen fortsätter sedan med albumhantering och slutar med anpassningar via konfigurationer, teman och insticksmoduler.';
-$lang['privacy_descrp'] = 'Rundturen visar alla sätt att skydda ditt foto från allmän åtkomst med rättigheter per album och per foto, och från kopiering.';
-$lang['takeatour_configpage'] = 'Ta en rundtur » Lista över rundturer'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/sv_SE/tour_2_7_0.lang.php b/plugins/TakeATour/language/sv_SE/tour_2_7_0.lang.php
deleted file mode 100644
index fd34f7ccb..000000000
--- a/plugins/TakeATour/language/sv_SE/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_stp4'] = 'Söksidan har omarbetats: Möjligheten att välja egenskaper som sökordet gäller, lista över fotograf som finns i databasen, auto-komplettering från lista med taggar, auto-komplettering från lista med album ...';
-$lang['2_7_0_stp5'] = 'Du kan ange en tidpunkt utöver datum, med hjälp av reglage för timmar och minuter';
-$lang['2_7_0_stp6'] = 'Rutan för att välja album. taggar etc har ändrats till ett nytt mer användarvänligt gränssnitt. Testa den nedan';
-$lang['2_7_0_title4'] = 'Söksida';
-$lang['2_7_0_title5'] = 'Tidpunkt';
-$lang['2_7_0_title6'] = 'Väljar-rutor';
-$lang['2_7_0_stp1'] = 'Hej! Jag kommer att vara din guide på upptäcktsfärden genom Piwigo. Följ mina instruktioner, och klicka på Nästa eller använd piltangenterna för att navigera. Om du går vilse till någon annan sida, kommer du att omdirigeras till den aktuella sidan i den här översikten.';
-$lang['2_7_0_stp11'] = 'Resan genom denna översikt är över.<p style="text-align:center">Ha det kul med Piwigo 2.7!</p>Om du uppskattar Piwigo och vill ge ditt stöd, så kan du bidra genom översättningar, donationer, etc. <a href="http://piwigo.org/basics/contribute" target="_blank">Klicka här för att ge ditt bidrag</a>';
-$lang['2_7_0_stp2'] = 'Som du kan se har ett nytt standardplugin lagts till: Take A Tour. Det hjälper dig att utforska möjligheterna med Piwigo. Just här finns alla tillgängliga guider listade.<br>Denna sida är tillgänglig under <em>Insticksmoduler» Take A Tour</em>';
-$lang['2_7_0_stp7'] = 'Nu kan du sortera dina album baserat på datum bilder skapas eller datum för uppladdning';
-$lang['2_7_0_stp8'] = 'En länk för att tömma korgen med bara ett enda klick.';
-$lang['2_7_0_title1'] = 'Välkommen till Piwigo 2.7';
-$lang['2_7_0_title10'] = 'Filter för filstorlek';
-$lang['2_7_0_title11'] = 'Vi ses snart!';
-$lang['2_7_0_title2'] = 'Den första nya funktionen';
-$lang['2_7_0_title2b'] = 'Ny uppladdningssida';
-$lang['2_7_0_title7'] = 'Sortera album efter datum';
-$lang['2_7_0_title8'] = 'Töm din korg';
-$lang['2_7_0_title9'] = 'Sökfilter';
-$lang['2_7_0_stp9'] = 'Ett sökfilter har lagts till batchhanteraren. Den levereras med en kraftfull syntax för att söka efter bilder på datum, taggar, storlek. filnamn och även alternativ för "exakt matchning", OCH / ELLER, gruppering och exkluderade grupper. Du kan läsa detaljerad hjälptext senare. Samma syntax gäller för snabbsökfältet på huvudmenyn.';
-$lang['2_7_0_stp2b'] = 'Den nya uppladdningsformuläret i Piwigo 2.7 bygger på HTML5 istället för Flash. Det. innebär en bättre kompatibilitet med moderna webbläsare samt en ökad tillförlitlighet på långsamma anslutningar. Dra och släpp kommer att göra valet av bilder mycket enklare från din filhanterare!';
-$lang['2_7_0_stp10'] = 'Ett filter på filstorlek har också lagts till batchhanteraren. Du kan välja ett intervall med ett lägsta och högsta värde.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/sv_SE/tour_first_contact.lang.php b/plugins/TakeATour/language/sv_SE/tour_first_contact.lang.php
deleted file mode 100644
index bc1324654..000000000
--- a/plugins/TakeATour/language/sv_SE/tour_first_contact.lang.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_stp1'] = 'Hej! Jag är din Guide för att upptäcka Piwigo! Följ mina instruktioner och klicka på "Nästa"(eller använd piltangenterna på ditt tangentbord) för att navigera. Går du till en anna del av Administrationen så får du en annan sekvens av denna Guide, relevant för den sidan. Fastnar detta, kan du gå till <em>Plugins > Take a Tour</em>så stannar den. Låt oss börja med att lägga till några bilder!'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/tr_TR/description.txt b/plugins/TakeATour/language/tr_TR/description.txt
deleted file mode 100755
index e77c60d1e..000000000
--- a/plugins/TakeATour/language/tr_TR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Piwigo 'yu ziyaret edin ve özelliklerini keşfedin. Bu eklenti yeni başlayanlar ve uzmanlar için çoklu tematik turlar içermektedir. \ No newline at end of file
diff --git a/plugins/TakeATour/language/tr_TR/index.php b/plugins/TakeATour/language/tr_TR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/tr_TR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/tr_TR/plugin.lang.php b/plugins/TakeATour/language/tr_TR/plugin.lang.php
deleted file mode 100755
index 5e2617033..000000000
--- a/plugins/TakeATour/language/tr_TR/plugin.lang.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['2.7 Tour'] = '2.7 Turu';
-$lang['2_7_0_descrp'] = 'Piwigo 2.7 yeniliklerini keşfet';
-$lang['End tour'] = 'Turu bitir';
-$lang['Next '] = 'Sonraki';
-$lang['Prev'] = 'Önceki';
-$lang['Privacy'] = 'Gizlilik';
-$lang['Start the Tour'] = 'Turu Başlat';
-$lang['Visit your Piwigo!'] = 'Piwigonuzu ziyaret edin';
-$lang['TAT_descrp'] = 'Hoş geldiniz! Piwigo galerinizin özelliklerini keşfetmenizi sağlayacak tur listesi burada.<br><br>Aşağıdan bir turu başlatın ve yönergeleri takip edin. Tur boyunca Sonraki/Önceki bağlantılarına tıklayarak (veya klavyenizdeki yön tuşlarını kullanarak) gezinebilirsiniz. Turdayken, eğer yönetim araçlarının farklı bir sayfasına giderseniz turunuzun ilgili sayfasına yönlendirileceksiniz. Eğer takılırsanız ve turu tamamlayamıyorsanız
-<em>Eklentiler » Bir Tur At</em> \'a gitmek turu sonlandıracaktır.';
-$lang['first_contact_descrp'] = 'Piwigo ve onun temel özellikleri size tanıtacak olan bu tur özellikle yeni başlayanlara tavsiye edilmektedir. Fotoğrafların nasıl ekleneceğinin gösterilmesiyle başlayacak ve sonrasında nasıl yönetildiğiyle devam edecektir. Albüm yönetimi ile devam edecek ve tema, eklenti ve yapılandırmayla kişiselleştirme adımıyla bitecektir.';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Bir tur atın ve Piwigo galeri özelliklerini keşfedin » Mevcut turları git';
-$lang['privacy_descrp'] = 'Bu tur, albüme ve fotoğraflara verilen izinlerle genel erişime ve kopyalamaya karşın fotoğraflarınızın korunma yollarını sunar.';
-$lang['First Contact'] = 'İlk Karşılaşma';
-$lang['takeatour_configpage'] = 'Bir Tur Atın » Tur Listesi'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/tr_TR/tour_2_7_0.lang.php b/plugins/TakeATour/language/tr_TR/tour_2_7_0.lang.php
deleted file mode 100755
index 2ea5f564e..000000000
--- a/plugins/TakeATour/language/tr_TR/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['2_7_0_stp7'] = 'Şimdi albümlerinizi fotoğraf yaratma veya gönderim tarihine göre sıralayabilirsiniz';
-$lang['2_7_0_stp8'] = 'Bir tıklamayla sepeti boşaltacak kolay aksiyon bağlantısı';
-$lang['2_7_0_title2'] = 'İlk yeni özellik';
-$lang['2_7_0_title10'] = 'Dosya büyüklüğü filtresi';
-$lang['2_7_0_title8'] = 'Sepeti boşalt';
-$lang['2_7_0_title9'] = 'Arama filtresi';
-$lang['2_7_0_title1'] = 'Piwigo 2.7 \'ye hoş geldiniz';
-$lang['2_7_0_title11'] = 'Tekrar görüşmek üzere!';
-$lang['2_7_0_title2b'] = 'Yeni yükleme formu';
-$lang['2_7_0_title4'] = 'Arama Sayfası';
-$lang['2_7_0_title5'] = 'Zaman';
-$lang['2_7_0_title6'] = 'Seçim kutuları';
-$lang['2_7_0_title7'] = 'Tarihe göre albüm sıralama';
-$lang['2_7_0_stp2b'] = 'Piwigo 2.7 \'deki yeni yükleme formu Flash yerine HTML5 tabanlıdır, bu da modern ağ tarayıcılarıyla daha iyi bir uyum ve hatta düşük hızlı bağlantılarda yüksek güvenirlik anlamına gelmektedir. Dosya gezgininden yapılacak Sürükle ve Bırak işlemi ile fotoğrafların seçilmesi daha kolay.';
-$lang['2_7_0_stp4'] = 'Arama sayfası tekrar çalışıldı: kelime ararken uygulanacak özelliklerin seçilebilmesi, veri tabanında bulunan yazarların listesi, otomatik tamamlanan etiket listesi, otomatik tamamlanan albüm listesi....';
-$lang['2_7_0_stp2'] = 'Görebileceğiniz gibi, varsayılan yeni bir eklenti ilave edildi: Bir Tur At. Bu eklenti Piwigo\'yu keşfetmenize yardımcı olur. Tüm kullanılabilir turların listesi burada.<br>Bu sayfa <em>Eklentiler » Bir Tur At</em> yer almakta.';
-$lang['2_7_0_stp11'] = 'Bu tur tamamlandı.<p style="text-align:center">Piwigo 2.7 \'nin tadını çıkarın!!</p>Eğer Piwigo\'yu beğendiyseniz ve bizi desteklemek istiyorsanız, çevirilerde bize yardımcı olarak, bağış yaparak katkıda bulunabilirsiniz. <a href="http://piwigo.org/basics/contribute" target="_blank">Bizi destekleme için buraya tıklayın</a> Teşekkürler!';
-$lang['2_7_0_stp6'] = 'Albümleri, etiketleri vb toplamak için bulunan seçim kutuları kullanıcı dostu yenileri ile değişti. Test aşağıdadır:';
-$lang['2_7_0_stp10'] = 'Dosya boyutu filtresi küme yöneticisine de eklendi. Azami ve asgari olarak bir aralık seçebilirsiniz.';
-$lang['2_7_0_stp1'] = 'Merhaba! Piwigo\'yu keşfetmeniz için size ben rehberlik yapacağım. Lütfen benim talimatlarımı takip edin ve gezinmek için Sonraki (veya klavyenizdeki yön tuşlarını kullanın) simgesine tıklayın. Eğer başka bir sayfaya giderseniz, turun geçerli sayfasına yönlendirileceksiniz.';
-$lang['2_7_0_stp5'] = 'Tarihe ek olarak saat ve dakika kaydırma çubukları ile saati de ayarlayabilirsiniz.';
-$lang['2_7_0_stp9'] = 'Küme yöneticisine bir arama filtresi eklendi. Bu arama dizilimi, fotoğrafları tarihe, etiketlere, büyüklüğüne ve hatta kesin eşleşme, ve/veya seçimi, gruplama, gruptan hariç tutma gibi oldukça güçlü seçenkelere sahiptir. Detaylı bilgiyi daha sonra inceleyebilirsiniz. Aynı arama dizilimi herkese açık menüdeki hızlı arama bölümünden de kullanılabilir.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/tr_TR/tour_first_contact.lang.php b/plugins/TakeATour/language/tr_TR/tour_first_contact.lang.php
deleted file mode 100755
index 22aae0135..000000000
--- a/plugins/TakeATour/language/tr_TR/tour_first_contact.lang.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['first_contact_title28'] = 'Yapılandırma';
-$lang['first_contact_title33'] = 'Misafir ayarları';
-$lang['first_contact_title4'] = 'Haydi bir fotoğraf ekleyelim!';
-$lang['first_contact_title18'] = 'Albüm yönetimi';
-$lang['first_contact_title19'] = 'Albüm yönetimi';
-$lang['first_contact_title20'] = 'Albüm yönetimi';
-$lang['first_contact_title34'] = 'Temalar';
-$lang['first_contact_title35'] = 'Temalar';
-$lang['first_contact_title37'] = 'Temalar';
-$lang['first_contact_title38'] = 'Eklentiler';
-$lang['first_contact_title39'] = 'Eklentiler';
-$lang['first_contact_title11'] = 'Bir foto nasıl düzenlenir';
-$lang['first_contact_title15'] = 'Foto düzenleme sayfası';
-$lang['first_contact_title21'] = 'Diğer Sekmeler';
-$lang['first_contact_title22'] = 'Albüm Düzenleme Sayfası';
-$lang['first_contact_title3'] = 'Foto Sayfası Ekle ';
-$lang['first_contact_title43'] = 'Harika bir zaman oldu';
-$lang['first_contact_title9'] = 'Toplu İş Yöneticisi';
-$lang['first_contact_title29'] = '<em>Yapılandırma » Seçenekler » Genel</em>';
-$lang['first_contact_stp30'] = 'Başlangıç olarak başlığı değiştirelim';
-$lang['first_contact_stp32'] = 'Şimdi değiştirdikleri kaydet';
-$lang['first_contact_stp35'] = 'En sevdiğin tema varsayılan olarak belirle.';
-$lang['first_contact_stp4'] = 'Önce bir albüm seç; albüm bulunmazsa bir tane oluştur.';
-$lang['first_contact_title1'] = 'Piwigo Galeri\'de Hoş Geldin'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/tr_TR/tour_privacy.lang.php b/plugins/TakeATour/language/tr_TR/tour_privacy.lang.php
deleted file mode 100755
index aa6d4bf42..000000000
--- a/plugins/TakeATour/language/tr_TR/tour_privacy.lang.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['privacy_title24'] = 'Bu harika zaman geçti.';
-$lang['privacy_title1'] = 'Gizlilik Turuna Hoşgeldiniz';
-$lang['privacy_stp11'] = 'Şimdi İzinler sekmesine tıklayınız.';
-$lang['privacy_stp13'] = 'Şimdi Özele tıklayınız.';
-$lang['privacy_stp3'] = 'Aşağıdaki bilgileri okumak için bir dakikanızı ayırın.';
-$lang['privacy_title6'] = 'Gizlilik Seviyesi';
-$lang['privacy_title7'] = 'Gizlilik Seviyesi';
-$lang['privacy_title8'] = 'Gizlilik Seviyesi';
-$lang['privacy_title9'] = 'Gizlilik Seviyesi';
-$lang['privacy_title3'] = 'İzinler';
-$lang['privacy_title4'] = 'İzinler';
-$lang['privacy_title10'] = 'Albüm izinleri';
-$lang['privacy_title11'] = 'Albüm izinleri';
-$lang['privacy_title12'] = 'Albüm izinleri';
-$lang['privacy_title15'] = 'İpucu';
-$lang['privacy_title17'] = 'Gruplar';
-$lang['privacy_title18'] = 'Gruplar';
-$lang['privacy_title19'] = 'Kullanıcılar';
-$lang['privacy_stp8'] = 'Bir veya daha fazla fotoğraf seç...'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/uk_UA/description.txt b/plugins/TakeATour/language/uk_UA/description.txt
deleted file mode 100755
index 3e27b359d..000000000
--- a/plugins/TakeATour/language/uk_UA/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Відвідайте свій Piwigo, щоб виявити його особливості. Це доповнення до програми має багаторазові тематичні тури для початківців і просунутих користувачів. \ No newline at end of file
diff --git a/plugins/TakeATour/language/uk_UA/index.php b/plugins/TakeATour/language/uk_UA/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/uk_UA/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/uk_UA/plugin.lang.php b/plugins/TakeATour/language/uk_UA/plugin.lang.php
deleted file mode 100755
index 9846d7451..000000000
--- a/plugins/TakeATour/language/uk_UA/plugin.lang.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['End tour'] = 'Кунець туру';
-$lang['Next '] = 'Наступний';
-$lang['Prev'] = 'Попередній';
-$lang['Start the Tour'] = 'Розпочати тур';
-$lang['Visit your Piwigo!'] = 'Відвідайте ваш Piwigo!';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Здійсніть екскурсію та пізнайте можливості вашої галереі Piwigo » перейти до доступних екскурсій';
-
-$lang['First Contact'] = 'Перший контакт';
-
-$lang['2.7 Tour'] = 'Тур 2.7';
-$lang['2_7_0_descrp'] = 'Дізнайтеся що нового у Piwigo 2.7';
-$lang['Privacy'] = 'Конфіденційність';
-$lang['TAT_descrp'] = 'Ласкаво просимо! Ось список всіх доступних турів, щоб допомогти вам відкрити для себе особливості вашої Piwigo галереї.<br><br> Запустіть тур нижче, а потім дотримуйтесь інструкцій. Натисніть Наступна/Попередня (або використовуйте стрілки на клавіатурі) для навігації під час туру. У той час як ви знаходитесь в турі, якщо ви перейдете на іншу сторінку адміністрації, ви будете перенаправлені з поточної сторінки Туру. Якщо ви застрягли і не можете закінчити тур, відвідайте <em>Плаґіни » Take A Tour</em> щоб закінчити тур.';
-$lang['takeatour_configpage'] = 'Take A Tour » Перелік Турів';
-$lang['first_contact_descrp'] = 'Рекомендується для початківців, цей тур познайомить Вас з Piwigo та її основних особливостей. Він почнеться, показуючи вам, як додати фотографії, як ними можна управляти. Тур триває з керуванням альбому і закінчується налаштуванням за допомогою конфігурації, тем і плаґінів.';
-$lang['privacy_descrp'] = 'Цей тур представляє всі способи захисту фотографії з публічного доступу з правами на альбом і на фото, і від копіювання з використанням захисту зображень.'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/uk_UA/tour_2_7_0.lang.php b/plugins/TakeATour/language/uk_UA/tour_2_7_0.lang.php
deleted file mode 100644
index 8901d2bfd..000000000
--- a/plugins/TakeATour/language/uk_UA/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_stp4'] = 'Пошукову сторінку перероблено: можливість вибору властивостей пошуку слів, перелік авторів у базі, авто доповнення тегів, авто доповнення альбомів... ';
-$lang['2_7_0_stp5'] = 'Ви можете встановити час окрім дати, використовуючи слайдери Година/Хвилина.';
-$lang['2_7_0_stp6'] = 'Новий селектор альбомів, тегів і тд більш дружній. Протестуйте нижче.';
-$lang['2_7_0_title4'] = 'Пошукова сторынка';
-$lang['2_7_0_title5'] = 'Час';
-$lang['2_7_0_title6'] = 'Виберіть коробки';
-$lang['2_7_0_title1'] = 'Ласкаво просимо у Piwigo 2.7';
-$lang['2_7_0_title11'] = 'До зустрічі!';
-$lang['2_7_0_title2'] = 'Перша нова функція';
-$lang['2_7_0_stp11'] = 'Ця екскурсія завершена. <p style="text-align:center">Приємного використання Piwigo 2.7!</p> Якщо Piwigo вам сподобався, та ви хочете підтримати нас, ви можете допомогти, а саме у перекладі, пожертвуванні і т. п.<a href="http://piwigo.org/basics/contribute" target="_blank">Натисніть тут щоб підтримати нас</a>';
-$lang['2_7_0_stp2'] = 'Як ви можете бачити, новий плагін за замовченням додано: Здійсніть екскурсію. Цей плагін допоможить провести перше навчання по використанню Piwigo. Тут це, де список усіх доступних екскурсій. <br>Ця сторінка доступна на <em>Плагіни » Здійсніть екскурсію</em>';
-$lang['2_7_0_stp1'] = 'Ласкаво просимо! Я покажу та навчю вас користуватися Piwigo. Будь ласка дотримуйтесь моїх інструкцій, та натисніть кнопку Далі (чи використовуйте клавіши курсору на клавіатурі) для навігації. Якщо ви перейдете на іншу сторінку, ви будете перенаправлені на поточну сторінку туру.';
-$lang['2_7_0_title10'] = 'Фільтр розміру зображень';
-$lang['2_7_0_title7'] = 'Сортувати альбоми по даті';
-$lang['2_7_0_title2b'] = 'Нова форма завантаження';
-$lang['2_7_0_title9'] = 'Фільтр пошуку';
-$lang['2_7_0_stp9'] = 'Пошуковий фільтр було додано до менеджера черги. Тепер він має потужний синтаксис для пошуку фото за датою, часом, розміром, іменем файлу а також такі опції точного пошуку, як: AND/OR, групування, виключення. Ви можете прочитати детальне пояснення пізніше. Той самий синтаксис працює і для швидкого пошуку у меню публічної сторони.';
-$lang['2_7_0_stp10'] = 'Фільтрацію за розміром файлу було додано з можливістю вибору мінімального та максимального значення.';
-$lang['2_7_0_stp2b'] = 'Нова форма завантаження у Piwigo 2.7 використовує HTML5 замість Flash що забезпечує кращу сумісність з сучасними бравзерами та вищу надійність на повільних з\'єднаннях. Drag&drop спрощує вибір фото.';
-$lang['2_7_0_stp7'] = 'Тепер ви можете сортувати альбоми за часом створення або завантаженння фото';
-$lang['2_7_0_stp8'] = 'Просте посилання на дії для спороження кошика';
-$lang['2_7_0_title8'] = 'Спорожніть пакунок'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/uk_UA/tour_first_contact.lang.php b/plugins/TakeATour/language/uk_UA/tour_first_contact.lang.php
deleted file mode 100644
index 918dc1f18..000000000
--- a/plugins/TakeATour/language/uk_UA/tour_first_contact.lang.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_title1'] = 'Ласкаво просимо у вашу Piwigo галерею';
-$lang['first_contact_title3'] = 'Додати фото-сторінку';
-$lang['first_contact_title33'] = 'Налаштування гостя';
-$lang['first_contact_title34'] = 'Теми';
-$lang['first_contact_title35'] = 'Теми';
-$lang['first_contact_title37'] = 'Теми';
-$lang['first_contact_title38'] = 'Плагіни';
-$lang['first_contact_title11'] = 'Як редагувати фото';
-$lang['first_contact_title18'] = 'Управління альбомами';
-$lang['first_contact_title19'] = 'Управління Альбомами';
-$lang['first_contact_title20'] = 'Управління Альбомами';
-$lang['first_contact_title21'] = 'Інщі таби';
-$lang['first_contact_title28'] = 'Налаштування';
-$lang['first_contact_title29'] = 'Налаштування->Опції->Головні';
-$lang['first_contact_stp32'] = 'Тепер зберіжіть зміни';
-$lang['first_contact_stp11'] = 'Таким чином, ви можете вибрати звідси одну чи декілька фото';
-$lang['first_contact_stp22'] = 'Подібно до зображень, тут ви можете редагувати властивості альбому';
-$lang['first_contact_stp29'] = 'Тут, на першій сторінці, ви встановите необхідну і базову конфігурацію вашої галереї.';
-$lang['first_contact_stp18'] = 'Давайте зараз подивимось як керувати альбомами. Натисніть на <em> Альбоми » Керувати</em> або натисніть Далі';
-$lang['first_contact_stp37'] = 'Щоб встановити нові теми, ви можете завантажити їх з вкладки \'Додати нову тему\'. Будуть відображені теми сумісні з вашою версією Piwigo.<br><br>Давайте зараз поглянемо на плагіни! Натисніть на <em>Плагіни » Керувати</em>';
-$lang['first_contact_stp38'] = 'Плагіни це дуже простий способі налаштувати свій Piwigo. Вони можуть робити майже все, що ви можете уявити від невеликих текстових доповнень до повноцінних функцій, як плагін Community, який дозволяє звичайним користувачам завантажувати без входу до адміністративної часті.';
-$lang['first_contact_stp13'] = 'Ви можете редагувати описи і більше з пакетного менеджеру в одиночному режимі. Але зараз, давайте залишатися в глобальному режимі.';
-$lang['first_contact_stp12'] = 'потім редагувати їх за допомогою дії';
-$lang['first_contact_stp15'] = 'На цій сторінці ви можете редагувати всі властивості світлин, наприклад...';
-$lang['first_contact_stp2'] = 'Посилання тут. Натисніть на нього або натисніть Далі для продовження.';
-$lang['first_contact_stp30'] = 'Давайте почнемо зі зміни назви.';
-$lang['first_contact_stp35'] = 'Зробіть вашу улюблену тему темою за замовченням.';
-$lang['first_contact_stp4'] = 'Спочатку виберіть альбом; створіть хочаб один, якщо ще немає альбомів.';
-$lang['first_contact_stp40'] = 'Це я тут! Не деактивуйте мене зараз, але ви можете деактивувати чи відновити ативовані плагіни.';
-$lang['first_contact_stp41'] = 'На останній вкладці ви можете подивитись усі доступні плагіни для вашої версії Piwigo. Тут є сотні плагінів на любий смак і потреби!';
-$lang['first_contact_stp43'] = 'Цей тур був довгий, але ви побачили лише маленьку частину з можливостей Piwigo. Все має кінець і цей огляд закінчено.<br><br>Ви можете дізнатися про більше можливостей Piwigo, взявши інший тур чи прочитавши нашу документацію на вебсайті piwigo.org.<br><br>Також не забувайте про посилання на Допомогу у верхньому правому куті любої сторінки адміністрування.<p style="text-align:center">Приємного користування Piwigo!</p>';
-$lang['first_contact_stp5'] = 'Потім натисніть кнопку для вибору світлин на завантаження, чи просто перетягніть їх.';
-$lang['first_contact_stp6'] = 'Ви бачите список світлин. Коли будете готові клікніть на кнопку Початок Завантаження';
-$lang['first_contact_stp7'] = 'Ось сумарна інформація по завантаженим світлинам. Бачите, що Piwigo може сам генерувати мініатюри. Ви можете:<ul><li>керувати усісма завантаженими світлинами у пакетному менеджері</li><li>редагувати властивості світлин клацнувши на них</li><li>додати ще світлин</li></ul>';
-$lang['first_contact_stp8'] = 'Давайте редагувати їх! Клікніть на посилання.';
-$lang['first_contact_stp9'] = 'Ви зараз у пакетному менеджері, де ви можете пакетно редагувати багато світлин одночасно.<br><br>Тут предфільтр установлено на "Caddie" тому, що ми прийшли з сторінки завантаження.';
-$lang['first_contact_title15'] = 'СТорінка редагування світлини';
-$lang['first_contact_title22'] = 'Сторінка редакування альбому';
-$lang['first_contact_title43'] = 'Це був прекрасний час';
-$lang['first_contact_title4'] = 'Давайте додамо фото!';
-$lang['first_contact_title39'] = 'Плагіни';
-$lang['first_contact_title9'] = 'Пакетний менеджер';
-$lang['first_contact_stp19_b'] = 'Тут перелічені "корневі" альбоми';
-$lang['first_contact_stp39'] = 'На цій першій сторінці, перераховані встановлені плагіни.<br><br>У верхній частині, перераховані активовані в даний момент плагіни.<br><br>У нижній частині, плагіни, що встановлені в папку /plugins, але відключені.<br><br>Видалення плагіна означає, що всі сліди плагіна будуть видалені (файли, параметри і т.і.). Для більшості плагінів, дезактивація буде зберегати параметри зареєстровані плагіном.';
-$lang['first_contact_stp34'] = 'Вибір теми є першим кроком для налаштування вашого Piwigo. Встановлені Теми перераховані тут.<br>Більше, ніж одна тема може бути активована: користувачі можуть змінювати свої теми, вибравши одину серед тих, що активовано тут, якщо опція "Дозволити налаштування користувача" активована на сторінці Опції.';
-$lang['first_contact_stp33'] = 'І останнє слово про вкладку \'Налаштування гостя\' - сторінка для налаштування галереї для незареєстрованих відвідувачів. Кожен раз, коли Piwigo посилається на \'гість\', ще означає незареєстрованих відвідувачів.<br>Давайте продовжимо з конфігурацією : натисніть на <em>Конфігурація»Теми</em> або просто натисніть кнопку Далі.';
-$lang['first_contact_stp31'] = 'Потім банер, який буде відображатися у верхній частині кожної сторінки. Як ви можете бачити, HTML теги тут допускаються. Ви також можете використовувати %gallery_title% тег для відображення назви котру ви щойно ввели вище.';
-$lang['first_contact_stp28'] = 'Тепер ми переглянемо параметри, доступні для налаштування Piwigo до ваших потреб. Натисніть на Конфігурація->Опції або просто натисніть кнопку Далі.';
-$lang['first_contact_stp23'] = 'Блокування альбому означає, що тільки адміністратори зможуть бачити цей альбом: дуже корисно при підготовці альбому перед публікацією';
-$lang['first_contact_stp21'] = 'На наступній вкладці ви можете переміщати будь який віртуальний альбом.<br>Вкладка Постійні посилання для встановлення особливого URL для альбому.<br>Але давайте редагувати альбом: клацніть на Редагувати альбом';
-$lang['first_contact_stp20'] = 'Коли покажчик миші наводиться над альбомом, з\'являються посилання та інформація. Коли ви натисните і перетягнете альбом вверх (або вниз), ви зміните його позицію, і потім ви можете зберегти або скасувати ручне сортування.';
-$lang['first_contact_stp19'] = 'Тут показані корньові альбоми. Якщо ви бачите альбом з пунктирним фоном, це означає фізичний альбом з FTP синхронізації. Фізичні альбоми не можуть бути переміщені або видалені звідси. Інші альбоми називаються віртуальні альбоми.';
-$lang['first_contact_stp17'] = 'Тут ви можете встановити фотографію як мініатюри одного або декількох альбомів. На фотографія не обов\'яково повинна бути пов\'язана з альбомом, щоб зробити її мініатюрою. Якщо фотографія пов\'язана з альбомом, то навіть простіше встановити її в якості мініатюрі альбому з публічної сторінки фото (Порада: використовуйте плагін Admin Tools для ще більшого спрощення).';
-$lang['first_contact_stp16'] = '... в якому альбомі(ах) фото.<br><br> Тому тут можна додати або видалити фотографію з альбому. Посилання є віртуальним, фотографій не будуть фізично переміщені.';
-$lang['first_contact_stp14'] = 'Тепер ми побачимо <b>сторінку редагування</b> однієї фотографії. Ця сторінка доступна нам звідси, а також і з загальнодоступної сторінки зображення (після входу в якості адміністратора).<br><br> Виділіть мініатюру та натисніть Редагувати.';
-$lang['first_contact_stp10'] = 'Ось посилання для прямого доступу до вашого кошику: інструменту для адміністраторів для легкого вибору фотографії при перегляді публічної частини для того, щоб редагувати їх в пакетному менеджері.<br><br> Ви можете додати фотографії до кошику з сторінки світлини при вході в систему в якості адміністратора, або за допомогою дії "Додати в кошик" з Пакетного менеджеру.';
-$lang['first_contact_stp3'] = 'На цій першій закладці ви можете додавати зображення прямо з вашого браузера. На інших вкладках інші шляхи додавання зображень';
-$lang['first_contact_stp1'] = 'Привіт! Я буду вашим гідом по навчанню Piwigo. Будь ласка, дотримуйтесь моїх інструкцій, і натисніть кнопку Далі (або використовуйте стрілки на клавіатурі), щоб перейти далі. Якщо ви перейдете до іншої сторінки адміністрування, ви будете перенаправлені на поточну сторінку навчання. Якщо ви застрягли і не можете закінчити тур, перехід в <em>Плагіни » Take A Tour</em> і тур закінчиться. <br> Давайте почнемо з додавання фотографії!'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/uk_UA/tour_privacy.lang.php b/plugins/TakeATour/language/uk_UA/tour_privacy.lang.php
deleted file mode 100755
index 49f03459b..000000000
--- a/plugins/TakeATour/language/uk_UA/tour_privacy.lang.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['privacy_stp6'] = 'Коли Ви завантажуєте зображення, Ви можете змінити рівень конфіденційності прямо під час завантаження...';
-$lang['privacy_stp8'] = 'Виберіть одно або декілька зображень...';
-$lang['privacy_title22'] = 'Локальна конфігурація: оригінальний захист';
-$lang['privacy_title24'] = 'Це був прекрасний час';
-$lang['privacy_title1'] = 'Ласкаво просимо в тур Конфіденційності';
-$lang['privacy_title10'] = 'Дозволи альбому';
-$lang['privacy_title11'] = 'Дозволи альбому';
-$lang['privacy_title12'] = 'Дозволи альбому';
-$lang['privacy_title2'] = 'Допомога всередині вашого Piwigo';
-$lang['privacy_title5'] = 'Дозволи > Групи';
-$lang['privacy_title9'] = 'Рівень конфіденційності';
-$lang['privacy_title15'] = 'Порада';
-$lang['privacy_title17'] = 'Групи';
-$lang['privacy_title18'] = 'Групи';
-$lang['privacy_title19'] = 'Користувачі';
-$lang['privacy_title20'] = 'Загальнодоступні зображення';
-$lang['privacy_title21'] = 'Загальнодоступні зображення';
-$lang['privacy_title3'] = 'Дозволи';
-$lang['privacy_title4'] = 'Дозволи';
-$lang['privacy_title6'] = 'Рівень конфіденційності';
-$lang['privacy_title7'] = 'Рівень конфіденційності';
-$lang['privacy_title8'] = 'Рівень конфіденційності';
-$lang['privacy_stp11'] = 'Тепер перейдіть на вкладку дозволи';
-$lang['privacy_stp13'] = 'Тепер натисніть кнопку приватність.';
-$lang['privacy_stp3'] = 'Знайдіть хвилинку, щоб ознайомитися з інформацією нижче.';
-$lang['privacy_stp9'] = '... і виберіть дію "Хто може бачити ці зображення?". Тепер ви можете змінити рівень конфіденційності обраних сівтлин.<br><br>Але ви також можете зробити це для конкретної світлини, на її сторінці редагування. Ви можете отримати доступ до неї з публічної частини, або звідси.<br><br>Тепер, я покажу вам іншу систему дозволу на альбом, засновану на групах та користувачах.';
-$lang['privacy_stp7'] = '... або ви можете зробити це пізніше, тут у пакетному менеджері в глобальному режимі.<br><br>Це сторінка <em>Фотографії»Останні фотографії</em>, як що встановлений фільтр"Останній Імпорт".';
-$lang['privacy_stp5'] = 'Нижче пояснюється, як можна управляти групами. <br>Ці дозволи тільки для доступу до світлин та альбомів, при перегляді у публічному доступі або для зовнішніх додатків. Пізніше ми побачимо, інші засоби захисту, а зараз попрактикуймося!';
-$lang['privacy_stp4'] = 'Отже, ми маємо дві системи управління правами доступу до світлин. Вони незалежні, так що ви можете створити групу під назвою Родина, але ця група не має нічого спільного з рівнем конфіденційності Родина.<br><br> Рівні конфіденційності застосовуються для світлини, і права доступу користувача/групи застосовуються для альбому. Ви можете використовувати обидві або тільки одну систему, як забажаєте.<br><br> Наступна вкладка про управління групами.';
-$lang['privacy_stp24'] = 'Цей тур закінчився.<p style="text-align:center"> Насолоджуйтесь Piwigo!</p>Якщо ви любите Piwigo і ви хочете підтримати нас, Ви можете внести свій внесок, допомогою з перекладом, жертвуючи і т.і. <a href="http://piwigo.org/basics/contribute" target="_blank">Натисніть тут, щоб підтримати нас</a>. Дякуємо!';
-$lang['privacy_stp22'] = '<em>Для досвідчених користувачів</em><br><br>У Piwigo, ви можете захистити оригінальні світлини, використовуючи вашу локальну конфігурацію. Використовуйте змінну $conf[\'original_url_protection\']: за замовчуванням порожній, ви встановите значення "зображення", щоб захистити тільки світлини або "все", щоб захистити також всі зображення, які можуть бути ресурсномісткими або, можливо, просто не працюють на вашому сервері.<br><br>Ця опція працює як для приватного, так і для публічного змісту. Ця опція в даний час вимагає, щоб ви заблокували доступ до папок /upload та /galleries, за допомогою файлу .htaccess (зазвичай текстовий файл з "Deny from all" для змісту) або конфігурації сервера.<br><br>Будь ласка, зверніть увагу, що імена файлів світлин, завантажені з використанням іншого методу, ніж FTP будуть <b>рандомізовані</b>, тому їх неможливо вгадати: ім\'я файлу і шлях до вихідної світлини можуть бути відомі тільки якщо відвідувач має доступ до версій цієї світлини зі зміненим розміром (напр. ескіз). $conf[\'original_url_protection\'] і заборона доступу до папок /upload та /galleries призначені для уникання цього випадку.';
-$lang['privacy_stp21'] = 'Рішення таке:<ul><li>накласти водяний знак, принаймні на світлинах середніх і високих чіткостей.</li><li>і відключити XL та XXL розміри.</li><li>і відключіть High Definition (завантаження і відображення вихідної світлини) для зацікавлених користувачів.';
-$lang['privacy_stp20'] = 'Тепер ви знаєте, як зберегти ваші фотографії приватними, але ви можете задатися питанням про те, як захистити свої загальнодоступні фотографії. Ви могли б спочатку подумати про блокування відвідувачеві скачати файл: ви не можете, тому що веб було створено таким чином, що браузер відвідувача завантажує всі ресурси для відображеня сторінки. Клацання правою кнопкою миші може бути відключене, порожній шар можна покласти зверху на фото і т.і., але це не відключить завантаження. Повні веб-сторінки можуть бути збережені за допомогою будь-якого веб-браузера.';
-$lang['privacy_stp2'] = 'Тут ви можете отримати доступ до інтегрованої допомоги. Натисніть Далі, щоб перейти безпосередньо на сторінку Допомоги про управління правами';
-$lang['privacy_stp19'] = 'Тут ви можете швидко редагувати одного користувача шляхом наведення на нього курсору миші та натискання посилання Редагувати.<br><br>Ви можете вибрати кілька користувачів і редагувати їх одночасно - для цього виберіть потрібну дію для застосування.';
-$lang['privacy_stp18'] = 'Для управління асоціацію користувачів до груп, перейдіть до сторінки <em>Користувачі » Керувати</em>';
-$lang['privacy_stp17'] = 'Група Piwigo просто набір користувачів: так групам легше керувати дозволами альбомів, і управляти властивостями користувачів. Ось сторінка, на якій ви можете керувати групами, тобто перейменовувати, об\'єднувати, дублювати, видаляти їх. Ви також можете встановити одну або кілька груп, як "групу за замовчанням", що означає, що нові зареєстровані користувачі будуть асоціюватися з групою за замовчуванням.';
-$lang['privacy_stp16'] = 'Як на вашому комп\'ютері, ви можете вибрати кілька альбомів за допомогою клавіш Shift і Control, а потім натисніть на стрілку, щоб включити їх.<br><br>Тепер, дозвольте мені представити групи.';
-$lang['privacy_stp15'] = 'Прямо перед розтлумаченням груп, порада: тут посилання на сторінку, для встановлення публычного/приватного доступу до кілька альбомів відразу. Натисніть на неї.';
-$lang['privacy_stp14b'] = 'Важливий факт: на публічній стороні, дозволи застосовуються до веб-майстрів та адміністраторів, як до будь-якого іншого користувача. В адмініструванні, вони можуть отримати доступ до будь-якого альбому або фотографії.';
-$lang['privacy_stp14'] = 'Потім користувачам і групам користувачів буте дозволено мати доступ до альбому.';
-$lang['privacy_stp12'] = 'На цій сторінці ви можете вибрати, буде альбом доступний для всіх, або буде доступний тільки для деяких користувачів';
-$lang['privacy_stp10'] = 'Ми знаходимося в управлінні Списком альбомів, доступне з меню за допомогою <em>Альбоми » Керувати </em><br><br>Щоб редагувати альбом, наведіть на нього курсор миші і натисніть Редагувати.';
-$lang['privacy_stp1'] = 'Привіт! Я буду вашим гідом і покажу, як захистити свої фотографії в Piwigo. Будь ласка, дотримуйтесь моїх інструкцій, і натисніть кнопку Далі (або використовуйте стрілки на клавіатурі), щоб перейти. Якщо ви перейдете в іншу сторінку управління, ви будете перенаправлені на поточну сторінку туру. Якщо ви застрягли і не можете закінчити тур, зайдіть в <em>Плагіни »Take A Tour</em> і тур закінчиться. <br> Давайте почнемо!'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/vi_VN/description.txt b/plugins/TakeATour/language/vi_VN/description.txt
deleted file mode 100755
index 70cf90599..000000000
--- a/plugins/TakeATour/language/vi_VN/description.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Visit your Piwigo to discover its features. This plugin has multiple thematic tours for beginners and advanced users.
-
-Đi xem trang Piwigo của bạn để khám phá những tính năng của nó. Phần mở rộng này có trình chiếu nhiều chuyên đề cho cả người mới bắt đầu và người dùng thành thạo. \ No newline at end of file
diff --git a/plugins/TakeATour/language/vi_VN/index.php b/plugins/TakeATour/language/vi_VN/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/vi_VN/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/vi_VN/plugin.lang.php b/plugins/TakeATour/language/vi_VN/plugin.lang.php
deleted file mode 100755
index 0aa5d1800..000000000
--- a/plugins/TakeATour/language/vi_VN/plugin.lang.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['First Contact'] = 'Đầu mối đầu tiên';
-$lang['End tour'] = 'Kết thúc';
-$lang['Prev'] = 'Trước đó';
-$lang['Next '] = 'Kế tiếp';
-$lang['Start the Tour'] = 'Khởi hành';
-
-$lang['2.7 Tour'] = 'Dạo phiên bản 2.7';
-$lang['privacy_descrp'] = 'Tour này trình diễn tất cả các cách bảo vệ ảnh khỏi các truy xuất công cộng bằng cách thiết lập các quyền cho mỗi ảnh và bộ ảnh, cũng như khỏi việc sao chép bằng phương pháp bảo vệ ảnh.';
-$lang['first_contact_descrp'] = 'Khuyến nghị dành cho người mới bắt đầu, tour này giới thiệu Piwigo và các tính năng cơ bản, bắt đầu là cách thêm và quản lý ảnh. Tiếp theo là quản lý các bộ ảnh và cuối cùng là cách tùy biến dùng cấu hình, giao diện và tiện ích.';
-$lang['TAT_descrp'] = 'Xin chào! Đây là danh sách các tour giúp bạn khám phá các tính năng của thư viện Piwigo. <br><br>Chọn một tour dưới đây, sau đó làm theo hướng dẫn. Bấm vào Next/Prev (hoặc dùng các phím mũi tên của bàn phím) để thao tác Tiến/Lùi trong tour. Trong tour, nếu bạn đi qua một trang quản trị khác, bạn sẽ được tự chuyển về trang hiện tại trong tour. Nếu bạn bị lạc và không thể kết thúc tour, hãy đi đến <em>Tiện ích » Chọn một tour</em> sẽ kết thúc tour.';
-$lang['2_7_0_descrp'] = 'Khám phá những tính năng mới trong Piwigo 2.7';
-$lang['Privacy'] = 'Sự riêng tư';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = 'Tham gia một tour và khám phá các tính năng của thư viện Piwigo » Đi đến các tour sẵn có';
-$lang['Visit your Piwigo!'] = 'Chuyển đến Piwigo!';
-$lang['takeatour_configpage'] = 'Tham gia một tour » Danh sách các tour'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/vi_VN/tour_2_7_0.lang.php b/plugins/TakeATour/language/vi_VN/tour_2_7_0.lang.php
deleted file mode 100644
index ddc92f657..000000000
--- a/plugins/TakeATour/language/vi_VN/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_title4'] = 'Tìm trang';
-$lang['2_7_0_title5'] = 'Thời gian';
-$lang['2_7_0_title2'] = 'Tính năng mới đầu tiên';
-$lang['2_7_0_stp1'] = 'Xin chào! Tôi sẽ là hướng dẫn viên để giúp bạn khám phá Piwigo. Vui lòng làm theo những hướng dẫn của tôi và ấn vào Tiếp tục (hoặc dùng các phím mũi tên trên bàn phím) để đi tiếp. Nếu đi đến trang khác, bạn sẽ bị quay lại trang hiện tại của Tour';
-$lang['2_7_0_title1'] = 'Chào mừng sử dụng Piwigo 2.7 ';
-$lang['2_7_0_title11'] = 'Hẹn gặp lại';
-$lang['2_7_0_stp10'] = 'Bộ lọc theo kích thước file được bổ sung vào trình quản lý theo lô. Bạn có thể chọn một vùng từ giá trị nhỏ nhất tới lớn nhất.';
-$lang['2_7_0_stp2'] = 'Như bạn thấy, một plugin mặc định mới đã được bổ sung: Tham gia một Tour. Plugin này giúp bạn khám phá Piwigo. Sau đây là các tour có sẵn.<br>Trang này có sẵn tại <em>Plugins » Tham gia một Tour</em>';
-$lang['2_7_0_stp2b'] = 'Mẫu tải lên mới trong Piwigo 2.7 sử dụng HTML5 thay thế cho Flash, tương thích tốt hơn với các trình duyệt mới cũng như tăng độ tin cậy đối với các kết nối tốc độ chậm. Đồng thời, tính năng kéo thả sẽ đơn giản hóa việc chọn ảnh từ các trình duyệt file.';
-$lang['2_7_0_stp5'] = 'Bạn có thể đặt thời gian bổ sung cho ngày tháng, dùng các thanh trượt Giờ và Phút';
-$lang['2_7_0_stp6'] = 'Hộp chọn lựa dùng để chọn album, từ khóa... đã được thay đổi một cách thân thiện hơn. Vui lòng thử bên dưới';
-$lang['2_7_0_stp7'] = 'Giờ đây bạn có thể sắp xếp các album dựa trên ngày tháng được chụp hoặc được gửi lên của các ảnh';
-$lang['2_7_0_title10'] = 'Bộ lọc kích thước file';
-$lang['2_7_0_title2b'] = 'Mẫu tải lên mới';
-$lang['2_7_0_title6'] = 'Các hộp chọn lựa';
-$lang['2_7_0_title7'] = 'Sắp xếp album theo ngày';
-$lang['2_7_0_title9'] = 'Bộ lọc tìm kiếm';
-$lang['2_7_0_stp11'] = 'Tour đến đây là kết thúc.<p style="text-align:center">Hãy tiếp tục khám phá Piwigo 2.7!</p>Nếu bạn thích Piwigo và muốn hỗ trợ chúng tôi, bạn có thể đóng góp bằng cách giúp đỡ việc chuyển ngữ hay tài trợ,vv. <a href="http://piwigo.org/basics/contribute" target="_blank">Bấm vào đây để hỗ trợ chúng tôi</a> Cám ơn!';
-$lang['2_7_0_stp4'] = 'Trang Tìm kiếm đã hoạt động trở lại: cho phép chọn các thuộc tính của từ khóa cần tìm, danh sách các tác giả tìm thấy trong cơ sở dữ liệu, tự điền danh sách các khóa, tự điền danh sách các album...';
-$lang['2_7_0_stp8'] = 'Dễ dàng xóa giỏ hình bằng một cú click chuột.';
-$lang['2_7_0_stp9'] = 'trình quản lý lô được bổ sung một bộ lọc có cú pháp tìm kiếm mạnh mẽ, giúp tìm kiếm ảnh theo ngày, từ khóa, kích thước, tên file hoặc tùy chọn tìm chính xác, VÀ/HOẶC, tạo nhóm và loại trừ. Bạn có thể đọc trong phần giúp đỡ để biết thêm chi tiết. Cú pháp này cũng được áp dụng cho phần Tìm kiếm nhanh trong menu tại Trang chủ.';
-$lang['2_7_0_title8'] = 'Xóa giỏ hình'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/vi_VN/tour_first_contact.lang.php b/plugins/TakeATour/language/vi_VN/tour_first_contact.lang.php
deleted file mode 100755
index 760382901..000000000
--- a/plugins/TakeATour/language/vi_VN/tour_first_contact.lang.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['first_contact_stp1'] = 'Hi! Tôi sẽ hướng dẫn bạn về piwigo. Hãy làm theo hướng dẫn, ấn nút Tiếp theo(Hoặc sử dụng phím mũi tên trên bàn phím) để điều hướng. Nếu bạn đi đến một trang khác thuộc quyền của bạn, bạn sẽ được chuyển đến trang hiện tại, nếu bạn không thể kết thúc phần tìm hiểu bạn hãy vào <em>Tiện ích » thăm quan </em> để kết thúc . Nào, giờ ta bắt đầu bằng việc Thêm hình ảnh!';
-$lang['first_contact_stp2'] = 'Liên kết ở đây, ấn vào đây hoặc ấn vào Tiếp theo để tiếp tục';
-$lang['first_contact_stp18'] = 'Để thấy làm sao quản lý tập ảnh. Ấn vào <em>Trong tập ảnh » quản lý</em> hoặc chọn Tiếp theo';
-$lang['first_contact_stp22'] = 'Như cho hình ảnh, tại đây có thể chỉnh sữa thuộc tính của tập ảnh';
-$lang['first_contact_stp28'] = 'Giờ chúng ta thấy những lựa chọn để cấu hình Piwigo hoạt động theo cách của bạn. Ấn vào cấu hình -> lựa chọn hoặc chỉ ấn Tiếp theo';
-$lang['first_contact_stp30'] = 'Hãy bắt đầu để thay đổi tiêu đề';
-$lang['first_contact_stp16'] = '...trong đó một tập ảnh( hoặc nhiều tập ảnh) là hình ảnh.<br><br> vì vậy bạn có thể thêm hoặc bớt hình ảnh trong những tập ảnh. liên kết không có thật. Không hình ảnh sẽ không hiển thị khi di chuyển qua nó.';
-$lang['first_contact_stp13'] = 'Bạn có thể chỉnh sữa mô tả và nhiều hơn tại quản lý chung ở chế độ chỉ mình xem. Nhưng cho hiện tại, bạn hãy để chế độ phổ biến';
-$lang['first_contact_stp12'] = 'Sau đó chỉnh sửa bằng cách sử dụng một hành động';
-$lang['first_contact_stp11'] = 'Bạn có thể chọn một hoặc nhiều hình ảnh tại đây
-';
-$lang['first_contact_stp5'] = 'Sau đó ấn vào nút để chọn hình và gửi đi, hoặc có thể kéo thả tập tin.';
-$lang['first_contact_stp9'] = 'bạn đang trong mục quản lý chung, nơi bạn có thể quản lý một lúc hàng loạt hình ảnh. <br><br> Tại đây các bộ lộc đã được thiết lập "Caddie" bởi vì chúng được tải lên từ trang chính';
-$lang['first_contact_stp8'] = 'Hãy chỉnh sửa chúng! Ấn vào liên kết';
-$lang['first_contact_title21'] = 'mục khác';
-$lang['first_contact_title9'] = 'Quản lý chung';
-$lang['first_contact_title43'] = 'Đó là một khoảnh khắc tuyệt vời';
-$lang['first_contact_title39'] = 'Nhập vào';
-$lang['first_contact_title4'] = 'Hãy thêm một bức hình!';
-$lang['first_contact_title37'] = 'Giao diện';
-$lang['first_contact_title38'] = 'Nhập vào';
-$lang['first_contact_title35'] = 'Giao diện';
-$lang['first_contact_title34'] = 'Giao diện';
-$lang['first_contact_title29'] = '<em>Cấu hình » Lựa chọn » Chung</em>';
-$lang['first_contact_title3'] = 'Thêm hình ảnh';
-$lang['first_contact_title33'] = 'Thiết lập cho khách';
-$lang['first_contact_title28'] = 'Cấu hình';
-$lang['first_contact_title18'] = 'Quản lý những tập ảnh';
-$lang['first_contact_title19'] = 'Quản lý những tập ảnh';
-$lang['first_contact_title20'] = 'Quản lý những tập ảnh';
-$lang['first_contact_title15'] = 'Chỉnh sửa trang của một bức hình';
-$lang['first_contact_title11'] = 'Làm thế nào chỉnh sửa một bức hình';
-$lang['first_contact_title1'] = 'Chào bác đến với bộ sưu tập hình ảnh Piwigo của em';
-$lang['first_contact_stp4'] = 'Đầu tiên chọn một tập ảnh, nếu chưa có bạn nên tạo một tập ảnh mới';
-$lang['first_contact_title22'] = 'Trang chỉnh sửa album';
-$lang['first_contact_stp32'] = 'Lưu các thay đổi của bạn';
-$lang['first_contact_stp35'] = 'Thiết lập giao diện bạn thích và chọn nó làm mặc định';
-$lang['first_contact_stp29'] = 'Tại đây, trong trang đầu tiên, bạn sẽ thiết lập cấu hình cần thiết và cơ bản cho bộ sưu tập của mình';
-$lang['first_contact_stp20'] = 'Khi bạn đưa chuột vào album, đường và thông tin sẽ xuất hiện. Khi bạn kéo thả một album vào trong khối tròn, bạn sẽ thay đổi vị trí và sau đó bạn có thể lưu lại hoặc hủy.';
-$lang['first_contact_stp15'] = 'Tại đây bạn có thể chỉnh sửa tất cả thuộc tính của hình ảnh, ví dụ...';
-$lang['first_contact_stp34'] = 'Chọn một giao diện là việc đầu tiên trong Piwigo của bạn, giao diện đã được cài đặt liệt kê ở đây.<br> Nhiều hơn một giao diện được bật: Người dùng có thể thay đổi giao diện bằng cách chọn một trong số đã kích hoạt. Nếu tùy chọn \'Cho phép người dùng tùy chỉnh\' được chọn trong trang "Tùy chọn". ';
-$lang['first_contact_stp31'] = 'Sau biểu ngữ. nó sẽ hiển thị phái trên của mỗi trang. Như bạn thấy, thẻ HTML chấp nhận tại đây, bạn cũng có thể sử dụng thẻ %gallery_title%, để hiển thị tiêu đề bạn chỉ gõ dòng chữ trên.';
-$lang['first_contact_stp3'] = 'Mục đầu tiên là nơi bạn thêm hình ảnh trực tiếp từ trình duyệt. Các mục bên cạnh là nói về các cách đưa mình ảnh lên.';
-$lang['first_contact_stp23'] = 'Khóa một tập ảnh có nghĩa là chỉ các quản trị viên thấy tập ảnh đó. Rất hữu ích cho bước chuẩn bị tập ảnh trước khi công khai nó.';
-$lang['first_contact_stp21'] = 'mục tiếp theo là trang, nơi bạn có thể di chuyển bất kỳ tập ảnh ảo nào.<br> mục kiểu đường dẫn là để thiết lập một địa chỉ cụ thể cho một tập ảnh.<br> Nhưng để chỉnh sửa một tập ảnh: ấn vào "Chỉnh sửa" một tập ảnh';
-$lang['first_contact_stp40'] = 'Mình ở đây! đừng vội tắt mình, Nhưng bạn có thể thấy và có thể tắt hoặc khôi phục một tiện ích đã hoạt động.';
-$lang['first_contact_stp41'] = 'Bạn có thể thấy trong mục sau cùng, tất cả tiện ích có sẵn cho phiên bản Piwigo này,Hàng trăm tiện ích tại đây!';
-$lang['first_contact_stp17'] = 'Tại đây bạn có thể thiết lập hình ảnh như hình thu nhỏ của một hoặc nhiều tập ảnh. Hình không không được liên kết với hình thu nhỏ của tập ảnh. Nếu hình của bạn được liên kết với tập ảnh, thì nó thậm chỉ còn đơn giản hơn cả việc tạo ảnh thu nhỏ cho tập ảnh từ những bức hình đang để chế độ công khai(chú ý: sử dụng Admin tools(công cụ quản trị) để làm đơn giản hơn)';
-$lang['first_contact_stp14'] = 'Giờ chúng ta thấy <b>chỉnh sửa</br> của một bức ảnh. Trang đó chúng ta có thể truy cập từ đây nhưng cũng có thể từ những trang hình công khai khi đăng nhập bằng tài khoản quản trị.<br><br>Đưa chuột đến hình thu nhỏ và ấn để chỉnh sửa.';
-$lang['first_contact_stp19_b'] = 'Đây là bản liệt kê các tập ảnh \'gốc\'';
-$lang['first_contact_stp6'] = 'Hình đã được liệt kê. Khi đã sẵn sàng thì hãy ấn nút "Tải lên"';
-$lang['first_contact_stp38'] = 'Tiện ích sẽ giúp bạn quản lý Piwigo dễ dàng. Nó có thể làm được bất cứ điều gì bạn có thể tưởng tượng từ việcvăn bản nhỏ đến đến hoàn thành các tính năng. Như các tiện ích công cộng, nó chấp nhận người dùng bình thường tải lên mà ko cần quyền hạn quản lý';
-$lang['first_contact_stp37'] = 'Để cài đặt giao diện mới, bạn có thể tải xuống trực tiếp từ mục "thêm giao diện". Chỉ giao diện được đánh dấu tương thích với phiên bản Piwigo sẽ xuất hiện.<br><br> Hãy khám phá những tiện ích bây giờ! Ấn vào <em>Tiện ích»Quản lý</em>';
-$lang['first_contact_stp19'] = 'Tại đây liệt kê những tập ảnh \'gốc\'. Nếu bạn thấy một tập ảnh với hình nền gạch, nghĩa là nó được đồng bộ hoá bởi phương thức FTP. tập ảnh vật lý không thể di chuyển hay xoá tại đây. Các tập ảnh khác được gọi là tập ảnh ảo. ';
-$lang['first_contact_stp43'] = 'Mục khám phá này đã có từ lâu, nhưng chỉ giới thiệu một phần nhỏ trong chức năng của Piwigo. Mọi thứ đều có kết thúc. <br><br> bạn có thể tìm hiểu sâu hơn về các tính năng của Piwigo bằng cách tìm hiểu trang khám phá hoặc đọc tài liệu trong trang web Piwigo.org.<br><br> Đừng quên các đường dẫn trợ giúp bên góc phải của bất kỳ trang quản trị nào cũng có.<p style=\'text-align:center;\'>Hãy khám phá piwigo của bạn</p>';
-$lang['first_contact_stp39'] = 'Trang đầu tiên. liệt kê các tiện ích đã được cài đặt.<br><br>Ở trên, liệt kê các tiện ích đã kích hoạt, mà hiện nay đang chạy.<br><br> Phía dưới, là các tiện ích đã được cài đặt trong trong thư mục tiện ích nhưng chưa được chạy.<br><br> Xóa một tiện ích nghĩa là bất kỳ thông tin về nó đều được gỡ bỏ (tập tin, tùy chọn.v.v.vv). Đối với hầu hết các tiện ích, Chấp dứt hoạt động nhưng sẽ vẫn giữ lại thông tin đăng ký của nó.';
-$lang['first_contact_stp33'] = 'Trang "Cài đặt cho khách" để thiết lập sở thích của người xem. Mỗi lần Piwigo đề cập đến "khách" nghĩa là người dùng chưa đăng ký.<br>Để tiếp tục với cấu hình. ấn vào <em>Cấu hình»giao diện</em> hoặc chỉ ấn Tiếp tục';
-$lang['first_contact_stp10'] = 'Đây là liên kết có thể truy cập trực tiếp vào mục của mình của bạn. Đó là một công cho người quản lý sẽ dễ dàng nhận diện hình ảnh khi duyệt một phần nào để chỉnh sửa chúng rong phần quản lý tổng quát.<br><br> Bạn có thể thêm hình ảnh vào các mục của mình từ những hình ảnh đã công khai trên trang web khi đăng nhập bằng quyền quản lý, hoặc sử dụng hành động" thêm vào mục của mình" trong phần quản lý chung.';
-$lang['first_contact_stp7'] = 'Tại đây là tóm tắt các hình bạn tải lên. Ta thấy Piwigo có tự tạo ra những hình thu nhỏ. Bạn có thể:<ul><li> Quản lý tất cả những bức hình tải lên tại khu quản lý toàn bộ</li><li>chỉnh sửa thuộc tính của hình ảnh bằng cách ấn vào nó</li><li> thêm nhiều hình ảnh</li>'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/zh_CN/description.txt b/plugins/TakeATour/language/zh_CN/description.txt
deleted file mode 100755
index 7477e2783..000000000
--- a/plugins/TakeATour/language/zh_CN/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-访问您的 Piwigo,探索它的特性。本插件为初学者与高级用户提供了多种主题的导览。 \ No newline at end of file
diff --git a/plugins/TakeATour/language/zh_CN/index.php b/plugins/TakeATour/language/zh_CN/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/zh_CN/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/zh_CN/plugin.lang.php b/plugins/TakeATour/language/zh_CN/plugin.lang.php
deleted file mode 100755
index 70795593e..000000000
--- a/plugins/TakeATour/language/zh_CN/plugin.lang.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['Start the Tour'] = '开始导览';
-$lang['End tour'] = '结束导览';
-$lang['Next '] = '前进';
-$lang['Prev'] = '后退';
-$lang['Take a tour and discover the features of your Piwigo gallery » Go to the available tours'] = '开始导览,探索您的 Piwigo 图库 » 前往可用的导览';
-$lang['Visit your Piwigo!'] = '访问您的 Piwigo !';
-$lang['takeatour_configpage'] = 'Take A Tour » 导览项目';
-$lang['TAT_descrp'] = '欢迎!这里列出了探索您的 Piwigo 图库之特性的所有导览。<br>开启以下的某一导览,按提示操作。点击 后退/前进(或使用键盘上的箭头键)控制导览进程。导览中如果点击进入管理界面的其他页, 将自动返回当前的导览页。如果被卡住无法结束导览,进入<em>插件 » Take A Tour</em> 即可结束导览。';
-
-$lang['First Contact'] = '第一次接触';
-$lang['first_contact_descrp'] = '推荐给新手,本导览将向您介绍 Piwigo 的基本特性。从添加和管理图片开始,继之以相册的管理和权限、个性化设置,以及主题和插件等。';
-
-$lang['2.7 Tour'] = 'Piwigo 2.7 导览';
-$lang['2_7_0_descrp'] = '探索 Piwigo 2.7 的新特性';
-
-$lang['privacy_descrp'] = '本导览向您展示通过涵盖每个相册及每张图片的许可系统保护您的图片免于公共访问的各种方法,以及通过图片保护防止拷贝。';
-$lang['Privacy'] = '隐私'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/zh_CN/tour_2_7_0.lang.php b/plugins/TakeATour/language/zh_CN/tour_2_7_0.lang.php
deleted file mode 100644
index e92d10a9c..000000000
--- a/plugins/TakeATour/language/zh_CN/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-$lang['2_7_0_stp4'] = '搜索页已重写:可选择搜索关键词时所应用到的属性,数据库中的作者列表,自动完成标签、相册等……';
-$lang['2_7_0_stp5'] = '在日期基础上还可设置时间,使用小时和分钟滑块';
-$lang['2_7_0_stp6'] = '选择相册、标签等的脚本变得更加用户友好。可在下面测试。';
-$lang['2_7_0_title4'] = '搜索页';
-$lang['2_7_0_title5'] = '时间';
-$lang['2_7_0_title6'] = '选择脚本';
-$lang['2_7_0_title1'] = '欢迎来到 Piwigo 2.7';
-$lang['2_7_0_title11'] = '回见!';
-$lang['2_7_0_stp1'] = '你好!我将为您导览 Piwigo。请按指令操作,点击 前进(或使用键盘上的箭头键)控制进程。导览中如果点击进入其他页面, 将自动返回当前的导览页。';
-$lang['2_7_0_stp2'] = '如您所见,我们添加了一个新的默认插件:Take A Tour。此插件可以帮助您探索您的 Piwigo。这里列出了所有可用的导览。<br>此页面可经由 <em>插件 » Take A Tour</em> 访问。';
-$lang['2_7_0_stp11'] = '导览结束。<p style="text-align:center">开始享用您的 Piwigo 2.7 吧!</p>如果您喜欢 Piwigo 并希望支持我们,您可以通过帮助我们进行翻译、捐赠等方式贡献您的力量。<a href="http://piwigo.org/basics/contribute" target="_blank">点此支持我们</a>';
-$lang['2_7_0_title2'] = '首个新特性';
-$lang['2_7_0_stp7'] = '现在您可以按图片的创建或发布时间来对相册进行排序';
-$lang['2_7_0_stp8'] = '仅需一击即可清空标记图片库的简易操作链接。';
-$lang['2_7_0_title10'] = '文件大小过滤';
-$lang['2_7_0_title2b'] = '新的上传形式';
-$lang['2_7_0_title7'] = '相册按日期排序';
-$lang['2_7_0_title8'] = '清空标记图片库';
-$lang['2_7_0_title9'] = '搜索过滤';
-$lang['2_7_0_stp10'] = '文件大小的过滤条件也被加入到了批量管理中。您可以通过设定最小和最大值来选定一个范围。';
-$lang['2_7_0_stp9'] = '批量管理中加入了一个搜索过滤器。它拥有强大的语法,可根据日期、标签、大小、文件名搜索图片,并具有如 完全匹配、和/或、聚合、排除 等搜索选项。您可以稍后再阅读详细的帮助文档。同样的语法也应用到了相册主界面侧方菜单的 快捷搜索 上。';
-$lang['2_7_0_stp2b'] = 'Piwigo 2.7 的新的上传形式基于HTML5而非Flash,这意味着与新一代浏览器的更佳的兼容性,以及对慢速连接的更强的可靠性。拖放的方式使得从文件浏览器选择图片更加容易。'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/zh_CN/tour_first_contact.lang.php b/plugins/TakeATour/language/zh_CN/tour_first_contact.lang.php
deleted file mode 100644
index 94ad15c03..000000000
--- a/plugins/TakeATour/language/zh_CN/tour_first_contact.lang.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-$lang['first_contact_title10'] = '';
-$lang['first_contact_title12'] = '';
-$lang['first_contact_title13'] = '';
-$lang['first_contact_title14'] = '';
-$lang['first_contact_title16'] = '';
-$lang['first_contact_title17'] = '';
-$lang['first_contact_title2'] = '';
-$lang['first_contact_title23'] = '';
-$lang['first_contact_title30'] = '';
-$lang['first_contact_title31'] = '';
-$lang['first_contact_title32'] = '';
-$lang['first_contact_title40'] = '';
-$lang['first_contact_title41'] = '';
-$lang['first_contact_title5'] = '';
-$lang['first_contact_title6'] = '';
-$lang['first_contact_title7'] = '';
-$lang['first_contact_title8'] = '';
-$lang['first_contact_stp7'] = '这里是上传图片的基本信息。可以看到 Piwigo 已自动生成了缩略图。您现在可以使用底部的链接添加更多图片,点击图片编辑其属性,或点击 批量管理 ,管理全部上传的图片...';
-$lang['first_contact_stp6'] = '您将看到所选图片被列出。添加至少两张图片,然后点击 开始上传 按钮';
-$lang['first_contact_stp4'] = '首先选择一个相册;如尚无相册,则创建一个。';
-$lang['first_contact_title4'] = '让我们来添加图片!';
-$lang['first_contact_stp3'] = '第一个标签页是使用浏览器直接添加图片。其他标签页是使用其他方法上传图片。';
-$lang['first_contact_title3'] = '添加图片 页面';
-$lang['first_contact_stp1'] = '你好!我将为您导览 Piwigo。请按指令操作,点击 前进(或使用键盘上的箭头键)控制进程。导览中如果点击进入管理界面的其他页面, 将自动返回当前的导览页。如果被卡住无法结束导览,进入<em>插件 » Take A Tour</em> 即可结束导览。<br>那么,就让我们从添加图片开始吧!';
-$lang['first_contact_stp2'] = '链接在此。点击 前进 以继续。';
-$lang['first_contact_title1'] = '欢迎来到您的 Piwigo 图库';
-$lang['first_contact_stp16'] = '在这里添加或取消图片所关联的相册。关联是虚拟的,并不会对图片进行物理性的移动。';
-$lang['first_contact_stp15'] = '在本页面您可以编辑图片的所有属性,例如...';
-$lang['first_contact_title15'] = '图片编辑页';
-$lang['first_contact_stp10'] = '此链接是标记图片库的直接访问链接:标记图片库是方便管理员批量编辑图片的一个工具,可以轻松地把将要编辑的一些图片归置到一起。在以管理员身份登录的情况下,您可以在公开的图片展示页面将图片加入到标记图片库里,或者在批量管理页面上使用 "添加到标记图片库" 这一操作。';
-$lang['first_contact_stp14'] = '现在让我们来看看单张图片的编辑页面。该页面可以从这里进入,也可以从公开的图片展示页面进入(在以管理员身份登陆的情况下)。将鼠标悬停在缩略图上然后点击 编辑 。';
-$lang['first_contact_stp13'] = '您可以在单一模式下编辑图片的描述以及更多的东西。但现在让我们暂时留在全局模式。';
-$lang['first_contact_stp11'] = '您可以在此处选择一张或多张图片';
-$lang['first_contact_title11'] = '怎样编辑图片';
-$lang['first_contact_stp9'] = '现在您进入了批量管理页面,在这里您可以批量编辑多张图片。这里的标记图片库被设置为过滤器,因为我们是经由图片上传页面进来的。';
-$lang['first_contact_title9'] = '批量管理';
-$lang['first_contact_stp8'] = '让我们来编辑它们吧!点击此链接。如果没有看到链接,点击 后退 来添加至少两张图片。';
-$lang['first_contact_stp28'] = '现在让我们看看那些使 Piwigo 以您希望的方式工作的那些选项。点击 设置->选项 或 前进。';
-$lang['first_contact_title29'] = '设置->选项->总体';
-$lang['first_contact_title28'] = '设置';
-$lang['first_contact_stp23'] = '锁定一个相册,意味着只有管理员可以看到该相册:通常用于管理员正在管理相册属性或不希望立即发布该相册的情况。';
-$lang['first_contact_stp22'] = '在这里您可以编辑相册的属性';
-$lang['first_contact_title22'] = '相册编辑页';
-$lang['first_contact_title21'] = '其他标签页';
-$lang['first_contact_stp20'] = '鼠标置于相册行之上时,即可看到操作链接与相册信息。用鼠标拖动和放置相册行,即可改变相册的排列顺序,之后可以选择保存或取消手动排序。';
-$lang['first_contact_title18'] = '管理相册';
-$lang['first_contact_title19'] = '管理相册';
-$lang['first_contact_title20'] = '管理相册';
-$lang['first_contact_stp43'] = '这个导览够长的,但我们还只是窥探了强大的 Piwigo 的冰山一角。万事终有尽头,我们的导览结束了。<br>您可以通过查看其它的导览或阅读我们官网piwigo.org上的文档去更深地了解 Piwigo。';
-$lang['first_contact_title33'] = '游客设置';
-$lang['first_contact_title43'] = '这是一次愉快的经历';
-$lang['first_contact_stp41'] = '在最后这个标签页上您可以看到所有与您的 Piwigo 兼容的插件,数量成百喔!';
-$lang['first_contact_stp40'] = '瞧!我在这儿呢!可以看到您能够停用或恢复(恢复到默认配置)一个已启用的插件……,现在可不要停用我喔。';
-$lang['first_contact_title38'] = '插件';
-$lang['first_contact_title39'] = '插件';
-$lang['first_contact_stp39'] = '在第一个标签页,即插件列表页上,列出了已安装的插件。首先列出的是已启用的插件,它们正在运行。然后列出的是已安装于/plugins目录里,但处于停用状态的插件。删除一个插件意味着该插件的所有痕迹将被移除(文件、选项等)。而停用一个插件,就大部分插件而言,插件注册的数据将会保留在系统里。';
-$lang['first_contact_stp38'] = '插件是个性化您的 Piwigo 的简单办法。他们可以做到您能想到的几乎所有事情,小到文字添加,大到整体的特性,比如 Community 插件可以使非管理员用户无需进入管理界面即可上传图片。';
-$lang['first_contact_stp37'] = '要安装新的主题,您可以在 \'添加新主题\' 页面上直接下载。只有与您的版本的 Piwigo 兼容的主题才会被列出。<br>现在让我们去看看 插件 吧!点击 插件->管理 或 前进';
-$lang['first_contact_title34'] = '主题';
-$lang['first_contact_title35'] = '主题';
-$lang['first_contact_title37'] = '主题';
-$lang['first_contact_stp33'] = '关于选项:\'游客设置\'页是用来设定未注册的访问者所看到的界面的。Piwigo 提及\'游客\'时指的都是未注册的访问者。<br>让我们继续往下看吧:点击 设置->主题 或 前进。';
-$lang['first_contact_stp32'] = '现在保存以上的更改';
-$lang['first_contact_stp31'] = '然后是页首banner,它将显示于所有页面的顶端。如您所见,HTML标签允许在这里使用。 您也可以使用 %gallery_title% 标签来显示刚才在上面输入的图库标题。';
-$lang['first_contact_stp30'] = '让我们从更改图库标题开始';
-$lang['first_contact_stp29'] = '在这里,第一个标签页上,您可以设定图库的最核心和基本的设置。';
-$lang['first_contact_stp34'] = '选择一个主题是个性化您的 Piwigo 的第一步。这里列出了已安装的主题。<br>您可以启用一个以上的主题:用户可以从这些已被启用的主题中选择他们想要的,前提是 选项 » 总体 » 权限 中的 \'允许用户自定义\' 选项已勾选。';
-$lang['first_contact_stp35'] = '将您喜欢的主题设为默认主题。';
-$lang['first_contact_stp5'] = '然后点此按钮并选择需要添加的图片,或用鼠标直接拖放文件。';
-$lang['first_contact_stp21'] = '在下一个标签页上您可以移动任何虚拟相册。<br>而 固定链接 标签页用于为一个相册设定一个特定的 url 地址。<br>但让我们先来编辑一个相册吧:点击 编辑';
-$lang['first_contact_stp19'] = '这里列出了 \'根\' 相册。如果您看到一个相册具有斜纹背景,这意味着该相册是一个经FTP同步的物理相册。物理相册无法在此移动或删除。其他类型的相册则称为虚拟相册。';
-$lang['first_contact_stp19_b'] = '这里列出了 \'根\' 相册。';
-$lang['first_contact_stp18'] = '现在让我们看看怎样管理相册。点击 <em>相册 » 管理</em> 或 前进 » ';
-$lang['first_contact_stp17'] = '在这里您可将图片设为一个或几个相册的缩略图。设为相册缩略图的图片并不必须与相册相关联。假如图片与相册关联,那么将其设为相册缩略图就更简单,在前台的图片公开页面上即可操作。(提示:使用 Admin Tools 插件会更简单)';
-$lang['first_contact_stp12'] = '然后使用一项操作来编辑它们'; \ No newline at end of file
diff --git a/plugins/TakeATour/language/zh_CN/tour_privacy.lang.php b/plugins/TakeATour/language/zh_CN/tour_privacy.lang.php
deleted file mode 100644
index a61157317..000000000
--- a/plugins/TakeATour/language/zh_CN/tour_privacy.lang.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-$lang['privacy_stp11'] = '现在点击"权限"标签页';
-$lang['privacy_stp12'] = '在该页面,您可选择相册是否对所有人开放,或仅限部分用户访问';
-$lang['privacy_stp13'] = '现在点击"非公开"。';
-$lang['privacy_stp14'] = '然后用户及用户组可被授予该相册的访问权。';
-$lang['privacy_stp15'] = '在解释"组"之前,先来个专业技巧:此链接指向的页面可批量设置多个相册的非公开-公开。请点击。';
-$lang['privacy_stp10'] = '现在我们在相册管理列表页,本页可在菜单上通过<em>相册 » 管理</em>进入。<br><br>鼠标悬停并点击"编辑"以编辑相册。';
-$lang['privacy_stp1'] = '你好!我将为您导览如何在 Piwigo 中保护您的图片。请按指令操作,点击 前进(或使用键盘上的箭头键)控制进程。导览中如果点击进入管理界面的其他页面, 将自动返回当前的导览页。如果被卡住无法结束导览,进入<em>插件 » Take A Tour</em> 即可结束导览。<br>让我们开始吧!';
-$lang['privacy_stp2'] = '在这里您可以进入综合帮助界面。点击 前进 直接进入关于权限管理的帮助页。';
-$lang['privacy_stp22'] = '<em>对高级用户</em><br><br>在 Piwigo 中,您可使用您的本地设置保护原图片。使用变量 $conf[\'original_url_protection\']: 默认为空,将值设为 "images" 来单独保护图片,或 "all" 来保护可能非常消耗资源或不能在服务器上运行的所有媒体类型。<br><br>此选项对公开与非公开的内容均适用。此选项目前需要您禁止对 /upload 和 /galleries 文件夹的访问,通过使用一个 .htaccess 文件(通常是一个内容带有 "Deny from all" 的文本文件)或使用服务器设置。<br><br>请注意,使用非FTP方式上传的图片,文件名是<b>随机的</b>,所以不可能猜测:仅当访问者拥有尺寸调整后的图片的访问权(比如缩略图)时,原始图片的文件名和路径才可能被发现。 $conf[\'original_url_protection\'] 和禁止对 /upload 和 /galleries 文件夹的访问就是为了规避那种情况。';
-$lang['privacy_stp24'] = '导览结束。<p style="text-align:center">开始享用您的 Piwigo 吧!</p>如果您喜欢 Piwigo 并希望支持我们,您可以通过帮助我们进行翻译、捐赠等方式贡献您的力量。<a href="http://piwigo.org/basics/contribute" target="_blank">点此支持我们</a>。谢谢!';
-$lang['privacy_stp4'] = '我们有两套管理图片访问权限的系统。它们是相互独立的,您可以创建一个名为"家人"的用户组,但这个组与隐私等级中预设的"家人"毫无关系。<br><br>隐私的等级会被应用到每一张图片,而 组/用户 的权限则会应用到每个相册。您可使用1个或同时使用这两个系统。<br><br>下一个标签页是关于用户组管理的。';
-$lang['privacy_stp5'] = '以下解释了怎样管理用户组。<br>那些权限仅应用于相册公开界面的浏览或外部应用程序对图片与相册的访问。我们稍后将看到其他方面的保护,但现在先让我们练习一下!';
-$lang['privacy_stp9'] = '...并选择操作"图片对谁可见"。现在您就可以改变选中图片的隐私等级。<br><br>您也可以在一张特定图片的编辑页面执行该操作。您可以从图库的公开界面进入,也可以从这里进入。<br><br>现在,我将为您展示基于用户组和用户的相册权限的另一个系统。';
-$lang['privacy_stp3'] = '花点时间阅读下面的信息。';
-$lang['privacy_stp6'] = '当您上传图片时,可在那里变更已上传图片的隐私等级...';
-$lang['privacy_stp7'] = '...或者您可以稍后再设置,在 批量管理 的 全局设置 中。<br><br>页面在这里<em>图片 » 最新图片</em>,过滤器"最后导入"已被应用。';
-$lang['privacy_stp8'] = '选择一张或多张图片...';
-$lang['privacy_title1'] = '欢迎来到 隐私导览';
-$lang['privacy_title10'] = '相册权限';
-$lang['privacy_title11'] = '相册权限';
-$lang['privacy_title24'] = '这是一次愉快的经历';
-$lang['privacy_title12'] = '相册权限';
-$lang['privacy_title15'] = '技巧';
-$lang['privacy_title17'] = '组';
-$lang['privacy_title18'] = '组';
-$lang['privacy_title19'] = '用户';
-$lang['privacy_title2'] = 'Piwigo内部帮助';
-$lang['privacy_title20'] = '公开图片';
-$lang['privacy_title21'] = '公开图片';
-$lang['privacy_title22'] = '本地设置:原图保护';
-$lang['privacy_title3'] = '权限';
-$lang['privacy_title4'] = '权限';
-$lang['privacy_title5'] = '权限 > 组';
-$lang['privacy_title6'] = '隐私等级';
-$lang['privacy_title7'] = '隐私等级';
-$lang['privacy_title8'] = '隐私等级';
-$lang['privacy_title9'] = '隐私等级';
-$lang['privacy_stp21'] = '解决办法是:<ul><li>添加水印,至少在中高分辨率的图片上,</li><li>并禁用 XL 和 XXL 尺寸,</li><li>且对有关用户禁用高分辨率 High Definition (原图片的下载和显示) 。';
-$lang['privacy_stp20'] = '现在您知道如何保障您的图片的私密性了,但您可能还想知道怎样保护您的公开图片。您可能首先想到的是阻止访问者下载图片:您做不到,因为网络就是这样创造的(访问者的浏览器会下载显示和未显示出来的所有资源)。鼠标右键可以被禁用、在图片上方可以放置一个透明的层等等,但图片还是会被下载。整个网页可以被任何浏览器保存。';
-$lang['privacy_stp19'] = '在这里您可以通过悬停并点击"编辑"链接快速编辑一个单个用户。<br><br>您也可以选择多个用户,通过选择一项动作来批量编辑它们。';
-$lang['privacy_stp16'] = '像通常的键盘操作一样,您可使用Shift和Control键选择相册,并点击箭头来置换。<br><br>现在让我来介绍一下用户组吧。';
-$lang['privacy_stp17'] = 'Piwigo中的一个组是一群用户的集合:这样管理相册授权和用户属性时就更加容易。这里就是管理用户组的页面,可以重命名、合并、复制、删除它们。您也可以将1个或多个组设置为"默认组",新注册的用户将受到那些默认组的设置的影响。';
-$lang['privacy_stp18'] = '要将用户添加或删除于用户组,前往 <em>用户 » 管理</em> 页。';
-$lang['privacy_title14b'] = '';
-$lang['privacy_stp14b'] = '重要提示:站长和管理员在浏览相册界面时并不是一览无余的,但在管理界面上则可以访问所有相册和图片。';
diff --git a/plugins/TakeATour/language/zh_TW/index.php b/plugins/TakeATour/language/zh_TW/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/TakeATour/language/zh_TW/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/TakeATour/language/zh_TW/tour_2_7_0.lang.php b/plugins/TakeATour/language/zh_TW/tour_2_7_0.lang.php
deleted file mode 100755
index 4b16c5b66..000000000
--- a/plugins/TakeATour/language/zh_TW/tour_2_7_0.lang.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-$lang['2_7_0_stp11'] = '這次的教學到此為止。<p style="text-align:center">享受你的Piwigo 2.7 </p>
-如果你喜歡Piwigo,想支持我們,可以通過翻譯,捐贈等貢獻幫助。
-<a href="http://piwigo.org/basics/contribute" target="_blank">
-點擊這裡支持我們</a>謝謝!'; \ No newline at end of file
diff --git a/plugins/TakeATour/main.inc.php b/plugins/TakeATour/main.inc.php
deleted file mode 100644
index c71b89b1f..000000000
--- a/plugins/TakeATour/main.inc.php
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-/*
-Plugin Name: Take A Tour of Your Piwigo
-Version: 2.7.4
-Description: Visit your Piwigo to discover its features. This plugin has multiple thematic tours for beginners and advanced users.
-Plugin URI: http://piwigo.org/ext/extension_view.php?eid=776
-Author:Piwigo Team
-Author URI: http://piwigo.org
-*/
-if (!defined('PHPWG_ROOT_PATH'))
-{
- die('Hacking attempt!');
-}
-
-/** Tour sended via $_POST or $_GET**/
-if ( isset($_REQUEST['submited_tour_path']) and defined('IN_ADMIN') and IN_ADMIN )
-{
- check_pwg_token();
- pwg_set_session_var('tour_to_launch', $_REQUEST['submited_tour_path']);
- global $TAT_restart;
- $TAT_restart=true;
-}
-elseif ( isset($_GET['tour_ended']) and defined('IN_ADMIN') and IN_ADMIN )
-{
- pwg_unset_session_var('tour_to_launch');
-}
-
-/** Setup the tour **/
-/*
- * CHANGE FOR RELEASE
-$version_=str_replace('.','_',PHPWG_VERSION);*/
-$version_="2_7_0";
-/***/
-if (pwg_get_session_var('tour_to_launch')!='tours/'.$version_ and isset($_GET['page']) and $_GET['page']=="plugin-TakeATour")
-{
- pwg_unset_session_var('tour_to_launch');
-}
-elseif ( pwg_get_session_var('tour_to_launch') )
-{
- add_event_handler('init', 'TAT_tour_setup');
-}
-
-function TAT_tour_setup()
-{
- global $template, $TAT_restart, $conf;
- $tour_to_launch=pwg_get_session_var('tour_to_launch');
- load_language('plugin.lang', PHPWG_PLUGINS_PATH .'TakeATour/', array('force_fallback'=>'en_UK'));
-
- list(, $tour_name) = explode('/', $tour_to_launch);
- load_language('tour_'.$tour_name.'.lang', PHPWG_PLUGINS_PATH .'TakeATour/', array('force_fallback'=>'en_UK'));
-
- $template->set_filename('TAT_js_css', PHPWG_PLUGINS_PATH.'TakeATour/tpl/js_css.tpl');
- $template->assign('ADMIN_THEME', $conf['admin_theme']);
- $template->parse('TAT_js_css');
-
- if (isset($TAT_restart) and $TAT_restart)
- {
- $TAT_restart=false;
- $template->assign('TAT_restart',true);
- }
- $tat_path=str_replace(basename($_SERVER['SCRIPT_NAME']),'', $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']);
- $template->assign('TAT_path', $tat_path);
- $template->assign('ABS_U_ADMIN', get_absolute_root_url());// absolute one due to public pages and $conf['question_mark_in_urls'] = false+$conf['php_extension_in_urls'] = false;
- include($tour_to_launch.'/config.inc.php');
- $template->set_filename('TAT_tour_tpl', $TOUR_PATH);
- $template->parse('TAT_tour_tpl');
-}
-
-/** Add link in Help pages **/
-add_event_handler('loc_end_help','TAT_help');
-function TAT_help()
-{
- global $template;
- load_language('plugin.lang', PHPWG_PLUGINS_PATH .'TakeATour/');
- $template->set_prefilter('help', 'TAT_help_prefilter');
-}
-function TAT_help_prefilter($content, &$smarty)
-{
-
- $search = '<div id="helpContent">';
- $replacement = '<div id="helpContent">
-<fieldset>
-<legend>{\'Visit your Piwigo!\'|@translate}</legend>
-<p class="nextStepLink"><a href="admin.php?page=plugin-TakeATour">{\'Take a tour and discover the features of your Piwigo gallery » Go to the available tours\'|@translate}</a></p>
-</fieldset>';
- return(str_replace($search, $replacement, $content));
-
-}
-
-/** Add link in no_photo_yet **/
-add_event_handler('loc_end_no_photo_yet','TAT_no_photo_yet');
-function TAT_no_photo_yet()
-{
- global $template;
- load_language('plugin.lang', PHPWG_PLUGINS_PATH .'TakeATour/');
- $template->set_prefilter('no_photo_yet', 'TAT_no_photo_yet_prefilter');
- $template->assign(
- array(
- 'F_ACTION' => get_root_url().'admin.php',
- 'pwg_token' => get_pwg_token()
- )
- );
-}
-function TAT_no_photo_yet_prefilter($content, &$smarty)
-{
- $search = '<div class="bigButton"><a href="{$next_step_url}">{\'I want to add photos\'|@translate}</a></div>';
- $replacement = '<div class="bigButton"><a href="{$F_ACTION}?submited_tour_path=tours/first_contact&pwg_token={$pwg_token}">{\'Start the Tour\'|@translate}</a></div>';
- return(str_replace($search, $replacement, $content));
-}
-
-/** Add admin menu link **/
-add_event_handler('get_admin_plugin_menu_links', 'TAT_admin_menu' );
-function TAT_admin_menu($menu)
-{
- array_push($menu, array(
- 'NAME' => 'Take a Tour',
- 'URL' => get_root_url().'admin.php?page=plugin-TakeATour'
- )
- );
- return $menu;
-}
-?> \ No newline at end of file
diff --git a/plugins/TakeATour/tours/2_7_0/config.inc.php b/plugins/TakeATour/tours/2_7_0/config.inc.php
deleted file mode 100644
index 76b671632..000000000
--- a/plugins/TakeATour/tours/2_7_0/config.inc.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-/**********************************
- * REQUIRED PATH TO THE TPL FILE */
-
-$TOUR_PATH = PHPWG_PLUGINS_PATH.'TakeATour/tours/2_7_0/tour.tpl';
-
-/*********************************/
-
-
-/**********************
- * Preparse part *
- **********************/
- $template->assign('TAT_index', make_index_url(array('section' => 'categories')));
- $template->assign('TAT_search', get_root_url().'search.php');
-
- //picture id
- if (isset($_GET['page']) and preg_match('/^photo-(\d+)(?:-(.*))?$/', $_GET['page'], $matches))
- {
- $_GET['image_id'] = $matches[1];
- }
- check_input_parameter('image_id', $_GET, false, PATTERN_ID);
- if (isset($_GET['image_id']) and pwg_get_session_var('TAT_image_id')==null)
- {
- $template->assign('TAT_image_id', $_GET['image_id']);
- pwg_set_session_var('TAT_image_id', $_GET['image_id']);
- }
- elseif (is_numeric(pwg_get_session_var('TAT_image_id')))
- {
- $template->assign('TAT_image_id', pwg_get_session_var('TAT_image_id'));
- }
- else
- {
- $query = '
- SELECT id
- FROM '.IMAGES_TABLE.'
- ORDER BY RAND()
- LIMIT 1
- ;';
- $row = pwg_db_fetch_assoc(pwg_query($query));
- $template->assign('TAT_image_id', $row['id']);
- }
-?> \ No newline at end of file
diff --git a/plugins/TakeATour/tours/2_7_0/tour.tpl b/plugins/TakeATour/tours/2_7_0/tour.tpl
deleted file mode 100644
index 54e1bda3c..000000000
--- a/plugins/TakeATour/tours/2_7_0/tour.tpl
+++ /dev/null
@@ -1,98 +0,0 @@
-{footer_script require='jquery.bootstrap-tour'}{literal}
-
-var tour = new Tour({
- name: "2_7_0",
- orphan: true,
- onEnd: function (tour) {window.location = "{/literal}{$ABS_U_ADMIN}{literal}admin.php?page=plugin-TakeATour&tour_ended=2_7_0"},
- template: "<div class='popover'> <div class='arrow'></div> <h3 class='popover-title'></h3> <div class='popover-content'></div> <div class='popover-navigation'> <div class='btn-group'> <button class='btn btn-sm btn-default' data-role='prev'>&laquo; {/literal}{'Prev'|@translate|@escape:'javascript'}{literal}</button> <button class='btn btn-sm btn-default' data-role='next'>{/literal}{'Next '|@translate|@escape:'javascript'}{literal} &raquo;</button> </div> <button class='btn btn-sm btn-default' data-role='end'>{/literal}{'End tour'|@translate|@escape:'javascript'}{literal}</button> </div> </div>",
-});
-{/literal}{if $TAT_restart}tour.restart();{/if}{literal}
-
-tour.addSteps([
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- title: "{/literal}{'2_7_0_title1'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'2_7_0_stp1'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=plugin-TakeATour",
- placement: "left",
- element: "#content",
- title: "{/literal}{'2_7_0_title2'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'2_7_0_stp2'|@translate|@escape:'javascript'}{literal}",
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "top",
- title: "{/literal}{'2_7_0_title2b'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'2_7_0_stp2b'|@translate|@escape:'javascript'}{literal}",
- },
- {
- path: "{/literal}{$TAT_path}{$TAT_search}{literal}",
- placement: "left",
- element: "#content",
- title: "{/literal}{'2_7_0_title4'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'2_7_0_stp4'|@translate|@escape:'javascript'}{literal}"
- },
- {//5
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photo-{/literal}{$TAT_image_id}{literal}",
- placement: "top",
- element: ".icon-calendar",
- title: "{/literal}{'2_7_0_title5'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'2_7_0_stp5'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photo-{/literal}{$TAT_image_id}{literal}",
- placement: "top",
- element: "#catModify > fieldset:nth-child(2) > p:nth-child(5) > strong",
- title: "{/literal}{'2_7_0_title6'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'2_7_0_stp6'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=cat_list",
- element: "#autoOrderOpen",
- onShown: function (tour) {jQuery("#autoOrderOpen").trigger("click");},
- title: "{/literal}{'2_7_0_title7'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'2_7_0_stp7'|@translate|@escape:'javascript'}{literal}",
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=batch_manager&filter=prefilter-caddie",
- element: "#empty_caddie",
- placement: "right",
- title: "{/literal}{'2_7_0_title8'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'2_7_0_stp8'|@translate|@escape:'javascript'}{literal}",
- prev:4
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=batch_manager&filter=search-taken:2013..2015",
- element: "#filter_search input[name=q]",
- title: "{/literal}{'2_7_0_title9'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'2_7_0_stp9'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=batch_manager&filter=filesize-1..5",
- element: "#filter_filesize",
- placement: "top",
- title: "{/literal}{'2_7_0_title10'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'2_7_0_stp10'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=plugin-TakeATour",
- title: "{/literal}{'2_7_0_title11'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'2_7_0_stp11'|@translate|@escape:'javascript'}{literal}"
- }
-]);
-
-// Initialize the tour
-tour.init();
-
-// Start the tour
-tour.start();
-
-jQuery( "input[class='submit']" ).click(function() {
- if (tour.getCurrentStep()==5)
- {
- tour.goTo(6);
- }
-});
-{/literal}{/footer_script} \ No newline at end of file
diff --git a/plugins/TakeATour/tours/first_contact/config.inc.php b/plugins/TakeATour/tours/first_contact/config.inc.php
deleted file mode 100644
index dc1dfe2db..000000000
--- a/plugins/TakeATour/tours/first_contact/config.inc.php
+++ /dev/null
@@ -1,175 +0,0 @@
-<?php
-/**********************************
- * REQUIRED PATH TO THE TPL FILE */
-
-$TOUR_PATH = PHPWG_PLUGINS_PATH.'TakeATour/tours/first_contact/tour.tpl';
-
-/*********************************/
-
-if ( defined('IN_ADMIN') and IN_ADMIN )
-{
-/* first contact */
-add_event_handler('loc_end_photo_add_direct', 'TAT_FC_6');
-add_event_handler('loc_end_photo_add_direct', 'TAT_FC_7');
-add_event_handler('loc_end_element_set_global', 'TAT_FC_14');
-add_event_handler('loc_end_picture_modify', 'TAT_FC_16');
-add_event_handler('loc_end_picture_modify', 'TAT_FC_17');
-add_event_handler('loc_end_cat_modify', 'TAT_FC_23');
-add_event_handler('loc_end_themes_installed', 'TAT_FC_35');
-}
-
-function TAT_FC_7()
-{
- global $template;
- $template->set_prefilter('photos_add', 'TAT_FC_7_prefilter');
-}
-function TAT_FC_7_prefilter ($content, &$smarty)
-{
- $search = 'UploadComplete: function(up, files) {';
- $replacement = 'UploadComplete: function(up, files) {
- if (tour.getCurrentStep()==5)
- {
- tour.goTo(6);
- }
-';
- return str_replace($search, $replacement, $content);
-}
-function TAT_FC_6()
-{
- global $template;
- $template->set_prefilter('photos_add', 'TAT_FC_6_prefilter');
-}
-function TAT_FC_6_prefilter ($content, &$smarty)
-{
- $search = 'BeforeUpload:';
- $replacement = 'FilesAdded: function() {
- if (tour.getCurrentStep()==4)
- {
- tour.goTo(5);
- }
-
- },
- BeforeUpload:';
- return str_replace($search, $replacement, $content);
-}
-function TAT_FC_14()
-{
- global $template;
- $template->set_prefilter('batch_manager_global', 'TAT_FC_14_prefilter');
-}
-function TAT_FC_14_prefilter ($content, &$smarty)
-{
- $search = '<span class="wrap2';
- $replacement = '{counter print=false assign=TAT_FC_14}<span {if $TAT_FC_14==1}id="TAT_FC_14"{/if} class="wrap2';
- $content = str_replace($search, $replacement, $content);
- $search = 'target="_blank">{\'Edit\'';
- $replacement = '>{\'Edit\'';
- return str_replace($search, $replacement, $content);
-}
-function TAT_FC_16()
-{
- global $template;
- $template->set_prefilter('picture_modify', 'TAT_FC_16_prefilter');
-}
-function TAT_FC_16_prefilter ($content, &$smarty)
-{
- $search = '<strong>{\'Linked albums\'|@translate}</strong>';
- $replacement = '<span id="TAT_FC_16"><strong>{\'Linked albums\'|@translate}</strong></span>';
- return str_replace($search, $replacement, $content);
-}
-function TAT_FC_17()
-{
- global $template;
- $template->set_prefilter('picture_modify', 'TAT_FC_17_prefilter');
-}
-function TAT_FC_17_prefilter ($content, &$smarty)
-{
- $search = '<strong>{\'Representation of albums\'|@translate}</strong>';
- $replacement = '<span id="TAT_FC_17"><strong>{\'Representation of albums\'|@translate}</strong></span>';
- return str_replace($search, $replacement, $content);
-}
-function TAT_FC_23()
-{
- global $template;
- $template->set_prefilter('album_properties', 'TAT_FC_23_prefilter');
-}
-function TAT_FC_23_prefilter ($content, &$smarty)
-{
- $search = '<strong>{\'Lock\'|@translate}</strong>';
- $replacement = '<span id="TAT_FC_23"><strong>{\'Lock\'|@translate}</strong></span>';
- return str_replace($search, $replacement, $content);
-}
-function TAT_FC_35()
-{
- global $template;
- $template->set_prefilter('themes', 'TAT_FC_35_prefilter');
-}
-function TAT_FC_35_prefilter ($content, &$smarty)
-{
- $search = '<a href="{$set_default_baseurl}{$theme.ID}" class="tiptip"';
- $replacement = '{counter print=false assign=TAT_FC_35}<a href="{$set_default_baseurl}{$theme.ID}" class="tiptip" {if $TAT_FC_35==1}id="TAT_FC_35"{/if}';
- return str_replace($search, $replacement, $content);
-}
-
-/**********************
- * Preparse part *
- **********************/
- //picture id
- if (isset($_GET['page']) and preg_match('/^photo-(\d+)(?:-(.*))?$/', $_GET['page'], $matches))
- {
- $_GET['image_id'] = $matches[1];
- }
- check_input_parameter('image_id', $_GET, false, PATTERN_ID);
- if (isset($_GET['image_id']) and pwg_get_session_var('TAT_image_id')==null)
- {
- $template->assign('TAT_image_id', $_GET['image_id']);
- pwg_set_session_var('TAT_image_id', $_GET['image_id']);
- }
- elseif (is_numeric(pwg_get_session_var('TAT_image_id')))
- {
- $template->assign('TAT_image_id', pwg_get_session_var('TAT_image_id'));
- }
- else
- {
- $query = '
- SELECT id
- FROM '.IMAGES_TABLE.'
- ORDER BY RAND()
- LIMIT 1
- ;';
- $row = pwg_db_fetch_assoc(pwg_query($query));
- $template->assign('TAT_image_id', $row['id']);
- }
- //album id
- if (isset($_GET['page']) and preg_match('/^album-(\d+)(?:-(.*))?$/', $_GET['page'], $matches))
- {
- $_GET['cat_id'] = $matches[1];
- }
- check_input_parameter('cat_id', $_GET, false, PATTERN_ID);
- if (isset($_GET['cat_id']) and pwg_get_session_var('TAT_cat_id')==null)
- {
- $template->assign('TAT_cat_id', $_GET['cat_id']);
- pwg_set_session_var('TAT_cat_id', $_GET['cat_id']);
- }
- elseif (is_numeric(pwg_get_session_var('TAT_cat_id')))
- {
- $template->assign('TAT_cat_id', pwg_get_session_var('TAT_cat_id'));
- }
- else
- {
- $query = '
- SELECT id
- FROM '.CATEGORIES_TABLE.'
- ORDER BY RAND()
- LIMIT 1
- ;';
- $row = pwg_db_fetch_assoc(pwg_query($query));
- $template->assign('TAT_cat_id', $row['id']);
- }
- global $conf;
- if ( isset($conf['enable_synchronization']) )
- {
- $template->assign('TAT_FTP', $conf['enable_synchronization']);
- }
-
-?> \ No newline at end of file
diff --git a/plugins/TakeATour/tours/first_contact/tour.tpl b/plugins/TakeATour/tours/first_contact/tour.tpl
deleted file mode 100644
index bd3b2bc60..000000000
--- a/plugins/TakeATour/tours/first_contact/tour.tpl
+++ /dev/null
@@ -1,310 +0,0 @@
-{footer_script require='jquery.bootstrap-tour' load="async"}{literal}
-
-var tour = new Tour({
- name: "first_contact",
- orphan: true,
- onEnd: function (tour) {window.location = "{/literal}{$ABS_U_ADMIN}{literal}admin.php?page=plugin-TakeATour&tour_ended=first_contact"},
- template: "<div class='popover'> <div class='arrow'></div> <h3 class='popover-title'></h3> <div class='popover-content'></div> <div class='popover-navigation'> <div class='btn-group'> <button class='btn btn-sm btn-default' data-role='prev'>&laquo; {/literal}{'Prev'|@translate|@escape:'javascript'}{literal}</button> <button class='btn btn-sm btn-default' data-role='next'>{/literal}{'Next '|@translate|@escape:'javascript'}{literal} &raquo;</button> </div> <button class='btn btn-sm btn-default' data-role='end'>{/literal}{'End tour'|@translate|@escape:'javascript'}{literal}</button> </div> </div>",
-});
-{/literal}{if $TAT_restart}tour.restart();{/if}{literal}
-
-tour.addSteps([
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- title: "{/literal}{'first_contact_title1'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp1'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- placement: "right",
- element: "a[href='./admin.php?page=photos_add']",
- reflex:true,
- title: "{/literal}{'first_contact_title2'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp2'|@translate|@escape:'javascript'}{literal}",
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "bottom",
- element: ".selected_tab",
- title: "{/literal}{'first_contact_title3'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp3'|@translate|@escape:'javascript'}{literal}",
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "right",
- element: "#albumSelection",
- title: "{/literal}{'first_contact_title4'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp4'|@translate|@escape:'javascript'}{literal}"
- },
- {//5
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "top",
- element: "#addFiles",
- title: "{/literal}{'first_contact_title5'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp5'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "top",
- element: "#startUpload",
- title: "{/literal}{'first_contact_title6'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp6'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "top",
- element: "#afterUploadActions",
- title: "{/literal}{'first_contact_title7'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp7'|@translate|@escape:'javascript'}{literal}",
- prev:3,
- onPrev: function (tour) {window.location.reload()}
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "top",
- element: ".batchLink",
- reflex:true,
- title: "{/literal}{'first_contact_title8'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp8'|@translate|@escape:'javascript'}{literal}",
- },
- {
- path: /admin\.php\?page=(photos_add|batch_manager&filter=prefilter-last_import|batch_manager&filter=prefilter-caddie)/,
- redirect:function (tour) {window.location = "admin.php?page=batch_manager&filter=prefilter-last_import";},
- placement: "bottom",
- element: "#filter_prefilter select",
- title: "{/literal}{'first_contact_title9'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp9'|@translate|@escape:'javascript'}{literal}",
- prev:3,
- onPrev: function (tour) {window.location = "{/literal}{$ABS_U_ADMIN}{literal}admin.php?page=photos_add"}
- },
- {//10
- path: /admin\.php\?page=batch_manager&filter=(prefilter-caddie|prefilter-last_import)/,
- redirect:function (tour) {window.location = "admin.php?page=batch_manager&filter=prefilter-last_import";},
- placement: "right",
- element: "a[href='./admin.php?page=batch_manager&filter=prefilter-caddie']",
- title: "{/literal}{'first_contact_title10'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp10'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=batch_manager&filter=(prefilter-caddie|prefilter-last_import)/,
- redirect:function (tour) {window.location = "admin.php?page=batch_manager&filter=prefilter-last_import";},
- placement: "left",
- element: "#checkActions",
- title: "{/literal}{'first_contact_title11'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp11'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=batch_manager&filter=(prefilter-caddie|prefilter-last_import)/,
- redirect:function (tour) {window.location = "admin.php?page=batch_manager&filter=prefilter-last_import";},
- placement: "top",
- element: "#action",
- title: "{/literal}{'first_contact_title12'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp12'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=batch_manager&filter=(prefilter-caddie|prefilter-last_import)/,
- redirect:function (tour) {window.location = "admin.php?page=batch_manager&filter=prefilter-last_import";},
- placement: "bottom",
- element: "#tabsheet .normal_tab",
- title: "{/literal}{'first_contact_title13'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp13'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=batch_manager&filter=(prefilter-caddie|prefilter-last_import)/,
- redirect:function (tour) {window.location = "admin.php?page=batch_manager&filter=prefilter-last_import";},
- placement: "top",
- element: "#TAT_FC_14",
- reflex:true,
- title: "{/literal}{'first_contact_title14'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp14'|@translate|@escape:'javascript'}{literal}",
- onNext:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";}
- },
- {//15
- path: /admin\.php\?page=photo-/,
- redirect:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
- placement: "bottom",
- element: ".selected_tab",
- title: "{/literal}{'first_contact_title15'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp15'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=photo-/,
- redirect:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
- placement: "top",
- element: "#TAT_FC_16",
- title: "{/literal}{'first_contact_title16'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp16'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=photo-/,
- redirect:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
- placement: "top",
- element: "#TAT_FC_17",
- title: "{/literal}{'first_contact_title17'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp17'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=photo-/,
- redirect:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
- placement: "top",
- title: "{/literal}{'first_contact_title18'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp18'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=cat_list",
- title: "{/literal}{'first_contact_title19'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{if $TAT_FTP}{'first_contact_stp19'|@translate|@escape:'javascript'}{else}{'first_contact_stp19_b'|@translate|@escape:'javascript'}{/if}{literal}",
- onPrev: function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
-
- },
- {//20
- path: "{/literal}{$TAT_path}{literal}admin.php?page=cat_list",
- placement: "top",
- element: "#categoryOrdering",
- title: "{/literal}{'first_contact_title20'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp20'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=cat_list",
- placement: "left",
- element: "#tabsheet:first-child",
- title: "{/literal}{'first_contact_title21'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp21'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=album-[0-9]+(|-properties)$/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}";},
- placement: "top",
- element: ".selected_tab",
- title: "{/literal}{'first_contact_title22'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp22'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=album-[0-9]+(|-properties)$/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}";},
- placement: "top",
- element: "#TAT_FC_23",
- title: "{/literal}{'first_contact_title23'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp23'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=album-[0-9]+(|-properties)$/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}";},
- placement: "top",
- title: "{/literal}{'first_contact_title28'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp28'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
- placement: "top",
- element: "",
- title: "{/literal}{'first_contact_title29'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp29'|@translate|@escape:'javascript'}{literal}"
- },
- {//30
- path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
- placement: "right",
- element: "#gallery_title",
- title: "{/literal}{'first_contact_title30'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp30'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
- placement: "right",
- element: "#page_banner",
- title: "{/literal}{'first_contact_title31'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp31'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
- reflex: true,
- placement: "top",
- element: ".formButtons input",
- title: "{/literal}{'first_contact_title32'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp32'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
- placement: "bottom",
- element: "li.normal_tab:nth-child(6) > a:nth-child(1)",
- title: "{/literal}{'first_contact_title33'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp33'|@translate|@escape:'javascript'}{literal}",
- prev:30
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=themes",
- placement: "top",
- element: "",
- title: "{/literal}{'first_contact_title34'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp34'|@translate|@escape:'javascript'}{literal}"
- },
- {//35
- path: "{/literal}{$TAT_path}{literal}admin.php?page=themes",
- placement: "top",
- element: "#TAT_FC_35",
- title: "{/literal}{'first_contact_title35'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp35'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=themes",
- placement: "right",
- element: ".tabsheet",
- title: "{/literal}{'first_contact_title37'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp37'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=plugins",
- placement: "left",
- element: "",
- title: "{/literal}{'first_contact_title38'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp38'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=plugins",
- placement: "left",
- element: "#content",
- title: "{/literal}{'first_contact_title39'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp39'|@translate|@escape:'javascript'}{literal}"
- },
- {//40
- path: "{/literal}{$TAT_path}{literal}admin.php?page=plugins",
- placement: "bottom",
- element: "#TakeATour",
- title: "{/literal}{'first_contact_title40'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp40'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=plugins",
- placement: "right",
- element: ".tabsheet",
- title: "{/literal}{'first_contact_title41'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp41'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- title: "{/literal}{'first_contact_title43'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp43'|@translate|@escape:'javascript'}{literal}"
- }
-]);
-
-// Initialize the tour
-tour.init();
-
-// Start the tour
-tour.start();
-
-jQuery( "#menubar > dl:nth-child(3) > dd > ul > li:nth-child(1) > a" ).click(function() {
- if (tour.getCurrentStep()==17)
- {
- tour.goTo(18);
- }
-});
-jQuery( "p.albumActions > a:nth-child(1)" ).click(function() {
- if (tour.getCurrentStep()==20)
- {
- tour.goTo(21);
- }
-});
-
-
-{/literal}{/footer_script}
diff --git a/plugins/TakeATour/tours/first_contact/tour.tpl.bak b/plugins/TakeATour/tours/first_contact/tour.tpl.bak
deleted file mode 100644
index 6576d0037..000000000
--- a/plugins/TakeATour/tours/first_contact/tour.tpl.bak
+++ /dev/null
@@ -1,347 +0,0 @@
-{footer_script require='jquery.bootstrap-tour'}{literal}
-
-var tour = new Tour({
- name: "first_contact",
- orphan: true,
- onEnd: function (tour) {window.location = "admin.php?page=plugin-TakeATour&tour_ended=first_contact"},
- template: "<div class='popover'> <div class='arrow'></div> <h3 class='popover-title'></h3> <div class='popover-content'></div> <div class='popover-navigation'> <div class='btn-group'> <button class='btn btn-sm btn-default' data-role='prev'>&laquo; {/literal}{'Prev'|@translate|@escape:'javascript'}{literal}</button> <button class='btn btn-sm btn-default' data-role='next'>{/literal}{'Next '|@translate|@escape:'javascript'}{literal} &raquo;</button> </div> <button class='btn btn-sm btn-default' data-role='end'>{/literal}{'End tour'|@translate|@escape:'javascript'}{literal}</button> </div> </div>",
-});
-{/literal}{if $TAT_restart}tour.restart();{/if}{literal}
-
-tour.addSteps([
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- title: "{/literal}{'first_contact_title1'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp1'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- placement: "right",
- element: "a[href='./admin.php?page=photos_add']",
- reflex:true,
- title: "{/literal}{'first_contact_title2'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp2'|@translate|@escape:'javascript'}{literal}",
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "bottom",
- element: ".selected_tab",
- title: "{/literal}{'first_contact_title3'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp3'|@translate|@escape:'javascript'}{literal}",
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "right",
- element: "#albumSelection",
- title: "{/literal}{'first_contact_title4'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp4'|@translate|@escape:'javascript'}{literal}"
- },
- {//5
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "top",
- element: ".plupload_add",
- title: "{/literal}{'first_contact_title5'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp5'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "top",
- element: ".plupload_start",
- title: "{/literal}{'first_contact_title6'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp6'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "top",
- element: "#afterUploadActions",
- title: "{/literal}{'first_contact_title7'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp7'|@translate|@escape:'javascript'}{literal}",
- prev:4
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "top",
- element: "#batchLink",
- reflex:true,
- title: "{/literal}{'first_contact_title8'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp8'|@translate|@escape:'javascript'}{literal}",
- prev:4
- },
- {
- path: /admin\.php\?page=(photos_add|batch_manager&filter=prefilter-last_import|prefilter-caddie)/,
- redirect:function (tour) {window.location = "admin.php?page=batch_manager&filter=prefilter-last_import";},
- placement: "top",
- element: "",
- title: "{/literal}{'first_contact_title9'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp9'|@translate|@escape:'javascript'}{literal}"
- },
- {//10
- path: /admin\.php\?page=batch_manager&filter=(prefilter-caddie|prefilter-last_import)/,
- redirect:function (tour) {window.location = "admin.php?page=batch_manager&filter=prefilter-last_import";},
- placement: "right",
- element: ".icon-flag",
- title: "{/literal}{'first_contact_title10'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp10'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=batch_manager&filter=(prefilter-caddie|prefilter-last_import)/,
- redirect:function (tour) {window.location = "admin.php?page=batch_manager&filter=prefilter-last_import";},
- placement: "left",
- element: "#checkActions",
- title: "{/literal}{'first_contact_title11'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp11'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=batch_manager&filter=(prefilter-caddie|prefilter-last_import)/,
- redirect:function (tour) {window.location = "admin.php?page=batch_manager&filter=prefilter-last_import";},
- placement: "top",
- element: "#action",
- title: "{/literal}{'first_contact_title12'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp12'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=batch_manager&filter=(prefilter-caddie|prefilter-last_import)/,
- redirect:function (tour) {window.location = "admin.php?page=batch_manager&filter=prefilter-last_import";},
- placement: "bottom",
- element: "#tabsheet .normal_tab",
- title: "{/literal}{'first_contact_title13'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp13'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=batch_manager&filter=(prefilter-caddie|prefilter-last_import)/,
- redirect:function (tour) {window.location = "admin.php?page=batch_manager&filter=prefilter-last_import";},
- placement: "top",
- element: "#TAT_FC_14",
- reflex:true,
- title: "{/literal}{'first_contact_title14'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp14'|@translate|@escape:'javascript'}{literal}",
- onNext:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";}
- },
- {//15
- path: /admin\.php\?page=photo-/,
- redirect:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
- placement: "bottom",
- element: ".selected_tab",
- title: "{/literal}{'first_contact_title15'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp15'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=photo-/,
- redirect:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
- placement: "top",
- element: "#TAT_FC_16",
- title: "{/literal}{'first_contact_title16'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp16'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=photo-/,
- redirect:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
- placement: "top",
- element: "#TAT_FC_17",
- title: "{/literal}{'first_contact_title17'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp17'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=photo-/,
- redirect:function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
- placement: "top",
- title: "{/literal}{'first_contact_title18'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp18'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=cat_list",
- placement: "left",
- element: "#content",
- title: "{/literal}{'first_contact_title19'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{if $TAT_FTP}{'first_contact_stp19'|@translate|@escape:'javascript'}{else}{'first_contact_stp19_b'|@translate|@escape:'javascript'}{/if}{literal}",
- onPrev: function (tour) {window.location = "admin.php?page=photo-{/literal}{$TAT_image_id}{literal}";},
-
- },
- {//20
- path: "{/literal}{$TAT_path}{literal}admin.php?page=cat_list",
- placement: "top",
- element: "#categoryOrdering",
- title: "{/literal}{'first_contact_title20'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp20'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=cat_list",
- placement: "left",
- element: "#tabsheet:first-child",
- title: "{/literal}{'first_contact_title21'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp21'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=album-/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}";},
- placement: "top",
- element: ".selected_tab",
- title: "{/literal}{'first_contact_title22'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp22'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=album-/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}";},
- placement: "top",
- element: "#TAT_FC_23",
- title: "{/literal}{'first_contact_title23'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp23'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=album-/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}";},
- placement: "bottom",
- element: ".tabsheet",
- title: "{/literal}{'first_contact_title24'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp24'|@translate|@escape:'javascript'}{literal}"
- },
- {//25
- path: /admin\.php\?page=album-[0-9]+-permissions/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}-permissions";},
- placement: "left",
- element: "#content",
- title: "{/literal}{'first_contact_title25'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp25'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=album-[0-9]+-permissions/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}-permissions";},
- placement: "top",
- element: "#selectStatus",
- title: "{/literal}{'first_contact_title26'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp26'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=album-[0-9]+-permissions/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}-permissions";},
- placement: "top",
- element: "#selectStatus",
- title: "{/literal}{'first_contact_title27'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp27'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=album-[0-9]+-permissions/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}-permissions";},
- placement: "top",
- title: "{/literal}{'first_contact_title28'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp28'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
- placement: "top",
- element: "",
- title: "{/literal}{'first_contact_title29'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_title29'|@translate|@escape:'javascript'}{literal}"
- },
- {//30
- path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
- placement: "right",
- element: "#gallery_title",
- title: "{/literal}{'first_contact_title30'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp30'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
- placement: "right",
- element: "#page_banner",
- title: "{/literal}{'first_contact_title31'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp31'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
- reflex: true,
- placement: "top",
- element: ".formButtons input",
- title: "{/literal}{'first_contact_title32'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp32'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=configuration",
- placement: "top",
- title: "{/literal}{'first_contact_stp33'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp33'|@translate|@escape:'javascript'}{literal}",
- prev:30
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=themes",
- placement: "top",
- element: "",
- title: "{/literal}{'first_contact_title34'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp34'|@translate|@escape:'javascript'}{literal}"
- },
- {//35
- path: "{/literal}{$TAT_path}{literal}admin.php?page=themes",
- placement: "top",
- element: "#TAT_FC_35",
- title: "{/literal}{'first_contact_title35'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp35'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=themes",
- placement: "top",
- element: "",
- title: "{/literal}{'first_contact_title36'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp36'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=themes",
- placement: "right",
- element: ".tabsheet",
- title: "{/literal}{'first_contact_title37'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp37'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=plugins",
- placement: "left",
- element: "",
- title: "{/literal}{'first_contact_title38'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp38'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=plugins",
- placement: "left",
- element: "#content",
- title: "{/literal}{'first_contact_title39'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp39'|@translate|@escape:'javascript'}{literal}"
- },
- {//40
- path: "{/literal}{$TAT_path}{literal}admin.php?page=plugins",
- placement: "bottom",
- element: "#TakeATour",
- title: "{/literal}{'first_contact_title40'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp40'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=plugins",
- placement: "right",
- element: ".tabsheet",
- title: "{/literal}{'first_contact_title41'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp41'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=languages",
- title: "{/literal}{'first_contact_title42'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp42'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=plugin-TakeATour",
- placement: "top",
- element: "",
- title: "{/literal}{'first_contact_title43'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'first_contact_stp43'|@translate|@escape:'javascript'}{literal}"
- }
-]);
-
-// Initialize the tour
-tour.init();
-
-// Start the tour
-tour.start();
-
-jQuery( ".plupload_start" ).click(function() {
- if (tour.getCurrentStep()==5)
- {
- tour.goTo(6);
- }
-});
-{/literal}{/footer_script} \ No newline at end of file
diff --git a/plugins/TakeATour/tours/privacy/config.inc.php b/plugins/TakeATour/tours/privacy/config.inc.php
deleted file mode 100644
index 446e94f3f..000000000
--- a/plugins/TakeATour/tours/privacy/config.inc.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-/**********************************
- * REQUIRED PATH TO THE TPL FILE */
-
-$TOUR_PATH = PHPWG_PLUGINS_PATH.'TakeATour/tours/privacy/tour.tpl';
-
-/*********************************/
-
-
-
-/**********************
- * Preparse part *
- **********************/
- //picture id
- if (isset($_GET['page']) and preg_match('/^photo-(\d+)(?:-(.*))?$/', $_GET['page'], $matches))
- {
- $_GET['image_id'] = $matches[1];
- }
- check_input_parameter('image_id', $_GET, false, PATTERN_ID);
- if (isset($_GET['image_id']) and pwg_get_session_var('TAT_image_id')==null)
- {
- $template->assign('TAT_image_id', $_GET['image_id']);
- pwg_set_session_var('TAT_image_id', $_GET['image_id']);
- }
- elseif (is_numeric(pwg_get_session_var('TAT_image_id')))
- {
- $template->assign('TAT_image_id', pwg_get_session_var('TAT_image_id'));
- }
- else
- {
- $query = '
- SELECT id
- FROM '.IMAGES_TABLE.'
- ORDER BY RAND()
- LIMIT 1
- ;';
- $row = pwg_db_fetch_assoc(pwg_query($query));
- $template->assign('TAT_image_id', $row['id']);
- }
- //album id
- if (isset($_GET['page']) and preg_match('/^album-(\d+)(?:-(.*))?$/', $_GET['page'], $matches))
- {
- $_GET['cat_id'] = $matches[1];
- }
- check_input_parameter('cat_id', $_GET, false, PATTERN_ID);
- if (isset($_GET['cat_id']) and pwg_get_session_var('TAT_cat_id')==null)
- {
- $template->assign('TAT_cat_id', $_GET['cat_id']);
- pwg_set_session_var('TAT_cat_id', $_GET['cat_id']);
- }
- elseif (is_numeric(pwg_get_session_var('TAT_cat_id')))
- {
- $template->assign('TAT_cat_id', pwg_get_session_var('TAT_cat_id'));
- }
- else
- {
- $query = '
- SELECT id
- FROM '.CATEGORIES_TABLE.'
- ORDER BY RAND()
- LIMIT 1
- ;';
- $row = pwg_db_fetch_assoc(pwg_query($query));
- $template->assign('TAT_cat_id', $row['id']);
- }
- global $conf;
- if ( isset($conf['enable_synchronization']) )
- {
- $template->assign('TAT_FTP', $conf['enable_synchronization']);
- }
-?> \ No newline at end of file
diff --git a/plugins/TakeATour/tours/privacy/tour.tpl b/plugins/TakeATour/tours/privacy/tour.tpl
deleted file mode 100644
index 4a1db98c3..000000000
--- a/plugins/TakeATour/tours/privacy/tour.tpl
+++ /dev/null
@@ -1,195 +0,0 @@
-{footer_script require='jquery.bootstrap-tour'}{literal}
-
-var tour = new Tour({
- name: "privacy",
- orphan: true,
- onEnd: function (tour) {window.location = "{/literal}{$ABS_U_ADMIN}{literal}admin.php?page=plugin-TakeATour&tour_ended=privacy"},
- template: "<div class='popover'> <div class='arrow'></div> <h3 class='popover-title'></h3> <div class='popover-content'></div> <div class='popover-navigation'> <div class='btn-group'> <button class='btn btn-sm btn-default' data-role='prev'>&laquo; {/literal}{'Prev'|@translate|@escape:'javascript'}{literal}</button> <button class='btn btn-sm btn-default' data-role='next'>{/literal}{'Next '|@translate|@escape:'javascript'}{literal} &raquo;</button> </div> <button class='btn btn-sm btn-default' data-role='end'>{/literal}{'End tour'|@translate|@escape:'javascript'}{literal}</button> </div> </div>",
-});
-{/literal}{if $TAT_restart}tour.restart();{/if}{literal}
-
-tour.addSteps([
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- title: "{/literal}{'privacy_title1'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp1'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- placement: "bottom",
- element: ".icon-help-circled",
- title: "{/literal}{'privacy_title2'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp2'|@translate|@escape:'javascript'}{literal}",
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=help&section=permissions",
- placement: "top",
- element: "#helpContent",
- title: "{/literal}{'privacy_title3'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp3'|@translate|@escape:'javascript'}{literal}",
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=help&section=permissions",
- title: "{/literal}{'privacy_title4'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp4'|@translate|@escape:'javascript'}{literal}"
- },
- {//5
- path: "{/literal}{$TAT_path}{literal}admin.php?page=help&section=groups",
- placement: "top",
- element: "#helpContent>p:first",
- title: "{/literal}{'privacy_title5'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp5'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=photos_add",
- placement: "top",
- element: "#showPermissions",
- title: "{/literal}{'privacy_title6'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp6'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=batch_manager&filter=prefilter-last_import",
- placement: "top",
- element: "",
- title: "{/literal}{'privacy_title7'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp7'|@translate|@escape:'javascript'}{literal}",
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=batch_manager&filter=prefilter-last_import",
- placement: "top",
- element: ".thumbnails",
- title: "{/literal}{'privacy_title8'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp8'|@translate|@escape:'javascript'}{literal}",
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=batch_manager&filter=prefilter-last_import",
- placement: "top",
- element: "#action",
- title: "{/literal}{'privacy_title9'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp9'|@translate|@escape:'javascript'}{literal}"
- },
- {//10
- path: "{/literal}{$TAT_path}{literal}admin.php?page=cat_list",
- placement: "top",
- title: "{/literal}{'privacy_title10'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp10'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=album-/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}";},
- placement: "bottom",
- element: "#tabsheet > ul > li:nth-child(3) > a",
- reflex:true,
- title: "{/literal}{'privacy_title11'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp11'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=album-[0-9]+-permissions/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}-permissions";},
- placement: "top",
- element: "#categoryPermissions",
- title: "{/literal}{'privacy_title12'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp12'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=album-[0-9]+-permissions/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}-permissions";},
- placement: "bottom",
- element: "input[value='private']",
- reflex:true,
- title: "{/literal}{'privacy_title13'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp13'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: /admin\.php\?page=album-[0-9]+-permissions/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}-permissions";},
- placement: "top",
- element: "#privateOptions",
- title: "{/literal}{'privacy_title14'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp14'|@translate|@escape:'javascript'}{literal}",
- },
- {
- path: /admin\.php\?page=album-[0-9]+-permissions/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}-permissions";},
- title: "{/literal}{'privacy_title14b'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp14b'|@translate|@escape:'javascript'}{literal}",
- },
- {//15
- path: /admin\.php\?page=album-[0-9]+-permissions/,
- redirect:function (tour) {window.location = "admin.php?page=album-{/literal}{$TAT_cat_id}{literal}-permissions";},
- element: "a[href='./admin.php?page=cat_options']",
- reflex:true,
- title: "{/literal}{'privacy_title15'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp15'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=cat_options",
- placement: "top",
- element: ".doubleSelect",
- title: "{/literal}{'privacy_title16'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp16'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=group_list",
- title: "{/literal}{'privacy_title17'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp17'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=group_list",
- placement: "right",
- element: "a[href='./admin.php?page=user_list']",
- title: "{/literal}{'privacy_title18'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp18'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=user_list",
- placement: "top",
- element: "#userList",
- title: "{/literal}{'privacy_title19'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp19'|@translate|@escape:'javascript'}{literal}",
-
- },
- {//20
- path: "{/literal}{$TAT_path}{literal}admin.php",
- title: "{/literal}{'privacy_title20'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp20'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- title: "{/literal}{'privacy_title21'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp21'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- title: "{/literal}{'privacy_title22'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp22'|@translate|@escape:'javascript'}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- title: "{/literal}{'privacy_title24'|@translate|@escape:'javascript'}{literal}",
- content: "{/literal}{'privacy_stp24'|@translate|@escape:'javascript'}{literal}"
- }
-]);
-
-// Initialize the tour
-tour.init();
-
-// Start the tour
-tour.start();
-
-jQuery( "p.albumActions a" ).click(function() {
- if (tour.getCurrentStep()==9)
- {
- tour.goTo(10);
- }
-});
-
-{/literal}{/footer_script}
-{html_style}
-#step-21 {
- max-width:476px;
-}
-#step-22 {
- max-width:376px;
-}
-{/html_style} \ No newline at end of file
diff --git a/plugins/TakeATour/tours/scaling/scaling.tpl b/plugins/TakeATour/tours/scaling/scaling.tpl
deleted file mode 100644
index b658e13df..000000000
--- a/plugins/TakeATour/tours/scaling/scaling.tpl
+++ /dev/null
@@ -1,89 +0,0 @@
-{footer_script require='jquery.bootstrap-tour'}{literal}
-// Instance the tour
-var tour = new Tour({
- name: "scaling",
- orphan: true,
- onEnd: function (tour) {window.location = "admin.php?page=plugin-TakeATour&tour_ended=scaling";},
-});
-{/literal}{if $TAT_restart}tour.restart();{/if}{literal}
-// Add your steps. Not too many, you don't really want to get your users sleepy
-tour.addSteps([
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- title: "{/literal}{'Welcome on the /'Scaling/' Tour'|@translate}{literal}",
- content: "{/literal}{'This tour will show you how to configure your Piwigo according to your server resources. This tour is for beginners and for advanced user, so you can skip technical steps if you want.'|@translate}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- title: "{/literal}{'Servers'|@translate}{literal}",
- content: "{/literal}{'On free hosting and shared hosting, multiple websites are on the same physical server, so resources are shared. So your hosting provider may restrictions for CPU and memory consumptions.<br>For dedicated servers, you will be able to adjust the resource consumption of your Piwigo.'|@translate}{literal}"
- },
-
- {
- path: "{/literal}{$TAT_path}{literal}admin.phpSIZE",
- content: "{/literal}{'The main resource consumption is the generation of resized pictures. To lower that, you can disable some size. Size are for plugins and themes to display the best size according to the user screen, and for the users who can prefer lower resolution photos (bandwidth etc)'|@translate}{literal}"
- }
-
- {
- path: "{/literal}{$TAT_path}{literal}admin.php?page=batch_manager",
- title: "{/literal}{'Resized picture generation'|@translate}{literal}",
- content: "{/literal}{'Piwigo generates on the demand and on the fly the resized pictures: so the first user browsing the gallery after an upload will trigger the generation of the thumbnails, for instance. At that moment the server ressources might be too hight for some hosting. Then those pictures generated are stored, so no further picture generation will be done again.<br>After a big upload, you might prefer to trigger the generation of those resized pictures yourself: instead of having a small long term resource consumption; the server will have a short peak of computation. According to your hosting, it might be better to generate once, quickly. Choose the /"Generate/" action in the Batch Manager to do so.<br>For advanced users, and if you have a FTP access, you can upload resized pictures
-generated on your computer in the _data/i folder: be careful when naming the files.'|@translate}{literal}"
- },
-
- {
- path: "{/literal}{$TAT_path}{literal}admin.php",
- title: "{/literal}{'Graphic library'|@translate}{literal}",
- content: "{/literal}{''|@translate}{literal}"
- },
-
- {
- path: "{/literal}{$TAT_path}{literal}admin.phpHISTORY",
- title: "{/literal}{'History'|@translate}{literal}",
- content: "{/literal}{'Some hosting has a limitation for how much data can be stored in the database. The history data can become huge if you record guest visits and don/'t purge the history. So you can disable it or disable for guests, but check before the available plugins!<br>So if you get an error about a "piwigo_history" "table", it/'s probably about a needed purge of the history.'|@translate}{literal}"
- },
-
- {
- path: "{/literal}{$TAT_path}{literal}admin.phpPLUGINS",
- title: "{/literal}{'Local Configuration'|@translate}{literal}",
- content: "{/literal}{'Please enable the Local Files Editor for the next step.'|@translate}{literal}"
- },
-
- {
- path: "{/literal}{$TAT_path}{literal}admin.phpLFE",
- title: "{/literal}{'Local Configuration'|@translate}{literal}",
- content: "{/literal}{'Piwigo has a Local Configuration, which is in fact a list of variables not present in the Graphic Interface. The Default Configuration file has every variables available in it, the default values for them and an explicative text for each of them.<br>To set your own values, use that page which is a text editor for Local Configuration file: the values in the local config override the default config.<br>The workflow is quite simple...|@translate}{literal}"
- },
-
- {
- path: "{/literal}{$TAT_path}{literal}admin.phpLFE",
- placement: "left",
- element: "LIEN",
- title: "{/literal}{'Servers'|@translate}{literal}",
- content: "{/literal}{'Browse the default config, and when you have found some interesting variable, copy/paste here and change the value.'|@translate}{literal}"
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.phpLFE",
- title: "{/literal}{'Local Configuration'|@translate}{literal}",
- content: "{/literal}{'Some variable you could change for scaling up or down your Piwigo:<ul><li>$conf['template_compile_check'] : This tells Smarty whether to check for recompiling or not. Recompiling does not need to happen unless a template is changed. false results in better performance.</li><li>$conf['compiled_template_cache_language'] : if true, some language strings are replaced during template compilation (instead of template output). This results in better performance. However any change in the language file will not be propagated until you purge the compiled templates from the admin / maintenance menu</li><li>$conf['template_combine_files'] : if true -defaukt value-, it activates merging of javascript / css files in order to reduce a lot the loading of the server due to multiple requests.</li><li>$conf['max_requests'] : maximum Ajax requests at once, for thumbnails on-the-fly generation. Increase that number (3 by default) if your server can handle the resource consumption due to the generation of the thumbnails, and if you want a better user experience.</li></ul>'|@translate}{literal}",
- },
- {
- path: "{/literal}{$TAT_path}{literal}admin.phpLFE",
- title: "{/literal}{'Finished'|@translate}{literal}",
- content: "{/literal}{'There are other variables you might tune, some features you could disable (ratings, comments etc), custom theme you could do to remove some information but the thing is Piwigo is already flexible and powerful. The only critical point which might be raised, is the generation of resized pictures: go back in this tour to remember what I told you.<br>Now you can end this tour, and I hope to see you soon.'|@translate}{literal}"
- }
-]);
-
-// Initialize the tour
-tour.init();
-
-// Start the tour
-tour.start();
-
-jQuery( "input[class='submit']" ).click(function() {
- if (tour.getCurrentStep()==5)
- {
- tour.goTo(6);
- }
-});
-{/literal}{/footer_script} \ No newline at end of file
diff --git a/plugins/TakeATour/tpl/admin.tpl b/plugins/TakeATour/tpl/admin.tpl
deleted file mode 100644
index c89494fbc..000000000
--- a/plugins/TakeATour/tpl/admin.tpl
+++ /dev/null
@@ -1,39 +0,0 @@
-<div class="titrePage">
- <h2>{'takeatour_configpage'|@translate}</h2>
-</div>
-<div id="helpContent">
- <p>{'TAT_descrp'|@translate}</p>
- {if !isset($TAT_tour_ignored) or (isset($TAT_tour_ignored) and in_array(first_contact, $TAT_tour_ignored))}
- <fieldset>
- <legend>{'First Contact'|@translate}</legend>
- <div class="TAT_description">{'first_contact_descrp'|@translate}</div>
- <form action="{$F_ACTION}" method="post">
- <input type="hidden" name="submited_tour_path" value="tours/first_contact">
- <input type="hidden" name="pwg_token" value="{$pwg_token}">
- <input type="submit" name="button2" id="button2" value="{'Start the Tour'|@translate}">
- </form>
- </fieldset>
- {/if}
- {if !isset($TAT_tour_ignored) or (isset($TAT_tour_ignored) and in_array(privacy, $TAT_tour_ignored))}
- <fieldset>
- <legend>{'Privacy'|@translate}</legend>
- <div class="TAT_description">{'privacy_descrp'|@translate}</div>
- <form action="{$F_ACTION}" method="post">
- <input type="hidden" name="submited_tour_path" value="tours/privacy">
- <input type="hidden" name="pwg_token" value="{$pwg_token}">
- <input type="submit" name="button2" id="button2" value="{'Start the Tour'|@translate}">
- </form>
- </fieldset>
- {/if}
- {if !isset($TAT_tour_ignored) or (isset($TAT_tour_ignored) and in_array(2_7_0, $TAT_tour_ignored))}
- <fieldset>
- <legend>{'2.7 Tour'|@translate}</legend>
- <div class="TAT_description">{'2_7_0_descrp'|@translate}</div>
- <form action="{$F_ACTION}" method="post">
- <input type="hidden" name="submited_tour_path" value="tours/2_7_0">
- <input type="hidden" name="pwg_token" value="{$pwg_token}">
- <input type="submit" name="button2" id="button2" value="{'Start the Tour'|@translate}">
- </form>
- </fieldset>
- {/if}
-</div> \ No newline at end of file
diff --git a/plugins/TakeATour/tpl/js_css.tpl b/plugins/TakeATour/tpl/js_css.tpl
deleted file mode 100644
index cfc7cdcab..000000000
--- a/plugins/TakeATour/tpl/js_css.tpl
+++ /dev/null
@@ -1,4 +0,0 @@
-{combine_script id='jquery.bootstrap-tour' load='header' require='jquery' path='plugins/TakeATour/js/custom-bootstrap-tour-standalone.js'}
-{combine_css path="plugins/TakeATour/css/bootstrap-tour-standalone.css"}
-{if $ADMIN_THEME=='clear'}{combine_css path="plugins/TakeATour/css/clear.css"}{/if}
-{if $ADMIN_THEME=='roma'}{combine_css path="plugins/TakeATour/css/roma.css"}{/if} \ No newline at end of file
diff --git a/plugins/index.php b/plugins/index.php
index c8de97f60..0b96c3efa 100644
--- a/plugins/index.php
+++ b/plugins/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/plugins/language_switch/flag_sprite.jpg b/plugins/language_switch/flag_sprite.jpg
deleted file mode 100644
index c22450d7b..000000000
--- a/plugins/language_switch/flag_sprite.jpg
+++ /dev/null
Binary files differ
diff --git a/plugins/language_switch/flag_sprite_original.png b/plugins/language_switch/flag_sprite_original.png
deleted file mode 100644
index dc95afde4..000000000
--- a/plugins/language_switch/flag_sprite_original.png
+++ /dev/null
Binary files differ
diff --git a/plugins/language_switch/flags.tpl b/plugins/language_switch/flags.tpl
deleted file mode 100644
index 089e39604..000000000
--- a/plugins/language_switch/flags.tpl
+++ /dev/null
@@ -1,33 +0,0 @@
-<li id="languageSwitch">{strip}<a id="languageSwitchLink" title="{'Language'|@translate}" class="pwg-state-default pwg-button" rel="nofollow">
- <span class="pwg-icon langflag-{$lang_switch.Active.code}">&nbsp;</span><span class="pwg-button-text">{'Language'|@translate}</span>
-</a>
-<div id="languageSwitchBox" class="switchBox">
- <div class="switchBoxTitle">{'Language'|@translate}</div>
- {foreach from=$lang_switch.flags item=flag name=f}
- <a rel="nofollow" href="{$flag.url}">
- {if $lang_info.direction=="ltr"}<span class="pwg-icon langflag-{$flag.code}">{$flag.alt}</span>{$flag.title}{else}{$flag.title}<span class="pwg-icon langflag-{$flag.code}">{$flag.alt}</span>{/if}
- </a>
- {if ($smarty.foreach.f.index+1)%3 == 0}<br>{/if}
- {/foreach}
-</div>
-{/strip}</li>
-
-{footer_script require='jquery'}{literal}
-jQuery("#languageSwitchLink").click(function() {
- var elt = jQuery("#languageSwitchBox");
- elt.css("left", Math.min(jQuery(this).offset().left, jQuery(window).width() - elt.outerWidth(true) - 5))
- .css("top", jQuery(this).offset().top + jQuery(this).outerHeight(true))
- .toggle();
-});
-jQuery("#languageSwitchBox").on("mouseleave", function() {
- jQuery(this).hide();
-});
-{/literal}{/footer_script}
-
-{* <!-- stylish for themes missing .switchBox styles --> *}
-{if $LANGUAGE_SWITCH_LOAD_STYLE}
-{combine_css path=$LANGUAGE_SWITCH_PATH|@cat:"style.css"}
-{/if}
-
-{* <!-- common style specific for LanguageSwitch --> *}
-{combine_css path=$LANGUAGE_SWITCH_PATH|@cat:"language_switch.css"} \ No newline at end of file
diff --git a/plugins/language_switch/index.php b/plugins/language_switch/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/af_ZA/description.txt b/plugins/language_switch/language/af_ZA/description.txt
deleted file mode 100755
index 5b5fb07c1..000000000
--- a/plugins/language_switch/language/af_ZA/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Skakel na 'n ander taal deur vlae op jou gallery se tuisblad. \ No newline at end of file
diff --git a/plugins/language_switch/language/af_ZA/index.php b/plugins/language_switch/language/af_ZA/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/language_switch/language/af_ZA/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/ar_SA/description.txt b/plugins/language_switch/language/ar_SA/description.txt
deleted file mode 100644
index b0dec5d53..000000000
--- a/plugins/language_switch/language/ar_SA/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-التبديل إلى لغة أخرى من الأعلام على الصفحة الرئيسية لمعرض الصور \ No newline at end of file
diff --git a/plugins/language_switch/language/ar_SA/index.php b/plugins/language_switch/language/ar_SA/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/ar_SA/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/bg_BG/description.txt b/plugins/language_switch/language/bg_BG/description.txt
deleted file mode 100755
index c35a94ee3..000000000
--- a/plugins/language_switch/language/bg_BG/description.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Language Switch - Промяна на език
-Български [BG] \ No newline at end of file
diff --git a/plugins/language_switch/language/bg_BG/index.php b/plugins/language_switch/language/bg_BG/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/language_switch/language/bg_BG/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/br_FR/description.txt b/plugins/language_switch/language/br_FR/description.txt
deleted file mode 100755
index d823adac6..000000000
--- a/plugins/language_switch/language/br_FR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Cheñchit yezh gant bannieloù war ho pajenn-degemer. \ No newline at end of file
diff --git a/plugins/language_switch/language/ca_ES/description.txt b/plugins/language_switch/language/ca_ES/description.txt
deleted file mode 100755
index e7b2bed69..000000000
--- a/plugins/language_switch/language/ca_ES/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Canvia fàcilment l'idioma de la galeria. Es mostren banderes com a símbol dels idiomes disponibles. \ No newline at end of file
diff --git a/plugins/language_switch/language/cs_CZ/description.txt b/plugins/language_switch/language/cs_CZ/description.txt
deleted file mode 100644
index a355801ff..000000000
--- a/plugins/language_switch/language/cs_CZ/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Pøepíná do jiného jazyka podle vlajeèek na hlavní stránce galerie. \ No newline at end of file
diff --git a/plugins/language_switch/language/cs_CZ/index.php b/plugins/language_switch/language/cs_CZ/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/cs_CZ/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/da_DK/description.txt b/plugins/language_switch/language/da_DK/description.txt
deleted file mode 100755
index 097eba5e1..000000000
--- a/plugins/language_switch/language/da_DK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Skift til et andet sprog via flag på dit galleris forside. \ No newline at end of file
diff --git a/plugins/language_switch/language/de_DE/description.txt b/plugins/language_switch/language/de_DE/description.txt
deleted file mode 100644
index dcf2b6d60..000000000
--- a/plugins/language_switch/language/de_DE/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Ändert die Sprache der Galerie durch Anklicken einer Landesfahne.
diff --git a/plugins/language_switch/language/de_DE/index.php b/plugins/language_switch/language/de_DE/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/de_DE/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/el_GR/description.txt b/plugins/language_switch/language/el_GR/description.txt
deleted file mode 100755
index 1b32b2370..000000000
--- a/plugins/language_switch/language/el_GR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Αλλαγ? σε ?λλη γλ?σσα απ? εικον?διο σημα?ας στην αρχικ? σελ?δα γκαλερ? σας. \ No newline at end of file
diff --git a/plugins/language_switch/language/en_UK/description.txt b/plugins/language_switch/language/en_UK/description.txt
deleted file mode 100644
index 6dd277e30..000000000
--- a/plugins/language_switch/language/en_UK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Switch to another language using the flags on your gallery home page. \ No newline at end of file
diff --git a/plugins/language_switch/language/en_UK/index.php b/plugins/language_switch/language/en_UK/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/en_UK/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/eo_EO/description.txt b/plugins/language_switch/language/eo_EO/description.txt
deleted file mode 100755
index e25c9e7bc..000000000
--- a/plugins/language_switch/language/eo_EO/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Ŝaltu al alia lingvo pere de la flagoj ĉe la hejmpaĝo de via galerio. \ No newline at end of file
diff --git a/plugins/language_switch/language/es_ES/description.txt b/plugins/language_switch/language/es_ES/description.txt
deleted file mode 100644
index 27ae2359e..000000000
--- a/plugins/language_switch/language/es_ES/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Cambiar el idioma de la galería con facilidad de las banderas de la página de inicio. \ No newline at end of file
diff --git a/plugins/language_switch/language/es_ES/index.php b/plugins/language_switch/language/es_ES/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/es_ES/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/et_EE/description.txt b/plugins/language_switch/language/et_EE/description.txt
deleted file mode 100755
index a1b4411f1..000000000
--- a/plugins/language_switch/language/et_EE/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Vali keel vajutades lipule su galerii leheküljel. \ No newline at end of file
diff --git a/plugins/language_switch/language/et_EE/index.php b/plugins/language_switch/language/et_EE/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/language_switch/language/et_EE/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/fa_IR/description.txt b/plugins/language_switch/language/fa_IR/description.txt
deleted file mode 100755
index e33630fff..000000000
--- a/plugins/language_switch/language/fa_IR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-به کمک عکس پرچم ها در صفحه ی اصلی گالری خود ، زبان گالری را تغییر دهید. \ No newline at end of file
diff --git a/plugins/language_switch/language/fa_IR/index.php b/plugins/language_switch/language/fa_IR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/language_switch/language/fa_IR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/fi_FI/description.txt b/plugins/language_switch/language/fi_FI/description.txt
deleted file mode 100755
index b03801e48..000000000
--- a/plugins/language_switch/language/fi_FI/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Vaihda kieltä klikkaamalla lippua gallerian etusivulta. \ No newline at end of file
diff --git a/plugins/language_switch/language/fr_CA/description.txt b/plugins/language_switch/language/fr_CA/description.txt
deleted file mode 100644
index 42d4c3a04..000000000
--- a/plugins/language_switch/language/fr_CA/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Changez la langue de la galerie facilement à partir des drapeaux de la page d'accueil. \ No newline at end of file
diff --git a/plugins/language_switch/language/fr_CA/index.php b/plugins/language_switch/language/fr_CA/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/fr_CA/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/fr_FR/description.txt b/plugins/language_switch/language/fr_FR/description.txt
deleted file mode 100644
index 42d4c3a04..000000000
--- a/plugins/language_switch/language/fr_FR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Changez la langue de la galerie facilement à partir des drapeaux de la page d'accueil. \ No newline at end of file
diff --git a/plugins/language_switch/language/fr_FR/index.php b/plugins/language_switch/language/fr_FR/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/fr_FR/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/gl_ES/description.txt b/plugins/language_switch/language/gl_ES/description.txt
deleted file mode 100755
index 38a63f14b..000000000
--- a/plugins/language_switch/language/gl_ES/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Muda a outro idioma empregando as bandeiras na páxina de inicio da túa galería. \ No newline at end of file
diff --git a/plugins/language_switch/language/he_IL/description.txt b/plugins/language_switch/language/he_IL/description.txt
deleted file mode 100644
index 56956c159..000000000
--- a/plugins/language_switch/language/he_IL/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-שנה לשפה אחרת מהדגל בדף הבית בגלריה שלך. \ No newline at end of file
diff --git a/plugins/language_switch/language/he_IL/index.php b/plugins/language_switch/language/he_IL/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/he_IL/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/hr_HR/description.txt b/plugins/language_switch/language/hr_HR/description.txt
deleted file mode 100644
index f1a3fd859..000000000
--- a/plugins/language_switch/language/hr_HR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Prebacivanje na drugi jezik koristeći zastave na naslovnici galerije. \ No newline at end of file
diff --git a/plugins/language_switch/language/hr_HR/index.php b/plugins/language_switch/language/hr_HR/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/hr_HR/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/hu_HU/description.txt b/plugins/language_switch/language/hu_HU/description.txt
deleted file mode 100644
index 5326aebe7..000000000
--- a/plugins/language_switch/language/hu_HU/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Galéria nyelvének változtatása a honlapon, zászló segítségével.
diff --git a/plugins/language_switch/language/hu_HU/index.php b/plugins/language_switch/language/hu_HU/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/hu_HU/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/index.php b/plugins/language_switch/language/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/it_IT/description.txt b/plugins/language_switch/language/it_IT/description.txt
deleted file mode 100644
index f179c6871..000000000
--- a/plugins/language_switch/language/it_IT/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Cambiate facilmente la lingua della galleria grazie alle bandierine sulla pagina principale. \ No newline at end of file
diff --git a/plugins/language_switch/language/it_IT/index.php b/plugins/language_switch/language/it_IT/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/it_IT/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/ja_JP/description.txt b/plugins/language_switch/language/ja_JP/description.txt
deleted file mode 100644
index 8e5b3e8bc..000000000
--- a/plugins/language_switch/language/ja_JP/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-ギャラリーホームページで国旗を選んで言語を選べる \ No newline at end of file
diff --git a/plugins/language_switch/language/ja_JP/index.php b/plugins/language_switch/language/ja_JP/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/ja_JP/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/ka_GE/description.txt b/plugins/language_switch/language/ka_GE/description.txt
deleted file mode 100644
index cfb0ab8b1..000000000
--- a/plugins/language_switch/language/ka_GE/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-გადასვლა სხვა ენაზე დროშების საშუალებით თქვენი გალერეის მთავარ გვერდზე. \ No newline at end of file
diff --git a/plugins/language_switch/language/ka_GE/index.php b/plugins/language_switch/language/ka_GE/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/ka_GE/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/km_KH/description.txt b/plugins/language_switch/language/km_KH/description.txt
deleted file mode 100755
index daa1c0917..000000000
--- a/plugins/language_switch/language/km_KH/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-ផ្តូរ​ទៅ​ភាសាដទៃ​ទៀត ដោយការ​ប្រើប្រាស់​រូប​ទង់ជាតិ​លើទំព័រ​វិចិត្រសាល​របស់​អ្នក។ \ No newline at end of file
diff --git a/plugins/language_switch/language/km_KH/index.php b/plugins/language_switch/language/km_KH/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/language_switch/language/km_KH/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/kn_IN/description.txt b/plugins/language_switch/language/kn_IN/description.txt
deleted file mode 100755
index 5f2373b76..000000000
--- a/plugins/language_switch/language/kn_IN/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-ನಿಮ್ಮ ಚಿತ್ರಾಂಗಣದ (ಗ್ಯಾಲರಿಯ) ಮುಖಪುಟದಲ್ಲಿರುವ ಬಾವುಟಗಳ ಸಂಕೇತವನ್ನು ಬಳಸಿ ಬೇರೊಂದು ಭಾಷೆಗೆ ಬದಲಿಸಿ. \ No newline at end of file
diff --git a/plugins/language_switch/language/lt_LT/description.txt b/plugins/language_switch/language/lt_LT/description.txt
deleted file mode 100755
index a90140a44..000000000
--- a/plugins/language_switch/language/lt_LT/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Savo galerijos pradiniame puslapyje galite perjungti kalbą naudodamiesi vėlevėlėmis. \ No newline at end of file
diff --git a/plugins/language_switch/language/lv_LV/description.txt b/plugins/language_switch/language/lv_LV/description.txt
deleted file mode 100644
index 738fcc512..000000000
--- a/plugins/language_switch/language/lv_LV/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Pārslēgšanās uz citu valodu, izmantojot karodziņus Jūsu galerijas mājas lapā \ No newline at end of file
diff --git a/plugins/language_switch/language/lv_LV/index.php b/plugins/language_switch/language/lv_LV/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/lv_LV/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/mn_MN/description.txt b/plugins/language_switch/language/mn_MN/description.txt
deleted file mode 100755
index 730252509..000000000
--- a/plugins/language_switch/language/mn_MN/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Хэлээ солихыг хүсвэл нүүр хуудасан дахь далбааны зурагнаас сонгоно уу. \ No newline at end of file
diff --git a/plugins/language_switch/language/mn_MN/index.php b/plugins/language_switch/language/mn_MN/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/language_switch/language/mn_MN/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/nb_NO/description.txt b/plugins/language_switch/language/nb_NO/description.txt
deleted file mode 100644
index 76986a928..000000000
--- a/plugins/language_switch/language/nb_NO/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Bytt til et annet språk via språkvelger på ditt galleris hjemmeside. \ No newline at end of file
diff --git a/plugins/language_switch/language/nb_NO/index.php b/plugins/language_switch/language/nb_NO/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/nb_NO/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/nl_NL/description.txt b/plugins/language_switch/language/nl_NL/description.txt
deleted file mode 100644
index 0935facf4..000000000
--- a/plugins/language_switch/language/nl_NL/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Gebruik de landen-vlaggetjes op uw galerie-startpagina om van taal te wisselen. \ No newline at end of file
diff --git a/plugins/language_switch/language/nl_NL/index.php b/plugins/language_switch/language/nl_NL/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/nl_NL/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/nn_NO/description.txt b/plugins/language_switch/language/nn_NO/description.txt
deleted file mode 100755
index b7f698c72..000000000
--- a/plugins/language_switch/language/nn_NO/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Bytt til eit anna språk ved å bruke flaggsymbol på startsida på galleriet. \ No newline at end of file
diff --git a/plugins/language_switch/language/pl_PL/description.txt b/plugins/language_switch/language/pl_PL/description.txt
deleted file mode 100644
index d3669e017..000000000
--- a/plugins/language_switch/language/pl_PL/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Przełączanie na inny język poprzez ikony flag na stronie głównej Twojej galerii. \ No newline at end of file
diff --git a/plugins/language_switch/language/pl_PL/index.php b/plugins/language_switch/language/pl_PL/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/pl_PL/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/pt_BR/description.txt b/plugins/language_switch/language/pt_BR/description.txt
deleted file mode 100755
index 8d6d70854..000000000
--- a/plugins/language_switch/language/pt_BR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Troque para outro idioma usando as bandeiras na página da sua galeria.
diff --git a/plugins/language_switch/language/pt_BR/index.php b/plugins/language_switch/language/pt_BR/index.php
deleted file mode 100644
index ec6605317..000000000
--- a/plugins/language_switch/language/pt_BR/index.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/pt_PT/description.txt b/plugins/language_switch/language/pt_PT/description.txt
deleted file mode 100644
index b54b2a2da..000000000
--- a/plugins/language_switch/language/pt_PT/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Mude para outro idioma clicando na bandeira correspondente ao idioma existentes na página de entrada da sua galeria. \ No newline at end of file
diff --git a/plugins/language_switch/language/pt_PT/index.php b/plugins/language_switch/language/pt_PT/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/pt_PT/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/ro_RO/description.txt b/plugins/language_switch/language/ro_RO/description.txt
deleted file mode 100755
index 97b3cb098..000000000
--- a/plugins/language_switch/language/ro_RO/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Comutați &icirc;ntr-o o altă limbă folosind steagurile de pe pagina de start a galeriei. \ No newline at end of file
diff --git a/plugins/language_switch/language/ru_RU/description.txt b/plugins/language_switch/language/ru_RU/description.txt
deleted file mode 100644
index 487dbe6e7..000000000
--- a/plugins/language_switch/language/ru_RU/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Позволяет переключать языки, нажимая на картинки флажков на главной странице Вашей галереи. \ No newline at end of file
diff --git a/plugins/language_switch/language/ru_RU/index.php b/plugins/language_switch/language/ru_RU/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/ru_RU/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/sh_RS/description.txt b/plugins/language_switch/language/sh_RS/description.txt
deleted file mode 100755
index d01b7f940..000000000
--- a/plugins/language_switch/language/sh_RS/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Promenite jezik preko zastavica na početnoj strani Va&scaron;e galerije. \ No newline at end of file
diff --git a/plugins/language_switch/language/sk_SK/description.txt b/plugins/language_switch/language/sk_SK/description.txt
deleted file mode 100644
index 45368c7ab..000000000
--- a/plugins/language_switch/language/sk_SK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Prepínac na iný jazyk z vlajok vo Vašej galérii. \ No newline at end of file
diff --git a/plugins/language_switch/language/sk_SK/index.php b/plugins/language_switch/language/sk_SK/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/sk_SK/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/sl_SI/description.txt b/plugins/language_switch/language/sl_SI/description.txt
deleted file mode 100755
index eed62d857..000000000
--- a/plugins/language_switch/language/sl_SI/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Za spremembo jezika kliknite zastavico na domači strani galerije.
diff --git a/plugins/language_switch/language/sr_RS/description.txt b/plugins/language_switch/language/sr_RS/description.txt
deleted file mode 100644
index 2ade27bb8..000000000
--- a/plugins/language_switch/language/sr_RS/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Промена на други језик преко заставе на почетној страници Ваше галерије. \ No newline at end of file
diff --git a/plugins/language_switch/language/sr_RS/index.php b/plugins/language_switch/language/sr_RS/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/sr_RS/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/sv_SE/description.txt b/plugins/language_switch/language/sv_SE/description.txt
deleted file mode 100644
index 07efaacac..000000000
--- a/plugins/language_switch/language/sv_SE/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Byt till annat språk via flaggorna på ditt galleris hemsida. \ No newline at end of file
diff --git a/plugins/language_switch/language/sv_SE/index.php b/plugins/language_switch/language/sv_SE/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/sv_SE/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/ta_IN/description.txt b/plugins/language_switch/language/ta_IN/description.txt
deleted file mode 100755
index cf89b8502..000000000
--- a/plugins/language_switch/language/ta_IN/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-உங்கள் கேலரி இல்லப்பக்கத்தில் கொடிகளை பயன்படுத்தி வேறு ஒரு மொழியை மாற்றவும். \ No newline at end of file
diff --git a/plugins/language_switch/language/th_TH/description.txt b/plugins/language_switch/language/th_TH/description.txt
deleted file mode 100644
index 37737c294..000000000
--- a/plugins/language_switch/language/th_TH/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-สลับใช้ภาษาอื่นได้ง่ายๆ โดยคลิกรูปธงบนหน้าเว็บแกลลอรี่ของคุณ. \ No newline at end of file
diff --git a/plugins/language_switch/language/th_TH/index.php b/plugins/language_switch/language/th_TH/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/th_TH/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/tr_TR/description.txt b/plugins/language_switch/language/tr_TR/description.txt
deleted file mode 100644
index f94f6ed64..000000000
--- a/plugins/language_switch/language/tr_TR/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Ana sayfadaki dil bayraklarından dil değişimi. \ No newline at end of file
diff --git a/plugins/language_switch/language/tr_TR/index.php b/plugins/language_switch/language/tr_TR/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/tr_TR/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/uk_UA/description.txt b/plugins/language_switch/language/uk_UA/description.txt
deleted file mode 100644
index 3492ace9d..000000000
--- a/plugins/language_switch/language/uk_UA/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Перехід на іншу мову з прапорами на вашій домашній сторінці галереї. \ No newline at end of file
diff --git a/plugins/language_switch/language/vi_VN/description.txt b/plugins/language_switch/language/vi_VN/description.txt
deleted file mode 100644
index 0119bddf5..000000000
--- a/plugins/language_switch/language/vi_VN/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-Chuyển sang ngôn ngữ khác từ biểu tượng lá cờ trên trang chủ Thư viện hình của bạn. \ No newline at end of file
diff --git a/plugins/language_switch/language/vi_VN/index.php b/plugins/language_switch/language/vi_VN/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/vi_VN/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/zh_CN/description.txt b/plugins/language_switch/language/zh_CN/description.txt
deleted file mode 100644
index be6e40007..000000000
--- a/plugins/language_switch/language/zh_CN/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-在您的Piwigo首页使用旗帜图标来选择其他语言 \ No newline at end of file
diff --git a/plugins/language_switch/language/zh_CN/index.php b/plugins/language_switch/language/zh_CN/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/zh_CN/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language/zh_HK/description.txt b/plugins/language_switch/language/zh_HK/description.txt
deleted file mode 100755
index ced411ff9..000000000
--- a/plugins/language_switch/language/zh_HK/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-使用照片庫主頁的旗幟圖標切換語言 \ No newline at end of file
diff --git a/plugins/language_switch/language/zh_TW/description.txt b/plugins/language_switch/language/zh_TW/description.txt
deleted file mode 100644
index e913d670e..000000000
--- a/plugins/language_switch/language/zh_TW/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-從你的相簿主頁,直接點選國旗以切換使用語言。 \ No newline at end of file
diff --git a/plugins/language_switch/language/zh_TW/index.php b/plugins/language_switch/language/zh_TW/index.php
deleted file mode 100644
index c8de97f60..000000000
--- a/plugins/language_switch/language/zh_TW/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-// Recursive call
-$url = '../';
-header( 'Request-URI: '.$url );
-header( 'Content-Location: '.$url );
-header( 'Location: '.$url );
-exit();
-?>
diff --git a/plugins/language_switch/language_switch.css b/plugins/language_switch/language_switch.css
deleted file mode 100644
index 9cdbe2945..000000000
--- a/plugins/language_switch/language_switch.css
+++ /dev/null
@@ -1,275 +0,0 @@
-#languageSwitchBox a {
- display:inline-block;
- width:130px;
- text-decoration:none;
- border:none;
- text-transform:none;
- margin-bottom:3px;
- text-overflow:ellipsis;
- white-space:nowrap;
- overflow:hidden;
- line-height:1.2em;
-}
-#languageSwitchLink span {
- margin-bottom:5px;
- margin-top:5px;
-}
-[class*="langflag-"] {
- background-image:url('flag_sprite.jpg') !important;
- background-repeat:no-repeat;
- background-position:24px 16px;
- margin-right:3px;
- width:24px;
- height:16px;
- direction:ltr;
-}
-
-/** Change the langflag-XX label to match a new language. All flags are represented there**/
-.langflag-ad { background-position:0px 0px; }
-.langflag-ae { background-position:-24px 0px; }
-.langflag-af { background-position:-48px 0px; }
-.langflag-ag { background-position:-72px 0px; }
-.langflag-al { background-position:-96px 0px; }
-.langflag-am { background-position:-120px 0px; }
-.langflag-an { background-position:-144px 0px; }
-.langflag-ao { background-position:-168px 0px; }
-.langflag-es_AR { background-position:-192px 0px; }
-.langflag-as { background-position:-216px 0px; }
-.langflag-at { background-position:-240px 0px; }
-.langflag-aw { background-position:-264px 0px; }
-.langflag-ax { background-position:-288px 0px; }
-.langflag-az_AZ { background-position:-312px 0px; }
-.langflag-ba { background-position:-336px 0px; }
-.langflag-bb { background-position:0px -16px; }
-.langflag-bd { background-position:-24px -16px; }
-.langflag-be { background-position:-48px -16px; }
-.langflag-bf { background-position:-72px -16px; }
-.langflag-bg_BG { background-position:-96px -16px; }
-.langflag-bh { background-position:-120px -16px; }
-.langflag-bi { background-position:-144px -16px; }
-.langflag-bj { background-position:-168px -16px; }
-.langflag-bl { background-position:-192px -16px; }
-.langflag-bm { background-position:-216px -16px; }
-.langflag-bn{ background-position:-240px -16px; }
-.langflag-bo { background-position:-264px -16px; }
-.langflag-bonaire { background-position:-288px -16px; }
-.langflag-pt_BR { background-position:-312px -16px; }
-.langflag-bs { background-position:-336px -16px; }
-.langflag-bt { background-position:0px -32px; }
-.langflag-bv { background-position:-24px -32px; }
-.langflag-bw { background-position:-48px -32px; }
-.langflag-by { background-position:-72px -32px; }
-.langflag-bz { background-position:-96px -32px; }
-.langflag-ca { background-position:-120px -32px; }
-.langflag-ca_ES { background-position:-144px -32px; }
-.langflag-cc { background-position:-168px -32px; }
-.langflag-cd { background-position:-192px -32px; }
-.langflag-cf { background-position:-216px -32px; }
-.langflag-cg { background-position:-240px -32px; }
-.langflag-ch { background-position:-264px -32px; }
-.langflag-ci { background-position:-288px -32px; }
-.langflag-cl { background-position:-312px -32px; }
-.langflag-cm { background-position:-336px -32px; }
-.langflag-zh_CN { background-position:0px -48px; }
-.langflag-co { background-position:-24px -48px; }
-.langflag-cr { background-position:-48px -48px; }
-.langflag-cs_CZ { background-position:-72px -48px; }
-.langflag-cu { background-position:-96px -48px; }
-.langflag-cv { background-position:-120px -48px; }
-.langflag-cx { background-position:-144px -48px; }
-.langflag-cy { background-position:-168px -48px; }
-.langflag-cz { background-position:-192px -48px; }
-.langflag-de_DE { background-position:-216px -48px; }
-.langflag-dj { background-position:-240px -48px; }
-.langflag-da_DK { background-position:-264px -48px; }
-.langflag-dm { background-position:-288px -48px; }
-.langflag-do { background-position:-312px -48px; }
-.langflag-dz { background-position:-336px -48px; }
-.langflag-ec { background-position:0px -64px; }
-.langflag-et_EE { background-position:-24px -64px; }
-.langflag-eg { background-position:-48px -64px; }
-.langflag-ar_EG { background-position:-48px -64px; }
-.langflag-eh { background-position:-72px -64px; }
-.langflag-en_UK { background-position:-96px -64px; }
-.langflag-eo_EO { background-position:-120px -64px; }
-.langflag-er { background-position:-144px -64px; }
-.langflag-es_ES { background-position:-168px -64px; }
-.langflag-et { background-position:-192px -64px; }
-.langflag-fi_FI { background-position:-216px -64px; }
-.langflag-fm { background-position:-240px -64px; }
-.langflag-fo { background-position:-264px -64px; }
-.langflag-fr_FR { background-position:-288px -64px; }
-.langflag-ga { background-position:-312px -64px; }
-.langflag-gb { background-position:-336px -64px; }
-.langflag-en_GB { background-position:-336px -64px; }
-.langflag-gd { background-position:0px -80px; }
-.langflag-ka_GE { background-position:-24px -80px; }
-.langflag-gg { background-position:-48px -80px; }
-.langflag-gh { background-position:-72px -80px; }
-.langflag-gi { background-position:-96px -80px; }
-.langflag-gl { background-position:-120px -80px; }
-.langflag-gm { background-position:-144px -80px; }
-.langflag-gn { background-position:-168px -80px; }
-.langflag-gq { background-position:-192px -80px; }
-.langflag-el_GR { background-position:-216px -80px; }
-.langflag-gt { background-position:-240px -80px; }
-.langflag-gu { background-position:-264px -80px; }
-.langflag-gw { background-position:-288px -80px; }
-.langflag-gy { background-position:-312px -80px; }
-.langflag-zh_HK { background-position:-336px -80px; }
-.langflag-hn { background-position:0px -96px; }
-.langflag-hr_HR { background-position:-24px -96px; }
-.langflag-ht { background-position:-48px -96px; }
-.langflag-hu_HU { background-position:-72px -96px; }
-.langflag-id_ID { background-position:-96px -96px; }
-.langflag-ie { background-position:-120px -96px; }
-.langflag-ga_IE { background-position:-120px -96px; }
-.langflag-he_IL { background-position:-144px -96px; }
-.langflag-im { background-position:-168px -96px; }
-.langflag-kok_IN { background-position:-192px -96px; }
-.langflag-ta_IN { background-position:-192px -96px; }
-.langflag-bn_IN { background-position:-192px -96px; }
-.langflag-kn_IN { background-position:-192px -96px; }
-.langflag-gu_IN { background-position:-192px -96px; }
-.langflag-iq { background-position:-216px -96px; }
-.langflag-fa_IR { background-position:-240px -96px; }
-.langflag-is_IS { background-position:-264px -96px; }
-.langflag-it_IT { background-position:-288px -96px; }
-.langflag-je { background-position:-312px -96px; }
-.langflag-jm { background-position:-336px -96px; }
-.langflag-jo { background-position:0px -112px; }
-.langflag-ja_JP { background-position:-24px -112px; }
-.langflag-ke { background-position:-48px -112px; }
-.langflag-kg { background-position:-72px -112px; }
-.langflag-km_KH { background-position:-96px -112px; }
-.langflag-ki { background-position:-120px -112px; }
-.langflag-km { background-position:-144px -112px; }
-.langflag-kn { background-position:-168px -112px; }
-.langflag-kosovo { background-position:-192px -112px; }
-.langflag-kp { background-position:-216px -112px; }
-.langflag-ko_KR { background-position:-240px -112px; }
-.langflag-kw { background-position:-264px -112px; }
-.langflag-kz { background-position:-288px -112px; }
-.langflag-la { background-position:-312px -112px; }
-.langflag-lb { background-position:-336px -112px; }
-.langflag-lc { background-position:0px -128px; }
-.langflag-li { background-position:-24px -128px; }
-.langflag-lk { background-position:-48px -128px; }
-.langflag-lr { background-position:-72px -128px; }
-.langflag-ls { background-position:-96px -128px; }
-.langflag-lt_LT { background-position:-120px -128px; }
-.langflag-lu { background-position:-144px -128px; }
-.langflag-lb_LU { background-position:-144px -128px; }
-.langflag-lv_LV { background-position:-168px -128px; }
-.langflag-ly { background-position:-192px -128px; }
-.langflag-ar_MA { background-position:-216px -128px; }
-.langflag-mc { background-position:-240px -128px; }
-.langflag-md { background-position:-264px -128px; }
-.langflag-me { background-position:-288px -128px; }
-.langflag-mg { background-position:-312px -128px; }
-.langflag-mh { background-position:-336px -128px; }
-.langflag-mk_MK { background-position:0px -144px; }
-.langflag-ml { background-position:-24px -144px; }
-.langflag-mm { background-position:-48px -144px; }
-.langflag-mn_MN { background-position:-72px -144px; }
-.langflag-mo { background-position:-96px -144px; }
-.langflag-mp { background-position:-120px -144px; }
-.langflag-mq { background-position:-144px -144px; }
-.langflag-mr { background-position:-168px -144px; }
-.langflag-mt { background-position:-192px -144px; }
-.langflag-mu { background-position:-216px -144px; }
-.langflag-dv_MV { background-position:-240px -144px; }
-.langflag-mw { background-position:-264px -144px; }
-.langflag-mx { background-position:-288px -144px; }
-.langflag-es_MX { background-position:-288px -144px; }
-.langflag-ms_MY { background-position:-312px -144px; }
-.langflag-mz { background-position:-336px -144px; }
-.langflag-na { background-position:0px -160px; }
-.langflag-ne { background-position:-24px -160px; }
-.langflag-nf { background-position:-48px -160px; }
-.langflag-ng { background-position:-72px -160px; }
-.langflag-ni { background-position:-96px -160px; }
-.langflag-nl_NL { background-position:-120px -160px; }
-.langflag-nb_NO { background-position:-144px -160px; }
-.langflag-nn_NO { background-position:-144px -160px; }
-.langflag-np { background-position:-168px -160px; }
-.langflag-nr { background-position:-192px -160px; }
-.langflag-nu { background-position:-216px -160px; }
-.langflag-om { background-position:-240px -160px; }
-.langflag-pa { background-position:-264px -160px; }
-.langflag-pe { background-position:-288px -160px; }
-.langflag-pf { background-position:-312px -160px; }
-.langflag-pg { background-position:-336px -160px; }
-.langflag-ph { background-position:0px -176px; }
-.langflag-pk { background-position:-24px -176px; }
-.langflag-pl_PL { background-position:-48px -176px; }
-.langflag-pm { background-position:-72px -176px; }
-.langflag-pr { background-position:-96px -176px; }
-.langflag-ps { background-position:-120px -176px; }
-.langflag-pt_PT { background-position:-144px -176px; }
-.langflag-pw { background-position:-168px -176px; }
-.langflag-py { background-position:-192px -176px; }
-.langflag-qa { background-position:-216px -176px; }
-.langflag-fr_CA { background-position:-240px -176px; }
-.langflag-ro_RO { background-position:-264px -176px; }
-.langflag-sh_RS { background-position:-288px -176px; }
-.langflag-sr_RS { background-position:-288px -176px; }
-.langflag-ru_RU { background-position:-312px -176px; }
-.langflag-rw { background-position:-336px -176px; }
-.langflag-ar_SA { background-position:0px -192px; }
-.langflag-saba { background-position:-24px -192px; }
-.langflag-sark { background-position:-48px -192px; }
-.langflag-sb { background-position:-72px -192px; }
-.langflag-sc { background-position:-96px -192px; }
-.langflag-scotland { background-position:-120px -192px; }
-.langflag-sd { background-position:-144px -192px; }
-.langflag-sv_SE { background-position:-168px -192px; }
-.langflag-sg { background-position:-192px -192px; }
-.langflag-sl_SI { background-position:-216px -192px; }
-.langflag-sj { background-position:-240px -192px; }
-.langflag-sk_SK { background-position:-264px -192px; }
-.langflag-sl { background-position:-288px -192px; }
-.langflag-sm { background-position:-312px -192px; }
-.langflag-sn { background-position:-336px -192px; }
-.langflag-wo_SN { background-position:-336px -192px; }
-.langflag-so { background-position:0px -208px; }
-.langflag-sr { background-position:-24px -208px; }
-.langflag-st { background-position:-48px -208px; }
-.langflag-sv { background-position:-72px -208px; }
-.langflag-sy { background-position:-96px -208px; }
-.langflag-sz { background-position:-120px -208px; }
-.langflag-td { background-position:-144px -208px; }
-.langflag-tg { background-position:-168px -208px; }
-.langflag-th_TH { background-position:-192px -208px; }
-.langflag-tj { background-position:-216px -208px; }
-.langflag-tk { background-position:-240px -208px; }
-.langflag-tl { background-position:-264px -208px; }
-.langflag-tm { background-position:-288px -208px; }
-.langflag-tn { background-position:-312px -208px; }
-.langflag-to { background-position:-336px -208px; }
-.langflag-tr_TR { background-position:0px -224px; }
-.langflag-tt { background-position:-24px -224px; }
-.langflag-zh_TW{ background-position:-48px -224px; }
-.langflag-tz { background-position:-72px -224px; }
-.langflag-uk_UA { background-position:-96px -224px; }
-.langflag-ug { background-position:-120px -224px; }
-.langflag-en_US { background-position:-144px -224px; }
-.langflag-uy { background-position:-168px -224px; }
-.langflag-uz { background-position:-192px -224px; }
-.langflag-va { background-position:-216px -224px; }
-.langflag-vc { background-position:-240px -224px; }
-.langflag-ve { background-position:-264px -224px; }
-.langflag-vi { background-position:-288px -224px; }
-.langflag-vi_VN { background-position:-312px -224px; }
-.langflag-vu { background-position:-336px -224px; }
-.langflag-wales { background-position:0px -240px; }
-.langflag-wf { background-position:-24px -240px; }
-.langflag-ws { background-position:-48px -240px; }
-.langflag-ye { background-position:-72px -240px; }
-.langflag-yt { background-position:-96px -240px; }
-.langflag-af_ZA { background-position:-120px -240px; }
-.langflag-zm { background-position:-144px -240px; }
-.langflag-zw { background-position:-168px -240px; }
-.langflag-gl_ES { background-position:-192px -240px; }
-.langflag-br_FR { background-position:-216px -240px; }
-.langflag-eu_ES { background-position:-240px -240px; } \ No newline at end of file
diff --git a/plugins/language_switch/language_switch.inc.php b/plugins/language_switch/language_switch.inc.php
deleted file mode 100644
index 8a7e62817..000000000
--- a/plugins/language_switch/language_switch.inc.php
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
-
-function language_controler_switch()
-{
- global $user;
-
- $same = $user['language'];
-
- if (isset($_GET['lang']))
- {
- include_once(PHPWG_ROOT_PATH . 'admin/include/languages.class.php');
- $languages = new languages();
- if ( !in_array($_GET['lang'], array_keys($languages->fs_languages)) )
- {
- $_GET['lang'] = PHPWG_DEFAULT_LANGUAGE;
- }
-
- if ( !empty($_GET['lang']) and file_exists(PHPWG_ROOT_PATH.'language/'.$_GET['lang'].'/common.lang.php') )
- {
- if ( is_a_guest() or is_generic() )
- {
- pwg_set_session_var('lang_switch', $_GET['lang']);
- }
- else
- {
- $query = '
-UPDATE '.USER_INFOS_TABLE.'
- SET language = \''.$_GET['lang'].'\'
- WHERE user_id = '.$user['id'].'
-;';
- pwg_query($query);
- }
-
- $user['language'] = $_GET['lang'];
- }
- }
- elseif ( (is_a_guest() or is_generic()) )
- {
- $user['language'] = pwg_get_session_var('lang_switch', $user['language']);
- }
-
- // Reload language only if it isn't the same one
- if ( $same !== $user['language'] )
- {
- load_language('common.lang', '', array('language'=>$user['language']));
-
- load_language(
- 'lang',
- PHPWG_ROOT_PATH.PWG_LOCAL_DIR,
- array(
- 'language' => $user['language'],
- 'no_fallback' => true,
- 'local' => true
- )
- );
-
- if ( defined('IN_ADMIN') and IN_ADMIN )
- {
- // Never currently
- load_language('admin.lang', '', array('language'=>$user['language']));
- }
- }
-}
-
-function language_controler_flags()
-{
- global $user, $template, $conf, $page;
-
- $available_lang = get_languages();
-
- if (isset($conf['no_flag_languages']))
- {
- $available_lang = array_diff_key($available_lang, array_flip($conf['no_flag_languages']));
- }
-
- $url_starting = get_query_string_diff(array('lang'));
-
- if (isset($page['section']) and $page['section'] == 'additional_page' and isset($page['additional_page']))
- {
- $base_url = make_index_url(array('section'=>'page')).'/'.(isset($page['additional_page']['permalink']) ? $page['additional_page']['permalink'] : $page['additional_page']['id']);
- }
- else
- {
- $base_url = duplicate_index_url();
- }
-
- foreach ($available_lang as $code => $displayname)
- {
- $qlc = array (
- 'url' => add_url_params($base_url, array('lang'=> $code)),
- 'alt' => ucwords($displayname),
- 'title' => substr($displayname, 0, -4), // remove [FR] or [RU]
- 'code' => $code,
- );
-
- $lsw['flags'][$code] = $qlc;
-
- if ($code == $user['language'])
- {
- $lsw['Active'] = $qlc;
- }
- }
-
- $safe_themes = array('clear','dark','elegant','Sylvia','simple-grey','simple-black','simple-white','kardon','luciano','montblancxl'); // stripped (2.6)
-
- $template->assign(array(
- 'lang_switch'=> $lsw,
- 'LANGUAGE_SWITCH_PATH' => LANGUAGE_SWITCH_PATH,
- 'LANGUAGE_SWITCH_LOAD_STYLE' => !in_array($user['theme'], $safe_themes),
- ));
-
- $template->set_filename('language_flags', dirname(__FILE__) . '/flags.tpl');
- $template->concat('PLUGIN_INDEX_ACTIONS', $template->parse('language_flags', true) );
- $template->clear_assign('lang_switch');
-}
-
-?> \ No newline at end of file
diff --git a/plugins/language_switch/main.inc.php b/plugins/language_switch/main.inc.php
deleted file mode 100644
index 53909f360..000000000
--- a/plugins/language_switch/main.inc.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based photo gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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 |
-// | |
-// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
-// | USA. |
-// +-----------------------------------------------------------------------+
-
-/*
-Plugin Name: Language Switch
-Version: 2.7.2
-Description: Switch to another language from flags on your gallery home page.
-Plugin URI: http://piwigo.org/ext/extension_view.php?eid=123
-Author: Piwigo team
-Author URI: http://piwigo.org
-*/
-
-if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
-
-define('LANGUAGE_SWITCH_PATH' , PHPWG_PLUGINS_PATH.basename(dirname(__FILE__)).'/');
-
-include_once(LANGUAGE_SWITCH_PATH.'language_switch.inc.php');
-
-add_event_handler('loading_lang', 'language_controler_switch', 5 );
-add_event_handler('loc_end_index', 'language_controler_flags', 95 );
-
-?> \ No newline at end of file
diff --git a/plugins/language_switch/style.css b/plugins/language_switch/style.css
deleted file mode 100644
index 476ab4a66..000000000
--- a/plugins/language_switch/style.css
+++ /dev/null
@@ -1,29 +0,0 @@
-#languageSwitchBox {
- padding: 0.5em 5px;
- border-radius: 4px;
- z-index: 100;
- text-align:left;
- display: none;
- position: absolute;
- left: 0; top: 0; /*left, right set through js*/
- background-color: #555;
- border: 1px solid #000;
-}
-
-#languageSwitchBox .switchBoxTitle {
- padding-bottom:5px;
- margin-bottom:5px;
- border-bottom: 1px solid #444;
-}
-#languageSwitchBox a {
- color:#aaa;
-}
-#languageSwitchBox a:hover {
- color:#ddd;
-}
-
-[class*="langflag-"] {
- overflow: hidden;
- text-indent: -9999px;
- vertical-align: bottom;
-}
diff --git a/popuphelp.php b/popuphelp.php
index 52958d26c..f8bb08cd7 100644
--- a/popuphelp.php
+++ b/popuphelp.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/profile.php b/profile.php
index 372f5cc2e..b143cbf54 100644
--- a/profile.php
+++ b/profile.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/qsearch.php b/qsearch.php
index a19efa525..f614e839c 100644
--- a/qsearch.php
+++ b/qsearch.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/random.php b/random.php
index 74cad9406..757730341 100644
--- a/random.php
+++ b/random.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/register.php b/register.php
index 9f95d5143..40897af83 100644
--- a/register.php
+++ b/register.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/search.php b/search.php
index e4528ea42..9d33c7b3c 100644
--- a/search.php
+++ b/search.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -119,7 +119,7 @@ if (isset($_POST['submit']))
{
$search['fields'][$type_date.'-after'] = array(
'date' => sprintf(
- '%d-%02d-%02d',
+ '%d-%02d-%02d 00:00:00',
$_POST['start_year'],
$_POST['start_month'] != 0 ? $_POST['start_month'] : '01',
$_POST['start_day'] != 0 ? $_POST['start_day'] : '01'
@@ -132,7 +132,7 @@ if (isset($_POST['submit']))
{
$search['fields'][$type_date.'-before'] = array(
'date' => sprintf(
- '%d-%02d-%02d',
+ '%d-%02d-%02d 23:59:59',
$_POST['end_year'],
$_POST['end_month'] != 0 ? $_POST['end_month'] : '12',
$_POST['end_day'] != 0 ? $_POST['end_day'] : '31'
diff --git a/search_rules.php b/search_rules.php
index 34854d2e0..7ec39ace5 100644
--- a/search_rules.php
+++ b/search_rules.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/tags.php b/tags.php
index f4ac851bf..b781830af 100644
--- a/tags.php
+++ b/tags.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/template-extension/index.php b/template-extension/index.php
index c8de97f60..0b96c3efa 100644
--- a/template-extension/index.php
+++ b/template-extension/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/template-extension/yoga/index.php b/template-extension/yoga/index.php
index c8de97f60..0b96c3efa 100644
--- a/template-extension/yoga/index.php
+++ b/template-extension/yoga/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/template-extension/yoga/local/index.php b/template-extension/yoga/local/index.php
index c8de97f60..0b96c3efa 100644
--- a/template-extension/yoga/local/index.php
+++ b/template-extension/yoga/local/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/Sylvia/icon/index.php b/themes/Sylvia/icon/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/Sylvia/icon/index.php
+++ b/themes/Sylvia/icon/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/Sylvia/icon/mimetypes/index.php b/themes/Sylvia/icon/mimetypes/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/Sylvia/icon/mimetypes/index.php
+++ b/themes/Sylvia/icon/mimetypes/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/Sylvia/index.php b/themes/Sylvia/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/Sylvia/index.php
+++ b/themes/Sylvia/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/clear/index.php b/themes/clear/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/clear/index.php
+++ b/themes/clear/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/dark/images/index.php b/themes/dark/images/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/dark/images/index.php
+++ b/themes/dark/images/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/dark/index.php b/themes/dark/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/dark/index.php
+++ b/themes/dark/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/default/icon/index.php b/themes/default/icon/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/default/icon/index.php
+++ b/themes/default/icon/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/default/icon/mimetypes/index.php b/themes/default/icon/mimetypes/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/default/icon/mimetypes/index.php
+++ b/themes/default/icon/mimetypes/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/default/images/index.php b/themes/default/images/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/default/images/index.php
+++ b/themes/default/images/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/default/index.php b/themes/default/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/default/index.php
+++ b/themes/default/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/default/js/jquery.js b/themes/default/js/jquery.js
index d4b67f7e6..6feb11086 100644
--- a/themes/default/js/jquery.js
+++ b/themes/default/js/jquery.js
@@ -1,5 +1,5 @@
/*!
- * jQuery JavaScript Library v1.11.1
+ * jQuery JavaScript Library v1.11.3
* http://jquery.com/
*
* Includes Sizzle.js
@@ -9,7 +9,7 @@
* Released under the MIT license
* http://jquery.org/license
*
- * Date: 2014-05-01T17:42Z
+ * Date: 2015-04-28T16:19Z
*/
(function( global, factory ) {
@@ -64,7 +64,7 @@ var support = {};
var
- version = "1.11.1",
+ version = "1.11.3",
// Define a local copy of jQuery
jQuery = function( selector, context ) {
@@ -269,7 +269,8 @@ jQuery.extend({
// parseFloat NaNs numeric-cast false positives (null|true|false|"")
// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
// subtraction forces infinities to NaN
- return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
+ // adding 1 corrects loss of precision from parseFloat (#15100)
+ return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
},
isEmptyObject: function( obj ) {
@@ -568,7 +569,12 @@ jQuery.each("Boolean Number String Function Array Date RegExp Object Error".spli
});
function isArraylike( obj ) {
- var length = obj.length,
+
+ // Support: iOS 8.2 (not reproducible in simulator)
+ // `in` check used to prevent JIT error (gh-2145)
+ // hasOwn isn't used here due to false negatives
+ // regarding Nodelist length in IE
+ var length = "length" in obj && obj.length,
type = jQuery.type( obj );
if ( type === "function" || jQuery.isWindow( obj ) ) {
@@ -584,14 +590,14 @@ function isArraylike( obj ) {
}
var Sizzle =
/*!
- * Sizzle CSS Selector Engine v1.10.19
+ * Sizzle CSS Selector Engine v2.2.0-pre
* http://sizzlejs.com/
*
- * Copyright 2013 jQuery Foundation, Inc. and other contributors
+ * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license
* http://jquery.org/license
*
- * Date: 2014-04-18
+ * Date: 2014-12-16
*/
(function( window ) {
@@ -618,7 +624,7 @@ var i,
contains,
// Instance-specific data
- expando = "sizzle" + -(new Date()),
+ expando = "sizzle" + 1 * new Date(),
preferredDoc = window.document,
dirruns = 0,
done = 0,
@@ -633,7 +639,6 @@ var i,
},
// General-purpose constants
- strundefined = typeof undefined,
MAX_NEGATIVE = 1 << 31,
// Instance methods
@@ -643,12 +648,13 @@ var i,
push_native = arr.push,
push = arr.push,
slice = arr.slice,
- // Use a stripped-down indexOf if we can't use a native one
- indexOf = arr.indexOf || function( elem ) {
+ // Use a stripped-down indexOf as it's faster than native
+ // http://jsperf.com/thor-indexof-vs-for/5
+ indexOf = function( list, elem ) {
var i = 0,
- len = this.length;
+ len = list.length;
for ( ; i < len; i++ ) {
- if ( this[i] === elem ) {
+ if ( list[i] === elem ) {
return i;
}
}
@@ -688,6 +694,7 @@ var i,
")\\)|)",
// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rwhitespace = new RegExp( whitespace + "+", "g" ),
rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
@@ -739,6 +746,14 @@ var i,
String.fromCharCode( high + 0x10000 ) :
// Supplemental Plane codepoint (surrogate pair)
String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+ },
+
+ // Used for iframes
+ // See setDocument()
+ // Removing the function wrapper causes a "Permission Denied"
+ // error in IE
+ unloadHandler = function() {
+ setDocument();
};
// Optimize for push.apply( _, NodeList )
@@ -781,19 +796,18 @@ function Sizzle( selector, context, results, seed ) {
context = context || document;
results = results || [];
+ nodeType = context.nodeType;
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
+ if ( typeof selector !== "string" || !selector ||
+ nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
- if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
- return [];
+ return results;
}
- if ( documentIsHTML && !seed ) {
+ if ( !seed && documentIsHTML ) {
- // Shortcuts
- if ( (match = rquickExpr.exec( selector )) ) {
+ // Try to shortcut find operations when possible (e.g., not under DocumentFragment)
+ if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
// Speed-up: Sizzle("#ID")
if ( (m = match[1]) ) {
if ( nodeType === 9 ) {
@@ -825,7 +839,7 @@ function Sizzle( selector, context, results, seed ) {
return results;
// Speed-up: Sizzle(".CLASS")
- } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
+ } else if ( (m = match[3]) && support.getElementsByClassName ) {
push.apply( results, context.getElementsByClassName( m ) );
return results;
}
@@ -835,7 +849,7 @@ function Sizzle( selector, context, results, seed ) {
if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
nid = old = expando;
newContext = context;
- newSelector = nodeType === 9 && selector;
+ newSelector = nodeType !== 1 && selector;
// qSA works strangely on Element-rooted queries
// We can work around this by specifying an extra ID on the root
@@ -1022,7 +1036,7 @@ function createPositionalPseudo( fn ) {
* @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
*/
function testContext( context ) {
- return context && typeof context.getElementsByTagName !== strundefined && context;
+ return context && typeof context.getElementsByTagName !== "undefined" && context;
}
// Expose support vars for convenience
@@ -1046,9 +1060,8 @@ isXML = Sizzle.isXML = function( elem ) {
* @returns {Object} Returns the current document
*/
setDocument = Sizzle.setDocument = function( node ) {
- var hasCompare,
- doc = node ? node.ownerDocument || node : preferredDoc,
- parent = doc.defaultView;
+ var hasCompare, parent,
+ doc = node ? node.ownerDocument || node : preferredDoc;
// If no document and documentElement is available, return
if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
@@ -1058,9 +1071,7 @@ setDocument = Sizzle.setDocument = function( node ) {
// Set our document
document = doc;
docElem = doc.documentElement;
-
- // Support tests
- documentIsHTML = !isXML( doc );
+ parent = doc.defaultView;
// Support: IE>8
// If iframe document is assigned to "document" variable and if iframe has been reloaded,
@@ -1069,21 +1080,22 @@ setDocument = Sizzle.setDocument = function( node ) {
if ( parent && parent !== parent.top ) {
// IE11 does not have attachEvent, so all must suffer
if ( parent.addEventListener ) {
- parent.addEventListener( "unload", function() {
- setDocument();
- }, false );
+ parent.addEventListener( "unload", unloadHandler, false );
} else if ( parent.attachEvent ) {
- parent.attachEvent( "onunload", function() {
- setDocument();
- });
+ parent.attachEvent( "onunload", unloadHandler );
}
}
+ /* Support tests
+ ---------------------------------------------------------------------- */
+ documentIsHTML = !isXML( doc );
+
/* Attributes
---------------------------------------------------------------------- */
// Support: IE<8
- // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
+ // Verify that getAttribute really returns attributes and not properties
+ // (excepting IE8 booleans)
support.attributes = assert(function( div ) {
div.className = "i";
return !div.getAttribute("className");
@@ -1098,17 +1110,8 @@ setDocument = Sizzle.setDocument = function( node ) {
return !div.getElementsByTagName("*").length;
});
- // Check if getElementsByClassName can be trusted
- support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
- div.innerHTML = "<div class='a'></div><div class='a i'></div>";
-
- // Support: Safari<4
- // Catch class over-caching
- div.firstChild.className = "i";
- // Support: Opera<10
- // Catch gEBCN failure to find non-leading classes
- return div.getElementsByClassName("i").length === 2;
- });
+ // Support: IE<9
+ support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
// Support: IE<10
// Check if getElementById returns elements by name
@@ -1122,7 +1125,7 @@ setDocument = Sizzle.setDocument = function( node ) {
// ID find and filter
if ( support.getById ) {
Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
var m = context.getElementById( id );
// Check parentNode to catch when Blackberry 4.6 returns
// nodes that are no longer in the document #6963
@@ -1143,7 +1146,7 @@ setDocument = Sizzle.setDocument = function( node ) {
Expr.filter["ID"] = function( id ) {
var attrId = id.replace( runescape, funescape );
return function( elem ) {
- var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
return node && node.value === attrId;
};
};
@@ -1152,14 +1155,20 @@ setDocument = Sizzle.setDocument = function( node ) {
// Tag
Expr.find["TAG"] = support.getElementsByTagName ?
function( tag, context ) {
- if ( typeof context.getElementsByTagName !== strundefined ) {
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
return context.getElementsByTagName( tag );
+
+ // DocumentFragment nodes don't have gEBTN
+ } else if ( support.qsa ) {
+ return context.querySelectorAll( tag );
}
} :
+
function( tag, context ) {
var elem,
tmp = [],
i = 0,
+ // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
results = context.getElementsByTagName( tag );
// Filter out possible comments
@@ -1177,7 +1186,7 @@ setDocument = Sizzle.setDocument = function( node ) {
// Class
Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
+ if ( documentIsHTML ) {
return context.getElementsByClassName( className );
}
};
@@ -1206,13 +1215,15 @@ setDocument = Sizzle.setDocument = function( node ) {
// setting a boolean content attribute,
// since its presence should be enough
// http://bugs.jquery.com/ticket/12359
- div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
+ docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
+ "<select id='" + expando + "-\f]' msallowcapture=''>" +
+ "<option selected=''></option></select>";
// Support: IE8, Opera 11-12.16
// Nothing should be selected when empty strings follow ^= or $= or *=
// The test attribute must be unknown in Opera but "safe" for WinRT
// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
- if ( div.querySelectorAll("[msallowclip^='']").length ) {
+ if ( div.querySelectorAll("[msallowcapture^='']").length ) {
rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
}
@@ -1222,12 +1233,24 @@ setDocument = Sizzle.setDocument = function( node ) {
rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
}
+ // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
+ if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+ rbuggyQSA.push("~=");
+ }
+
// Webkit/Opera - :checked should return selected option elements
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
// IE8 throws error here and will not see later tests
if ( !div.querySelectorAll(":checked").length ) {
rbuggyQSA.push(":checked");
}
+
+ // Support: Safari 8+, iOS 8+
+ // https://bugs.webkit.org/show_bug.cgi?id=136851
+ // In-page `selector#id sibing-combinator selector` fails
+ if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
+ rbuggyQSA.push(".#.+[+~]");
+ }
});
assert(function( div ) {
@@ -1344,7 +1367,7 @@ setDocument = Sizzle.setDocument = function( node ) {
// Maintain original order
return sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
0;
}
@@ -1371,7 +1394,7 @@ setDocument = Sizzle.setDocument = function( node ) {
aup ? -1 :
bup ? 1 :
sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
0;
// If the nodes are siblings, we can do a quick check
@@ -1434,7 +1457,7 @@ Sizzle.matchesSelector = function( elem, expr ) {
elem.document && elem.document.nodeType !== 11 ) {
return ret;
}
- } catch(e) {}
+ } catch (e) {}
}
return Sizzle( expr, document, null, [ elem ] ).length > 0;
@@ -1653,7 +1676,7 @@ Expr = Sizzle.selectors = {
return pattern ||
(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
classCache( className, function( elem ) {
- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
+ return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
});
},
@@ -1675,7 +1698,7 @@ Expr = Sizzle.selectors = {
operator === "^=" ? check && result.indexOf( check ) === 0 :
operator === "*=" ? check && result.indexOf( check ) > -1 :
operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+ operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
false;
};
@@ -1795,7 +1818,7 @@ Expr = Sizzle.selectors = {
matched = fn( seed, argument ),
i = matched.length;
while ( i-- ) {
- idx = indexOf.call( seed, matched[i] );
+ idx = indexOf( seed, matched[i] );
seed[ idx ] = !( matches[ idx ] = matched[i] );
}
}) :
@@ -1834,6 +1857,8 @@ Expr = Sizzle.selectors = {
function( elem, context, xml ) {
input[0] = elem;
matcher( input, null, xml, results );
+ // Don't keep the element (issue #299)
+ input[0] = null;
return !results.pop();
};
}),
@@ -1845,6 +1870,7 @@ Expr = Sizzle.selectors = {
}),
"contains": markFunction(function( text ) {
+ text = text.replace( runescape, funescape );
return function( elem ) {
return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
};
@@ -2266,7 +2292,7 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
i = matcherOut.length;
while ( i-- ) {
if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+ (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
seed[temp] = !(results[temp] = elem);
}
@@ -2301,13 +2327,16 @@ function matcherFromTokens( tokens ) {
return elem === checkContext;
}, implicitRelative, true ),
matchAnyContext = addCombinator( function( elem ) {
- return indexOf.call( checkContext, elem ) > -1;
+ return indexOf( checkContext, elem ) > -1;
}, implicitRelative, true ),
matchers = [ function( elem, context, xml ) {
- return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
(checkContext = context).nodeType ?
matchContext( elem, context, xml ) :
matchAnyContext( elem, context, xml ) );
+ // Avoid hanging onto element (issue #299)
+ checkContext = null;
+ return ret;
} ];
for ( ; i < len; i++ ) {
@@ -2557,7 +2586,7 @@ select = Sizzle.select = function( selector, context, results, seed ) {
// Sort stability
support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-// Support: Chrome<14
+// Support: Chrome 14-35+
// Always assume duplicates if they aren't passed to the comparison function
support.detectDuplicates = !!hasDuplicate;
@@ -6115,7 +6144,14 @@ var getStyles, curCSS,
if ( window.getComputedStyle ) {
getStyles = function( elem ) {
- return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
+ // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
+ // IE throws on elements created in popups
+ // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+ if ( elem.ownerDocument.defaultView.opener ) {
+ return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
+ }
+
+ return window.getComputedStyle( elem, null );
};
curCSS = function( elem, name, computed ) {
@@ -6363,6 +6399,8 @@ function addGetHookIf( conditionFn, hookFn ) {
reliableMarginRightVal =
!parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );
+
+ div.removeChild( contents );
}
// Support: IE8
@@ -9070,7 +9108,8 @@ jQuery.extend({
}
// We can fire global events as of now if asked to
- fireGlobals = s.global;
+ // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+ fireGlobals = jQuery.event && s.global;
// Watch for a new set of requests
if ( fireGlobals && jQuery.active++ === 0 ) {
@@ -9329,13 +9368,6 @@ jQuery.each( [ "get", "post" ], function( i, method ) {
};
});
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
- jQuery.fn[ type ] = function( fn ) {
- return this.on( type, fn );
- };
-});
-
jQuery._evalUrl = function( url ) {
return jQuery.ajax({
@@ -9561,8 +9593,9 @@ var xhrId = 0,
// Support: IE<10
// Open requests must be manually aborted on unload (#5280)
-if ( window.ActiveXObject ) {
- jQuery( window ).on( "unload", function() {
+// See https://support.microsoft.com/kb/2856746 for more info
+if ( window.attachEvent ) {
+ window.attachEvent( "onunload", function() {
for ( var key in xhrCallbacks ) {
xhrCallbacks[ key ]( undefined, true );
}
@@ -9996,6 +10029,16 @@ jQuery.fn.load = function( url, params, callback ) {
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
+ jQuery.fn[ type ] = function( fn ) {
+ return this.on( type, fn );
+ };
+});
+
+
+
+
jQuery.expr.filters.animated = function( elem ) {
return jQuery.grep(jQuery.timers, function( fn ) {
return elem === fn.elem;
diff --git a/themes/default/js/jquery.min.js b/themes/default/js/jquery.min.js
index ab28a2472..0f60b7bd0 100644
--- a/themes/default/js/jquery.min.js
+++ b/themes/default/js/jquery.min.js
@@ -1,4 +1,5 @@
-/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;
-if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")
-},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
+/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
+
+return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){
+return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/themes/default/template/mail/index.php b/themes/default/template/mail/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/default/template/mail/index.php
+++ b/themes/default/template/mail/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/default/template/mail/text/html/cat_group_info.tpl b/themes/default/template/mail/text/html/cat_group_info.tpl
index e8d7d7c10..6a136c63c 100644
--- a/themes/default/template/mail/text/html/cat_group_info.tpl
+++ b/themes/default/template/mail/text/html/cat_group_info.tpl
@@ -1,6 +1,6 @@
<div id="cat_group_info">
<h2>{'Informations'|@translate}</h2>
-<p>{$IMG_URL}</p>
+<p><a href="{$IMG.link}" class="thumblnk"><img src="{$IMG.src}"></a></p>
<p>{'Hello,'|@translate}</p>
<p>{'Discover album:'|@translate} <a href="{$LINK}">{$CAT_NAME}</a></p>
<p>{$CPL_CONTENT}</p>
diff --git a/themes/default/template/mail/text/html/global-mail-css.tpl b/themes/default/template/mail/text/html/global-mail-css.tpl
index 59a1bde2f..23a3be3a3 100644
--- a/themes/default/template/mail/text/html/global-mail-css.tpl
+++ b/themes/default/template/mail/text/html/global-mail-css.tpl
@@ -1,4 +1,3 @@
-{strip}
/* page */
body {
font-family:"Verdana", "Helvetica", "Optima", sans-serif;
@@ -102,4 +101,3 @@ hr {
border-style:solid;
margin:1em;
}
-{/strip} \ No newline at end of file
diff --git a/themes/default/template/mail/text/html/index.php b/themes/default/template/mail/text/html/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/default/template/mail/text/html/index.php
+++ b/themes/default/template/mail/text/html/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/default/template/mail/text/html/mail-css-clear.tpl b/themes/default/template/mail/text/html/mail-css-clear.tpl
index 98b0337d9..c2e908ede 100644
--- a/themes/default/template/mail/text/html/mail-css-clear.tpl
+++ b/themes/default/template/mail/text/html/mail-css-clear.tpl
@@ -1,4 +1,3 @@
-{strip}
/* page */
body {
color:#111;
@@ -70,4 +69,3 @@ blockquote {
background:#eee;
border-right:1px solid #fff;
}
-{/strip} \ No newline at end of file
diff --git a/themes/default/template/mail/text/html/mail-css-dark.tpl b/themes/default/template/mail/text/html/mail-css-dark.tpl
index 390a7dfb6..f4e8a3f95 100644
--- a/themes/default/template/mail/text/html/mail-css-dark.tpl
+++ b/themes/default/template/mail/text/html/mail-css-dark.tpl
@@ -1,4 +1,3 @@
-{strip}
/* page */
body {
color:#fff;
@@ -84,4 +83,3 @@ blockquote {
hr {
border-color:#555;
}
-{/strip} \ No newline at end of file
diff --git a/themes/default/template/mail/text/index.php b/themes/default/template/mail/text/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/default/template/mail/text/index.php
+++ b/themes/default/template/mail/text/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/default/template/mail/text/plain/index.php b/themes/default/template/mail/text/plain/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/default/template/mail/text/plain/index.php
+++ b/themes/default/template/mail/text/plain/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/default/template/picture.tpl b/themes/default/template/picture.tpl
index 733cefcf8..bfc0c2498 100644
--- a/themes/default/template/picture.tpl
+++ b/themes/default/template/picture.tpl
@@ -65,9 +65,28 @@ function changeImgSrc(url,typeSave,typeMap)
</a>
{/if}{/strip}
{strip}{if isset($current.U_DOWNLOAD)}
- <a href="{$current.U_DOWNLOAD}" title="{'Download this file'|@translate}" class="pwg-state-default pwg-button" rel="nofollow">
+ <a id="downloadSwitchLink" href="{$current.U_DOWNLOAD}" title="{'Download this file'|@translate}" class="pwg-state-default pwg-button" rel="nofollow">
<span class="pwg-icon pwg-icon-save"></span><span class="pwg-button-text">{'Download'|@translate}</span>
</a>
+
+{if !empty($current.formats)}
+{footer_script require='jquery'}{literal}
+jQuery().ready(function() {
+ jQuery("#downloadSwitchLink").removeAttr("href");
+
+ (window.SwitchBox=window.SwitchBox||[]).push("#downloadSwitchLink", "#downloadSwitchBox");
+});
+{/literal}{/footer_script}
+
+<div id="downloadSwitchBox" class="switchBox">
+ <div class="switchBoxTitle">{'Download'|translate} - {'Formats'|translate}</div>
+ <ul>
+ {foreach from=$current.formats item=format}
+ <li><a href="{$format.download_url}" rel="nofollow">{$format.label}<span class="downloadformatDetails"> ({$format.filesize})</span></a></li>
+ {/foreach}
+ </ul>
+</div>
+{/if} {* has formats *}
{/if}{/strip}
{if isset($PLUGIN_PICTURE_BUTTONS)}{foreach from=$PLUGIN_PICTURE_BUTTONS item=button}{$button}{/foreach}{/if}
{if isset($PLUGIN_PICTURE_ACTIONS)}{$PLUGIN_PICTURE_ACTIONS}{/if}
diff --git a/themes/default/template/slideshow.tpl b/themes/default/template/slideshow.tpl
index 8a2304b8a..03f3655c3 100644
--- a/themes/default/template/slideshow.tpl
+++ b/themes/default/template/slideshow.tpl
@@ -21,4 +21,4 @@
{/if}
</div>
</div>
-<div>
+</div>
diff --git a/themes/default/theme.css b/themes/default/theme.css
index 3a68f1577..5a438be9c 100644
--- a/themes/default/theme.css
+++ b/themes/default/theme.css
@@ -363,6 +363,12 @@ TD.calDayCellFull, TD.calDayCellEmpty {
margin-bottom:5px;
}
+#downloadSwitchBox ul {
+ margin:0;
+ padding:0;
+ list-style-type:none;
+}
+
#theImage {
text-align: center;
}
diff --git a/themes/elegant/admin/index.php b/themes/elegant/admin/index.php
index e3365959c..6a7aa65b4 100644
--- a/themes/elegant/admin/index.php
+++ b/themes/elegant/admin/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/index.php b/themes/elegant/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/elegant/index.php
+++ b/themes/elegant/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/ar_SA/theme.lang.php b/themes/elegant/language/ar_SA/theme.lang.php
index 7d9d1e000..3579431d0 100755
--- a/themes/elegant/language/ar_SA/theme.lang.php
+++ b/themes/elegant/language/ar_SA/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/bg_BG/theme.lang.php b/themes/elegant/language/bg_BG/theme.lang.php
index b698af481..69473461b 100755
--- a/themes/elegant/language/bg_BG/theme.lang.php
+++ b/themes/elegant/language/bg_BG/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/br_FR/theme.lang.php b/themes/elegant/language/br_FR/theme.lang.php
index 1224acfa8..8392d30d5 100755
--- a/themes/elegant/language/br_FR/theme.lang.php
+++ b/themes/elegant/language/br_FR/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/ca_ES/theme.lang.php b/themes/elegant/language/ca_ES/theme.lang.php
index 3689300d5..dfc25c7a2 100755
--- a/themes/elegant/language/ca_ES/theme.lang.php
+++ b/themes/elegant/language/ca_ES/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/da_DK/theme.lang.php b/themes/elegant/language/da_DK/theme.lang.php
index b225664a2..bb4587d33 100755
--- a/themes/elegant/language/da_DK/theme.lang.php
+++ b/themes/elegant/language/da_DK/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/de_DE/theme.lang.php b/themes/elegant/language/de_DE/theme.lang.php
index 9acb103e8..cbe0c16ab 100755
--- a/themes/elegant/language/de_DE/theme.lang.php
+++ b/themes/elegant/language/de_DE/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/el_GR/theme.lang.php b/themes/elegant/language/el_GR/theme.lang.php
index d44726885..ae3af96dd 100755
--- a/themes/elegant/language/el_GR/theme.lang.php
+++ b/themes/elegant/language/el_GR/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/en_UK/index.php b/themes/elegant/language/en_UK/index.php
index e3365959c..6a7aa65b4 100644
--- a/themes/elegant/language/en_UK/index.php
+++ b/themes/elegant/language/en_UK/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/eo_EO/theme.lang.php b/themes/elegant/language/eo_EO/theme.lang.php
index 8d0b4c456..cc22a702a 100755
--- a/themes/elegant/language/eo_EO/theme.lang.php
+++ b/themes/elegant/language/eo_EO/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/es_ES/theme.lang.php b/themes/elegant/language/es_ES/theme.lang.php
index 3c593a306..c325f25dc 100755
--- a/themes/elegant/language/es_ES/theme.lang.php
+++ b/themes/elegant/language/es_ES/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/et_EE/theme.lang.php b/themes/elegant/language/et_EE/theme.lang.php
index 53f3d6993..8864dfea1 100755
--- a/themes/elegant/language/et_EE/theme.lang.php
+++ b/themes/elegant/language/et_EE/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/fa_IR/theme.lang.php b/themes/elegant/language/fa_IR/theme.lang.php
index 6fd310c70..ab5d6849d 100755
--- a/themes/elegant/language/fa_IR/theme.lang.php
+++ b/themes/elegant/language/fa_IR/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/fi_FI/theme.lang.php b/themes/elegant/language/fi_FI/theme.lang.php
index dbe296a51..6caff329c 100755
--- a/themes/elegant/language/fi_FI/theme.lang.php
+++ b/themes/elegant/language/fi_FI/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/fr_CA/index.php b/themes/elegant/language/fr_CA/index.php
index e3365959c..6a7aa65b4 100644
--- a/themes/elegant/language/fr_CA/index.php
+++ b/themes/elegant/language/fr_CA/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/fr_FR/index.php b/themes/elegant/language/fr_FR/index.php
index e3365959c..6a7aa65b4 100644
--- a/themes/elegant/language/fr_FR/index.php
+++ b/themes/elegant/language/fr_FR/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/gl_ES/theme.lang.php b/themes/elegant/language/gl_ES/theme.lang.php
index 35f26d0f5..9e7b144e7 100755
--- a/themes/elegant/language/gl_ES/theme.lang.php
+++ b/themes/elegant/language/gl_ES/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/he_IL/theme.lang.php b/themes/elegant/language/he_IL/theme.lang.php
index bb44bcb8c..0e12b13d8 100755
--- a/themes/elegant/language/he_IL/theme.lang.php
+++ b/themes/elegant/language/he_IL/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/hu_HU/theme.lang.php b/themes/elegant/language/hu_HU/theme.lang.php
index 2546f2541..8610f1e7a 100755
--- a/themes/elegant/language/hu_HU/theme.lang.php
+++ b/themes/elegant/language/hu_HU/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/it_IT/theme.lang.php b/themes/elegant/language/it_IT/theme.lang.php
index db7d23340..8f752d5ac 100755
--- a/themes/elegant/language/it_IT/theme.lang.php
+++ b/themes/elegant/language/it_IT/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/ja_JP/theme.lang.php b/themes/elegant/language/ja_JP/theme.lang.php
index c664719ba..bd881dab7 100755
--- a/themes/elegant/language/ja_JP/theme.lang.php
+++ b/themes/elegant/language/ja_JP/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/km_KH/theme.lang.php b/themes/elegant/language/km_KH/theme.lang.php
index 6c0cc77cb..f5ce7ca81 100755
--- a/themes/elegant/language/km_KH/theme.lang.php
+++ b/themes/elegant/language/km_KH/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/kn_IN/theme.lang.php b/themes/elegant/language/kn_IN/theme.lang.php
index 8ec80779c..bb9a4bf88 100755
--- a/themes/elegant/language/kn_IN/theme.lang.php
+++ b/themes/elegant/language/kn_IN/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/ko_KR/theme.lang.php b/themes/elegant/language/ko_KR/theme.lang.php
index 143ce22f6..2dae80e24 100755
--- a/themes/elegant/language/ko_KR/theme.lang.php
+++ b/themes/elegant/language/ko_KR/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/lt_LT/theme.lang.php b/themes/elegant/language/lt_LT/theme.lang.php
index b3a39bfee..9467d7be9 100755
--- a/themes/elegant/language/lt_LT/theme.lang.php
+++ b/themes/elegant/language/lt_LT/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/lv_LV/theme.lang.php b/themes/elegant/language/lv_LV/theme.lang.php
index 8b54fe3d4..6f744e486 100755
--- a/themes/elegant/language/lv_LV/theme.lang.php
+++ b/themes/elegant/language/lv_LV/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/mn_MN/theme.lang.php b/themes/elegant/language/mn_MN/theme.lang.php
index fe6cb3384..dc34d0976 100755
--- a/themes/elegant/language/mn_MN/theme.lang.php
+++ b/themes/elegant/language/mn_MN/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/nb_NO/theme.lang.php b/themes/elegant/language/nb_NO/theme.lang.php
index b2c8f7b02..004aadd14 100755
--- a/themes/elegant/language/nb_NO/theme.lang.php
+++ b/themes/elegant/language/nb_NO/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/nl_NL/theme.lang.php b/themes/elegant/language/nl_NL/theme.lang.php
index 821ee31a0..5f0cbc3cc 100755
--- a/themes/elegant/language/nl_NL/theme.lang.php
+++ b/themes/elegant/language/nl_NL/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/nn_NO/theme.lang.php b/themes/elegant/language/nn_NO/theme.lang.php
index dd7d1db5c..21590c471 100755
--- a/themes/elegant/language/nn_NO/theme.lang.php
+++ b/themes/elegant/language/nn_NO/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/pl_PL/theme.lang.php b/themes/elegant/language/pl_PL/theme.lang.php
index e742cd47c..d827e20ae 100755
--- a/themes/elegant/language/pl_PL/theme.lang.php
+++ b/themes/elegant/language/pl_PL/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/pt_BR/theme.lang.php b/themes/elegant/language/pt_BR/theme.lang.php
index 915d64975..34bd64f91 100755
--- a/themes/elegant/language/pt_BR/theme.lang.php
+++ b/themes/elegant/language/pt_BR/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/pt_PT/theme.lang.php b/themes/elegant/language/pt_PT/theme.lang.php
index f3db37932..cda0f3d7b 100755
--- a/themes/elegant/language/pt_PT/theme.lang.php
+++ b/themes/elegant/language/pt_PT/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/ro_RO/theme.lang.php b/themes/elegant/language/ro_RO/theme.lang.php
index 828106138..7fdd2ab98 100755
--- a/themes/elegant/language/ro_RO/theme.lang.php
+++ b/themes/elegant/language/ro_RO/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/ru_RU/theme.lang.php b/themes/elegant/language/ru_RU/theme.lang.php
index 95b737d74..e2a24de93 100755
--- a/themes/elegant/language/ru_RU/theme.lang.php
+++ b/themes/elegant/language/ru_RU/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/sk_SK/theme.lang.php b/themes/elegant/language/sk_SK/theme.lang.php
index 2643a2c9a..68754c69a 100755
--- a/themes/elegant/language/sk_SK/theme.lang.php
+++ b/themes/elegant/language/sk_SK/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/sl_SI/theme.lang.php b/themes/elegant/language/sl_SI/theme.lang.php
index 0b95a1070..1e58e8aeb 100755
--- a/themes/elegant/language/sl_SI/theme.lang.php
+++ b/themes/elegant/language/sl_SI/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/sr_RS/theme.lang.php b/themes/elegant/language/sr_RS/theme.lang.php
index 54cd7f53e..e5808de1c 100755
--- a/themes/elegant/language/sr_RS/theme.lang.php
+++ b/themes/elegant/language/sr_RS/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/sv_SE/theme.lang.php b/themes/elegant/language/sv_SE/theme.lang.php
index 3582ea60c..5b4e0e8a2 100755
--- a/themes/elegant/language/sv_SE/theme.lang.php
+++ b/themes/elegant/language/sv_SE/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/ta_IN/theme.lang.php b/themes/elegant/language/ta_IN/theme.lang.php
index f6b96029b..9ef139277 100755
--- a/themes/elegant/language/ta_IN/theme.lang.php
+++ b/themes/elegant/language/ta_IN/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/th_TH/theme.lang.php b/themes/elegant/language/th_TH/theme.lang.php
index b95eba150..9d639dec8 100755
--- a/themes/elegant/language/th_TH/theme.lang.php
+++ b/themes/elegant/language/th_TH/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/tr_TR/theme.lang.php b/themes/elegant/language/tr_TR/theme.lang.php
index a2dfbc802..83e677a93 100755
--- a/themes/elegant/language/tr_TR/theme.lang.php
+++ b/themes/elegant/language/tr_TR/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/uk_UA/theme.lang.php b/themes/elegant/language/uk_UA/theme.lang.php
index 800aee1c3..5a62ba719 100755
--- a/themes/elegant/language/uk_UA/theme.lang.php
+++ b/themes/elegant/language/uk_UA/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/vi_VN/theme.lang.php b/themes/elegant/language/vi_VN/theme.lang.php
index 230ee3d2f..b4e01cfa0 100755
--- a/themes/elegant/language/vi_VN/theme.lang.php
+++ b/themes/elegant/language/vi_VN/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/zh_CN/theme.lang.php b/themes/elegant/language/zh_CN/theme.lang.php
index c08ca9324..c5c7940d6 100755
--- a/themes/elegant/language/zh_CN/theme.lang.php
+++ b/themes/elegant/language/zh_CN/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/zh_HK/theme.lang.php b/themes/elegant/language/zh_HK/theme.lang.php
index dfc326ad2..ef3e6d9e3 100755
--- a/themes/elegant/language/zh_HK/theme.lang.php
+++ b/themes/elegant/language/zh_HK/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/elegant/language/zh_TW/theme.lang.php b/themes/elegant/language/zh_TW/theme.lang.php
index bf5fdd1cd..186177c8e 100755
--- a/themes/elegant/language/zh_TW/theme.lang.php
+++ b/themes/elegant/language/zh_TW/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/index.php b/themes/index.php
index c8de97f60..0b96c3efa 100644
--- a/themes/index.php
+++ b/themes/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/admin/index.php b/themes/smartpocket/admin/index.php
index e3365959c..6a7aa65b4 100644
--- a/themes/smartpocket/admin/index.php
+++ b/themes/smartpocket/admin/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/ar_SA/theme.lang.php b/themes/smartpocket/language/ar_SA/theme.lang.php
index 83ddba815..5783d8879 100755
--- a/themes/smartpocket/language/ar_SA/theme.lang.php
+++ b/themes/smartpocket/language/ar_SA/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/bg_BG/theme.lang.php b/themes/smartpocket/language/bg_BG/theme.lang.php
index 170aebdcd..60ff7bde0 100755
--- a/themes/smartpocket/language/bg_BG/theme.lang.php
+++ b/themes/smartpocket/language/bg_BG/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/br_FR/theme.lang.php b/themes/smartpocket/language/br_FR/theme.lang.php
index cc04808cc..89b584006 100755
--- a/themes/smartpocket/language/br_FR/theme.lang.php
+++ b/themes/smartpocket/language/br_FR/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/ca_ES/theme.lang.php b/themes/smartpocket/language/ca_ES/theme.lang.php
index 3e03201b7..ecbdc254b 100755
--- a/themes/smartpocket/language/ca_ES/theme.lang.php
+++ b/themes/smartpocket/language/ca_ES/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/cs_CZ/index.php b/themes/smartpocket/language/cs_CZ/index.php
index e3365959c..6a7aa65b4 100644
--- a/themes/smartpocket/language/cs_CZ/index.php
+++ b/themes/smartpocket/language/cs_CZ/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/da_DK/theme.lang.php b/themes/smartpocket/language/da_DK/theme.lang.php
index 82e5ab7da..23f50e68b 100755
--- a/themes/smartpocket/language/da_DK/theme.lang.php
+++ b/themes/smartpocket/language/da_DK/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/de_DE/theme.lang.php b/themes/smartpocket/language/de_DE/theme.lang.php
index d75e3ff60..5ee0bcf13 100755
--- a/themes/smartpocket/language/de_DE/theme.lang.php
+++ b/themes/smartpocket/language/de_DE/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/el_GR/theme.lang.php b/themes/smartpocket/language/el_GR/theme.lang.php
index b20174897..d2fc46651 100755
--- a/themes/smartpocket/language/el_GR/theme.lang.php
+++ b/themes/smartpocket/language/el_GR/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/en_UK/index.php b/themes/smartpocket/language/en_UK/index.php
index e3365959c..6a7aa65b4 100644
--- a/themes/smartpocket/language/en_UK/index.php
+++ b/themes/smartpocket/language/en_UK/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/eo_EO/theme.lang.php b/themes/smartpocket/language/eo_EO/theme.lang.php
index c2204af48..f967ed845 100755
--- a/themes/smartpocket/language/eo_EO/theme.lang.php
+++ b/themes/smartpocket/language/eo_EO/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/es_ES/theme.lang.php b/themes/smartpocket/language/es_ES/theme.lang.php
index f6f79cbc4..5afb60f52 100755
--- a/themes/smartpocket/language/es_ES/theme.lang.php
+++ b/themes/smartpocket/language/es_ES/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/es_MX/theme.lang.php b/themes/smartpocket/language/es_MX/theme.lang.php
index e192b6fa3..478e20f9a 100755
--- a/themes/smartpocket/language/es_MX/theme.lang.php
+++ b/themes/smartpocket/language/es_MX/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/et_EE/theme.lang.php b/themes/smartpocket/language/et_EE/theme.lang.php
index 8643ee394..07e909648 100755
--- a/themes/smartpocket/language/et_EE/theme.lang.php
+++ b/themes/smartpocket/language/et_EE/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/fa_IR/theme.lang.php b/themes/smartpocket/language/fa_IR/theme.lang.php
index afd0f7f25..16a064a27 100755
--- a/themes/smartpocket/language/fa_IR/theme.lang.php
+++ b/themes/smartpocket/language/fa_IR/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/fi_FI/theme.lang.php b/themes/smartpocket/language/fi_FI/theme.lang.php
index 2207bcbd8..8b26995d0 100755
--- a/themes/smartpocket/language/fi_FI/theme.lang.php
+++ b/themes/smartpocket/language/fi_FI/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/fr_CA/index.php b/themes/smartpocket/language/fr_CA/index.php
index e3365959c..6a7aa65b4 100644
--- a/themes/smartpocket/language/fr_CA/index.php
+++ b/themes/smartpocket/language/fr_CA/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/fr_FR/index.php b/themes/smartpocket/language/fr_FR/index.php
index e3365959c..6a7aa65b4 100644
--- a/themes/smartpocket/language/fr_FR/index.php
+++ b/themes/smartpocket/language/fr_FR/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/gl_ES/theme.lang.php b/themes/smartpocket/language/gl_ES/theme.lang.php
index b789c9179..6bd3bb1db 100755
--- a/themes/smartpocket/language/gl_ES/theme.lang.php
+++ b/themes/smartpocket/language/gl_ES/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/he_IL/theme.lang.php b/themes/smartpocket/language/he_IL/theme.lang.php
index 7cebc274d..30741d81a 100755
--- a/themes/smartpocket/language/he_IL/theme.lang.php
+++ b/themes/smartpocket/language/he_IL/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/hu_HU/theme.lang.php b/themes/smartpocket/language/hu_HU/theme.lang.php
index f3d0b5b7b..00dc227bf 100755
--- a/themes/smartpocket/language/hu_HU/theme.lang.php
+++ b/themes/smartpocket/language/hu_HU/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/it_IT/theme.lang.php b/themes/smartpocket/language/it_IT/theme.lang.php
index a369eff15..2b26a4940 100755
--- a/themes/smartpocket/language/it_IT/theme.lang.php
+++ b/themes/smartpocket/language/it_IT/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/ja_JP/theme.lang.php b/themes/smartpocket/language/ja_JP/theme.lang.php
index 1e571edc0..1b725e250 100755
--- a/themes/smartpocket/language/ja_JP/theme.lang.php
+++ b/themes/smartpocket/language/ja_JP/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/km_KH/theme.lang.php b/themes/smartpocket/language/km_KH/theme.lang.php
index 157b31012..fe7193749 100755
--- a/themes/smartpocket/language/km_KH/theme.lang.php
+++ b/themes/smartpocket/language/km_KH/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/lt_LT/theme.lang.php b/themes/smartpocket/language/lt_LT/theme.lang.php
index 3b3ac11d2..237cf38bf 100755
--- a/themes/smartpocket/language/lt_LT/theme.lang.php
+++ b/themes/smartpocket/language/lt_LT/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/lv_LV/theme.lang.php b/themes/smartpocket/language/lv_LV/theme.lang.php
index 76d5838aa..3cc2e71f6 100755
--- a/themes/smartpocket/language/lv_LV/theme.lang.php
+++ b/themes/smartpocket/language/lv_LV/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/mn_MN/theme.lang.php b/themes/smartpocket/language/mn_MN/theme.lang.php
index ab18ad31e..2e0ce5b24 100755
--- a/themes/smartpocket/language/mn_MN/theme.lang.php
+++ b/themes/smartpocket/language/mn_MN/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/nb_NO/theme.lang.php b/themes/smartpocket/language/nb_NO/theme.lang.php
index c392e9744..b7b57da90 100755
--- a/themes/smartpocket/language/nb_NO/theme.lang.php
+++ b/themes/smartpocket/language/nb_NO/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/nl_NL/theme.lang.php b/themes/smartpocket/language/nl_NL/theme.lang.php
index 2e960f8de..b8eab4db3 100755
--- a/themes/smartpocket/language/nl_NL/theme.lang.php
+++ b/themes/smartpocket/language/nl_NL/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/nn_NO/theme.lang.php b/themes/smartpocket/language/nn_NO/theme.lang.php
index b14cd43e0..5cab527bd 100755
--- a/themes/smartpocket/language/nn_NO/theme.lang.php
+++ b/themes/smartpocket/language/nn_NO/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/pl_PL/theme.lang.php b/themes/smartpocket/language/pl_PL/theme.lang.php
index b30025beb..4679e2c9f 100755
--- a/themes/smartpocket/language/pl_PL/theme.lang.php
+++ b/themes/smartpocket/language/pl_PL/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/pt_BR/theme.lang.php b/themes/smartpocket/language/pt_BR/theme.lang.php
index e010e6c37..ee394d273 100755
--- a/themes/smartpocket/language/pt_BR/theme.lang.php
+++ b/themes/smartpocket/language/pt_BR/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/pt_PT/theme.lang.php b/themes/smartpocket/language/pt_PT/theme.lang.php
index 32ff04e01..cce8569a6 100755
--- a/themes/smartpocket/language/pt_PT/theme.lang.php
+++ b/themes/smartpocket/language/pt_PT/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/ro_RO/theme.lang.php b/themes/smartpocket/language/ro_RO/theme.lang.php
index 8aaed40de..20d21c1e2 100755
--- a/themes/smartpocket/language/ro_RO/theme.lang.php
+++ b/themes/smartpocket/language/ro_RO/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/ru_RU/theme.lang.php b/themes/smartpocket/language/ru_RU/theme.lang.php
index 41c4b84ce..c786e8a53 100755
--- a/themes/smartpocket/language/ru_RU/theme.lang.php
+++ b/themes/smartpocket/language/ru_RU/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/sh_RS/theme.lang.php b/themes/smartpocket/language/sh_RS/theme.lang.php
index 50e8fed80..6dff6c080 100755
--- a/themes/smartpocket/language/sh_RS/theme.lang.php
+++ b/themes/smartpocket/language/sh_RS/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/sk_SK/theme.lang.php b/themes/smartpocket/language/sk_SK/theme.lang.php
index 2c6fa595f..f799d98ce 100755
--- a/themes/smartpocket/language/sk_SK/theme.lang.php
+++ b/themes/smartpocket/language/sk_SK/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/sl_SI/theme.lang.php b/themes/smartpocket/language/sl_SI/theme.lang.php
index 23ea35c5e..847c35f05 100755
--- a/themes/smartpocket/language/sl_SI/theme.lang.php
+++ b/themes/smartpocket/language/sl_SI/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/sr_RS/theme.lang.php b/themes/smartpocket/language/sr_RS/theme.lang.php
index 73cd8b0dd..e1ef12cc0 100755
--- a/themes/smartpocket/language/sr_RS/theme.lang.php
+++ b/themes/smartpocket/language/sr_RS/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/sv_SE/theme.lang.php b/themes/smartpocket/language/sv_SE/theme.lang.php
index 1f10442fe..45c118317 100755
--- a/themes/smartpocket/language/sv_SE/theme.lang.php
+++ b/themes/smartpocket/language/sv_SE/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/ta_IN/theme.lang.php b/themes/smartpocket/language/ta_IN/theme.lang.php
index 4dd0452ce..688db3e59 100755
--- a/themes/smartpocket/language/ta_IN/theme.lang.php
+++ b/themes/smartpocket/language/ta_IN/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/th_TH/theme.lang.php b/themes/smartpocket/language/th_TH/theme.lang.php
index fc778def4..0c663dc88 100755
--- a/themes/smartpocket/language/th_TH/theme.lang.php
+++ b/themes/smartpocket/language/th_TH/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/tr_TR/theme.lang.php b/themes/smartpocket/language/tr_TR/theme.lang.php
index 176097554..106bba026 100755
--- a/themes/smartpocket/language/tr_TR/theme.lang.php
+++ b/themes/smartpocket/language/tr_TR/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/uk_UA/theme.lang.php b/themes/smartpocket/language/uk_UA/theme.lang.php
index c1a4ac9f7..e85950535 100755
--- a/themes/smartpocket/language/uk_UA/theme.lang.php
+++ b/themes/smartpocket/language/uk_UA/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/vi_VN/theme.lang.php b/themes/smartpocket/language/vi_VN/theme.lang.php
index c7517ff2b..0e1ca0162 100755
--- a/themes/smartpocket/language/vi_VN/theme.lang.php
+++ b/themes/smartpocket/language/vi_VN/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/zh_CN/theme.lang.php b/themes/smartpocket/language/zh_CN/theme.lang.php
index 38e61756c..1fd2881f2 100755
--- a/themes/smartpocket/language/zh_CN/theme.lang.php
+++ b/themes/smartpocket/language/zh_CN/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/zh_HK/theme.lang.php b/themes/smartpocket/language/zh_HK/theme.lang.php
index 954457adf..14c599ae5 100755
--- a/themes/smartpocket/language/zh_HK/theme.lang.php
+++ b/themes/smartpocket/language/zh_HK/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/themes/smartpocket/language/zh_TW/theme.lang.php b/themes/smartpocket/language/zh_TW/theme.lang.php
index f5cad27d1..5a4b38e87 100755
--- a/themes/smartpocket/language/zh_TW/theme.lang.php
+++ b/themes/smartpocket/language/zh_TW/theme.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/tools/index.php b/tools/index.php
index c8de97f60..0b96c3efa 100644
--- a/tools/index.php
+++ b/tools/index.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/tools/metadata.php b/tools/metadata.php
index c0b390f43..17d69677f 100644
--- a/tools/metadata.php
+++ b/tools/metadata.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/tools/pwg_rel_create.sh b/tools/pwg_rel_create.sh
index 57a9f1cfa..f891d55e1 100755
--- a/tools/pwg_rel_create.sh
+++ b/tools/pwg_rel_create.sh
@@ -7,16 +7,17 @@
# | project : Piwigo |
# +--------------------------------------------------------------------------+
-if [ $# -lt 2 ]
+if [ $# -lt 1 ]
then
echo
- echo 'usage : '$(basename $0)' <tag> <version number>'
+ echo 'usage : '$(basename $0)' <version number> [<sha>]'
echo
exit 1
fi
-tag=$1
-version=$2
+version=$1
+
+sha=$2
name=piwigo-$version
@@ -29,19 +30,36 @@ fi
mkdir $version
cd $version
-svn export http://piwigo.org/svn/tags/$tag piwigo
+git clone https://github.com/Piwigo/Piwigo.git piwigo
+cd piwigo
+if [ $# -eq 2 ]
+then
+ git checkout $2
+fi
-mkdir piwigo/_data
-touch piwigo/_data/dummy.txt
+cd plugins
+git clone https://github.com/Piwigo/TakeATour.git
+git clone https://github.com/Piwigo/AdminTools.git
+git clone https://github.com/Piwigo/LocalFilesEditor.git
+git clone https://github.com/Piwigo/LanguageSwitch.git
+
+rm -rf /tmp/$version/piwigo/.git
+rm -rf /tmp/$version/piwigo/plugins/*/.git
+
+cd /tmp/$version
mkdir piwigo/upload
+mkdir piwigo/_data
+touch piwigo/_data/dummy.txt
zip -r $name-nochmod.zip piwigo
chmod -R a+w piwigo/local
chmod a+w piwigo/_data
chmod a+w piwigo/upload
+chmod a+w piwigo/plugins
+chmod a+w piwigo/themes
zip -r $name.zip piwigo
diff --git a/tools/translation_analysis.php b/tools/translation_analysis.php
index 3fb120d2c..a80d6e894 100644
--- a/tools/translation_analysis.php
+++ b/tools/translation_analysis.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/tools/triggers_list.php b/tools/triggers_list.php
index fda170950..4596ba8d1 100644
--- a/tools/triggers_list.php
+++ b/tools/triggers_list.php
@@ -912,8 +912,8 @@ array(
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Piwigo Core Triggers</title>
- <link rel="stylesheet" type="text/css" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
- <link rel="stylesheet" type="text/css" href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/css/jquery.dataTables_themeroller.css">
+ <link rel="stylesheet" type="text/css" href="//code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
+ <link rel="stylesheet" type="text/css" href="//ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/css/jquery.dataTables_themeroller.css">
<style type="text/css">
/* BEGIN CSS RESET
@@ -1020,12 +1020,12 @@ array(
</div> <!-- the_page -->
<div id="the_footer">
- Copyright &copy; 2002-2013 <a href="http://piwigo.org">Piwigo Team</a>
+ Copyright &copy; 2002-2016 <a href="http://piwigo.org">Piwigo Team</a>
</div> <!-- the_footer -->
-<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
-<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script>
+<script type="text/javascript" src="//code.jquery.com/jquery-1.9.1.min.js"></script>
+<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script>
<script type="text/javascript">
var oTable = $('#list').dataTable({
diff --git a/tools/ws.htm b/tools/ws.htm
index 22af3d8e7..a97d16904 100644
--- a/tools/ws.htm
+++ b/tools/ws.htm
@@ -4,7 +4,7 @@
<meta charset="utf-8">
<title>Piwigo web API (web-services) explorer</title>
- <link rel="stylesheet" href="http://cdn.jsdelivr.net/tiptip/1.3/tipTip.css">
+ <link rel="stylesheet" href="//cdn.jsdelivr.net/tiptip/1.3/tipTip.css">
<style>
/* BEGIN CSS RESET
@@ -242,11 +242,11 @@
</div> <!-- the_page -->
<div id="the_footer">
- Copyright &copy; 2002-2013 <a href="http://piwigo.org">Piwigo Team</a>
+ Copyright &copy; 2002-2016 <a href="http://piwigo.org">Piwigo Team</a>
</div> <!-- the_footer -->
-<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
-<script src="https://cdn.jsdelivr.net/tiptip/1.3/jquery.tipTip.minified.js"></script>
+<script src="//code.jquery.com/jquery-1.9.1.min.js"></script>
+<script src="//cdn.jsdelivr.net/tiptip/1.3/jquery.tipTip.minified.js"></script>
<script>
// global vars
@@ -571,4 +571,4 @@ function invokeMethod(methodName, newWindow) {
</script>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/upgrade.php b/upgrade.php
index 4b4e9ecbc..e67d8fa0f 100644
--- a/upgrade.php
+++ b/upgrade.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -50,6 +50,7 @@ define('UPGRADES_PATH', PHPWG_ROOT_PATH.'install/db');
include_once(PHPWG_ROOT_PATH.'include/functions.inc.php');
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
+include_once(PHPWG_ROOT_PATH . 'include/template.class.php');
// +-----------------------------------------------------------------------+
// | functions |
diff --git a/upgrade_feed.php b/upgrade_feed.php
index 77e2aea8a..2e30bfda5 100644
--- a/upgrade_feed.php
+++ b/upgrade_feed.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
diff --git a/ws.php b/ws.php
index 5e4500120..66e6a707d 100644
--- a/ws.php
+++ b/ws.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
@@ -293,11 +293,16 @@ function ws_addDefaultMethods( $arr )
'pwg.images.setRank',
'ws_images_setRank',
array(
- 'image_id' => array('type'=>WS_TYPE_ID),
+ 'image_id' => array('type'=>WS_TYPE_ID,'flags'=>WS_PARAM_FORCE_ARRAY),
'category_id' => array('type'=>WS_TYPE_ID),
- 'rank' => array('type'=>WS_TYPE_INT|WS_TYPE_POSITIVE|WS_TYPE_NOTNULL)
- ),
- 'Sets the rank of a photo for a given album.',
+ 'rank' => array('type'=>WS_TYPE_INT|WS_TYPE_POSITIVE|WS_TYPE_NOTNULL, 'default'=>null)
+ ),
+ 'Sets the rank of a photo for a given album.
+<br><br>If you provide a list for image_id:
+<ul>
+<li>rank becomes useless, only the order of the image_id list matters</li>
+<li>you are supposed to provide the list of all image_ids belonging to the album.
+</ul>',
$ws_functions_root . 'pwg.images.php',
array('admin_only'=>true, 'post_only'=>true)
);
@@ -570,6 +575,28 @@ function ws_addDefaultMethods( $arr )
$ws_functions_root . 'pwg.categories.php',
array('admin_only'=>true, 'post_only'=>true)
);
+
+ $service->addMethod(
+ 'pwg.categories.deleteRepresentative',
+ 'ws_categories_deleteRepresentative',
+ array(
+ 'category_id' => array('type'=>WS_TYPE_ID),
+ ),
+ 'Deletes the album thumbnail. Only possible if $conf[\'allow_random_representative\']',
+ $ws_functions_root . 'pwg.categories.php',
+ array('admin_only'=>true, 'post_only'=>true)
+ );
+
+ $service->addMethod(
+ 'pwg.categories.refreshRepresentative',
+ 'ws_categories_refreshRepresentative',
+ array(
+ 'category_id' => array('type'=>WS_TYPE_ID),
+ ),
+ 'Find a new album thumbnail.',
+ $ws_functions_root . 'pwg.categories.php',
+ array('admin_only'=>true, 'post_only'=>true)
+ );
$service->addMethod(
'pwg.tags.getAdminList',